diff -Nrcpad gcc-16-20251221/LAST_UPDATED gcc-16-20251228/LAST_UPDATED
*** gcc-16-20251221/LAST_UPDATED	Sun Dec 21 22:32:19 2025
--- gcc-16-20251228/LAST_UPDATED	Sun Dec 28 22:32:22 2025
***************
*** 1 ****
! Obtained from git: master revision abf3f0b24c4d07649266371c0f8f9625dff58cd3
--- 1 ----
! Obtained from git: master revision b276de7be7b363b1951ae24b89b48ea98ba2b6bd
diff -Nrcpad gcc-16-20251221/MD5SUMS gcc-16-20251228/MD5SUMS
*** gcc-16-20251221/MD5SUMS	Sun Dec 21 22:32:24 2025
--- gcc-16-20251228/MD5SUMS	Sun Dec 28 22:32:27 2025
***************
*** 1,5 ****
  # This file contains the MD5 checksums of the files in the
! # gcc-16-20251221.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-16-20251228.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
*************** d32239bcb673463ab874e80d47fae504  COPYIN
*** 27,33 ****
  fd4ecdf5d672efe2b0e409aca9cf9446  ChangeLog.jit
  09538b708302f1735f6fa05b622ecf5e  ChangeLog.tree-ssa
  24ab760126489e69436a43185dc3d202  INSTALL/README
! 1aa1d3c30e25699578c67fd68e59bf6c  LAST_UPDATED
  6ee7d877589ec941194b43f62471d36e  MAINTAINERS
  303dcd6947e003fbebd9a1ba06190d09  Makefile.def
  97cb7e7715d72f600061eb2b788d9978  Makefile.in
--- 27,33 ----
  fd4ecdf5d672efe2b0e409aca9cf9446  ChangeLog.jit
  09538b708302f1735f6fa05b622ecf5e  ChangeLog.tree-ssa
  24ab760126489e69436a43185dc3d202  INSTALL/README
! 09c22517ee01f47ee1665718b57d7bc5  LAST_UPDATED
  6ee7d877589ec941194b43f62471d36e  MAINTAINERS
  303dcd6947e003fbebd9a1ba06190d09  Makefile.def
  97cb7e7715d72f600061eb2b788d9978  Makefile.in
*************** e2dc6b4fd62b77bff96b7951ef74f78f  config
*** 157,163 ****
  db74a73c3c9c3cc71edec37c2436e082  config/zstd.m4
  0b6010fb983df11ebb5c12f5c5dc8eb2  configure
  009d477c9585e404e95af2bca3f1078f  configure.ac
! 65bd146a1c83dec54eb92a4358fba1b4  contrib/ChangeLog
  5fc435c7928f858246df931ea3f3ece7  contrib/ChangeLog.jit
  7af8d2979bf1a7cfa88e30d05fa22be2  contrib/ChangeLog.tree-ssa
  13605e5ba7b533ecbe3a902b8ebe4079  contrib/analyze_brprob.py
--- 157,163 ----
  db74a73c3c9c3cc71edec37c2436e082  config/zstd.m4
  0b6010fb983df11ebb5c12f5c5dc8eb2  configure
  009d477c9585e404e95af2bca3f1078f  configure.ac
! 213273ae2ca62b6d32d1a0638c99f396  contrib/ChangeLog
  5fc435c7928f858246df931ea3f3ece7  contrib/ChangeLog.jit
  7af8d2979bf1a7cfa88e30d05fa22be2  contrib/ChangeLog.tree-ssa
  13605e5ba7b533ecbe3a902b8ebe4079  contrib/analyze_brprob.py
*************** dc562ddb86567c65e82953825713dc4b  contri
*** 334,340 ****
  0ef1f0f3b8112a12de68f806daf96994  contrib/relpath.sh
  5e4ee087708d8039fdd3e37392496a3f  contrib/repro_fail
  7a4452f82f140141ca92ef50ae08afe8  contrib/sarif-listener.py
! 54653f415e3cc68669f9053dd8b05a8b  contrib/test_installed
  b60f03a88bd6e5db8ea8361daec256ea  contrib/test_mklog.py
  2c2a06a23394c548bb4afba3c25aacce  contrib/test_recheck
  c650e776de65a2de80bbfb0033641805  contrib/test_summary
--- 334,340 ----
  0ef1f0f3b8112a12de68f806daf96994  contrib/relpath.sh
  5e4ee087708d8039fdd3e37392496a3f  contrib/repro_fail
  7a4452f82f140141ca92ef50ae08afe8  contrib/sarif-listener.py
! f732fa60caeddc36c4d0a20984ecc049  contrib/test_installed
  b60f03a88bd6e5db8ea8361daec256ea  contrib/test_mklog.py
  2c2a06a23394c548bb4afba3c25aacce  contrib/test_recheck
  c650e776de65a2de80bbfb0033641805  contrib/test_summary
*************** a22e70b3f29292d0e628450f4bb11e62  fixinc
*** 521,527 ****
  a916467b91076e631dd8edb7424769c7  gcc/COPYING.LIB
  d32239bcb673463ab874e80d47fae504  gcc/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/COPYING3.LIB
! 77cc69c48d39d8968e3c7dbc2e2d1da3  gcc/ChangeLog
  51281e73aa07fb62394bd72f3c9299ba  gcc/ChangeLog-1997
  f77af8c9ac412064886b00c5506123b5  gcc/ChangeLog-1998
  00a2e4ead1b289bf69bca0196fed6f9f  gcc/ChangeLog-1999
--- 521,527 ----
  a916467b91076e631dd8edb7424769c7  gcc/COPYING.LIB
  d32239bcb673463ab874e80d47fae504  gcc/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/COPYING3.LIB
! fc04a8c74cb1c907f4ed0f5bac74bb90  gcc/ChangeLog
  51281e73aa07fb62394bd72f3c9299ba  gcc/ChangeLog-1997
  f77af8c9ac412064886b00c5506123b5  gcc/ChangeLog-1998
  00a2e4ead1b289bf69bca0196fed6f9f  gcc/ChangeLog-1999
*************** fb3fadb88e1d2b3b640cfaaa5ff11780  gcc/Ch
*** 558,564 ****
  3eb07e0b2e542409bf73d359f7f65609  gcc/ChangeLog.ptr
  e13638e26743ba41e6011b76cc00d9a9  gcc/ChangeLog.tree-ssa
  739ab47f6425bcea1d05e4fc0542de54  gcc/ChangeLog.tuples
! 80eaeb503dc99d61b09368710ba0023d  gcc/DATESTAMP
  deb513e591f23901188e22323bd3b1d4  gcc/DEV-PHASE
  eb92e1ff5e982ca07e173e0eb286d243  gcc/FSFChangeLog
  30e1e33411566388b3164558482dc5e6  gcc/FSFChangeLog.10
--- 558,564 ----
  3eb07e0b2e542409bf73d359f7f65609  gcc/ChangeLog.ptr
  e13638e26743ba41e6011b76cc00d9a9  gcc/ChangeLog.tree-ssa
  739ab47f6425bcea1d05e4fc0542de54  gcc/ChangeLog.tuples
! a7f0ca219b755bf8e853e0934eb3682b  gcc/DATESTAMP
  deb513e591f23901188e22323bd3b1d4  gcc/DEV-PHASE
  eb92e1ff5e982ca07e173e0eb286d243  gcc/FSFChangeLog
  30e1e33411566388b3164558482dc5e6  gcc/FSFChangeLog.10
*************** ec6799501b2eb2923d5de6a66169dbd2  gcc/ON
*** 570,576 ****
  ee95df275c932cada412ed8168975af9  gcc/acinclude.m4
  e74733ebf762151e601c9e0aa1461a20  gcc/aclocal.m4
  16a499934b71eb6cf7c0d6899cd6006a  gcc/ada/.gitignore
! 43a94527a053439df886bcf0b5bdd2cd  gcc/ada/ChangeLog
  c2094c0d3135f9ac89917f162046ee04  gcc/ada/ChangeLog-2001
  fa410b57f5d814d5d3ac3b45f486cdcf  gcc/ada/ChangeLog-2002
  2dbefa7bdc8dc28ec746002028861278  gcc/ada/ChangeLog-2003
--- 570,576 ----
  ee95df275c932cada412ed8168975af9  gcc/acinclude.m4
  e74733ebf762151e601c9e0aa1461a20  gcc/aclocal.m4
  16a499934b71eb6cf7c0d6899cd6006a  gcc/ada/.gitignore
! bf89ed5d95a162d518f75b0b01d76a0f  gcc/ada/ChangeLog
  c2094c0d3135f9ac89917f162046ee04  gcc/ada/ChangeLog-2001
  fa410b57f5d814d5d3ac3b45f486cdcf  gcc/ada/ChangeLog-2002
  2dbefa7bdc8dc28ec746002028861278  gcc/ada/ChangeLog-2003
*************** ff29a10285881817c71f15a28a61496e  gcc/ad
*** 850,856 ****
  a74b4504c5ad4ed4e963f0691c289b40  gcc/ada/gcc-interface/system.ads
  b350a6fd65cafe8bd47dc42192437310  gcc/ada/gcc-interface/targtyps.cc
  d7f5374a67a40e0ebecaf6ba95369af1  gcc/ada/gcc-interface/trans.cc
! 8a5eb8d9b0562b4cd7b4b3a7f76673ff  gcc/ada/gcc-interface/utils.cc
  0b638ee76fd250092e4f0077d2deb899  gcc/ada/gcc-interface/utils2.cc
  c890d810259c6c7abec61c9108498443  gcc/ada/gen_il-fields.ads
  cb6e91720726277e3f4542d2859a43b0  gcc/ada/gen_il-gen-gen_entities.adb
--- 850,856 ----
  a74b4504c5ad4ed4e963f0691c289b40  gcc/ada/gcc-interface/system.ads
  b350a6fd65cafe8bd47dc42192437310  gcc/ada/gcc-interface/targtyps.cc
  d7f5374a67a40e0ebecaf6ba95369af1  gcc/ada/gcc-interface/trans.cc
! 6c659b49ea852f0604a3a5d030f4a411  gcc/ada/gcc-interface/utils.cc
  0b638ee76fd250092e4f0077d2deb899  gcc/ada/gcc-interface/utils2.cc
  c890d810259c6c7abec61c9108498443  gcc/ada/gen_il-fields.ads
  cb6e91720726277e3f4542d2859a43b0  gcc/ada/gen_il-gen-gen_entities.adb
*************** cbf1143b39dba16ccff2bad507662b80  gcc/ad
*** 2891,2897 ****
  3bf01e026b494a442389a5d3541785b8  gcc/ada/seh_init.c
  a424011f3e6f5e5a1163e2a9e1324779  gcc/ada/sem.adb
  b1230ac9f3cae75bd98a0fc5e0fabdcf  gcc/ada/sem.ads
! 35bea96899d106c6584dbdbff3268c97  gcc/ada/sem_aggr.adb
  d9e9e67a1e6554ab3bc7e11269dd3763  gcc/ada/sem_aggr.ads
  48c6d5f87fb01a1edbebfe650a4c50e6  gcc/ada/sem_attr.adb
  2a239613f39312b54ea82d1e690a3ea2  gcc/ada/sem_attr.ads
--- 2891,2897 ----
  3bf01e026b494a442389a5d3541785b8  gcc/ada/seh_init.c
  a424011f3e6f5e5a1163e2a9e1324779  gcc/ada/sem.adb
  b1230ac9f3cae75bd98a0fc5e0fabdcf  gcc/ada/sem.ads
! b62d4cc936d21033e3c3f31cccde09e7  gcc/ada/sem_aggr.adb
  d9e9e67a1e6554ab3bc7e11269dd3763  gcc/ada/sem_aggr.ads
  48c6d5f87fb01a1edbebfe650a4c50e6  gcc/ada/sem_attr.adb
  2a239613f39312b54ea82d1e690a3ea2  gcc/ada/sem_attr.ads
*************** e364f4e3ae92066699cc93a8f7b828c1  gcc/ad
*** 2905,2919 ****
  6e34ce648cfc10b24c12b68e0e59dcb8  gcc/ada/sem_ch10.ads
  5980a02146588bf0e31ced2382290670  gcc/ada/sem_ch11.adb
  1b6f89866a5d427002df059be3847d62  gcc/ada/sem_ch11.ads
! 10f6c702173a27e75cdc1ced5bbe58fd  gcc/ada/sem_ch12.adb
  f981520c42b732545be8bb5c8813ccfd  gcc/ada/sem_ch12.ads
! ab726649c68610977b83977d89dcbd52  gcc/ada/sem_ch13.adb
  42a7b1073e168e8be85f2203fbddd148  gcc/ada/sem_ch13.ads
  315fd6d2d78d4e9e5bb5ad516e031dbb  gcc/ada/sem_ch2.adb
  2471d629be4739ff5135aa87a2ec9166  gcc/ada/sem_ch2.ads
  e096bc417315d565cb772d1957d16c3f  gcc/ada/sem_ch3.adb
  76abe89b089728c6eaca6f7593348732  gcc/ada/sem_ch3.ads
! 2c8c790ef68f9ec9944eff6c3724f6b6  gcc/ada/sem_ch4.adb
  adba03aae1f439b9e9db8cea05d8e03f  gcc/ada/sem_ch4.ads
  67f40a13b7faf3883c09b190670b8ce2  gcc/ada/sem_ch5.adb
  ec8d5a42c27c46e4969c16d6e18ed276  gcc/ada/sem_ch5.ads
--- 2905,2919 ----
  6e34ce648cfc10b24c12b68e0e59dcb8  gcc/ada/sem_ch10.ads
  5980a02146588bf0e31ced2382290670  gcc/ada/sem_ch11.adb
  1b6f89866a5d427002df059be3847d62  gcc/ada/sem_ch11.ads
! e03f7dda44ea6ce7ca74188e7e77a2f4  gcc/ada/sem_ch12.adb
  f981520c42b732545be8bb5c8813ccfd  gcc/ada/sem_ch12.ads
! 734b7e1ae49a3d7b76c986949507d277  gcc/ada/sem_ch13.adb
  42a7b1073e168e8be85f2203fbddd148  gcc/ada/sem_ch13.ads
  315fd6d2d78d4e9e5bb5ad516e031dbb  gcc/ada/sem_ch2.adb
  2471d629be4739ff5135aa87a2ec9166  gcc/ada/sem_ch2.ads
  e096bc417315d565cb772d1957d16c3f  gcc/ada/sem_ch3.adb
  76abe89b089728c6eaca6f7593348732  gcc/ada/sem_ch3.ads
! f190cd83403fe2fd4fb0376f2cd1d61c  gcc/ada/sem_ch4.adb
  adba03aae1f439b9e9db8cea05d8e03f  gcc/ada/sem_ch4.ads
  67f40a13b7faf3883c09b190670b8ce2  gcc/ada/sem_ch5.adb
  ec8d5a42c27c46e4969c16d6e18ed276  gcc/ada/sem_ch5.ads
*************** c837e01542a712c622bac1cd152fc080  gcc/ad
*** 2943,2949 ****
  bcb22deebc83b966e7be367087d9fd7b  gcc/ada/sem_mech.ads
  7304f7852d0fba020920ad3bfad73bbb  gcc/ada/sem_prag.adb
  d16256f1e0a8b84763e3ccc0653e1c4b  gcc/ada/sem_prag.ads
! cb62fc472d6eb9cc1b1e2080ee88c8cf  gcc/ada/sem_res.adb
  bb01f11ceaa352a8b99f95fcbcfe97d9  gcc/ada/sem_res.ads
  28d33ede4288814374d1909847798c7d  gcc/ada/sem_scil.adb
  db6f5a37bd59fd83ff3286e71ab985fe  gcc/ada/sem_scil.ads
--- 2943,2949 ----
  bcb22deebc83b966e7be367087d9fd7b  gcc/ada/sem_mech.ads
  7304f7852d0fba020920ad3bfad73bbb  gcc/ada/sem_prag.adb
  d16256f1e0a8b84763e3ccc0653e1c4b  gcc/ada/sem_prag.ads
! 7341125505e7926196f0e0e60a727cce  gcc/ada/sem_res.adb
  bb01f11ceaa352a8b99f95fcbcfe97d9  gcc/ada/sem_res.ads
  28d33ede4288814374d1909847798c7d  gcc/ada/sem_scil.adb
  db6f5a37bd59fd83ff3286e71ab985fe  gcc/ada/sem_scil.ads
*************** cc77d76c407f099273c5d6691a91f67a  gcc/ad
*** 3057,3077 ****
  a8f3f69de7abdd693a971d4655971bf7  gcc/ada/xutil.ads
  60f1f34895b64cc9a3b2d590e6cf576f  gcc/addresses.h
  df3f6c6882fc8f715d4cc537af0f6442  gcc/adjust-alignment.cc
! 410c4f42d491d2f96b450be6f3ef8959  gcc/algol68/ChangeLog
  2a93a1799a2add5d7ad920f0001f7aa5  gcc/algol68/Make-lang.in
  7479907efeefafc7c6d3bc2aaa5c6a83  gcc/algol68/README
  fb43be530798e23528ffc144413b80a9  gcc/algol68/a68-diagnostics.cc
! 95aea877c594908679a2057305b999c8  gcc/algol68/a68-exports.cc
! a7af5f499be1e12dd2f87e36f320b220  gcc/algol68/a68-imports.cc
! fb6568756cb89923a57a423225c4550c  gcc/algol68/a68-lang.cc
  c7f3e4b6ca328ed109839fb6af254e6b  gcc/algol68/a68-low-bits.cc
  284cf6c8827f78791575949cc1f634ef  gcc/algol68/a68-low-bools.cc
  421c70a781dc2c00722aa019bc39f683  gcc/algol68/a68-low-builtins.cc
  ade291f272227055db98bddb78ff715f  gcc/algol68/a68-low-chars.cc
! 627c624b3c087448b1669f1805501cff  gcc/algol68/a68-low-clauses.cc
  e475601178306ca722c941848f7b25d7  gcc/algol68/a68-low-coercions.cc
  5aa76e1c20ed5b89f9d01211f6bb6cc6  gcc/algol68/a68-low-complex.cc
! 8cbe6bbe58fe206a93946f3a1a42b457  gcc/algol68/a68-low-decls.cc
  ef61d04fdb839242c97e53b105268e52  gcc/algol68/a68-low-generator.cc
  49e9c1592266268c752da49a2ef0bbc9  gcc/algol68/a68-low-ints.cc
  949d0f0a5f79da34ba44f79c6ebfe282  gcc/algol68/a68-low-misc.cc
--- 3057,3077 ----
  a8f3f69de7abdd693a971d4655971bf7  gcc/ada/xutil.ads
  60f1f34895b64cc9a3b2d590e6cf576f  gcc/addresses.h
  df3f6c6882fc8f715d4cc537af0f6442  gcc/adjust-alignment.cc
! aac6991996e6e2e6994ef77784f9728f  gcc/algol68/ChangeLog
  2a93a1799a2add5d7ad920f0001f7aa5  gcc/algol68/Make-lang.in
  7479907efeefafc7c6d3bc2aaa5c6a83  gcc/algol68/README
  fb43be530798e23528ffc144413b80a9  gcc/algol68/a68-diagnostics.cc
! b08aa1ab139b41b072df5992122dc052  gcc/algol68/a68-exports.cc
! 0c8aa58a486b5e005a19216f884f7620  gcc/algol68/a68-imports.cc
! bea829ce5d6b98cb3e9be17436e6b349  gcc/algol68/a68-lang.cc
  c7f3e4b6ca328ed109839fb6af254e6b  gcc/algol68/a68-low-bits.cc
  284cf6c8827f78791575949cc1f634ef  gcc/algol68/a68-low-bools.cc
  421c70a781dc2c00722aa019bc39f683  gcc/algol68/a68-low-builtins.cc
  ade291f272227055db98bddb78ff715f  gcc/algol68/a68-low-chars.cc
! 32261831ae87655b1ab393a78bdafe78  gcc/algol68/a68-low-clauses.cc
  e475601178306ca722c941848f7b25d7  gcc/algol68/a68-low-coercions.cc
  5aa76e1c20ed5b89f9d01211f6bb6cc6  gcc/algol68/a68-low-complex.cc
! 0d1ac14bae05c9d3000a860bfd235a51  gcc/algol68/a68-low-decls.cc
  ef61d04fdb839242c97e53b105268e52  gcc/algol68/a68-low-generator.cc
  49e9c1592266268c752da49a2ef0bbc9  gcc/algol68/a68-low-ints.cc
  949d0f0a5f79da34ba44f79c6ebfe282  gcc/algol68/a68-low-misc.cc
*************** de4cb485173b396d55860a98e328be5b  gcc/al
*** 3091,3127 ****
  12c8ab6b2a388a0e2ceac19f2d27d6cf  gcc/algol68/a68-low-units.cc
  bf2e9b5dd21e1dfe9dc046812e7dd756  gcc/algol68/a68-low.cc
  406bb4b4a8736ed19545acebc61effbd  gcc/algol68/a68-moids-diagnostics.cc
! 86ee3e220ec49b15faa51baf250cf66f  gcc/algol68/a68-moids-misc.cc
  93ab5a30cda3f697bee77eba313c66d6  gcc/algol68/a68-moids-to-string.cc
  c324f111303d399ec78ee3371488176f  gcc/algol68/a68-parser-attrs.def
! 9444ab5060852dcb1ca6f21c2ef2d3d6  gcc/algol68/a68-parser-bottom-up.cc
  11c6e7547ee9292410a3b91692ea6ad1  gcc/algol68/a68-parser-brackets.cc
  06167f432b9437d0cc135868d1067782  gcc/algol68/a68-parser-debug.cc
! f0ccd998d854bd7f1c8c0a97fe8dfd8d  gcc/algol68/a68-parser-extract.cc
  5aa1c44cc0b96934ca5906eb2e0e500e  gcc/algol68/a68-parser-keywords.cc
! cef52688a96e5c6b6309f823287d7460  gcc/algol68/a68-parser-modes.cc
  451910827918a165063a77e10deebc2a  gcc/algol68/a68-parser-moids-check.cc
  eb200628692c30c1ade0eaeabcddf008  gcc/algol68/a68-parser-moids-coerce.cc
  21df1102d7944e20f83a720318e21de8  gcc/algol68/a68-parser-moids-equivalence.cc
  6f1acfebba6072c81c25a2597686d0e4  gcc/algol68/a68-parser-pragmat.cc
  05804e13f2603c536bbb12fb8a5a14ff  gcc/algol68/a68-parser-prelude.cc
! df6822d94674605842ad59a947523030  gcc/algol68/a68-parser-scanner.cc
! 642248594944766b6cf1d2ee348ae403  gcc/algol68/a68-parser-scope.cc
  d259fcdbab02c9c536b330f7111ae7cf  gcc/algol68/a68-parser-serial-dsa.cc
! 82335b969057c5977552639844d93cf0  gcc/algol68/a68-parser-taxes.cc
! e746d9f904915c344c976abcd29bef7e  gcc/algol68/a68-parser-top-down.cc
  9c90243f2f2e799db194a764bb6850f4  gcc/algol68/a68-parser-victal.cc
! ad4a65779f5b2bdd083adf8457dfba32  gcc/algol68/a68-parser.cc
  bb6a9492686645cd8ede63a3aa41bb2e  gcc/algol68/a68-postulates.cc
  614ee2f3c97cf1910484b4ba1b697352  gcc/algol68/a68-tree.def
! 64a4d7c961501b931b15a7093ed28291  gcc/algol68/a68-types.h
  cddb33683b15b95275fe506ebd8903ca  gcc/algol68/a68-unistr.c
! 77b43dcdee1cd2188eef4f682069b824  gcc/algol68/a68.h
  cbc2ddca0589edc81c7df109b1a1927b  gcc/algol68/a68spec.cc
  661865b5bba0ac76e041c54bd958a1ef  gcc/algol68/config-lang.in
  3944dc558e8139d69cdc73ffdbe90cc7  gcc/algol68/ga68-exports.pk
  f150e2c760036b980e94ec7bb14e1172  gcc/algol68/ga68-internals.texi
! f06c8907496307c081014f5c878b6583  gcc/algol68/ga68.texi
  4810fa1d976ad329fa7a115292ce8fe8  gcc/algol68/ga68.vw
  0a91d85c360d5ee3eb6258aecdab4636  gcc/algol68/lang-specs.h
  e8f055cedd169c6d7c4de52b26b93634  gcc/algol68/lang.opt
--- 3091,3127 ----
  12c8ab6b2a388a0e2ceac19f2d27d6cf  gcc/algol68/a68-low-units.cc
  bf2e9b5dd21e1dfe9dc046812e7dd756  gcc/algol68/a68-low.cc
  406bb4b4a8736ed19545acebc61effbd  gcc/algol68/a68-moids-diagnostics.cc
! 42fb87b330e8ce57b613abaaca7beeb8  gcc/algol68/a68-moids-misc.cc
  93ab5a30cda3f697bee77eba313c66d6  gcc/algol68/a68-moids-to-string.cc
  c324f111303d399ec78ee3371488176f  gcc/algol68/a68-parser-attrs.def
! c3c90ed30df176e0dc435306dae0d9c4  gcc/algol68/a68-parser-bottom-up.cc
  11c6e7547ee9292410a3b91692ea6ad1  gcc/algol68/a68-parser-brackets.cc
  06167f432b9437d0cc135868d1067782  gcc/algol68/a68-parser-debug.cc
! 3816551ecc87b5ba8df5fc1d87c0c7b1  gcc/algol68/a68-parser-extract.cc
  5aa1c44cc0b96934ca5906eb2e0e500e  gcc/algol68/a68-parser-keywords.cc
! 6baa8156d0ef99a4587af1b6793d2303  gcc/algol68/a68-parser-modes.cc
  451910827918a165063a77e10deebc2a  gcc/algol68/a68-parser-moids-check.cc
  eb200628692c30c1ade0eaeabcddf008  gcc/algol68/a68-parser-moids-coerce.cc
  21df1102d7944e20f83a720318e21de8  gcc/algol68/a68-parser-moids-equivalence.cc
  6f1acfebba6072c81c25a2597686d0e4  gcc/algol68/a68-parser-pragmat.cc
  05804e13f2603c536bbb12fb8a5a14ff  gcc/algol68/a68-parser-prelude.cc
! 8f579c9e936c4f1dd431aa9768f959cf  gcc/algol68/a68-parser-scanner.cc
! 2fbb895dc9f02b95bac7addcc9cc77b2  gcc/algol68/a68-parser-scope.cc
  d259fcdbab02c9c536b330f7111ae7cf  gcc/algol68/a68-parser-serial-dsa.cc
! a9ddec5672076028211732bc7255ace7  gcc/algol68/a68-parser-taxes.cc
! fc36c82bc446f517d1380e1795c8936d  gcc/algol68/a68-parser-top-down.cc
  9c90243f2f2e799db194a764bb6850f4  gcc/algol68/a68-parser-victal.cc
! 1912e2739ae023428ee5340dfc690104  gcc/algol68/a68-parser.cc
  bb6a9492686645cd8ede63a3aa41bb2e  gcc/algol68/a68-postulates.cc
  614ee2f3c97cf1910484b4ba1b697352  gcc/algol68/a68-tree.def
! 103e13da594f7f65650996ed80df4178  gcc/algol68/a68-types.h
  cddb33683b15b95275fe506ebd8903ca  gcc/algol68/a68-unistr.c
! 0d111f17964bdb09ef68840a339afad0  gcc/algol68/a68.h
  cbc2ddca0589edc81c7df109b1a1927b  gcc/algol68/a68spec.cc
  661865b5bba0ac76e041c54bd958a1ef  gcc/algol68/config-lang.in
  3944dc558e8139d69cdc73ffdbe90cc7  gcc/algol68/ga68-exports.pk
  f150e2c760036b980e94ec7bb14e1172  gcc/algol68/ga68-internals.texi
! 5d4689cac278572e89a5655e3198cd29  gcc/algol68/ga68.texi
  4810fa1d976ad329fa7a115292ce8fe8  gcc/algol68/ga68.vw
  0a91d85c360d5ee3eb6258aecdab4636  gcc/algol68/lang-specs.h
  e8f055cedd169c6d7c4de52b26b93634  gcc/algol68/lang.opt
*************** a350e0e702ef2468ff3c700dff5b7433  gcc/at
*** 3250,3256 ****
  74de0da9c4c12c7fd923885069f35eb2  gcc/attribs.h
  54fb3cb1cab63227c50a50819ea1a3c3  gcc/auto-inc-dec.cc
  c25bbcb70f43e3c72a329043adf2c6c2  gcc/auto-obstack.h
! be3331fd428faca111f2d99c6ab5c7d4  gcc/auto-profile.cc
  89bffa3f5c7147f088b95f40000c1e56  gcc/auto-profile.h
  1fd4de40d068f0ae7857fb0c2e22e46e  gcc/avoid-store-forwarding.cc
  b187aaef50f37afeeee1f8239d5aa033  gcc/avoid-store-forwarding.h
--- 3250,3256 ----
  74de0da9c4c12c7fd923885069f35eb2  gcc/attribs.h
  54fb3cb1cab63227c50a50819ea1a3c3  gcc/auto-inc-dec.cc
  c25bbcb70f43e3c72a329043adf2c6c2  gcc/auto-obstack.h
! 6aec57d6cadb61e275bf9672f9993b5a  gcc/auto-profile.cc
  89bffa3f5c7147f088b95f40000c1e56  gcc/auto-profile.h
  1fd4de40d068f0ae7857fb0c2e22e46e  gcc/avoid-store-forwarding.cc
  b187aaef50f37afeeee1f8239d5aa033  gcc/avoid-store-forwarding.h
*************** ab9fdb6ff2584fb7c564bdd3d5546c02  gcc/bt
*** 3267,3278 ****
  c34ad434048eaf621308958d1e2665a4  gcc/builtins.cc
  8529f75c9821af4a1db265277a0ef04a  gcc/builtins.def
  08bacecaf5d3527bf3df15480fb78537  gcc/builtins.h
! 870e389cab9b1244d52936e5f2aa0f75  gcc/c-family/ChangeLog
  ea3fa1f4d7390a105fa3caab4f79aaf7  gcc/c-family/ChangeLog.gimple-classes
  9c7ff39ab2ffc5f0938f59efc3657201  gcc/c-family/c-ada-spec.cc
  4e83011bee68d9607834ed5335191d65  gcc/c-family/c-ada-spec.h
  d44a12a363aa3f6d21f2be5e2ff91306  gcc/c-family/c-attribs.cc
! 378e7c2524f6ea3c3f90790e22b8e210  gcc/c-family/c-common.cc
  461f8fd980064d18d90eacf82418efa0  gcc/c-family/c-common.def
  ca922c73fc6bf20139197b4052b563c9  gcc/c-family/c-common.h
  14ba009130187cc3d40c52c4e77f6b5f  gcc/c-family/c-cppbuiltin.cc
--- 3267,3278 ----
  c34ad434048eaf621308958d1e2665a4  gcc/builtins.cc
  8529f75c9821af4a1db265277a0ef04a  gcc/builtins.def
  08bacecaf5d3527bf3df15480fb78537  gcc/builtins.h
! 2326ada2d5d7ead306a209e69bd0c0f3  gcc/c-family/ChangeLog
  ea3fa1f4d7390a105fa3caab4f79aaf7  gcc/c-family/ChangeLog.gimple-classes
  9c7ff39ab2ffc5f0938f59efc3657201  gcc/c-family/c-ada-spec.cc
  4e83011bee68d9607834ed5335191d65  gcc/c-family/c-ada-spec.h
  d44a12a363aa3f6d21f2be5e2ff91306  gcc/c-family/c-attribs.cc
! 35fe7f3a47e796b8216bb20dad690bdd  gcc/c-family/c-common.cc
  461f8fd980064d18d90eacf82418efa0  gcc/c-family/c-common.def
  ca922c73fc6bf20139197b4052b563c9  gcc/c-family/c-common.h
  14ba009130187cc3d40c52c4e77f6b5f  gcc/c-family/c-cppbuiltin.cc
*************** a4b7179d2e948bb7586a9143fbe05593  gcc/c-
*** 3285,3291 ****
  c80c4d6e16ab46358143d22a8a146725  gcc/c-family/c-lex.cc
  c880dc584a0fd4908e5df33dd81137b8  gcc/c-family/c-objc.h
  40f1001bcd780f8409b3a7179d0591fe  gcc/c-family/c-omp.cc
! d6f330016fc2e053464709bdc03c1101  gcc/c-family/c-opts.cc
  5be37a0daa62d32d800f4818f979e598  gcc/c-family/c-pch.cc
  6e53d008a0c4738339154c353a50ff0a  gcc/c-family/c-ppoutput.cc
  cfc760e3be8b3db6dfc8fef49282c0aa  gcc/c-family/c-pragma.cc
--- 3285,3291 ----
  c80c4d6e16ab46358143d22a8a146725  gcc/c-family/c-lex.cc
  c880dc584a0fd4908e5df33dd81137b8  gcc/c-family/c-objc.h
  40f1001bcd780f8409b3a7179d0591fe  gcc/c-family/c-omp.cc
! 4b8e4cb11bec66088a42323c631f9a77  gcc/c-family/c-opts.cc
  5be37a0daa62d32d800f4818f979e598  gcc/c-family/c-pch.cc
  6e53d008a0c4738339154c353a50ff0a  gcc/c-family/c-ppoutput.cc
  cfc760e3be8b3db6dfc8fef49282c0aa  gcc/c-family/c-pragma.cc
*************** f33c757b5c412f1062f4d8d3d39ea3c5  gcc/c-
*** 3310,3317 ****
  ac5daa4f7d7788a3f68dde7fe7a25316  gcc/c-family/known-headers.h
  f09c431056b5138e7cfe8376e05de9a6  gcc/c-family/name-hint.h
  d71f74b5b48d9ec5e4e6463e7330121d  gcc/c-family/stub-objc.cc
! 04c825cba4ddca19f28cfc74976887c4  gcc/c/ChangeLog
! a1ab86dd79d40d45839823afe798673a  gcc/c/Make-lang.in
  f1e5593aebd5cffb4b3cbffe6bd0860a  gcc/c/c-aux-info.cc
  178d24653bb20936d73bad078e70763c  gcc/c/c-convert.cc
  620f96dc272db22324f7e6a369c71721  gcc/c/c-decl.cc
--- 3310,3317 ----
  ac5daa4f7d7788a3f68dde7fe7a25316  gcc/c-family/known-headers.h
  f09c431056b5138e7cfe8376e05de9a6  gcc/c-family/name-hint.h
  d71f74b5b48d9ec5e4e6463e7330121d  gcc/c-family/stub-objc.cc
! 3265cc4ab718f7e73157c7b6f800d34e  gcc/c/ChangeLog
! 6b2fa10b6d1232cc41a9c2c3d7caa44a  gcc/c/Make-lang.in
  f1e5593aebd5cffb4b3cbffe6bd0860a  gcc/c/c-aux-info.cc
  178d24653bb20936d73bad078e70763c  gcc/c/c-convert.cc
  620f96dc272db22324f7e6a369c71721  gcc/c/c-decl.cc
*************** b5a916bb9dd788754ac9e4ad7174ee74  gcc/co
*** 3484,3492 ****
  b209201703dd766f76ff5e16b99191e5  gcc/compare-elim.cc
  618780fbce0ce0cb6f9b86e079ce4e54  gcc/conditions.h
  1b4bc58c657bf910929d06d51bc8fa6c  gcc/config.build
! 368fefe24a5ecefbdefc6690ad928720  gcc/config.gcc
  053bb14b428d0f073932e88b9a29a8bd  gcc/config.host
! 81e7a5d0e9803bfab08b2b4e88fbc77f  gcc/config.in
  8e697813dc96ca90f5d0f4c196efe2cc  gcc/config/README
  a66e3cd55f15eb5f17a8d848161371a7  gcc/config/aarch64/aarch64-abi-ms-protos.h
  fc247aa8c40db38e448846ba37245cc0  gcc/config/aarch64/aarch64-abi-ms.cc
--- 3484,3492 ----
  b209201703dd766f76ff5e16b99191e5  gcc/compare-elim.cc
  618780fbce0ce0cb6f9b86e079ce4e54  gcc/conditions.h
  1b4bc58c657bf910929d06d51bc8fa6c  gcc/config.build
! c9924f73808a73393f4adb2b426216d9  gcc/config.gcc
  053bb14b428d0f073932e88b9a29a8bd  gcc/config.host
! bea580e5a232aa66db366df9132d1d42  gcc/config.in
  8e697813dc96ca90f5d0f4c196efe2cc  gcc/config/README
  a66e3cd55f15eb5f17a8d848161371a7  gcc/config/aarch64/aarch64-abi-ms-protos.h
  fc247aa8c40db38e448846ba37245cc0  gcc/config/aarch64/aarch64-abi-ms.cc
*************** fc247aa8c40db38e448846ba37245cc0  gcc/co
*** 3495,3501 ****
  25015a0315f13c9da9f02b76796af35c  gcc/config/aarch64/aarch64-builtin-pairs.def
  31cce7a398632723b6a777bda5fff7d2  gcc/config/aarch64/aarch64-builtins.cc
  482530e7572b40bc2ad01bdec0c1b97e  gcc/config/aarch64/aarch64-builtins.h
! 7e0d659d19fdff97c9d26f75609fd883  gcc/config/aarch64/aarch64-c.cc
  7e379e769908e6e6cce538dbc8872dad  gcc/config/aarch64/aarch64-coff.h
  e7499fc26ae2e35538ced2586da8b45c  gcc/config/aarch64/aarch64-cores.def
  85b8b0267c641b7fb638fffcb3016739  gcc/config/aarch64/aarch64-cost-tables.h
--- 3495,3501 ----
  25015a0315f13c9da9f02b76796af35c  gcc/config/aarch64/aarch64-builtin-pairs.def
  31cce7a398632723b6a777bda5fff7d2  gcc/config/aarch64/aarch64-builtins.cc
  482530e7572b40bc2ad01bdec0c1b97e  gcc/config/aarch64/aarch64-builtins.h
! 466998ae8638f3c1626957a6ef63b232  gcc/config/aarch64/aarch64-c.cc
  7e379e769908e6e6cce538dbc8872dad  gcc/config/aarch64/aarch64-coff.h
  e7499fc26ae2e35538ced2586da8b45c  gcc/config/aarch64/aarch64-cores.def
  85b8b0267c641b7fb638fffcb3016739  gcc/config/aarch64/aarch64-cost-tables.h
*************** cae1b2e3499c0eaecd54f578a51ffb1f  gcc/co
*** 3526,3532 ****
  3c95e830c849ee5787b2e1d5128a4bc6  gcc/config/aarch64/aarch64-modes.def
  64c80b1b7cd981b4fb4b76f7c36c9428  gcc/config/aarch64/aarch64-neon-sve-bridge-builtins.def
  f931bc8e97c2f1358ad3ad91e902d553  gcc/config/aarch64/aarch64-netbsd.h
! 984ae80e4bd29649a520a667c1e4495d  gcc/config/aarch64/aarch64-option-extensions.def
  03abf94646a4b525b350e9ecdb8e45a5  gcc/config/aarch64/aarch64-opts.h
  a349e9ba39f96f10f6c9f5e13bb8b661  gcc/config/aarch64/aarch64-passes.def
  795e3f2cbfd5544c02f823a1c1e1d618  gcc/config/aarch64/aarch64-protos.h
--- 3526,3532 ----
  3c95e830c849ee5787b2e1d5128a4bc6  gcc/config/aarch64/aarch64-modes.def
  64c80b1b7cd981b4fb4b76f7c36c9428  gcc/config/aarch64/aarch64-neon-sve-bridge-builtins.def
  f931bc8e97c2f1358ad3ad91e902d553  gcc/config/aarch64/aarch64-netbsd.h
! 4ba968b19b1f796c293c6a4f4ab5af68  gcc/config/aarch64/aarch64-option-extensions.def
  03abf94646a4b525b350e9ecdb8e45a5  gcc/config/aarch64/aarch64-opts.h
  a349e9ba39f96f10f6c9f5e13bb8b661  gcc/config/aarch64/aarch64-passes.def
  795e3f2cbfd5544c02f823a1c1e1d618  gcc/config/aarch64/aarch64-protos.h
*************** b824341b8f6fdb8eb1667425adf63db8  gcc/co
*** 3536,3567 ****
  8f28d55d0c7fc64387352822e99a37ff  gcc/config/aarch64/aarch64-simd-builtins.def
  33ce4a896b77324d9be6448637daf9ca  gcc/config/aarch64/aarch64-simd-pragma-builtins.def
  3c33a08aa401615b51ae9d17e3953501  gcc/config/aarch64/aarch64-simd.md
! fec3caf088f2add6cefcfb20f6dcae7f  gcc/config/aarch64/aarch64-sme.md
  fa6672290fdf9366d9919defcb7e41d7  gcc/config/aarch64/aarch64-speculation.cc
! 9311f63fb41454e9c423862057e8eb6b  gcc/config/aarch64/aarch64-sve-builtins-base.cc
  35bb69e0b38657d068d103a2da1b8a16  gcc/config/aarch64/aarch64-sve-builtins-base.def
  cdcf6636402c3c91eb0010325542b491  gcc/config/aarch64/aarch64-sve-builtins-base.h
! 993ce6c82fa9fb849e689abc42a6b57d  gcc/config/aarch64/aarch64-sve-builtins-functions.h
! 42a9af6f78fbb3a93e9003ecdcd12f81  gcc/config/aarch64/aarch64-sve-builtins-shapes.cc
! b253116c3233b03f9ffe694bbbc6efbe  gcc/config/aarch64/aarch64-sve-builtins-shapes.h
! f3e52f115b01c46c9eb8009d950b8d7f  gcc/config/aarch64/aarch64-sve-builtins-sme.cc
! 2c404dcd9f8edf147364f4503199c585  gcc/config/aarch64/aarch64-sve-builtins-sme.def
! 4929a2908dc0a3aaa4b8e51c84cee8c8  gcc/config/aarch64/aarch64-sve-builtins-sme.h
! 590c9c2e2c6855697cef84761c420b80  gcc/config/aarch64/aarch64-sve-builtins-sve2.cc
! 5abe907050ad53adc25993be474c39c0  gcc/config/aarch64/aarch64-sve-builtins-sve2.def
! e2d80b89552da0c6b4cb6bede3b2e573  gcc/config/aarch64/aarch64-sve-builtins-sve2.h
! 6898353f8b81b1bd82f117ddced5b0d5  gcc/config/aarch64/aarch64-sve-builtins.cc
  30d08305d5bc784af521254aea449949  gcc/config/aarch64/aarch64-sve-builtins.def
! ae7ea468046099ae99d717e107a85497  gcc/config/aarch64/aarch64-sve-builtins.h
  8a1b76053840bf68b3da053c081081e8  gcc/config/aarch64/aarch64-sve.md
! 0e48ec989797cfed5b216617692403e9  gcc/config/aarch64/aarch64-sve2.md
  28e8e7965d9ed466a7d53a53e2ec7397  gcc/config/aarch64/aarch64-sys-regs.def
  33a2011b9d1511f6f2a48135ef9c91dc  gcc/config/aarch64/aarch64-tune.md
  dec4c8fd03ac5636ba08d9523bee06be  gcc/config/aarch64/aarch64-tuning-enums.def
  586e3b2fd446baa0a6fb8da7c8cdd660  gcc/config/aarch64/aarch64-tuning-flags.def
  a5cfcce7c9dd86a597161f8bde3497bc  gcc/config/aarch64/aarch64-vxworks.h
  3f7c6df51b76ab25035de3053a673245  gcc/config/aarch64/aarch64.cc
! f12af72da57c184e7695a3c2f0fe3556  gcc/config/aarch64/aarch64.h
  780d9d855b48ffb7caa40ded2d64fc99  gcc/config/aarch64/aarch64.md
  09d9d492d98449c69cd0c4ae255cc135  gcc/config/aarch64/aarch64.opt
  f8862c1a17df0d9164d1f07fc8288527  gcc/config/aarch64/aarch64.opt.urls
--- 3536,3567 ----
  8f28d55d0c7fc64387352822e99a37ff  gcc/config/aarch64/aarch64-simd-builtins.def
  33ce4a896b77324d9be6448637daf9ca  gcc/config/aarch64/aarch64-simd-pragma-builtins.def
  3c33a08aa401615b51ae9d17e3953501  gcc/config/aarch64/aarch64-simd.md
! 05f6c217c67e2639f9867591258cd070  gcc/config/aarch64/aarch64-sme.md
  fa6672290fdf9366d9919defcb7e41d7  gcc/config/aarch64/aarch64-speculation.cc
! a2d209561268ad91d7e457f0b1032a2f  gcc/config/aarch64/aarch64-sve-builtins-base.cc
  35bb69e0b38657d068d103a2da1b8a16  gcc/config/aarch64/aarch64-sve-builtins-base.def
  cdcf6636402c3c91eb0010325542b491  gcc/config/aarch64/aarch64-sve-builtins-base.h
! 6755b4c343f9f1f9c1be5d0270d27922  gcc/config/aarch64/aarch64-sve-builtins-functions.h
! 9661b19d3497e81e117d8d7196d54e88  gcc/config/aarch64/aarch64-sve-builtins-shapes.cc
! c9591a76182fa50fc0b4d187f9f5f346  gcc/config/aarch64/aarch64-sve-builtins-shapes.h
! 3ac3b7bc65936a7bf55543df0373a3a5  gcc/config/aarch64/aarch64-sve-builtins-sme.cc
! 909caebdb8f0258b106a438cd01a89b9  gcc/config/aarch64/aarch64-sve-builtins-sme.def
! 2ffc5da7ad0764ff7c2a9b2ddc0ffa83  gcc/config/aarch64/aarch64-sve-builtins-sme.h
! 0b5a0fba779a0db676049359305ef4d9  gcc/config/aarch64/aarch64-sve-builtins-sve2.cc
! 5bce6072744110d31419744b34abbfb4  gcc/config/aarch64/aarch64-sve-builtins-sve2.def
! a94fbdcf273beaf3f7dc9b0232f59008  gcc/config/aarch64/aarch64-sve-builtins-sve2.h
! f9a14521e1c592d90826ca132c49bd21  gcc/config/aarch64/aarch64-sve-builtins.cc
  30d08305d5bc784af521254aea449949  gcc/config/aarch64/aarch64-sve-builtins.def
! d3494a569d80b1432fd133c85d82a852  gcc/config/aarch64/aarch64-sve-builtins.h
  8a1b76053840bf68b3da053c081081e8  gcc/config/aarch64/aarch64-sve.md
! 2db538a883237ee4c861b2dccfb78d63  gcc/config/aarch64/aarch64-sve2.md
  28e8e7965d9ed466a7d53a53e2ec7397  gcc/config/aarch64/aarch64-sys-regs.def
  33a2011b9d1511f6f2a48135ef9c91dc  gcc/config/aarch64/aarch64-tune.md
  dec4c8fd03ac5636ba08d9523bee06be  gcc/config/aarch64/aarch64-tuning-enums.def
  586e3b2fd446baa0a6fb8da7c8cdd660  gcc/config/aarch64/aarch64-tuning-flags.def
  a5cfcce7c9dd86a597161f8bde3497bc  gcc/config/aarch64/aarch64-vxworks.h
  3f7c6df51b76ab25035de3053a673245  gcc/config/aarch64/aarch64.cc
! 35bd24c49c9b76038f20348fb50ac080  gcc/config/aarch64/aarch64.h
  780d9d855b48ffb7caa40ded2d64fc99  gcc/config/aarch64/aarch64.md
  09d9d492d98449c69cd0c4ae255cc135  gcc/config/aarch64/aarch64.opt
  f8862c1a17df0d9164d1f07fc8288527  gcc/config/aarch64/aarch64.opt.urls
*************** f7165d62ef852e1929a8fc9a85c01ab2  gcc/co
*** 3587,3593 ****
  dfcdbda4a3bb64a86fdf64ce6fce0ae3  gcc/config/aarch64/geniterators.sh
  bc3b4ebfac8bfd42d3e9098f33585afd  gcc/config/aarch64/gentune.sh
  86eaf33edeb885c2c9ae2a9825879e59  gcc/config/aarch64/host-aarch64-darwin.cc
! 2ea2b0b7b7b048a2752ccbbfa70b263b  gcc/config/aarch64/iterators.md
  811f43b19ba5f415244c59b4ab377445  gcc/config/aarch64/neoversev2.md
  b382a70dce13e2b3d554e31443c0dbf0  gcc/config/aarch64/olympus.md
  253b9fee72bea13aedb53832fd8fad3f  gcc/config/aarch64/predicates.md
--- 3587,3593 ----
  dfcdbda4a3bb64a86fdf64ce6fce0ae3  gcc/config/aarch64/geniterators.sh
  bc3b4ebfac8bfd42d3e9098f33585afd  gcc/config/aarch64/gentune.sh
  86eaf33edeb885c2c9ae2a9825879e59  gcc/config/aarch64/host-aarch64-darwin.cc
! 96f587b3f55b146000433b2e2fd5b467  gcc/config/aarch64/iterators.md
  811f43b19ba5f415244c59b4ab377445  gcc/config/aarch64/neoversev2.md
  b382a70dce13e2b3d554e31443c0dbf0  gcc/config/aarch64/olympus.md
  253b9fee72bea13aedb53832fd8fad3f  gcc/config/aarch64/predicates.md
*************** d578483d595eda053ea3a6aec6d76791  gcc/co
*** 4285,4291 ****
  447fc32a81e923c898e71507fa56d7b8  gcc/config/i386/i386.h
  1b4da652934a883d353f3589b37ff2d8  gcc/config/i386/i386.md
  e792289f6c7c1f8981a08c25388c504e  gcc/config/i386/i386.opt
! da9fed301f222c1a1a945281ebde6199  gcc/config/i386/i386.opt.urls
  f22876926ff4a2cb67b105ac266c72ea  gcc/config/i386/i386elf.h
  12088706f0584b21b2bf165c3cde88e8  gcc/config/i386/ia32intrin.h
  116503ecbb821bb13293049d85a641f9  gcc/config/i386/iamcu.h
--- 4285,4291 ----
  447fc32a81e923c898e71507fa56d7b8  gcc/config/i386/i386.h
  1b4da652934a883d353f3589b37ff2d8  gcc/config/i386/i386.md
  e792289f6c7c1f8981a08c25388c504e  gcc/config/i386/i386.opt
! ab37b1a6526c4ed87f53f795354f6487  gcc/config/i386/i386.opt.urls
  f22876926ff4a2cb67b105ac266c72ea  gcc/config/i386/i386elf.h
  12088706f0584b21b2bf165c3cde88e8  gcc/config/i386/ia32intrin.h
  116503ecbb821bb13293049d85a641f9  gcc/config/i386/iamcu.h
*************** de4e89bc042c6bc7eb093bda5d33a266  gcc/co
*** 4345,4351 ****
  8de7167e1276b863c6acf2d3e926bc67  gcc/config/i386/sm3intrin.h
  380f2e50c7d803059b0e7617da00460f  gcc/config/i386/sm4intrin.h
  a24296639492577352dd1309b136bc9a  gcc/config/i386/smmintrin.h
! ffbc43ec2b7f2d37d4a6f69f70d5a345  gcc/config/i386/sol2.h
  50cad2e6257deb95c6bf2279043a27e9  gcc/config/i386/sse.md
  7c6ff828c11c2892168a2e450559dcb6  gcc/config/i386/ssemath.h
  7ada9f54207701e1d29fd03ea990e163  gcc/config/i386/stringop.def
--- 4345,4351 ----
  8de7167e1276b863c6acf2d3e926bc67  gcc/config/i386/sm3intrin.h
  380f2e50c7d803059b0e7617da00460f  gcc/config/i386/sm4intrin.h
  a24296639492577352dd1309b136bc9a  gcc/config/i386/smmintrin.h
! a12601fb491a6de01ed9ef45a8bdfa9c  gcc/config/i386/sol2.h
  50cad2e6257deb95c6bf2279043a27e9  gcc/config/i386/sse.md
  7c6ff828c11c2892168a2e450559dcb6  gcc/config/i386/ssemath.h
  7ada9f54207701e1d29fd03ea990e163  gcc/config/i386/stringop.def
*************** a75e468f9ce2e3115c4b7f638be7a433  gcc/co
*** 4982,4988 ****
  540013c309ceb3efb2b16d728b1fc726  gcc/config/pru/t-pru
  b4c769739d05e5eaa1450327488112ca  gcc/config/riscv/andes-23-series.md
  91ce15bd2231fd737e2e8eb9fb71ff85  gcc/config/riscv/andes-25-series.md
! 0bd6f068b6cdee24a9d6e17516ea823f  gcc/config/riscv/andes-45-series.md
  2eae3b21711e4e2497687e31b9045065  gcc/config/riscv/andes-vector-builtins-bases.cc
  181d8549717178cb0634c05f85c74374  gcc/config/riscv/andes-vector-builtins-bases.h
  1ef2b6b083b0eb40401bf59b6de22ab0  gcc/config/riscv/andes-vector-builtins-functions.def
--- 4982,4988 ----
  540013c309ceb3efb2b16d728b1fc726  gcc/config/pru/t-pru
  b4c769739d05e5eaa1450327488112ca  gcc/config/riscv/andes-23-series.md
  91ce15bd2231fd737e2e8eb9fb71ff85  gcc/config/riscv/andes-25-series.md
! 72ad344534a0420a34cb35c7bb97c351  gcc/config/riscv/andes-45-series.md
  2eae3b21711e4e2497687e31b9045065  gcc/config/riscv/andes-vector-builtins-bases.cc
  181d8549717178cb0634c05f85c74374  gcc/config/riscv/andes-vector-builtins-bases.h
  1ef2b6b083b0eb40401bf59b6de22ab0  gcc/config/riscv/andes-vector-builtins-functions.def
*************** c530e27e7ff7458093cb72dcea6d26a8  gcc/co
*** 5001,5007 ****
  70cc6640001ff23ac9b647ea784ffb2b  gcc/config/riscv/elf.h
  9a5e3c714ef42f079425c3c0af8184dc  gcc/config/riscv/freebsd.h
  9a73086e37ae8c9672fbdd8288a09c68  gcc/config/riscv/gen-riscv-ext-opt.cc
! 9b5dffc44b8bc0f4d12e2f52148750c1  gcc/config/riscv/gen-riscv-ext-texi.cc
  cf7e3b74a177d82efae8944960b963a5  gcc/config/riscv/gen-riscv-mcpu-texi.cc
  07b6093b3b5eac46d2fd1184d333101a  gcc/config/riscv/gen-riscv-mtune-texi.cc
  fdf40414be0404faa2f689ccff02d68d  gcc/config/riscv/generic-ooo.md
--- 5001,5007 ----
  70cc6640001ff23ac9b647ea784ffb2b  gcc/config/riscv/elf.h
  9a5e3c714ef42f079425c3c0af8184dc  gcc/config/riscv/freebsd.h
  9a73086e37ae8c9672fbdd8288a09c68  gcc/config/riscv/gen-riscv-ext-opt.cc
! e645acdabb090877d0dfebdb15c48ccf  gcc/config/riscv/gen-riscv-ext-texi.cc
  cf7e3b74a177d82efae8944960b963a5  gcc/config/riscv/gen-riscv-mcpu-texi.cc
  07b6093b3b5eac46d2fd1184d333101a  gcc/config/riscv/gen-riscv-mtune-texi.cc
  fdf40414be0404faa2f689ccff02d68d  gcc/config/riscv/generic-ooo.md
*************** bffa0caedd7144aff55c80a16431d1a1  gcc/co
*** 5017,5023 ****
  80e8994ee9e6abf380e68aca6443d157  gcc/config/riscv/peephole.md
  a3d3fa9142d4e2ed34ead146941c574a  gcc/config/riscv/pic.md
  674baa66306b2b08e1b80995759f5381  gcc/config/riscv/pipeline-checker
! a077a05a5835fab7137a1d41d03441b5  gcc/config/riscv/predicates.md
  cf45a8ed95fa845d6f648e14b0bc2caf  gcc/config/riscv/riscv-avlprop.cc
  179d92544e7a65f0ccf206e876026744  gcc/config/riscv/riscv-bclr-lowest-set-bit.cc
  e54a2d33c6fb9bb0381889dad6fa71d8  gcc/config/riscv/riscv-builtins.cc
--- 5017,5023 ----
  80e8994ee9e6abf380e68aca6443d157  gcc/config/riscv/peephole.md
  a3d3fa9142d4e2ed34ead146941c574a  gcc/config/riscv/pic.md
  674baa66306b2b08e1b80995759f5381  gcc/config/riscv/pipeline-checker
! bab6bf587abdb3bc61388cdbac4a14cb  gcc/config/riscv/predicates.md
  cf45a8ed95fa845d6f648e14b0bc2caf  gcc/config/riscv/riscv-avlprop.cc
  179d92544e7a65f0ccf206e876026744  gcc/config/riscv/riscv-bclr-lowest-set-bit.cc
  e54a2d33c6fb9bb0381889dad6fa71d8  gcc/config/riscv/riscv-builtins.cc
*************** b13609eaffc2081ddd2cda1290a2b2c4  gcc/co
*** 5027,5039 ****
  173996678a5bf2b1b40e30fe260109b4  gcc/config/riscv/riscv-d.cc
  790bd2a5355776ab5ebf4c7814489760  gcc/config/riscv/riscv-d.h
  5d018c4d2b91ca8e5745a3eb3b3b17cd  gcc/config/riscv/riscv-ext-andes.def
! 29843ffab8170b07cffd6a91d300e241  gcc/config/riscv/riscv-ext-corev.def
! e5ee9a298220a6317f6fd463f229fc22  gcc/config/riscv/riscv-ext-mips.def
! b6257cb327a2e9bc1b4f303235b43436  gcc/config/riscv/riscv-ext-sifive.def
  627262a9fe6f0261a9e6d59a28544d83  gcc/config/riscv/riscv-ext-spacemit.def
! ded4bbf01f624d02f029b02c9c7ac765  gcc/config/riscv/riscv-ext-thead.def
  59e2535037359d1237d4953bc6bbf7f9  gcc/config/riscv/riscv-ext-ventana.def
! 4f885a9060908c8f84ff25ad1518c05c  gcc/config/riscv/riscv-ext.def
  d72211affddf6f00b90cc9c258efe14d  gcc/config/riscv/riscv-ext.opt
  8463b74f5d66e1a7f0d58a7ae087d8ad  gcc/config/riscv/riscv-ext.opt.urls
  1b0b6b632f747d9387ef25821e8673b4  gcc/config/riscv/riscv-feature-bits.h
--- 5027,5039 ----
  173996678a5bf2b1b40e30fe260109b4  gcc/config/riscv/riscv-d.cc
  790bd2a5355776ab5ebf4c7814489760  gcc/config/riscv/riscv-d.h
  5d018c4d2b91ca8e5745a3eb3b3b17cd  gcc/config/riscv/riscv-ext-andes.def
! aadf41c085225771cd6ce50775d5af36  gcc/config/riscv/riscv-ext-corev.def
! 29b9107c732697b75e83e4edc5744cef  gcc/config/riscv/riscv-ext-mips.def
! 67fdeaeda61c9e374195850542fac177  gcc/config/riscv/riscv-ext-sifive.def
  627262a9fe6f0261a9e6d59a28544d83  gcc/config/riscv/riscv-ext-spacemit.def
! f7889a32e2873582a62173a767380834  gcc/config/riscv/riscv-ext-thead.def
  59e2535037359d1237d4953bc6bbf7f9  gcc/config/riscv/riscv-ext-ventana.def
! 1bd5efb09600356d264cde64dc2c1377  gcc/config/riscv/riscv-ext.def
  d72211affddf6f00b90cc9c258efe14d  gcc/config/riscv/riscv-ext.opt
  8463b74f5d66e1a7f0d58a7ae087d8ad  gcc/config/riscv/riscv-ext.opt.urls
  1b0b6b632f747d9387ef25821e8673b4  gcc/config/riscv/riscv-feature-bits.h
*************** da4e034d23a8f2754b1dfce0122f286e  gcc/co
*** 5051,5057 ****
  38e9863d2a2af1a5773ed060b713ccc1  gcc/config/riscv/riscv-string.cc
  3b52301e3425e6de33a2436af4de6bd8  gcc/config/riscv/riscv-subset.h
  cf55107f936e04e71b010f2f0948d4c8  gcc/config/riscv/riscv-target-attr.cc
! 6c1b54e33125042fe285e1166963f558  gcc/config/riscv/riscv-v.cc
  0d419e9df116fed7ce6e0ae15131417e  gcc/config/riscv/riscv-v.h
  c5f3161dedd668dfb126ffb191cfb236  gcc/config/riscv/riscv-vect-permconst.cc
  f7155afde45201d3356ca654c816d3a5  gcc/config/riscv/riscv-vector-builtins-bases.cc
--- 5051,5057 ----
  38e9863d2a2af1a5773ed060b713ccc1  gcc/config/riscv/riscv-string.cc
  3b52301e3425e6de33a2436af4de6bd8  gcc/config/riscv/riscv-subset.h
  cf55107f936e04e71b010f2f0948d4c8  gcc/config/riscv/riscv-target-attr.cc
! a15de370fe27c4b555047448d4110a2c  gcc/config/riscv/riscv-v.cc
  0d419e9df116fed7ce6e0ae15131417e  gcc/config/riscv/riscv-v.h
  c5f3161dedd668dfb126ffb191cfb236  gcc/config/riscv/riscv-vect-permconst.cc
  f7155afde45201d3356ca654c816d3a5  gcc/config/riscv/riscv-vector-builtins-bases.cc
*************** dba94786c1a18e3f5fbcca2b5c0af496  gcc/co
*** 5069,5079 ****
  724b5012debbc56e08795eb0d757a8ed  gcc/config/riscv/riscv-vsetvl.cc
  d120ed6eb2847b636271b3a1ef82ecbf  gcc/config/riscv/riscv-vsetvl.def
  7082a18dbfc574d47bf71f4d50dd30f9  gcc/config/riscv/riscv-zicfilp.cc
! b9dee007ac6fd1c526a645e2de3f834c  gcc/config/riscv/riscv.cc
  7a65f8b385600c8a895a04444c2334d3  gcc/config/riscv/riscv.h
! df70b8958bb33644092fa7f52e8dcb7a  gcc/config/riscv/riscv.md
! 8f19f0367d8843752ea81feb762a76b3  gcc/config/riscv/riscv.opt
! 023bd342e35c6bece5159af574ead52c  gcc/config/riscv/riscv.opt.urls
  374e3c204946cff8c4be2bcad6641830  gcc/config/riscv/riscv_bitmanip.h
  a8044652cefd826404f261518f9e2321  gcc/config/riscv/riscv_crypto.h
  d8773b3aa8a7da49d6ba814f852a218b  gcc/config/riscv/riscv_th_vector.h
--- 5069,5079 ----
  724b5012debbc56e08795eb0d757a8ed  gcc/config/riscv/riscv-vsetvl.cc
  d120ed6eb2847b636271b3a1ef82ecbf  gcc/config/riscv/riscv-vsetvl.def
  7082a18dbfc574d47bf71f4d50dd30f9  gcc/config/riscv/riscv-zicfilp.cc
! ce5c2f2b1dd1b5ad9ea908a49557abae  gcc/config/riscv/riscv.cc
  7a65f8b385600c8a895a04444c2334d3  gcc/config/riscv/riscv.h
! 7fd41cb59f6e1ef53406180c4dfd0fc3  gcc/config/riscv/riscv.md
! 736136951bde9095bc5ae95021ae1edf  gcc/config/riscv/riscv.opt
! 731a9b07f44d3d9b9c70a5418441b8d1  gcc/config/riscv/riscv.opt.urls
  374e3c204946cff8c4be2bcad6641830  gcc/config/riscv/riscv_bitmanip.h
  a8044652cefd826404f261518f9e2321  gcc/config/riscv/riscv_crypto.h
  d8773b3aa8a7da49d6ba814f852a218b  gcc/config/riscv/riscv_th_vector.h
*************** ef8111b151f28f36d377df7b23b6b46f  gcc/co
*** 5088,5097 ****
  e83086f984717f1099ceeba6ce6bfb23  gcc/config/riscv/sifive-vector-builtins-functions.def
  1c098ed3792a8a12321513c56b32c66d  gcc/config/riscv/sifive-vector.md
  b5fb046770f7e60fc485d6092c296c38  gcc/config/riscv/sifive_vector.h
! afc3d8034fa9acd880634ca7807d70a8  gcc/config/riscv/spacemit-x60.md
  faca69fa18f3f779cd3ee4d6a53e6193  gcc/config/riscv/sync-rvwmo.md
  4dff560d8961c6dd9b4dd18c668c629e  gcc/config/riscv/sync-ztso.md
! 1cffac0de41c5b63259bfec4e3c07bb0  gcc/config/riscv/sync.md
  1c27821991689abdaa7a908a0cc8dfa4  gcc/config/riscv/t-elf-multilib
  381cb38e167feed84dad697fce89cabd  gcc/config/riscv/t-linux
  1ed181a166b1d0e206c4a4e0024cce2a  gcc/config/riscv/t-linux-multilib
--- 5088,5097 ----
  e83086f984717f1099ceeba6ce6bfb23  gcc/config/riscv/sifive-vector-builtins-functions.def
  1c098ed3792a8a12321513c56b32c66d  gcc/config/riscv/sifive-vector.md
  b5fb046770f7e60fc485d6092c296c38  gcc/config/riscv/sifive_vector.h
! d40fad5e11d71b09c1d26ca322dac88f  gcc/config/riscv/spacemit-x60.md
  faca69fa18f3f779cd3ee4d6a53e6193  gcc/config/riscv/sync-rvwmo.md
  4dff560d8961c6dd9b4dd18c668c629e  gcc/config/riscv/sync-ztso.md
! 9b3ba2f8f63541c1cadce47ac58d0766  gcc/config/riscv/sync.md
  1c27821991689abdaa7a908a0cc8dfa4  gcc/config/riscv/t-elf-multilib
  381cb38e167feed84dad697fce89cabd  gcc/config/riscv/t-linux
  1ed181a166b1d0e206c4a4e0024cce2a  gcc/config/riscv/t-linux-multilib
*************** e580c199d31125b230bb2c433094bc3e  gcc/co
*** 5401,5409 ****
  f981246401dc02795a6f58eccb1240a8  gcc/config/sol2-rust.cc
  363aa40b2d2145d97c2b3b23b09d3ed3  gcc/config/sol2-stubs.cc
  a1b33a7b9e5a91f84a66b4e23338c3e1  gcc/config/sol2.cc
! b8421744612ca3c10c7ee37bab96ca77  gcc/config/sol2.h
! 4796428cc640a3b87b8371614301a450  gcc/config/sol2.opt
! c9d3baaa833c42e5184e73236cc13b0e  gcc/config/sol2.opt.urls
  c12eeb9c89d82c905c55fe4b468fd9f8  gcc/config/sparc/biarch64.h
  abda8782671a8f7c0ab0426d1e5513fa  gcc/config/sparc/constraints.md
  763db411442ef8014fc2fc4a3160ae97  gcc/config/sparc/cypress.md
--- 5401,5409 ----
  f981246401dc02795a6f58eccb1240a8  gcc/config/sol2-rust.cc
  363aa40b2d2145d97c2b3b23b09d3ed3  gcc/config/sol2-stubs.cc
  a1b33a7b9e5a91f84a66b4e23338c3e1  gcc/config/sol2.cc
! 100f8ebb0d8540edb3dfac41787f028e  gcc/config/sol2.h
! d5ace323248d9a50937975a0a5b5f43c  gcc/config/sol2.opt
! 714fd827cfd0d250f642639930eee093  gcc/config/sol2.opt.urls
  c12eeb9c89d82c905c55fe4b468fd9f8  gcc/config/sparc/biarch64.h
  abda8782671a8f7c0ab0426d1e5513fa  gcc/config/sparc/constraints.md
  763db411442ef8014fc2fc4a3160ae97  gcc/config/sparc/cypress.md
*************** ecbdfd983044f47fdfdcfd033969d564  gcc/co
*** 5427,5433 ****
  8715ec6c36122d3d59165af3ddc760ae  gcc/config/sparc/openbsd64.h
  a45c575fa02674cf0084efc660f20677  gcc/config/sparc/predicates.md
  e1394032b1fec7cdc6749467afc54d4a  gcc/config/sparc/rtemself.h
! 3780eafc8f3d12bb3118c076dc462c7b  gcc/config/sparc/sol2.h
  bf8a2f1403e13fc9157e782582c7d9b3  gcc/config/sparc/sp-elf.h
  5c39743d5de0cb72c3040a228ad6447d  gcc/config/sparc/sp64-elf.h
  e8ca4f5ac0c8f9928a51a9a82bf0480b  gcc/config/sparc/sparc-c.cc
--- 5427,5433 ----
  8715ec6c36122d3d59165af3ddc760ae  gcc/config/sparc/openbsd64.h
  a45c575fa02674cf0084efc660f20677  gcc/config/sparc/predicates.md
  e1394032b1fec7cdc6749467afc54d4a  gcc/config/sparc/rtemself.h
! 8f0ac9f0c0d7c90bbfd16c8e3393c010  gcc/config/sparc/sol2.h
  bf8a2f1403e13fc9157e782582c7d9b3  gcc/config/sparc/sp-elf.h
  5c39743d5de0cb72c3040a228ad6447d  gcc/config/sparc/sp64-elf.h
  e8ca4f5ac0c8f9928a51a9a82bf0480b  gcc/config/sparc/sparc-c.cc
*************** f154c7dc9175c4e8204205bb4fbd2cbc  gcc/co
*** 5605,5612 ****
  0e227e351d2efea226ca8c249e52aff3  gcc/config/xtensa/xtensa.md
  f0452ea712955ce21c9c149136850780  gcc/config/xtensa/xtensa.opt
  db57d7603312357e8c0cfb21c32353d1  gcc/config/xtensa/xtensa.opt.urls
! b57d777328ee2a9661db341e01f731a9  gcc/configure
! 6a02a8634fc2d88b839f9ecba76d4395  gcc/configure.ac
  ec3aa966ca3fe9c6f84d4378160541b6  gcc/context.cc
  d1bde52b8dee0c0c5506d7e320b1bb61  gcc/context.h
  a9c3cddee4e237141062720b72fe38cd  gcc/convert.cc
--- 5605,5612 ----
  0e227e351d2efea226ca8c249e52aff3  gcc/config/xtensa/xtensa.md
  f0452ea712955ce21c9c149136850780  gcc/config/xtensa/xtensa.opt
  db57d7603312357e8c0cfb21c32353d1  gcc/config/xtensa/xtensa.opt.urls
! ee1434d8774539f54f26faa0abcd8370  gcc/configure
! dde09bf6c4e64b8cfdbfede0909910f5  gcc/configure.ac
  ec3aa966ca3fe9c6f84d4378160541b6  gcc/context.cc
  d1bde52b8dee0c0c5506d7e320b1bb61  gcc/context.h
  a9c3cddee4e237141062720b72fe38cd  gcc/convert.cc
*************** a9c3cddee4e237141062720b72fe38cd  gcc/co
*** 5616,5622 ****
  5d31df44fc0a5b17beb74ce0ff38e214  gcc/coroutine-passes.cc
  02796caeaa2f14f72dc3c9c23cc97dfc  gcc/coverage.cc
  722fb5fda78e55c5af5da72cad78751f  gcc/coverage.h
! 55ee3ba48026d0355e06476163f12460  gcc/cp/ChangeLog
  70c059f2b75a2fc1bb95a526b21b8cd7  gcc/cp/ChangeLog-1993
  7cbd106e10a0ba7c052bee3fe20671c2  gcc/cp/ChangeLog-1994
  3b1e3ed23ad4363f75e6fd2fbb583dee  gcc/cp/ChangeLog-1995
--- 5616,5622 ----
  5d31df44fc0a5b17beb74ce0ff38e214  gcc/coroutine-passes.cc
  02796caeaa2f14f72dc3c9c23cc97dfc  gcc/coverage.cc
  722fb5fda78e55c5af5da72cad78751f  gcc/coverage.h
! 2197c660edc0d8414a651369484a77cc  gcc/cp/ChangeLog
  70c059f2b75a2fc1bb95a526b21b8cd7  gcc/cp/ChangeLog-1993
  7cbd106e10a0ba7c052bee3fe20671c2  gcc/cp/ChangeLog-1994
  3b1e3ed23ad4363f75e6fd2fbb583dee  gcc/cp/ChangeLog-1995
*************** bcf7c5d02934e40f17edeb18d58c4d4d  gcc/cp
*** 5651,5657 ****
  127c45265cd7f72c5d2ea0259d4bdb1e  gcc/cp/ChangeLog-2024
  c1c7801b9b0f379e702a4f6cb83972e7  gcc/cp/ChangeLog.ptr
  9aa3cd9f75c785de9f51446e3f295515  gcc/cp/ChangeLog.tree-ssa
! b4ef117247d06b2cf19a0e42dc19459c  gcc/cp/Make-lang.in
  edc9e71099a97b82445fd19c83dea072  gcc/cp/call.cc
  fce8de27014c109814b3f69be6a5d4f6  gcc/cp/cfns.gperf
  68fc21d4889b1c70ccf89747b98b1fb4  gcc/cp/cfns.h
--- 5651,5657 ----
  127c45265cd7f72c5d2ea0259d4bdb1e  gcc/cp/ChangeLog-2024
  c1c7801b9b0f379e702a4f6cb83972e7  gcc/cp/ChangeLog.ptr
  9aa3cd9f75c785de9f51446e3f295515  gcc/cp/ChangeLog.tree-ssa
! fec3fd7616012bbf817a919f2c26b840  gcc/cp/Make-lang.in
  edc9e71099a97b82445fd19c83dea072  gcc/cp/call.cc
  fce8de27014c109814b3f69be6a5d4f6  gcc/cp/cfns.gperf
  68fc21d4889b1c70ccf89747b98b1fb4  gcc/cp/cfns.h
*************** dce6e74658eab6bdf17f4f3b74e84891  gcc/cp
*** 5676,5684 ****
  8e454e3f7746836df899a46698f5af3e  gcc/cp/cxx-pretty-print.cc
  2d4d94b8a1d1c1d26764ae93a8039dda  gcc/cp/cxx-pretty-print.h
  c5f1614ded8bb57480eb7d1afecb7c7c  gcc/cp/cxxapi-data.csv
! aa7c55b3bc5dd7de044ac8709a5d8e2f  gcc/cp/decl.cc
  7f116fdc50b24dcb13cdcf096636aef9  gcc/cp/decl.h
! 9624c5a3f54ecd737591ce9cb13c32ba  gcc/cp/decl2.cc
  691a10b3246d19925433648ba9a4ea9a  gcc/cp/dump.cc
  7470ea0cf3543a1a98de1bb0a976e290  gcc/cp/error.cc
  856ffef082c6d62b43386d99e03e94b0  gcc/cp/except.cc
--- 5676,5684 ----
  8e454e3f7746836df899a46698f5af3e  gcc/cp/cxx-pretty-print.cc
  2d4d94b8a1d1c1d26764ae93a8039dda  gcc/cp/cxx-pretty-print.h
  c5f1614ded8bb57480eb7d1afecb7c7c  gcc/cp/cxxapi-data.csv
! c809ca3f582d5a4a310931f1841a654a  gcc/cp/decl.cc
  7f116fdc50b24dcb13cdcf096636aef9  gcc/cp/decl.h
! d6f31fe972f5ca8fea81c19dddb5e16b  gcc/cp/decl2.cc
  691a10b3246d19925433648ba9a4ea9a  gcc/cp/dump.cc
  7470ea0cf3543a1a98de1bb0a976e290  gcc/cp/error.cc
  856ffef082c6d62b43386d99e03e94b0  gcc/cp/except.cc
*************** aaf76a9b03fd0532d2904aef004fd66a  gcc/cp
*** 5696,5713 ****
  6c77b1fab5f6d146677090285a202a50  gcc/cp/mapper-client.h
  44e22b51797f89c9da996523a6d97f1c  gcc/cp/mapper-resolver.cc
  a87a2754a8a50d73ad227fee0e31caec  gcc/cp/method.cc
! d127347a18b541897b589ac8983500c1  gcc/cp/module.cc
  09ce3d1773fa040d7156df184f93a3ef  gcc/cp/name-lookup.cc
  31b07642e37cb14980ac9d71307ffb09  gcc/cp/name-lookup.h
  e7fe06956aada61bcaae5168ad47a9c1  gcc/cp/operators.def
  813c253a000ee20d8d6598f56edc400e  gcc/cp/optimize.cc
! 3df32cdf6de14ffb260c20baa2298171  gcc/cp/parser.cc
  dd486113810dfaf82462dc26b748a48f  gcc/cp/parser.h
! 6a8f13efd01c05fd31a21d46d8505e1b  gcc/cp/pt.cc
  b606903e35fe6806362fe4eee7a89fef  gcc/cp/ptree.cc
  3ffd52177d902f09ccffd5f1cc9dfe30  gcc/cp/rtti.cc
  9c5477f737d2c390510c3fe72454f657  gcc/cp/search.cc
! a9f602071c974a24aff7524b97028373  gcc/cp/semantics.cc
  8ccc82546d801360d2ccd8fd2a48b5d6  gcc/cp/std-name-hint.gperf
  bb87dbae9e49b63a73c4afa927a9018e  gcc/cp/std-name-hint.h
  7ba2906539e812a38fddb3fa26a4b7c3  gcc/cp/tree.cc
--- 5696,5713 ----
  6c77b1fab5f6d146677090285a202a50  gcc/cp/mapper-client.h
  44e22b51797f89c9da996523a6d97f1c  gcc/cp/mapper-resolver.cc
  a87a2754a8a50d73ad227fee0e31caec  gcc/cp/method.cc
! 2d785aca0d83d905f76e1b682c24ff63  gcc/cp/module.cc
  09ce3d1773fa040d7156df184f93a3ef  gcc/cp/name-lookup.cc
  31b07642e37cb14980ac9d71307ffb09  gcc/cp/name-lookup.h
  e7fe06956aada61bcaae5168ad47a9c1  gcc/cp/operators.def
  813c253a000ee20d8d6598f56edc400e  gcc/cp/optimize.cc
! 04cae2657e3e3d1a6f3f14a2985e7386  gcc/cp/parser.cc
  dd486113810dfaf82462dc26b748a48f  gcc/cp/parser.h
! 4d158ec444ba628cdb05d8a70b0aafa6  gcc/cp/pt.cc
  b606903e35fe6806362fe4eee7a89fef  gcc/cp/ptree.cc
  3ffd52177d902f09ccffd5f1cc9dfe30  gcc/cp/rtti.cc
  9c5477f737d2c390510c3fe72454f657  gcc/cp/search.cc
! 324ecefdcb96382764cb6529fb3c666e  gcc/cp/semantics.cc
  8ccc82546d801360d2ccd8fd2a48b5d6  gcc/cp/std-name-hint.gperf
  bb87dbae9e49b63a73c4afa927a9018e  gcc/cp/std-name-hint.h
  7ba2906539e812a38fddb3fa26a4b7c3  gcc/cp/tree.cc
*************** ee4c7654f733cefcb73d4fd24f3e1b82  gcc/do
*** 6113,6119 ****
  e9b8122841fbfbbc30fee8ed6613c399  gcc/doc/include/texinfo.tex
  b7d273b89c588dc7a8d620e6a9c90f90  gcc/doc/install.texi
  0f98706361e63fac2c35c2c4491eaac4  gcc/doc/install.texi2html
! 9b3004695965bdc199f2bd8e85f55be9  gcc/doc/invoke.texi
  47f1f55b3595acf670eb6193a0cbd933  gcc/doc/languages.texi
  8783f1b0b6c204d4417b00f3b772beea  gcc/doc/libgcc.texi
  ef4f00c423089323edef1d3cff31a4a2  gcc/doc/libgdiagnostics/Makefile
--- 6113,6119 ----
  e9b8122841fbfbbc30fee8ed6613c399  gcc/doc/include/texinfo.tex
  b7d273b89c588dc7a8d620e6a9c90f90  gcc/doc/install.texi
  0f98706361e63fac2c35c2c4491eaac4  gcc/doc/install.texi2html
! d9b7aab939a66fb722e01f1ae48bdc62  gcc/doc/invoke.texi
  47f1f55b3595acf670eb6193a0cbd933  gcc/doc/languages.texi
  8783f1b0b6c204d4417b00f3b772beea  gcc/doc/libgcc.texi
  ef4f00c423089323edef1d3cff31a4a2  gcc/doc/libgdiagnostics/Makefile
*************** a7117c4fee8c54e338b967886f3b2dcb  gcc/do
*** 6159,6165 ****
  2cd0efa7c8a7f870d4a0c0b2eed69798  gcc/doc/plugins.texi
  0603ab3940871fa2a55ddbd7c2719eb7  gcc/doc/poly-int.texi
  ee33d902cd60afae792843ff15ad6706  gcc/doc/portability.texi
! da96d460e1e7870b58a78255e3566534  gcc/doc/riscv-ext.texi
  5be8744e8eca66041e2aebc8382d0aaf  gcc/doc/riscv-mcpu.texi
  a8b6b4672f694cfa12c23ffe2f6b7de9  gcc/doc/riscv-mtune.texi
  e0434ec541556c6ba008fe012784ad16  gcc/doc/rtl.texi
--- 6159,6165 ----
  2cd0efa7c8a7f870d4a0c0b2eed69798  gcc/doc/plugins.texi
  0603ab3940871fa2a55ddbd7c2719eb7  gcc/doc/poly-int.texi
  ee33d902cd60afae792843ff15ad6706  gcc/doc/portability.texi
! 6117d3298020321158baed42eb5969a1  gcc/doc/riscv-ext.texi
  5be8744e8eca66041e2aebc8382d0aaf  gcc/doc/riscv-mcpu.texi
  a8b6b4672f694cfa12c23ffe2f6b7de9  gcc/doc/riscv-mtune.texi
  e0434ec541556c6ba008fe012784ad16  gcc/doc/rtl.texi
*************** b7bf1ecba30babcca6fcc9e9a66bebfb  gcc/fo
*** 6226,6232 ****
  17f1e7f727e08a6e42a5ecbeedca48b5  gcc/fold-const.cc
  09573b86bdb27d2d064ccdd670710fde  gcc/fold-const.h
  cd4e6baf5d162fbd41160606055f8297  gcc/fold-mem-offsets.cc
! f0d000e781d30e20bc688ae2b81cd663  gcc/fortran/ChangeLog
  083c53fadafdcf3be46713838a51e36c  gcc/fortran/ChangeLog-2002
  2a4ca18d211fb2603139354fd16398ed  gcc/fortran/ChangeLog-2003
  e7462609ebd0dd7c874e0fc00e2833aa  gcc/fortran/ChangeLog-2004
--- 6226,6232 ----
  17f1e7f727e08a6e42a5ecbeedca48b5  gcc/fold-const.cc
  09573b86bdb27d2d064ccdd670710fde  gcc/fold-const.h
  cd4e6baf5d162fbd41160606055f8297  gcc/fold-mem-offsets.cc
! 4ee7229a03b31d9caf0d344269fb71ad  gcc/fortran/ChangeLog
  083c53fadafdcf3be46713838a51e36c  gcc/fortran/ChangeLog-2002
  2a4ca18d211fb2603139354fd16398ed  gcc/fortran/ChangeLog-2003
  e7462609ebd0dd7c874e0fc00e2833aa  gcc/fortran/ChangeLog-2004
*************** d85e2f2fc3ee4721563bd47719063fb6  gcc/fo
*** 6272,6278 ****
  70111b1c7592e650c281b513c3cf2f47  gcc/fortran/dependency.h
  b9ec8a53356a221f303b3ec8bf1cad67  gcc/fortran/dump-parse-tree.cc
  fcdf26536d578abd3a720a2579b4def5  gcc/fortran/error.cc
! 4a8ae1882e9261f7beaa354b3ecaca12  gcc/fortran/expr.cc
  723c358b58284256c9b46a5358ba7050  gcc/fortran/f95-lang.cc
  5fad9972996846ea1af084cc613ae8b5  gcc/fortran/frontend-passes.cc
  a39f360f255f1ef6dfd91ccefef63e05  gcc/fortran/gfc-diagnostic.def
--- 6272,6278 ----
  70111b1c7592e650c281b513c3cf2f47  gcc/fortran/dependency.h
  b9ec8a53356a221f303b3ec8bf1cad67  gcc/fortran/dump-parse-tree.cc
  fcdf26536d578abd3a720a2579b4def5  gcc/fortran/error.cc
! 14df2c4b1f54679fe9ee8ce316172e14  gcc/fortran/expr.cc
  723c358b58284256c9b46a5358ba7050  gcc/fortran/f95-lang.cc
  5fad9972996846ea1af084cc613ae8b5  gcc/fortran/frontend-passes.cc
  a39f360f255f1ef6dfd91ccefef63e05  gcc/fortran/gfc-diagnostic.def
*************** bd08c55098f00394b9922e6163c27b92  gcc/fo
*** 6280,6286 ****
  6ab4d2bd69fb7c9806d03a83de0f7a9f  gcc/fortran/gfortran.h
  fc1726c6b4827e602f3cde01eea0478e  gcc/fortran/gfortran.texi
  af66ab40a5434219772b76ad10035e45  gcc/fortran/gfortranspec.cc
! e4fe6ce0303cd182ebd328bdb0ae5743  gcc/fortran/interface.cc
  74d5cc035a8e6ee1fb5826c965c90532  gcc/fortran/intrinsic.cc
  47e0e62e0a6eaad27941f8e734cda2a2  gcc/fortran/intrinsic.h
  e4b048e3c76dd062984cec31ab97a29d  gcc/fortran/intrinsic.texi
--- 6280,6286 ----
  6ab4d2bd69fb7c9806d03a83de0f7a9f  gcc/fortran/gfortran.h
  fc1726c6b4827e602f3cde01eea0478e  gcc/fortran/gfortran.texi
  af66ab40a5434219772b76ad10035e45  gcc/fortran/gfortranspec.cc
! 34b30d4bc062f10e41024191058e8797  gcc/fortran/interface.cc
  74d5cc035a8e6ee1fb5826c965c90532  gcc/fortran/intrinsic.cc
  47e0e62e0a6eaad27941f8e734cda2a2  gcc/fortran/intrinsic.h
  e4b048e3c76dd062984cec31ab97a29d  gcc/fortran/intrinsic.texi
*************** cac72ec7acd3c0b9265d75c09766a847  gcc/gc
*** 6355,6361 ****
  d66e80f2ea9c1b6754479c999040b857  gcc/gcov-counter.def
  c4e07547b91be991d1bed6c22015cec2  gcc/gcov-dump.cc
  27c5106fa4fb5139a879f94a83a03f1e  gcc/gcov-io.cc
! 0ca687fdcb0e263469de6752791f3ca7  gcc/gcov-io.h
  0fef400d80ba434e449000da71f5b69f  gcc/gcov-tool.cc
  75b76f17591eaadacbf2760164205f52  gcc/gcov.cc
  d6ef278998f9a4cf5f6d12d0ec72b842  gcc/gcse-common.cc
--- 6355,6361 ----
  d66e80f2ea9c1b6754479c999040b857  gcc/gcov-counter.def
  c4e07547b91be991d1bed6c22015cec2  gcc/gcov-dump.cc
  27c5106fa4fb5139a879f94a83a03f1e  gcc/gcov-io.cc
! 43408c19f50367924c453b43b845314d  gcc/gcov-io.h
  0fef400d80ba434e449000da71f5b69f  gcc/gcov-tool.cc
  75b76f17591eaadacbf2760164205f52  gcc/gcov.cc
  d6ef278998f9a4cf5f6d12d0ec72b842  gcc/gcse-common.cc
*************** b997f8373ba0004a3b0b6df43035d40d  gcc/ho
*** 6613,6619 ****
  260dd898f6b9809f71a292b793d67324  gcc/hw-doloop.h
  4769eb51982f8ccb12764424698b464f  gcc/hwint.cc
  8826410aae6a5efbb3d335e5e3dceed4  gcc/hwint.h
! 965a6fb5f5cb4d0e1462248cc79b1554  gcc/ifcvt.cc
  1d252ebba03aa858df6822a8b59e1d4e  gcc/ifcvt.h
  55413f67957a351f7ca1b0a8a2f69a7c  gcc/inchash.cc
  f380ce65b15eedb6d55a9848beb1ec3b  gcc/inchash.h
--- 6613,6619 ----
  260dd898f6b9809f71a292b793d67324  gcc/hw-doloop.h
  4769eb51982f8ccb12764424698b464f  gcc/hwint.cc
  8826410aae6a5efbb3d335e5e3dceed4  gcc/hwint.h
! da47150865f916a7ec1fadfb011c100e  gcc/ifcvt.cc
  1d252ebba03aa858df6822a8b59e1d4e  gcc/ifcvt.h
  55413f67957a351f7ca1b0a8a2f69a7c  gcc/inchash.cc
  f380ce65b15eedb6d55a9848beb1ec3b  gcc/inchash.h
*************** f2a9985147f87fd566d4ae2dd8fceabc  gcc/lt
*** 6833,6840 ****
  8caf9a68892d64dc294b20c27291b749  gcc/lto-streamer.cc
  c1f5544bbcb0c97f44efaa8e7ab62c22  gcc/lto-streamer.h
  83090028348934d032ead727241d7ad7  gcc/lto-wrapper.cc
! f79a84ebfb7c8bb731bf4a8203f82046  gcc/lto/ChangeLog
! 3e7816807401da2506930719e6dc8b3d  gcc/lto/Make-lang.in
  705d8eaa74b456d79367c2c42b7a2fef  gcc/lto/common.cc
  3d201b30f0538a8cfddc450739b1c8c5  gcc/lto/common.h
  7ed5b0c9457d595938a1b66fb9ae7fc1  gcc/lto/config-lang.in
--- 6833,6840 ----
  8caf9a68892d64dc294b20c27291b749  gcc/lto-streamer.cc
  c1f5544bbcb0c97f44efaa8e7ab62c22  gcc/lto-streamer.h
  83090028348934d032ead727241d7ad7  gcc/lto-wrapper.cc
! 13bbec3b5fc0011026f184ee2dc38380  gcc/lto/ChangeLog
! 7c77c9806e3c858c36a1b1aea2794327  gcc/lto/Make-lang.in
  705d8eaa74b456d79367c2c42b7a2fef  gcc/lto/common.cc
  3d201b30f0538a8cfddc450739b1c8c5  gcc/lto/common.h
  7ed5b0c9457d595938a1b66fb9ae7fc1  gcc/lto/config-lang.in
*************** c08edc659010d9072c249418c1be7fe6  gcc/rt
*** 8063,8070 ****
  ecb31a48caf7998f695601ec7350bdc0  gcc/run-rtl-passes.cc
  c4bc204b62fdb61848c09abf05a60a9d  gcc/run-rtl-passes.h
  add9bd82fcec23469a4d0f7df03d9589  gcc/rust/CONTRIBUTING.md
! 60660701dabaa0ce9a5c96b4560493e1  gcc/rust/ChangeLog
! 71972a823341f4ee0b2af7347ef7a633  gcc/rust/Make-lang.in
  f3527e161e6e2827d299c1a928ebe1c6  gcc/rust/README.md
  27f492ab17f50d840e1e0fd32a89c84a  gcc/rust/ast/rust-ast-builder.cc
  3714514495ced2204392eef66c900c13  gcc/rust/ast/rust-ast-builder.h
--- 8063,8070 ----
  ecb31a48caf7998f695601ec7350bdc0  gcc/run-rtl-passes.cc
  c4bc204b62fdb61848c09abf05a60a9d  gcc/run-rtl-passes.h
  add9bd82fcec23469a4d0f7df03d9589  gcc/rust/CONTRIBUTING.md
! c8b07b989b43ac5eebc19be48c84ca1e  gcc/rust/ChangeLog
! e1062a0c173e169a95829d15223be035  gcc/rust/Make-lang.in
  f3527e161e6e2827d299c1a928ebe1c6  gcc/rust/README.md
  27f492ab17f50d840e1e0fd32a89c84a  gcc/rust/ast/rust-ast-builder.cc
  3714514495ced2204392eef66c900c13  gcc/rust/ast/rust-ast-builder.h
*************** fa22a966da9420728a72f8164b29aeef  gcc/ru
*** 8080,8086 ****
  629186b05e52e76e5b8194df9669607d  gcc/rust/ast/rust-ast-full.h
  637e07bd2076b6186d850a206b9ebb74  gcc/rust/ast/rust-ast-pointer-visitor.cc
  ab4843ea68c29da6b2a1c9981b059e06  gcc/rust/ast/rust-ast-pointer-visitor.h
! 9ab1d23308048adc03212cb5ea086d07  gcc/rust/ast/rust-ast-visitor.cc
  0adfcf6a63038808c3009e74ef1c6a39  gcc/rust/ast/rust-ast-visitor.h
  e3034f54429d242a5f958bb08b827597  gcc/rust/ast/rust-ast.cc
  e13ded45e7ffbeae91c700ffc79a4d6f  gcc/rust/ast/rust-ast.h
--- 8080,8086 ----
  629186b05e52e76e5b8194df9669607d  gcc/rust/ast/rust-ast-full.h
  637e07bd2076b6186d850a206b9ebb74  gcc/rust/ast/rust-ast-pointer-visitor.cc
  ab4843ea68c29da6b2a1c9981b059e06  gcc/rust/ast/rust-ast-pointer-visitor.h
! 94261c6ec6bbdd8884aa8110ae196c8e  gcc/rust/ast/rust-ast-visitor.cc
  0adfcf6a63038808c3009e74ef1c6a39  gcc/rust/ast/rust-ast-visitor.h
  e3034f54429d242a5f958bb08b827597  gcc/rust/ast/rust-ast.cc
  e13ded45e7ffbeae91c700ffc79a4d6f  gcc/rust/ast/rust-ast.h
*************** b0a8d5728f73b0493b0b4aae04568187  gcc/ru
*** 8105,8111 ****
  47fa77e4a5e65d5dde6e13fb22489869  gcc/rust/ast/rust-fmt.h
  bc42fe789e0852a0218a7921a004a4fa  gcc/rust/ast/rust-item.h
  ae461cb141678a5ac2400974deba2aa5  gcc/rust/ast/rust-macro.h
! 277825a1ab6df255dbe079bb8560e311  gcc/rust/ast/rust-path.cc
  1a331eb0cd7eedec74fbb2ce3677449b  gcc/rust/ast/rust-path.h
  aa85db7e311dbe19dc2be9abadd44aef  gcc/rust/ast/rust-pattern.cc
  2d04accbb41ffdc781e42b2efb3876c2  gcc/rust/ast/rust-pattern.h
--- 8105,8111 ----
  47fa77e4a5e65d5dde6e13fb22489869  gcc/rust/ast/rust-fmt.h
  bc42fe789e0852a0218a7921a004a4fa  gcc/rust/ast/rust-item.h
  ae461cb141678a5ac2400974deba2aa5  gcc/rust/ast/rust-macro.h
! 9f4865770368f1c5c740f6f77866de79  gcc/rust/ast/rust-path.cc
  1a331eb0cd7eedec74fbb2ce3677449b  gcc/rust/ast/rust-path.h
  aa85db7e311dbe19dc2be9abadd44aef  gcc/rust/ast/rust-pattern.cc
  2d04accbb41ffdc781e42b2efb3876c2  gcc/rust/ast/rust-pattern.h
*************** a168bb70ef7e4bd046bf704abb0e5739  gcc/ru
*** 8121,8133 ****
  d0a4f7913bccafe98174b5e4b5cebfa6  gcc/rust/backend/rust-compile-block.h
  8d754665d1c624cb4d92e1417e4b1235  gcc/rust/backend/rust-compile-context.cc
  04b8950ce8b7169cf46dee3bd66b65ad  gcc/rust/backend/rust-compile-context.h
! 0c1c20faf3600367fe091924dd2f97f8  gcc/rust/backend/rust-compile-expr.cc
  5fa9d206f637b2f442ddd04db0d88346  gcc/rust/backend/rust-compile-expr.h
  6e6bc07f0b214a00ae4af6096f07a7b0  gcc/rust/backend/rust-compile-extern.h
  96023f10d704a5f5aa3aa2126eac4219  gcc/rust/backend/rust-compile-fnparam.cc
  e525943b8d7380cbc76915f9e460adab  gcc/rust/backend/rust-compile-fnparam.h
  1bb9958624b1c18507129a60e9be23e5  gcc/rust/backend/rust-compile-implitem.cc
! ee0054c15512a93ccc6bec6718c95863  gcc/rust/backend/rust-compile-implitem.h
  89a46194ac8b4c2f2f2eb7c998a7fbf8  gcc/rust/backend/rust-compile-intrinsic.cc
  a1fb8689400958af8126ae9c477c873e  gcc/rust/backend/rust-compile-intrinsic.h
  152f50ba0c40302e4fb664e6ec3cc8b7  gcc/rust/backend/rust-compile-item.cc
--- 8121,8133 ----
  d0a4f7913bccafe98174b5e4b5cebfa6  gcc/rust/backend/rust-compile-block.h
  8d754665d1c624cb4d92e1417e4b1235  gcc/rust/backend/rust-compile-context.cc
  04b8950ce8b7169cf46dee3bd66b65ad  gcc/rust/backend/rust-compile-context.h
! be5e43abec16ce3e4021683341d90a1d  gcc/rust/backend/rust-compile-expr.cc
  5fa9d206f637b2f442ddd04db0d88346  gcc/rust/backend/rust-compile-expr.h
  6e6bc07f0b214a00ae4af6096f07a7b0  gcc/rust/backend/rust-compile-extern.h
  96023f10d704a5f5aa3aa2126eac4219  gcc/rust/backend/rust-compile-fnparam.cc
  e525943b8d7380cbc76915f9e460adab  gcc/rust/backend/rust-compile-fnparam.h
  1bb9958624b1c18507129a60e9be23e5  gcc/rust/backend/rust-compile-implitem.cc
! 4063521d1667c6cbde45a5a24f53de3c  gcc/rust/backend/rust-compile-implitem.h
  89a46194ac8b4c2f2f2eb7c998a7fbf8  gcc/rust/backend/rust-compile-intrinsic.cc
  a1fb8689400958af8126ae9c477c873e  gcc/rust/backend/rust-compile-intrinsic.h
  152f50ba0c40302e4fb664e6ec3cc8b7  gcc/rust/backend/rust-compile-item.cc
*************** a02df3439a425a492f39168431dbf58b  gcc/ru
*** 8141,8147 ****
  8d042d63efac54929399df3c7b8741f9  gcc/rust/backend/rust-compile-stmt.h
  943e800783a5c6e0e934066fe1478b65  gcc/rust/backend/rust-compile-struct-field-expr.cc
  3b61313140b254e7402b2ab5ed53d760  gcc/rust/backend/rust-compile-struct-field-expr.h
! d01f0546d32ee5ae0e2b0e79b12b3be8  gcc/rust/backend/rust-compile-type.cc
  bd1497a225bbe26dd01b8aef8b89cf3f  gcc/rust/backend/rust-compile-type.h
  3a834a862ca7f5516856d25250d4f89e  gcc/rust/backend/rust-compile-var-decl.h
  55c4d864e83808cea66fab2e7e5aee72  gcc/rust/backend/rust-compile.cc
--- 8141,8147 ----
  8d042d63efac54929399df3c7b8741f9  gcc/rust/backend/rust-compile-stmt.h
  943e800783a5c6e0e934066fe1478b65  gcc/rust/backend/rust-compile-struct-field-expr.cc
  3b61313140b254e7402b2ab5ed53d760  gcc/rust/backend/rust-compile-struct-field-expr.h
! 1e57d9c0e54e59bb71c5e1df8763f156  gcc/rust/backend/rust-compile-type.cc
  bd1497a225bbe26dd01b8aef8b89cf3f  gcc/rust/backend/rust-compile-type.h
  3a834a862ca7f5516856d25250d4f89e  gcc/rust/backend/rust-compile-var-decl.h
  55c4d864e83808cea66fab2e7e5aee72  gcc/rust/backend/rust-compile.cc
*************** c9c06fa597a0b2b1ec0dda42fa4ad8ed  gcc/ru
*** 8242,8248 ****
  7468e1931cb87be149fbd15a4134671d  gcc/rust/checks/errors/feature/contrib/regen
  b8fba4504a2b9ad056f96586890f1762  gcc/rust/checks/errors/feature/contrib/scan.l
  7f92e0421f9df0fdd357ad53f9ada746  gcc/rust/checks/errors/feature/rust-feature-defs.h
! 51b431be41a832bf7cdbfb080bbad366  gcc/rust/checks/errors/feature/rust-feature-gate.cc
  d80e5d5c1146c21140604dee7cae69e1  gcc/rust/checks/errors/feature/rust-feature-gate.h
  8eefb7a89549d91fdecb7f7714ef52da  gcc/rust/checks/errors/feature/rust-feature.cc
  78fb7bf3a240e4fffe28f419a321bb7a  gcc/rust/checks/errors/feature/rust-feature.h
--- 8242,8248 ----
  7468e1931cb87be149fbd15a4134671d  gcc/rust/checks/errors/feature/contrib/regen
  b8fba4504a2b9ad056f96586890f1762  gcc/rust/checks/errors/feature/contrib/scan.l
  7f92e0421f9df0fdd357ad53f9ada746  gcc/rust/checks/errors/feature/rust-feature-defs.h
! e717a628ca18477f2f660105bf5ab615  gcc/rust/checks/errors/feature/rust-feature-gate.cc
  d80e5d5c1146c21140604dee7cae69e1  gcc/rust/checks/errors/feature/rust-feature-gate.h
  8eefb7a89549d91fdecb7f7714ef52da  gcc/rust/checks/errors/feature/rust-feature.cc
  78fb7bf3a240e4fffe28f419a321bb7a  gcc/rust/checks/errors/feature/rust-feature.h
*************** fe2962dc226b0768f5f3aa683fb688b2  gcc/ru
*** 8265,8271 ****
  faeb5b075e128e3fc4bfd4ff53ae06d2  gcc/rust/checks/errors/rust-const-checker.h
  92c0915329dfb1f6cc16f7f18e692efc  gcc/rust/checks/errors/rust-hir-pattern-analysis.cc
  3bad1521f66fe645b6abab615173b468  gcc/rust/checks/errors/rust-hir-pattern-analysis.h
! 304eb5adec53738cfc9aa7d7291d49c8  gcc/rust/checks/errors/rust-readonly-check.cc
  a45e19c6f651b6f8bd13d2a4e08e4cc3  gcc/rust/checks/errors/rust-readonly-check.h
  67fc5dadc9f40354aaea26f1ec37dc48  gcc/rust/checks/errors/rust-unsafe-checker.cc
  9d4322b4fbef222ac097722515f88171  gcc/rust/checks/errors/rust-unsafe-checker.h
--- 8265,8271 ----
  faeb5b075e128e3fc4bfd4ff53ae06d2  gcc/rust/checks/errors/rust-const-checker.h
  92c0915329dfb1f6cc16f7f18e692efc  gcc/rust/checks/errors/rust-hir-pattern-analysis.cc
  3bad1521f66fe645b6abab615173b468  gcc/rust/checks/errors/rust-hir-pattern-analysis.h
! 676ac38597db0f99ac73c0ade4cd4e95  gcc/rust/checks/errors/rust-readonly-check.cc
  a45e19c6f651b6f8bd13d2a4e08e4cc3  gcc/rust/checks/errors/rust-readonly-check.h
  67fc5dadc9f40354aaea26f1ec37dc48  gcc/rust/checks/errors/rust-unsafe-checker.cc
  9d4322b4fbef222ac097722515f88171  gcc/rust/checks/errors/rust-unsafe-checker.h
*************** a45e19c6f651b6f8bd13d2a4e08e4cc3  gcc/ru
*** 8275,8282 ****
  3d12ce22fc794ea9c3de54e7ab40bdb9  gcc/rust/checks/lints/rust-lint-scan-deadcode.h
  59a3222b3a126357249024c71380305a  gcc/rust/checks/lints/rust-lint-unused-var.cc
  31a28464a707538b3feb2cca81d0baca  gcc/rust/checks/lints/rust-lint-unused-var.h
  fa5872ac507a48a11a82370b396b9110  gcc/rust/config-lang.in
! 0060cb7035fce818864cc09fb54cbf69  gcc/rust/expand/rust-cfg-strip.cc
  68c158af32142894a708b84d1f0a4aee  gcc/rust/expand/rust-cfg-strip.h
  1aec8015302d678642557942531e895e  gcc/rust/expand/rust-derive-clone.cc
  f9e74c7fa1a07a3ba930fb235c9b6000  gcc/rust/expand/rust-derive-clone.h
--- 8275,8288 ----
  3d12ce22fc794ea9c3de54e7ab40bdb9  gcc/rust/checks/lints/rust-lint-scan-deadcode.h
  59a3222b3a126357249024c71380305a  gcc/rust/checks/lints/rust-lint-unused-var.cc
  31a28464a707538b3feb2cca81d0baca  gcc/rust/checks/lints/rust-lint-unused-var.h
+ 260764cd95dab0d9df129527a5955910  gcc/rust/checks/lints/unused/rust-unused-checker.cc
+ ce466edb98380c802f4c3a55da408f3b  gcc/rust/checks/lints/unused/rust-unused-checker.h
+ bcd826ce3548b2ddb3c569aa32f4682c  gcc/rust/checks/lints/unused/rust-unused-collector.cc
+ 75dce276f03ef75b0c65aac93a0bd62d  gcc/rust/checks/lints/unused/rust-unused-collector.h
+ 6beb09580b99f8153957a9795efd650b  gcc/rust/checks/lints/unused/rust-unused-context.cc
+ d749977bbefd1eda7aed22e9cb8e1955  gcc/rust/checks/lints/unused/rust-unused-context.h
  fa5872ac507a48a11a82370b396b9110  gcc/rust/config-lang.in
! 4b689dc799cf21fd261bd9e4dbd6e8da  gcc/rust/expand/rust-cfg-strip.cc
  68c158af32142894a708b84d1f0a4aee  gcc/rust/expand/rust-cfg-strip.h
  1aec8015302d678642557942531e895e  gcc/rust/expand/rust-derive-clone.cc
  f9e74c7fa1a07a3ba930fb235c9b6000  gcc/rust/expand/rust-derive-clone.h
*************** a8c3fffdd59e62e11f9ae5c1394ea607  gcc/ru
*** 8301,8307 ****
  2bf0b3ec8f96214e9e951a12aa0a2bb8  gcc/rust/expand/rust-expand-format-args.cc
  3212518ba7ade95bb86b3581ea623f4f  gcc/rust/expand/rust-expand-format-args.h
  fc28dd7b3c2b01bde83fedc493446404  gcc/rust/expand/rust-expand-visitor.cc
! 4d58b7326148b1b5c70c40b5ba68f03e  gcc/rust/expand/rust-expand-visitor.h
  a24c9465702c5bb64a467cc4f251ec38  gcc/rust/expand/rust-macro-builtins-asm.cc
  48269c7df7dead67e4185d80b217a76a  gcc/rust/expand/rust-macro-builtins-asm.h
  b09e41a88ef4016a6294d77183668bf7  gcc/rust/expand/rust-macro-builtins-format-args.cc
--- 8307,8313 ----
  2bf0b3ec8f96214e9e951a12aa0a2bb8  gcc/rust/expand/rust-expand-format-args.cc
  3212518ba7ade95bb86b3581ea623f4f  gcc/rust/expand/rust-expand-format-args.h
  fc28dd7b3c2b01bde83fedc493446404  gcc/rust/expand/rust-expand-visitor.cc
! caf951d4c4d241e8c726d12a387e3a14  gcc/rust/expand/rust-expand-visitor.h
  a24c9465702c5bb64a467cc4f251ec38  gcc/rust/expand/rust-macro-builtins-asm.cc
  48269c7df7dead67e4185d80b217a76a  gcc/rust/expand/rust-macro-builtins-asm.h
  b09e41a88ef4016a6294d77183668bf7  gcc/rust/expand/rust-macro-builtins-format-args.cc
*************** b4d59b1df9f1d6e27671a9e166c77abb  gcc/ru
*** 8339,8345 ****
  1c9070543940e6d4a4dbb4d601d853ae  gcc/rust/hir/rust-ast-lower-format-args.h
  f5e6befdf85cb187473102a0554f3bb2  gcc/rust/hir/rust-ast-lower-implitem.cc
  18c3dfcdc8db737aabbd1ed231a6c8cc  gcc/rust/hir/rust-ast-lower-implitem.h
! b15eb997cb7fcfecc310d0ab4d8832e6  gcc/rust/hir/rust-ast-lower-item.cc
  4692f2513fc1cf935117a527388b3633  gcc/rust/hir/rust-ast-lower-item.h
  fe874903e1b5971bcc912936191ff5b8  gcc/rust/hir/rust-ast-lower-pattern.cc
  9ed55743496bcf0607042817cfa4b0d8  gcc/rust/hir/rust-ast-lower-pattern.h
--- 8345,8351 ----
  1c9070543940e6d4a4dbb4d601d853ae  gcc/rust/hir/rust-ast-lower-format-args.h
  f5e6befdf85cb187473102a0554f3bb2  gcc/rust/hir/rust-ast-lower-implitem.cc
  18c3dfcdc8db737aabbd1ed231a6c8cc  gcc/rust/hir/rust-ast-lower-implitem.h
! 66d2fa4d509e2e4f89ff82d82c8baa8b  gcc/rust/hir/rust-ast-lower-item.cc
  4692f2513fc1cf935117a527388b3633  gcc/rust/hir/rust-ast-lower-item.h
  fe874903e1b5971bcc912936191ff5b8  gcc/rust/hir/rust-ast-lower-pattern.cc
  9ed55743496bcf0607042817cfa4b0d8  gcc/rust/hir/rust-ast-lower-pattern.h
*************** a3f9b9d71a7b0a056ea2218035dd8dad  gcc/ru
*** 8350,8392 ****
  2144c5ed50fecb7465bad4f0676110be  gcc/rust/hir/rust-ast-lower-type.h
  24cb5c06629dd6c9f1572b26bc5dc2b9  gcc/rust/hir/rust-ast-lower.cc
  dfd71f28a4e33f88e4f9f845a85eff57  gcc/rust/hir/rust-ast-lower.h
! f38e6ed9d1426eaac2c1bed8f56a0bd0  gcc/rust/hir/rust-hir-dump.cc
  9f61ffcd5016bb874c6a0829e3feb9ae  gcc/rust/hir/rust-hir-dump.h
  9ae488c2548387541bb760eaff79fbe9  gcc/rust/hir/tree/rust-hir-attrs.h
! 7703b12f41d395a71eb5420f6c0a7ba7  gcc/rust/hir/tree/rust-hir-bound-abstract.h
! 8f81aae1c3676476d16c5c42bfdc499a  gcc/rust/hir/tree/rust-hir-bound.h
! ef8ae85d1fae88e345d454cc9cd6be61  gcc/rust/hir/tree/rust-hir-expr-abstract.h
! 335d221837d49923d80289f790780f10  gcc/rust/hir/tree/rust-hir-expr.cc
! 5d4cbccd2f59ef41fc3dd84351775480  gcc/rust/hir/tree/rust-hir-expr.h
  b1f0aba9df8f454caf7e38f2dda754e9  gcc/rust/hir/tree/rust-hir-full-decls.h
  e872fd48a9851c4ec4c3171c007d112d  gcc/rust/hir/tree/rust-hir-full.h
! cf64af347e4de1f3259e0ba179d8e53b  gcc/rust/hir/tree/rust-hir-generic-param.cc
! 43725b1aeba18092d28ebd33a73e4462  gcc/rust/hir/tree/rust-hir-generic-param.h
  aeec43cd2c8fba8dc52285ca385272eb  gcc/rust/hir/tree/rust-hir-item.cc
! 9397d1083bbd1e19ca8e456b885ffb85  gcc/rust/hir/tree/rust-hir-item.h
  9f4e7a70392e148fe75decd40598a2d9  gcc/rust/hir/tree/rust-hir-literal.h
  f40fe76efdee3810473f09205ea63119  gcc/rust/hir/tree/rust-hir-node.h
! 46af2c5116f73b3da4d0bc13d9cd86f8  gcc/rust/hir/tree/rust-hir-path.cc
! d1fbad563a9af986959aeb87f576564e  gcc/rust/hir/tree/rust-hir-path.h
! ee67550806e0bdf8bb66f8d3be82d6fa  gcc/rust/hir/tree/rust-hir-pattern-abstract.h
! d25cdaf5016eb8e6be29bca0e9c83fd1  gcc/rust/hir/tree/rust-hir-pattern.h
  e55c4f7404915fb3515e09a7441125a5  gcc/rust/hir/tree/rust-hir-simple-path.h
  22283c03c1dc5ac012096d395c9414c2  gcc/rust/hir/tree/rust-hir-stmt.cc
! d231530a896626f20475091e1168963d  gcc/rust/hir/tree/rust-hir-stmt.h
! 16ef9d998795cd10270b6ad32cd1b2b9  gcc/rust/hir/tree/rust-hir-trait-bound.h
  684c1af82b6a5ba5dc09a5c6db582394  gcc/rust/hir/tree/rust-hir-type-abstract.cc
! 6562590fe0c6f05e4a87d2a179ac8d87  gcc/rust/hir/tree/rust-hir-type-abstract.h
  807eed2e2680f94f8f1dcc296c33f695  gcc/rust/hir/tree/rust-hir-type-no-bounds.h
! c143cea24f5c3be477e96312dd276c58  gcc/rust/hir/tree/rust-hir-type.cc
! ba332eda5c2e84ae8a3591891ae7adcd  gcc/rust/hir/tree/rust-hir-type.h
! 32f0297511ca35b0e5d9d95841b7cb38  gcc/rust/hir/tree/rust-hir-visibility.h
  a9ce4bb18277085ac0f36fce0ab7f87f  gcc/rust/hir/tree/rust-hir-visitable.h
  171168efa9bc4130608778778ee4464b  gcc/rust/hir/tree/rust-hir-visitor.cc
  a6e7147406b59b396b29ce709fc52f1a  gcc/rust/hir/tree/rust-hir-visitor.h
! 3f73cf621cb0f2d0d75f1b4fdc710182  gcc/rust/hir/tree/rust-hir.cc
! 6ea149cdd32444b93f142193c19c3930  gcc/rust/hir/tree/rust-hir.h
  fa7c267c70f0094382b7b3df35e83412  gcc/rust/lang-specs.h
! e090436833a0ec80b591d0e2b8d0276b  gcc/rust/lang.opt
  a11b51758cadbfbc20e4c2969af1aa85  gcc/rust/lang.opt.urls
  4f1a01d5a1d9c4db6498642d7194185e  gcc/rust/lex/rust-input-source.h
  e33935e366fcf35231d6729937119c74  gcc/rust/lex/rust-lex.cc
--- 8356,8398 ----
  2144c5ed50fecb7465bad4f0676110be  gcc/rust/hir/rust-ast-lower-type.h
  24cb5c06629dd6c9f1572b26bc5dc2b9  gcc/rust/hir/rust-ast-lower.cc
  dfd71f28a4e33f88e4f9f845a85eff57  gcc/rust/hir/rust-ast-lower.h
! a2685dd43aaa613a6fa7cd52bccb932b  gcc/rust/hir/rust-hir-dump.cc
  9f61ffcd5016bb874c6a0829e3feb9ae  gcc/rust/hir/rust-hir-dump.h
  9ae488c2548387541bb760eaff79fbe9  gcc/rust/hir/tree/rust-hir-attrs.h
! 62610976cf210f2da93fdcc3e3332ed9  gcc/rust/hir/tree/rust-hir-bound-abstract.h
! 93d41a02bac90a9ae5a93d5d5411503a  gcc/rust/hir/tree/rust-hir-bound.h
! 1945dc60e9513771dfe15d201147d590  gcc/rust/hir/tree/rust-hir-expr-abstract.h
! 8f31e992a4eff8dbcb7f5c0b8cc360ae  gcc/rust/hir/tree/rust-hir-expr.cc
! 47d4c29aac2c7efbc4bc3c75fd02351a  gcc/rust/hir/tree/rust-hir-expr.h
  b1f0aba9df8f454caf7e38f2dda754e9  gcc/rust/hir/tree/rust-hir-full-decls.h
  e872fd48a9851c4ec4c3171c007d112d  gcc/rust/hir/tree/rust-hir-full.h
! 07be13c0c1face5d5b2ba121ffebe0da  gcc/rust/hir/tree/rust-hir-generic-param.cc
! fcaa359d4873ca47034da13a69c19c55  gcc/rust/hir/tree/rust-hir-generic-param.h
  aeec43cd2c8fba8dc52285ca385272eb  gcc/rust/hir/tree/rust-hir-item.cc
! 1fd9f71ae670aed385b78f08bd875863  gcc/rust/hir/tree/rust-hir-item.h
  9f4e7a70392e148fe75decd40598a2d9  gcc/rust/hir/tree/rust-hir-literal.h
  f40fe76efdee3810473f09205ea63119  gcc/rust/hir/tree/rust-hir-node.h
! 206c09898cc7aa8c2946dc9d03da985d  gcc/rust/hir/tree/rust-hir-path.cc
! 4929dcb8ce78463c53591f4912c4eb43  gcc/rust/hir/tree/rust-hir-path.h
! dab807f547b1e1cfa1abf82220791bab  gcc/rust/hir/tree/rust-hir-pattern-abstract.h
! 92c3260a1223fd6598c9938af6de3c57  gcc/rust/hir/tree/rust-hir-pattern.h
  e55c4f7404915fb3515e09a7441125a5  gcc/rust/hir/tree/rust-hir-simple-path.h
  22283c03c1dc5ac012096d395c9414c2  gcc/rust/hir/tree/rust-hir-stmt.cc
! f01d4cfb271bcf9d1fe890c45d42bc9e  gcc/rust/hir/tree/rust-hir-stmt.h
! 292c3641bad984f70d3771aed0098c98  gcc/rust/hir/tree/rust-hir-trait-bound.h
  684c1af82b6a5ba5dc09a5c6db582394  gcc/rust/hir/tree/rust-hir-type-abstract.cc
! d24078c67a3c3f5c49a7b9f739242331  gcc/rust/hir/tree/rust-hir-type-abstract.h
  807eed2e2680f94f8f1dcc296c33f695  gcc/rust/hir/tree/rust-hir-type-no-bounds.h
! 4269a85c98f43d383ccd1506eac17e96  gcc/rust/hir/tree/rust-hir-type.cc
! 422499dc21bf8aeb141bde34430c2655  gcc/rust/hir/tree/rust-hir-type.h
! 3dc47219d93ddc1cb90262eec16c3044  gcc/rust/hir/tree/rust-hir-visibility.h
  a9ce4bb18277085ac0f36fce0ab7f87f  gcc/rust/hir/tree/rust-hir-visitable.h
  171168efa9bc4130608778778ee4464b  gcc/rust/hir/tree/rust-hir-visitor.cc
  a6e7147406b59b396b29ce709fc52f1a  gcc/rust/hir/tree/rust-hir-visitor.h
! 1e9aa7ab43ee542286114e6917b108b4  gcc/rust/hir/tree/rust-hir.cc
! 37d354036a50286f05b8b16baea22bb8  gcc/rust/hir/tree/rust-hir.h
  fa7c267c70f0094382b7b3df35e83412  gcc/rust/lang-specs.h
! d864127d2ee16c2f22f0c5c43ab6626c  gcc/rust/lang.opt
  a11b51758cadbfbc20e4c2969af1aa85  gcc/rust/lang.opt.urls
  4f1a01d5a1d9c4db6498642d7194185e  gcc/rust/lex/rust-input-source.h
  e33935e366fcf35231d6729937119c74  gcc/rust/lex/rust-lex.cc
*************** f022a4ee2cba026a3593bb6b701ae2f8  gcc/ru
*** 8436,8442 ****
  dd4621d653df40f236fecbec0b1caf48  gcc/rust/resolve/rust-late-name-resolver-2.0.h
  dac37149763dc8ccca753d54554514f6  gcc/rust/resolve/rust-name-resolution-context.cc
  3ea0376c3b22933ac67896d7cba8ad16  gcc/rust/resolve/rust-name-resolution-context.h
! b6983f07d81272720902833f46969469  gcc/rust/resolve/rust-name-resolver.cc
  be000221300e27326827abc1e0cad277  gcc/rust/resolve/rust-name-resolver.h
  427832e25906274c5e54ec1b19d69d3a  gcc/rust/resolve/rust-resolve-builtins.cc
  d39b811b287d9b745260f2103f3dcebf  gcc/rust/resolve/rust-resolve-builtins.h
--- 8442,8448 ----
  dd4621d653df40f236fecbec0b1caf48  gcc/rust/resolve/rust-late-name-resolver-2.0.h
  dac37149763dc8ccca753d54554514f6  gcc/rust/resolve/rust-name-resolution-context.cc
  3ea0376c3b22933ac67896d7cba8ad16  gcc/rust/resolve/rust-name-resolution-context.h
! 89cd68ec4e5f1bb949c29669f9021d1a  gcc/rust/resolve/rust-name-resolver.cc
  be000221300e27326827abc1e0cad277  gcc/rust/resolve/rust-name-resolver.h
  427832e25906274c5e54ec1b19d69d3a  gcc/rust/resolve/rust-resolve-builtins.cc
  d39b811b287d9b745260f2103f3dcebf  gcc/rust/resolve/rust-resolve-builtins.h
*************** a591947189b9249649cd9d0d05bb6f3b  gcc/ru
*** 8457,8463 ****
  44c864a134b8524b6fd7e36dc13b1d12  gcc/rust/rust-location.h
  b45417b3f3262f4edcbe101bd348c5a0  gcc/rust/rust-object-export.cc
  c4892cc98a9ac5c00fb35b20592c0a82  gcc/rust/rust-object-export.h
! 8dc7cbfce0b4ec16004dae4c55ff16d6  gcc/rust/rust-session-manager.cc
  7c733b02bd9c62e92a8826079672021a  gcc/rust/rust-session-manager.h
  567d0d8fd5f4f8ae4496a4212922201d  gcc/rust/rust-system.h
  ac420eeb07d0fa93baebb7cfaafe3a69  gcc/rust/rust-target-def.h
--- 8463,8469 ----
  44c864a134b8524b6fd7e36dc13b1d12  gcc/rust/rust-location.h
  b45417b3f3262f4edcbe101bd348c5a0  gcc/rust/rust-object-export.cc
  c4892cc98a9ac5c00fb35b20592c0a82  gcc/rust/rust-object-export.h
! 5caf513ef9d429621dc60d9e0f7bace1  gcc/rust/rust-session-manager.cc
  7c733b02bd9c62e92a8826079672021a  gcc/rust/rust-session-manager.h
  567d0d8fd5f4f8ae4496a4212922201d  gcc/rust/rust-system.h
  ac420eeb07d0fa93baebb7cfaafe3a69  gcc/rust/rust-target-def.h
*************** d4138ff0941017a78fc361489690835b  gcc/ru
*** 8470,8480 ****
  d33794099c6af3bc0595dbb4e77e415f  gcc/rust/typecheck/rust-casts.h
  872897c3bd25d773cffdd9df23a8f981  gcc/rust/typecheck/rust-coercion.cc
  b6f9bfb71a3ea330ee2b7909209055eb  gcc/rust/typecheck/rust-coercion.h
! f4fb08c07a164d0abb459d493f842d35  gcc/rust/typecheck/rust-hir-dot-operator.cc
  17850b06a0b270c7dd9b792f1e728f2d  gcc/rust/typecheck/rust-hir-dot-operator.h
  f072dca1aa4f27216c23a457a9199152  gcc/rust/typecheck/rust-hir-inherent-impl-overlap.h
! ce8ad70188d2476aecbe570d3def4b90  gcc/rust/typecheck/rust-hir-path-probe.cc
! 1fada070804e23a951644edf6b3c1d3d  gcc/rust/typecheck/rust-hir-path-probe.h
  ecf75c0b1fe9d0c8d8ea76beb7724553  gcc/rust/typecheck/rust-hir-trait-reference.cc
  d66ea5137022ea56053a46e7c3704397  gcc/rust/typecheck/rust-hir-trait-reference.h
  f7e76e7030840e9376f38a69a9b8807c  gcc/rust/typecheck/rust-hir-trait-resolve.cc
--- 8476,8486 ----
  d33794099c6af3bc0595dbb4e77e415f  gcc/rust/typecheck/rust-casts.h
  872897c3bd25d773cffdd9df23a8f981  gcc/rust/typecheck/rust-coercion.cc
  b6f9bfb71a3ea330ee2b7909209055eb  gcc/rust/typecheck/rust-coercion.h
! 000f3f18fd01500e916ac3403bb59cc6  gcc/rust/typecheck/rust-hir-dot-operator.cc
  17850b06a0b270c7dd9b792f1e728f2d  gcc/rust/typecheck/rust-hir-dot-operator.h
  f072dca1aa4f27216c23a457a9199152  gcc/rust/typecheck/rust-hir-inherent-impl-overlap.h
! 49d20904f63de3a9cc7ad55425b28a34  gcc/rust/typecheck/rust-hir-path-probe.cc
! bd11c8f1638609bce4f79d8945e0a24a  gcc/rust/typecheck/rust-hir-path-probe.h
  ecf75c0b1fe9d0c8d8ea76beb7724553  gcc/rust/typecheck/rust-hir-trait-reference.cc
  d66ea5137022ea56053a46e7c3704397  gcc/rust/typecheck/rust-hir-trait-reference.h
  f7e76e7030840e9376f38a69a9b8807c  gcc/rust/typecheck/rust-hir-trait-resolve.cc
*************** b4a86f011c7581b26f6472b6153b1f91  gcc/ru
*** 8484,8503 ****
  288c2e01e024cba4622c46ac6c6f9bad  gcc/rust/typecheck/rust-hir-type-check-base.h
  3f733188e36db57e34d01019aad0aeac  gcc/rust/typecheck/rust-hir-type-check-enumitem.cc
  14b730fba367cec7b80f769e886344ae  gcc/rust/typecheck/rust-hir-type-check-enumitem.h
! f9b7edc0c817fba279425dbfa7a0152d  gcc/rust/typecheck/rust-hir-type-check-expr.cc
  59f5cb0ba8dac0fa595b930d70f6a0b4  gcc/rust/typecheck/rust-hir-type-check-expr.h
  c4d3689a9fb6a35d014170c111c88b98  gcc/rust/typecheck/rust-hir-type-check-implitem.cc
  ebae3826def3f8d019935ea950afaf9a  gcc/rust/typecheck/rust-hir-type-check-implitem.h
  719df24a5ea498d9682927b961f8475e  gcc/rust/typecheck/rust-hir-type-check-item.cc
  b884a7eb4628421bd0b7c31329258b8c  gcc/rust/typecheck/rust-hir-type-check-item.h
! b8c6c90683816b55dc0bc2918c29f55d  gcc/rust/typecheck/rust-hir-type-check-path.cc
! 9efa4cb35a0e4bd16fcfb95dd433a6f2  gcc/rust/typecheck/rust-hir-type-check-pattern.cc
  f442f3356acfa69e70087f4d0a915461  gcc/rust/typecheck/rust-hir-type-check-pattern.h
  7dfde3f8d5f8afa537706a47a4204575  gcc/rust/typecheck/rust-hir-type-check-stmt.cc
  8cf233a69b1af8083328209d200778c1  gcc/rust/typecheck/rust-hir-type-check-stmt.h
  0817c84983af9fc42e486f3832232669  gcc/rust/typecheck/rust-hir-type-check-struct-field.h
  4e3e67d84938436a77dd3819b1f87ac0  gcc/rust/typecheck/rust-hir-type-check-struct.cc
! c8e53eb2634f35a9f5780a9d2416f5b9  gcc/rust/typecheck/rust-hir-type-check-type.cc
  4e713ea4973fa9fb07c655c889db01ce  gcc/rust/typecheck/rust-hir-type-check-type.h
  3f44641c54627e8d86fc02391652b727  gcc/rust/typecheck/rust-hir-type-check.cc
  56e01e94dbff3e8636e68e613618fec8  gcc/rust/typecheck/rust-hir-type-check.h
--- 8490,8509 ----
  288c2e01e024cba4622c46ac6c6f9bad  gcc/rust/typecheck/rust-hir-type-check-base.h
  3f733188e36db57e34d01019aad0aeac  gcc/rust/typecheck/rust-hir-type-check-enumitem.cc
  14b730fba367cec7b80f769e886344ae  gcc/rust/typecheck/rust-hir-type-check-enumitem.h
! 300445d34b6d2f64d8cc2b7bcb5a971d  gcc/rust/typecheck/rust-hir-type-check-expr.cc
  59f5cb0ba8dac0fa595b930d70f6a0b4  gcc/rust/typecheck/rust-hir-type-check-expr.h
  c4d3689a9fb6a35d014170c111c88b98  gcc/rust/typecheck/rust-hir-type-check-implitem.cc
  ebae3826def3f8d019935ea950afaf9a  gcc/rust/typecheck/rust-hir-type-check-implitem.h
  719df24a5ea498d9682927b961f8475e  gcc/rust/typecheck/rust-hir-type-check-item.cc
  b884a7eb4628421bd0b7c31329258b8c  gcc/rust/typecheck/rust-hir-type-check-item.h
! a1f63e3047b87f32e4ec22099c650fd6  gcc/rust/typecheck/rust-hir-type-check-path.cc
! 1c281f94f64e9bbad530c75ff07a5a47  gcc/rust/typecheck/rust-hir-type-check-pattern.cc
  f442f3356acfa69e70087f4d0a915461  gcc/rust/typecheck/rust-hir-type-check-pattern.h
  7dfde3f8d5f8afa537706a47a4204575  gcc/rust/typecheck/rust-hir-type-check-stmt.cc
  8cf233a69b1af8083328209d200778c1  gcc/rust/typecheck/rust-hir-type-check-stmt.h
  0817c84983af9fc42e486f3832232669  gcc/rust/typecheck/rust-hir-type-check-struct-field.h
  4e3e67d84938436a77dd3819b1f87ac0  gcc/rust/typecheck/rust-hir-type-check-struct.cc
! b8d1b86e97d7ea1a22f6e26937c30cf5  gcc/rust/typecheck/rust-hir-type-check-type.cc
  4e713ea4973fa9fb07c655c889db01ce  gcc/rust/typecheck/rust-hir-type-check-type.h
  3f44641c54627e8d86fc02391652b727  gcc/rust/typecheck/rust-hir-type-check.cc
  56e01e94dbff3e8636e68e613618fec8  gcc/rust/typecheck/rust-hir-type-check.h
*************** c8e53eb2634f35a9f5780a9d2416f5b9  gcc/ru
*** 8506,8512 ****
  41e53f378644a8acfac586a54606327a  gcc/rust/typecheck/rust-type-util.cc
  ee1a2e23854267f83989c6a2b13e32e3  gcc/rust/typecheck/rust-type-util.h
  74fb93afc26056a5b925e229d16046d3  gcc/rust/typecheck/rust-typecheck-context.cc
! 4fb5d79d75c6dfc974be45c8538b2175  gcc/rust/typecheck/rust-tyty-bounds.cc
  319ce81718bb45f8936b5d43c4fd9c97  gcc/rust/typecheck/rust-tyty-call.cc
  fe9bd81bf0e97e98a21e9e0787e7207a  gcc/rust/typecheck/rust-tyty-call.h
  a38838838003c6551067e8b34f582208  gcc/rust/typecheck/rust-tyty-region.h
--- 8512,8518 ----
  41e53f378644a8acfac586a54606327a  gcc/rust/typecheck/rust-type-util.cc
  ee1a2e23854267f83989c6a2b13e32e3  gcc/rust/typecheck/rust-type-util.h
  74fb93afc26056a5b925e229d16046d3  gcc/rust/typecheck/rust-typecheck-context.cc
! d4089b242c67fae20e339522350a495a  gcc/rust/typecheck/rust-tyty-bounds.cc
  319ce81718bb45f8936b5d43c4fd9c97  gcc/rust/typecheck/rust-tyty-call.cc
  fe9bd81bf0e97e98a21e9e0787e7207a  gcc/rust/typecheck/rust-tyty-call.h
  a38838838003c6551067e8b34f582208  gcc/rust/typecheck/rust-tyty-region.h
*************** fcb02130c7b685b134f835bf25092f50  gcc/ru
*** 8518,8524 ****
  4b763a53685364f24c7281fe201c9658  gcc/rust/typecheck/rust-tyty-variance-analysis.cc
  d745c17e84fc1621534e477f38dac840  gcc/rust/typecheck/rust-tyty-variance-analysis.h
  6a4d86b2e8fd559a6bc9fa2fc8b1b2c5  gcc/rust/typecheck/rust-tyty-visitor.h
! defa3974dd6c95ce4e692eec9893fa70  gcc/rust/typecheck/rust-tyty.cc
  dbc622189f5f1996602a9087c25df5af  gcc/rust/typecheck/rust-tyty.h
  c44cccaca8d8503fbc6121665bdc0515  gcc/rust/typecheck/rust-unify.cc
  242b34aa81a2b6f04486f34c9494a5dd  gcc/rust/typecheck/rust-unify.h
--- 8524,8530 ----
  4b763a53685364f24c7281fe201c9658  gcc/rust/typecheck/rust-tyty-variance-analysis.cc
  d745c17e84fc1621534e477f38dac840  gcc/rust/typecheck/rust-tyty-variance-analysis.h
  6a4d86b2e8fd559a6bc9fa2fc8b1b2c5  gcc/rust/typecheck/rust-tyty-visitor.h
! 59a8e762c88677fcb5e791560c61eca4  gcc/rust/typecheck/rust-tyty.cc
  dbc622189f5f1996602a9087c25df5af  gcc/rust/typecheck/rust-tyty.h
  c44cccaca8d8503fbc6121665bdc0515  gcc/rust/typecheck/rust-unify.cc
  242b34aa81a2b6f04486f34c9494a5dd  gcc/rust/typecheck/rust-unify.h
*************** e09d91fb613b21d220449fc5e5c591f2  gcc/ru
*** 8530,8536 ****
  28960566056dffb6dd86b0c3ad60bf39  gcc/rust/util/rust-abi.cc
  a85e112c6426c604dd9a3a9af712e53b  gcc/rust/util/rust-abi.h
  fbf60f73d5b5255baa1952468a4a3c04  gcc/rust/util/rust-attribute-values.h
! f07d8884ee5e61856176f83b384528e1  gcc/rust/util/rust-attributes.cc
  a2ab64046ea5754f5ad51f9f4788d4e4  gcc/rust/util/rust-attributes.h
  bca452f773154b078653dfe7acf7df6d  gcc/rust/util/rust-base62.cc
  487f155c2b6c6e0bd786e45db927798e  gcc/rust/util/rust-base62.h
--- 8536,8542 ----
  28960566056dffb6dd86b0c3ad60bf39  gcc/rust/util/rust-abi.cc
  a85e112c6426c604dd9a3a9af712e53b  gcc/rust/util/rust-abi.h
  fbf60f73d5b5255baa1952468a4a3c04  gcc/rust/util/rust-attribute-values.h
! da5fa48adf9fe6f76239b799062cfada  gcc/rust/util/rust-attributes.cc
  a2ab64046ea5754f5ad51f9f4788d4e4  gcc/rust/util/rust-attributes.h
  bca452f773154b078653dfe7acf7df6d  gcc/rust/util/rust-base62.cc
  487f155c2b6c6e0bd786e45db927798e  gcc/rust/util/rust-base62.h
*************** d276acba4372c6be86c88ab32a1a2e8b  gcc/ru
*** 8545,8551 ****
  312caaf1a11f85ba3561fcdc63801d54  gcc/rust/util/rust-edition.h
  7066a7ab173c77ab70f790914031570a  gcc/rust/util/rust-ggc.cc
  3232b843745603441d2d4e56e8c90abd  gcc/rust/util/rust-ggc.h
! 96d78450c9aacd021cd66239d1e5fa6f  gcc/rust/util/rust-hir-map.cc
  67e6719bf9daab58452edfc32e67a95a  gcc/rust/util/rust-hir-map.h
  88c8ae4d133ecd3a043fc12f4fe69091  gcc/rust/util/rust-identifier.h
  e19359a7d7b629c25d7bda5118df43da  gcc/rust/util/rust-inline-visitor.h
--- 8551,8557 ----
  312caaf1a11f85ba3561fcdc63801d54  gcc/rust/util/rust-edition.h
  7066a7ab173c77ab70f790914031570a  gcc/rust/util/rust-ggc.cc
  3232b843745603441d2d4e56e8c90abd  gcc/rust/util/rust-ggc.h
! 6564983732392c8256073e638cab54be  gcc/rust/util/rust-hir-map.cc
  67e6719bf9daab58452edfc32e67a95a  gcc/rust/util/rust-hir-map.h
  88c8ae4d133ecd3a043fc12f4fe69091  gcc/rust/util/rust-identifier.h
  e19359a7d7b629c25d7bda5118df43da  gcc/rust/util/rust-inline-visitor.h
*************** c8834665fd10b27b0d346b0feb8e0c75  gcc/ru
*** 8553,8559 ****
  7f475eb9a4edc930747ba73408e45e84  gcc/rust/util/rust-keyword-values.h
  12f22d88d5d206b938e8165b5975e99b  gcc/rust/util/rust-lang-item.cc
  2bb9dcb2b487b85c9663a38aac9e3cd5  gcc/rust/util/rust-lang-item.h
! aeeace423f6e82b5140b307df087a853  gcc/rust/util/rust-mapping-common.h
  8efe8f2ae6c529f6e8a316637b23263c  gcc/rust/util/rust-operators.h
  3ab599b73cd39c762daa8c80df124efe  gcc/rust/util/rust-punycode.cc
  cd4867be3dbfc626ab4ed34546e60a13  gcc/rust/util/rust-punycode.h
--- 8559,8565 ----
  7f475eb9a4edc930747ba73408e45e84  gcc/rust/util/rust-keyword-values.h
  12f22d88d5d206b938e8165b5975e99b  gcc/rust/util/rust-lang-item.cc
  2bb9dcb2b487b85c9663a38aac9e3cd5  gcc/rust/util/rust-lang-item.h
! 01ec027cfbd4523f54dcf1337a1af529  gcc/rust/util/rust-mapping-common.h
  8efe8f2ae6c529f6e8a316637b23263c  gcc/rust/util/rust-operators.h
  3ab599b73cd39c762daa8c80df124efe  gcc/rust/util/rust-punycode.cc
  cd4867be3dbfc626ab4ed34546e60a13  gcc/rust/util/rust-punycode.h
*************** fdc04e5af7ee387dce07c6ba9a99eaa8  gcc/se
*** 8599,8605 ****
  50d9999185408bcae454174489317b68  gcc/signop.h
  97a13c24fa48c474198b5767f228fd93  gcc/simple-diagnostic-path.cc
  4daee3acc61f789d9c4c04a27a5bb351  gcc/simple-diagnostic-path.h
! 8a547e417a1cfa27447596aa39d84541  gcc/simplify-rtx.cc
  456e0937ae4b3a0f49fd44fb0d05eb52  gcc/sort.cc
  599fc125220850c86939202313a6f733  gcc/sparseset.cc
  430469e71b555502fe14de847bb52093  gcc/sparseset.h
--- 8605,8611 ----
  50d9999185408bcae454174489317b68  gcc/signop.h
  97a13c24fa48c474198b5767f228fd93  gcc/simple-diagnostic-path.cc
  4daee3acc61f789d9c4c04a27a5bb351  gcc/simple-diagnostic-path.h
! 0a040f90eda404dfd9ba1a07b68662ab  gcc/simplify-rtx.cc
  456e0937ae4b3a0f49fd44fb0d05eb52  gcc/sort.cc
  599fc125220850c86939202313a6f733  gcc/sparseset.cc
  430469e71b555502fe14de847bb52093  gcc/sparseset.h
*************** d6258f1a0aa10c5dda51e11da016a5f0  gcc/ta
*** 8653,8659 ****
  b3ba747676feafec77aa6befa2dec6f0  gcc/targhooks.cc
  94a98d77cef80b0f949fc6d206067e2e  gcc/targhooks.h
  f39fcaa8197187283ccfed40107b426d  gcc/testsuite/.gitattributes
! cee4c20f737b36b7071f67c9ae8b44c6  gcc/testsuite/ChangeLog
  47e8e29b649ead73b8a1e4797da470ed  gcc/testsuite/ChangeLog-1993-2007
  35198a9e4fd31b935de8789faabf3351  gcc/testsuite/ChangeLog-2008
  0f19934540750356d1b91595cebfd9a8  gcc/testsuite/ChangeLog-2009
--- 8659,8665 ----
  b3ba747676feafec77aa6befa2dec6f0  gcc/targhooks.cc
  94a98d77cef80b0f949fc6d206067e2e  gcc/targhooks.h
  f39fcaa8197187283ccfed40107b426d  gcc/testsuite/.gitattributes
! f7be31d94f41def32e9f9f077f998019  gcc/testsuite/ChangeLog
  47e8e29b649ead73b8a1e4797da470ed  gcc/testsuite/ChangeLog-1993-2007
  35198a9e4fd31b935de8789faabf3351  gcc/testsuite/ChangeLog-2008
  0f19934540750356d1b91595cebfd9a8  gcc/testsuite/ChangeLog-2009
*************** bc971283f5728545e6e3cd2df580d7f6  gcc/te
*** 16957,16962 ****
--- 16963,16969 ----
  10d7016ba245864634ac502533a21027  gcc/testsuite/algol68/compile/error-def-1.a68
  519411f38ed81f312c3ee31556d4fd36  gcc/testsuite/algol68/compile/error-incestuous-union-1.a68
  449520edb75baa924cfc860ebce2173e  gcc/testsuite/algol68/compile/error-label-after-decl-1.a68
+ fc0e376579ecc74fa9a732f8b172a47a  gcc/testsuite/algol68/compile/error-loop-1.a68
  28424602955c7ecc77a5076b08d5f902  gcc/testsuite/algol68/compile/error-mode-stropping-1.a68
  3df85f6e3ae82f664ba4654139cc48eb  gcc/testsuite/algol68/compile/error-mode-stropping-10.a68
  47a2dea82f1edfeb88c96bcb21c94c0c  gcc/testsuite/algol68/compile/error-mode-stropping-11.a68
*************** d8d90e3ccd49a8c350bb7fa06c23b69e  gcc/te
*** 16974,16979 ****
--- 16981,16987 ----
  d9255b384fd183b33a0f3f1705652aef  gcc/testsuite/algol68/compile/error-mode-stropping-8.a68
  948785683824fa830a45a02ee6ebd9f4  gcc/testsuite/algol68/compile/error-mode-stropping-9.a68
  ed8937b8a485d89ad1b8dc4c0b235b82  gcc/testsuite/algol68/compile/error-module-coercions-1.a68
+ b47f251bf682b77a1fcbc0deb10309bb  gcc/testsuite/algol68/compile/error-module-nested-access-1.a68
  c2b0d2946cbab417eebb4d24da1ab5a8  gcc/testsuite/algol68/compile/error-module-not-found-1.a68
  8b0c028ef528ab0ddc26892632812b6e  gcc/testsuite/algol68/compile/error-module-ranges-1.a68
  e74cfe8a318c62621bf56edc50d99212  gcc/testsuite/algol68/compile/error-nestable-comments-1.a68
*************** cb076d039affa49f256d588c4171e17e  gcc/te
*** 17029,17035 ****
  b602de4d7ac9a6d1023dcc45983c25fa  gcc/testsuite/algol68/compile/mcgt-7.1.3a-bis.a68
  9beecedeeea6e22797a615259ef9da5b  gcc/testsuite/algol68/compile/mcgt-7.1.3a.a68
  866415cb9d8563f6b5063c4f3b64551c  gcc/testsuite/algol68/compile/module-1.a68
! 3baba36aae381c8fba34a6518ec4c36b  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
--- 17037,17043 ----
  b602de4d7ac9a6d1023dcc45983c25fa  gcc/testsuite/algol68/compile/mcgt-7.1.3a-bis.a68
  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
*************** a30ee6cd63bedaff93b8e6fe5e3104c8  gcc/te
*** 17064,17071 ****
  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
! 26b62815fc288b379cddbabe18f65a6d  gcc/testsuite/algol68/compile/modules/compile.exp
  1dcb757cdfc80354940aadcc2c058999  gcc/testsuite/algol68/compile/modules/module1.a68
  0ead388a4ef7afb2ca500c71f6b4cc5e  gcc/testsuite/algol68/compile/modules/module2.a68
  88030bf9e8eba22018c0bf58fc16fb57  gcc/testsuite/algol68/compile/modules/module3.a68
  1d5afb88a3b85a0838e98351f0c7bdec  gcc/testsuite/algol68/compile/modules/module4.a68
--- 17072,17082 ----
  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
! 17e8661b3c4bfa826e6c431959d1e160  gcc/testsuite/algol68/compile/modules/compile.exp
  1dcb757cdfc80354940aadcc2c058999  gcc/testsuite/algol68/compile/modules/module1.a68
+ 0b9aef561bc45dc53a4bf5093ff482ba  gcc/testsuite/algol68/compile/modules/module10.a68
+ a4909b5b45bb897dbc13f4c51d80097f  gcc/testsuite/algol68/compile/modules/module11.a68
+ a9c9cc2123338fad40201ba46bb53367  gcc/testsuite/algol68/compile/modules/module12.a68
  0ead388a4ef7afb2ca500c71f6b4cc5e  gcc/testsuite/algol68/compile/modules/module2.a68
  88030bf9e8eba22018c0bf58fc16fb57  gcc/testsuite/algol68/compile/modules/module3.a68
  1d5afb88a3b85a0838e98351f0c7bdec  gcc/testsuite/algol68/compile/modules/module4.a68
*************** fa078e58a34c64e2f9eccc137c8d6b90  gcc/te
*** 17074,17084 ****
--- 17085,17103 ----
  b1be91cf495ac75a0e7b22f404587998  gcc/testsuite/algol68/compile/modules/module7.a68
  2a4f987c3bb31344d2c53974d1186195  gcc/testsuite/algol68/compile/modules/module8.a68
  85491bb373414b886d25265282cb6791  gcc/testsuite/algol68/compile/modules/module9.a68
+ 5d587575b9a9cbefd1425ba84ff89f22  gcc/testsuite/algol68/compile/modules/program-10.a68
+ 7c45f6e7d75abf67a972d8a47a1fe164  gcc/testsuite/algol68/compile/modules/program-11.a68
  dde2d4242a63a3b3821c9dbc15c9afa2  gcc/testsuite/algol68/compile/modules/program-7.a68
  cf0515185abfe904fc9bd1837491609c  gcc/testsuite/algol68/compile/modules/program-8.a68
  3e7423d21011cef99688f62817fa8330  gcc/testsuite/algol68/compile/modules/program-9.a68
+ 5580ee274b2e8242ff8cda915c2c7da2  gcc/testsuite/algol68/compile/modules/program-error-multiple-delaration-module-1.a68
  039e18e1fb1e5d511e47027013332185  gcc/testsuite/algol68/compile/modules/program-error-no-prio-1.a68
  42a7da4943d0d739f178f7bffafc912d  gcc/testsuite/algol68/compile/modules/program-error-outside-access-1.a68
+ c6c9b65f4b03c54cec88bff8a3e163b4  gcc/testsuite/algol68/compile/modules/program-m68-ilp32.a68
+ 886863a58c40c368c1c3f6b80e0405b8  gcc/testsuite/algol68/compile/modules/program-m68-llp64-be.a68
+ ceeafc62ae8987ea07b32dfcd88c9e01  gcc/testsuite/algol68/compile/modules/program-m68-llp64.a68
+ bcedbf89df30527b662d51b4cdd3f419  gcc/testsuite/algol68/compile/modules/program-m68-lp64-be.a68
+ 1da550fb7981c16c671c8d3e6d921d63  gcc/testsuite/algol68/compile/modules/program-m68-lp64.a68
  bd8246f2db2521a6818a8ce7f2476610  gcc/testsuite/algol68/compile/modules/program-module-accesses-module-1.a68
  369030bb9cdc3966fdd495f011a6c692  gcc/testsuite/algol68/compile/modules/program-proc-arg-order-1.a68
  e82cbeac5b925dd4aea14322ac4ddd87  gcc/testsuite/algol68/compile/nested-comment-1.a68
*************** f2beb07edffabebdccad8faf2bc3b584  gcc/te
*** 17374,17380 ****
  ed509318512a89382e1649c84de44521  gcc/testsuite/algol68/execute/modab-1.a68
  2c85457bdee9291c8a0c753cefa40d62  gcc/testsuite/algol68/execute/modab-2.a68
  8003cac24f1aa6e0dc244b3788038cb6  gcc/testsuite/algol68/execute/mode-indication-1.a68
! ddb9ed171e55fb428066288927a9bd82  gcc/testsuite/algol68/execute/modules/Modules20.map
  bcfdb63511805c2e3f5b07f72f0171f0  gcc/testsuite/algol68/execute/modules/README
  e5b476c1b300f469c5d1e91806486a63  gcc/testsuite/algol68/execute/modules/execute.exp
  6886f82d84222ca0459b86fbdec52673  gcc/testsuite/algol68/execute/modules/module-bar.a68
--- 17393,17399 ----
  ed509318512a89382e1649c84de44521  gcc/testsuite/algol68/execute/modab-1.a68
  2c85457bdee9291c8a0c753cefa40d62  gcc/testsuite/algol68/execute/modab-2.a68
  8003cac24f1aa6e0dc244b3788038cb6  gcc/testsuite/algol68/execute/mode-indication-1.a68
! a27647a12fb2a7345ed0faf1c93c6534  gcc/testsuite/algol68/execute/modules/Modules20.map
  bcfdb63511805c2e3f5b07f72f0171f0  gcc/testsuite/algol68/execute/modules/README
  e5b476c1b300f469c5d1e91806486a63  gcc/testsuite/algol68/execute/modules/execute.exp
  6886f82d84222ca0459b86fbdec52673  gcc/testsuite/algol68/execute/modules/module-bar.a68
*************** d96afe1f473d2f45009f219219c15469  gcc/te
*** 17387,17393 ****
  a587cd3c9bf8eaf397493ee12823942c  gcc/testsuite/algol68/execute/modules/module14.a68
  5e1d5cd221a76f2996c59afa5bf75942  gcc/testsuite/algol68/execute/modules/module15.a68
  185ca85ea1658a7f82885b2d9e7fd0b4  gcc/testsuite/algol68/execute/modules/module16.a68
! 57b738768cdab45aabe10b1e59e257c5  gcc/testsuite/algol68/execute/modules/module17.a68
  9e0733a763fc93bd2c58a8ffca51301f  gcc/testsuite/algol68/execute/modules/module3.a68
  1225a4492a80b08cd38a8c74e25a7ab0  gcc/testsuite/algol68/execute/modules/module4.a68
  4ceb6b4c31b8b4abc32b8c6a92979888  gcc/testsuite/algol68/execute/modules/module5.a68
--- 17406,17420 ----
  a587cd3c9bf8eaf397493ee12823942c  gcc/testsuite/algol68/execute/modules/module14.a68
  5e1d5cd221a76f2996c59afa5bf75942  gcc/testsuite/algol68/execute/modules/module15.a68
  185ca85ea1658a7f82885b2d9e7fd0b4  gcc/testsuite/algol68/execute/modules/module16.a68
! b0b897e3e3bb00a8979f2a76f9e2cb19  gcc/testsuite/algol68/execute/modules/module17.a68
! a96b06f15ed6e8be8f7f3e8f622713ba  gcc/testsuite/algol68/execute/modules/module18a.a68
! ffc21c034deb401f9dde4945b19fe7da  gcc/testsuite/algol68/execute/modules/module18b.a68
! d46149f67ae5b31f1f1797f71fefc9eb  gcc/testsuite/algol68/execute/modules/module18c.a68
! c89a2f16763f59111e9aa0dbb0bec22d  gcc/testsuite/algol68/execute/modules/module22bar.a68
! c2a62320ffa3899b770e9019897e0751  gcc/testsuite/algol68/execute/modules/module22foo.a68
! 69cd86a9e09e75f04433680a7d71edcd  gcc/testsuite/algol68/execute/modules/module23bar.a68
! ac3aed0ffb0459584e0d54861ead9da9  gcc/testsuite/algol68/execute/modules/module23foo.a68
! 1d06ebf7fbc01a467cfa1d3b4554cdd4  gcc/testsuite/algol68/execute/modules/module24.a68
  9e0733a763fc93bd2c58a8ffca51301f  gcc/testsuite/algol68/execute/modules/module3.a68
  1225a4492a80b08cd38a8c74e25a7ab0  gcc/testsuite/algol68/execute/modules/module4.a68
  4ceb6b4c31b8b4abc32b8c6a92979888  gcc/testsuite/algol68/execute/modules/module5.a68
*************** f426864755e710beb231da3ea058d671  gcc/te
*** 17402,17410 ****
--- 17429,17442 ----
  a99af1096f319575a7f72a39e2cf179e  gcc/testsuite/algol68/execute/modules/program-15.a68
  8d0c43b9fdccd78d75beefb6013496b2  gcc/testsuite/algol68/execute/modules/program-16.a68
  54a19c7d8623132b8094c6c4aa2692e4  gcc/testsuite/algol68/execute/modules/program-17.a68
+ 28a489f689f33de5f8cde6b67d6ad581  gcc/testsuite/algol68/execute/modules/program-18.a68
  aeabee135ed523b7f2a8f8d1f77b06eb  gcc/testsuite/algol68/execute/modules/program-19.a68
  57f36f8064ebb76768548805faaf91d5  gcc/testsuite/algol68/execute/modules/program-2.a68
  924948ff93175f2dd41713aed063e240  gcc/testsuite/algol68/execute/modules/program-20.a68
+ bd25a4aeb21a959d38e6a1ccc89a65ab  gcc/testsuite/algol68/execute/modules/program-21.a68
+ a4cbfef7dd02cb406d5a8801cf55df5c  gcc/testsuite/algol68/execute/modules/program-22.a68
+ 43d51a35de25739abd7cf9304c134f34  gcc/testsuite/algol68/execute/modules/program-23.a68
+ 299c649a8c487402e3ec8d3ada8bdf8a  gcc/testsuite/algol68/execute/modules/program-24.a68
  b8f47f3c2df580248368a5c298a1b812  gcc/testsuite/algol68/execute/modules/program-3.a68
  7d433464d7d562ce9bd71eea28f40c03  gcc/testsuite/algol68/execute/modules/program-4.a68
  a00ad027485af688f31ddcf5b822ad9e  gcc/testsuite/algol68/execute/modules/program-5.a68
*************** dfb40888726dc623d5e23e1d7fba6ce5  gcc/te
*** 17437,17442 ****
--- 17469,17475 ----
  20bffc0d0430394287bd0a3a8b0ab183  gcc/testsuite/algol68/execute/over-int-1.a68
  f4a9dc5f87811e0e5c798398e1bec653  gcc/testsuite/algol68/execute/overab-1.a68
  96ecc74097267291ad69de557754aec1  gcc/testsuite/algol68/execute/overab-2.a68
+ 3b58903153c953ca39c65429a29ebf19  gcc/testsuite/algol68/execute/pack-soids-in-moid-1.a68
  e8aebcbf2074af69abdba07035204b4b  gcc/testsuite/algol68/execute/particular-program-1.a68
  5a5a051d79f47958daf8ad1a0e80afe3  gcc/testsuite/algol68/execute/plus-char-1.a68
  70228744433db1f554f586515a4be365  gcc/testsuite/algol68/execute/plus-int-1.a68
*************** f48f8abadf7267488e7fc07300b15321  gcc/te
*** 28166,28171 ****
--- 28199,28206 ----
  f2bb90a7b95f5ca56f19993dc668ce44  gcc/testsuite/g++.dg/cpp2a/concepts-friend15.C
  78691a3f17811dcdecf47f6df427a97c  gcc/testsuite/g++.dg/cpp2a/concepts-friend16.C
  7ecb03f5905c0460a20f5edf81561f98  gcc/testsuite/g++.dg/cpp2a/concepts-friend17.C
+ b192de319a3668a8a3539d1c8be790c9  gcc/testsuite/g++.dg/cpp2a/concepts-friend18.C
+ 451bfd68952d37940a8f8c9efdf8011b  gcc/testsuite/g++.dg/cpp2a/concepts-friend18a.C
  2fdb3d1a7c3f6a1361b9e8a0700d78f5  gcc/testsuite/g++.dg/cpp2a/concepts-friend2.C
  3f315ba7ac021707fcaa518bf77b73e4  gcc/testsuite/g++.dg/cpp2a/concepts-friend3.C
  ac59cd12de1286d61d74c57276a780ba  gcc/testsuite/g++.dg/cpp2a/concepts-friend4.C
*************** fc1805f7c9ae0e0d70715f21f1ab1323  gcc/te
*** 28914,28919 ****
--- 28949,28955 ----
  8d4a60f484f6af22e432afc4620ef9f8  gcc/testsuite/g++.dg/cpp2a/lambda-targ16.C
  8d23b1e036f428ec77a4920b68180ae3  gcc/testsuite/g++.dg/cpp2a/lambda-targ17.C
  bef40735cb8990bf2be0e69a401f204b  gcc/testsuite/g++.dg/cpp2a/lambda-targ18.C
+ bb58849ed5ff08289f5c5392f492c7f2  gcc/testsuite/g++.dg/cpp2a/lambda-targ19.C
  d363d5590bc863dbb1f6bb96bad95b3c  gcc/testsuite/g++.dg/cpp2a/lambda-targ2.C
  d948ecca981f7c5de5ca48afc987ea36  gcc/testsuite/g++.dg/cpp2a/lambda-targ2a.C
  096118fef57f992a05319e3b6f8ba6a7  gcc/testsuite/g++.dg/cpp2a/lambda-targ3.C
*************** f917e8e53ce100d9b00585ebdb34ff7a  gcc/te
*** 29116,29121 ****
--- 29152,29158 ----
  98005d747053b3076aa53928776efb7e  gcc/testsuite/g++.dg/cpp2a/paren-init7.C
  ddb0c78842f6b4e3e4606849bc1a4a82  gcc/testsuite/g++.dg/cpp2a/paren-init8.C
  fc8ccbfe7f14dd4a41ff708c5a05b226  gcc/testsuite/g++.dg/cpp2a/paren-init9.C
+ da710eb2889fcf39c429bcbbfdc2abef  gcc/testsuite/g++.dg/cpp2a/partial-spec-redecl.C
  475c14632e683c843d48238b8c5514f2  gcc/testsuite/g++.dg/cpp2a/pr114426.C
  9d5c0df7ab0b6e3e5ab03bc8eb135452  gcc/testsuite/g++.dg/cpp2a/pr117317-1.C
  4b52a1949fed25dc03d5cfb83047e7c5  gcc/testsuite/g++.dg/cpp2a/pr117317-2.C
*************** fd3b6665cd27a15dcd7f9f07ad53481e  gcc/te
*** 30482,30487 ****
--- 30519,30525 ----
  619d91e2e14d184184e55b956ce47635  gcc/testsuite/g++.dg/ext/dllimport8.C
  24e046aee349bd5ae33e22cd21cdfce5  gcc/testsuite/g++.dg/ext/dllimport9.C
  112d3ae3e0b07b161ecc1e3b8589d2a7  gcc/testsuite/g++.dg/ext/fimplicit-constexpr1.C
+ cca528a8282111fb49089953739ca486  gcc/testsuite/g++.dg/ext/fimplicit-constexpr2.C
  dba2df84120e79d3695ac23fcaa36a96  gcc/testsuite/g++.dg/ext/fixed1.C
  2dec269695cc75bd9f6561ca76c86464  gcc/testsuite/g++.dg/ext/fixed2.C
  1ba652ee6da42059023b5a0246a664e8  gcc/testsuite/g++.dg/ext/flex-array-counted-by-2.C
*************** c087af9321ac0e24731d2a4d1bb3e319  gcc/te
*** 33709,33724 ****
  8c3b4a86df0992edb91ffe5c31e3c519  gcc/testsuite/g++.dg/modules/internal-15_b.C
  88ee381d96387e16394444459f265bfd  gcc/testsuite/g++.dg/modules/internal-16.C
  de8b65b21e105d140eb3a6820d4aff13  gcc/testsuite/g++.dg/modules/internal-17_a.C
! 8114f1020d3c84955efc22dd7c18c4cb  gcc/testsuite/g++.dg/modules/internal-17_b.C
  8e050ce1f908224ad301706271ad39c4  gcc/testsuite/g++.dg/modules/internal-18.C
  eaa5a7feb828c2d301939fe4e5b02ace  gcc/testsuite/g++.dg/modules/internal-19_a.C
  0557bb600ba22cb555a81389c8419285  gcc/testsuite/g++.dg/modules/internal-19_b.C
  c66d17d0fb2dc80371978510d0cc1f0f  gcc/testsuite/g++.dg/modules/internal-2_a.H
  21bb55995bb6fa8ed6a8fa69368f7f36  gcc/testsuite/g++.dg/modules/internal-2_b.H
  ba3bc4f8f333742fb78f03db052c4ffa  gcc/testsuite/g++.dg/modules/internal-2_c.C
  88545b05c1d1edd1f0ed03982b1c6b8b  gcc/testsuite/g++.dg/modules/internal-3.C
  79a13568f2e78729ac0b18766bb9763e  gcc/testsuite/g++.dg/modules/internal-4_a.H
! 57bf39ca055d921b446f37e378ccde61  gcc/testsuite/g++.dg/modules/internal-4_b.C
  c82fc11a682b784c1f7e442d87402c8d  gcc/testsuite/g++.dg/modules/internal-5_a.C
  03bd624923c85327bacab539f1b93dde  gcc/testsuite/g++.dg/modules/internal-5_b.C
  69f6d36160149649b264e2494c9ddfd1  gcc/testsuite/g++.dg/modules/internal-6.C
--- 33747,33767 ----
  8c3b4a86df0992edb91ffe5c31e3c519  gcc/testsuite/g++.dg/modules/internal-15_b.C
  88ee381d96387e16394444459f265bfd  gcc/testsuite/g++.dg/modules/internal-16.C
  de8b65b21e105d140eb3a6820d4aff13  gcc/testsuite/g++.dg/modules/internal-17_a.C
! 0a022e56b0fb5b3b73c65cff5e59ad05  gcc/testsuite/g++.dg/modules/internal-17_b.C
  8e050ce1f908224ad301706271ad39c4  gcc/testsuite/g++.dg/modules/internal-18.C
  eaa5a7feb828c2d301939fe4e5b02ace  gcc/testsuite/g++.dg/modules/internal-19_a.C
  0557bb600ba22cb555a81389c8419285  gcc/testsuite/g++.dg/modules/internal-19_b.C
+ 1d726f8fc6f656fa2df05b8381960af8  gcc/testsuite/g++.dg/modules/internal-20_a.C
+ 005fa344ce8985913f2ea6b88d4140f9  gcc/testsuite/g++.dg/modules/internal-20_b.C
+ e835dcc9b159c3af61d00fa588af0642  gcc/testsuite/g++.dg/modules/internal-20_c.C
+ cf79da1e96d45e13dd6f225ceaef2fad  gcc/testsuite/g++.dg/modules/internal-21_a.C
+ 3bc43da4a8308b7018a326a4f2801d13  gcc/testsuite/g++.dg/modules/internal-21_b.C
  c66d17d0fb2dc80371978510d0cc1f0f  gcc/testsuite/g++.dg/modules/internal-2_a.H
  21bb55995bb6fa8ed6a8fa69368f7f36  gcc/testsuite/g++.dg/modules/internal-2_b.H
  ba3bc4f8f333742fb78f03db052c4ffa  gcc/testsuite/g++.dg/modules/internal-2_c.C
  88545b05c1d1edd1f0ed03982b1c6b8b  gcc/testsuite/g++.dg/modules/internal-3.C
  79a13568f2e78729ac0b18766bb9763e  gcc/testsuite/g++.dg/modules/internal-4_a.H
! 411ae1999412a83f2ccb9f09c471ade2  gcc/testsuite/g++.dg/modules/internal-4_b.C
  c82fc11a682b784c1f7e442d87402c8d  gcc/testsuite/g++.dg/modules/internal-5_a.C
  03bd624923c85327bacab539f1b93dde  gcc/testsuite/g++.dg/modules/internal-5_b.C
  69f6d36160149649b264e2494c9ddfd1  gcc/testsuite/g++.dg/modules/internal-6.C
*************** b4e69615ec86a3c4ede133d9854f3546  gcc/te
*** 34649,34654 ****
--- 34692,34698 ----
  d1d4183ea84a4413d4d7349cc9a82217  gcc/testsuite/g++.dg/modules/tpl-friend-20_c.C
  28b2c7bcc99c18730b439e7cc39743b6  gcc/testsuite/g++.dg/modules/tpl-friend-21_a.C
  5af0c25597d36141144015f5cb18b8d0  gcc/testsuite/g++.dg/modules/tpl-friend-21_b.C
+ 494c2316322b443b61733b1be3fbc844  gcc/testsuite/g++.dg/modules/tpl-friend-22.C
  d36e0a1f34b1d7f2cacd00844d768335  gcc/testsuite/g++.dg/modules/tpl-friend-2_a.C
  4511743d659541c1148b76a234b62a41  gcc/testsuite/g++.dg/modules/tpl-friend-2_b.C
  95a880cc0f3eee2ff8309d2183f7f9d4  gcc/testsuite/g++.dg/modules/tpl-friend-3_a.C
*************** ae55d6e48a2ac8b72c938dc82c696408  gcc/te
*** 37710,37715 ****
--- 37754,37760 ----
  7b1e5908f61421fb93ba70039b7baafb  gcc/testsuite/g++.dg/template/friend85.C
  40f2052ca29ac45703070d7e1c57ce4d  gcc/testsuite/g++.dg/template/friend86.C
  8b5a278d3c02cae63edfc0733831aca7  gcc/testsuite/g++.dg/template/friend87.C
+ caaef5f71ace9c745eacf4ef132c6647  gcc/testsuite/g++.dg/template/friend88.C
  59b5bf61b7f6210d3cf3b9b45692794a  gcc/testsuite/g++.dg/template/friend9.C
  d5d24fc94d133229a10c5b13f44c253b  gcc/testsuite/g++.dg/template/func1.C
  363cfac4cb9c49757acf9e6f0861b62e  gcc/testsuite/g++.dg/template/func2.C
*************** c9198836844a7336e686dd975a80fbbd  gcc/te
*** 44320,44326 ****
  9a3b7e2498f4259da15a71f2850ec227  gcc/testsuite/g++.target/aarch64/sme/sme_throw_2.C
  7c9f331f9af372aa80eabfedf84ae4d1  gcc/testsuite/g++.target/aarch64/sme/streaming_mode_1.C
  7fce27ec45311cf4d170ad324de8da10  gcc/testsuite/g++.target/aarch64/sme/streaming_mode_2.C
! d50d2632d11f285298dab758e5afed2c  gcc/testsuite/g++.target/aarch64/sme2/aarch64-sme2-acle-asm.exp
  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
--- 44365,44371 ----
  9a3b7e2498f4259da15a71f2850ec227  gcc/testsuite/g++.target/aarch64/sme/sme_throw_2.C
  7c9f331f9af372aa80eabfedf84ae4d1  gcc/testsuite/g++.target/aarch64/sme/streaming_mode_1.C
  7fce27ec45311cf4d170ad324de8da10  gcc/testsuite/g++.target/aarch64/sme/streaming_mode_2.C
! 64fdb3172fe11b4af327db414048b0b4  gcc/testsuite/g++.target/aarch64/sme2/aarch64-sme2-acle-asm.exp
  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
*************** ca3258d951d902a684b95b8e188acdd8  gcc/te
*** 55659,55664 ****
--- 55704,55710 ----
  ae7bcf6f4a20a62efe1f640c131c15cb  gcc/testsuite/gcc.dg/large-size-array-6.c
  b9d0331e6e845cb0d7f26561f4753f77  gcc/testsuite/gcc.dg/large-size-array.c
  a1511014730573ca08fa055a4f00aa75  gcc/testsuite/gcc.dg/lazy-ptr-test.c
+ 88851b8cf9c6435c9fd930dcc84939e0  gcc/testsuite/gcc.dg/licm-self-write-partial-alias.c
  d0bcca2e1a0a2193680083619c7cffab  gcc/testsuite/gcc.dg/limits-width-1.c
  b22be2559a8886fa235c4257ce1f2437  gcc/testsuite/gcc.dg/limits-width-2.c
  fb18e8a2444662919ef8327f8f1a6262  gcc/testsuite/gcc.dg/live-patching-1.c
*************** acdecc3711a0a56635d3de4e2064206c  gcc/te
*** 57431,57436 ****
--- 57477,57483 ----
  9f4094b7196b5eab8c79608995a96efc  gcc/testsuite/gcc.dg/pr122991.c
  9fcb8913b9a18055b2a811284d59780e  gcc/testsuite/gcc.dg/pr123018.c
  4bb95b7b27d5cf33c1f6f21056e27c11  gcc/testsuite/gcc.dg/pr123110-1.c
+ 5e8f304c4d6cec9c5b0a6f0ed430bd96  gcc/testsuite/gcc.dg/pr123114.c
  a7854fc3636527bc932319df4a19bc42  gcc/testsuite/gcc.dg/pr123205.c
  bc5ddfbbc46f4e0cce1629d1b58d3090  gcc/testsuite/gcc.dg/pr12603.c
  72a2fca76cb69617ae36bab93c7ec0d7  gcc/testsuite/gcc.dg/pr12625-1.c
*************** d9ab318bf88df260c040cad6b5bc8c90  gcc/te
*** 61237,61242 ****
--- 61284,61290 ----
  61ae03371e683338d99762a97b9f10f9  gcc/testsuite/gcc.dg/torture/pr122847-1.c
  599ac258574b276ce3335b78a5a77da0  gcc/testsuite/gcc.dg/torture/pr122873.c
  a72ae7e01256a00a4331a97695f441c8  gcc/testsuite/gcc.dg/torture/pr123027.c
+ 53e66b5cadafe7e2c98dde34bf157702  gcc/testsuite/gcc.dg/torture/pr123267-1.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
*************** e9fd20c6a5ee817fc329cc085c9032eb  gcc/te
*** 62397,62402 ****
--- 62445,62456 ----
  9c537759c05659b9e3cc8ad98d65510a  gcc/testsuite/gcc.dg/tree-prof/afdo-crossmodule-1.c
  c5768a698cd9d7a3225b3924d427c6cc  gcc/testsuite/gcc.dg/tree-prof/afdo-crossmodule-1b.c
  752f7da7123552ecbd5f01fb7952d252  gcc/testsuite/gcc.dg/tree-prof/afdo-inline.c
+ 5c5bc14de73bceee78f740efa04c39b7  gcc/testsuite/gcc.dg/tree-prof/afdo-lto_priv-basic-0.c
+ 627e134e62e708dcdbd6e02b9ab4f496  gcc/testsuite/gcc.dg/tree-prof/afdo-lto_priv-basic-1.c
+ 021c60269b8772067ac1deb0dccbb54a  gcc/testsuite/gcc.dg/tree-prof/afdo-lto_priv-header-0.c
+ 5c0007bbd6b0786c7939a4015c94acb7  gcc/testsuite/gcc.dg/tree-prof/afdo-lto_priv-header-0.h
+ f0a48dbae47a54ff6387cbba70d4d314  gcc/testsuite/gcc.dg/tree-prof/afdo-lto_priv-header-1.c
+ 1178cb7c893299527502d074ddde6028  gcc/testsuite/gcc.dg/tree-prof/afdo-lto_priv-header-1.h
  6002203bc07005ca0e9c543037930992  gcc/testsuite/gcc.dg/tree-prof/afdo-vpt-earlyinline.c
  7fea89044d1cae3c25a1775dd049cbe7  gcc/testsuite/gcc.dg/tree-prof/bb-reorg.c
  81362d69c7e6d3814714d9e07f30a093  gcc/testsuite/gcc.dg/tree-prof/clone-merge-1.c
*************** d396c36b9f0d747b966a2da9958bc3ac  gcc/te
*** 64339,64344 ****
--- 64393,64399 ----
  bf72ea1f3a63addcd35de7fcb9e03537  gcc/testsuite/gcc.dg/tree-ssa/shifts-3.c
  c2616807b5458da149bcc0d0ff292c60  gcc/testsuite/gcc.dg/tree-ssa/shifts-4.c
  20ce3bebeb7a8c4161d2085814041edc  gcc/testsuite/gcc.dg/tree-ssa/shorten-1.c
+ 06258fdaa6a7e494fc1382efb0ace703  gcc/testsuite/gcc.dg/tree-ssa/sincos-ice-on-ifn_sin-call.c
  2cb74ffdd8d4210ad1c6bbaddbd8a8b6  gcc/testsuite/gcc.dg/tree-ssa/slsr-1.c
  a2527727970eaab3e3d043e5e4379256  gcc/testsuite/gcc.dg/tree-ssa/slsr-10.c
  549723cdcfb863f339c41fe0af39103f  gcc/testsuite/gcc.dg/tree-ssa/slsr-11.c
*************** ae5cf71ae02c3cde7a67cfb54ec03bbe  gcc/te
*** 70087,70093 ****
  cc4f69997a3864b3299f1b4809507883  gcc/testsuite/gcc.target/aarch64/pragma_cpp_predefs_1b.c
  be30d927e2df67d4fe2786d0d026bbaa  gcc/testsuite/gcc.target/aarch64/pragma_cpp_predefs_2.c
  38af83405c4b19363e539e8f2589d817  gcc/testsuite/gcc.target/aarch64/pragma_cpp_predefs_3.c
! 5665583c5162a1f3f37fd70cbe7f9809  gcc/testsuite/gcc.target/aarch64/pragma_cpp_predefs_4.c
  b5ff836b5a987f9feaf35c5f8ec9f4db  gcc/testsuite/gcc.target/aarch64/pragma_cpp_predefs_5.c
  1f95766b4ed5bfb5f2cf1f168a607a8d  gcc/testsuite/gcc.target/aarch64/predefine_large.c
  d38e476730748c653068e7cb2d8d6ca6  gcc/testsuite/gcc.target/aarch64/predefine_small.c
--- 70142,70148 ----
  cc4f69997a3864b3299f1b4809507883  gcc/testsuite/gcc.target/aarch64/pragma_cpp_predefs_1b.c
  be30d927e2df67d4fe2786d0d026bbaa  gcc/testsuite/gcc.target/aarch64/pragma_cpp_predefs_2.c
  38af83405c4b19363e539e8f2589d817  gcc/testsuite/gcc.target/aarch64/pragma_cpp_predefs_3.c
! 6c9e890f2c32a71e12e23b09497b8909  gcc/testsuite/gcc.target/aarch64/pragma_cpp_predefs_4.c
  b5ff836b5a987f9feaf35c5f8ec9f4db  gcc/testsuite/gcc.target/aarch64/pragma_cpp_predefs_5.c
  1f95766b4ed5bfb5f2cf1f168a607a8d  gcc/testsuite/gcc.target/aarch64/predefine_large.c
  d38e476730748c653068e7cb2d8d6ca6  gcc/testsuite/gcc.target/aarch64/predefine_small.c
*************** da7e2bf92e718d8da2021eafd533aac9  gcc/te
*** 70744,70763 ****
  ceee1cb7e524ecc70b7e706cd0db3292  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/psel_lane_c32.c
  0a0ed47541c6394b9f8d2deb005b177e  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/psel_lane_c64.c
  6451ea007056de046b17b3cbcef22912  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/psel_lane_c8.c
! fcebf3db146b8f53a8f6331baf69fbfc  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/read_hor_za128.c
  334e8a5dad4b07c99d66059975c05638  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/read_hor_za16.c
  dec729f0b9203a79ab9190c6ae4dd39c  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/read_hor_za32.c
  30178df775f7eeeccabf84a70732b6d1  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/read_hor_za64.c
! 1af84d56dda07892566ba3ff4598ae4c  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/read_hor_za8.c
! 7be891326b4081f07577a68a4e0d4b51  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/read_ver_za128.c
  db7ec863bbc5f42e3eaaf7d41c078f60  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/read_ver_za16.c
  954127f6d3b08028a0dbbecea8abaea4  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/read_ver_za32.c
  6c42cd7108db85285989b01cdfe0ceab  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/read_ver_za64.c
! f73c190603e33d11562ee018328fb06d  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/read_ver_za8.c
  57473390b86a03f32d83e9845fcd1e8f  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_bf16.c
  610cf99edd9ae5f40f3a3a69e3efc55b  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_f16.c
  494c59f5fc641ba1ca278e6162846419  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_f32.c
  ad3bf5b4426c396c38ad710e89d302ac  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_f64.c
  5e7be0532c1cf9a24ceae0d2466cba9e  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_s16.c
  0122c325c4687b56eab55136cc73671a  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_s32.c
  9c0d30515c9685ca27aabb6a386b5537  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_s64.c
--- 70799,70819 ----
  ceee1cb7e524ecc70b7e706cd0db3292  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/psel_lane_c32.c
  0a0ed47541c6394b9f8d2deb005b177e  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/psel_lane_c64.c
  6451ea007056de046b17b3cbcef22912  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/psel_lane_c8.c
! 3176b0aaac0729f782c2981b152b2838  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/read_hor_za128.c
  334e8a5dad4b07c99d66059975c05638  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/read_hor_za16.c
  dec729f0b9203a79ab9190c6ae4dd39c  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/read_hor_za32.c
  30178df775f7eeeccabf84a70732b6d1  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/read_hor_za64.c
! 9bbdbd2f4f7223e441b51e06fde3d217  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/read_hor_za8.c
! 1aee9629c3ec0e9a320b0d1e545e3841  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/read_ver_za128.c
  db7ec863bbc5f42e3eaaf7d41c078f60  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/read_ver_za16.c
  954127f6d3b08028a0dbbecea8abaea4  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/read_ver_za32.c
  6c42cd7108db85285989b01cdfe0ceab  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/read_ver_za64.c
! dbc86278f829fba89a0fe31c897fefe7  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/read_ver_za8.c
  57473390b86a03f32d83e9845fcd1e8f  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_bf16.c
  610cf99edd9ae5f40f3a3a69e3efc55b  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_f16.c
  494c59f5fc641ba1ca278e6162846419  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_f32.c
  ad3bf5b4426c396c38ad710e89d302ac  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_f64.c
+ 287ae06dcdd643c431be7c2d1423f582  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_mf8.c
  5e7be0532c1cf9a24ceae0d2466cba9e  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_s16.c
  0122c325c4687b56eab55136cc73671a  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_s32.c
  9c0d30515c9685ca27aabb6a386b5537  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_s64.c
*************** b8cc2e9d88a0a16faa538934b519cf89  gcc/te
*** 70794,70815 ****
  3e205476351a45bf8306b7e60c397b11  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/sumopa_za64.c
  fa1cc0af91efbfbe4114931cd0014196  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/sumops_za32.c
  950f4c612e85d459a5680f63cea26930  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/sumops_za64.c
! 4d1fb7432458952bb9ff41df13f2c2e5  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/test_sme_acle.h
  751ac5c0bca8fa2442b9cc92355f0bb1  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/undef_za.c
  8b4bf8582e42d9776dbf25df79244f31  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/usmopa_za32.c
  cbdfbc444eb1d7272d5ea088132d03e1  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/usmopa_za64.c
  9a90415d76c978c2a518d07445500729  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/usmops_za32.c
  ccd27a6410d0b8d06baa13f3b77e3f6b  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/usmops_za64.c
! 2aeebf3cb36e9041a437578eb1bcaf14  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/write_hor_za128.c
  ea94fdd9a03eec3b7233f34dcd984904  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/write_hor_za16.c
  da72391aef5386ede43d8abba91108bc  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/write_hor_za32.c
  373b2be3979a0e482990678e58ead6f8  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/write_hor_za64.c
! bce80ec3805c30acfd6ac59e2f0fed54  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/write_hor_za8.c
! e4e174198cf387557de99fcff7e17e47  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/write_ver_za128.c
  f148fda3adffbb0b0223fa8587320002  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/write_ver_za16.c
  1e9f4355184d9731ee41cc213447b4a5  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/write_ver_za32.c
  afe62fa89b5483576738572de037298b  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/write_ver_za64.c
! 5174cd33cb05315c467a5cbabefa3c0e  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/write_ver_za8.c
  7ebbe5326f328e43b785fd6ee8bd7f7d  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/zero_mask_za.c
  29c4dd1f8bae70ea4c5926d2fc011e3e  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/zero_za.c
  d6f0c95fd7a6f5179274aac3f6cc20c4  gcc/testsuite/gcc.target/aarch64/sme/arm_neon_1.c
--- 70850,70871 ----
  3e205476351a45bf8306b7e60c397b11  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/sumopa_za64.c
  fa1cc0af91efbfbe4114931cd0014196  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/sumops_za32.c
  950f4c612e85d459a5680f63cea26930  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/sumops_za64.c
! b0e1574ab2f2c472e185066133ac0438  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/test_sme_acle.h
  751ac5c0bca8fa2442b9cc92355f0bb1  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/undef_za.c
  8b4bf8582e42d9776dbf25df79244f31  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/usmopa_za32.c
  cbdfbc444eb1d7272d5ea088132d03e1  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/usmopa_za64.c
  9a90415d76c978c2a518d07445500729  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/usmops_za32.c
  ccd27a6410d0b8d06baa13f3b77e3f6b  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/usmops_za64.c
! 1f07fb9ae14e83845a9b72bb95bcac81  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/write_hor_za128.c
  ea94fdd9a03eec3b7233f34dcd984904  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/write_hor_za16.c
  da72391aef5386ede43d8abba91108bc  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/write_hor_za32.c
  373b2be3979a0e482990678e58ead6f8  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/write_hor_za64.c
! 8427e6a1850599d75d3563aac21ce43c  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/write_hor_za8.c
! 889c793a830b2028dea7c59efabfe26e  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/write_ver_za128.c
  f148fda3adffbb0b0223fa8587320002  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/write_ver_za16.c
  1e9f4355184d9731ee41cc213447b4a5  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/write_ver_za32.c
  afe62fa89b5483576738572de037298b  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/write_ver_za64.c
! 70aaa36332d7cdcf09b41a5149f98090  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/write_ver_za8.c
  7ebbe5326f328e43b785fd6ee8bd7f7d  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/zero_mask_za.c
  29c4dd1f8bae70ea4c5926d2fc011e3e  gcc/testsuite/gcc.target/aarch64/sme/acle-asm/zero_za.c
  d6f0c95fd7a6f5179274aac3f6cc20c4  gcc/testsuite/gcc.target/aarch64/sme/arm_neon_1.c
*************** f5392df0161b11a2eb084fecc3cb5f73  gcc/te
*** 70896,70902 ****
  bebea6bca886ddb2b04f3e5d8cdcc37b  gcc/testsuite/gcc.target/aarch64/sme/zt0_state_4.c
  5894e562761e4a9c0970a6c20c035cbe  gcc/testsuite/gcc.target/aarch64/sme/zt0_state_5.c
  33b81e9b83c7b38a981495a49f1aa0c2  gcc/testsuite/gcc.target/aarch64/sme/zt0_state_6.c
! 429a57e4afb8d8ac413b1304c5fff072  gcc/testsuite/gcc.target/aarch64/sme2/aarch64-sme2-acle-asm.exp
  d73f575123ea1f8b210a85a05740e038  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/add_s16_x2.c
  0ec44768bb670ac528e5ac9f2472ec65  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/add_s16_x4.c
  c6877c6031b0b3cea72f4c67ff127e64  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/add_s32_x2.c
--- 70952,70958 ----
  bebea6bca886ddb2b04f3e5d8cdcc37b  gcc/testsuite/gcc.target/aarch64/sme/zt0_state_4.c
  5894e562761e4a9c0970a6c20c035cbe  gcc/testsuite/gcc.target/aarch64/sme/zt0_state_5.c
  33b81e9b83c7b38a981495a49f1aa0c2  gcc/testsuite/gcc.target/aarch64/sme/zt0_state_6.c
! 6fb00d513861ed9ee965fda266019060  gcc/testsuite/gcc.target/aarch64/sme2/aarch64-sme2-acle-asm.exp
  d73f575123ea1f8b210a85a05740e038  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/add_s16_x2.c
  0ec44768bb670ac528e5ac9f2472ec65  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/add_s16_x4.c
  c6877c6031b0b3cea72f4c67ff127e64  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/add_s32_x2.c
*************** ba056a05a11764def1104c2563563d51  gcc/te
*** 70993,71013 ****
--- 71049,71079 ----
  bd74662fa87765674d154ca63c69e837  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/cvt_f32_s32_x4.c
  0c4515c5440fafeba33404df47d694f9  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/cvt_f32_u32_x2.c
  84da17a32976df75d7f7fa54f68383d7  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/cvt_f32_u32_x4.c
+ e18a6e42f8ee2b513fc74aea6b5ad7c3  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/cvt_mf8_bf16_x2.c
+ 2d9d797a2a783ed298b8f9b509387209  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/cvt_mf8_f16_x2.c
+ b8cd6313fd187d43b9e3865395a2e123  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/cvt_mf8_f32_x4.c
+ 204478c3aea054e20bc973139f7426db  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/cvt_mf8_x2.c
  cd04bfeb885395f8141a5eb5e79d513b  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/cvt_s32_f32_x2.c
  5da06bb8e1f77e628372e25b0a9a48e8  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/cvt_s32_f32_x4.c
  f8cd4f07fb93f3045ab21c993af3b464  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/cvt_u32_f32_x2.c
  bfad1ade50c6407affa0bb57d100e232  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/cvt_u32_f32_x4.c
  448d818556f26c9c1fe377c6c26e3826  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/cvtl_f32_f16_x2.c
+ 90742e69be923e36837dbd965e837a62  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/cvtl_mf8_x2.c
  c7e70850df6204b80a6eb2a595dde2c5  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/cvtn_bf16_f32_x2.c
  8fb32ef3a80092caff5869318f4a26ea  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/cvtn_f16_f32_x2.c
+ 92ab53bf56868e08189ad9b4066a701f  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/cvtn_mf8_f32_x4.c
  6d2e06bbf42e9a73d30281a2ef54d819  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_f32.c
  2254e8fce53e727c3c39066718e987a5  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_lane_f32.c
  9f7f258d6d152e8e4e9e0d166efba1b4  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_lane_s32.c
  2f90e9c4c59aa90dc949d2e18df4e7c5  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_lane_u32.c
+ 66c7a4f5ded3417d75bd5ade0872b536  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_lane_za16_mf8_vg1x2.c
+ ece04ffa870e27476d0694e9c05f32ac  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_lane_za16_mf8_vg1x4.c
  ab2c50d389ce596e612f83960accb2dd  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_lane_za32_bf16_vg1x2.c
  f3383da05b8415a028db9fe4e9dee86d  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_lane_za32_bf16_vg1x4.c
  b2871916905b229d9cc96af203c2d741  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_lane_za32_f16_vg1x2.c
  ea1a13d45c82cd47b92921e3513d1ec0  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_lane_za32_f16_vg1x4.c
+ 69a57c09a55dee79a685bf9d011c938c  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_lane_za32_mf8_vg1x2.c
+ fd60a8c8d016568152c5a3278e1e8b2f  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_lane_za32_mf8_vg1x4.c
  93e08ac06b2d77511340f3b3a0374f96  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_lane_za32_s16_vg1x2.c
  4a562ab5adbf64b62ef8e1f7525cb01c  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_lane_za32_s16_vg1x4.c
  92492c0194aecf44c6056cb012d27b8a  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_lane_za32_s8_vg1x2.c
*************** c241c089b8ab3d16858bc39b4a02e19a  gcc/te
*** 71021,71031 ****
--- 71087,71105 ----
  9a73744c0c4e15b184bb36bb5d86ae30  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_lane_za64_u16_vg1x2.c
  b32cddc1437ee499dde6e742aa28993a  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_lane_za64_u16_vg1x4.c
  6945f4b4c7935aa74ad875b92039760a  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_s32.c
+ f69228a174a67079638ad80f6bd42dd0  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_single_za16_mf8_vg1x2.c
+ a579620b6b6b827e936a0d746404416d  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_single_za16_mf8_vg1x4.c
+ 5b0eb67d660fb3a5de6791af916e94ad  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_single_za32_mf8_vg1x2.c
+ 65fc110b401f8361b844c37b7712ccca  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_single_za32_mf8_vg1x4.c
  c2aaad259d2a6d2baebf63670e518d4d  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_u32.c
+ 6f51023f41f7fee60401af89a1f3345b  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_za16_mf8_vg1x2.c
+ e9c4be9af1411580ba528948fd912f2b  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_za16_mf8_vg1x4.c
  e72a24bf1038ad0cfed16980562835a0  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_za32_bf16_vg1x2.c
  3c8cd5a7e9c5313d6c1a0fccdce2b8ad  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_za32_bf16_vg1x4.c
  58a998e9fc8953759988e09405eb2905  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_za32_f16_vg1x2.c
  df41634a7123886fe211986bf918fb4a  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_za32_f16_vg1x4.c
+ 862a2b70ee494fe4002bba9e5b18d3b8  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_za32_mf8_vg1x2.c
+ 55ff9d0fbf5a4a055c755aa5ccd4851c  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_za32_mf8_vg1x4.c
  10c2803320491fe65673116cd34586b4  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_za32_s16_vg1x2.c
  04bb1427235664c256e6164d937fafa7  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_za32_s16_vg1x4.c
  57fc0da4ef01858c3bd1143c52640282  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_za32_s8_vg1x2.c
*************** fd711e03fbc48fac32d3db9738b2539a  gcc/te
*** 71046,71051 ****
--- 71120,71127 ----
  ec28ac62c31ac197347d69e24ca27c4b  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/ld1_f32_x4.c
  bc8df40372b0f731a6871943d2ab3d25  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/ld1_f64_x2.c
  480bec1ce3078fd4ddcb3297f81410c6  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/ld1_f64_x4.c
+ 8bf19248ae2413fb057e1a69ccd299f0  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/ld1_mf8_x2.c
+ 64bc05dfa16d16a601d06dc5fe799e08  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/ld1_mf8_x4.c
  46afdc84064c30f9d92f7ea89ccb2e23  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/ld1_s16_x2.c
  99893261a2fc793b5afacb05b832cebd  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/ld1_s16_x4.c
  629fce5d4ce9540938e5f017fdcbd38f  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/ld1_s32_x2.c
*************** ac28407540ca7d4670210e42b0413a4f  gcc/te
*** 71070,71075 ****
--- 71146,71153 ----
  025875bb629aa93a7bb5c12d02b9de14  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/ldnt1_f32_x4.c
  33d0b99b37f569fb7b3f617fb5689944  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/ldnt1_f64_x2.c
  613a440a5220603023e1b77335a36710  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/ldnt1_f64_x4.c
+ 0e7f34a1f072285b1c84e7c0b814002c  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/ldnt1_mf8_x2.c
+ a1f79d28804635ac5efccc1770f1f2ca  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/ldnt1_mf8_x4.c
  827e86f3330b1dff7f134ea89ed9038e  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/ldnt1_s16_x2.c
  3fc5c355fb70c84f73cee8bb58426260  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/ldnt1_s16_x4.c
  2092a53e766007efb6e6ceae6ab8a47d  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/ldnt1_s32_x2.c
*************** d98cb63fafbcb39cb8f837016598f6b1  gcc/te
*** 71096,71101 ****
--- 71174,71182 ----
  42f101ab3042eb94971d68202f636556  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/luti2_f32.c
  eb26cc608e004138fb870e9348821929  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/luti2_f32_x2.c
  60184d0e40319b2932792c4114580d99  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/luti2_f32_x4.c
+ d91f54651f8e5793e085688ad8200281  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/luti2_mf8.c
+ 8a383144b380582fed972357264bac4f  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/luti2_mf8_x2.c
+ 86687b034499a9d5dcfbbd7560fe5565  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/luti2_mf8_x4.c
  1694e3ca21c302ce86249490fbb0e794  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/luti2_s16.c
  8fdaa275e37d30cb9ee3c646f8cb724c  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/luti2_s16_x2.c
  12b4d502b5badcbf68ae2a297c7f9628  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/luti2_s16_x4.c
*************** f79f511e6b87c6ed8a95684c98baf3ab  gcc/te
*** 71123,71128 ****
--- 71204,71211 ----
  d25c8900eeb896830b7632be3b86be7b  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/luti4_f32.c
  0309e5cb32e0c53ff8a6a68da5159b55  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/luti4_f32_x2.c
  bdaae4f992811602f00a12e2a21e092e  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/luti4_f32_x4.c
+ 1312692946080de781588bd411d203d9  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/luti4_mf8.c
+ 697432e7d015fcff90ad8634e428d7f7  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/luti4_mf8_x2.c
  84f2072544313415ad0ece87b1820a2f  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/luti4_s16.c
  a7ed33896e6accd40476f6c3a3000da7  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/luti4_s16_x2.c
  868cd86e41159cfa48eec65febc5ef11  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/luti4_s16_x4.c
*************** c3095abbff4813fdbbc4af601f3e18be  gcc/te
*** 71207,71212 ****
--- 71290,71298 ----
  f6c6261445ca03794ee88bd5fe4e102d  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_lane_za16_bf16_vg1x4.c
  e13ec97daa72e0d674745a283b563c2e  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_lane_za16_f16_vg1x2.c
  399a3638115c152685f9e54a69497a60  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_lane_za16_f16_vg1x4.c
+ ea6daac23d2efb6d6b2f43b3fbd5e905  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_lane_za16_mf8_vg2x1.c
+ 3aba03b4781f0a5c5c863052a9a78e43  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_lane_za16_mf8_vg2x2.c
+ 04fa6a69b8e14bc4097a93f977962100  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_lane_za16_mf8_vg2x4.c
  7ae4063210d14f310f6f95db01e453dd  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_lane_za32_bf16_vg2x1.c
  24cb4f847a696ca1b06cb8da5503b552  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_lane_za32_bf16_vg2x2.c
  5c2f30d5d657a7b2249b627d61ddfce4  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_lane_za32_bf16_vg2x4.c
*************** dfb654d5cca6e8ae4af339f674e1c298  gcc/te
*** 71215,71220 ****
--- 71301,71309 ----
  851c7429fa19845aeac6535fc21995ce  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_lane_za32_f16_vg2x4.c
  605c99d708a551eb9d61cf6405ac0d36  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_lane_za32_f32_vg1x2.c
  736dc28ccda7c8c969756ba859a0c69a  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_lane_za32_f32_vg1x4.c
+ b7c888a3562751045cf9a9f5a305500f  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_lane_za32_mf8_vg4x1.c
+ 27cc40f1a82bae7bb2c5669458786291  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_lane_za32_mf8_vg4x2.c
+ 391c0a574ce4eec6b552c806b218210d  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_lane_za32_mf8_vg4x4.c
  da1bb70a7c975d01d610292968d9808b  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_lane_za32_s16_vg2x1.c
  361ffb48db4e8a94bbb3c7e80ffa7b99  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_lane_za32_s16_vg2x2.c
  be69420dc7c3db71cc8fc51f125acdb1  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_lane_za32_s16_vg2x4.c
*************** c6255fa319a4b66adeb3cb556740ea16  gcc/te
*** 71239,71244 ****
--- 71328,71336 ----
  df4e9f9047e6d09c268d1da7cb6a25cb  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_za16_bf16_vg1x4.c
  5fb620e13172c73f7a0223357e11ee77  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_za16_f16_vg1x2.c
  bd18151ffd4da63138937740d08ded75  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_za16_f16_vg1x4.c
+ d7dc981c48e34d0923177d91ddb2fdfe  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_za16_mf8_vg2x1.c
+ 9bfc937667ede66868753d2a86540711  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_za16_mf8_vg2x2.c
+ e1201e087371720227a5fb4c9b2c35d7  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_za16_mf8_vg2x4.c
  1f5d6bdd4afc26adb52d3a299310f35a  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_za32_bf16_vg2x1.c
  4c319085edcace1f9e1340d39115be32  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_za32_bf16_vg2x2.c
  1066940c95d6c281241572b5d74cc742  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_za32_bf16_vg2x4.c
*************** b149fc5d7701d711fcfefe85a2b96f0f  gcc/te
*** 71247,71252 ****
--- 71339,71347 ----
  e1fca5a6dd25bcf3b84d97289bc23532  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_za32_f16_vg2x4.c
  efad5786de17e50e9bb6046a0d9cd6fc  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_za32_f32_vg1x2.c
  afec910f85fddc00f6091f412fe1cdb9  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_za32_f32_vg1x4.c
+ 0bc6ea4807d66056077d616f1c76fb69  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_za32_mf8_vg4x1.c
+ 1d08f8c0c9e28a9a06536be718be89d2  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_za32_mf8_vg4x2.c
+ 528cf39faff444d5ff385045f7c3884f  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_za32_mf8_vg4x4.c
  37e2a2923b4104f053cba18952e3da9a  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_za32_s16_vg2x1.c
  16bbd82d866991203f6325014edf413d  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_za32_s16_vg2x2.c
  9c04f6aa6c7220c79238821e2006390c  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_za32_s16_vg2x4.c
*************** b859a5f522518a13c1400caaf256ce86  gcc/te
*** 71333,71339 ****
--- 71428,71436 ----
  090c16bab9987cd4bc26adb3356930e5  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mls_za64_u16_vg4x4.c
  c091c392e56d14660855417449ab33e2  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mopa_za16_bf16.c
  91ed2471cfe6d25d0e4d25f8fca852c1  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mopa_za16_f16.c
+ 2c4d8fc7091a07eddd92f324591ddef3  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mopa_za16_mf8.c
  03b18bc928708b61d9b4f0973cf53572  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mopa_za32.c
+ 15f1c1bae241ba3fb941c1c9edb1a220  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mopa_za32_mf8.c
  b6770baead4ef6d2ad8473d82e4b2e81  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mops_za16_bf16.c
  981b29c5834eb757a99c1c7f0c4f227b  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mops_za16_f16.c
  676a036c6c3b39dc99d832f1dcf5d10a  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mops_za32.c
*************** dcd97a7da607faf4b907979a110e5460  gcc/te
*** 71400,71424 ****
  22384a721e6d418e149b4136c69495ad  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_hor_za32_vg4.c
  98705f7b7f755a54623039a2d8980ce9  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_hor_za64_vg2.c
  b2fa91bf485e03450c469b7e96adf0ff  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_hor_za64_vg4.c
! 397be31d27b4fd44b0bf0cbe50b21529  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_hor_za8_vg2.c
! 079468c1e3a20ceca46e25bd039c227c  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_hor_za8_vg4.c
  2fcd4b6a03679d8cb0f73d645e8adac0  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_ver_za16_vg2.c
  7a921093a09000dcffea26864f035209  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_ver_za16_vg4.c
  4dae55a5d39614f12a4c3d380e17f62e  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_ver_za32_vg2.c
  f080e4f3a28f3e13b7efb13501a54181  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_ver_za32_vg4.c
  37e029d82bd9a648bbbab068156e7106  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_ver_za64_vg2.c
  00cdc5de25dd1ca0dc2d10c65b0b3686  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_ver_za64_vg4.c
! 01f823db3386eb46e747428c1807821f  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_ver_za8_vg2.c
! d4a169fc127815c1341ba7f3b5bba23e  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_ver_za8_vg4.c
  78bed5693ad4628d22ab254f2560a50d  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_za16_vg1x2.c
  2df6e5f019a3667aefeca502f3c47d22  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_za16_vg1x4.c
  29833bfe7c380c2594982be73a3089de  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_za32_vg1x2.c
  da5383a278d11964e3e04cdc3435cf1e  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_za32_vg1x4.c
  6a50b3cbf0c7083b01e400ac4f5cef0f  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_za64_vg1x2.c
  8a4e55c7aacf430f54a254c660be21be  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_za64_vg1x4.c
! b22e09dc2304b99136b2635940337653  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_za8_vg1x2.c
! d39be755ae823d8dda870622ad8a7a85  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_za8_vg1x4.c
! 002cbd966833bb2da59dc4595407ec6d  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_hor_za128.c
  fb75928c85918aa3bc6e0d7065cf6296  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_hor_za16.c
  3587a4c7626b2a99f652edf16d82b4ca  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_hor_za16_vg2.c
  e44ceaea1bbb30e75fad95749258c657  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_hor_za16_vg4.c
--- 71497,71521 ----
  22384a721e6d418e149b4136c69495ad  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_hor_za32_vg4.c
  98705f7b7f755a54623039a2d8980ce9  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_hor_za64_vg2.c
  b2fa91bf485e03450c469b7e96adf0ff  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_hor_za64_vg4.c
! 02df1d87bb637185e255afe0602caf38  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_hor_za8_vg2.c
! 5f58732082e47e57dcebcd95e9deed3b  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_hor_za8_vg4.c
  2fcd4b6a03679d8cb0f73d645e8adac0  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_ver_za16_vg2.c
  7a921093a09000dcffea26864f035209  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_ver_za16_vg4.c
  4dae55a5d39614f12a4c3d380e17f62e  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_ver_za32_vg2.c
  f080e4f3a28f3e13b7efb13501a54181  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_ver_za32_vg4.c
  37e029d82bd9a648bbbab068156e7106  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_ver_za64_vg2.c
  00cdc5de25dd1ca0dc2d10c65b0b3686  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_ver_za64_vg4.c
! 0d7da4f5e2b9492070580bb78bb63e38  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_ver_za8_vg2.c
! 07aa8bede87aee9743e698f027910d03  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_ver_za8_vg4.c
  78bed5693ad4628d22ab254f2560a50d  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_za16_vg1x2.c
  2df6e5f019a3667aefeca502f3c47d22  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_za16_vg1x4.c
  29833bfe7c380c2594982be73a3089de  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_za32_vg1x2.c
  da5383a278d11964e3e04cdc3435cf1e  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_za32_vg1x4.c
  6a50b3cbf0c7083b01e400ac4f5cef0f  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_za64_vg1x2.c
  8a4e55c7aacf430f54a254c660be21be  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_za64_vg1x4.c
! 2bd67fcda8b2d56a51424e5dbb8cc836  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_za8_vg1x2.c
! 9f90e21098a84baf258c43c1a5a192cd  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_za8_vg1x4.c
! 294696568e4489e1ed53e9497710a196  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_hor_za128.c
  fb75928c85918aa3bc6e0d7065cf6296  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_hor_za16.c
  3587a4c7626b2a99f652edf16d82b4ca  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_hor_za16_vg2.c
  e44ceaea1bbb30e75fad95749258c657  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_hor_za16_vg4.c
*************** a8165fab20568f14f9e396537d5be184  gcc/te
*** 71428,71436 ****
  fd4505a0abee8ebd774f239864b6a592  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_hor_za64.c
  7195f0b99afd0985cf7d1e9e39136b61  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_hor_za64_vg2.c
  a20a66bb2333ac0f59f731ff8a9605fe  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_hor_za64_vg4.c
! 2a1e0e8c84a6efc43e977b137a126c25  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_hor_za8.c
! 287db7a2615aa49e04dfa3351a50e31a  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_hor_za8_vg2.c
! 1ef90c79ec99c01cc3896b8d73c17321  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_hor_za8_vg4.c
  89f22553bab2ee6b16e940517d6f545a  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_ver_za16.c
  f58d944fc2b011df7ed3534ab25b9374  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_ver_za16_vg2.c
  b9594a4cea09c897d9158037471e4f87  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_ver_za16_vg4.c
--- 71525,71534 ----
  fd4505a0abee8ebd774f239864b6a592  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_hor_za64.c
  7195f0b99afd0985cf7d1e9e39136b61  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_hor_za64_vg2.c
  a20a66bb2333ac0f59f731ff8a9605fe  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_hor_za64_vg4.c
! c8301f351f430b7e494b1f9ea03eaa2b  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_hor_za8.c
! 2cfd968149d8c501ff41ce504b38f38b  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_hor_za8_vg2.c
! d569f1ee402bf9e9226ef0e504c6f226  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_hor_za8_vg4.c
! 34fa95c47d4e8103fac3def4e08cb4c2  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_ver_za128.c
  89f22553bab2ee6b16e940517d6f545a  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_ver_za16.c
  f58d944fc2b011df7ed3534ab25b9374  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_ver_za16_vg2.c
  b9594a4cea09c897d9158037471e4f87  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_ver_za16_vg4.c
*************** ae3dd455ea91da6374e11e1135e760ec  gcc/te
*** 71440,71456 ****
  112acd1801adaed421425f33827f8ae4  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_ver_za64.c
  06dc3d639fec6539a4a4691ca62a5ba8  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_ver_za64_vg2.c
  5b86781d94fe61ccafdb12f29b856ef7  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_ver_za64_vg4.c
! 216f6deeefa785ccb8bd6ca4ad726342  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_ver_za8.c
! 9d397823b676203892a12e6c6402cdb1  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_ver_za8_vg2.c
! 2ef525487ed0a56b805279471e912288  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_ver_za8_vg4.c
  28544aecab99091153dfcf6917983795  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_za16_vg1x2.c
  424af1d292ce12761368d8436b688861  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_za16_vg1x4.c
  90fb2e07c761b130bc70625873aa112f  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_za32_vg1x2.c
  680617fb074362f26464aa5d0fa7b9f3  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_za32_vg1x4.c
  911380c71c3ccf6fc753ff0b41e500f4  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_za64_vg1x2.c
  acf3b5ea17fc1c9cdb3b8e341d656b31  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_za64_vg1x4.c
! f5c4983d29790dbc013bf696cdc0f1ff  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_za8_vg1x2.c
! b4d964a09f51b06942b06dbdd0199906  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_za8_vg1x4.c
  8eb8e54b291746afdae2c763373bc24c  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/rinta_s32_x2.c
  4a0dbc26c94da78f79fa916e04b827a1  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/rinta_s32_x4.c
  975affd81f1281fbd96bf761df994a0a  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/rintm_u32_x2.c
--- 71538,71554 ----
  112acd1801adaed421425f33827f8ae4  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_ver_za64.c
  06dc3d639fec6539a4a4691ca62a5ba8  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_ver_za64_vg2.c
  5b86781d94fe61ccafdb12f29b856ef7  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_ver_za64_vg4.c
! f5f691a7321855f5f6e2fb346a9b06a2  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_ver_za8.c
! 9d4f37d862e7ffe079859278ba998fa1  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_ver_za8_vg2.c
! 18f8a8f86d662d567ac010b306de98b3  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_ver_za8_vg4.c
  28544aecab99091153dfcf6917983795  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_za16_vg1x2.c
  424af1d292ce12761368d8436b688861  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_za16_vg1x4.c
  90fb2e07c761b130bc70625873aa112f  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_za32_vg1x2.c
  680617fb074362f26464aa5d0fa7b9f3  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_za32_vg1x4.c
  911380c71c3ccf6fc753ff0b41e500f4  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_za64_vg1x2.c
  acf3b5ea17fc1c9cdb3b8e341d656b31  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_za64_vg1x4.c
! ed3e830027c25d3f4c5784a2a6ab6831  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_za8_vg1x2.c
! bdefeb3911c24dfd986b494d8499d11e  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_za8_vg1x4.c
  8eb8e54b291746afdae2c763373bc24c  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/rinta_s32_x2.c
  4a0dbc26c94da78f79fa916e04b827a1  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/rinta_s32_x4.c
  975affd81f1281fbd96bf761df994a0a  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/rintm_u32_x2.c
*************** d22a3bd90868146ac9eae1229a4aba9c  gcc/te
*** 71475,71480 ****
--- 71573,71584 ----
  e7e3a27c2a468ff586b8fd1d17f67a3c  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/rshl_u64_x4.c
  0f56106e7a5b42675422b40b315e4035  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/rshl_u8_x2.c
  5786b6152b5ef772386c1c2fb329421e  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/rshl_u8_x4.c
+ a7984614aea4eef25554975f1575af45  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/scale_f16_x2.c
+ 8fa54be5bd501ebb94c9f5734d7ce06a  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/scale_f16_x4.c
+ 0160928e0156a90f41d41bd47f25737e  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/scale_f32_x2.c
+ 1d0fcababf610a750d8a3e0e725c0c1f  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/scale_f32_x4.c
+ 978e2ccb2cf8ccdc38f1b0893271ae09  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/scale_f64_x2.c
+ aaf14ef39df5e90d6ea342e0cc8130d5  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/scale_f64_x4.c
  f2d9a2b1123be589ca2a71591a6388bd  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/sel_bf16_x2.c
  9f0b4021df6d37447f6daef5b6ab57c8  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/sel_bf16_x4.c
  94e0b3b236eb1f558e70a7b0a2327094  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/sel_f16_x2.c
*************** f2d9a2b1123be589ca2a71591a6388bd  gcc/te
*** 71483,71488 ****
--- 71587,71594 ----
  301ba82185eceb6f3f5de9d75bac8e07  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/sel_f32_x4.c
  ab2ce556585e3d28560a869392c75078  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/sel_f64_x2.c
  354553af8574a13d5380f1d696d5860b  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/sel_f64_x4.c
+ cddf7549cf40d92ed3133115da60d37d  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/sel_mf8_x2.c
+ 0ff90456ef58c9df1b9e725b28614c03  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/sel_mf8_x4.c
  7368aed510f0e4194854086d5454fa89  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/sel_s16_x2.c
  df75020973319b98e2cd2a75afac4f43  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/sel_s16_x4.c
  15da70995b12578e38738bf7a6217434  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/sel_s32_x2.c
*************** c89de4c4973fff658674bf6ef6ac5fc8  gcc/te
*** 71507,71512 ****
--- 71613,71620 ----
  cf61894ecddf408dfc83cfcb0e7d1cb3  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/st1_f32_x4.c
  ad579961e19d0d85367bdcf34340fa94  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/st1_f64_x2.c
  68419cb130b208da9e647653ffb25cd7  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/st1_f64_x4.c
+ b448a0b73ce6995c441348af8c535276  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/st1_mf8_x2.c
+ aa030b2ec30d3ac6acccfdde34417e8a  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/st1_mf8_x4.c
  0586ba9db0c665667b86e164facaf72c  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/st1_s16_x2.c
  fedff4e7c4a9cfc9b4169cf5e566c4be  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/st1_s16_x4.c
  e6f1cdae88967383b79add0f64a00fe4  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/st1_s32_x2.c
*************** fea934017e1c3a38cf60b1bdc9beb2cd  gcc/te
*** 71531,71536 ****
--- 71639,71646 ----
  64d215d8dc2a47190cb23ce57e3b75d3  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/stnt1_f32_x4.c
  40045651bf1fc2ce69709880e25c430d  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/stnt1_f64_x2.c
  613bc24b14e5613a8f2eb31f0b65d29a  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/stnt1_f64_x4.c
+ 2f973dcbc04337d7e4674f51ee35fd64  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/stnt1_mf8_x2.c
+ 25baef818371d039829157c5745c6f15  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/stnt1_mf8_x4.c
  2c853ed75bb21ee95507a8e4589afacc  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/stnt1_s16_x2.c
  c62276ba80c8c95003018d969787a704  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/stnt1_s16_x4.c
  7c8df31f7e8717bdbb3f7047ee9438bb  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/stnt1_s32_x2.c
*************** d82e91485d24b0cf4d2e422ec8011966  gcc/te
*** 71580,71586 ****
  b74e78c5909672747659866c986dac52  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/svluti4_zt_1.c
  8a6cd380615f75bb6112bae2d65feecd  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/svwrite_lane_zt_1.c
  b6d814e93a4000475e51da4472709330  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/svwrite_zt_1.c
! 548e83ffcea63c963ba83c5ea81ed6ae  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/test_sme2_acle.h
  77448bea927d957f1775dca6bf314aca  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/unpk_s16_x2.c
  6ff10bfdd5d3166a1ab489104cca1a03  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/unpk_s16_x4.c
  333d3ddf0f4bd44c3833ce2351276405  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/unpk_s32_x2.c
--- 71690,71696 ----
  b74e78c5909672747659866c986dac52  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/svluti4_zt_1.c
  8a6cd380615f75bb6112bae2d65feecd  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/svwrite_lane_zt_1.c
  b6d814e93a4000475e51da4472709330  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/svwrite_zt_1.c
! 03c6fb9f45e91c1f8d4582649d0ab648  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/test_sme2_acle.h
  77448bea927d957f1775dca6bf314aca  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/unpk_s16_x2.c
  6ff10bfdd5d3166a1ab489104cca1a03  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/unpk_s16_x4.c
  333d3ddf0f4bd44c3833ce2351276405  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/unpk_s32_x2.c
*************** d6dab91015e04b1853f319c0a7e6691b  gcc/te
*** 71606,71611 ****
--- 71716,71723 ----
  6bf9ae7e79ac67d45d000c1f365f3146  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/uzp_f32_x4.c
  18faf3dd9672e4d292be8d0f18d2f135  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/uzp_f64_x2.c
  05c4c4205d20cac690d1529257a885d9  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/uzp_f64_x4.c
+ e09eb4c50b895c072565a7a4ce63b820  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/uzp_mf8_x2.c
+ 318257c780d20a0b5c8cf8d717e2c4b9  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/uzp_mf8_x4.c
  15ba3cffef42aba66d0b9cd5d1d33ac2  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/uzp_s16_x2.c
  25079efb21b21b2c0aa081d1ceef88cf  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/uzp_s16_x4.c
  528e6f5700ddc8c482fc990c2f168270  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/uzp_s32_x2.c
*************** a495ba03e7e1a5a29c1dcc1f3d0a5818  gcc/te
*** 71630,71635 ****
--- 71742,71749 ----
  8f9628bb164d18f06b25c496a65b16c4  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/uzpq_f32_x4.c
  83b093f818e8392ccb5ca2da204b6276  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/uzpq_f64_x2.c
  74e3f1dd0f9f2acb06bce06562dc90b5  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/uzpq_f64_x4.c
+ febc03d9e3a03b45c7468b692d7f4385  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/uzpq_mf8_x2.c
+ caa9b6840c90fc503f30dba7286b3b67  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/uzpq_mf8_x4.c
  cb70e5cde8378503c9816d6b5aa42cce  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/uzpq_s16_x2.c
  a6853395408f9abc4ba57223a8b2c753  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/uzpq_s16_x4.c
  2f3049745414e3cbdffe73e5da8ca931  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/uzpq_s32_x2.c
*************** eda4fc79216524b6cb9154bf8b067119  gcc/te
*** 71646,71651 ****
--- 71760,71766 ----
  afb014686120f06a945893b033dda57d  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/uzpq_u64_x4.c
  daa4e38c02cf0ca5769991e0166e4d87  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/uzpq_u8_x2.c
  52484e276b7a6f988dffef97c0d2edab  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/uzpq_u8_x4.c
+ 8491dbecd5558fbdedecf46855ff0dfd  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/vdot_lane_za16_mf8_vg1x2.c
  1ba51add008e0c2e66608411aa967bbf  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/vdot_lane_za32_bf16_vg1x2.c
  0a8b7d35821e04f411e8debb4e8cbece  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/vdot_lane_za32_f16_vg1x2.c
  8fab3c1fb029c9eb5eeb1213d20d92a7  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/vdot_lane_za32_s16_vg1x2.c
*************** db787b3df5de3b90a1778c9e31cfeb87  gcc/te
*** 71654,71659 ****
--- 71769,71776 ----
  fcd07f204caee5fb5f0b3544c2afad20  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/vdot_lane_za32_u8_vg1x4.c
  842e777f6b8a4364818dce4bf498b72f  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/vdot_lane_za64_s16_vg1x4.c
  ca9fec7655002d228c407324be5f1085  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/vdot_lane_za64_u16_vg1x4.c
+ 1e80567ee2628e7aea761b9cc281156a  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/vdotb_lane_za32_mf8_vg1x4.c
+ a8ef6a2dc9f8bf3aa206a545c35afba1  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/vdott_lane_za32_mf8_vg1x4.c
  9b20af2c8c04297e1df69b26834a69a2  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/whilege_b16.c
  7b6b13feb83a0eacd12b12f200d086d9  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/whilege_b32.c
  5a498c4d2e0347fdf29c36d6de6b5ac3  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/whilege_b64.c
*************** ce9ea0a1e105ac8397d4f8251d29964b  gcc/te
*** 71692,71715 ****
  1b9b67591a207398f36c9cd0650b703e  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_hor_za32_vg4.c
  d4494a698dd329d5da6754fa4e7dc45d  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_hor_za64_vg2.c
  0777e54b63a250b29b9bd6988e2e38b5  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_hor_za64_vg4.c
! 670d25f205c0eedc73d9c6e364336cbd  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_hor_za8_vg2.c
! d465761f5c6c8f8ca7a8c8e6d4fb18e2  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_hor_za8_vg4.c
  c8973aaea30e9995e738c714f292182a  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_ver_za16_vg2.c
  1773aa1973a99056c4275f25b78b8d42  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_ver_za16_vg4.c
  c62bfc1a475dc826e807ce41969d402b  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_ver_za32_vg2.c
  0fa8585311f0689dc058b933752b5b45  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_ver_za32_vg4.c
  b2f8974228ba195e65552b8de779565a  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_ver_za64_vg2.c
  9eff54b0fa429f57309cafeb578844bc  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_ver_za64_vg4.c
! 71ed2b767f2e2c554260b9008f161563  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_ver_za8_vg2.c
! 47e01e12f80fd1a7aba6cc8771753b46  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_ver_za8_vg4.c
  674714d9eeefa4f2a12d5f52af0eb67a  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_za16_vg1x2.c
  4e33796e0252308e8c6a664bdf147984  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_za16_vg1x4.c
  35c11179e1ab2d62f5d8dedbd8a2e424  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_za32_vg1x2.c
  51b72e45dc7628585d3babe9e6520018  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_za32_vg1x4.c
  7530007f0abed0b9257c4f7e70144548  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_za64_vg1x2.c
  35d20bc558182139cae7d1d2a122f1a6  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_za64_vg1x4.c
! 20130e8914f7deef7673f29599e5e145  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_za8_vg1x2.c
! 2887fc8a9d4cfa36256570c431ba2395  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_za8_vg1x4.c
  555dd4622645b4b08675c8137adba80e  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/zero_za64_vg1x2.c
  8e50f5f40e5ef56105e6ddd4b9b0a401  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/zero_za64_vg1x4.c
  b839bb37992e38d4812ce2811ce0868c  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/zero_za64_vg2x1.c
--- 71809,71832 ----
  1b9b67591a207398f36c9cd0650b703e  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_hor_za32_vg4.c
  d4494a698dd329d5da6754fa4e7dc45d  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_hor_za64_vg2.c
  0777e54b63a250b29b9bd6988e2e38b5  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_hor_za64_vg4.c
! 8ef9b868222568871e6e20a74a6dccc8  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_hor_za8_vg2.c
! 5ca7b5303f3dd24a071ab319dfb73f29  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_hor_za8_vg4.c
  c8973aaea30e9995e738c714f292182a  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_ver_za16_vg2.c
  1773aa1973a99056c4275f25b78b8d42  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_ver_za16_vg4.c
  c62bfc1a475dc826e807ce41969d402b  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_ver_za32_vg2.c
  0fa8585311f0689dc058b933752b5b45  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_ver_za32_vg4.c
  b2f8974228ba195e65552b8de779565a  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_ver_za64_vg2.c
  9eff54b0fa429f57309cafeb578844bc  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_ver_za64_vg4.c
! a1e00c7740194182cd744265f240e6a3  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_ver_za8_vg2.c
! c2f1e8a9f72e83a5a62b656b870c7584  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_ver_za8_vg4.c
  674714d9eeefa4f2a12d5f52af0eb67a  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_za16_vg1x2.c
  4e33796e0252308e8c6a664bdf147984  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_za16_vg1x4.c
  35c11179e1ab2d62f5d8dedbd8a2e424  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_za32_vg1x2.c
  51b72e45dc7628585d3babe9e6520018  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_za32_vg1x4.c
  7530007f0abed0b9257c4f7e70144548  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_za64_vg1x2.c
  35d20bc558182139cae7d1d2a122f1a6  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_za64_vg1x4.c
! 824c2389b2dc033c715526bf95241bb3  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_za8_vg1x2.c
! 40ebccfe822360cf94e802429fad38de  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_za8_vg1x4.c
  555dd4622645b4b08675c8137adba80e  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/zero_za64_vg1x2.c
  8e50f5f40e5ef56105e6ddd4b9b0a401  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/zero_za64_vg1x4.c
  b839bb37992e38d4812ce2811ce0868c  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/zero_za64_vg2x1.c
*************** d538457193e82209a0d220b1c033a680  gcc/te
*** 71727,71732 ****
--- 71844,71851 ----
  bac4fe4e5ac70753ee5177f2969f3841  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/zip_f32_x4.c
  46dc1d485d7c1205f84ef4632e91f56f  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/zip_f64_x2.c
  31058aca5c18a01e07b9b974cc487005  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/zip_f64_x4.c
+ 0b6dbb74ea97169e31fc80abeba5d4a7  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/zip_mf8_x2.c
+ a896496f3daf515075204f0cbf068ce1  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/zip_mf8_x4.c
  a9d48207530f099ff594a1b18d031eea  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/zip_s16_x2.c
  74ce02da3509100e586849c24b45a0bb  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/zip_s16_x4.c
  b40e0c1edf9cb88ffb94d20727e31451  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/zip_s32_x2.c
*************** dbb23c5b36ef91174f62bf7cba4d6ddc  gcc/te
*** 71751,71756 ****
--- 71870,71877 ----
  0e4e5b6d8e08a0013271805c26b040fc  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/zipq_f32_x4.c
  20d1e257707ab6b3cc94fb1901b0a78b  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/zipq_f64_x2.c
  1875ce085d0022daf6469e864cf13e93  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/zipq_f64_x4.c
+ a715b6ed4a41fb15b7cbed16b20eec11  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/zipq_mf8_x2.c
+ 46ef0c213d5bdfac6d9732eb1b13a923  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/zipq_mf8_x4.c
  f99dc0c1c035702cd63c19800e9c660e  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/zipq_s16_x2.c
  2cbbab3075d7fd872ccc1976e83309da  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/zipq_s16_x4.c
  8a4d5eda0c73963e7a58244b96ee6a8a  gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/zipq_s32_x2.c
*************** dc551677ea18cee7d0d0f71db2863e0d  gcc/te
*** 73317,73323 ****
  0f9c8d5e0f81558e6102d96bad4748d5  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/tbl_u32.c
  535a96b316a99f9dbd785cc445aa108c  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/tbl_u64.c
  026e0c233a396156cf9d7b5accb1b5f4  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/tbl_u8.c
! 5ea55bd6f5ee52105958118c693606a1  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/test_sve_acle.h
  e1d55b697dd3f26b83e09349fa9bd50a  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/tmad_f16.c
  023102988d91e8649e76b3f619a0fe14  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/tmad_f32.c
  42edd7f70c6dd83aed2e1e8f2822d1b0  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/tmad_f64.c
--- 73438,73444 ----
  0f9c8d5e0f81558e6102d96bad4748d5  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/tbl_u32.c
  535a96b316a99f9dbd785cc445aa108c  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/tbl_u64.c
  026e0c233a396156cf9d7b5accb1b5f4  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/tbl_u8.c
! 7fc5ef3b60c23ffd57144092a4c21a3d  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/test_sve_acle.h
  e1d55b697dd3f26b83e09349fa9bd50a  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/tmad_f16.c
  023102988d91e8649e76b3f619a0fe14  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/tmad_f32.c
  42edd7f70c6dd83aed2e1e8f2822d1b0  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/tmad_f64.c
*************** c6d84b0aa9031d9da4500f61b64a39f3  gcc/te
*** 73565,73578 ****
  5bce92e13a71d078ea2b471f6627ffb7  gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_wide_1.c
  61eff29e192c9bd062c059e6f70bca74  gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_wide_opt_n_1.c
  3519ef42cc2ea6e6aa95a2a27424c013  gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_za_int_m_1.c
! bb718f37ebd51c6b74490488e1bc254d  gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_za_m_1.c
  6e9cdbff31e4ca5170514082d7739c85  gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_za_m_2.c
  b8c6064e5b41b5df484ec4978a692c90  gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_za_slice_int_opt_single_1.c
! 91623035742dc7185359751478fd72a5  gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_za_slice_lane_1.c
  7ffc61e0002f4f9ad01c856d744dee4e  gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_za_slice_lane_2.c
  f28aa3c1a6d4ec44c802d988d6cdefdd  gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_za_slice_lane_3.c
  7c609e4a112eccba06d6248a2f2142cf  gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_za_slice_lane_4.c
! f13116f1c2947e603c6123f6cad9aa11  gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_za_slice_opt_single_1.c
  5a3e39c630a68dbd225926cddcf30822  gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_za_slice_opt_single_2.c
  a8207037fa252b18df4247c0ee15bcbc  gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_za_slice_opt_single_3.c
  e0e98338e3ce33f9804bcd82b06e0af6  gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_za_slice_uint_opt_single_1.c
--- 73686,73699 ----
  5bce92e13a71d078ea2b471f6627ffb7  gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_wide_1.c
  61eff29e192c9bd062c059e6f70bca74  gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_wide_opt_n_1.c
  3519ef42cc2ea6e6aa95a2a27424c013  gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_za_int_m_1.c
! f9955aa5a242019d5f14e9a158e3caa5  gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_za_m_1.c
  6e9cdbff31e4ca5170514082d7739c85  gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_za_m_2.c
  b8c6064e5b41b5df484ec4978a692c90  gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_za_slice_int_opt_single_1.c
! 46738af3989f579945acc307c54f226e  gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_za_slice_lane_1.c
  7ffc61e0002f4f9ad01c856d744dee4e  gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_za_slice_lane_2.c
  f28aa3c1a6d4ec44c802d988d6cdefdd  gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_za_slice_lane_3.c
  7c609e4a112eccba06d6248a2f2142cf  gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_za_slice_lane_4.c
! c37e3b91d836016cc691d891c332d979  gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_za_slice_opt_single_1.c
  5a3e39c630a68dbd225926cddcf30822  gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_za_slice_opt_single_2.c
  a8207037fa252b18df4247c0ee15bcbc  gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_za_slice_opt_single_3.c
  e0e98338e3ce33f9804bcd82b06e0af6  gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_za_slice_uint_opt_single_1.c
*************** ce13014966a94f4ea101d9f8892229a4  gcc/te
*** 73595,73600 ****
--- 73716,73722 ----
  8634c9ab763ed1f0527cf45a472103ff  gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/create_4.c
  ee861575fd7ba7352b5e58115989bc71  gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/create_5.c
  eb453b437e35070d74c76756ef730f41  gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/create_6.c
+ 0b8070f0b4f23fdf28da8255b1b7a2de  gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/dot_half_za_slice_lane_fpm.c
  44e43f83cb747814b73b3758ebf46b41  gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/dot_za_slice_int_lane_1.c
  b1060b874f4397039bde58eefc5046e6  gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/dot_za_slice_lane_1.c
  39395ae60bcfb1c31e005d9ea61c5fa3  gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/dot_za_slice_lane_2.c
*************** f774d3e0d7016c324b45d3a211aacc89  gcc/te
*** 75691,75696 ****
--- 75813,75820 ----
  fdfc0fa9b97e69b69d12e6dc9d11a5b5  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ld1_f32_x4.c
  befbed156bc81a6ff1f39fdc3d997a5a  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ld1_f64_x2.c
  50beb3121edcdaaaecf10c8e7f83a57e  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ld1_f64_x4.c
+ 1d5507e88eefda8dd4f9c6fd735f25fb  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ld1_mf8_x2.c
+ fb371e2fdf3361a50cbceecc2444e07c  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ld1_mf8_x4.c
  bcd6f7bbed09acd146e14c4bac69dca5  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ld1_s16_x2.c
  ac51d1410079bef69c465c6e866c3850  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ld1_s16_x4.c
  5010eeffb02eb22eaa8913dbe8654456  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ld1_s32_x2.c
*************** ebadc36dc160d8ffc0360e8c8e81dddd  gcc/te
*** 75775,75780 ****
--- 75899,75906 ----
  8b235b99fe6f46ca010addddae970c36  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1_gather_s64.c
  9ac61c1f0593f782c84eae9faae47523  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1_gather_u32.c
  e637a133c84cb7de8c650a02343e825f  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1_gather_u64.c
+ fec080cdb249a68ee318a00f8bf5f6f3  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1_mf8_x2.c
+ 56d7eb8b9c4cdd22c80f4a00484a931e  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1_mf8_x4.c
  c3fa1aab3fabebb9edae11a8a273f4e8  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1_s16_x2.c
  fa12a66145774ff1b41a1358e8d65ee2  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1_s16_x4.c
  10233a002811d45ff7620c31aefa238d  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1_s32_x2.c
*************** b9b880247845019946d9397ae50a7dcf  gcc/te
*** 76274,76279 ****
--- 76400,76406 ----
  3259cdf48120dc09b7fc2c8efb94097b  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/revd_f16.c
  50b69c6d4926cbee4a08a9ec84ff3a81  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/revd_f32.c
  23eaee7e58f44f6e200aa8b355a263c0  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/revd_f64.c
+ 72cfedd5ade804341c4a1c19d27ec054  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/revd_mf8.c
  c32db97afd2d9cc1a09a84988f8f16be  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/revd_s16.c
  c9959408786b02a63956b41e095add33  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/revd_s32.c
  2a09d57eb999e40f06bd820be5e4027f  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/revd_s64.c
*************** f118c99cdc23826f1992b4999085a9e4  gcc/te
*** 76483,76488 ****
--- 76610,76617 ----
  f47d3edecc5c1877ace6043e9b37ad1c  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1_f32_x4.c
  a3e04a85a0f07c85156b66dfc58271c8  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1_f64_x2.c
  7ef7ce80cf972bbcf8b3e80369dbb745  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1_f64_x4.c
+ f05158ae048b4408dc40ed550d346bc8  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1_mf8_x2.c
+ a693f4caaffcdc093043a5e3aa9b1d03  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1_mf8_x4.c
  d7fff5388a7ea15d67d705047f592a51  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1_s16_x2.c
  acdfe3a768956a640e7fcbbd9f1f5193  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1_s16_x4.c
  7a56a089042b1925d73c0868f682dc0b  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1_s32_x2.c
*************** ce760812e4b170974727020f0343cd99  gcc/te
*** 82325,82330 ****
--- 82454,82460 ----
  2bb715a1712dc578dd08a452e8f80b5f  gcc/testsuite/gcc.target/gcn/simd-math-5-short-run.c
  1e92a961b8be80eff95e0d94ee494725  gcc/testsuite/gcc.target/gcn/simd-math-5-short.c
  5b91a51bf3c209f29ece25c29f8a556b  gcc/testsuite/gcc.target/gcn/simd-math-5.c
+ 75dbb2289fff9e4c7433211e4be8d975  gcc/testsuite/gcc.target/gcn/sincos-ice-on-ifn_sin-call-1.c
  c725bb6cd1ad5f29265111af6e3d86e5  gcc/testsuite/gcc.target/gcn/smax_1.c
  6e933396760a7a72a37422dcce7d607d  gcc/testsuite/gcc.target/gcn/smax_1_run.c
  02843a6f601ee9bd8b48f6beb255868a  gcc/testsuite/gcc.target/gcn/smin_1.c
*************** df8b684ced3c67573d1feada188938b6  gcc/te
*** 82386,82392 ****
  489303cb175b4f8022fe7d831bef0fe6  gcc/testsuite/gcc.target/i386/20030217-1.c
  41e29ea15c2438cdb075d08b5368c25f  gcc/testsuite/gcc.target/i386/20030217-2.c
  a3e554dab8a93a4d3090e2c2ca07addf  gcc/testsuite/gcc.target/i386/20030926-1.c
! b3537853af47bede2cf127e4dbc789f0  gcc/testsuite/gcc.target/i386/20040112-1.c
  23e274aa6bf5841c3542d212ba52d17e  gcc/testsuite/gcc.target/i386/20050113-1.c
  d1076fdd8a8da68773355e333bf1e717  gcc/testsuite/gcc.target/i386/20051216-1.c
  9c2b1a032cf616abe10eceed52867464  gcc/testsuite/gcc.target/i386/20060125-1.c
--- 82516,82522 ----
  489303cb175b4f8022fe7d831bef0fe6  gcc/testsuite/gcc.target/i386/20030217-1.c
  41e29ea15c2438cdb075d08b5368c25f  gcc/testsuite/gcc.target/i386/20030217-2.c
  a3e554dab8a93a4d3090e2c2ca07addf  gcc/testsuite/gcc.target/i386/20030926-1.c
! 0b950f2c377b855a8965330671d83d12  gcc/testsuite/gcc.target/i386/20040112-1.c
  23e274aa6bf5841c3542d212ba52d17e  gcc/testsuite/gcc.target/i386/20050113-1.c
  d1076fdd8a8da68773355e333bf1e717  gcc/testsuite/gcc.target/i386/20051216-1.c
  9c2b1a032cf616abe10eceed52867464  gcc/testsuite/gcc.target/i386/20060125-1.c
*************** ae9cefa4d949ae63e9380aeb14fae221  gcc/te
*** 88791,88815 ****
  ff0a586f8aaac7078fb79402d3f0df4b  gcc/testsuite/gcc.target/i386/pr122320-mask4.c
  9a861d0f957f59a5dc5e7cafeddd1343  gcc/testsuite/gcc.target/i386/pr122320-mask64.c
  f6a03ec739c3c632b84006aa8e240dae  gcc/testsuite/gcc.target/i386/pr122320-mask8.c
! e19262d2716f104afc6ca73e92175af5  gcc/testsuite/gcc.target/i386/pr122343-1a.c
! a91c81ee1151f8eb72972a5ca1c4f5e5  gcc/testsuite/gcc.target/i386/pr122343-1b.c
! d4d2c5bfecd2f6bdf686431a77bf4e89  gcc/testsuite/gcc.target/i386/pr122343-2a.c
! 3c6e695d8a0e4a4e246f7d62552d1807  gcc/testsuite/gcc.target/i386/pr122343-2b.c
! 3ec07a892980f6c3ea3bd95a6d03f07e  gcc/testsuite/gcc.target/i386/pr122343-3.c
! e51fcfee6f2a7cafac7c30d85656c49d  gcc/testsuite/gcc.target/i386/pr122343-4a.c
! dc441bebea22c5b1d8b014a60d0be676  gcc/testsuite/gcc.target/i386/pr122343-4b.c
! a9f95c83c8cfe8c675891c3a3fe30bcd  gcc/testsuite/gcc.target/i386/pr122343-5a.c
! 0b661b1593adb6d5aec9b192d1ff8c5f  gcc/testsuite/gcc.target/i386/pr122343-5b.c
! c0a2648ae6688edf7592159b52d2c323  gcc/testsuite/gcc.target/i386/pr122343-6a.c
! de6e22b443d2b7eda0a3831d24b86dde  gcc/testsuite/gcc.target/i386/pr122343-6b.c
! 180323b8bcc7eb6910a7c191b2bf9506  gcc/testsuite/gcc.target/i386/pr122343-7.c
  a23e3aee9cb7b8d2fe5895c930cac402  gcc/testsuite/gcc.target/i386/pr122390-1.c
  160b6bb9cb1df1775f284996fcddbc62  gcc/testsuite/gcc.target/i386/pr122390.c
  beaa59876937a489a8ce9f276a586c83  gcc/testsuite/gcc.target/i386/pr122457.c
  b5fef8fb540e17f32442a50d6ee40f1e  gcc/testsuite/gcc.target/i386/pr122518.c
  93c2651b636b33af98942b4d04ed3a85  gcc/testsuite/gcc.target/i386/pr122534.c
  609faa828d84f786709fd1c4f7c03431  gcc/testsuite/gcc.target/i386/pr122598.c
! 21f548f1c28eff738ee89a3a4e6abaa0  gcc/testsuite/gcc.target/i386/pr122675-1.c
  68c5cb935b4b7d76ed31899761e6b756  gcc/testsuite/gcc.target/i386/pr123027.c
  f99f88a6e994ad6e55e065e41bc58f8f  gcc/testsuite/gcc.target/i386/pr12329.c
  8951a1fa31f2d45ef9eacfff6a733f77  gcc/testsuite/gcc.target/i386/pr13366.c
--- 88921,88945 ----
  ff0a586f8aaac7078fb79402d3f0df4b  gcc/testsuite/gcc.target/i386/pr122320-mask4.c
  9a861d0f957f59a5dc5e7cafeddd1343  gcc/testsuite/gcc.target/i386/pr122320-mask64.c
  f6a03ec739c3c632b84006aa8e240dae  gcc/testsuite/gcc.target/i386/pr122320-mask8.c
! 45326b5bfc3d272e40b81aeae891e3cf  gcc/testsuite/gcc.target/i386/pr122343-1a.c
! f07910007f1912527ae919b6677082a3  gcc/testsuite/gcc.target/i386/pr122343-1b.c
! 9780bc58fb18cd60275a1f2b0a92d8e2  gcc/testsuite/gcc.target/i386/pr122343-2a.c
! 6aae25738ac220210fc9c72a006b981c  gcc/testsuite/gcc.target/i386/pr122343-2b.c
! 5bc6e9971e62b41ae74fb31f56b1c156  gcc/testsuite/gcc.target/i386/pr122343-3.c
! 3fa492381514ec5dfa39196008fa28d6  gcc/testsuite/gcc.target/i386/pr122343-4a.c
! b2a41015134301ed8f0b1f49f522f97f  gcc/testsuite/gcc.target/i386/pr122343-4b.c
! b4e6503fcde0c5e1fe990ba2d612f2cf  gcc/testsuite/gcc.target/i386/pr122343-5a.c
! 0b5ad6ab6bd66b78bfd5fb0d0f8eddaa  gcc/testsuite/gcc.target/i386/pr122343-5b.c
! 9616fc5d411acc9e7234b569b59a5657  gcc/testsuite/gcc.target/i386/pr122343-6a.c
! 9372a8680b4f9db4a59d56239d200316  gcc/testsuite/gcc.target/i386/pr122343-6b.c
! 0935219317f53279b008ff0b87ba6ad1  gcc/testsuite/gcc.target/i386/pr122343-7.c
  a23e3aee9cb7b8d2fe5895c930cac402  gcc/testsuite/gcc.target/i386/pr122390-1.c
  160b6bb9cb1df1775f284996fcddbc62  gcc/testsuite/gcc.target/i386/pr122390.c
  beaa59876937a489a8ce9f276a586c83  gcc/testsuite/gcc.target/i386/pr122457.c
  b5fef8fb540e17f32442a50d6ee40f1e  gcc/testsuite/gcc.target/i386/pr122518.c
  93c2651b636b33af98942b4d04ed3a85  gcc/testsuite/gcc.target/i386/pr122534.c
  609faa828d84f786709fd1c4f7c03431  gcc/testsuite/gcc.target/i386/pr122598.c
! 405fadb5a4007fdee8be974babcb3550  gcc/testsuite/gcc.target/i386/pr122675-1.c
  68c5cb935b4b7d76ed31899761e6b756  gcc/testsuite/gcc.target/i386/pr123027.c
  f99f88a6e994ad6e55e065e41bc58f8f  gcc/testsuite/gcc.target/i386/pr12329.c
  8951a1fa31f2d45ef9eacfff6a733f77  gcc/testsuite/gcc.target/i386/pr13366.c
*************** bc59de83765bb844925a1922677b3910  gcc/te
*** 97798,97803 ****
--- 97928,97936 ----
  cddeabddc47c1e2e434be321884dbb80  gcc/testsuite/gcc.target/riscv/pr122147.c
  517cee01d883f2604f8317ec8307ae44  gcc/testsuite/gcc.target/riscv/pr122215.c
  5e651c455514b3ec306f584a9708ee34  gcc/testsuite/gcc.target/riscv/pr122675-1.c
+ 6068a5f2303e752be2ee748be0491832  gcc/testsuite/gcc.target/riscv/pr122769.c
+ 61858fbf3627a6a698ef76b904f1ab7b  gcc/testsuite/gcc.target/riscv/pr123274.c
+ ba319008fc3d471c58bb29fc9d29ccbc  gcc/testsuite/gcc.target/riscv/pr123278.c
  37a08389ba95284cc27832767dfc1430  gcc/testsuite/gcc.target/riscv/pr43644.c
  8eba488c3d26a288644785954ea86af2  gcc/testsuite/gcc.target/riscv/pr52345.c
  db206807e7e87fc388e039471812c6e0  gcc/testsuite/gcc.target/riscv/pr58727.c
*************** d6776d81d30cc50aab86cdff3bf86592  gcc/te
*** 100298,100322 ****
  42bbf76e4625c99754b7532dee819929  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i64.c
  5d99730c4d83fa83ad427a9845284a5e  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i8.c
  4201a95f317ea67a928f4dca981cf53d  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c
! 5d2d85231d5430e4ca8d0b4541fef926  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c
! a2c745b379bb71844eec6d8d84ea3e92  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c
! 6ae549569e2b28be78d6ea7dd482a3ba  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u8.c
  b13bb596c708ea6fb9ab3881149e2c03  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i16.c
  76fec68f4d36c39839ecdfd1dc02a225  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i32.c
  bd15578e69f21a028ed6ed939d6fd8f1  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i64.c
  cc97ac8a2b8817a7574f3957cf3c1fb2  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i8.c
! 89dd7d1d5a260205e52c4ff6a3d24208  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u16.c
! ab0b8bbb618d9753eb92f7dc4b9034ed  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u32.c
! a7b9826bc0a50ed1d82760400b61445e  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u64.c
! 261945c13159d1684c3979807ec51589  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u8.c
  deacfb6035d0882d9d6c11eef8fdb9cd  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i16.c
  ef05c5bfef88f9925e898f5a734d452d  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i32.c
  9745bb796b9d72851eb9952421f50466  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i64.c
  7afa02934fc3433840cbe479f70b3198  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i8.c
! bc98a83b126842531e6902eb3716ff1f  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u16.c
! 69b4b8946f9ac7bf86dbee7681dab65e  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c
! c2efca1365ac54d122ff83ae2aefd81b  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c
! c129c6826e2fef2ddb8fdf16511b6d1d  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u8.c
  ddbdedd0bcd1b2f07c63e57ea3edd7f9  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i16.c
  ecb91086db90af95d3f46740e36b1ce2  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i32.c
  cee911916a71eee6997697cd65895e73  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i64.c
--- 100431,100455 ----
  42bbf76e4625c99754b7532dee819929  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i64.c
  5d99730c4d83fa83ad427a9845284a5e  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i8.c
  4201a95f317ea67a928f4dca981cf53d  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c
! a8330712e2fcc1ae795a7fba42a8c473  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c
! 3e6332a27c7a7bcdff5714fa98cfc038  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c
! dfc1fe43dc67edfdc33c95f227f71ea6  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u8.c
  b13bb596c708ea6fb9ab3881149e2c03  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i16.c
  76fec68f4d36c39839ecdfd1dc02a225  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i32.c
  bd15578e69f21a028ed6ed939d6fd8f1  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i64.c
  cc97ac8a2b8817a7574f3957cf3c1fb2  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i8.c
! e6bd4dc2a3293f4d155a71133fd19b06  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u16.c
! d1cf461282ddaf2cdca70111d9995aac  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u32.c
! ac0245e07dbeda6045b1003b8bfe4d01  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u64.c
! 953d9409bd2de2debd25e8ffc668df3e  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u8.c
  deacfb6035d0882d9d6c11eef8fdb9cd  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i16.c
  ef05c5bfef88f9925e898f5a734d452d  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i32.c
  9745bb796b9d72851eb9952421f50466  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i64.c
  7afa02934fc3433840cbe479f70b3198  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i8.c
! ea70d997fe6a98ff8e4f8c49d0bb66a5  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u16.c
! 6a97517d08d68126d9d366db0c63bd70  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c
! a67f9e0eea6695714c9be105d2481a02  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c
! 71cbb6b78ff04ce301386e9f130428b4  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u8.c
  ddbdedd0bcd1b2f07c63e57ea3edd7f9  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i16.c
  ecb91086db90af95d3f46740e36b1ce2  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i32.c
  cee911916a71eee6997697cd65895e73  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i64.c
*************** ee4d762425ee9fa02262080e983ca873  gcc/te
*** 100362,100369 ****
  d0716e3befd7d8676e3f95ddfc26cf11  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-merge-3-i32.c
  68f38cf2fee3b275e68ad7b4c0590852  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-merge-3-i64.c
  a668be35e3b0365efdcb1644b843f8f7  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-merge-3-i8.c
! cd46932af49215b943e12c56a9dec0e2  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary.h
! e94b1ce21cd68647545e6dcfbee56506  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary_data.h
  ccb9cff4438796fd5c2c015df2204a55  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary_run.h
  847718238428fcf0d191c5e8f66f2c60  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_ternary.h
  0ac4abbac6b69050fc3b142e914fe58c  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_ternary_data.h
--- 100495,100502 ----
  d0716e3befd7d8676e3f95ddfc26cf11  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-merge-3-i32.c
  68f38cf2fee3b275e68ad7b4c0590852  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-merge-3-i64.c
  a668be35e3b0365efdcb1644b843f8f7  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-merge-3-i8.c
! 2109ccc38c2ba57f3e2529a73346fedb  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary.h
! 4a8dba372a8c3b056810396fc9c97ccf  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary_data.h
  ccb9cff4438796fd5c2c015df2204a55  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary_run.h
  847718238428fcf0d191c5e8f66f2c60  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_ternary.h
  0ac4abbac6b69050fc3b142e914fe58c  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_ternary_data.h
*************** af39bb531df9d78fb100a8bc074d5527  gcc/te
*** 100468,100473 ****
--- 100601,100610 ----
  8a062701030c2179b34b5cdbe2e5affb  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmseq-run-1-u32.c
  066197fc9e9481f3a6397992b977191b  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmseq-run-1-u64.c
  cfeabedcaa487c67a2318497a6bd3a39  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmseq-run-1-u8.c
+ 3cc032015168c6b3794786d6dcde9ed4  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmsleu-run-1-u16.c
+ 31db282cecb214965122ecd6a679fc34  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmsleu-run-1-u32.c
+ 22bd7911fba0c179f8ac7164b391afa0  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmsleu-run-1-u64.c
+ 5e9d9eb5c0d7a92ccb7d05968048fbfa  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmsleu-run-1-u8.c
  feb1c042565686ae5320d1f85f40d64c  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmslt-run-1-i16.c
  eba89c257c6a48dfedc0a0d2549e4755  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmslt-run-1-i32.c
  a3fa1a1070feaa2a16a19d13968894f1  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmslt-run-1-i64.c
*************** c7b8c050c02b19e79d1fc07b2cbd9798  gcc/te
*** 101346,101362 ****
  9d20ec19a81591b4273ec5dc6d68c4ce  gcc/testsuite/gcc.target/riscv/rvv/base/shift_vx_constraint-1.c
  3803a1288f8c5b977c84cca2c1bfd391  gcc/testsuite/gcc.target/riscv/rvv/base/simplify-vdiv.c
  0beee1dd080ce6562b9f1784fcdddecd  gcc/testsuite/gcc.target/riscv/rvv/base/simplify-vrsub.c
! 5573d15ac1e45d7182e2c94949f03b0b  gcc/testsuite/gcc.target/riscv/rvv/base/spill-1.c
  3dc45f55b6b22fe5bcbfcb754d4d19c3  gcc/testsuite/gcc.target/riscv/rvv/base/spill-10.c
  a85c20b09341fb9b656cbb4e2cc40cc5  gcc/testsuite/gcc.target/riscv/rvv/base/spill-11.c
  d67966f60af6ffd06d6dfd62500deefd  gcc/testsuite/gcc.target/riscv/rvv/base/spill-12.c
  8f5c57aeb751465e3f56bc4345add388  gcc/testsuite/gcc.target/riscv/rvv/base/spill-13.c
! cf8b6dc4083b1e4bd545fbaf5e9c384f  gcc/testsuite/gcc.target/riscv/rvv/base/spill-2.c
! 96ab399af80c81b130ecd4fd1539c3c6  gcc/testsuite/gcc.target/riscv/rvv/base/spill-3.c
! a9ae98c3cb85eb97221a7f243a49c2d5  gcc/testsuite/gcc.target/riscv/rvv/base/spill-4.c
! 4b8d7ede136e8fba098bc6aa2b0ed72c  gcc/testsuite/gcc.target/riscv/rvv/base/spill-5.c
! 16f52ee6d07f414a5237d68e8a0bff49  gcc/testsuite/gcc.target/riscv/rvv/base/spill-6.c
! ab9e940eefba814d9fffb8ace2d7e17f  gcc/testsuite/gcc.target/riscv/rvv/base/spill-7.c
  31b945f30d695b40cfab5ae856e4e38f  gcc/testsuite/gcc.target/riscv/rvv/base/spill-8.c
  7f3cdd4c9ab4c8dac4c608c6cdde3bba  gcc/testsuite/gcc.target/riscv/rvv/base/spill-9.c
  7de53eea40a2d3d1318fd361b276a775  gcc/testsuite/gcc.target/riscv/rvv/base/spill-sp-adjust.c
--- 101483,101499 ----
  9d20ec19a81591b4273ec5dc6d68c4ce  gcc/testsuite/gcc.target/riscv/rvv/base/shift_vx_constraint-1.c
  3803a1288f8c5b977c84cca2c1bfd391  gcc/testsuite/gcc.target/riscv/rvv/base/simplify-vdiv.c
  0beee1dd080ce6562b9f1784fcdddecd  gcc/testsuite/gcc.target/riscv/rvv/base/simplify-vrsub.c
! 3fbbfac9be409bc2caba5939fdfd1b9b  gcc/testsuite/gcc.target/riscv/rvv/base/spill-1.c
  3dc45f55b6b22fe5bcbfcb754d4d19c3  gcc/testsuite/gcc.target/riscv/rvv/base/spill-10.c
  a85c20b09341fb9b656cbb4e2cc40cc5  gcc/testsuite/gcc.target/riscv/rvv/base/spill-11.c
  d67966f60af6ffd06d6dfd62500deefd  gcc/testsuite/gcc.target/riscv/rvv/base/spill-12.c
  8f5c57aeb751465e3f56bc4345add388  gcc/testsuite/gcc.target/riscv/rvv/base/spill-13.c
! e8ea0f42bb8a05b5e45a37e22183f419  gcc/testsuite/gcc.target/riscv/rvv/base/spill-2.c
! 71c4308c0ce5a9314ceb3babd5d42b47  gcc/testsuite/gcc.target/riscv/rvv/base/spill-3.c
! 52ccdc710e663a07c5765bedff23fa22  gcc/testsuite/gcc.target/riscv/rvv/base/spill-4.c
! ea51b3046d27cb4232083ad58e342335  gcc/testsuite/gcc.target/riscv/rvv/base/spill-5.c
! 9cd6cc8699dff55b5e50570afdb258f4  gcc/testsuite/gcc.target/riscv/rvv/base/spill-6.c
! cd7d71531d3a4db16672ace20df690d6  gcc/testsuite/gcc.target/riscv/rvv/base/spill-7.c
  31b945f30d695b40cfab5ae856e4e38f  gcc/testsuite/gcc.target/riscv/rvv/base/spill-8.c
  7f3cdd4c9ab4c8dac4c608c6cdde3bba  gcc/testsuite/gcc.target/riscv/rvv/base/spill-9.c
  7de53eea40a2d3d1318fd361b276a775  gcc/testsuite/gcc.target/riscv/rvv/base/spill-sp-adjust.c
*************** e1529a0ad7554cca8abf99b95845847f  gcc/te
*** 103573,103579 ****
  f741e193bb3f2f4fbea1bd529b1140b6  gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_return_reg_reg.c
  6ab36e0533ed582948d75c21b09cbf78  gcc/testsuite/gcc.target/riscv/zicond-sfb-primitiveSemantics.c
  a009fbb003840ecc4d7a50c463fa72da  gcc/testsuite/gcc.target/riscv/zicond-xor-01.c
! 7e2d2d4e63580844a236c47de8a815cb  gcc/testsuite/gcc.target/riscv/zicond_ifcvt_opt.c
  bb2b3e0ab01f1ec16e989024621b390a  gcc/testsuite/gcc.target/riscv/zihintpause-1.c
  2b3fb44b9845e2008eee1f6ba7b44bc4  gcc/testsuite/gcc.target/riscv/zihintpause-2.c
  b93bb61a6adb25211cec61b639273181  gcc/testsuite/gcc.target/riscv/zihintpause-noarch.c
--- 103710,103716 ----
  f741e193bb3f2f4fbea1bd529b1140b6  gcc/testsuite/gcc.target/riscv/zicond-primitiveSemantics_return_reg_reg.c
  6ab36e0533ed582948d75c21b09cbf78  gcc/testsuite/gcc.target/riscv/zicond-sfb-primitiveSemantics.c
  a009fbb003840ecc4d7a50c463fa72da  gcc/testsuite/gcc.target/riscv/zicond-xor-01.c
! 2df968b08a4587cf0ef8cb76cb4ef0ee  gcc/testsuite/gcc.target/riscv/zicond_ifcvt_opt.c
  bb2b3e0ab01f1ec16e989024621b390a  gcc/testsuite/gcc.target/riscv/zihintpause-1.c
  2b3fb44b9845e2008eee1f6ba7b44bc4  gcc/testsuite/gcc.target/riscv/zihintpause-2.c
  b93bb61a6adb25211cec61b639273181  gcc/testsuite/gcc.target/riscv/zihintpause-noarch.c
*************** c421014e2cc4b73264d790284ab5572b  gcc/te
*** 104391,104397 ****
  c510e08487f29d55308ff7e6e92099e1  gcc/testsuite/gcc.target/s390/zvector/set-element-bswap-2.c
  039076901eabcee22c3632af316fd5d8  gcc/testsuite/gcc.target/s390/zvector/set-element-bswap-3.c
  37bcaad0074056fd492f7d54c312c3a0  gcc/testsuite/gcc.target/s390/zvector/vec-_Bool.c
! 52639af19eb9820f01b9c5381a9fc995  gcc/testsuite/gcc.target/s390/zvector/vec-addc-u128.c
  8ff1ed12c88c0f19d703adc7a5a4a566  gcc/testsuite/gcc.target/s390/zvector/vec-cmp-1.c
  3dda159673a45586bb1e0d489527d0c6  gcc/testsuite/gcc.target/s390/zvector/vec-cmp-2.c
  ccdf3c2d3031ce42906139030ba856e1  gcc/testsuite/gcc.target/s390/zvector/vec-dbl-math-compile-1.c
--- 104528,104534 ----
  c510e08487f29d55308ff7e6e92099e1  gcc/testsuite/gcc.target/s390/zvector/set-element-bswap-2.c
  039076901eabcee22c3632af316fd5d8  gcc/testsuite/gcc.target/s390/zvector/set-element-bswap-3.c
  37bcaad0074056fd492f7d54c312c3a0  gcc/testsuite/gcc.target/s390/zvector/vec-_Bool.c
! d2cd1a74b3b6b4112d6f60e8e615d000  gcc/testsuite/gcc.target/s390/zvector/vec-addc-u128.c
  8ff1ed12c88c0f19d703adc7a5a4a566  gcc/testsuite/gcc.target/s390/zvector/vec-cmp-1.c
  3dda159673a45586bb1e0d489527d0c6  gcc/testsuite/gcc.target/s390/zvector/vec-cmp-2.c
  ccdf3c2d3031ce42906139030ba856e1  gcc/testsuite/gcc.target/s390/zvector/vec-dbl-math-compile-1.c
*************** d3d333698144b6bad92425ebed117768  gcc/te
*** 110499,110505 ****
  e0fe6119bfcf724ee51375d3156cacc5  gcc/testsuite/gfortran.dg/associate_73.f90
  151edd623643e466e74fa24488fd3142  gcc/testsuite/gfortran.dg/associate_74.f90
  9324e6abeab7018b1551e0a075cd2085  gcc/testsuite/gfortran.dg/associate_75.f90
! aa468db4416b89ec8f44889e6cc47748  gcc/testsuite/gfortran.dg/associate_76.f90
  3c2206420bb8717914aa447789b5f079  gcc/testsuite/gfortran.dg/associate_8.f03
  0406413659a92c10d44ed1f1576987b9  gcc/testsuite/gfortran.dg/associate_9.f03
  51f82584276ab8f411b8d9d7e84fadc8  gcc/testsuite/gfortran.dg/associated_1.f90
--- 110636,110643 ----
  e0fe6119bfcf724ee51375d3156cacc5  gcc/testsuite/gfortran.dg/associate_73.f90
  151edd623643e466e74fa24488fd3142  gcc/testsuite/gfortran.dg/associate_74.f90
  9324e6abeab7018b1551e0a075cd2085  gcc/testsuite/gfortran.dg/associate_75.f90
! 69c9adbbfbe876b0ebe43dc051936ce2  gcc/testsuite/gfortran.dg/associate_76.f90
! 455dfc6f26983668bd6203def9eb927b  gcc/testsuite/gfortran.dg/associate_77.f90
  3c2206420bb8717914aa447789b5f079  gcc/testsuite/gfortran.dg/associate_8.f03
  0406413659a92c10d44ed1f1576987b9  gcc/testsuite/gfortran.dg/associate_9.f03
  51f82584276ab8f411b8d9d7e84fadc8  gcc/testsuite/gfortran.dg/associated_1.f90
*************** a01a62a01e9e7263ce5c3eb6b06e96a7  gcc/te
*** 116086,116091 ****
--- 116224,116230 ----
  6df685f9b4cb8f7874082b4e9d9e61f5  gcc/testsuite/gfortran.dg/pr122513-2.f90
  b6e7e7e8bea9878d7980ddcd5a97c5f5  gcc/testsuite/gfortran.dg/pr122513.f90
  b9c77c8cd78fcd9e57fbfafe732a8c95  gcc/testsuite/gfortran.dg/pr122936.f90
+ fa053690c35a7cf0e14a876e94c10140  gcc/testsuite/gfortran.dg/pr122957.f90
  984f8307f36d56a0b48b5acce2dd5eb5  gcc/testsuite/gfortran.dg/pr12884.f
  64075248b9d1bffd6f380bb4e2a6eae0  gcc/testsuite/gfortran.dg/pr15129.f90
  2b5f18b773a5db29b0a2ee2d8cce767c  gcc/testsuite/gfortran.dg/pr15140.f90
*************** f202185bfd0a21aad1b2b2a3c53f0530  gcc/te
*** 121111,121116 ****
--- 121250,121261 ----
  c08e4f7d35898f0bc9c4996849adc409  gcc/testsuite/gnat.dg/aggr32_pkg-child.ads
  1057b1221f0bd9331d17412ee8c29e1d  gcc/testsuite/gnat.dg/aggr32_pkg.ads
  2e81bb438686c4b5e8022356634d0f32  gcc/testsuite/gnat.dg/aggr33.adb
+ fbdb338ed0af1dd948f3a9a5e3ee1805  gcc/testsuite/gnat.dg/aggr34.adb
+ 0849064da3e768041e2dec19d47f5461  gcc/testsuite/gnat.dg/aggr34_pkg1.adb
+ add67b8a04a202421f2564cbcbcdbc88  gcc/testsuite/gnat.dg/aggr34_pkg1.ads
+ 59299ad44fc7c1448bdc355f64dda579  gcc/testsuite/gnat.dg/aggr34_pkg2.adb
+ 564b8aed71e56ea8798f32904183e4cf  gcc/testsuite/gnat.dg/aggr34_pkg2.ads
+ dc8fcab04675e97bd3b1a9cc9ea62b81  gcc/testsuite/gnat.dg/aggr34_pkg3.ads
  35168b6dce753ec723ff0dcf21d977d0  gcc/testsuite/gnat.dg/aggr4.adb
  a12ec40d7ebc1ab08b05b0d1f6a57bc4  gcc/testsuite/gnat.dg/aggr7.adb
  39fba9f7f4870b15e9c37bcf9a358858  gcc/testsuite/gnat.dg/aggr8.adb
*************** b028802f236df04a9a038de337a5c2dc  gcc/te
*** 122920,122925 ****
--- 123065,123071 ----
  8317714735f6bcf3820730db670ecec1  gcc/testsuite/gnat.dg/specs/aggr6.ads
  57ec76624056e533c277432e503fe83c  gcc/testsuite/gnat.dg/specs/aggr7.ads
  d85e98dad301b07f80ba5ad3d5adbe63  gcc/testsuite/gnat.dg/specs/aggr8.ads
+ 8d9f49d860ee6a20314b8b77bfff71c6  gcc/testsuite/gnat.dg/specs/aggr9.ads
  03d5230a50a20391e0238f6841dcaf91  gcc/testsuite/gnat.dg/specs/ai_116.ads
  7d85593bd2feb29192cd8b150c52dde2  gcc/testsuite/gnat.dg/specs/alignment1.ads
  2137406ab24e57901900aff5d6a8f7d6  gcc/testsuite/gnat.dg/specs/alignment2.ads
*************** bfb26e1cdacb2ba2f03eb976978bb43f  gcc/te
*** 122942,122947 ****
--- 123088,123094 ----
  c32b716552779677ae176058dfb0e811  gcc/testsuite/gnat.dg/specs/attribute_parsing.ads
  f816d4862285932d8e7b70c2efc94426  gcc/testsuite/gnat.dg/specs/box1.ads
  250f7491f96f113a197899dda06a57fe  gcc/testsuite/gnat.dg/specs/bss1.ads
+ 9b7de00350e4ab77eabfdece45deb6e4  gcc/testsuite/gnat.dg/specs/class_wide1.ads
  22d47e1639397ee371d9448cf072ccfb  gcc/testsuite/gnat.dg/specs/clause_on_volatile.ads
  8def2fc44b62c48b1c9f7f2f3906807c  gcc/testsuite/gnat.dg/specs/compile_time1.ads
  78a5f35d64fd87f033de3894f27944ec  gcc/testsuite/gnat.dg/specs/compile_time1_pkg.ads
*************** bac1e8c2c28486c2dacd74f69ad37ca6  gcc/te
*** 123046,123051 ****
--- 123193,123199 ----
  8a6a0905a2e9d263001e69e19b9657c3  gcc/testsuite/gnat.dg/specs/lto3_pkg2.adb
  1d6fe3d382f738feda5c7c3faea04614  gcc/testsuite/gnat.dg/specs/lto3_pkg2.ads
  bd5a6ea89b23bd5629784ef6f9f822ab  gcc/testsuite/gnat.dg/specs/machine_attribute.ads
+ b1a7d26ec14c2e4b30e7f5732498d30e  gcc/testsuite/gnat.dg/specs/mutably_tagged1.ads
  a573c4fbee048b518c86be4ea7e21d27  gcc/testsuite/gnat.dg/specs/no_streams.ads
  d470d680d139ab860f9207e4c6a63125  gcc/testsuite/gnat.dg/specs/noinline1.ads
  750425a1e2a00ca741c599016cfcbb7b  gcc/testsuite/gnat.dg/specs/noinline3.ads
*************** e7c501da98d4a79a382f65d5a172d7b5  gcc/te
*** 125910,125916 ****
  73f8e7fcba76f3bb5458e5c95e1a21d5  gcc/testsuite/lib/options.exp
  5c530c179d98a9ccee9423414a791569  gcc/testsuite/lib/plugin-support.exp
  314adb1e13c4c51727a909aceee45a3a  gcc/testsuite/lib/print-stack.exp
! 4e295ef8c79574b6d01edf397fa2ba08  gcc/testsuite/lib/profopt.exp
  d7307d6eecb64fbf8475c3fba44ea3ee  gcc/testsuite/lib/prune.exp
  430635d56dfe6d0f15cb8aaf2de52cdd  gcc/testsuite/lib/rust-dg.exp
  379c5cfaf969df57b70bc235b35a68e5  gcc/testsuite/lib/rust.exp
--- 126058,126064 ----
  73f8e7fcba76f3bb5458e5c95e1a21d5  gcc/testsuite/lib/options.exp
  5c530c179d98a9ccee9423414a791569  gcc/testsuite/lib/plugin-support.exp
  314adb1e13c4c51727a909aceee45a3a  gcc/testsuite/lib/print-stack.exp
! 0ac50b9f4a8f32fb976d34b50e2b13c4  gcc/testsuite/lib/profopt.exp
  d7307d6eecb64fbf8475c3fba44ea3ee  gcc/testsuite/lib/prune.exp
  430635d56dfe6d0f15cb8aaf2de52cdd  gcc/testsuite/lib/rust-dg.exp
  379c5cfaf969df57b70bc235b35a68e5  gcc/testsuite/lib/rust.exp
*************** eb1595e729e2eaac81c7ffe330d8f24e  gcc/te
*** 125935,125941 ****
  f7940f4f8c24d9f0bf4d062473f55777  gcc/testsuite/lib/scanwpaipa.exp
  23e89ca46b182663a4139064b179545f  gcc/testsuite/lib/target-libpath.exp
  d9a6726c38c578e1cd46631ee7f92d0a  gcc/testsuite/lib/target-supports-dg.exp
! 55720f9818a46917be7dcef4eee85d58  gcc/testsuite/lib/target-supports.exp
  cfe4a2f0a83382048de060dc6669cbb9  gcc/testsuite/lib/target-utils.exp
  e45ee1a35539730bd823a310ad306ded  gcc/testsuite/lib/timeout-dg.exp
  b755c82fb5ee43ef6c852f23fbdc8704  gcc/testsuite/lib/timeout.exp
--- 126083,126089 ----
  f7940f4f8c24d9f0bf4d062473f55777  gcc/testsuite/lib/scanwpaipa.exp
  23e89ca46b182663a4139064b179545f  gcc/testsuite/lib/target-libpath.exp
  d9a6726c38c578e1cd46631ee7f92d0a  gcc/testsuite/lib/target-supports-dg.exp
! 7b438dcfd87e59cf2fc7dc337c6fcabb  gcc/testsuite/lib/target-supports.exp
  cfe4a2f0a83382048de060dc6669cbb9  gcc/testsuite/lib/target-utils.exp
  e45ee1a35539730bd823a310ad306ded  gcc/testsuite/lib/timeout-dg.exp
  b755c82fb5ee43ef6c852f23fbdc8704  gcc/testsuite/lib/timeout.exp
*************** c021443c771857518a064a621fe4002f  gcc/te
*** 127514,127519 ****
--- 127662,127668 ----
  e46eaa86fb97d21ba5a2154cfe45c9a9  gcc/testsuite/rust/compile/issue-3969.rs
  8c2f1bf21530fc563f42c2af94282319  gcc/testsuite/rust/compile/issue-3971.rs
  60241c6cc63c4504e54468c2ce6c06b6  gcc/testsuite/rust/compile/issue-3974.rs
+ 324233231f3f4d99a39b6919e388791c  gcc/testsuite/rust/compile/issue-3977.rs
  d4479cd16fd0fe4348b1bdbfb2f4d527  gcc/testsuite/rust/compile/issue-3978.rs
  b600c0395dbcbda7eda163bb57bf1b72  gcc/testsuite/rust/compile/issue-4006.rs
  e30cff5705a384a86ca4de4df52ab9e0  gcc/testsuite/rust/compile/issue-402.rs
*************** f903646ce6fe965ceb5a5d390d6cfcc4  gcc/te
*** 127526,127532 ****
  3d7791312f67fd09e7b5717b29f0b7d2  gcc/testsuite/rust/compile/issue-4140-2.rs
  992b0482f919976b48b8c59f06198652  gcc/testsuite/rust/compile/issue-4145.rs
  192eb2bd0b392ae1910cc848e0324baf  gcc/testsuite/rust/compile/issue-4146.rs
! 6559995996d8b61db8b4090629e0c41e  gcc/testsuite/rust/compile/issue-4148.rs
  9a90a5823b2fac9dbc891be63a808346  gcc/testsuite/rust/compile/issue-4155.rs
  7131557f59176cb191bf859cdabf540b  gcc/testsuite/rust/compile/issue-4162.rs
  f84fe23c1ba8b2db0d2401b4fddc498f  gcc/testsuite/rust/compile/issue-4165.rs
--- 127675,127681 ----
  3d7791312f67fd09e7b5717b29f0b7d2  gcc/testsuite/rust/compile/issue-4140-2.rs
  992b0482f919976b48b8c59f06198652  gcc/testsuite/rust/compile/issue-4145.rs
  192eb2bd0b392ae1910cc848e0324baf  gcc/testsuite/rust/compile/issue-4146.rs
! 32f8f6000d7c69556ed000f78b96f2df  gcc/testsuite/rust/compile/issue-4148.rs
  9a90a5823b2fac9dbc891be63a808346  gcc/testsuite/rust/compile/issue-4155.rs
  7131557f59176cb191bf859cdabf540b  gcc/testsuite/rust/compile/issue-4162.rs
  f84fe23c1ba8b2db0d2401b4fddc498f  gcc/testsuite/rust/compile/issue-4165.rs
*************** ec1071b4fb0c33637bd7da589cb438c5  gcc/te
*** 127538,127543 ****
--- 127687,127694 ----
  b889a37174c1fb578620fbb747c66988  gcc/testsuite/rust/compile/issue-4226.rs
  581cc0ff9159a5a7b1c18ed81c2264ff  gcc/testsuite/rust/compile/issue-4231.rs
  21ab8fd38827c96146b33d799d8b71b7  gcc/testsuite/rust/compile/issue-4242.rs
+ 9f4aeab87408cc723a677ddaf67b42d5  gcc/testsuite/rust/compile/issue-4245.rs
+ 74bb3e889f7bb2efe1d70f6d4b94d063  gcc/testsuite/rust/compile/issue-4260_0.rs
  2133db7e84c5e92ff47b3f6ec5232983  gcc/testsuite/rust/compile/issue-4261.rs
  c6047d6f2d7da439614b6d3e2824f2f0  gcc/testsuite/rust/compile/issue-4262.rs
  982dd5cc22276d1f70ba9c3606bf42ff  gcc/testsuite/rust/compile/issue-4267.rs
*************** fc4bfff7da9e04a84429fa51984b3b22  gcc/te
*** 127851,127856 ****
--- 128002,128008 ----
  8db81b3f57fdb3aaac697db6f3cd5442  gcc/testsuite/rust/compile/slice_rest_pattern.rs
  3d9403599fa65b5b6f55bf030e5f937c  gcc/testsuite/rust/compile/slicepattern-size-mismatch.rs
  c76cd68ebcf9bb89b67b55d54a10cee5  gcc/testsuite/rust/compile/specify-crate-name.rs
+ dd718fcf84dd961738a1ae5a64900abd  gcc/testsuite/rust/compile/static_item_0.rs
  2ed8ae14e031fb426a127f8fd5819910  gcc/testsuite/rust/compile/static_var1.rs
  c47470fcadcdaa19ce2fb18db595b4e9  gcc/testsuite/rust/compile/stmt_with_block_dot.rs
  570a954443a78c2e050e56451d9f74a7  gcc/testsuite/rust/compile/stmt_with_block_err1.rs
*************** b8008bbbb6a2e41bf794f9f5d16971a2  gcc/te
*** 127864,127869 ****
--- 128016,128022 ----
  c2a21c19762e48d9fe8a2144950b1b4f  gcc/testsuite/rust/compile/struct_pack2.rs
  b43cef7a71615c9da4ee1b0bf1b98d56  gcc/testsuite/rust/compile/structural-eq-peq.rs
  b367b9437770c67d8d9059972bc1a3e8  gcc/testsuite/rust/compile/syntax-only.rs
+ 9717a1267510229e7d9933018e324aec  gcc/testsuite/rust/compile/template_function_0.rs
  156d3a4eb60d669211c1c31f6828f576  gcc/testsuite/rust/compile/torture/all_doc_comment_line_blocks.rs
  fdf890b2027e28e726e5201eddef6b4f  gcc/testsuite/rust/compile/torture/all_doc_comment_line_blocks_crlf.rs
  e523e1100be82cdc849bfc94efa58c3e  gcc/testsuite/rust/compile/torture/alt_patterns1.rs
*************** f840f4287f5740ac4854b2f4195dbfbe  gcc/te
*** 128208,128213 ****
--- 128361,128368 ----
  1eda1b7673de43c07e2c48bd01367d7c  gcc/testsuite/rust/compile/unsafe_module.rs
  82c88b596e5dd7e19c5c2febfa49a9e8  gcc/testsuite/rust/compile/unstable-fn.rs
  7c830dd0a2ec3525c6da4bc67b44f331  gcc/testsuite/rust/compile/unterminated_c_comment.rs
+ 15677d62dbb38a134b8dcdd984897b15  gcc/testsuite/rust/compile/unused-mut-identifier_0.rs
+ dcf8467b7c073251e28e3b9285555700  gcc/testsuite/rust/compile/unused-mut-struct-field_0.rs
  4be9ad073e00747e5ffe46175988b56e  gcc/testsuite/rust/compile/use_1.rs
  9fc32e79fcf7466f1df1c8e1f5615b56  gcc/testsuite/rust/compile/use_2.rs
  dfa73aa7120ddff81f720be1afb6d4e8  gcc/testsuite/rust/compile/use_3.rs
*************** af75d9c8c889bf48bed7f36350e6708f  gcc/tr
*** 128673,128679 ****
  9bff033c448d54835a74eae5797b80e7  gcc/tree-ssa-live.cc
  cf4bde43ab3b843eff45bac243d4116d  gcc/tree-ssa-live.h
  8fb545bd550f08c8e88222c745f881a0  gcc/tree-ssa-loop-ch.cc
! 56c17094ff91d36af5c68291820c1d2f  gcc/tree-ssa-loop-im.cc
  59817c52e943058ad942cd5b8c8427d0  gcc/tree-ssa-loop-ivcanon.cc
  ec0ea4b2fca8f29ceacc9fa4130673d0  gcc/tree-ssa-loop-ivopts.cc
  1f70c217ef5bd5f655512b9232754870  gcc/tree-ssa-loop-ivopts.h
--- 128828,128834 ----
  9bff033c448d54835a74eae5797b80e7  gcc/tree-ssa-live.cc
  cf4bde43ab3b843eff45bac243d4116d  gcc/tree-ssa-live.h
  8fb545bd550f08c8e88222c745f881a0  gcc/tree-ssa-loop-ch.cc
! 22ea8f7053f142653bc254769eb73f9a  gcc/tree-ssa-loop-im.cc
  59817c52e943058ad942cd5b8c8427d0  gcc/tree-ssa-loop-ivcanon.cc
  ec0ea4b2fca8f29ceacc9fa4130673d0  gcc/tree-ssa-loop-ivopts.cc
  1f70c217ef5bd5f655512b9232754870  gcc/tree-ssa-loop-ivopts.h
*************** fbcc93539b376489c1256eb8cf2d4800  gcc/tr
*** 128686,128692 ****
  414aadddf1510c47773d045bc3e2800f  gcc/tree-ssa-loop-unswitch.cc
  5642645ad7837b2cc3422fa4adf40a37  gcc/tree-ssa-loop.cc
  538146c17730f67ffcc58afdfcc93712  gcc/tree-ssa-loop.h
! 422e15102e032e44507602b4d265e573  gcc/tree-ssa-math-opts.cc
  c0b0549adb2c1140cf285901abb5a78c  gcc/tree-ssa-math-opts.h
  e6684bfab00087c19d73f3a45f523786  gcc/tree-ssa-operands.cc
  da72a60de8a6f51a635ead26120d3cc7  gcc/tree-ssa-operands.h
--- 128841,128847 ----
  414aadddf1510c47773d045bc3e2800f  gcc/tree-ssa-loop-unswitch.cc
  5642645ad7837b2cc3422fa4adf40a37  gcc/tree-ssa-loop.cc
  538146c17730f67ffcc58afdfcc93712  gcc/tree-ssa-loop.h
! 49b13919ade2806063147f3872f97174  gcc/tree-ssa-math-opts.cc
  c0b0549adb2c1140cf285901abb5a78c  gcc/tree-ssa-math-opts.h
  e6684bfab00087c19d73f3a45f523786  gcc/tree-ssa-operands.cc
  da72a60de8a6f51a635ead26120d3cc7  gcc/tree-ssa-operands.h
*************** a3eb5dee2788fe0a6c42502ba658eddd  libffi
*** 129602,129608 ****
  0f3c94e520870e194cf525de7ec404dc  libffi/testsuite/libffi.go/ffitest.h
  6cfb66c1c00023abb2c2276d85f16e77  libffi/testsuite/libffi.go/go.exp
  189dc193fd0e627a2d55b2e84871edc5  libffi/testsuite/libffi.go/static-chain.h
! c687e0d03aef2bfa3876c26a7784ad0c  libga68/ChangeLog
  32a6cfe3b283d9e93de3717f07be75a9  libga68/Makefile.am
  3a23c15e53f814e130a87c72920a7b13  libga68/Makefile.in
  e582170826a5049ebe5f76ccb66fe5f2  libga68/README
--- 129757,129763 ----
  0f3c94e520870e194cf525de7ec404dc  libffi/testsuite/libffi.go/ffitest.h
  6cfb66c1c00023abb2c2276d85f16e77  libffi/testsuite/libffi.go/go.exp
  189dc193fd0e627a2d55b2e84871edc5  libffi/testsuite/libffi.go/static-chain.h
! 7265367e6b7b35d34180c630dc2e8f0e  libga68/ChangeLog
  32a6cfe3b283d9e93de3717f07be75a9  libga68/Makefile.am
  3a23c15e53f814e130a87c72920a7b13  libga68/Makefile.in
  e582170826a5049ebe5f76ccb66fe5f2  libga68/README
*************** e582170826a5049ebe5f76ccb66fe5f2  libga6
*** 129610,129620 ****
  600b07adb29a85dfaf9c3a44fcdf1dad  libga68/config.h.in
  824870a0d72f8c25d27829eecbb0dfe1  libga68/configure
  f680df9f0301a973617f946b2f3516ae  libga68/configure.ac
! fee976d3e4dd69fd4ce510cd3f657490  libga68/ga68-alloc.c
! adf1f645e63900a1f48a7b62b3244e82  libga68/ga68-error.c
  03e76f4209cfbe93f665f3a9b6669d54  libga68/ga68-posix.c
! 0cb9061543a123a912e4657db7b527f9  libga68/ga68-standenv.c
! 42897103d2dd7bb1ffbe9bd8d3101f9f  libga68/ga68-unistr.c
  44efc2d0ac0918a2b135870b40bf5341  libga68/ga68.h
  df913cb29914c3ebdb600c9c3be7f788  libga68/libga68.c
  5a99bd84e0794e311b25ab281d6c294a  libga68/libga68.spec.in
--- 129765,129775 ----
  600b07adb29a85dfaf9c3a44fcdf1dad  libga68/config.h.in
  824870a0d72f8c25d27829eecbb0dfe1  libga68/configure
  f680df9f0301a973617f946b2f3516ae  libga68/configure.ac
! e19c640ed91fb88d59a444ae09fddf70  libga68/ga68-alloc.c
! ab4bfff29b367495b338f951fb77ffd9  libga68/ga68-error.c
  03e76f4209cfbe93f665f3a9b6669d54  libga68/ga68-posix.c
! 12f59efc2c02c8e22bec45f9a718e690  libga68/ga68-standenv.c
! 1f555f9972e368d29af448788086882e  libga68/ga68-unistr.c
  44efc2d0ac0918a2b135870b40bf5341  libga68/ga68.h
  df913cb29914c3ebdb600c9c3be7f788  libga68/libga68.c
  5a99bd84e0794e311b25ab281d6c294a  libga68/libga68.spec.in
*************** a3a7e9ca6057da9ca42e03e41e1c73f7  libgo/
*** 137824,137830 ****
  dcdf1b680b15b372bdb64cc5107d51b6  libgo/testsuite/libgo-test-support.exp.in
  bf162aa572f7b96b25dbd2b027845d32  libgo/testsuite/libgo.testmain/testmain.exp
  cc9d2a0e34e31ba866a8caf9f46f48f3  libgomp/.gitattributes
! 47a360885282f48697c3a412239ec750  libgomp/ChangeLog
  0d55aa862aee66efdc5f8d62c94ff8fb  libgomp/ChangeLog.graphite
  714e3b9c0810a61df01246c2a97e825a  libgomp/Makefile.am
  a0a1ac8cf0159995930a1c6c60042f2d  libgomp/Makefile.in
--- 137979,137985 ----
  dcdf1b680b15b372bdb64cc5107d51b6  libgo/testsuite/libgo-test-support.exp.in
  bf162aa572f7b96b25dbd2b027845d32  libgo/testsuite/libgo.testmain/testmain.exp
  cc9d2a0e34e31ba866a8caf9f46f48f3  libgomp/.gitattributes
! 971846217a5db7ce97e0beeeffda7566  libgomp/ChangeLog
  0d55aa862aee66efdc5f8d62c94ff8fb  libgomp/ChangeLog.graphite
  714e3b9c0810a61df01246c2a97e825a  libgomp/Makefile.am
  a0a1ac8cf0159995930a1c6c60042f2d  libgomp/Makefile.in
*************** ae0dcb4c08025996b4bf4550cf72832e  libgom
*** 138020,138026 ****
  83cc7a56dc29f0c258b4b9e13798b8ec  libgomp/testsuite/config/default.exp
  989674e1cf3f6739f5d9519d904650c7  libgomp/testsuite/flock
  6c859d1c520b245e51a29693632545d6  libgomp/testsuite/lib/libgomp-dg.exp
! d38dcecc6a73a36b6cb71e1fa9029715  libgomp/testsuite/lib/libgomp.exp
  751966e2063e2e638eb537562f7d4551  libgomp/testsuite/libgomp-site-extra.exp.in
  6d56ea402ff11fa0bd533c6d73e2ecde  libgomp/testsuite/libgomp-test-support.exp.in
  640013cb5bd3037f4b8af5f9c3b758c9  libgomp/testsuite/libgomp.c++/affinity-1.C
--- 138175,138181 ----
  83cc7a56dc29f0c258b4b9e13798b8ec  libgomp/testsuite/config/default.exp
  989674e1cf3f6739f5d9519d904650c7  libgomp/testsuite/flock
  6c859d1c520b245e51a29693632545d6  libgomp/testsuite/lib/libgomp-dg.exp
! dc0d4994fd77e659fa1d69717a28c3e1  libgomp/testsuite/lib/libgomp.exp
  751966e2063e2e638eb537562f7d4551  libgomp/testsuite/libgomp-site-extra.exp.in
  6d56ea402ff11fa0bd533c6d73e2ecde  libgomp/testsuite/libgomp-test-support.exp.in
  640013cb5bd3037f4b8af5f9c3b758c9  libgomp/testsuite/libgomp.c++/affinity-1.C
*************** ba23071854d45364a52aa56e0e3316ac  libgom
*** 139926,139932 ****
  dc1df4b97d0fa5209eb509523fa08bfc  libgomp/testsuite/libgomp.fortran/use_device_ptr-optional-4.f90
  fd6becb20369d6ac5a1bacfc014b31a3  libgomp/testsuite/libgomp.fortran/use_intrinsic_1.f90
  0047760a13ce6b018e8db47739f97caf  libgomp/testsuite/libgomp.fortran/uses_allocators-7.f90
! 9a2ba6cff64ca5bc6375ce44cf49a165  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
--- 140081,140087 ----
  dc1df4b97d0fa5209eb509523fa08bfc  libgomp/testsuite/libgomp.fortran/use_device_ptr-optional-4.f90
  fd6becb20369d6ac5a1bacfc014b31a3  libgomp/testsuite/libgomp.fortran/use_intrinsic_1.f90
  0047760a13ce6b018e8db47739f97caf  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
*************** d680e7307fb59fe24f8431e179191f16  libssp
*** 143395,143401 ****
  534c3fb4a88e5c1f70db35c12b7742c3  libssp/vsnprintf-chk.c
  34daeb04a522ee796098df4446d6ce61  libssp/vsprintf-chk.c
  9e2de2e1f20ab0ffa2201164de02824f  libstdc++-v3/.editorconfig
! f66b0f51148d0263c1e6f381a8a467da  libstdc++-v3/ChangeLog
  7aa6c40440a44fcf5ec94c066160c2f8  libstdc++-v3/ChangeLog-1998
  7aff86600b6a1ed3fa87305075a92db0  libstdc++-v3/ChangeLog-1999
  a6f28e8fc9bb07696a9e068b439a3a87  libstdc++-v3/ChangeLog-2000
--- 143550,143556 ----
  534c3fb4a88e5c1f70db35c12b7742c3  libssp/vsnprintf-chk.c
  34daeb04a522ee796098df4446d6ce61  libssp/vsprintf-chk.c
  9e2de2e1f20ab0ffa2201164de02824f  libstdc++-v3/.editorconfig
! 002ae6636d7fb2b63653de05c6aa36b7  libstdc++-v3/ChangeLog
  7aa6c40440a44fcf5ec94c066160c2f8  libstdc++-v3/ChangeLog-1998
  7aff86600b6a1ed3fa87305075a92db0  libstdc++-v3/ChangeLog-1999
  a6f28e8fc9bb07696a9e068b439a3a87  libstdc++-v3/ChangeLog-2000
*************** f8898e59cc7155a01a17f15a3b853c30  libstd
*** 143809,143815 ****
  11dd55e39edb8313b5563e53067c431e  libstdc++-v3/doc/html/manual/using_dynamic_or_shared.html
  292c099f5758d0403ebf7dceea801138  libstdc++-v3/doc/html/manual/using_exceptions.html
  91385600a9fbb5f8f29c666917403807  libstdc++-v3/doc/html/manual/using_headers.html
! 3411d1e07939e0319750eceefff4b4c2  libstdc++-v3/doc/html/manual/using_macros.html
  e8b86abd99dc9893dfa1bb7533fdc23d  libstdc++-v3/doc/html/manual/using_namespaces.html
  13c8dfb643338ee235bfc84a29e5d3f2  libstdc++-v3/doc/html/manual/utilities.html
  3d34cd999f3bf3133e40f554b6ba525e  libstdc++-v3/doc/xml/api.xml
--- 143964,143970 ----
  11dd55e39edb8313b5563e53067c431e  libstdc++-v3/doc/html/manual/using_dynamic_or_shared.html
  292c099f5758d0403ebf7dceea801138  libstdc++-v3/doc/html/manual/using_exceptions.html
  91385600a9fbb5f8f29c666917403807  libstdc++-v3/doc/html/manual/using_headers.html
! 96161800f562d3ac67970d58f6ff161f  libstdc++-v3/doc/html/manual/using_macros.html
  e8b86abd99dc9893dfa1bb7533fdc23d  libstdc++-v3/doc/html/manual/using_namespaces.html
  13c8dfb643338ee235bfc84a29e5d3f2  libstdc++-v3/doc/html/manual/utilities.html
  3d34cd999f3bf3133e40f554b6ba525e  libstdc++-v3/doc/xml/api.xml
*************** f585d9116a5f533123166622818c4252  libstd
*** 144048,144054 ****
  cbd1ce02ad465e7f996671f14eee4ec9  libstdc++-v3/doc/xml/manual/support.xml
  1c7dc4c765a2c1e49fdeec9af9ce0274  libstdc++-v3/doc/xml/manual/test.xml
  e2e099be3dd6a4b7a940a7232635ee2c  libstdc++-v3/doc/xml/manual/test_policy_data_structures.xml
! 51895aad91176abba6bdd35a08b3db4a  libstdc++-v3/doc/xml/manual/using.xml
  5245e9347bf064c48690e1ad9213f1ba  libstdc++-v3/doc/xml/manual/using_exceptions.xml
  bc0412a9556e7ed39afe5103b73f1f26  libstdc++-v3/doc/xml/manual/utilities.xml
  c587674e0c370a2d6ccc5213ab3e4e65  libstdc++-v3/doc/xml/spine.xml
--- 144203,144209 ----
  cbd1ce02ad465e7f996671f14eee4ec9  libstdc++-v3/doc/xml/manual/support.xml
  1c7dc4c765a2c1e49fdeec9af9ce0274  libstdc++-v3/doc/xml/manual/test.xml
  e2e099be3dd6a4b7a940a7232635ee2c  libstdc++-v3/doc/xml/manual/test_policy_data_structures.xml
! a37a16c363434f2efb6d67e75b4b680c  libstdc++-v3/doc/xml/manual/using.xml
  5245e9347bf064c48690e1ad9213f1ba  libstdc++-v3/doc/xml/manual/using_exceptions.xml
  bc0412a9556e7ed39afe5103b73f1f26  libstdc++-v3/doc/xml/manual/utilities.xml
  c587674e0c370a2d6ccc5213ab3e4e65  libstdc++-v3/doc/xml/spine.xml
*************** dee72a6a60e99528b0d17bf3ff9a1e15  ltopti
*** 155632,155638 ****
  bc2f6032c98896249eadb56177c7d357  ltsugar.m4
  c30cd33c496505f13d9fbdb6970c7c33  ltversion.m4
  293853a13b7e218e3a4342cf85fbbf25  lt~obsolete.m4
! 3df898f35a88409b05244af8bb325230  maintainer-scripts/ChangeLog
  33c7bc2d2c55956dfac85a05d8a80eff  maintainer-scripts/README
  507e832af5f2d63b8a78eef217c807a7  maintainer-scripts/branch_changer.py
  c819510f0d438149c1518bda7b165ac4  maintainer-scripts/bugzilla-close-candidate.py
--- 155787,155793 ----
  bc2f6032c98896249eadb56177c7d357  ltsugar.m4
  c30cd33c496505f13d9fbdb6970c7c33  ltversion.m4
  293853a13b7e218e3a4342cf85fbbf25  lt~obsolete.m4
! 29642b36e10ee0301830c202dca5abd2  maintainer-scripts/ChangeLog
  33c7bc2d2c55956dfac85a05d8a80eff  maintainer-scripts/README
  507e832af5f2d63b8a78eef217c807a7  maintainer-scripts/branch_changer.py
  c819510f0d438149c1518bda7b165ac4  maintainer-scripts/bugzilla-close-candidate.py
diff -Nrcpad gcc-16-20251221/contrib/ChangeLog gcc-16-20251228/contrib/ChangeLog
*** gcc-16-20251221/contrib/ChangeLog	Sun Dec 21 22:32:05 2025
--- gcc-16-20251228/contrib/ChangeLog	Sun Dec 28 22:32:05 2025
***************
*** 1,3 ****
--- 1,8 ----
+ 2025-12-26  Matthew Fortune  <matthew.fortune@imgtec.com>
+ 
+ 	* test_installed: Use target to select default gcc/g++ etc.
+ 	under test.
+ 
  2025-12-15  Joseph Myers  <josmyers@redhat.com>
  
  	* test_installed (--enable-plugin, --with-plugincc=)
diff -Nrcpad gcc-16-20251221/contrib/test_installed gcc-16-20251228/contrib/test_installed
*** gcc-16-20251221/contrib/test_installed	Sun Dec 21 22:32:05 2025
--- gcc-16-20251228/contrib/test_installed	Sun Dec 28 22:32:05 2025
*************** set srcdir "${testsuite-${srcdir}/gcc/te
*** 131,140 ****
  set libiconv "$libiconv"
  set CFLAGS ""
  set CXXFLAGS ""
! set GCC_UNDER_TEST "${GCC_UNDER_TEST-${prefix}${prefix+/bin/}gcc}"
! set GXX_UNDER_TEST "${GXX_UNDER_TEST-${prefix}${prefix+/bin/}g++}"
! set GFORTRAN_UNDER_TEST "${GFORTRAN_UNDER_TEST-${prefix}${prefix+/bin/}gfortran}"
! set OBJC_UNDER_TEST "${OBJC_UNDER_TEST-${prefix}${prefix+/bin/}gcc}"
  set HOSTCC "${HOSTCC-cc}"
  set HOSTCXX "${HOSTCXX-c++}"
  set HOSTCFLAGS ""
--- 131,144 ----
  set libiconv "$libiconv"
  set CFLAGS ""
  set CXXFLAGS ""
! set GCC_UNDER_TEST "${GCC_UNDER_TEST-${prefix}${prefix+/bin/}\
! ${target+$target-}gcc}"
! set GXX_UNDER_TEST "${GXX_UNDER_TEST-${prefix}${prefix+/bin/}\
! ${target+$target-}g++}"
! set GFORTRAN_UNDER_TEST "${GFORTRAN_UNDER_TEST-${prefix}${prefix+/bin/}\
! ${target+$target-}gfortran}"
! set OBJC_UNDER_TEST "${OBJC_UNDER_TEST-${prefix}${prefix+/bin/}\
! ${target+$target-}gcc}"
  set HOSTCC "${HOSTCC-cc}"
  set HOSTCXX "${HOSTCXX-c++}"
  set HOSTCFLAGS ""
diff -Nrcpad gcc-16-20251221/gcc/ChangeLog gcc-16-20251228/gcc/ChangeLog
*** gcc-16-20251221/gcc/ChangeLog	Sun Dec 21 22:32:05 2025
--- gcc-16-20251228/gcc/ChangeLog	Sun Dec 28 22:32:05 2025
***************
*** 1,3 ****
--- 1,470 ----
+ 2025-12-27  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR rtl-optimization/123114
+ 	* simplify-rtx.cc (simplify_context::simplify_relational_operation):
+ 	Verify XEXP (XEXP (op0, 0), 0) mode and use CONST0_RTX (cmp_mode)
+ 	instead of CONST0_RTX (mode).
+ 
+ 2025-12-27  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	Revert:
+ 	2025-12-24  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	* ifcvt.cc (noce_process_if_block): Move noce_try_cond_zero_arith
+ 	last.
+ 
+ 2025-12-26  Jeff Law  <jeffrey.law@oss.qualcomm.com>
+ 
+ 	PR target/123283
+ 	* config/riscv/sync.md (subword_atomic_fetch_strong_nand): Add
+ 	USEs for naked operands that might be pseudos.
+ 	(subword_atomic_fetch_strong_<atomic_optab>): Likewise.
+ 	(subword_atomic_exchange_strong): Likewise.
+ 	(subword_atomic_cas_strong): Likewise.
+ 
+ 2025-12-26  Sandra Loosemore  <sloosemore@baylibre.com>
+ 
+ 	* config/i386/i386.opt.urls: Regenerated.
+ 	* config/riscv/riscv.opt.urls: Regenerated.
+ 
+ 2025-12-26  Sandra Loosemore  <sloosemore@baylibre.com>
+ 
+ 	* config/riscv/gen-riscv-ext-texi.cc: Fix table markup and
+ 	layout.
+ 	* config/riscv/riscv-ext-corev.def: Document missing extensions,
+ 	regularize spelling/capitalization in existing descriptions
+ 	* config/riscv/riscv-ext-mips.def: Likewise.
+ 	* config/riscv/riscv-ext-sifive.def: Likewise.
+ 	* config/riscv/riscv-ext-thead.def: Likewise.
+ 	* config/riscv/riscv-ext.def: Likewise.
+ 	* doc/riscv-ext.texi: Regenerated.
+ 
+ 2025-12-26  Sandra Loosemore  <sloosemore@baylibre.com>
+ 
+ 	PR other/122243
+ 	* config/riscv/riscv.opt (mplt): Mark deprecated option Undocumented.
+ 	(msmall-data-limit=): Mark RejectNegative.
+ 	* doc/invoke.texi (Option Summary) <RISC-V Options>:  Remove -mplt
+ 	documentation.  Only list one form of each option.  Add missing
+ 	options -mcpu, -mscalar-strict-align, -mno-vector-strict-align,
+ 	-momit-leaf-frame-pointer, -mstringop-strategy, -mrvv-vector-bits,
+ 	-mrvv-max-lmul, -madjust-lmul-cost, -mmax-vectorization, and
+ 	-mno-autovec-segment.
+ 	(RISC-V Options):  Remove -mplt documentation.  Add documentation for
+ 	missing options listed above.  Add missing index entries for negative
+ 	forms.  Correct the default for the -minline-str* options, which
+ 	has changed.  Copy-edit for markup, spelling, and usage.  Trivial
+ 	whitespace fixes.
+ 
+ 2025-12-25  Arsen Arsenović  <aarsenovic@baylibre.com>
+ 
+ 	* tree-ssa-math-opts.cc (execute_cse_sincos_1): If
+ 	mathfn_built_in_type fails to determine a type for our
+ 	operation, presume that it is the same as the input type.
+ 
+ 2025-12-24  Pan Li  <pan2.li@intel.com>
+ 
+ 	* config/riscv/predicates.md: Add geu to the swappable
+ 	cmp operator iterator.
+ 	* config/riscv/riscv-v.cc (get_swapped_cmp_rtx_code): Take
+ 	care of the swapped rtx code correspondly.
+ 
+ 2025-12-24  Claudio Bantaloukas  <claudio.bantaloukas@arm.com>
+ 
+ 	* config/aarch64/aarch64-sve-builtins-base.cc: (svmul_impl::fold):
+ 	Replace use of type_suffix_pair with type_suffix_triple.
+ 	* config/aarch64/aarch64-sve-builtins-shapes.cc: (parse_element_type):
+ 	Handle third type suffix.
+ 	(parse_type): Handle c2 in function signature. Add the u signature with
+ 	the ability to pass a tuple with twice as many vectors as the base type.
+ 	Calculate number of vectors against the type with the maximum number of
+ 	bits rather than "the other one".
+ 	(load_contiguous_base::resolve): Add argument to resolve_to call.
+ 	(compare_scalar_def::resolve): Likewise.
+ 	(ternary_mfloat8_def::resolve): Likewise.
+ 	(ternary_mfloat8_lane_def::resolve): Likewise.
+ 	(ternary_mfloat8_opt_n_def::resolve): Likewise.
+ 	* config/aarch64/aarch64-sve-builtins.cc: (TYPES_all_pred,
+ 	TYPES_all_count, TYPES_all_pred_count, TYPES_all_float,
+ 	TYPES_all_signed, TYPES_all_float_and_signed, TYPES_all_unsigned,
+ 	TYPES_all_integer, TYPES_all_arith, TYPES_all_data, TYPES_b, TYPES_c,
+ 	TYPES_b_unsigned, TYPES_b_integer, TYPES_b_data, TYPES_bh_integer,
+ 	TYPES_bs_unsigned, TYPES_bhs_signed, TYPES_bhs_unsigned,
+ 	TYPES_bhs_integer, TYPES_bh_data, TYPES_bhs_data, TYPES_bhs_widen,
+ 	TYPES_h_bfloat, TYPES_h_float, TYPES_h_integer, TYPES_h_data,
+ 	TYPES_hs_signed, TYPES_hs_integer, TYPES_hs_float, TYPES_hs_data,
+ 	TYPES_hd_unsigned, TYPES_hsd_signed, TYPES_hsd_integer, TYPES_hsd_data,
+ 	TYPES_h_float_mf8, TYPES_s_float, TYPES_s_float_mf8,
+ 	TYPES_s_float_hsd_integer, TYPES_s_float_sd_integer, TYPES_s_signed,
+ 	TYPES_s_unsigned, TYPES_s_integer, TYPES_s_data, TYPES_sd_signed,
+ 	TYPES_sd_unsigned, TYPES_sd_integer, TYPES_sd_data,
+ 	TYPES_all_float_and_sd_integer, TYPES_d_float, TYPES_d_unsigned,
+ 	TYPES_d_integer, TYPES_d_data, TYPES_cvt, TYPES_cvt_bfloat,
+ 	TYPES_cvt_h_s_float, TYPES_cvt_f32_f16, TYPES_cvt_long,
+ 	TYPES_cvt_narrow_s, TYPES_cvt_narrow, TYPES_cvt_s_s, TYPES_cvt_mf8,
+ 	TYPES_cvtn_mf8, TYPES_cvtnx_mf8, TYPES_inc_dec_n, TYPES_qcvt_x2,
+ 	TYPES_qcvt_x4, TYPES_qrshr_x2,TYPES_qrshru_x2, TYPES_qrshr_x4,
+ 	TYPES_qrshru_x4, TYPES_reinterpret, TYPES_reinterpret_b,TYPES_while,
+ 	TYPES_while_x, TYPES_while_x_c, TYPES_s_narrow_fsu,TYPES_all_za,
+ 	TYPES_d_za, TYPES_za_bhsd_data,TYPES_za_all_data, TYPES_za_h_mf8,
+ 	TYPES_za_hs_mf8, TYPES_za_h_bfloat, TYPES_za_h_float,
+ 	TYPES_za_s_b_signed, TYPES_za_s_b_unsigned, TYPES_za_s_b_integer,
+ 	TYPES_za_s_h_integer,TYPES_za_s_h_data, TYPES_za_s_unsigned,
+ 	TYPES_za_s_integer, TYPES_za_s_mf8, TYPES_za_s_float, TYPES_za_s_data,
+ 	TYPES_za_d_h_integer, TYPES_za_d_float, TYPES_za_d_integer,
+ 	TYPES_mop_base, TYPES_mop_base_signed, TYPES_mop_base_unsigned,
+ 	TYPES_mop_i16i64, TYPES_mop_i16i64_signed, TYPES_mop_i16i64_unsigned,
+ 	ΤYPES_za): Extend defines to three arguments.
+ 	(DEF_VECTOR_TYPE, DEF_DOUBLE_TYPE): Likewise.
+ 	(DEF_TRIPLE_TYPE): Add new define.
+ 	(DEF_SVE_TYPES_ARRAY): Redefine all types_ arrays into arrays of
+ 	type_suffix_triple.
+ 	(types_none): Likewise.
+ 	(function_instance::hash): Add third type to hash calculation.
+ 	(function_builder::get_name): Add third type to function name.
+ 	(function_builder::add_overloaded_functions): Handle third type.
+ 	(function_resolver::lookup_form): Likewise.
+ 	(function_resolver::resolve_to): Likewise.
+ 	(function_resolver::resolve_unary): Likewise.
+ 	* config/aarch64/aarch64-sve-builtins.h: (type_suffix_triple): replace
+ 	type_suffix_pair.
+ 	(function_group_info::types): Likewise.
+ 	(function_instance::ctor): Likewise.
+ 	(function_instance::type_suffix_ids): Likewise.
+ 	(function_resolver::lookup_form): Add third type argument.
+ 	(function_resolver::resolve_to): Likewise.
+ 	(function_instance::operator==): Add third type to equality calculation.
+ 
+ 2025-12-24  Karl Meakin  <karl.meakin@arm.com>
+ 
+ 	* config/aarch64/aarch64-sme.md
+ 	(@aarch64_sme_<optab><SME_ZA_F8F16_32:mode><SME_ZA_FP8_x24:mode>): New insn.
+ 	(@aarch64_fvdot_half<optab>): Likewise.
+ 	(@aarch64_fvdot_half<optab>_plus): Likewise.
+ 	* config/aarch64/aarch64-sve-builtins-functions.h
+ 	(class svvdot_half_impl): New function impl.
+ 	* config/aarch64/aarch64-sve-builtins-sme.cc (FUNCTION): Likewise.
+ 	* config/aarch64/aarch64-sve-builtins-shapes.cc (struct dot_half_za_slice_lane_def):
+ 	New function shape.
+ 	* config/aarch64/aarch64-sve-builtins-shapes.h: Likewise.
+ 	* config/aarch64/aarch64-sve-builtins-sme.def (svdot): New function.
+ 	(svdot_lane): Likewise.
+ 	(svvdot_lane): Likewise.
+ 	(svvdotb_lane): Likewise.
+ 	(svvdott_lane): Likewise.
+ 	* config/aarch64/aarch64-sve-builtins-sme.h (svvdotb_lane_za): New function.
+ 	(svvdott_lane_za): Likewise.
+ 	* config/aarch64/aarch64-sve-builtins.cc (TYPES_za_s_mf8): New types array.
+ 	(TYPES_za_hs_mf8): Likewise.
+ 	(za_hs_mf8): Likewise.
+ 	* config/aarch64/iterators.md (SME_ZA_F8F16): New mode iterator.
+ 	(SME_ZA_F8F32): Likewise.
+ 	(SME_ZA_FP8_x1): Likewise.
+ 	(SME_ZA_FP8_x2): Likewise.
+ 	(SME_ZA_FP8_x4): Likewise.
+ 	(UNSPEC_SME_FDOT_FP8): New unspec.
+ 	(UNSPEC_SME_FVDOT_FP8): Likewise.
+ 	(UNSPEC_SME_FVDOTT_FP8): Likewise.
+ 	(UNSPEC_SME_FVDOTB_FP8): Likewise.
+ 	(SME_FP8_DOTPROD): New int iterator.
+ 	(SME_FP8_FVDOT): Likewise.
+ 	(SME_FP8_FVDOT_HALF): Likewise.
+ 
+ 2025-12-24  Claudio Bantaloukas  <claudio.bantaloukas@arm.com>
+ 
+ 	* config/aarch64/aarch64-sme.md
+ 	(@aarch64_sme_<optab><SME_ZA_F8F16_32:mode><VNx16QI_ONLY:mode>): Add
+ 	new define_insn.
+ 	* config/aarch64/aarch64-sve-builtins-shapes.cc
+ 	(struct binary_za_m_base): Support fpm argument.
+ 	* config/aarch64/aarch64-sve-builtins-sme.cc (svmopa_za): Extend for
+ 	fp8.
+ 	* config/aarch64/aarch64-sve-builtins-sme.def (svmopa): Add new
+ 	DEF_SME_ZA_FUNCTION_GS_FPM entries.
+ 
+ 2025-12-24  Claudio Bantaloukas  <claudio.bantaloukas@arm.com>
+ 
+ 	* config/aarch64/aarch64-sme.md
+ 	(@aarch64_sme_<optab><SME_ZA_F8F16_32:mode><SME_ZA_FP8_x24:mode>): Add
+ 	new define_insn.
+ 	(*aarch64_sme_<optab><VNx8HI_ONLY:mode><SME_ZA_FP8_x24:mode>_plus,
+ 	*aarch64_sme_<optab><VNx4SI_ONLY:mode><SME_ZA_FP8_x24:mode>_plus,
+ 	@aarch64_sme_<optab><SME_ZA_F8F16_32:mode><VNx16QI_ONLY:mode>,
+ 	*aarch64_sme_<optab><VNx8HI_ONLY:mode><VNx16QI_ONLY:mode>_plus,
+ 	*aarch64_sme_<optab><VNx4SI_ONLY:mode><VNx16QI_ONLY:mode>_plus,
+ 	@aarch64_sme_single_<optab><SME_ZA_F8F16_32:mode><SME_ZA_FP8_x24:mode>,
+ 	*aarch64_sme_single_<optab><VNx8HI_ONLY:mode><SME_ZA_FP8_x24:mode>_plus,
+ 	*aarch64_sme_single_<optab><VNx4SI_ONLY:mode><SME_ZA_FP8_x24:mode>_plus,
+ 	@aarch64_sme_lane_<optab><SME_ZA_F8F16_32:mode><SME_ZA_FP8_x124:mode>,
+ 	*aarch64_sme_lane_<optab><VNx8HI_ONLY:mode><SME_ZA_FP8_x124:mode>,
+ 	*aarch64_sme_lane_<optab><VNx4SI_ONLY:mode><SME_ZA_FP8_x124:mode>):
+ 	Likewise.
+ 	* config/aarch64/aarch64-sve-builtins-shapes.cc
+ 	(struct binary_za_slice_lane_base): Support fpm argument.
+ 	(struct binary_za_slice_opt_single_base): Likewise.
+ 	* config/aarch64/aarch64-sve-builtins-sme.cc (svmla_za): Extend for fp8.
+ 	(svmla_lane_za): Likewise.
+ 	* config/aarch64/aarch64-sve-builtins-sme.def (svmla_lane): Add new
+ 	DEF_SME_ZA_FUNCTION_GS_FPM entries.
+ 	(svmla): Likewise.
+ 	* config/aarch64/iterators.md (SME_ZA_F8F16_32): Add new mode iterator.
+ 	(SME_ZA_FP8_x24, SME_ZA_FP8_x124): Likewise.
+ 	(UNSPEC_SME_FMLAL): Add new unspec.
+ 	(za16_offset_range): Add new mode_attr.
+ 	(za16_32_long): Likewise.
+ 	(za16_32_last_offset): Likewise.
+ 	(SME_FP8_TERNARY_SLICE): Add new iterator.
+ 	(optab): Add entry for UNSPEC_SME_FMLAL.
+ 
+ 2025-12-24  Claudio Bantaloukas  <claudio.bantaloukas@arm.com>
+ 
+ 	* config/aarch64/aarch64.h:
+ 	(TARGET_STREAMING_SME_F8F16, TARGET_STREAMING_SME_F8F32): Add defines.
+ 	* config/aarch64/aarch64-c.cc:
+ 	(__ARM_FEATURE_SME_F8F16, __ARM_FEATURE_SME_F8F32): Add defines.
+ 	* config/aarch64/aarch64-option-extensions.def:
+ 	(sme-f8f16, sme-f8f32): Add arch options in command line.
+ 	* config/aarch64/aarch64-sve-builtins-functions.h:
+ 	(sme_2mode_function_t): Pass unspec_for_mfp8 parameter through ctor.
+ 	* config/aarch64/aarch64-sve-builtins-sme.def:
+ 	(DEF_SME_FUNCTION_GS, DEF_SME_FUNCTION): Redefine based on
+ 	DEF_SME_FUNCTION_GS_FPM.
+ 	(DEF_SME_ZA_FUNCTION_GS, DEF_SME_ZA_FUNCTION): Redefine based on
+ 	DEF_SME_ZA_FUNCTION_GS_FPM.
+ 	(AARCH64_FL_SME_F8F16, AARCH64_FL_SME_F8F32): Add new
+ 	REQUIRED_EXTENSIONS sections.
+ 	* config/aarch64/aarch64-sve-builtins.cc:
+ 	(TYPES_za_h_mf8): Add new types.
+ 	(TYPES_za_s_mf8): Likewise.
+ 	(sme_function_groups): Define using DEF_SME_FUNCTION_GS_FPM instead of
+ 	DEF_SME_FUNCTION_GS.
+ 	* doc/invoke.texi: (sme-f8f16, sme-f8f32): Add documentation of option.
+ 
+ 2025-12-24  Claudio Bantaloukas  <claudio.bantaloukas@arm.com>
+ 
+ 	* config/aarch64/aarch64-sve-builtins-base.cc (svscale_impl): Added new
+ 	class for dealing with all svscale functions (including sve)
+ 	(svscale): updated FUNCTION macro call to make use of new class.
+ 	* config/aarch64/aarch64-sve-builtins-sve2.def: (svscale):
+ 	Added new DEF_SVE_FUNCTION_GS call to enable recognition of new variant.
+ 	* config/aarch64/aarch64-sve2.md (@aarch64_sve_fscale<mode>): Added
+ 	new define_insn. (@aarch64_sve_single_fscale<mode>): Likewise.
+ 	* config/aarch64/iterators.md: (SVE_Fx24_NOBF): Added new iterator,
+ 	similar to SVE_Fx24 but without brainfloat.
+ 	(SVE_Fx24): Updated to make use of SVE_Fx24_NOBF.
+ 	(SVSCALE_SINGLE_INTARG): Added new mode_attr.
+ 	(SVSCALE_INTARG): Likewise.
+ 
+ 2025-12-24  Claudio Bantaloukas  <claudio.bantaloukas@arm.com>
+ 
+ 	* config/aarch64/aarch64-sve-builtins-base.cc (svcvt_impl): Update to
+ 	handle fp8 cases.
+ 	* config/aarch64/aarch64-sve-builtins-sve2.def (svcvt, svcvtn): Added
+ 	DEF_SVE_FUNCTION_GS_FPM instances.
+ 	* config/aarch64/aarch64-sve2.md
+ 	(@aarch64_sve2_fp8_cvtn<mode>): Updated define_insn for additional case.
+ 	(@aarch64_sme2_fp8_cvt<mode>): Added new define_insn.
+ 	* config/aarch64/iterators.md (VNx16F_NARROW): Added new iterator to
+ 	handle narrowing SVE floating point operations.
+ 	(UNSPEC_FCVT): Added new unspec.
+ 
+ 2025-12-24  Claudio Bantaloukas  <claudio.bantaloukas@arm.com>
+ 
+ 	* config/aarch64/aarch64-sve-builtins-sve2.cc (svcvtl1, svcvtl2): Added
+ 	new FUNTIONs.
+ 	* config/aarch64/aarch64-sve-builtins-sve2.def
+ 	(svcvt1, svcvt2, svcvtl1, svcvtl2): Added new DEF_SVE_FUNCTION_GS_FPM.
+ 	* config/aarch64/aarch64-sve-builtins-sve2.h (svcvtl1, svcvtl2): Added
+ 	new function_base.
+ 	* config/aarch64/aarch64-sve-builtins.cc
+ 	(function_resolver::resolve_unary): use group_suffix_id when resolving
+ 	C overloads.
+ 	* config/aarch64/aarch64-sve2.md
+ 	(@aarch64_sve2_fp8_cvt_<fp8_cvt_uns_op><mode>): Added new define_insn.
+ 	* config/aarch64/aarch64.h (TARGET_SSME2_FP8): Added new define.
+ 	* config/aarch64/iterators.md
+ 	(UNSPEC_F1CVTL. UNSPEC_F2CVTL): Added new unspecs.
+ 	(FP8CVT_UNS): Extended int_iterator.
+ 	(fp8_cvt_uns_op): Likewise.
+ 
+ 2025-12-24  Claudio Bantaloukas  <claudio.bantaloukas@arm.com>
+ 
+ 	* config/aarch64/aarch64-sve-builtins.cc (TYPES_za_bhsd_data): Add
+ 	D (za8, mf8) combination to za_bhsd_data.
+ 
+ 2025-12-24  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	* ifcvt.cc (noce_process_if_block): Move noce_try_cond_zero_arith
+ 	last.
+ 
+ 2025-12-24  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR rtl-optimization/123276
+ 	* ifcvt.cc (noce_try_cond_zero_arith): Reject non-scalar integral modes.
+ 
+ 2025-12-23  Jeff Law  <jeffrey.law@oss.qualcomm.com>
+ 
+ 	PR target/123274
+ 	* config/riscv/riscv.md (usmul<mode>3): Add proper condition.
+ 
+ 2025-12-23  Jeff Law  <jeffrey.law@oss.qualcomm.com>
+ 
+ 	PR target/123278
+ 	* config/riscv/andes-45-series.md (andes_45_fpu_alu_s): Handle
+ 	BF/HF modes too.
+ 	(andes_45_fpu_mul_s, andes_45_fpu_mac_s): Likewise.
+ 
+ 2025-12-23  Milan Tripkovic  <Milan.Tripkovic@rt-rk.com>
+ 
+ 	* config/riscv/spacemit-x60.md (spacemit_x60_clmul): Adjust latency.
+ 
+ 2025-12-23  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	* config.gcc: Relax the check for LoongArch with_tune.
+ 
+ 2025-12-23  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR rtl-optimization/123267
+ 	* ifcvt.cc (noce_try_cond_zero_arith): Pass the original operands
+ 	of a instead of the stripped off values. The mode of the operand
+ 	which is being used.
+ 
+ 2025-12-23  Dhruv Chawla  <dhruvc@nvidia.com>
+ 
+ 	* auto-profile.cc (struct summary_info): New struct.
+ 	(summary_info::read): New function.
+ 	(summary_info::get_threshold_count): Likewise.
+ 	(function_instance::read_function_instance): Read
+ 	afdo_profile_info->sum_max directly from summary info.
+ 	(autofdo_source_profile::read): Set afdo_hot_bb_threshold from
+ 	param_hot_bb_count_ws_permille.
+ 	(read_profile): Call summary_info->read.
+ 	(end_auto_profile): Free afdo_summary_info.
+ 	* gcov-io.h (GCOV_TAG_AFDO_SUMMARY): New define.
+ 
+ 2025-12-23  Dhruv Chawla  <dhruvc@nvidia.com>
+ 
+ 	* auto-profile.cc (string_table::~string_table): Update to free
+ 	original_names_map_.
+ 	(string_table::original_names_map_): New member.
+ 	(string_table::clashing_names_map_): Likewise.
+ 	(string_table::get_original_name): New function.
+ 	(string_table::read): Figure out clashes while reading.
+ 	(autofdo_source_profile::offline_external_functions): Call
+ 	get_original_name.
+ 
+ 2025-12-23  Dhruv Chawla  <dhruvc@nvidia.com>
+ 
+ 	* auto-profile.cc (AUTO_PROFILE_VERSION): Bump to 3.
+ 	(class function_instance_descriptor): New class.
+ 	(get_normalized_path): New function.
+ 	(string_table::~string_table): Update to free filenames.
+ 	(string_table::vector_): Rename to ...
+ 	(string_table::symbol_names_): ... this.
+ 	(string_table::map_): Rename to ...
+ 	(string_table::symbol_name_map_): ... this.
+ 	(string_table::filenames_): New member.
+ 	(string_table::filename_map_): Likewise.
+ 	(string_table::symbol_to_filename_map_): Likewise.
+ 	(string_table::get_index): Update to lookup symbol_name_map_.
+ 	(string_table::get_name): Rename to ...
+ 	(string_table::get_symbol_name): ... this.
+ 	(string_table::add_name): Rename to ...
+ 	(string_table::add_symbol_name): ... this.
+ 	(string_table::get_filename): New function.
+ 	(string_table::get_filename_by_symbol): Likewise.
+ 	(string_table::get_filename_index): Likewise.
+ 	(string_table::add_filename): Likewise.
+ 	(string_table::read): Read file names from the GCOV profile.
+ 	(function_instance::offline): Call
+ 	get_function_instance_by_descriptor.
+ 	(string_table::get_cgraph_node): Call get_symbol_name and
+ 	symbol_name.
+ 	(function_instance::get_function_instance_by_decl): Likewise.
+ 	(function_instance::get_cgraph_node): Likewise.
+ 	(function_instance::merge): Likewise.
+ 	(match_with_target): Likewise.
+ 	(function_instance::match): Likewise.
+ 	(function_instance::dump): Likewise.
+ 	(function_instance::dump_inline_stack): Likewise.
+ 	(function_instance::find_icall_target_map): Likewise.
+ 	(autofdo_source_profile::offline_unrealized_inlines): Likewise.
+ 	(autofdo_source_profile::offline_external_functions): Likewise.
+ 	(function_instance::read_function_instance): Likewise.
+ 	(afdo_indirect_call):
+ 	Also call find_function_instance, add_function_instance and
+ 	remove_function_instance.
+ 	(autofdo_source_profile::read): Likewise.
+ 	(autofdo_source_profile::get_function_instance_by_decl): Call
+ 	find_function_instance.
+ 	(autofdo_source_profile::get_function_instance_by_name_index):
+ 	Rename to ...
+ 	(autofdo_source_profile::get_function_instance_by_descriptor):
+ 	... this.
+ 	(autofdo_source_profile::find_iter_for_function_instance): New
+ 	function.
+ 	(autofdo_source_profile::find_function_instance): Likewise.
+ 	(autofdo_source_profile::add_function_instance): Likewise.
+ 	(autofdo_source_profile::remove_function_instance): Likewise.
+ 
+ 2025-12-22  Kugan Vivekanandarajah  <kvivekananda@nvidia.com>
+ 
+ 	PR middle-end/123067
+ 	* tree-ssa-loop-im.cc(is_self_write): Check
+ 	load and store refer to same location.
+ 
+ 2025-12-22  Vineet Gupta  <vineetg@rivosinc.com>
+ 
+ 	* ifcvt.cc (get_base_reg): Handle subreg.
+ 
+ 2025-12-22  Vineet Gupta  <vineetg@rivosinc.com>
+ 	    Philipp Tomsich  <philipp.tomsich@vrull.eu>
+ 
+ 	PR target/122769
+ 	* ifcvt.cc (noce_try_cond_zero_arith): Use noce_emit_cmove.
+ 	Delete noce_emit_czero () no longer used.
+ 
+ 2025-12-22  Vineet Gupta  <vineetg@rivosinc.com>
+ 
+ 	* ifcvt.cc (noce_try_cond_zero_arith): Use expand_simple_binop
+ 	to re-expand the final pattern.
+ 
+ 2025-12-22  Vineet Gupta  <vineetg@rivosinc.com>
+ 
+ 	* ifcvt.cc (noce_try_cond_zero_arith): Refactor.
+ 
+ 2025-12-22  Vineet Gupta  <vineetg@rivosinc.com>
+ 
+ 	* ifcvt.cc (noce_bbs_ok_for_cond_zero_arith): Move logic out.
+ 	(noce_try_cond_zero_arith): Into here.
+ 
+ 2025-12-22  Jeff Law  <jlaw@ventanamicro.com>
+ 
+ 	* config/riscv/riscv.cc (riscv_expand_mult_with_const_int): Signal
+ 	when this creates a simple copy that may be optimized.
+ 	(riscv_legitimate_poly_move): Try to optimize away any copy created
+ 	by riscv_expand_mult_with_const_int.
+ 
+ 2025-12-22  Filip Kastl  <fkastl@suse.cz>
+ 
+ 	* doc/invoke.texi: Document
+ 	--param=memtag-instrument-mem-intrinsics
+ 
+ 2025-12-21  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	PR tree-optimization/123089
+ 	* tree-vect-loop.cc (vect_update_ivs_after_vectorizer_for_early_breaks):
+ 	Add conversion if required, Note that if we did truncate the original
+ 	scalar loop had an overflow here anyway.
+ 	(vect_get_max_nscalars_per_iter): Expose.
+ 	* tree-vect-stmts.cc (vect_compute_type_for_early_break_scalar_iv): New.
+ 	(vectorizable_early_exit): Find smallest type where we won't have UB in
+ 	the signed IV and store it.
+ 	* tree-vectorizer.h (LOOP_VINFO_EARLY_BRK_IV_TYPE): New.
+ 	(class _loop_vec_info): Add early_break_iv_type.
+ 	(vect_min_prec_for_max_niters): New.
+ 	* tree-vect-loop-manip.cc (vect_do_peeling): Use it.
+ 
  2025-12-20  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
  
  	PR middle-end/123222
diff -Nrcpad gcc-16-20251221/gcc/DATESTAMP gcc-16-20251228/gcc/DATESTAMP
*** gcc-16-20251221/gcc/DATESTAMP	Sun Dec 21 22:32:05 2025
--- gcc-16-20251228/gcc/DATESTAMP	Sun Dec 28 22:32:05 2025
***************
*** 1 ****
! 20251221
--- 1 ----
! 20251228
diff -Nrcpad gcc-16-20251221/gcc/ada/ChangeLog gcc-16-20251228/gcc/ada/ChangeLog
*** gcc-16-20251221/gcc/ada/ChangeLog	Sun Dec 21 22:32:05 2025
--- gcc-16-20251228/gcc/ada/ChangeLog	Sun Dec 28 22:32:05 2025
***************
*** 1,3 ****
--- 1,45 ----
+ 2025-12-27  Eric Botcazou  <ebotcazou@gcc.gnu.org>
+ 
+ 	PR ada/123306
+ 	* sem_ch12.adb (Analyze_One_Association): Immediately freeze the
+ 	root type of mutably tagged types used as actual type parameters.
+ 
+ 2025-12-26  Eric Botcazou  <ebotcazou@gcc.gnu.org>
+ 
+ 	PR ada/123088
+ 	* sem_aggr.adb (Resolve_Record_Aggregate): Add more robust guard.
+ 
+ 2025-12-26  Eric Botcazou  <ebotcazou@gcc.gnu.org>
+ 
+ 	PR ada/123302
+ 	* sem_ch12.adb (Save_Global_Reference.Save_References_In_Aggregate):
+ 	Recurse on the scope of the type to find one that is visible, in the
+ 	case of an actual in a subprogram call with a local type.
+ 
+ 2025-12-26  Eric Botcazou  <ebotcazou@gcc.gnu.org>
+ 
+ 	PR ada/123289
+ 	* sem_ch13.adb (Resolve_Aspect_Aggregate.Resolve_Operation): Give
+ 	an error if the operation's name denotes more than one subprogram.
+ 
+ 2025-12-22  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/123060
+ 	* gcc-interface/utils.cc (update_pointer_to): Streamline.
+ 
+ 2025-12-22  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/123060
+ 	* gcc-interface/utils.cc (update_pointer_to): Preserve the alias
+ 	sets present on the old pointer and old reference, if any.
+ 
+ 2025-12-22  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/123185
+ 	* sem_ch4.adb (Analyze_Overloaded_Selected_Component): Go to the
+ 	root when the prefix has a class-wide type.
+ 	* sem_res.adb (Resolve_Selected_Component): Likewise.
+ 
  2025-12-19  Jakub Jelinek  <jakub@redhat.com>
  
  	* sem_attr.adb (Set_Bounds): Fix comment typo, transfered
diff -Nrcpad gcc-16-20251221/gcc/ada/gcc-interface/utils.cc gcc-16-20251228/gcc/ada/gcc-interface/utils.cc
*** gcc-16-20251221/gcc/ada/gcc-interface/utils.cc	Sun Dec 21 22:32:05 2025
--- gcc-16-20251228/gcc/ada/gcc-interface/utils.cc	Sun Dec 28 22:32:06 2025
*************** update_pointer_to (tree old_type, tree n
*** 4680,4694 ****
  	  /* If there is no pointer pointing to NEW_TYPE yet, re-compute the
  	     TYPE_CANONICAL of the old pointer but pointing to NEW_TYPE, like
  	     build_pointer_type would have done for such a pointer, because we
! 	     will propagate it in the adjustment loop below.  */
  	  if (TYPE_STRUCTURAL_EQUALITY_P (new_type))
  	    SET_TYPE_STRUCTURAL_EQUALITY (old_ptr);
  	  else if (TYPE_CANONICAL (new_type) != new_type
  		   || (TYPE_REF_CAN_ALIAS_ALL (old_ptr)
  		       && !lookup_attribute ("may_alias",
  					     TYPE_ATTRIBUTES (new_type))))
! 	    TYPE_CANONICAL (old_ptr)
! 	      = build_pointer_type (TYPE_CANONICAL (new_type));
  	}
  
        /* Now adjust them.  */
--- 4680,4702 ----
  	  /* If there is no pointer pointing to NEW_TYPE yet, re-compute the
  	     TYPE_CANONICAL of the old pointer but pointing to NEW_TYPE, like
  	     build_pointer_type would have done for such a pointer, because we
! 	     will propagate it in the adjustment loop below.  But make sure to
! 	     preserve an alias set already present on the old pointer.  */
  	  if (TYPE_STRUCTURAL_EQUALITY_P (new_type))
  	    SET_TYPE_STRUCTURAL_EQUALITY (old_ptr);
  	  else if (TYPE_CANONICAL (new_type) != new_type
  		   || (TYPE_REF_CAN_ALIAS_ALL (old_ptr)
  		       && !lookup_attribute ("may_alias",
  					     TYPE_ATTRIBUTES (new_type))))
! 	    {
! 	      const alias_set_type set
! 		= TYPE_STRUCTURAL_EQUALITY_P (old_ptr)
! 		  ? TYPE_ALIAS_SET (old_ptr)
! 		  : TYPE_ALIAS_SET (TYPE_CANONICAL (old_ptr));
! 	      TYPE_CANONICAL (old_ptr)
! 		= build_pointer_type (TYPE_CANONICAL (new_type));
! 	      TYPE_ALIAS_SET (TYPE_CANONICAL (old_ptr)) = set;
! 	    }
  	}
  
        /* Now adjust them.  */
*************** update_pointer_to (tree old_type, tree n
*** 4716,4730 ****
  	  /* If there is no reference pointing to NEW_TYPE yet, re-compute the
  	     TYPE_CANONICAL of the old reference but pointing to NEW_TYPE, like
  	     build_reference_type would have done for such a reference, because
! 	     we will propagate it in the adjustment loop below.  */
  	  if (TYPE_STRUCTURAL_EQUALITY_P (new_type))
  	    SET_TYPE_STRUCTURAL_EQUALITY (old_ref);
  	  else if (TYPE_CANONICAL (new_type) != new_type
  		   || (TYPE_REF_CAN_ALIAS_ALL (old_ref)
  		       && !lookup_attribute ("may_alias",
  					     TYPE_ATTRIBUTES (new_type))))
! 	    TYPE_CANONICAL (old_ref)
! 	      = build_reference_type (TYPE_CANONICAL (new_type));
  	}
  
        /* Now adjust them.  */
--- 4724,4746 ----
  	  /* If there is no reference pointing to NEW_TYPE yet, re-compute the
  	     TYPE_CANONICAL of the old reference but pointing to NEW_TYPE, like
  	     build_reference_type would have done for such a reference, because
! 	     we will propagate it in the adjustment loop below.  But make sure
! 	     to preserve an alias set already present on the old reference.  */
  	  if (TYPE_STRUCTURAL_EQUALITY_P (new_type))
  	    SET_TYPE_STRUCTURAL_EQUALITY (old_ref);
  	  else if (TYPE_CANONICAL (new_type) != new_type
  		   || (TYPE_REF_CAN_ALIAS_ALL (old_ref)
  		       && !lookup_attribute ("may_alias",
  					     TYPE_ATTRIBUTES (new_type))))
! 	    {
! 	      const alias_set_type set
! 		= TYPE_STRUCTURAL_EQUALITY_P (old_ref)
! 		  ? TYPE_ALIAS_SET (old_ref)
! 		  : TYPE_ALIAS_SET (TYPE_CANONICAL (old_ref));
! 	      TYPE_CANONICAL (old_ref)
! 		= build_reference_type (TYPE_CANONICAL (new_type));
! 	      TYPE_ALIAS_SET (TYPE_CANONICAL (old_ref)) = set;
! 	    }
  	}
  
        /* Now adjust them.  */
diff -Nrcpad gcc-16-20251221/gcc/ada/sem_aggr.adb gcc-16-20251228/gcc/ada/sem_aggr.adb
*** gcc-16-20251221/gcc/ada/sem_aggr.adb	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/ada/sem_aggr.adb	Sun Dec 28 22:32:06 2025
*************** package body Sem_Aggr is
*** 6645,6654 ****
  
           --  Typ is not a derived tagged type
  
!          else
              Record_Def := Type_Definition (Parent (Base_Type (Typ)));
  
!             if No (Record_Def) or else Null_Present (Record_Def) then
                 null;
  
              --  Explicitly add here mutably class-wide types because they do
--- 6645,6654 ----
  
           --  Typ is not a derived tagged type
  
!          elsif Nkind (Parent (Base_Type (Typ))) = N_Full_Type_Declaration then
              Record_Def := Type_Definition (Parent (Base_Type (Typ)));
  
!             if Null_Present (Record_Def) then
                 null;
  
              --  Explicitly add here mutably class-wide types because they do
diff -Nrcpad gcc-16-20251221/gcc/ada/sem_ch12.adb gcc-16-20251228/gcc/ada/sem_ch12.adb
*** gcc-16-20251221/gcc/ada/sem_ch12.adb	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/ada/sem_ch12.adb	Sun Dec 28 22:32:06 2025
*************** package body Sem_Ch12 is
*** 2657,2665 ****
--- 2657,2676 ----
                 if Ekind (Etype (Match)) /= E_Void
                   and then Is_Mutably_Tagged_Type (Etype (Match))
                 then
+                   --  The declaration of the CW-equivalent type of a mutably
+                   --  tagged type is analyzed when the tagged type is frozen.
+ 
+                   if Nkind (N) /= N_Formal_Package_Declaration
+                     and then Ekind (Defining_Identifier (Assoc.An_Formal)) /=
+                                                               E_Incomplete_Type
+                   then
+                      Freeze_Before (N, Root_Type (Etype (Match)));
+                   end if;
+ 
                    Rewrite (Match, New_Occurrence_Of
                      (Class_Wide_Equivalent_Type
                        (Etype (Match)), Sloc (Match)));
+ 
                    Analyze (Match);
                 end if;
  
*************** package body Sem_Ch12 is
*** 18064,18070 ****
           ----------------------------------
  
           procedure Save_References_In_Aggregate (N : Node_Id) is
-             Nam   : Node_Id;
              Qual  : Node_Id   := Empty;
              Typ   : Entity_Id := Empty;
  
--- 18075,18080 ----
*************** package body Sem_Ch12 is
*** 18120,18135 ****
                    end;
                 end if;
  
!                --  If the aggregate is an actual in a call, it has been
!                --  resolved in the current context, to some local type. The
                 --  enclosing call may have been disambiguated by the aggregate,
                 --  and this disambiguation might fail at instantiation time
                 --  because the type to which the aggregate did resolve is not
                 --  preserved. In order to preserve some of this information,
                 --  wrap the aggregate in a qualified expression, using the id
                 --  of its type. For further disambiguation we qualify the type
!                --  name with its scope (if visible and not hidden by a local
!                --  homograph) because both id's will have corresponding
                 --  entities in an instance. This resolves most of the problems
                 --  with missing type information on aggregates in instances.
  
--- 18130,18145 ----
                    end;
                 end if;
  
!                --  If the aggregate is an actual in a subprogram call, it has
!                --  been resolved in the current context to some local type. The
                 --  enclosing call may have been disambiguated by the aggregate,
                 --  and this disambiguation might fail at instantiation time
                 --  because the type to which the aggregate did resolve is not
                 --  preserved. In order to preserve some of this information,
                 --  wrap the aggregate in a qualified expression, using the id
                 --  of its type. For further disambiguation we qualify the type
!                --  name with its scope recursively (if visible and not hidden
!                --  by a local homograph) because both will have corresponding
                 --  entities in an instance. This resolves most of the problems
                 --  with missing type information on aggregates in instances.
  
*************** package body Sem_Ch12 is
*** 18139,18162 ****
                   and then Present (Typ)
                   and then Comes_From_Source (Typ)
                 then
!                   Nam := Make_Identifier (Loc, Chars (Typ));
  
!                   if Is_Immediately_Visible (Scope (Typ))
!                     and then
!                       (not In_Open_Scopes (Scope (Typ))
!                          or else Current_Entity (Scope (Typ)) = Scope (Typ))
!                   then
!                      Nam :=
!                        Make_Selected_Component (Loc,
!                          Prefix        =>
!                            Make_Identifier (Loc, Chars (Scope (Typ))),
!                          Selector_Name => Nam);
!                   end if;
  
!                   Qual :=
!                     Make_Qualified_Expression (Loc,
!                       Subtype_Mark => Nam,
!                       Expression   => Relocate_Node (N));
                 end if;
  
              --  For a full aggregate, if the type is global and a derived
--- 18149,18188 ----
                   and then Present (Typ)
                   and then Comes_From_Source (Typ)
                 then
!                   declare
!                      function Qualify_Name (S, E : Entity_Id) return Node_Id is
!                        (if E = S
!                         then Make_Identifier (Loc, Chars (E))
!                         else Make_Selected_Component (Loc,
!                                Prefix        => Qualify_Name (S, Scope (E)),
!                                Selector_Name =>
!                                  Make_Identifier (Loc, Chars (E))));
!                      --  Return the qualified name of E up to scope S
  
!                      Nam : Node_Id;
!                      S   : Entity_Id;
  
!                   begin
!                      S := Scope (Typ);
!                      while not Is_Immediately_Visible (S) loop
!                         S := Scope (S);
!                         exit when Is_Generic_Unit (S);
!                      end loop;
! 
!                      if not Is_Generic_Unit (S)
!                        and then (not In_Open_Scopes (S)
!                                   or else Current_Entity (S) = S)
!                      then
!                         Nam := Qualify_Name (S, Typ);
!                      else
!                         Nam := Make_Identifier (Loc, Chars (Typ));
!                      end if;
! 
!                      Qual :=
!                        Make_Qualified_Expression (Loc,
!                          Subtype_Mark => Nam,
!                          Expression   => Relocate_Node (N));
!                   end;
                 end if;
  
              --  For a full aggregate, if the type is global and a derived
diff -Nrcpad gcc-16-20251221/gcc/ada/sem_ch13.adb gcc-16-20251228/gcc/ada/sem_ch13.adb
*** gcc-16-20251221/gcc/ada/sem_ch13.adb	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/ada/sem_ch13.adb	Sun Dec 28 22:32:06 2025
*************** package body Sem_Ch13 is
*** 18234,18248 ****
        -----------------------
  
        procedure Resolve_Operation (Subp_Id : Node_Id) is
-          Subp : Entity_Id;
- 
           I  : Interp_Index;
           It : Interp;
  
        begin
           if not Is_Overloaded (Subp_Id) then
!             Subp := Entity (Subp_Id);
!             if not Pred (Subp) then
                 Error_Msg_NE
                   ("improper aggregate operation for&", Subp_Id, Typ);
              end if;
--- 18234,18245 ----
        -----------------------
  
        procedure Resolve_Operation (Subp_Id : Node_Id) is
           I  : Interp_Index;
           It : Interp;
  
        begin
           if not Is_Overloaded (Subp_Id) then
!             if not Pred (Entity (Subp_Id)) then
                 Error_Msg_NE
                   ("improper aggregate operation for&", Subp_Id, Typ);
              end if;
*************** package body Sem_Ch13 is
*** 18252,18260 ****
              Get_First_Interp (Subp_Id, I, It);
              while Present (It.Nam) loop
                 if Pred (It.Nam) then
                    Set_Is_Overloaded (Subp_Id, False);
                    Set_Entity (Subp_Id, It.Nam);
-                   exit;
                 end if;
  
                 Get_Next_Interp (I, It);
--- 18249,18269 ----
              Get_First_Interp (Subp_Id, I, It);
              while Present (It.Nam) loop
                 if Pred (It.Nam) then
+                   if Present (Entity (Subp_Id)) then
+                      --  ??? Cope with the obsolete renaming of Append_Vector
+                      --  in Ada.Containers.Vectors retained for compatibility.
+ 
+                      if No (Alias (Entity (Subp_Id)))
+                        and then No (Alias (It.Nam))
+                      then
+                         Error_Msg_N
+                           ("& must denote exactly one subprogram", Subp_Id);
+                      end if;
+ 
+                      exit;
+                   end if;
                    Set_Is_Overloaded (Subp_Id, False);
                    Set_Entity (Subp_Id, It.Nam);
                 end if;
  
                 Get_Next_Interp (I, It);
diff -Nrcpad gcc-16-20251221/gcc/ada/sem_ch4.adb gcc-16-20251228/gcc/ada/sem_ch4.adb
*** gcc-16-20251221/gcc/ada/sem_ch4.adb	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/ada/sem_ch4.adb	Sun Dec 28 22:32:06 2025
*************** package body Sem_Ch4 is
*** 4479,4494 ****
              T := It.Typ;
           end if;
  
!          --  Locate the component. For a private prefix the selector can denote
!          --  a discriminant.
  
           if Is_Record_Type (T) or else Is_Private_Type (T) then
  
!             --  If the prefix is a class-wide type, the visible components are
!             --  those of the base type.
  
              if Is_Class_Wide_Type (T) then
!                T := Etype (T);
              end if;
  
              Comp := First_Entity (T);
--- 4479,4494 ----
              T := It.Typ;
           end if;
  
!          --  Find the selected component. For a private prefix, the selector
!          --  can denote a discriminant.
  
           if Is_Record_Type (T) or else Is_Private_Type (T) then
  
!             --  If the prefix has a class-wide type, the visible components are
!             --  those of the root type.
  
              if Is_Class_Wide_Type (T) then
!                T := Root_Type (T);
              end if;
  
              Comp := First_Entity (T);
diff -Nrcpad gcc-16-20251221/gcc/ada/sem_res.adb gcc-16-20251228/gcc/ada/sem_res.adb
*** gcc-16-20251221/gcc/ada/sem_res.adb	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/ada/sem_res.adb	Sun Dec 28 22:32:06 2025
*************** package body Sem_Res is
*** 11454,11469 ****
                 T := It.Typ;
              end if;
  
!             --  Locate selected component. For a private prefix the selector
              --  can denote a discriminant.
  
              if Is_Record_Type (T) or else Is_Private_Type (T) then
  
!                --  The visible components of a class-wide type are those of
!                --  the root type.
  
                 if Is_Class_Wide_Type (T) then
!                   T := Etype (T);
                 end if;
  
                 Comp := First_Entity (T);
--- 11454,11469 ----
                 T := It.Typ;
              end if;
  
!             --  Find the selected component. For a private prefix, the selector
              --  can denote a discriminant.
  
              if Is_Record_Type (T) or else Is_Private_Type (T) then
  
!                --  If the prefix has a class-wide type, the visible components
!                --  are those of the root type.
  
                 if Is_Class_Wide_Type (T) then
!                   T := Root_Type (T);
                 end if;
  
                 Comp := First_Entity (T);
diff -Nrcpad gcc-16-20251221/gcc/algol68/ChangeLog gcc-16-20251228/gcc/algol68/ChangeLog
*** gcc-16-20251221/gcc/algol68/ChangeLog	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/algol68/ChangeLog	Sun Dec 28 22:32:06 2025
***************
*** 1,3 ****
--- 1,125 ----
+ 2025-12-27  Jose E. Marchesi  <jose.marchesi@oracle.com>
+ 
+ 	* a68-parser-taxes.cc (tax_module_dec): Do not handle
+ 	DEFINING_MODULE_INDICANT.
+ 	* a68-exports.cc (a68_add_module_to_moif): Do not mangle module
+ 	names in module extracts.
+ 	(add_pub_revelations_to_moif): New function.
+ 	(a68_do_exports): Simplify and call add_pub_revelations_to_moif.
+ 	* a68-imports.cc (a68_decode_moifs): Add all decoded moifs to the
+ 	global list TOP_MOIF.
+ 	* a68-parser-extract.cc (extract_revelation): Recurse to import
+ 	extracts from publicized modules.
+ 	(a68_extract_indicants): Do not add symbol table entries for
+ 	defining modules.
+ 	* a68-types.h (struct TAG_T): Remove field EXPORTED.
+ 	(EXPORTED): Remove macro.
+ 	(TOP_MOIF): Define.
+ 	* a68-parser.cc (a68_parser): Initialize global list of moifs.
+ 	(a68_new_tag): Do not initialize EXPORTED.
+ 
+ 2025-12-27  Jose E. Marchesi  <jose.marchesi@oracle.com>
+ 
+ 	* a68-parser-top-down.cc (a68_top_down_parser): Stop parsing after
+ 	longjump.
+ 
+ 2025-12-27  Jose E. Marchesi  <jose.marchesi@oracle.com>
+ 
+ 	* a68-parser-bottom-up.cc (a68_bottom_up_error_check): Do not
+ 	check for the absence of public-symbols.
+ 	(a68_bottom_up_coalesce_pub): Removed function.
+ 	* a68-parser.cc (a68_parser): Do not call
+ 	a68_bottom_up_coalesce_pub
+ 	* a68-parser-extract.cc (a68_extract_indicants): Adapt to the
+ 	presence of public-symbols.
+ 	* a68-parser-modes.cc (get_mode_from_proc_variables): Likewise.
+ 	* a68-parser-taxes.cc (tax_variable_dec): Likewise.
+ 	(tax_proc_variable_dec): Likewise.
+ 	(tax_op_dec): Likewise
+ 	(tax_prio_dec): Likewise.
+ 	* a68-low-decls.cc (a68_lower_mode_declaration): Adapt to the
+ 	presence of public-symbols.
+ 	(a68_lower_variable_declaration): Likewise.
+ 	(a68_lower_identity_declaration): Likewise.
+ 	(a68_lower_procedure_declaration): Likewise.
+ 	(a68_lower_procedure_variable_declaration): Likewise.
+ 	(a68_lower_brief_operator_declaration): Likewise.
+ 	(a68_lower_operator_declaration): Likewise.
+ 
+ 2025-12-27  Jose E. Marchesi  <jose.marchesi@oracle.com>
+ 
+ 	* a68-moids-misc.cc (a68_pack_soids_in_moid): Return the result of
+ 	a68_register_extra_mode.
+ 
+ 2025-12-27  Jose E. Marchesi  <jose.marchesi@oracle.com>
+ 
+ 	* a68-parser-extract.cc (a68_extract_indicants): Do not
+ 	detect_redefined_keyword for accessed modules.
+ 
+ 2025-12-27  Jose E. Marchesi  <jose.marchesi@oracle.com>
+ 
+ 	* a68-parser-scope.cc (scope_access_clause): New function.
+ 	(scope_enclosed_clause): Use scope_access_clause.
+ 
+ 2025-12-27  Jose E. Marchesi  <jose.marchesi@oracle.com>
+ 
+ 	* a68-parser-bottom-up.cc (reduce_enclosed_clauses): Reduce joined
+ 	list of revelations.
+ 	* a68-low-clauses.cc (a68_lower_revelation_ludes): New function.
+ 	(a68_lower_access_clause): Use a68_lower_revelation_ludes.
+ 
+ 2025-12-27  Jose E. Marchesi  <jose.marchesi@oracle.com>
+ 
+ 	* a68-parser-extract.cc (a68_extract_indicants): Fix
+ 	MODE_DECLARATION to MODULE_DECLARATION typo.
+ 
+ 2025-12-27  Jose E. Marchesi  <jose.marchesi@oracle.com>
+ 
+ 	* a68-parser-top-down.cc (top_down_access): An access clause may
+ 	be nested in another access clause.
+ 	* a68-parser-extract.cc (a68_extract_indicants): Coalesce 'pub'
+ 	symbols.
+ 	(a68_extract_indicants): Nested access are not allowed in module
+ 	texts.
+ 	* a68-parser-bottom-up.cc (expected_module_text): New function.
+ 	(reduce_prelude_packet): Use expected_module_text.
+ 	(a68_bottom_up_error_check): Add comment.
+ 
+ 2025-12-27  Jose E. Marchesi  <jose.marchesi@oracle.com>
+ 
+ 	* a68-types.h (struct MOIF_T): Add chain_next to GTY info.
+ 	* a68-imports.cc (a68_decode_modes): Mode offsets are relative to
+ 	the start of the moif, not the start of the exports.
+ 	(a68_decode_moifs): Renamed from a68_decode_moif and changed to
+ 	decode multiple moifs from the exports.
+ 	(a68_open_packet): Call a68_decode_moifs and look for the right
+ 	moif.
+ 	* a68-exports.cc (a68_moif_new): Initialize NEXT (moif).
+ 
+ 2025-12-23  Mohammad-Reza Nabipoor  <mnabipoor@gnu.org>
+ 
+ 	* a68.h (a68_file_size): Changed to use file descriptor.
+ 	(a68_file_read): Likewise.
+ 	* a68-parser-scanner.cc (a68_file_size): Likewise.
+ 	(a68_file_read): Likewise.
+ 	(read_source_file): Adapt `a68_file_{size,read}'.
+ 	(include_files): Likewise.
+ 	* a68-lang.cc (a68_handle_option): Likewise.
+ 	* a68-imports.cc (a68_find_export_data): Implement
+ 	reading from module's .m68 file if available.
+ 
+ 2025-12-22  Jose E. Marchesi  <jose.marchesi@oracle.com>
+ 
+ 	* a68-imports.cc (PARSE_INDICANT): Fix handling of uderscore
+ 	characters.
+ 
+ 2025-12-22  Mohammad-Reza Nabipoor  <mnabipoor@gnu.org>
+ 
+ 	* a68-parser-scanner.cc (a68_file_size): Fix comment to mention
+ 	it accepts `FILE *' and not file descriptor.
+ 	Fix invocation of `lseek' to correctly revert position of file
+ 	offset to previous one.
+ 
  2025-12-20  Jose E. Marchesi  <jose.marchesi@oracle.com>
  
  	* a68-low-moids.cc (a68_lower_moids): Fix for layout of
diff -Nrcpad gcc-16-20251221/gcc/algol68/a68-exports.cc gcc-16-20251228/gcc/algol68/a68-exports.cc
*** gcc-16-20251221/gcc/algol68/a68-exports.cc	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/algol68/a68-exports.cc	Sun Dec 28 22:32:06 2025
*************** a68_moif_new (const char *module_name)
*** 59,64 ****
--- 59,65 ----
    NAME (moif) = (module_name == NULL ? NULL : ggc_strdup (module_name));
    PRELUDE (moif) = NULL;
    POSTLUDE (moif) = NULL;
+   NEXT (moif) = NO_MOIF;
    vec_alloc (MODES (moif), 16);
    vec_alloc (MODULES (moif), 16);
    vec_alloc (IDENTIFIERS (moif), 16);
*************** static void
*** 130,139 ****
  a68_add_module_to_moif (MOIF_T *moif, TAG_T *tag)
  {
    EXTRACT_T *e = ggc_alloc<EXTRACT_T> ();
!   /* Module tags are not associated with declarations, so we have to do the
!      mangling here.  */
!   tree id = a68_get_mangled_indicant (NSYMBOL (NODE (tag)), NAME (moif));
!   const char *tag_symbol = IDENTIFIER_POINTER (id);
  
    EXTRACT_KIND (e) = GA68_EXTRACT_MODU;
    EXTRACT_SYMBOL (e) = ggc_strdup (tag_symbol);
--- 131,137 ----
  a68_add_module_to_moif (MOIF_T *moif, TAG_T *tag)
  {
    EXTRACT_T *e = ggc_alloc<EXTRACT_T> ();
!   const char *tag_symbol = NSYMBOL (NODE (tag));
  
    EXTRACT_KIND (e) = GA68_EXTRACT_MODU;
    EXTRACT_SYMBOL (e) = ggc_strdup (tag_symbol);
*************** a68_asm_output_moif (MOIF_T *moif)
*** 524,529 ****
--- 522,547 ----
      }
  }
  
+ /* Add module exports for publicized module revelations.  */
+ 
+ static void
+ add_pub_revelations_to_moif (MOIF_T *moif, NODE_T *p)
+ {
+   for (; p != NO_NODE; FORWARD (p))
+     {
+       if (IS (p, PUBLIC_SYMBOL))
+ 	{
+ 	  gcc_assert (IS (NEXT (p), MODULE_INDICANT));
+ 	  TAG_T *tag = a68_new_tag ();
+ 	  NODE (tag) = NEXT (p);
+ 	  a68_add_module_to_moif (moif, tag);
+ 	  FORWARD (p);
+ 	}
+       else
+ 	add_pub_revelations_to_moif (moif, SUB (p));
+     }
+ }
+ 
  /* Emit export information for the module definition in the parse tree P.  */
  
  void
*************** a68_do_exports (NODE_T *p)
*** 533,597 ****
      {
        if (IS (p, DEFINING_MODULE_INDICANT))
  	{
! 	  // XXX only do this if the defining module is to be
! 	  // exported. Accessed modules without PUB are not exported.  */
! 	  TAG_T *tag = a68_find_tag_global (TABLE (p), MODULE_SYMBOL, NSYMBOL (p));
! 	  gcc_assert (tag != NO_TAG);
! 
! 	  if (EXPORTED (tag))
! 	    {
! 	      tree module_id = a68_get_mangled_indicant (NSYMBOL (p));
! 	      MOIF_T *moif = a68_moif_new (IDENTIFIER_POINTER (module_id));
! 	      char *prelude = xasprintf ("%s__prelude", IDENTIFIER_POINTER (module_id));
! 	      char *postlude = xasprintf ("%s__postlude", IDENTIFIER_POINTER (module_id));
! 	      PRELUDE (moif) = ggc_strdup (prelude);
! 	      POSTLUDE (moif) = ggc_strdup (postlude);
! 	      free (prelude);
! 	      free (postlude);
  
! 	      NODE_T *module_text = NEXT (NEXT (p));
! 	      gcc_assert (IS (module_text, MODULE_TEXT));
! 	      NODE_T *def_part = (IS (SUB (module_text), REVELATION_PART)
! 				  ? NEXT_SUB (module_text)
! 				  : SUB (module_text));
! 	      gcc_assert (IS (def_part, DEF_PART));
! 	      TABLE_T *table = TABLE (SUB (def_part));
! 	      gcc_assert (PUBLIC_RANGE (table));
  
! 	      for (TAG_T *t = MODULES (table); t != NO_TAG; FORWARD (t))
! 		{
! 		  if (PUBLICIZED (t))
! 		    a68_add_module_to_moif (moif, t);
! 		}
  
! 	      for (TAG_T *t = INDICANTS (table); t != NO_TAG; FORWARD (t))
! 		{
! 		  if (PUBLICIZED (t))
! 		    a68_add_indicant_to_moif (moif, t);
! 		}
  
! 	      for (TAG_T *t = IDENTIFIERS (table); t != NO_TAG; FORWARD (t))
! 		{
! 		  if (PUBLICIZED (t))
! 		    a68_add_identifier_to_moif (moif, t);
! 		}
  
! 	      for (TAG_T *t = PRIO (table); t != NO_TAG; FORWARD (t))
! 		{
! 		  if (PUBLICIZED (t))
! 		    a68_add_prio_to_moif (moif, t);
! 		}
  
! 	      for (TAG_T *t = OPERATORS (table); t != NO_TAG; FORWARD (t))
! 		{
! 		  if (PUBLICIZED (t))
! 		    a68_add_operator_to_moif (moif, t);
! 		}
  
! 	      a68_asm_output_moif (moif);
! 	      if (flag_a68_dump_moif)
! 		a68_dump_moif (moif);
  	    }
  	}
        else
  	a68_do_exports (SUB (p));
--- 551,609 ----
      {
        if (IS (p, DEFINING_MODULE_INDICANT))
  	{
! 	  tree module_id = a68_get_mangled_indicant (NSYMBOL (p));
! 	  MOIF_T *moif = a68_moif_new (IDENTIFIER_POINTER (module_id));
! 	  char *prelude = xasprintf ("%s__prelude", IDENTIFIER_POINTER (module_id));
! 	  char *postlude = xasprintf ("%s__postlude", IDENTIFIER_POINTER (module_id));
! 	  PRELUDE (moif) = ggc_strdup (prelude);
! 	  POSTLUDE (moif) = ggc_strdup (postlude);
! 	  free (prelude);
! 	  free (postlude);
  
! 	  NODE_T *module_text = NEXT (NEXT (p));
! 	  gcc_assert (IS (module_text, MODULE_TEXT));
  
! 	  /* Get modules exports from the revelation part.  */
! 	  if (IS (SUB (module_text), REVELATION_PART))
! 	    {
! 	      NODE_T *revelation_part = SUB (module_text);
! 	      add_pub_revelations_to_moif (moif, SUB (revelation_part));
! 	    }
  
! 	  NODE_T *def_part = (IS (SUB (module_text), REVELATION_PART)
! 			      ? NEXT_SUB (module_text)
! 			      : SUB (module_text));
! 	  gcc_assert (IS (def_part, DEF_PART));
! 	  TABLE_T *table = TABLE (SUB (def_part));
! 	  gcc_assert (PUBLIC_RANGE (table));
  
! 	  for (TAG_T *t = INDICANTS (table); t != NO_TAG; FORWARD (t))
! 	    {
! 	      if (PUBLICIZED (t))
! 		a68_add_indicant_to_moif (moif, t);
! 	    }
  
! 	  for (TAG_T *t = IDENTIFIERS (table); t != NO_TAG; FORWARD (t))
! 	    {
! 	      if (PUBLICIZED (t))
! 		a68_add_identifier_to_moif (moif, t);
! 	    }
  
! 	  for (TAG_T *t = PRIO (table); t != NO_TAG; FORWARD (t))
! 	    {
! 	      if (PUBLICIZED (t))
! 		a68_add_prio_to_moif (moif, t);
! 	    }
  
! 	  for (TAG_T *t = OPERATORS (table); t != NO_TAG; FORWARD (t))
! 	    {
! 	      if (PUBLICIZED (t))
! 		a68_add_operator_to_moif (moif, t);
  	    }
+ 
+ 	  a68_asm_output_moif (moif);
+ 	  if (flag_a68_dump_moif)
+ 	    a68_dump_moif (moif);
  	}
        else
  	a68_do_exports (SUB (p));
diff -Nrcpad gcc-16-20251221/gcc/algol68/a68-imports.cc gcc-16-20251228/gcc/algol68/a68-imports.cc
*** gcc-16-20251221/gcc/algol68/a68-imports.cc	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/algol68/a68-imports.cc	Sun Dec 28 22:32:06 2025
***************
*** 69,75 ****
  	  (W)[i++] = *((P)++);						\
  	  while (ISALPHA (*(P)) || ISDIGIT(*(P)) || (*(P)) == '_')	\
  	    {								\
! 	      if ((*(P)) != '_')					\
  		(W)[i++] = *((P)++);					\
  	    }								\
  	}								\
--- 69,77 ----
  	  (W)[i++] = *((P)++);						\
  	  while (ISALPHA (*(P)) || ISDIGIT(*(P)) || (*(P)) == '_')	\
  	    {								\
! 	      if ((*(P)) == '_')					\
! 		(P)++;							\
! 	      else							\
  		(W)[i++] = *((P)++);					\
  	    }								\
  	}								\
*************** a68_find_export_data (const std::string
*** 269,283 ****
      }
  
    char buf[A68_EXPORT_MAGIC_LEN];
!   ssize_t c = ::read(fd, buf, A68_EXPORT_MAGIC_LEN);
    if (c < A68_EXPORT_MAGIC_LEN)
      return NULL;
  
    /* Check for a file containing nothing but Algol 68 export data.  */
!   if (buf[0] == '\x0a' && buf[1] == '\xad')
      {
!       /* XXX read whole file.  */
!       return exports;
      }
  
  #if 0
--- 271,327 ----
      }
  
    char buf[A68_EXPORT_MAGIC_LEN];
!   ssize_t c = read (fd, buf, A68_EXPORT_MAGIC_LEN);
    if (c < A68_EXPORT_MAGIC_LEN)
      return NULL;
  
+   if (lseek (fd, 0, SEEK_SET) < 0)
+     {
+       a68_error (NO_NODE, "lseek Z failed", filename.c_str ());
+       return NULL;
+     }
+ 
    /* Check for a file containing nothing but Algol 68 export data.  */
!   if (buf[0] == '\x0a' && buf[1] == '\x68')
      {
!       /* read whole file.  */
! 
!       char *buf;
!       ssize_t len, nread;
! 
!       len = a68_file_size (fd);
!       if (len == -1)
!         {
!           a68_error (NO_NODE, "a68_file_size failed for Z",
!                      filename.c_str ());
!           return NULL;
!         }
! 
!       buf = XNEWVEC (char, len);
!       if (buf == NULL)
!         {
!           a68_error (NO_NODE,
!                      "memory allocation failed while reading export data");
!           return NULL;
!         }
! 
!       nread = a68_file_read (fd, buf, len);
!       if (nread < 0)
!         {
!           free (buf);
!           a68_error (NO_NODE, "read failed while reading export data");
!           return NULL;
!         }
! 
!       if (nread < len)
!         {
!           free (buf);
!           a68_error (NO_NODE, "short read while reading export data");
!           return NULL;
!         }
! 
!       *psize = len;
!       return buf;
      }
  
  #if 0
*************** a68_find_export_data (const std::string
*** 287,293 ****
  #endif
  
    return NULL;
- 
  }
  
  /* Given *PFILENAME, where *PFILENAME does not exist, try various suffixes.  If
--- 331,336 ----
*************** a68_replace_equivalent_mode (vec<MOID_T*
*** 914,920 ****
  
  static bool
  a68_decode_modes (MOIF_T *moif, encoded_modes_map_t &encoded_modes,
! 		  const char *data, size_t size, size_t pos,
  		  size_t *ppos, const char **errstr)
  {
    bool siga;
--- 957,963 ----
  
  static bool
  a68_decode_modes (MOIF_T *moif, encoded_modes_map_t &encoded_modes,
! 		  const char *data, size_t size, size_t pos, size_t moif_pos,
  		  size_t *ppos, const char **errstr)
  {
    bool siga;
*************** a68_decode_modes (MOIF_T *moif, encoded_
*** 931,937 ****
        int8_t sizety;
        uint8_t ndims, nmodes, nargs;
        uint16_t nfields;
!       uint64_t mode_offset = pos;
        uint64_t sub, ret_mode_offset;
        struct encoded_mode *encoded_mode;
  
--- 974,980 ----
        int8_t sizety;
        uint8_t ndims, nmodes, nargs;
        uint16_t nfields;
!       uint64_t mode_offset = pos - moif_pos;
        uint64_t sub, ret_mode_offset;
        struct encoded_mode *encoded_mode;
  
*************** a68_decode_modes (MOIF_T *moif, encoded_
*** 1063,1091 ****
    for (auto entry : encoded_modes)
      {
        struct encoded_mode *em = entry.second;
        vec_safe_push (MODES (moif), em->moid);
      }
  
-   /* Next step is to see if equivalent modes the any of the modes in the moif
-       DIM already exist in the compiler's mode list.  In that case, replace the
-       DIM moif's mode with the existing mode anywhere in the moif.  */
-   for (MOID_T *m : MODES (moif))
-     {
-       MOID_T *r = a68_search_equivalent_mode (m);
-       if (r != NO_MOID)
- 	{
- 	  a68_replace_equivalent_mode (MODES (moif), m, r);
- 
- 	  /* Update encoded_modes to reflect the replacement.  */
- 	  for (auto entry : encoded_modes)
- 	    {
- 	      struct encoded_mode *em = entry.second;
- 	      if (em->moid == m)
- 		em->moid = r;
- 	    }
- 	}
-     }
- 
    *errstr = NULL;
    *ppos = pos;
    return true;
--- 1106,1115 ----
    for (auto entry : encoded_modes)
      {
        struct encoded_mode *em = entry.second;
+       gcc_assert (em->moid != NO_MOID);
        vec_safe_push (MODES (moif), em->moid);
      }
  
    *errstr = NULL;
    *ppos = pos;
    return true;
*************** a68_decode_extracts (MOIF_T *moif, encod
*** 1242,1306 ****
    return false;
  }
  
! /* Decode the given exports data into a moif.  If there is a decoding error
!    then put an explicative mssage in *ERRSTR and return NULL.  */
  
! static MOIF_T *
! a68_decode_moif (const char *data, size_t size, const char **errstr)
  {
    size_t pos = 0;
-   MOIF_T *moif = a68_moif_new (NULL /* name */);
-   encoded_modes_map_t encoded_modes (16);
  
    uint8_t magic1, magic2;
    uint16_t version;
    char *name, *prelude, *postlude;
  
!   DUINT8 (magic1);
!   DUINT8 (magic2);
!   if (magic1 != A68_EXPORT_MAGIC1 || magic2 != A68_EXPORT_MAGIC2)
      {
!       *errstr = "invalid magic number";
!       goto decode_error;
!     }
  
!   DUINT16 (version);
!   if (version != 1)
!     {
!       *errstr = "invalid a68 exports version";
!       goto decode_error;
!     }
  
!   DSTR (name);
!   DSTR (prelude);
!   DSTR (postlude);
!   NAME (moif) = name;
!   PRELUDE (moif) = prelude;
!   POSTLUDE (moif) = postlude;
  
!   /* Decode the modes table.
!      This installs the resulting moids in MOIF.  */
!   if (!a68_decode_modes (moif, encoded_modes, data, size, pos, &pos, errstr))
!     goto decode_error;
  
!   /* Decode the extracts table.
!      This installs the resulting tags in MOIF.  */
!   if (!a68_decode_extracts (moif, encoded_modes, data, size, pos, &pos, errstr))
!     goto decode_error;
  
!   /* We don't need the encoded modes anymore.  */
!   for (auto entry : encoded_modes)
!     {
!       struct encoded_mode *em = entry.second;
!       encoded_mode_free (em);
      }
  
!   /* Got some juicy exports for youuuuuu... */
!   return moif;
   decode_error:
    if (*errstr == NULL)
      *errstr = "premature end of data";
!   return NULL;
  }
  
  /* Get a moif with the exports for module named MODULE.  If no exports can be
--- 1266,1353 ----
    return false;
  }
  
! /* Decode the given exports data into moifs, add them to the TOP_MOIF list, and
!    return true.  If there is a decoding error then put an explicative message
!    in *ERRSTR and return false.  */
  
! static bool
! a68_decode_moifs (const char *data, size_t size, const char **errstr)
  {
+   MOIF_T *moif_list = NO_MOIF;
    size_t pos = 0;
  
    uint8_t magic1, magic2;
    uint16_t version;
    char *name, *prelude, *postlude;
  
!   while (pos < size)
      {
!       MOIF_T *moif = a68_moif_new (NULL /* name */);
!       NEXT (moif) = moif_list;
!       moif_list = moif;
  
!       size_t moif_pos = pos;
!       DUINT8 (magic1);
!       DUINT8 (magic2);
!       if (magic1 != A68_EXPORT_MAGIC1 || magic2 != A68_EXPORT_MAGIC2)
! 	{
! 	  *errstr = "invalid magic number";
! 	  goto decode_error;
! 	}
  
!       DUINT16 (version);
!       if (version != 1)
! 	{
! 	  *errstr = "invalid a68 exports version";
! 	  goto decode_error;
! 	}
  
!       DSTR (name);
!       DSTR (prelude);
!       DSTR (postlude);
!       NAME (moif) = name;
!       PRELUDE (moif) = prelude;
!       POSTLUDE (moif) = postlude;
  
!       encoded_modes_map_t encoded_modes (16);
  
!       /* Decode the modes table.
! 	 This installs the resulting moids in MOIF.  */
!       if (!a68_decode_modes (moif, encoded_modes, data, size, pos, moif_pos, &pos, errstr))
! 	goto decode_error;
! 
!       /* Decode the extracts table.
! 	 This installs the resulting tags in MOIF.  */
!       if (!a68_decode_extracts (moif, encoded_modes, data, size, pos, &pos, errstr))
! 	goto decode_error;
! 
!       /* We don't need the encoded modes anymore.  */
!       for (auto entry : encoded_modes)
! 	{
! 	  struct encoded_mode *em = entry.second;
! 	  encoded_mode_free (em);
! 	}
      }
  
!   /* Add the moifs in moif_list to the global list of moifs.  */
!   /* XXX error and fail on duplicates?  */
!   {
!     MOIF_T *end = TOP_MOIF (&A68_JOB);
!     if (end == NO_MOIF)
!       TOP_MOIF (&A68_JOB) = moif_list;
!     else
!       {
! 	while (NEXT (end) != NO_MOIF)
! 	  FORWARD (end);
! 	NEXT (end) = moif_list;
!       }
!   }
! 
!   return true;
   decode_error:
    if (*errstr == NULL)
      *errstr = "premature end of data";
!   return false;
  }
  
  /* Get a moif with the exports for module named MODULE.  If no exports can be
*************** a68_decode_moif (const char *data, size_
*** 1309,1346 ****
  MOIF_T *
  a68_open_packet (const char *module)
  {
!   /* Look in the modules location maps to see if there is an entry for MODULE.
!      If there is one, use the specified filename.  Otherwise canonicalize the
!      module name to a file name.  */
!   char *filename;
!   const char **pfilename = A68_MODULE_FILES->get (module);
!   if (pfilename == NULL)
      {
!       /* Turn the module indicant in MODULE to lower-case.  */
!       filename = (char *) alloca (strlen (module) + 1);
!       size_t i = 0;
!       for (; i < strlen (module); i++)
! 	filename[i] = TOLOWER (module[i]);
!       filename[i] = '\0';
      }
!   else
      {
!       size_t len = strlen (*pfilename) + 1;
!       filename = (char *) alloca (len);
!       memcpy (filename, *pfilename, len);
      }
  
!   /* Try to read exports data in a buffer.  */
!   char *exports_data;
!   size_t exports_data_size;
!   exports_data = a68_get_packet_exports (std::string (filename),
! 					 std::string ("."),
! 					 &exports_data_size);
!   if (exports_data == NULL)
!     return NULL;
  
-   /* Got some data.  Parse it into a moif.  */
-   const char *errstr = NULL;
-   MOIF_T *moif = a68_decode_moif (exports_data, exports_data_size, &errstr);
    return moif;
  }
--- 1356,1455 ----
  MOIF_T *
  a68_open_packet (const char *module)
  {
!   /* We may have a suitable moif already decoded for the requested module.  If
!      so, use it.  */
! 
!   MOIF_T *moif = TOP_MOIF (&A68_JOB);
!   while (moif != NO_MOIF)
      {
!       if (strcmp (NAME (moif), module) == 0)
! 	break;
!       FORWARD (moif);
      }
! 
!   /* If we didn't find already decoded exports for the requested module, look
!      in the modules location maps to see if there is an entry for MODULE.  If
!      there is one, use the specified filename.  Otherwise canonicalize the
!      module name to a file name.  */
! 
!   if (moif == NO_MOIF)
      {
!       char *filename;
!       const char **pfilename = A68_MODULE_FILES->get (module);
!       if (pfilename == NULL)
! 	{
! 	  /* Turn the module indicant in MODULE to lower-case.  */
! 	  filename = (char *) alloca (strlen (module) + 1);
! 	  size_t i = 0;
! 	  for (; i < strlen (module); i++)
! 	    filename[i] = TOLOWER (module[i]);
! 	  filename[i] = '\0';
! 	}
!       else
! 	{
! 	  size_t len = strlen (*pfilename) + 1;
! 	  filename = (char *) alloca (len);
! 	  memcpy (filename, *pfilename, len);
! 	}
! 
!       /* Try to read exports data in a buffer.  */
!       char *exports_data;
!       size_t exports_data_size;
!       exports_data = a68_get_packet_exports (std::string (filename),
! 					     std::string ("."),
! 					     &exports_data_size);
!       if (exports_data == NULL)
! 	return NULL;
! 
!       /* Got some data.  Decode it into a list of moif.  */
!       const char *errstr = NULL;
!       if (!a68_decode_moifs (exports_data, exports_data_size, &errstr))
! 	{
! 	  a68_error (NO_NODE, "%s", errstr);
! 	  return NULL;
! 	}
! 
!       /* The androids we are looking for are likely to be now in the global
! 	 list.  */
!       moif = TOP_MOIF (&A68_JOB);
!       while (moif != NO_MOIF && strcmp (NAME (moif), module) != 0)
! 	FORWARD (moif);
      }
  
!   /* If we got a moif, we need to make sure that it doesn't introduce new modes
!      that are equivalent to any mode in the compiler's mode list.  If it does,
!      we replace the mode everywhere in the moif.  */
! 
!   if (moif != NO_MOIF)
!     {
!       for (MOID_T *m : MODES (moif))
! 	{
! 	  MOID_T *r = a68_search_equivalent_mode (m);
! 	  if (r != NO_MOID)
! 	    {
! 	      a68_replace_equivalent_mode (MODES (moif), m, r);
! 
! 	      /* Update extracts to reflect the replacement.  */
! 	      for (EXTRACT_T *e : INDICANTS (moif))
! 		{
! 		  if (EXTRACT_MODE (e) == m)
! 		    EXTRACT_MODE (e) = r;
! 		}
! 
! 	      for (EXTRACT_T *e : IDENTIFIERS (moif))
! 		{
! 		  if (EXTRACT_MODE (e) == m)
! 		    EXTRACT_MODE (e) = r;
! 		}
! 
! 	      for (EXTRACT_T *e : OPERATORS (moif))
! 		{
! 		  if (EXTRACT_MODE (e) == m)
! 		    EXTRACT_MODE (e) = r;
! 		}
! 	    }
! 	}
!     }
  
    return moif;
  }
diff -Nrcpad gcc-16-20251221/gcc/algol68/a68-lang.cc gcc-16-20251228/gcc/algol68/a68-lang.cc
*** gcc-16-20251221/gcc/algol68/a68-lang.cc	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/algol68/a68-lang.cc	Sun Dec 28 22:32:06 2025
*************** a68_handle_option (size_t scode,
*** 533,546 ****
  	  fatal_error (UNKNOWN_LOCATION,
  		       "cannot open modules map file %<%s%>", arg);
  	
! 	ssize_t ssize = a68_file_size (file);
  	if (ssize < 0)
  	  fatal_error (UNKNOWN_LOCATION,
  		       "cannot determine size of modules map file %<%s%>", arg);
  	size_t fsize = ssize;
  
  	char *buffer = (char *) xmalloc (fsize + 1);
! 	size_t bytes_read = a68_file_read (file, buffer, fsize);
  	if (bytes_read != fsize)
  	  fatal_error (UNKNOWN_LOCATION,
  		       "cannot read contents of modules map file %<%s%>", arg);
--- 533,546 ----
  	  fatal_error (UNKNOWN_LOCATION,
  		       "cannot open modules map file %<%s%>", arg);
  	
! 	ssize_t ssize = a68_file_size (fileno (file));
  	if (ssize < 0)
  	  fatal_error (UNKNOWN_LOCATION,
  		       "cannot determine size of modules map file %<%s%>", arg);
  	size_t fsize = ssize;
  
  	char *buffer = (char *) xmalloc (fsize + 1);
! 	size_t bytes_read = a68_file_read (fileno (file), buffer, fsize);
  	if (bytes_read != fsize)
  	  fatal_error (UNKNOWN_LOCATION,
  		       "cannot read contents of modules map file %<%s%>", arg);
diff -Nrcpad gcc-16-20251221/gcc/algol68/a68-low-clauses.cc gcc-16-20251228/gcc/algol68/a68-low-clauses.cc
*** gcc-16-20251221/gcc/algol68/a68-low-clauses.cc	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/algol68/a68-low-clauses.cc	Sun Dec 28 22:32:06 2025
*************** a68_lower_closed_clause (NODE_T *p, LOW_
*** 1389,1430 ****
    return a68_pop_serial_clause_range ();
  }
  
  /* Lower an access clause.
  
!      access clause : access symbol, joined module indication sequence,
!                        enclosed clause.
  */
  
  tree
  a68_lower_access_clause (NODE_T *p, LOW_CTX_T ctx)
  {
!   NODE_T *controlled_clause = NEXT (NEXT_SUB (p));
  
    a68_push_range (MOID (p));
  
    /* Call preludes of all ACCESSed modules.  */
!   for (NODE_T *q = SUB (p); q != NO_NODE; FORWARD (q))
!     {
!       if (IS (q, MODULE_INDICANT))
! 	{
! 	  TAG_T *tag = a68_find_tag_global (TABLE (q), MODULE_SYMBOL, NSYMBOL (q));
! 	  gcc_assert (tag != NO_TAG);
! 	  MOIF_T *moif = MOIF (tag);
! 	  gcc_assert (moif != NO_MOIF);
! 	  const char *prelude = PRELUDE (moif);
! 
! 	  tree prelude_decl = build_decl (UNKNOWN_LOCATION, FUNCTION_DECL,
! 					  get_identifier (prelude),
! 					  build_function_type_list (void_type_node,
! 								    void_type_node,
! 								    NULL_TREE));
! 	  DECL_EXTERNAL (prelude_decl) = 1;
! 	  TREE_PUBLIC (prelude_decl) = 1;
! 	  a68_add_decl (prelude_decl);
! 	  a68_add_stmt (build_call_expr_loc (a68_get_node_location (q),
! 					     prelude_decl, 0));
! 	}
!     }
  
    /* Now the controlled clause.  */
    tree controlled_clause_tree = a68_lower_tree (controlled_clause, ctx);
--- 1389,1442 ----
    return a68_pop_serial_clause_range ();
  }
  
+ /* Lower calls to preludes or postludes for all revelations in subtree.  */
+ 
+ static void
+ a68_lower_revelation_ludes (NODE_T *p, bool prelude)
+ {
+   for (; p != NO_NODE; FORWARD (p))
+     {
+       if (IS (p, MODULE_INDICANT))
+ 	{
+ 	  TAG_T *tag = a68_find_tag_global (TABLE (p), MODULE_SYMBOL, NSYMBOL (p));
+ 	  gcc_assert (tag != NO_TAG);
+ 	  MOIF_T *moif = MOIF (tag);
+ 	  gcc_assert (moif != NO_MOIF);
+ 	  const char *fname = (prelude ? PRELUDE (moif) : POSTLUDE (moif));
+ 
+ 	  tree fdecl = build_decl (UNKNOWN_LOCATION, FUNCTION_DECL,
+ 				   get_identifier (fname),
+ 				   build_function_type_list (void_type_node,
+ 							     void_type_node,
+ 							     NULL_TREE));
+ 	  DECL_EXTERNAL (fdecl) = 1;
+ 	  TREE_PUBLIC (fdecl) = 1;
+ 	  a68_add_decl (fdecl);
+ 	  a68_add_stmt (build_call_expr_loc (a68_get_node_location (p),
+ 					     fdecl, 0));
+ 
+ 	}
+       else
+ 	a68_lower_revelation_ludes (SUB (p), prelude);
+     }
+ }
+ 
  /* Lower an access clause.
  
!      access clause : access symbol, access revelation, enclosed clause.
!      access revelation : access symbol, module indicant ;
!                          access revelation, comma symbol, module indicant.
  */
  
  tree
  a68_lower_access_clause (NODE_T *p, LOW_CTX_T ctx)
  {
!   NODE_T *controlled_clause = NEXT_SUB (p);
  
    a68_push_range (MOID (p));
  
    /* Call preludes of all ACCESSed modules.  */
!   a68_lower_revelation_ludes (SUB (p), true /* prelude */);
  
    /* Now the controlled clause.  */
    tree controlled_clause_tree = a68_lower_tree (controlled_clause, ctx);
*************** a68_lower_access_clause (NODE_T *p, LOW_
*** 1433,1461 ****
  			       controlled_clause_tree);
  
    /* Call postludes of all ACCESSed modules.  */
!   for (NODE_T *q = SUB (p); q != NO_NODE; FORWARD (q))
!     {
!       if (IS (q, MODULE_INDICANT))
! 	{
! 	  TAG_T *tag = a68_find_tag_global (TABLE (q), MODULE_SYMBOL, NSYMBOL (q));
! 	  gcc_assert (tag != NO_TAG);
! 	  MOIF_T *moif = MOIF (tag);
! 	  gcc_assert (moif != NO_MOIF);
! 	  const char *postlude = POSTLUDE (moif);
! 
! 	  tree postlude_decl = build_decl (UNKNOWN_LOCATION, FUNCTION_DECL,
! 					   get_identifier (postlude),
! 					   build_function_type_list (void_type_node,
! 								     void_type_node,
! 								     NULL_TREE));
! 	  DECL_EXTERNAL (postlude_decl) = 1;
! 	  TREE_PUBLIC (postlude_decl) = 1;
! 	  a68_add_decl (postlude_decl);
! 	  a68_add_stmt (build_call_expr_loc (a68_get_node_location (q),
! 					     postlude_decl, 0));
! 	}
!     }
! 
    a68_add_stmt (tmp);
    return a68_pop_range ();
  }
--- 1445,1451 ----
  			       controlled_clause_tree);
  
    /* Call postludes of all ACCESSed modules.  */
!   a68_lower_revelation_ludes (SUB (p), false /* prelude */);
    a68_add_stmt (tmp);
    return a68_pop_range ();
  }
diff -Nrcpad gcc-16-20251221/gcc/algol68/a68-low-decls.cc gcc-16-20251228/gcc/algol68/a68-low-decls.cc
*** gcc-16-20251221/gcc/algol68/a68-low-decls.cc	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/algol68/a68-low-decls.cc	Sun Dec 28 22:32:06 2025
***************
*** 48,53 ****
--- 48,57 ----
                          equals symbol, declarer;
                          mode symbol, defining indicant,
  			equals symbol, void symbol;
+ 			public symbol, mode symbol, defining indicant,
+                         equals symbol, declarer;
+                         public symbol, mode symbol, defining indicant,
+ 			equals symbol, void symbol;
                          mode declaration, comma symbol,
  			defining indicant, equals symbol, declarer;
                          mode declaration, comma symbol,
*************** a68_lower_mode_declaration (NODE_T *p, L
*** 71,78 ****
      }
    else
      {
!       gcc_assert (IS (SUB (p), MODE_SYMBOL));
!       defining_indicant = NEXT (SUB (p));
      }
  
    /* Create a TYPE_DECL declaration for the defined mode and chain it in the
--- 75,90 ----
      }
    else
      {
!       if (IS (SUB (p), PUBLIC_SYMBOL))
! 	{
! 	  gcc_assert (IS (NEXT (SUB (p)), MODE_SYMBOL));
! 	  defining_indicant = NEXT (NEXT (SUB (p)));
! 	}
!       else
! 	{
! 	  gcc_assert (IS (SUB (p), MODE_SYMBOL));
! 	  defining_indicant = NEXT (SUB (p));
! 	}
      }
  
    /* Create a TYPE_DECL declaration for the defined mode and chain it in the
*************** a68_lower_mode_declaration (NODE_T *p, L
*** 100,105 ****
--- 112,123 ----
  			    qualifier, declarer, defining identifier;
  			    declarer, defining identifier, assign symbol, unit;
  			    declarer, defining identifier;
+ 			    public symbol, qualifier, declarer, defining identifier,
+                             assign symbol, unit;
+      			    public symbol, qualifier, declarer, defining identiifer;
+ 			    qualifier, declarer, defining identifier;
+ 			    public symbol, declarer, defining identifier, assign symbol, unit;
+ 			    declarer, defining identifier;
  			    variable declaration, comma symbol,
  			    defining identifier, assign symbol, unit;
  			    variable declaration, comma symbol,
*************** a68_lower_variable_declaration (NODE_T *
*** 135,155 ****
        sub_expr = a68_lower_tree (SUB (p), new_ctx);
        defining_identifier = NEXT (NEXT (SUB (p)));
      }
!   else if (IS (SUB (p), QUALIFIER))
!     {
!       /* The qualifier determines what kind of generator is used in the
! 	 variable declaration.  This is already annotated in the tax entry for
! 	 the definining identifier.  */
!       declarer = NEXT (SUB (p));
!       defining_identifier = NEXT (NEXT (SUB (p)));
!     }
!   else if (IS (SUB (p), DECLARER))
      {
!       declarer = SUB (p);
!       defining_identifier = NEXT (SUB (p));
      }
-   else
-     gcc_unreachable ();
  
    /* Communicate declarer upward.  */
    if (ctx.declarer != NULL)
--- 153,181 ----
        sub_expr = a68_lower_tree (SUB (p), new_ctx);
        defining_identifier = NEXT (NEXT (SUB (p)));
      }
!   else
      {
!       NODE_T *q = SUB (p);
! 
!       if (IS (q, PUBLIC_SYMBOL))
! 	FORWARD (q);
!  
!       if (IS (q, QUALIFIER))
! 	{
! 	  /* The qualifier determines what kind of generator is used in the
! 	     variable declaration.  This is already annotated in the tax entry
! 	     for the definining identifier.  */
! 	  declarer = NEXT (q);
! 	  defining_identifier = NEXT (NEXT (q));
! 	}
!       else if (IS (q, DECLARER))
! 	{
! 	  declarer = q;
! 	  defining_identifier = NEXT (q);
! 	}
!       else
! 	gcc_unreachable ();
      }
  
    /* Communicate declarer upward.  */
    if (ctx.declarer != NULL)
*************** a68_lower_variable_declaration (NODE_T *
*** 281,286 ****
--- 307,314 ----
  
       identity declaration : declarer, defining identifier,
                              equals symbol, unit;
+ 			    public symbol, declarer, defining identifier,
+ 			    equals symbol, unit;
                              identity declaration, comma symbol,
  			    defining identifier, equals symbol, unit;
  
*************** a68_lower_identity_declaration (NODE_T *
*** 310,315 ****
--- 338,347 ----
        sub_expr = a68_lower_tree (SUB (p), ctx);
        defining_identifier = NEXT (NEXT (SUB (p)));
      }
+   else if (IS (SUB (p), PUBLIC_SYMBOL))
+     {
+       defining_identifier = NEXT (NEXT (SUB (p)));
+     }
    else if (IS (SUB (p), DECLARER))
      {
        defining_identifier = NEXT (SUB (p));
*************** a68_lower_declaration_list (NODE_T *p, L
*** 443,448 ****
--- 475,481 ----
  /* Lower a procedure declaration.
  
       procedure declaration : proc symbol, defining identifier, assign symbol, routine text;
+                              public symbol, proc symbol, defining identifier, assign symbol, routine text;
                               procedure declaration, comma symbol,
  			     defining identifier, equals symbol, routine text.
  
*************** a68_lower_procedure_declaration (NODE_T
*** 458,463 ****
--- 491,500 ----
        sub_func_decl = a68_lower_tree (SUB (p), ctx);
        defining_identifier = NEXT (NEXT (SUB (p)));
      }
+   else if (IS (SUB (p), PUBLIC_SYMBOL))
+     {
+       defining_identifier = NEXT (NEXT (SUB (p)));
+     }
    else if (IS (SUB (p), PROC_SYMBOL))
      {
        defining_identifier = NEXT (SUB (p));
*************** a68_lower_procedure_declaration (NODE_T
*** 493,498 ****
--- 530,537 ----
       procedure variable declaration
         : proc symbol, defining identifier, assign symbol, routine text;
           qualifier, proc symbol, defining identifier, assign symbol, routine text;
+ 	 public symbol, proc symbol, defining identifier, assign symbol, routine text;
+          public symbol, qualifier, proc symbol, defining identifier, assign symbol, routine text;
  	 procedure variable declaration, comma symbol, defining identiier, assign symbol, routine text.
  
     This lowers into the declaration of a VAR_DECL which is a pointer to the
*************** a68_lower_procedure_variable_declaration
*** 508,522 ****
        sub_decl = a68_lower_tree (SUB (p), ctx);
        defining_identifier = NEXT (NEXT (SUB (p)));
      }
-   else if (IS (SUB (p), PROC_SYMBOL))
-     defining_identifier = NEXT (SUB (p));
-   else if (IS (SUB (p), QUALIFIER))
-     /* The qualifier determines what kind of generator is used in the variable
-        declaration.  This is already annotated in the tax entry for the
-        definining identifier.  */
-     defining_identifier = NEXT (NEXT (SUB (p)));
    else
!     gcc_unreachable ();
    NODE_T *routine_text = NEXT (NEXT (defining_identifier));
  
    /* The routine text lowers into a pointer to function.  */
--- 547,570 ----
        sub_decl = a68_lower_tree (SUB (p), ctx);
        defining_identifier = NEXT (NEXT (SUB (p)));
      }
    else
!     {
!       NODE_T *q = SUB (p);
! 
!       if (IS (q, PUBLIC_SYMBOL))
! 	FORWARD (q);
! 
!       if (IS (q, PROC_SYMBOL))
! 	defining_identifier = NEXT (q);
!       else if (IS (q, QUALIFIER))
! 	/* The qualifier determines what kind of generator is used in the
! 	   variable declaration.  This is already annotated in the tax entry
! 	   for the definining identifier.  */
! 	defining_identifier = NEXT (NEXT (q));
!       else
! 	gcc_unreachable ();
!     }
! 
    NODE_T *routine_text = NEXT (NEXT (defining_identifier));
  
    /* The routine text lowers into a pointer to function.  */
*************** a68_lower_priority_declaration (NODE_T *
*** 590,595 ****
--- 638,644 ----
  
       brief operator declaration
         : op symbol, defining operator, equals symbol, routine text;
+          public symbol, op symbol, defining operator, equals symbol, routine text;
           brief operator declaration, comma symbol, defining operator, equals symbol, routine text.
  
     The declarations low in a series of FUNCTION_DECLs, one per declared
*************** a68_lower_brief_operator_declaration (NO
*** 607,613 ****
        defining_operator = NEXT (NEXT (SUB (p)));
      }
    else
!     defining_operator = NEXT (SUB (p));
    NODE_T *routine_text = NEXT (NEXT (defining_operator));
  
    /* Lower the routine text to get a function decl.  */
--- 656,670 ----
        defining_operator = NEXT (NEXT (SUB (p)));
      }
    else
!     {
!       if (IS (SUB (p), PUBLIC_SYMBOL))
! 	{
! 	  gcc_assert (IS (NEXT (SUB (p)), OP_SYMBOL));
! 	  defining_operator = NEXT (NEXT (SUB (p)));
! 	}
!       else
! 	defining_operator = NEXT (SUB (p));
!     }
    NODE_T *routine_text = NEXT (NEXT (defining_operator));
  
    /* Lower the routine text to get a function decl.  */
*************** a68_lower_brief_operator_declaration (NO
*** 634,639 ****
--- 691,697 ----
  /* Lower an operator declaration.
  
       operator declaration : operator plan, defining operator, equals symbol, unit;
+                             public symbol, operator plan, defining operator, equals symbol, unit;
                              operator declaration, comma symbol, defining operator, equals symbol, unit.
  
     Each operator declaration lowers into a declaration.  */
*************** a68_lower_operator_declaration (NODE_T *
*** 650,656 ****
        defining_operator = NEXT (NEXT (SUB (p)));
      }
    else
!     defining_operator = NEXT (SUB (p));
    NODE_T *unit = NEXT (NEXT (defining_operator));
  
    tree op_decl = TAX_TREE_DECL (TAX (defining_operator));
--- 708,719 ----
        defining_operator = NEXT (NEXT (SUB (p)));
      }
    else
!     {
!       if (IS (SUB (p), PUBLIC_SYMBOL))
! 	defining_operator = NEXT (NEXT (SUB (p)));
!       else
! 	defining_operator = NEXT (SUB (p));
!     }
    NODE_T *unit = NEXT (NEXT (defining_operator));
  
    tree op_decl = TAX_TREE_DECL (TAX (defining_operator));
diff -Nrcpad gcc-16-20251221/gcc/algol68/a68-moids-misc.cc gcc-16-20251228/gcc/algol68/a68-moids-misc.cc
*** gcc-16-20251221/gcc/algol68/a68-moids-misc.cc	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/algol68/a68-moids-misc.cc	Sun Dec 28 22:32:06 2025
*************** a68_pack_soids_in_moid (SOID_T *top_sl,
*** 280,287 ****
        *p = t;
        p = &NEXT (t);
      }
!   (void) a68_register_extra_mode (&TOP_MOID (&A68_JOB), x);
!   return x;
  }
  
  /* Whether P is compatible with Q.  */
--- 280,287 ----
        *p = t;
        p = &NEXT (t);
      }
! 
!   return a68_register_extra_mode (&TOP_MOID (&A68_JOB), x);
  }
  
  /* Whether P is compatible with Q.  */
diff -Nrcpad gcc-16-20251221/gcc/algol68/a68-parser-bottom-up.cc gcc-16-20251228/gcc/algol68/a68-parser-bottom-up.cc
*** gcc-16-20251221/gcc/algol68/a68-parser-bottom-up.cc	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/algol68/a68-parser-bottom-up.cc	Sun Dec 28 22:32:06 2025
*************** empty_clause (NODE_T *p)
*** 201,206 ****
--- 201,214 ----
    a68_error (p, "clause does not yield a value");
  }
  
+ /* Diagnose for invalid module text.  */
+ 
+ static void
+ expected_module_text (NODE_T *p)
+ {
+   a68_error (p, "expected module text in module definition");
+ }
+ 
  /* Diagnose for missing symbol.  */
  
  static void
*************** reduce_prelude_packet (NODE_T *p)
*** 453,459 ****
    /* Single module declaration.  */
    reduce (p, NO_NOTE, NO_TICK,
  	  MODULE_DECLARATION, MODULE_SYMBOL, DEFINING_MODULE_INDICANT, EQUALS_SYMBOL, MODULE_TEXT, STOP);
!   reduce (p, strange_tokens, NO_TICK,
  	  MODULE_DECLARATION, MODULE_SYMBOL, DEFINING_MODULE_INDICANT, EQUALS_SYMBOL, -MODULE_TEXT, STOP);
  
  #if 0
--- 461,467 ----
    /* Single module declaration.  */
    reduce (p, NO_NOTE, NO_TICK,
  	  MODULE_DECLARATION, MODULE_SYMBOL, DEFINING_MODULE_INDICANT, EQUALS_SYMBOL, MODULE_TEXT, STOP);
!   reduce (p, expected_module_text, NO_TICK,
  	  MODULE_DECLARATION, MODULE_SYMBOL, DEFINING_MODULE_INDICANT, EQUALS_SYMBOL, -MODULE_TEXT, STOP);
  
  #if 0
*************** reduce_enclosed_clauses (NODE_T *q, enum
*** 2545,2553 ****
  	      reduce (s, NO_NOTE, NO_TICK, ENCLOSED_CLAUSE, LOOP_CLAUSE, STOP);
  	      reduce (s, NO_NOTE, NO_TICK, ENCLOSED_CLAUSE, ACCESS_CLAUSE, STOP);
  	    }
! 	  // XXX reduce revelations
  	  reduce (p, NO_NOTE, NO_TICK,
! 		  ACCESS_CLAUSE, ACCESS_SYMBOL, MODULE_INDICANT, ENCLOSED_CLAUSE, STOP);
  	}
        else if (IS (p, IF_SYMBOL))
  	{
--- 2553,2574 ----
  	      reduce (s, NO_NOTE, NO_TICK, ENCLOSED_CLAUSE, LOOP_CLAUSE, STOP);
  	      reduce (s, NO_NOTE, NO_TICK, ENCLOSED_CLAUSE, ACCESS_CLAUSE, STOP);
  	    }
! 
! 	  /* Reduce revelations.  */
! 
  	  reduce (p, NO_NOTE, NO_TICK,
! 		  REVELATION, ACCESS_SYMBOL, MODULE_INDICANT, STOP);
! 
! 	  bool siga;
! 	  do
! 	    {
! 	      siga = false;
! 	      reduce (p, NO_NOTE, &siga,
! 		      REVELATION, REVELATION, COMMA_SYMBOL, MODULE_INDICANT, STOP);
! 	    }
! 	  while (siga);
! 	  reduce (p, NO_NOTE, NO_TICK,
! 		  ACCESS_CLAUSE, REVELATION, ENCLOSED_CLAUSE, STOP);
  	}
        else if (IS (p, IF_SYMBOL))
  	{
*************** a68_bottom_up_error_check (NODE_T *p)
*** 2879,2889 ****
  	    a68_error (p, "incorrect number of pictures for A",
  		       ATTRIBUTE (p));
  	}
-       else if (IS (p, PUBLIC_SYMBOL))
- 	{
- 	  /* These should have been removed by a68_bottom_up_coalesce_pub.  */
- 	  gcc_unreachable ();
- 	}
        else if (a68_is_one_of (p, DEFINING_INDICANT, DEFINING_IDENTIFIER, DEFINING_OPERATOR, STOP))
  	{
  	  if (PUBLICIZED (p) && !PUBLIC_RANGE (TABLE (p)))
--- 2900,2905 ----
*************** a68_rearrange_goto_less_jumps (NODE_T *p
*** 2981,3011 ****
        a68_rearrange_goto_less_jumps (SUB (p));
      }
  }
- 
- /*
-  * Remove PUBLIC_SYMBOLs resulting from reductions from the tree.  Note that
-  * the defining indicants, identifiers and operators have been already marked
-  * as publicized or not publicized by the extract routines.
-  */
- 
- void
- a68_bottom_up_coalesce_pub (NODE_T *p)
- {
-   for (; p != NO_NODE; FORWARD (p))
-     {
-       if (a68_is_one_of (p,
- 			 MODE_DECLARATION, PROCEDURE_DECLARATION, PRIORITY_DECLARATION,
- 			 PROCEDURE_VARIABLE_DECLARATION, BRIEF_OPERATOR_DECLARATION,
- 			 OPERATOR_DECLARATION,  IDENTITY_DECLARATION,
- 			 VARIABLE_DECLARATION, STOP))
- 	{
- 	  if (SUB (p) != NO_NODE && IS (SUB (p), PUBLIC_SYMBOL))
- 	    {
- 	      NODE_T *public_symbol = SUB (p);
- 	      SUB (p) = NEXT (public_symbol);
- 	      PREVIOUS (NEXT (public_symbol)) = NO_NODE;
- 	    }
- 	}
-       a68_bottom_up_coalesce_pub (SUB (p));
-     }
- }
--- 2997,2999 ----
diff -Nrcpad gcc-16-20251221/gcc/algol68/a68-parser-extract.cc gcc-16-20251228/gcc/algol68/a68-parser-extract.cc
*** gcc-16-20251221/gcc/algol68/a68-parser-extract.cc	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/algol68/a68-parser-extract.cc	Sun Dec 28 22:32:06 2025
*************** a68_elaborate_bold_tags (NODE_T *p)
*** 168,174 ****
  static NODE_T *
  skip_pack_declarer (NODE_T *p)
  {
!   /* Skip () REF [] REF FLEX [] [] ...  */
    while (p != NO_NODE
  	 && (a68_is_one_of (p, SUB_SYMBOL, OPEN_SYMBOL, REF_SYMBOL,
  			    FLEX_SYMBOL, SHORT_SYMBOL, LONG_SYMBOL, STOP)))
--- 168,174 ----
  static NODE_T *
  skip_pack_declarer (NODE_T *p)
  {
!   /* Skip PUB () REF [] REF FLEX [] [] ...  */
    while (p != NO_NODE
  	 && (a68_is_one_of (p, SUB_SYMBOL, OPEN_SYMBOL, REF_SYMBOL,
  			    FLEX_SYMBOL, SHORT_SYMBOL, LONG_SYMBOL, STOP)))
*************** skip_pack_declarer (NODE_T *p)
*** 185,207 ****
      return p;
  }
  
! /* Extract a revelation.  */
  
  static void
! extract_revelation (NODE_T *q, bool is_public ATTRIBUTE_UNUSED)
  {
-   /* Store in the symbol table.  */
-   TAG_T *tag = a68_add_tag (TABLE (q), MODULE_SYMBOL, q, NO_MOID, STOP);
-   gcc_assert (tag != NO_TAG);
-   EXPORTED (tag) = false; // XXX depends on PUB!
    /* Import the MOIF and install it in the tag.  */
!   MOIF_T *moif = a68_open_packet (NSYMBOL (q));
    if (moif == NULL)
      {
!       a68_error (q, "cannot find module Z", NSYMBOL (q));
        return;
      }
!   MOIF (tag) = moif; // XXX add to existing list of moifs.
  
    /* Store all the modes from the MOIF in the moid list.
  
--- 185,208 ----
      return p;
  }
  
! /* Extract the revelation associated with the module MODULE.  The node Q is
!    used for symbol table and diagnostic purposes.  Publicized modules are
!    recursively extracted as well.  This call may result in one or more
!    errors.  */
  
  static void
! extract_revelation (NODE_T *q, const char *module, TAG_T *tag)
  {
    /* Import the MOIF and install it in the tag.  */
!   MOIF_T *moif = a68_open_packet (module);
    if (moif == NULL)
      {
!       a68_error (q, "cannot find module Z", module);
        return;
      }
! 
!   if (tag != NO_TAG)
!     MOIF (tag) = moif;
  
    /* Store all the modes from the MOIF in the moid list.
  
*************** extract_revelation (NODE_T *q, bool is_p
*** 218,227 ****
  	{
  	  MOID_T *r = a68_register_extra_mode (&TOP_MOID (&A68_JOB), m);
  	  if (r != m)
! 	    gcc_unreachable ();
  	}
      }
  
    /* Store mode indicants from the MOIF in the symbol table,
       and also in the moid list.  */
    for (EXTRACT_T *e : INDICANTS (moif))
--- 219,241 ----
  	{
  	  MOID_T *r = a68_register_extra_mode (&TOP_MOID (&A68_JOB), m);
  	  if (r != m)
! 	    {
! 	      printf ("r: %s\n", a68_moid_to_string (r, 80, NO_NODE, false));
! 	      printf ("m: %s\n", a68_moid_to_string (m, 80, NO_NODE, false));
! 	      gcc_unreachable ();
! 	    }
  	}
      }
  
+   /* Second thing to do is to extract the revelations of publicized modules in
+      this moif.  This leads to recursive calls of this function.  Note that
+      this should be done _after_ the modes get added to the global list of
+      modes so mode deduplication in a68_open_packet in the recursive
+      extract_revelation calls is properly done.  */
+ 
+   for (EXTRACT_T *e : MODULES (moif))
+     extract_revelation (q, EXTRACT_SYMBOL (e), NO_TAG);
+ 
    /* Store mode indicants from the MOIF in the symbol table,
       and also in the moid list.  */
    for (EXTRACT_T *e : INDICANTS (moif))
*************** a68_extract_indicants (NODE_T *p)
*** 343,359 ****
  	  do
  	    {
  	      FORWARD (q);
! 	      detect_redefined_keyword (q, MODE_DECLARATION);
! 	      if (IS (q, BOLD_TAG))
! 		{
! 		  extract_revelation (q, false /* is_public */);
! 		  FORWARD (q);
! 		}
! 	      else if (a68_whether (q, PUBLIC_SYMBOL, BOLD_TAG, STOP))
  		{
! 		  extract_revelation (q, true /* is_public */);
! 		  FORWARD (q);
! 		  FORWARD (q);
  		}
  	    }
  	  while (q != NO_NODE && IS (q, COMMA_SYMBOL));
--- 357,384 ----
  	  do
  	    {
  	      FORWARD (q);
! 	      if (q != NO_NODE)
  		{
! 		  NODE_T *bold_tag = NO_NODE;
! 
! 		  if (IS (q, BOLD_TAG))
! 		    {
! 		      bold_tag = q;
! 		      FORWARD (q);
! 		    }
! 		  else if (a68_whether (q, PUBLIC_SYMBOL, BOLD_TAG, STOP))
! 		    {
! 		      bold_tag = NEXT (q);
! 		      FORWARD (q);
! 		      FORWARD (q);
! 		    }
! 
! 		  if (bold_tag != NO_NODE)
! 		    {
! 		      TAG_T *tag = a68_add_tag (TABLE (bold_tag), MODULE_SYMBOL, bold_tag, NO_MOID, STOP);
! 		      gcc_assert (tag != NO_TAG);
! 		      extract_revelation (bold_tag, NSYMBOL (bold_tag), tag);
! 		    }
  		}
  	    }
  	  while (q != NO_NODE && IS (q, COMMA_SYMBOL));
*************** a68_extract_indicants (NODE_T *p)
*** 364,384 ****
  	  do
  	    {
  	      FORWARD (q);
! 	      detect_redefined_keyword (q, MODE_DECLARATION);
  	      if (a68_whether (q, BOLD_TAG, EQUALS_SYMBOL, STOP))
  		{
- 		  /* Store in the symbol table.
- 		     XXX also add to global list of modules?
- 		     Position of definition (q) connects to this lexical
- 		     level!  */
  		  ATTRIBUTE (q) = DEFINING_MODULE_INDICANT;
- 		  TAG_T *tag = a68_add_tag (TABLE (p), MODULE_SYMBOL, q, NO_MOID, STOP);
- 		  gcc_assert (tag != NO_TAG);
- 		  EXPORTED (tag) = true;
  		  FORWARD (q);
  		  ATTRIBUTE (q) = EQUALS_SYMBOL; /* XXX why not ALT_EQUALS_SYMBOL */
! 		  q = skip_module_text (NEXT (q));
! 		  FORWARD (q);
  		}
  	      else
  		siga = false;
--- 389,411 ----
  	  do
  	    {
  	      FORWARD (q);
! 	      detect_redefined_keyword (q, MODULE_DECLARATION);
  	      if (a68_whether (q, BOLD_TAG, EQUALS_SYMBOL, STOP))
  		{
  		  ATTRIBUTE (q) = DEFINING_MODULE_INDICANT;
  		  FORWARD (q);
  		  ATTRIBUTE (q) = EQUALS_SYMBOL; /* XXX why not ALT_EQUALS_SYMBOL */
! 		  if (NEXT (q) != NO_NODE && IS (NEXT (q), ACCESS_SYMBOL))
! 		    {
! 		      a68_error (NEXT (q),
! 				 "nested access clauses not allowed in module texts");
! 		      siga = false;
! 		    }
! 		  else
! 		    {
! 		      q = skip_module_text (NEXT (q));
! 		      FORWARD (q);
! 		    }
  		}
  	      else
  		siga = false;
diff -Nrcpad gcc-16-20251221/gcc/algol68/a68-parser-modes.cc gcc-16-20251228/gcc/algol68/a68-parser-modes.cc
*** gcc-16-20251221/gcc/algol68/a68-parser-modes.cc	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/algol68/a68-parser-modes.cc	Sun Dec 28 22:32:06 2025
*************** get_mode_from_proc_variables (NODE_T *p)
*** 766,772 ****
  	  get_mode_from_proc_variables (SUB (p));
  	  get_mode_from_proc_variables (NEXT (p));
  	}
!       else if (IS (p, QUALIFIER) || IS (p, PROC_SYMBOL) || IS (p, COMMA_SYMBOL))
  	{
  	  get_mode_from_proc_variables (NEXT (p));
  	}
--- 766,772 ----
  	  get_mode_from_proc_variables (SUB (p));
  	  get_mode_from_proc_variables (NEXT (p));
  	}
!       else if (IS (p, PUBLIC_SYMBOL) || IS (p, QUALIFIER) || IS (p, PROC_SYMBOL) || IS (p, COMMA_SYMBOL))
  	{
  	  get_mode_from_proc_variables (NEXT (p));
  	}
diff -Nrcpad gcc-16-20251221/gcc/algol68/a68-parser-scanner.cc gcc-16-20251228/gcc/algol68/a68-parser-scanner.cc
*** gcc-16-20251221/gcc/algol68/a68-parser-scanner.cc	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/algol68/a68-parser-scanner.cc	Sun Dec 28 22:32:06 2025
*************** supper_postlude[] = {
*** 119,155 ****
      }									\
    while (0)
  
! /* Get the size of a file given a file descriptor FILE.  In case the size of
     the file cannot be determined then this function returns -1.  */
  
  ssize_t
! a68_file_size (FILE *file)
  {
    ssize_t fsize;
    off_t off, save;
  
!   save = ftell (file);
!   if (save == -1)
      return -1;
  
!   off = lseek (fileno (file), 0, SEEK_END);
    if (off == (off_t) -1)
      return -1;
    fsize = (ssize_t) off;
  
!   off = lseek (fileno (file), 0, save);
    if (off == (off_t) -1)
      return -1;
  
    return fsize;
  }
  
! /* Read bytes from file into buffer.  */
  
  ssize_t
! a68_file_read (FILE *file, void *buf, size_t n)
  {
-   int fd = fileno (file);
    size_t to_do = n;
    int restarts = 0;
    char *z = (char *) buf;
--- 119,154 ----
      }									\
    while (0)
  
! /* Get the size of a file given a file descriptor FD.  In case the size of
     the file cannot be determined then this function returns -1.  */
  
  ssize_t
! a68_file_size (int fd)
  {
    ssize_t fsize;
    off_t off, save;
  
!   save = lseek (fd, 0, SEEK_CUR);
!   if (save == (off_t) -1)
      return -1;
  
!   off = lseek (fd, 0, SEEK_END);
    if (off == (off_t) -1)
      return -1;
    fsize = (ssize_t) off;
  
!   off = lseek (fd, save, SEEK_SET);
    if (off == (off_t) -1)
      return -1;
  
    return fsize;
  }
  
! /* Read bytes from file into buffer given a file descriptor.  */
  
  ssize_t
! a68_file_read (int fd, void *buf, size_t n)
  {
    size_t to_do = n;
    int restarts = 0;
    char *z = (char *) buf;
*************** read_source_file (const char *filename)
*** 344,350 ****
      fatal_error (UNKNOWN_LOCATION, "specified file %s is a directory",
  		 filename);
  
!   l = a68_file_size (f);
    if (l < 0)
      error ("could not get size of source file");
    source_file_size = l;
--- 343,349 ----
      fatal_error (UNKNOWN_LOCATION, "specified file %s is a directory",
  		 filename);
  
!   l = a68_file_size (fileno (f));
    if (l < 0)
      error ("could not get size of source file");
    source_file_size = l;
*************** read_source_file (const char *filename)
*** 364,370 ****
    /* Read the file into a single buffer, so we save on system calls.  */
    line_num = 1;
    buffer = (char *) xmalloc (8 + source_file_size);
!   bytes_read = a68_file_read (f, buffer, source_file_size);
    gcc_assert (bytes_read == source_file_size);
  
    /* Link all lines into the list.  */
--- 363,369 ----
    /* Read the file into a single buffer, so we save on system calls.  */
    line_num = 1;
    buffer = (char *) xmalloc (8 + source_file_size);
!   bytes_read = a68_file_read (fileno (f), buffer, source_file_size);
    gcc_assert (bytes_read == source_file_size);
  
    /* Link all lines into the list.  */
*************** include_files (LINE_T *top)
*** 1078,1089 ****
  	      fp = fopen (fn, "r");
  	      SCAN_ERROR (fp == NULL, start_l, start_c,
  			  "error opening included file");
! 	      ssize = a68_file_size (fp);
  	      SCAN_ERROR (ssize < 0, start_l, start_c,
  			  "error getting included file size");
  	      fsize = ssize;
  	      fbuf = (char *) xmalloc (8 + fsize);
! 	      bytes_read = (int) a68_file_read (fp, fbuf, (size_t) fsize);
  	      SCAN_ERROR ((size_t) bytes_read != fsize, start_l, start_c,
  			  "error while reading file");
  
--- 1077,1088 ----
  	      fp = fopen (fn, "r");
  	      SCAN_ERROR (fp == NULL, start_l, start_c,
  			  "error opening included file");
! 	      ssize = a68_file_size (fileno (fp));
  	      SCAN_ERROR (ssize < 0, start_l, start_c,
  			  "error getting included file size");
  	      fsize = ssize;
  	      fbuf = (char *) xmalloc (8 + fsize);
! 	      bytes_read = (int) a68_file_read (fileno (fp), fbuf, (size_t) fsize);
  	      SCAN_ERROR ((size_t) bytes_read != fsize, start_l, start_c,
  			  "error while reading file");
  
diff -Nrcpad gcc-16-20251221/gcc/algol68/a68-parser-scope.cc gcc-16-20251228/gcc/algol68/a68-parser-scope.cc
*** gcc-16-20251221/gcc/algol68/a68-parser-scope.cc	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/algol68/a68-parser-scope.cc	Sun Dec 28 22:32:06 2025
*************** static void scope_statement (NODE_T *, S
*** 54,59 ****
--- 54,60 ----
  static void scope_enclosed_clause (NODE_T *, SCOPE_T **);
  static void scope_formula (NODE_T *, SCOPE_T **);
  static void scope_routine_text (NODE_T *, SCOPE_T **);
+ static void scope_access_clause (NODE_T *, SCOPE_T **);
  
  /*
   * Static scope checker.
*************** scope_loop_clause (NODE_T *p)
*** 898,903 ****
--- 899,916 ----
      }
  }
  
+ /* Scope and access-clause.  */
+ 
+ static void
+ scope_access_clause (NODE_T *p, SCOPE_T **s)
+ {
+   for (; p != NO_NODE; FORWARD (p))
+     {
+       if (IS (p, ENCLOSED_CLAUSE))
+ 	scope_enclosed_clause (SUB (p), s);
+     }
+ }
+ 
  /* Scope_enclosed_clause.  */
  
  static void
*************** scope_enclosed_clause (NODE_T *p, SCOPE_
*** 915,920 ****
--- 928,935 ----
      scope_case_clause (SUB (p), s);
    else if (IS (p, LOOP_CLAUSE))
      scope_loop_clause (SUB (p));
+   else if (IS (p, ACCESS_CLAUSE))
+     scope_access_clause (SUB (p), s);
  }
  
  /* Whether a symbol table contains no (anonymous) definition.  */
diff -Nrcpad gcc-16-20251221/gcc/algol68/a68-parser-taxes.cc gcc-16-20251228/gcc/algol68/a68-parser-taxes.cc
*** gcc-16-20251221/gcc/algol68/a68-parser-taxes.cc	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/algol68/a68-parser-taxes.cc	Sun Dec 28 22:32:06 2025
*************** tax_identity_dec (NODE_T *p, MOID_T **m)
*** 890,895 ****
--- 890,899 ----
  	  tax_identity_dec (SUB (p), m);
  	  tax_identity_dec (NEXT (p), m);
  	}
+       else if (IS (p, PUBLIC_SYMBOL))
+ 	{
+ 	  tax_identity_dec (NEXT (p), m);
+ 	}
        else if (IS (p, DECLARER))
  	{
  	  tax_tags (SUB (p));
*************** tax_variable_dec (NODE_T *p, int *q, MOI
*** 939,944 ****
--- 943,952 ----
  	  tax_variable_dec (SUB (p), q, m, e);
  	  tax_variable_dec (NEXT (p), q, m, e);
  	}
+       else if (IS (p, PUBLIC_SYMBOL))
+ 	{
+ 	  tax_variable_dec (NEXT (p), q, m, e);
+ 	}
        else if (IS (p, DECLARER))
  	{
  	  tax_tags (SUB (p));
*************** tax_proc_variable_dec (NODE_T *p, int *q
*** 1009,1015 ****
  	  *q = ATTRIBUTE (SUB (p));
  	  tax_proc_variable_dec (NEXT (p), q, true);
  	}
!       else if (a68_is_one_of (p, PROC_SYMBOL, COMMA_SYMBOL, STOP))
  	{
  	  tax_proc_variable_dec (NEXT (p), q, e);
  	}
--- 1017,1023 ----
  	  *q = ATTRIBUTE (SUB (p));
  	  tax_proc_variable_dec (NEXT (p), q, true);
  	}
!       else if (a68_is_one_of (p, PUBLIC_SYMBOL, PROC_SYMBOL, COMMA_SYMBOL, STOP))
  	{
  	  tax_proc_variable_dec (NEXT (p), q, e);
  	}
*************** tax_proc_dec (NODE_T *p)
*** 1059,1065 ****
  	  tax_proc_dec (SUB (p));
  	  tax_proc_dec (NEXT (p));
  	}
!       else if (a68_is_one_of (p, PROC_SYMBOL, COMMA_SYMBOL, STOP))
  	{
  	  tax_proc_dec (NEXT (p));
  	}
--- 1067,1073 ----
  	  tax_proc_dec (SUB (p));
  	  tax_proc_dec (NEXT (p));
  	}
!       else if (a68_is_one_of (p, PUBLIC_SYMBOL, PROC_SYMBOL, COMMA_SYMBOL, STOP))
  	{
  	  tax_proc_dec (NEXT (p));
  	}
*************** tax_op_dec (NODE_T *p, MOID_T **m)
*** 1136,1142 ****
  	{
  	  tax_op_dec (NEXT (p), m);
  	}
!       else if (IS (p, COMMA_SYMBOL))
  	{
  	  tax_op_dec (NEXT (p), m);
  	}
--- 1144,1150 ----
  	{
  	  tax_op_dec (NEXT (p), m);
  	}
!       else if (a68_is_one_of (p, PUBLIC_SYMBOL, COMMA_SYMBOL, STOP))
  	{
  	  tax_op_dec (NEXT (p), m);
  	}
*************** tax_module_dec (NODE_T *p)
*** 1180,1197 ****
  	{
  	  tax_module_dec (NEXT (p));
  	}
-       else if (IS (p, DEFINING_MODULE_INDICANT))
- 	{
- 	  TAG_T *entry = MODULES (TABLE (p));
- 	  while (entry != NO_TAG && NODE (entry) != p)
- 	    FORWARD (entry);
- 	  MOID (p) = NO_MOID;
- 	  TAX (p) = entry;
- 	  HEAP (entry) = LOC_SYMBOL;
- 	  MOID (entry) = NO_MOID;
- 	  PUBLICIZED (entry) = PUBLICIZED (p);
- 	  tax_module_dec (NEXT (p));
- 	}
        else
  	{
  	  tax_tags (p);
--- 1188,1193 ----
*************** tax_brief_op_dec (NODE_T *p)
*** 1211,1217 ****
  	  tax_brief_op_dec (SUB (p));
  	  tax_brief_op_dec (NEXT (p));
  	}
!       else if (a68_is_one_of (p, OP_SYMBOL, COMMA_SYMBOL, STOP))
  	{
  	  tax_brief_op_dec (NEXT (p));
  	}
--- 1207,1213 ----
  	  tax_brief_op_dec (SUB (p));
  	  tax_brief_op_dec (NEXT (p));
  	}
!       else if (a68_is_one_of (p, PUBLIC_SYMBOL, OP_SYMBOL, COMMA_SYMBOL, STOP))
  	{
  	  tax_brief_op_dec (NEXT (p));
  	}
*************** static void tax_prio_dec (NODE_T *p)
*** 1247,1253 ****
  	  tax_prio_dec (SUB (p));
  	  tax_prio_dec (NEXT (p));
  	}
!       else if (a68_is_one_of (p, PRIO_SYMBOL, COMMA_SYMBOL, STOP))
  	{
  	  tax_prio_dec (NEXT (p));
  	}
--- 1243,1249 ----
  	  tax_prio_dec (SUB (p));
  	  tax_prio_dec (NEXT (p));
  	}
!       else if (a68_is_one_of (p, PUBLIC_SYMBOL, PRIO_SYMBOL, COMMA_SYMBOL, STOP))
  	{
  	  tax_prio_dec (NEXT (p));
  	}
diff -Nrcpad gcc-16-20251221/gcc/algol68/a68-parser-top-down.cc gcc-16-20251228/gcc/algol68/a68-parser-top-down.cc
*** gcc-16-20251221/gcc/algol68/a68-parser-top-down.cc	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/algol68/a68-parser-top-down.cc	Sun Dec 28 22:32:06 2025
*************** top_down_def (NODE_T *def_p)
*** 495,503 ****
  
  /* Make branch of
  
!    ACCESS REVELATION [DEF_SYMBOL]
     or
!    ACCESS REVELATION ENCLOSED_CLAUSE.   */
  
  static void
  top_down_access (NODE_T *p)
--- 495,503 ----
  
  /* Make branch of
  
!    ACCESS REVELATIONS [DEF_SYMBOL]
     or
!    ACCESS REVELATIONS ENCLOSED_CLAUSE.   */
  
  static void
  top_down_access (NODE_T *p)
*************** top_down_access (NODE_T *p)
*** 530,535 ****
--- 530,540 ----
  		  a68_make_sub (q, end_p, ALT_ACCESS_SYMBOL);
  		}
  	    }
+ 	  else if (IS (end_p, ACCESS_SYMBOL))
+ 	    {
+ 	      top_down_access (end_p);
+ 	      a68_make_sub (q, end_p, ACCESS_SYMBOL);
+ 	    }
  	  else
  	    a68_make_sub (q, end_p, ACCESS_SYMBOL);
  	}
*************** a68_top_down_parser (NODE_T *p)
*** 886,894 ****
  	(void) top_down_prelude_packet (p);
        else
  	(void) top_down_particular_program (p);
-     }
  
!   top_down_loops (p);
!   top_down_formats (p);
!   top_down_access (p);
  }
--- 891,899 ----
  	(void) top_down_prelude_packet (p);
        else
  	(void) top_down_particular_program (p);
  
!       top_down_loops (p);
!       top_down_formats (p);
!       top_down_access (p);
!     }
  }
diff -Nrcpad gcc-16-20251221/gcc/algol68/a68-parser.cc gcc-16-20251228/gcc/algol68/a68-parser.cc
*** gcc-16-20251221/gcc/algol68/a68-parser.cc	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/algol68/a68-parser.cc	Sun Dec 28 22:32:06 2025
*************** a68_parser (const char *filename)
*** 446,451 ****
--- 446,452 ----
    A68_PARSER (error_tag) = (TAG_T *) a68_new_tag ();
    TOP_NODE (&A68_JOB) = NO_NODE;
    TOP_MOID (&A68_JOB) = NO_MOID;
+   TOP_MOIF (&A68_JOB) = NO_MOIF;
    TOP_LINE (&A68_JOB) = NO_LINE;
    STANDENV_MOID (&A68_JOB) = NO_MOID;
    a68_set_up_tables ();
*************** a68_parser (const char *filename)
*** 522,528 ****
        //      printf ("AFTER PRELIMINARY SYMBOL TABLE SETUP\n");
        //      a68_dump_parse_tree (TOP_NODE (&A68_JOB), true);
        a68_bottom_up_parser (TOP_NODE (&A68_JOB));
-       a68_bottom_up_coalesce_pub (TOP_NODE (&A68_JOB));
        renum = 0;
        renumber_nodes (TOP_NODE (&A68_JOB), &renum);
      }
--- 523,528 ----
*************** a68_new_tag (void)
*** 785,791 ****
    VARIABLE (z) = false;
    IS_RECURSIVE (z) = false;
    PUBLICIZED (z) = true; /* XXX */
-   EXPORTED (z) = false;
    ASCRIBED_ROUTINE_TEXT (z) = false;
    LOWERER (z) = NO_LOWERER;
    TAX_TREE_DECL (z) = NULL_TREE;
--- 785,790 ----
diff -Nrcpad gcc-16-20251221/gcc/algol68/a68-types.h gcc-16-20251228/gcc/algol68/a68-types.h
*** gcc-16-20251221/gcc/algol68/a68-types.h	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/algol68/a68-types.h	Sun Dec 28 22:32:06 2025
*************** struct GTY(()) TABLE_T
*** 585,593 ****
     PUBLICIZED is set for tags that are marked as public and therefore shall be
     exported as part of a module interface.
  
-    EXPORTED is set for DEFINING_MODULEs whose module interface is to be
-    exported.
- 
     ASCRIBED_ROUTINE_TEXT is set when the defining identifier is ascribed a
     routine-text in an identity declaration.
  
--- 585,590 ----
*************** struct GTY((chain_next ("%h.next"))) TAG
*** 621,627 ****
    NODE_T *node, *unit;
    const char *value;
    bool scope_assigned, use, in_proc, loc_assigned, portable, variable;
!   bool ascribed_routine_text, is_recursive, publicized, exported;
    int priority, heap, scope, youngest_environ, number;
    STATUS_MASK_T status;
    tree tree_decl;
--- 618,624 ----
    NODE_T *node, *unit;
    const char *value;
    bool scope_assigned, use, in_proc, loc_assigned, portable, variable;
!   bool ascribed_routine_text, is_recursive, publicized;
    int priority, heap, scope, youngest_environ, number;
    STATUS_MASK_T status;
    tree tree_decl;
*************** struct GTY(()) MODULE_T
*** 645,650 ****
--- 642,648 ----
    int error_count, warning_count, source_scan;
    LINE_T *top_line;
    MOID_T *top_moid, *standenv_moid;
+   MOIF_T *top_moif;
    NODE_T *top_node;
    OPTIONS_T options;
    FILE * GTY ((skip)) file_source_fd;
*************** struct GTY(()) EXTRACT_T
*** 706,712 ****
  
  #define NO_MOIF ((MOIF_T *) 0)
  
! struct GTY(()) MOIF_T
  {
    unsigned int version;
    const char *name;
--- 704,710 ----
  
  #define NO_MOIF ((MOIF_T *) 0)
  
! struct GTY((chain_next ("%h.next"))) MOIF_T
  {
    unsigned int version;
    const char *name;
*************** struct GTY(()) MOIF_T
*** 718,723 ****
--- 716,722 ----
    vec<EXTRACT_T*,va_gc> *identifiers;
    vec<EXTRACT_T*,va_gc> *prios;
    vec<EXTRACT_T*,va_gc> *operators;
+   MOIF_T *next;
  };
  
  struct MODE_CACHE_T
*************** struct GTY(()) A68_T
*** 929,935 ****
  #define EQUIVALENT(p) ((p)->equivalent_mode)
  #define EQUIVALENT_MODE(p) ((p)->equivalent_mode)
  #define ERROR_COUNT(p) ((p)->error_count)
- #define EXPORTED(p) ((p)->exported)
  #define EXTERN_SYMBOL(p) ((p)->extern_symbol)
  #define EXTRACT_IN_PROC(p) ((p)->in_proc)
  #define EXTRACT_KIND(p) ((p)->kind)
--- 928,933 ----
*************** struct GTY(()) A68_T
*** 1096,1101 ****
--- 1094,1100 ----
  #define TEXT(p) ((p)->text)
  #define TOP_LINE(p) ((p)->top_line)
  #define TOP_MOID(p) ((p)->top_moid)
+ #define TOP_MOIF(p) ((p)->top_moif)
  #define TOP_NODE(p) ((p)->top_node)
  #define TRANSIENT(p) ((p)->transient)
  #define TREE_LISTING_SAFE(p) ((p)->tree_listing_safe)
diff -Nrcpad gcc-16-20251221/gcc/algol68/a68.h gcc-16-20251228/gcc/algol68/a68.h
*** gcc-16-20251221/gcc/algol68/a68.h	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/algol68/a68.h	Sun Dec 28 22:32:06 2025
*************** void a68_scan_error (LINE_T *u, char *v,
*** 281,288 ****
  /* a68-parser-scanner.cc  */
  
  bool a68_lexical_analyser (const char *filename, bool *empty_file);
! ssize_t a68_file_size (FILE *file);
! ssize_t a68_file_read (FILE *file, void *buf, size_t n);
  
  /* a68-parser.cc  */
  
--- 281,288 ----
  /* a68-parser-scanner.cc  */
  
  bool a68_lexical_analyser (const char *filename, bool *empty_file);
! ssize_t a68_file_size (int fd);
! ssize_t a68_file_read (int fd, void *buf, size_t n);
  
  /* a68-parser.cc  */
  
diff -Nrcpad gcc-16-20251221/gcc/algol68/ga68.texi gcc-16-20251228/gcc/algol68/ga68.texi
*** gcc-16-20251221/gcc/algol68/ga68.texi	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/algol68/ga68.texi	Sun Dec 28 22:32:06 2025
*************** modules and separated compilation suppor
*** 407,413 ****
  @menu
  * Packets::                  Compilation units.
  * Modules::                  Facilities for bottom-up programming.
- * Holes::                    Facilities for top-down programming.
  * Particular programs::      The main program.
  * The standard environment:: Environment conforming a full program.
  @end menu
--- 407,412 ----
*************** modules and separated compilation suppor
*** 417,453 ****
  @cindex packet
  @cindex compilation unit
  
! Each Algol 68 source file contains a @dfn{packet}.  Packets therefore
! play the role of @dfn{compilation units}, and each packet can be
! compiled separately to an object file.  A set of compiled object files
! can then be linked in the usual fashion into an executable, archive or
! shared object by the system linker, without the need of any
! language-specific link editor or build system.
  
  @noindent
! This compiler supports three different kind of packets:
  
  @itemize @minus
  @item
  @dfn{Particular programs} constitute the entry point of a program.
! They correspond to the @code{main} function of other languages like C.
  
  @xref{Particular programs}.
  
  @item
! @dfn{Prelude packets} contain the definition of one or more modules,
! which @dfn{publicize} definitions of modes, procedures, variables,
! operators and even the publicized definitions of other modules.  The
! modules defined at the top-level of a prelude packet can be accessed
! by other packets via an @code{@B{access}} construct.  Prelude packets
! are so-called because their contents get stuffed in the
  @dfn{user-prelude} in the case of user-defined modules, or the
  @dfn{library-prelude} in the case of module packets provided by the
  compiler.  They are usually used to compose libraries that can be used
  in a bottom-up fashion.
  
  @xref{Modules}.
  
  @item
  @dfn{Stuffing packets} contain the definition of an @dfn{actual hole},
  an @code{@B{egg}} construct, that can be stuffed in a matching
--- 416,460 ----
  @cindex packet
  @cindex compilation unit
  
! Each Algol 68 source file, which are files using the file extension
! @file{.a68}, contains the definition of a so-called @dfn{packet}.
! Packets therefore play the role of @dfn{compilation units}, and each
! packet can be compiled separately to an object file.  A set of
! compiled object files can then be linked in the usual fashion into an
! executable, archive or shared object by the system linker, without the
! need of any language-specific link editor or build system.
  
  @noindent
! This compiler supports two different kind of packets:
  
  @itemize @minus
  @item
  @dfn{Particular programs} constitute the entry point of a program.
! They roughly speaking correspond to the @code{main} function of other
! languages like C.
  
  @xref{Particular programs}.
  
  @item
! @dfn{Prelude packets} contain the definition of @dfn{modules}, which
! @dfn{publicize} definitions of modes, procedures, variables, operators
! and even the publicized definitions of other modules.  Each prelude
! packet defines a single packet, defined at the top-level, which can be
! accessed by other packets (be them particular programs or other
! prelude packets) via an @code{@B{access}} construct.  Prelude packets
! are so-called because their contents get conceptually stuffed in the
  @dfn{user-prelude} in the case of user-defined modules, or the
  @dfn{library-prelude} in the case of module packets provided by the
  compiler.  They are usually used to compose libraries that can be used
  in a bottom-up fashion.
  
  @xref{Modules}.
+ @end itemize
  
+ Future versions of this compiler will eventually support a third kind
+ of packet, oriented to top-down development:
+ 
+ @itemize @minus
  @item
  @dfn{Stuffing packets} contain the definition of an @dfn{actual hole},
  an @code{@B{egg}} construct, that can be stuffed in a matching
*************** Formal holes are used in order to achiev
*** 456,462 ****
  top-bottom fashion, and also to invoke procedures written in other
  languages, such as C functions or Fortran subroutines.
  
- @xref{Holes}.
  @end itemize
  
  A @dfn{collection of packets}, all of which must be compatible with
--- 463,468 ----
*************** conform bigger components.
*** 484,489 ****
--- 490,496 ----
  * Writing modules::                Writing modules.
  * Accessing modules::              Using the definitions of a module.
  * Module activation::              How and when modules execute.
+ * Modules and exports::            How the compiler searches for modules.
  * Modules and libraries::          Using modules to conform libraries.
  * Modules and protection::         When block structure is not enough.
  @end menu
*************** conform bigger components.
*** 492,524 ****
  @subsection Writing modules
  
  A @dfn{definition module} is a construct that provides access to a set
! of publicized definitions.  They can appear anywhere, but are
! typically found in the outer reach and compiled separately, in which
! case they conform a prelude packet (@pxref{Packets}).  They are
! composed of a prelude and a postlude.  The publicized definitions
! appear in the module's prelude.
  
  Consider for example the following definition module, which implements
  a very simple logging facility:
  
  @example
  @B{module} @B{Logger} =
!    @B{def} @B{int} fd = stderr;
!        @B{pub} @B{string} originator;
!        @B{pub} @B{proc} log = (@B{string} msg) @B{void}:
!               fputs (fd, (originator /= "" | ": ") + msg + "\n");
  
!        log ("beginning of log\n");
!    @B{postlude}
!        log ("end of log\n");
!    @B{fed}
  @end example
  
  @noindent
  The @dfn{module text} delimited by @code{@B{def}} and @code{@B{fed}}
  gets ascribed to the module indicator @code{@B{Logger}}.  Module
! indicators are bold tags.  Once defined, the module @code{@B{Logger}}
! is accessible anywhere within its reach.
  
  The @dfn{prelude} of the module spans from @code{@B{def}} to either
  @code{@B{postlude}}, or to @code{@B{fed}} in case of modules not
--- 499,529 ----
  @subsection Writing modules
  
  A @dfn{definition module} is a construct that provides access to a set
! of publicized definitions.  They appear in the outer reach of a
! prelude packet and constitute its only contents (@pxref{Packets}).
! They are composed of a prelude and a postlude.  The publicized
! definitions appear in the module's prelude.
  
  Consider for example the following definition module, which implements
  a very simple logging facility:
  
  @example
  @B{module} @B{Logger} =
! @B{def} @B{int} fd = stderr;
!     @B{pub} @B{string} originator;
!     @B{pub} @B{proc} log = (@B{string} msg) @B{void}:
!            fputs (fd, (originator /= "" | ": ") + msg + "'n");
  
!     log ("beginning of log'n");
! @B{postlude}
!     log ("end of log'n");
! @B{fed}
  @end example
  
  @noindent
  The @dfn{module text} delimited by @code{@B{def}} and @code{@B{fed}}
  gets ascribed to the module indicator @code{@B{Logger}}.  Module
! indicators are bold tags.
  
  The @dfn{prelude} of the module spans from @code{@B{def}} to either
  @code{@B{postlude}}, or to @code{@B{fed}} in case of modules not
*************** them.  Publicized declarations are marke
*** 531,537 ****
  @code{@B{pub}}.
  
  In our example the module prelude consists on three declarations and
! one unit.  The indicator @code{fd} is not publicized and is to be used
  internally by the module.  The indicators @code{originator} and
  @code{log}, on the other hand, are publicized and conform the
  interface of the module.  Note how the range of the prelude also
--- 536,542 ----
  @code{@B{pub}}.
  
  In our example the module prelude consists on three declarations and
! one unit.  The tag @code{fd} is not publicized and is to be used
  internally by the module.  The indicators @code{originator} and
  @code{log}, on the other hand, are publicized and conform the
  interface of the module.  Note how the range of the prelude also
*************** module accesses are not allowed, just un
*** 546,559 ****
  @node Accessing modules
  @subsection Accessing modules
  
! Once a module is defined (@pxref{Writing modules}) it can be accessed,
! provided it is within reach, using an @dfn{access clause}.  The access
! clause identifies the modules to access and then makes the publicized
  definitions of these modules visible within a @dfn{control clause}.
  
  For example, this is how we could use the logger definition module
! defined in a previous section to log the progress of some program that
! reads an input file and writes some output file:
  
  @example
  @B{access} @B{Logger}
--- 551,564 ----
  @node Accessing modules
  @subsection Accessing modules
  
! Once a module is defined (@pxref{Writing modules}) it can be accessed
! from other packets using an @dfn{access clause}.  The access clause
! identifies the modules to access and then makes the publicized
  definitions of these modules visible within a @dfn{control clause}.
  
  For example, this is how we could use the logger definition module
! defined in a previous section to log the progress of some particular
! program that reads an input file and writes some output file:
  
  @example
  @B{access} @B{Logger}
*************** logger and json modules accessible like
*** 589,605 ****
  
  @example
  @B{access} @B{Logger}, @B{JSON}
! @B{begin} # Identify ourselves with the program name #
        originator := argv (1);
  
        @B{JSONVal} data;
  
!       # Read input file.  #
        @B{if} data := json_from_file (argv (2));
!          data = json no val
        @B{then} log ("error parsing input file"); stop @B{fi};
  
!       # Write output file.  #
        @B{if} @B{not} json_to_file (argv (3), data)
        @B{then} log ("error writing output file"); stop @B{fi};
  
--- 594,610 ----
  
  @example
  @B{access} @B{Logger}, @B{JSON}
! @B{begin} @{ Identify ourselves with the program name @}
        originator := argv (1);
  
        @B{JSONVal} data;
  
!       @{ Read input file.  @}
        @B{if} data := json_from_file (argv (2));
!          data = json_no_val
        @B{then} log ("error parsing input file"); stop @B{fi};
  
!       @{ Write output file.  @}
        @B{if} @B{not} json_to_file (argv (3), data)
        @B{then} log ("error writing output file"); stop @B{fi};
  
*************** logger and json modules accessible like
*** 609,618 ****
  
  @noindent
  In this version of the program the access clause includes the module
! indicator @code{@B{json}}, and that makes the mode indicator
! @code{@B{jsonval}} and the tags @code{@B{json no val}}, @code{json
! from file} and @code{json to file} visible within the program's
! closed clause.
  
  Note that the following two access clauses are not equivalent:
  
--- 614,623 ----
  
  @noindent
  In this version of the program the access clause includes the module
! indicator @code{@B{JSON}}, and that makes the mode indicator
! @code{@B{jsonval}} and the tags @code{json_no_val},
! @code{json_from_file} and @code{json_to_file} visible within the
! program's closed clause.
  
  Note that the following two access clauses are not equivalent:
  
*************** value becomes the value yielded by the a
*** 671,720 ****
  
  @subsubsection Modules accessing other modules
  
! A definition module may itself access other modules.  This is done by
! placing the module text as a controlled clause of an access clause.
  Suppose we rewrite our logger module so it uses JSON internally to log
  JSON objects rather than raw strings.  We could do it this way:
  
  @example
! @B{module} @B{logger} =
!    @B{access} @B{json}
     @B{def} @B{int} fd = stderr;
         @B{pub} @B{string} originator;
         @B{pub} @B{proc} log = (@B{string} msg) @B{void}:
!               fputs (fd, json array (json string (originator),
!                                      json string (msg)));
  
!        log (json string ("beginning of log\n"));
     @B{postlude}
!        log (json string ("end of log\n"));
     @B{fed}
  @end example
  
  @noindent
! Note how this version of @code{@B{logger}} uses a few definitions
! publicized by the @code{@B{json}} module.
  
! A program accessing @code{@B{logger}} will not see the definitions
! publicized by the @code{@B{json}} module.  If that is what we
  intended, for example to allow the users of the logger to tweak their
  own JSON, we would need to specify it this way:
  
  @example
! @B{module} @B{logger} =
!    @B{access} @B{pub} @B{json}
     @B{def} @B{c} ...as before... @B{c} @B{fed}
  @end example
  
  @noindent
! In this version the definitions publicized by @code{@B{json}} become
! visible to programs accessing @code{@B{logger}}.
  
  @node Module activation
  @subsection Module activation
  
  In all the examples seen so far the modules were accessed just once.
! In these cases, accessing the module via an access-clause caused the
  @dfn{activation} of the module.
  
  Activating a module involves elaborating all the declarations and
--- 676,726 ----
  
  @subsubsection Modules accessing other modules
  
! Up to this point we have seen particular programs accessing modules,
! but a definition module may itself access other modules.  This is done
! by placing the module text as a controlled clause of an access clause.
  Suppose we rewrite our logger module so it uses JSON internally to log
  JSON objects rather than raw strings.  We could do it this way:
  
  @example
! @B{module} @B{Logger} =
!    @B{access} @B{JSON}
     @B{def} @B{int} fd = stderr;
         @B{pub} @B{string} originator;
         @B{pub} @B{proc} log = (@B{string} msg) @B{void}:
!               fputs (fd, json_array (json_string (originator),
!                                      json_string (msg)));
  
!        log (json_string ("beginning of log'n"));
     @B{postlude}
!        log (json_string ("end of log'n"));
     @B{fed}
  @end example
  
  @noindent
! Note how this version of @code{@B{Logger}} uses a few definitions
! publicized by the @code{@B{JSON}} module.
  
! A program accessing @code{@B{Logger}} will not see the definitions
! publicized by the @code{@B{JSON}} module.  If that is what we
  intended, for example to allow the users of the logger to tweak their
  own JSON, we would need to specify it this way:
  
  @example
! @B{module} @B{Logger} =
!    @B{access} @B{pub} @B{JSON}
     @B{def} @B{c} ...as before... @B{c} @B{fed}
  @end example
  
  @noindent
! In this version the definitions publicized by @code{@B{JSON}} become
! visible to programs accessing @code{@B{Logger}}.
  
  @node Module activation
  @subsection Module activation
  
  In all the examples seen so far the modules were accessed just once.
! In these cases, accessing the module via an access-clause causes the
  @dfn{activation} of the module.
  
  Activating a module involves elaborating all the declarations and
*************** more than once in the same program.  The
*** 733,752 ****
  use of the @code{@B{logger}} module, exemplifies this:
  
  @example
! @B{access} @B{logger}
  @B{begin} originator := argv (1);
        log ("executing program");
        @B{c} ... @B{c}
!       @B{access} @B{logger} (originator := argv (1) + ":subtask";
                       log ("doing subtask")
                       @B{c} ... @B{c})
  @B{end}
  @end example
  
  @noindent
! In this program the module @code{@B{logger}} is accessed twice.  The
  code is obviously written assuming that the inner access clause
! triggers a new activation of the @code{@B{logger}} module, allocating
  new storage and executing its prelude.  This would result in the
  following log contents:
  
--- 739,758 ----
  use of the @code{@B{logger}} module, exemplifies this:
  
  @example
! @B{access} @B{Logger}
  @B{begin} originator := argv (1);
        log ("executing program");
        @B{c} ... @B{c}
!       @B{access} @B{Logger} (originator := argv (1) + ":subtask";
                       log ("doing subtask")
                       @B{c} ... @B{c})
  @B{end}
  @end example
  
  @noindent
! In this program the module @code{@B{Logger}} is accessed twice.  The
  code is obviously written assuming that the inner access clause
! triggers a new activation of the @code{@B{Logger}} module, allocating
  new storage and executing its prelude.  This would result in the
  following log contents:
  
*************** the logger to support several originator
*** 778,820 ****
  need to add support for it in the definition module.  Something like:
  
  @example
! @B{module} @B{logger} =
!    @B{def} @B{int} fd = stderr, max originators = 10;
         @B{int} orig := 0;
!        [max originators]@B{string} originators;
  
!        @B{pub} @B{proc} push originator = (@B{string} str) @B{void}:
!               (@B{assert} (orig < max originators);
                 orig +:= 1;
                 originators[orig] := str);
!        @B{pub} @B{proc} pop originator = @B{void}:
!               (@B{assert} (max originators > 0);
                 orig -:= 1);
         @B{pub} @B{proc} log = (@B{string} msg) @B{void}:
!               fputs (fd, (originator[orig] /= "" | ": ") + msg + "\n");
  
!        log ("beginning of log\n");
     @B{postlude}
!        log ("end of log\n");
     @B{fed}
  @end example
  
  @noindent
! Note how in this version of @code{@B{logger}} @code{originators} acts
  as a stack of originator strings, and it is not publicized.  The
  management of the stack is done via a pair of publicized procedures
! @code{push originator} and @code{pop originator}.  Our program will
  now look like:
  
  @example
! @B{access} @B{logger}
! @B{begin} push originator (argv (1));
        log ("executing program");
        @B{c} ... @B{c}
!       @B{access} @B{logger} (push originator ("subtask");
                       log ("doing subtask")
                       @B{c} ... @B{c};
!                      pop originator)
  @B{end}
  @end example
  
--- 784,826 ----
  need to add support for it in the definition module.  Something like:
  
  @example
! @B{module} @B{Logger} =
!    @B{def} @B{int} fd = stderr, max_originators = 10;
         @B{int} orig := 0;
!        [max_originators]@B{string} originators;
  
!        @B{pub} @B{proc} push_originator = (@B{string} str) @B{void}:
!               (@B{assert} (orig < max_originators);
                 orig +:= 1;
                 originators[orig] := str);
!        @B{pub} @B{proc} pop_originator = @B{void}:
!               (@B{assert} (max_originators > 0);
                 orig -:= 1);
         @B{pub} @B{proc} log = (@B{string} msg) @B{void}:
!               fputs (fd, (originator[orig] /= "" | ": ") + msg + "'n");
  
!        log ("beginning of log'n");
     @B{postlude}
!        log ("end of log'n");
     @B{fed}
  @end example
  
  @noindent
! Note how in this version of @code{@B{Logger}} @code{originators} acts
  as a stack of originator strings, and it is not publicized.  The
  management of the stack is done via a pair of publicized procedures
! @code{push_originator} and @code{pop_originator}.  Our program will
  now look like:
  
  @example
! @B{access} @B{Logger}
! @B{begin} push_originator (argv (1));
        log ("executing program");
        @B{c} ... @B{c}
!       @B{access} @B{logger} (push_originator ("subtask");
                       log ("doing subtask")
                       @B{c} ... @B{c};
!                      pop_originator)
  @B{end}
  @end example
  
*************** a.out:subtask: doing subtask
*** 828,882 ****
  a.out: end of log
  @end example
  
  
! --------------------------------------------------------------
  
! module-indications are used to find interface-definitions of modules:
  
!   ACCESS FOO SKIP
  
! Looks for (in order):
  
!   foo.m68
!   foo.o
!   libfoo.so
  
! Should we use instead:
  
!   ACCESS "foo" SKIP
  
! That would use for module indicators the same syntax than hole
! indicators.
  
! Modules get accessed, invoked and revoked.
  
! Access clauses:
  
! : ACCESS A, B <enclosed clause>
  
! Where A and B are ``revelations''.
  
! In
  
! : MODULE A = ACCESS B DEF ... FED
  
! Doesn't reveals any contents of B.  Whereas in:
  
! : MODULE A = ACCESS PUB B DEF .. FED
  
! The module A is also revealing B's public declarations.  So accessing
! A provides access to B.
  
! User-defined preludes go to the user-prelude.
  
! Invocation and revocation:: How modules are executed.
  
! It is possible for a definition module to not publicize any
! definition.  Such modules would be used only for the side effects
! produced from executing the prelude and postlude when the module gets
! invoked and revoked. XXX: provide an example?
  
! XXX
  
  @node Modules and libraries
  @subsection Modules and libraries
--- 834,980 ----
  a.out: end of log
  @end example
  
+ @node Modules and exports
+ @subsection Modules and exports
+ @cindex exports
  
! As we have seen, each Algol 68 source file contains either a
! particular program or a prelude packet.  Prelude packets consist on
! the definition of a single top-level module, that is itself identified
! by a module indicant.
  
! Consider for example a source file called @file{trilean.a68} that
! implements strong Kleene three-valued (``trilean'') logic.  It does so
! by the mean of a definition module called @code{@B{Trilean}}.  A
! sketch of such a file may look like this:
  
! @example
! @B{module} @B{Trilean} =
! @B{def}
!     @B{pub} @B{mode} @B{Tril} = @B{int};
  
!     @B{pub} @B{Tril} dontknow = 0, yes = 1, no = 2;
  
!     @B{pub} @B{prio} @B{AND3} = 3, @B{OR3} = 3, @B{XOR3} = 3;
  
!     @B{pub} @B{op} @B{NOT3} = (@B{Tril} a) @B{Tril}:
!        (a + 1 | dontknow, no, yes);
  
!     @B{C} ... other definitions ... @B{C}
! @B{fed}
! @end example
  
! The module indicant @code{@B{Trilean}} identifies the module.  If we
! now compile this file to an object file using GCC:
  
! @example
! $ ga68 -c trilean.a68
! @end example
  
! The result of the compilation is an object file @file{trilean.o}, plus
! some @dfn{exports information} which is placed in a section in the
! object file, named @code{.a68_exports}.  The exports information
! describes the interface provided by the @code{@B{Trilean}} module
! defined in the compilation unit.  This includes all the modes,
! identifiers, priorities, operators, etc, that are publicized by the
! module.  The particular encoding used to hold these exports is highly
! compact and not easy readable by persons; instead, it is designed to
! be read back by GCC when it builds another compilation unit that, in
! turn, needs to access the @code{@B{Trilean}} module.
  
! Consider the following sketched particular program that resides in a
! source file @file{main.a68}, and that uses trilean logic:
  
! @example
! @B{access} @B{Trilean}
! @B{begin}
!       @B{C} ... @B{C}
! @B{end}
! @end example
  
! When this program gets compiled by GCC using @code{ga68 -c
! program.a68}, the compiler finds the access clause and needs to locate
! some exports for the module @code{@B{Trilean}}.  To do so, it searches
! in the modules search path, composed by the current working directory,
! some system directories and all directories specified in @option{-I}
! and @option{-L} options, looking for files called @file{trilean.m68},
! @file{trilean.so}, @file{trilean.a} and @file{trilean.o}, in that
! order, where:
  
! @table @file
! @item trilean.m68
! Is a stand-alone file expected to contain export data for one or more
! modules.
! @item trilean.so
! Is a DSO, or shared object, expected to contain a @code{.a68_exports}
! section with exports data for one or more modules.
! @item trilean.a
! Is an archive, whose constituent object files may contain
! @code{.a68_exports} sections with exports data for one or more
! modules.
! @item trilean.o
! Is an object file expected to contain export data for one or more
! modules in a @code{.a68_exports} section.
! @end table
  
! The files are tried in order, and if export data for the requested
! module @code{@B{Trilean}} is found, it is read in, decoded, and used
! to compile @file{main.a68} into @file{main.o}.
  
! The last step in obtaining an executable for our program would be to
! use GCC to do a link like @code{ga68 trilean.o main.o -o main}.
  
! Module indicants such as @code{@B{Trilean}} are bold words in the
! language.  This means that, independently of the stropping regime
! used, they are constituted by a bold letter followed by a sequence of
! zero or more bold letters and digits.  Using the modern stropping
! supported by the GNU Algol 68 compiler, this means that all of
! @code{@B{Trilean}}, @code{@B{TRILEAN}} and @code{@B{Tri_lean}} denote
! exactly the same module indicant, @b{trilean}.
  
! The mapping from module indicant to the ``base name'' used to locate
! the module exports is quite straightforward: the bold letters are
! transformed to lower-case letters, and the bold digits are just normal
! digits.  Therefore, the exports for the module
! @code{@B{GRAMP_Grammar}} would looked in files
! @file{grampgrammar.m68}, @file{libgrampgrammar.so}, etc.
  
! But often this default, straightforward mapping, is not what we need.
  
! Suppose for example that a shared object installed in the system,
! @file{liba68goodies.so}, provides many facilities in the form of
! several modules, including a @code{@B{Trilean}} module.  We want to
! use the trilean implementation of liba68goodies in our program
! @file{main.a68}.  If we just @code{@B{access} @B{Trilean}} GCC will
! look for @file{trilean.m68} etc, but wont even consider looking in
! @file{liba68goodies.so}.  Accessing @code{@B{A68Goodies}} is obviously
! not a solution, as the module we want is @code{@B{Trilean}} and there
! may not even be a module called @code{@B{A68Goodies}} in
! @file{liba68goodies.so}.
  
! The solution for this is to use the @dfn{modules map} of the compiler.
! This map is an association or map between module indicants and
! base-names.  When it comes to access some module, the compiler looks
! in the map.  If there is an entry for the module's indicant, then it
! fetches the base-name to use for looking for the module's export data.
! If there is not an entry for the module's indicant then the default,
! straightforward mapping described above is attempted.
! 
! By default the map is empty, but we can add entries by using the
! @option{-fmodules-map=} and @option{-fmodules-map-file=} command-line
! options.  The first option expects entries to be added to the map in a
! string in the command-line, whereas the second option expects the name
! of a file containing the entries to add to the map.  In both cases the
! format describing the entries is exactly the same (@pxref{Module
! search options}).
! 
! In our case, we could compile our main program specifying an entry in
! the map telling the compiler where to find the trilean and logging
! modules:
! 
! @example
! $ ga68 -fmodules-map="a68goodies=Trilean,Logger" -c main.a68
! @end example
  
  @node Modules and libraries
  @subsection Modules and libraries
*************** identify user-defined modes and operator
*** 897,908 ****
  
  XXX
  
- @node Holes
- @section Holes
- @cindex hole
- 
- XXX
- 
  @node Particular programs
  @section Particular programs
  @cindex particular program
--- 995,1000 ----
*************** by a set of zero or more labels.  For ex
*** 913,919 ****
  
  @example
  hello:
! @B{begin} puts ("Hello, world!\n")
  @B{end}
  @end example
  
--- 1005,1011 ----
  
  @example
  hello:
! @B{begin} puts ("Hello, world!'n")
  @B{end}
  @end example
  
*************** following program, that prints out its c
*** 924,930 ****
  
  @example
  @B{for} i @B{to} argc
! @B{do} puts (argv (i) + "\n") @B{od}
  @end example
  
  @menu
--- 1016,1022 ----
  
  @example
  @B{for} i @B{to} argc
! @B{do} puts (argv (i) + "'n") @B{od}
  @end example
  
  @menu
*************** world'' on the standard output and then
*** 960,966 ****
  system with a success status:
  
  @example
! @B{begin} puts ("Hello world\n")
  @B{end}
  @end example
  
--- 1052,1058 ----
  system with a success status:
  
  @example
! @B{begin} puts ("Hello world'n")
  @B{end}
  @end example
  
diff -Nrcpad gcc-16-20251221/gcc/auto-profile.cc gcc-16-20251228/gcc/auto-profile.cc
*** gcc-16-20251221/gcc/auto-profile.cc	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/auto-profile.cc	Sun Dec 28 22:32:06 2025
*************** along with GCC; see the file COPYING3.
*** 122,128 ****
  */
  
  #define DEFAULT_AUTO_PROFILE_FILE "fbdata.afdo"
! #define AUTO_PROFILE_VERSION 2
  
  /* profile counts determined by AFDO smaller than afdo_hot_bb_threshold are
     considered cols.  */
--- 122,128 ----
  */
  
  #define DEFAULT_AUTO_PROFILE_FILE "fbdata.afdo"
! #define AUTO_PROFILE_VERSION 3
  
  /* profile counts determined by AFDO smaller than afdo_hot_bb_threshold are
     considered cols.  */
*************** struct decl_lineno
*** 188,194 ****
  typedef auto_vec<decl_lineno, 20> inline_stack;
  
  /* String array that stores function names.  */
! typedef auto_vec<char *> string_vector;
  
  /* Map from function name's index in string_table to target's
     execution count.  */
--- 188,194 ----
  typedef auto_vec<decl_lineno, 20> inline_stack;
  
  /* String array that stores function names.  */
! typedef auto_vec<const char *> string_vector;
  
  /* Map from function name's index in string_table to target's
     execution count.  */
*************** struct string_compare
*** 228,237 ****
--- 228,278 ----
    }
  };
  
+ /* Store the summary information for the profile.  */
+ struct summary_info
+ {
+   /* There are currently 16 hard-coded percentiles in the GCOV format.  */
+   static constexpr unsigned NUM_PERCENTILES = 16;
+ 
+   /* The detailed summary is a histogram-based calculation of the minimum
+      execution count required to belong to a certain set of percentile of
+      counts.  */
+   struct detailed_summary
+   {
+     /* The percentile that this represents (multiplied by 1,000,000).  */
+     uint32_t cutoff;
+     /* The minimum execution count required to belong to this percentile.  */
+     uint64_t min_count;
+     /* The number of samples which belong to this percentile.  */
+     uint64_t num_counts;
+   };
+ 
+   /* The sum of execution counts of all samples.  */
+   uint64_t total_count;
+   /* The maximum individual count.  */
+   uint64_t max_count;
+   /* The maximum head count across all functions.  */
+   uint64_t max_function_count;
+   /* The number of lines that have samples.  */
+   uint64_t num_counts;
+   /* The number of functions that have samples.  */
+   uint64_t num_functions;
+   /* The percentile threshold information.  */
+   detailed_summary detailed_summaries[NUM_PERCENTILES];
+ 
+   /* Read profile.  Return TRUE on success.  */
+   bool read ();
+ 
+   /* Get the minimum count required for percentile CUTOFF.  */
+   uint64_t get_threshold_count (uint32_t cutoff);
+ };
+ 
  /* Store a string array, indexed by string position in the array.  */
  class string_table
  {
  public:
+   static const int unknown_filename = -1;
+ 
    string_table ()
    {}
  
*************** public:
*** 243,269 ****
    /* For a given decl, returns the index of the decl name.  */
    int get_index_by_decl (tree decl) const;
  
!   /* For a given index, returns the string.  */
!   const char *get_name (int index) const;
  
    /* Read profile, return TRUE on success.  */
    bool read ();
  
    /* Return number of entries.  */
!   size_t num_entries ()
!   {
!     return vector_.length ();
!   }
  
!   /* Add new name and return its index.  */
!   int add_name (char *);
  
    /* Return cgraph node corresponding to given name index.  */
    cgraph_node *get_cgraph_node (int);
  private:
    typedef std::map<const char *, unsigned, string_compare> string_index_map;
!   string_vector vector_;
!   string_index_map map_;
  };
  
  /* Profile of a function instance:
--- 284,373 ----
    /* For a given decl, returns the index of the decl name.  */
    int get_index_by_decl (tree decl) const;
  
!   /* For a given index, returns the symbol name.  */
!   const char *get_symbol_name (int index) const;
! 
!   /* For a given index, returns the filename.  */
!   const char *get_filename (int index) const;
! 
!   /* For a given symbol name index, returns the filename index.  */
!   int get_filename_by_symbol (int index) const;
! 
!   /* For a given function name, returns the filename index.  */
!   int get_filename_by_symbol (const char *name) const;
! 
!   /* For a given filename, returns the index.  */
!   int get_filename_index (const char *name) const;
! 
!   /* Get the original name and file name index for a node.  This will return the
!      name from the current TU if there are multiple symbols that map to
!      NAME.  */
!   std::pair<const char *, int> get_original_name (const char *name) const;
  
    /* Read profile, return TRUE on success.  */
    bool read ();
  
    /* Return number of entries.  */
!   size_t num_entries () { return symbol_names_.length (); }
  
!   /* Add new symbol name STRING (with an associated file name FILENAME_IDX) and
!      return its index.  */
!   int add_symbol_name (const char *string, int filename_idx);
! 
!   /* Add new filename and return its index (returning the same if it already
!      exists).  */
!   int add_filename (const char *name);
  
    /* Return cgraph node corresponding to given name index.  */
    cgraph_node *get_cgraph_node (int);
  private:
    typedef std::map<const char *, unsigned, string_compare> string_index_map;
!   typedef std::map<const char *, auto_vec<unsigned>, string_compare>
!     clashing_name_map;
!   typedef std::map<const char *, char *, string_compare> string_string_map;
! 
!   string_vector symbol_names_;
!   string_vector filenames_;
! 
!   string_index_map symbol_name_map_;
!   string_index_map filename_map_;
!   string_index_map symbol_to_filename_map_;
! 
!   string_string_map original_names_map_;
!   clashing_name_map clashing_names_map_;
! };
! 
! /* Descriptor for a function_instance which can be used to disambiguate it from
!    other instances.  This consists of the symbol name and the file name indices
!    from string_table.  */
! 
! class function_instance_descriptor
! {
!   /* The string_table index for the file name.  */
!   unsigned file_name_;
!   /* The string_table index for the function name.  */
!   unsigned symbol_name_;
! 
! public:
!   unsigned file_name () const { return file_name_; }
!   unsigned symbol_name () const { return symbol_name_; }
! 
!   function_instance_descriptor (unsigned file_name, unsigned symbol_name)
!     : file_name_ (file_name), symbol_name_ (symbol_name)
!   {}
! 
!   function_instance_descriptor (int file_name, int symbol_name)
!     : file_name_ (file_name), symbol_name_ (symbol_name)
!   {}
! 
!   void set_symbol_name (unsigned new_name) { symbol_name_ = new_name; }
! 
!   bool operator< (const function_instance_descriptor &other) const
!   {
!     return file_name_ < other.file_name_
! 	   || (file_name_ == other.file_name_
! 	       && symbol_name_ < other.symbol_name_);
!   }
  };
  
  /* Profile of a function instance:
*************** private:
*** 273,278 ****
--- 377,383 ----
          instead of the inlined copy).
       3. map from source location (decl_lineno) to profile (count_info).
       4. map from callsite to callee function_instance.  */
+ 
  class function_instance
  {
  public:
*************** public:
*** 289,304 ****
    ~function_instance ();
  
    /* Accessors.  */
!   int
!   name () const
!   {
!     return name_;
!   }
!   int
!   set_name (int index)
!   {
!     return name_ = index;
!   }
    gcov_type
    total_count () const
    {
--- 394,404 ----
    ~function_instance ();
  
    /* Accessors.  */
!   int symbol_name () const { return descriptor_.symbol_name (); }
!   int file_name () const { return descriptor_.file_name (); }
!   void set_symbol_name (int index) { descriptor_.set_symbol_name (index); }
!   function_instance_descriptor get_descriptor () const { return descriptor_; }
! 
    gcov_type
    total_count () const
    {
*************** private:
*** 472,481 ****
    /* Map from callsite to callee function_instance.  */
    typedef std::map<callsite, function_instance *> callsite_map;
  
!   function_instance (unsigned name, gcov_type head_count)
! 	  : name_ (name), total_count_ (0), head_count_ (head_count),
!       removed_icall_target_ (false), realized_ (false),
!       in_worklist_ (false), inlined_to_ (NULL),
        location_ (UNKNOWN_LOCATION), call_location_ (UNKNOWN_LOCATION)
    {
    }
--- 572,582 ----
    /* Map from callsite to callee function_instance.  */
    typedef std::map<callsite, function_instance *> callsite_map;
  
!   function_instance (unsigned symbol_name, unsigned file_name,
! 		     gcov_type head_count)
!     : descriptor_ (file_name, symbol_name), total_count_ (0),
!       head_count_ (head_count), removed_icall_target_ (false),
!       realized_ (false), in_worklist_ (false), inlined_to_ (NULL),
        location_ (UNKNOWN_LOCATION), call_location_ (UNKNOWN_LOCATION)
    {
    }
*************** private:
*** 483,490 ****
    /* Map from source location (decl_lineno) to profile (count_info).  */
    typedef std::map<unsigned, count_info> position_count_map;
  
!   /* function_instance name index in the string_table.  */
!   unsigned name_;
  
    /* Total sample count.  */
    gcov_type total_count_;
--- 584,591 ----
    /* Map from source location (decl_lineno) to profile (count_info).  */
    typedef std::map<unsigned, count_info> position_count_map;
  
!   /* The indices into the string table identifying the function_instance.  */
!   function_instance_descriptor descriptor_;
  
    /* Total sample count.  */
    gcov_type total_count_;
*************** public:
*** 541,548 ****
    /* For a given DECL, returns the top-level function_instance.  */
    function_instance *get_function_instance_by_decl (tree decl) const;
  
!   /* For a given name index, returns the top-level function_instance.  */
!   function_instance *get_function_instance_by_name_index (int) const;
  
    void add_function_instance (function_instance *);
  
--- 642,650 ----
    /* For a given DECL, returns the top-level function_instance.  */
    function_instance *get_function_instance_by_decl (tree decl) const;
  
!   /* For a given DESCRIPTOR, return the matching instance if found.  */
!   function_instance *
!     get_function_instance_by_descriptor (function_instance_descriptor) const;
  
    void add_function_instance (function_instance *);
  
*************** public:
*** 572,581 ****
    void offline_external_functions ();
  
    void offline_unrealized_inlines ();
  private:
!   /* Map from function_instance name index (in string_table) to
!      function_instance.  */
!   typedef std::map<unsigned, function_instance *> name_function_instance_map;
  
    autofdo_source_profile () {}
  
--- 674,685 ----
    void offline_external_functions ();
  
    void offline_unrealized_inlines ();
+ 
  private:
!   /* Map from pair of function_instance filename and symbol name (in
!      string_table) to function_instance.  */
!   typedef std::map<function_instance_descriptor, function_instance *>
!     name_function_instance_map;
  
    autofdo_source_profile () {}
  
*************** private:
*** 587,597 ****
--- 691,719 ----
    function_instance *
    get_function_instance_by_inline_stack (const inline_stack &stack) const;
  
+   /* Find the matching function instance which has DESCRIPTOR as its
+      descriptor.  If not found, also try checking if an instance exists with the
+      same name which has no associated filename.  */
+   name_function_instance_map::const_iterator find_iter_for_function_instance (
+     function_instance_descriptor descriptor) const;
+ 
+   /* Similar to the above, but return a pointer to the instance instead of an
+      iterator.  */
+   function_instance *
+   find_function_instance (function_instance_descriptor descriptor) const;
+ 
+   /* Remove a function instance from the map.  Returns true if the entry was
+      actually deleted.  */
+   bool remove_function_instance (function_instance *inst);
+ 
    name_function_instance_map map_;
  
    auto_vec <function_instance *> duplicate_functions_;
  };
  
+ /* Store the summary information from the GCOV file.  */
+ static summary_info *afdo_summary_info;
+ 
  /* Store the strings read from the profile data file.  */
  static string_table *afdo_string_table;
  
*************** static gcov_type afdo_count_scale = 1;
*** 610,616 ****
  
  /* Helper functions.  */
  
- 
  /* Return the original name of NAME: strip the suffix that starts
     with '.' for names that are generated after auto-profile pass.
     This is to match profiled names with the names in the IR at this stage.
--- 732,737 ----
*************** get_relative_location_for_stmt (tree fn,
*** 826,839 ****
  	   gimple_location (stmt));
  }
  
  /* Member functions for string_table.  */
  
  /* Deconstructor.  */
  
  string_table::~string_table ()
  {
!   for (unsigned i = 0; i < vector_.length (); i++)
!     free (vector_[i]);
  }
  
  
--- 947,1019 ----
  	   gimple_location (stmt));
  }
  
+ /* Return either the basename or the realpath for a given path based on
+    PARAM_PROFILE_FUNC_INTERNAL_ID.  */
+ 
+ static const char *
+ get_normalized_path (const char *path, bool from_gcov = false)
+ {
+   if (param_profile_func_internal_id == 1)
+     /* The GCOV will already contain the entire path.  It doesn't need to be
+        normalized with lrealpath ().  */
+     return from_gcov ? path : lrealpath (path);
+   return lbasename (path);
+ }
+ 
+ /* Member functions for summary_info.  */
+ 
+ bool
+ summary_info::read ()
+ {
+   if (gcov_read_unsigned () != GCOV_TAG_AFDO_SUMMARY)
+     return false;
+ 
+   total_count = gcov_read_counter ();
+   max_count = gcov_read_counter ();
+   max_function_count = gcov_read_counter ();
+   num_counts = gcov_read_counter ();
+   num_functions = gcov_read_counter ();
+   uint64_t num_detailed_summaries = gcov_read_counter ();
+   gcc_checking_assert (num_detailed_summaries == NUM_PERCENTILES);
+   for (uint64_t i = 0; i < num_detailed_summaries; i++)
+     {
+       detailed_summaries[i].cutoff = gcov_read_unsigned ();
+       detailed_summaries[i].min_count = gcov_read_counter ();
+       detailed_summaries[i].num_counts = gcov_read_counter ();
+     }
+ 
+   return !gcov_is_error ();
+ }
+ 
+ /* Get the minimum count required for percentile CUTOFF.  */
+ 
+ uint64_t
+ summary_info::get_threshold_count (uint32_t cutoff)
+ {
+   /* The cutoffs stored in the GCOV are fractions multiplied by 1,000,000.  */
+   gcc_checking_assert (cutoff <= 1'000'000);
+   unsigned idx = 0;
+   /* Find the first cutoff at least as high as CUTOFF.  */
+   for (; idx < NUM_PERCENTILES; idx++)
+     if (detailed_summaries[idx].cutoff >= cutoff)
+       break;
+   idx = std::min (NUM_PERCENTILES - 1, idx);
+   return detailed_summaries[idx].min_count;
+ }
+ 
  /* Member functions for string_table.  */
  
  /* Deconstructor.  */
  
  string_table::~string_table ()
  {
!   for (unsigned i = 0; i < symbol_names_.length (); i++)
!     free (const_cast<char *> (symbol_names_[i]));
!   for (unsigned i = 0; i < filenames_.length (); i++)
!     free (const_cast<char *> (filenames_[i]));
!   for (auto it = original_names_map_.begin (); it != original_names_map_.end ();
!        it++)
!     free (it->second);
  }
  
  
*************** string_table::get_index (const char *nam
*** 845,852 ****
  {
    if (name == NULL)
      return -1;
!   string_index_map::const_iterator iter = map_.find (name);
!   if (iter == map_.end ())
      return -1;
  
    return iter->second;
--- 1025,1032 ----
  {
    if (name == NULL)
      return -1;
!   string_index_map::const_iterator iter = symbol_name_map_.find (name);
!   if (iter == symbol_name_map_.end ())
      return -1;
  
    return iter->second;
*************** string_table::get_index_by_decl (tree de
*** 871,890 ****
  /* Return the function name of a given INDEX.  */
  
  const char *
! string_table::get_name (int index) const
  {
!   gcc_assert (index > 0 && index < (int)vector_.length ());
!   return vector_[index];
  }
  
! /* Add new name SRRING and return its index.  */
  
  int
! string_table::add_name (char *string)
  {
!   vector_.safe_push (string);
!   map_[vector_.last ()] = vector_.length () - 1;
!   return vector_.length () - 1;
  }
  
  /* Read the string table. Return TRUE if reading is successful.  */
--- 1051,1180 ----
  /* Return the function name of a given INDEX.  */
  
  const char *
! string_table::get_symbol_name (int index) const
  {
!   if (index <= 0 || index >= (int) symbol_names_.length ())
!     fatal_error (UNKNOWN_LOCATION,
! 		 "auto-profile contains invalid symbol name index %d", index);
! 
!   return symbol_names_[index];
  }
  
! /* For a given index, returns the string.  */
! 
! const char *
! string_table::get_filename (int index) const
! {
!   /* There may not be any file name for some functions, ignore them.  */
!   if (index == string_table::unknown_filename)
!     return "<unknown>";
! 
!   if (index < 0 || index >= (int) filenames_.length ())
!     fatal_error (UNKNOWN_LOCATION,
! 		 "auto-profile contains invalid filename index %d", index);
! 
!   return filenames_[index];
! }
! 
! /* For a given symbol name index, returns the filename index.  */
  
  int
! string_table::get_filename_by_symbol (int index) const
  {
!   return get_filename_by_symbol (get_symbol_name (index));
! }
! 
! /* For a given function name, returns the filename index.  */
! 
! int
! string_table::get_filename_by_symbol (const char *name) const
! {
!   auto it = symbol_to_filename_map_.find (name);
!   if (it != symbol_to_filename_map_.end () && it->second < filenames_.length ())
!     return it->second;
!   return string_table::unknown_filename;
! }
! 
! /* For a given filename, returns the index.  */
! 
! int
! string_table::get_filename_index (const char *name) const
! {
!   auto iter = filename_map_.find (name);
!   return iter == filename_map_.end () ? string_table::unknown_filename
! 				      : iter->second;
! }
! 
! /* Get the original name and file name index for a node.  This will return the
!    name from the current TU if there are multiple symbols that map to
!    NAME.  */
! 
! std::pair<const char *, int>
! string_table::get_original_name (const char *name) const
! {
!   /* Check if the un-prefixed name differs from the actual name.  */
!   auto stripped = original_names_map_.find (name);
! 
!   /* The original name for the symbol is its name, i.e. there are no
!      suffixes.  */
!   if (stripped == original_names_map_.end ())
!     return {name, get_filename_by_symbol (name)};
! 
!   /* Figure out if a clash exists.  */
!   auto clash = clashing_names_map_.find (stripped->second);
!   gcc_checking_assert (clash != clashing_names_map_.end ());
! 
!   /* Try to find a function from the current TU.  */
!   gcc_checking_assert (clash->second.length () >= 1);
!   if (symtab_node *n
!       = cgraph_node::get_for_asmname (get_identifier (stripped->second));
!       n && is_a<cgraph_node *> (n))
!     for (cgraph_node *cn = dyn_cast<cgraph_node *> (n); cn;)
!       {
! 	/* Check if there is a symbol in the current TU that has the same name
! 	   as in the GCOV.  */
! 	for (auto name : clash->second)
! 	  {
! 	    int filename_idx = get_filename_by_symbol (name);
! 	    if (cn->definition && cn->has_gimple_body_p ()
! 		&& !strcmp (get_normalized_path (DECL_SOURCE_FILE (cn->decl)),
! 			    get_filename (filename_idx)))
! 	      return {stripped->second, filename_idx};
! 	  }
! 	cn = dyn_cast<cgraph_node *> (cn->next_sharing_asm_name);
!       }
! 
!   /* No match found.  Just stick to the current symbol and return the stripped
!      name.  */
!   return {stripped->second, get_filename_by_symbol (name)};
! }
! 
! /* Add new symbol name STRING (with an associated file name FILENAME_IDX) and
!    return its index.  */
! 
! int
! string_table::add_symbol_name (const char *string, int filename_idx)
! {
!   gcc_checking_assert (
!     filename_idx == string_table::unknown_filename
!     || (filename_idx >= 0 && filename_idx < (int) filenames_.length ()));
!   symbol_names_.safe_push (string);
!   symbol_name_map_[symbol_names_.last ()] = symbol_names_.length () - 1;
!   symbol_to_filename_map_[symbol_names_.last ()] = filename_idx;
!   return symbol_names_.length () - 1;
! }
! 
! /* Add new filename and return its index (returning the same if it already
!    exists).  */
! 
! int
! string_table::add_filename (const char *name)
! {
!   auto it = filename_map_.find (name);
!   if (it != filename_map_.end ())
!     return it->second;
!   filenames_.safe_push (xstrdup (name));
!   return filenames_.length () - 1;
  }
  
  /* Read the string table. Return TRUE if reading is successful.  */
*************** string_table::read ()
*** 897,908 ****
    /* Skip the length of the section.  */
    gcov_read_unsigned ();
    /* Read in the file name table.  */
    unsigned string_num = gcov_read_unsigned ();
!   vector_.reserve (string_num);
    for (unsigned i = 0; i < string_num; i++)
      {
!       vector_.quick_push (xstrdup (gcov_read_string ()));
!       map_[vector_.last ()] = i;
        if (gcov_is_error ())
  	return false;
      }
--- 1187,1231 ----
    /* Skip the length of the section.  */
    gcov_read_unsigned ();
    /* Read in the file name table.  */
+   unsigned file_num = gcov_read_unsigned ();
+   filenames_.reserve (file_num);
+   for (unsigned i = 0; i < file_num; i++)
+     {
+       const char *filename = gcov_read_string ();
+       filenames_.quick_push (xstrdup (get_normalized_path (filename, true)));
+       filename_map_[filenames_.last ()] = i;
+       free (const_cast<char *> (filename));
+       if (gcov_is_error ())
+ 	return false;
+     }
+   /* Read in the function name -> file name table.  */
    unsigned string_num = gcov_read_unsigned ();
!   symbol_names_.reserve (string_num);
    for (unsigned i = 0; i < string_num; i++)
      {
!       symbol_names_.quick_push (const_cast<char *> (gcov_read_string ()));
!       symbol_name_map_[symbol_names_.last ()] = i;
!       unsigned filename_idx = gcov_read_unsigned ();
!       symbol_to_filename_map_[symbol_names_.last ()] = filename_idx;
!       char *original = const_cast<char *> (
! 	autofdo::get_original_name (symbol_names_.last ()));
!       if (strcmp (original, symbol_names_.last ()))
! 	{
! 	  /* Take ownership of ORIGINAL.  */
! 	  original_names_map_[symbol_names_.last ()] = original;
! 	  clashing_names_map_[original].safe_push (i);
! 	  /* It is possible that a public symbol with the stripped name exists.
! 	     If it does exist, add it as well.  */
! 	  auto publik = symbol_name_map_.find (original);
! 	  if (publik != symbol_name_map_.end ()
! 	      && clashing_names_map_.find (publik->first)
! 		   == clashing_names_map_.end ())
! 	    clashing_names_map_[publik->first].safe_push (publik->second);
! 	}
!       else
! 	/* There are no suffixes to remove.  */
! 	free (original);
! 
        if (gcov_is_error ())
  	return false;
      }
*************** string_table::read ()
*** 914,920 ****
  cgraph_node *
  string_table::get_cgraph_node (int name_index)
  {
!   const char *sname = get_name (name_index);
  
    symtab_node *n = cgraph_node::get_for_asmname (get_identifier (sname));
    for (;n; n = n->next_sharing_asm_name)
--- 1237,1243 ----
  cgraph_node *
  string_table::get_cgraph_node (int name_index)
  {
!   const char *sname = get_symbol_name (name_index);
  
    symtab_node *n = cgraph_node::get_for_asmname (get_identifier (sname));
    for (;n; n = n->next_sharing_asm_name)
*************** string_table::get_cgraph_node (int name_
*** 929,935 ****
  cgraph_node *
  function_instance::get_cgraph_node ()
  {
!   return afdo_string_table->get_cgraph_node (name ());
  }
  
  /* Member functions for function_instance.  */
--- 1252,1258 ----
  cgraph_node *
  function_instance::get_cgraph_node ()
  {
!   return afdo_string_table->get_cgraph_node (symbol_name ());
  }
  
  /* Member functions for function_instance.  */
*************** function_instance::get_function_instance
*** 974,982 ****
  			   dump_user_location_t::from_location_t (location),
  			   "auto-profile has mismatched function name %s"
  			   " instead of %s at loc %i:%i",
! 			   afdo_string_table->get_name (iter.first.second),
! 			   raw_symbol_name (decl),
! 			   lineno >> 16,
  			   lineno & 65535);
      }
  
--- 1297,1305 ----
  			   dump_user_location_t::from_location_t (location),
  			   "auto-profile has mismatched function name %s"
  			   " instead of %s at loc %i:%i",
! 			   afdo_string_table->get_symbol_name (
! 			     iter.first.second),
! 			   raw_symbol_name (decl), lineno >> 16,
  			   lineno & 65535);
      }
  
*************** function_instance::merge (function_insta
*** 991,997 ****
  			  vec <function_instance *> &new_functions)
  {
    /* Do not merge to itself and only merge functions of same name.  */
!   gcc_checking_assert (other != this && other->name () == name ());
    total_count_ += other->total_count_;
    if (other->total_count () && total_count () && other->head_count () == -1)
      head_count_ = -1;
--- 1314,1325 ----
  			  vec <function_instance *> &new_functions)
  {
    /* Do not merge to itself and only merge functions of same name.  */
!   gcc_checking_assert (other != this
! 		       && other->symbol_name () == symbol_name ());
! 
!   if (file_name () != other->file_name ())
!     return;
! 
    total_count_ += other->total_count_;
    if (other->total_count () && total_count () && other->head_count () == -1)
      head_count_ = -1;
*************** function_instance::offline (function_ins
*** 1111,1117 ****
        gcc_checking_assert (s->total_count_ >= 0);
      }
    function_instance *to
!     = afdo_source_profile->get_function_instance_by_name_index (fn->name ());
    fn->set_inlined_to (NULL);
    /* If there is offline function of same name, we need to merge profile.
       Delay this by adding function to a worklist so we do not run into
--- 1439,1446 ----
        gcc_checking_assert (s->total_count_ >= 0);
      }
    function_instance *to
!     = afdo_source_profile->get_function_instance_by_descriptor (
!       fn->get_descriptor ());
    fn->set_inlined_to (NULL);
    /* If there is offline function of same name, we need to merge profile.
       Delay this by adding function to a worklist so we do not run into
*************** match_with_target (cgraph_node *n,
*** 1186,1192 ****
  {
    cgraph_node *callee = orig_callee->ultimate_alias_target ();
    const char *symbol_name = raw_symbol_name (callee->decl);
!   const char *name = afdo_string_table->get_name (inlined_fn->name ());
    if (strcmp (name, symbol_name))
      {
        int i;
--- 1515,1522 ----
  {
    cgraph_node *callee = orig_callee->ultimate_alias_target ();
    const char *symbol_name = raw_symbol_name (callee->decl);
!   const char *name
!     = afdo_string_table->get_symbol_name (inlined_fn->symbol_name ());
    if (strcmp (name, symbol_name))
      {
        int i;
*************** match_with_target (cgraph_node *n,
*** 1200,1217 ****
  	}
        /* Accept dwarf names and stripped suffixes.  */
        if (!strcmp (lang_hooks.dwarf_name (callee->decl, 0),
! 		   afdo_string_table->get_name (inlined_fn->name ()))
! 	  || (!name[i] && symbol_name[i] == '.')
! 	  || in_suffix)
  	{
  	  int index = afdo_string_table->get_index (symbol_name);
  	  if (index == -1)
! 	    index = afdo_string_table->add_name (xstrdup (symbol_name));
  	  if (dump_file)
  	    fprintf (dump_file,
  		     "  Renaming inlined call target %s to %s\n",
  		     name, symbol_name);
! 	  inlined_fn->set_name (index);
  	  return 2;
  	}
        /* Only warn about declarations.  It is possible that the function
--- 1530,1550 ----
  	}
        /* Accept dwarf names and stripped suffixes.  */
        if (!strcmp (lang_hooks.dwarf_name (callee->decl, 0),
! 		   afdo_string_table->get_symbol_name (
! 		     inlined_fn->symbol_name ()))
! 	  || (!name[i] && symbol_name[i] == '.') || in_suffix)
  	{
  	  int index = afdo_string_table->get_index (symbol_name);
  	  if (index == -1)
! 	    index = afdo_string_table->add_symbol_name (
! 	      xstrdup (symbol_name),
! 	      afdo_string_table->add_filename (
! 		get_normalized_path (DECL_SOURCE_FILE (callee->decl))));
  	  if (dump_file)
  	    fprintf (dump_file,
  		     "  Renaming inlined call target %s to %s\n",
  		     name, symbol_name);
! 	  inlined_fn->set_symbol_name (index);
  	  return 2;
  	}
        /* Only warn about declarations.  It is possible that the function
*************** function_instance::match (cgraph_node *n
*** 1493,1502 ****
  				       "auto-profile of %q+F seem to contain"
  				       " lost discriminator %i for"
  				       " call of %s at relative location %i",
! 				       node->decl,
! 				       loc & 65535,
! 				       afdo_string_table->get_name
! 					 (inlined_fn_nodisc->name ()),
  				       loc >> 16))
  			    inform (gimple_location (stmt),
  				    "corresponding call");
--- 1826,1834 ----
  				       "auto-profile of %q+F seem to contain"
  				       " lost discriminator %i for"
  				       " call of %s at relative location %i",
! 				       node->decl, loc & 65535,
! 				       afdo_string_table->get_symbol_name (
! 					 inlined_fn_nodisc->symbol_name ()),
  				       loc >> 16))
  			    inform (gimple_location (stmt),
  				    "corresponding call");
*************** function_instance::match (cgraph_node *n
*** 1512,1530 ****
  		    {
  		      if (inlined_fn)
  			{
! 			  int old_name = inlined_fn->name ();
  			  int r = match_with_target (node, stmt, inlined_fn,
  						     callee_node);
  			  if (r == 2)
  			    {
  			      auto iter = callsites.find ({loc, old_name});
! 			      gcc_checking_assert (old_name
! 						   != inlined_fn->name ()
! 						   && iter != callsites.end ()
! 						   && iter->second
! 						      == inlined_fn);
  			      callsite key2 = {stack[0].afdo_loc,
! 						inlined_fn->name ()};
  			      callsites.erase (iter);
  			      callsites[key2] = inlined_fn;
  			    }
--- 1844,1861 ----
  		    {
  		      if (inlined_fn)
  			{
! 			  int old_name = inlined_fn->symbol_name ();
  			  int r = match_with_target (node, stmt, inlined_fn,
  						     callee_node);
  			  if (r == 2)
  			    {
  			      auto iter = callsites.find ({loc, old_name});
! 			      gcc_checking_assert (
! 				old_name != inlined_fn->symbol_name ()
! 				&& iter != callsites.end ()
! 				&& iter->second == inlined_fn);
  			      callsite key2 = {stack[0].afdo_loc,
! 					       inlined_fn->symbol_name ()};
  			      callsites.erase (iter);
  			      callsites[key2] = inlined_fn;
  			    }
*************** function_instance::match (cgraph_node *n
*** 1575,1597 ****
  			    (gimple_location (stmt));
  			  /* Do renaming if needed so we can look up
  			     cgraph node and recurse into inlined function.  */
! 			  int *newn = to_symbol_name.get (inlined_fn->name ());
! 			  gcc_checking_assert
! 			    (!newn || *newn != inlined_fn->name ());
  			  if (newn || lost_discriminator)
  			    {
! 			      auto iter = callsites.find
! 					    ({loc, inlined_fn->name ()});
  			      gcc_checking_assert (iter != callsites.end ()
  						   && iter->second
  						      == inlined_fn);
! 			      callsite key2 = {stack[0].afdo_loc,
! 					       newn ? *newn
! 					       : inlined_fn->name ()};
  			      callsites.erase (iter);
  			      callsites[key2] = inlined_fn;
! 			      inlined_fn->set_name (newn ? *newn
! 						    : inlined_fn->name ());
  			    }
  			  functions.add (inlined_fn);
  			}
--- 1906,1929 ----
  			    (gimple_location (stmt));
  			  /* Do renaming if needed so we can look up
  			     cgraph node and recurse into inlined function.  */
! 			  int *newn
! 			    = to_symbol_name.get (inlined_fn->symbol_name ());
! 			  gcc_checking_assert (
! 			    !newn || *newn != inlined_fn->symbol_name ());
  			  if (newn || lost_discriminator)
  			    {
! 			      auto iter = callsites.find (
! 				{loc, inlined_fn->symbol_name ()});
  			      gcc_checking_assert (iter != callsites.end ()
  						   && iter->second
  						      == inlined_fn);
! 			      callsite key2
! 				= {stack[0].afdo_loc,
! 				   newn ? *newn : inlined_fn->symbol_name ()};
  			      callsites.erase (iter);
  			      callsites[key2] = inlined_fn;
! 			      inlined_fn->set_symbol_name (
! 				newn ? *newn : inlined_fn->symbol_name ());
  			    }
  			  functions.add (inlined_fn);
  			}
*************** function_instance::match (cgraph_node *n
*** 1682,1689 ****
  	    fprintf (dump_file, ":%" PRIu64, iter->second.count);
  	    for (auto &titer : iter->second.targets)
  	      fprintf (dump_file, " %s:%" PRIu64,
! 		       afdo_string_table->get_name (titer.first),
! 		       (int64_t)titer.second);
  	    fprintf (dump_file, "\n");
  	  }
  	iter = pos_counts.erase (iter);
--- 2014,2021 ----
  	    fprintf (dump_file, ":%" PRIu64, iter->second.count);
  	    for (auto &titer : iter->second.targets)
  	      fprintf (dump_file, " %s:%" PRIu64,
! 		       afdo_string_table->get_symbol_name (titer.first),
! 		       (int64_t) titer.second);
  	    fprintf (dump_file, "\n");
  	  }
  	iter = pos_counts.erase (iter);
*************** function_instance::match (cgraph_node *n
*** 1709,1717 ****
  	      inform (DECL_SOURCE_LOCATION (node->decl),
  		      "call of %s with total count %" PRId64
  		      ", relative location +%i, discriminator %i",
! 		      afdo_string_table->get_name (iter->first.second),
! 		      iter->second->total_count (),
! 		      iter->first.first >> 16, iter->first.first & 65535);
  	    if ((iter->first.first >> 16) > (end_location >> 16) && warned)
  	      inform (DECL_SOURCE_LOCATION (node->decl),
  		      "location is after end of function");
--- 2041,2049 ----
  	      inform (DECL_SOURCE_LOCATION (node->decl),
  		      "call of %s with total count %" PRId64
  		      ", relative location +%i, discriminator %i",
! 		      afdo_string_table->get_symbol_name (iter->first.second),
! 		      iter->second->total_count (), iter->first.first >> 16,
! 		      iter->first.first & 65535);
  	    if ((iter->first.first >> 16) > (end_location >> 16) && warned)
  	      inform (DECL_SOURCE_LOCATION (node->decl),
  		      "location is after end of function");
*************** function_instance::remove_external_funct
*** 1772,1779 ****
        }
      else
        {
! 	gcc_checking_assert ((int)iter->first.second
! 			     == iter->second->name ());
  	int *newn = iter->second->get_call_location () == UNKNOWN_LOCATION
  		    ? to_symbol_name.get (iter->first.second)
  		    : NULL;
--- 2104,2111 ----
        }
      else
        {
! 	gcc_checking_assert ((int) iter->first.second
! 			     == iter->second->symbol_name ());
  	int *newn = iter->second->get_call_location () == UNKNOWN_LOCATION
  		    ? to_symbol_name.get (iter->first.second)
  		    : NULL;
*************** function_instance::remove_external_funct
*** 1791,1797 ****
        auto iter = callsites.find (key);
        callsite key2 = key;
        key2.second = *to_symbol_name.get (key.second);
!       iter->second->set_name (key2.second);
        callsites.erase (iter);
        callsites[key2] = iter->second;
      }
--- 2123,2129 ----
        auto iter = callsites.find (key);
        callsite key2 = key;
        key2.second = *to_symbol_name.get (key.second);
!       iter->second->set_symbol_name (key2.second);
        callsites.erase (iter);
        callsites[key2] = iter->second;
      }
*************** void
*** 1852,1860 ****
  function_instance::dump (FILE *f, int indent, bool nested) const
  {
    if (!nested)
!     fprintf (f, "%*s%s total:%" PRIu64 " head:%" PRId64 "\n",
! 	     indent, "", afdo_string_table->get_name (name ()),
! 	     (int64_t)total_count (), (int64_t)head_count ());
    else
      fprintf (f, " total:%" PRIu64 "\n", (int64_t)total_count ());
    for (auto const &iter : pos_counts)
--- 2184,2192 ----
  function_instance::dump (FILE *f, int indent, bool nested) const
  {
    if (!nested)
!     fprintf (f, "%*s%s total:%" PRIu64 " head:%" PRId64 "\n", indent, "",
! 	     afdo_string_table->get_symbol_name (symbol_name ()),
! 	     (int64_t) total_count (), (int64_t) head_count ());
    else
      fprintf (f, " total:%" PRIu64 "\n", (int64_t)total_count ());
    for (auto const &iter : pos_counts)
*************** function_instance::dump (FILE *f, int in
*** 1865,1881 ****
  
        for (auto const &titer : iter.second.targets)
  	fprintf (f, "  %s:%" PRIu64,
! 		 afdo_string_table->get_name (titer.first),
! 		 (int64_t)titer.second);
        fprintf (f,"\n");
      }
    for (auto const &iter : callsites)
      {
        fprintf (f, "%*s", indent + 2, "");
        dump_afdo_loc (f, iter.first.first);
!       fprintf (f, ": %s", afdo_string_table->get_name (iter.first.second));
        iter.second->dump (f, indent + 2, true);
!       gcc_checking_assert ((int)iter.first.second == iter.second->name ());
      }
  }
  
--- 2197,2215 ----
  
        for (auto const &titer : iter.second.targets)
  	fprintf (f, "  %s:%" PRIu64,
! 		 afdo_string_table->get_symbol_name (titer.first),
! 		 (int64_t) titer.second);
        fprintf (f,"\n");
      }
    for (auto const &iter : callsites)
      {
        fprintf (f, "%*s", indent + 2, "");
        dump_afdo_loc (f, iter.first.first);
!       fprintf (f, ": %s",
! 	       afdo_string_table->get_symbol_name (iter.first.second));
        iter.second->dump (f, indent + 2, true);
!       gcc_checking_assert ((int) iter.first.second
! 			   == iter.second->symbol_name ());
      }
  }
  
*************** function_instance::dump_inline_stack (FI
*** 1893,1901 ****
  	   iter != s->callsites.end (); ++iter)
  	if (iter->second == p)
  	  {
! 	    gcc_checking_assert (!found
! 				 && (int)iter->first.second == p->name ());
! 	    stack.safe_push ({iter->first.first, s->name ()});
  	    found = true;
  	  }
        gcc_checking_assert (found);
--- 2227,2235 ----
  	   iter != s->callsites.end (); ++iter)
  	if (iter->second == p)
  	  {
! 	    gcc_checking_assert (
! 	      !found && (int) iter->first.second == p->symbol_name ());
! 	    stack.safe_push ({iter->first.first, s->symbol_name ()});
  	    found = true;
  	  }
        gcc_checking_assert (found);
*************** function_instance::dump_inline_stack (FI
*** 1904,1914 ****
      }
    for (callsite &s: stack)
      {
!       fprintf (f, "%s:", afdo_string_table->get_name (s.second));
        dump_afdo_loc (f, s.first);
        fprintf (f, " ");
      }
!   fprintf (f, "%s", afdo_string_table->get_name (name ()));
  }
  
  /* Dump instance to stderr.  */
--- 2238,2248 ----
      }
    for (callsite &s: stack)
      {
!       fprintf (f, "%s:", afdo_string_table->get_symbol_name (s.second));
        dump_afdo_loc (f, s.first);
        fprintf (f, " ");
      }
!   fprintf (f, "%s", afdo_string_table->get_symbol_name (symbol_name ()));
  }
  
  /* Dump instance to stderr.  */
*************** function_instance::find_icall_target_map
*** 1944,1956 ****
    for (callsite_map::const_iterator iter = callsites.begin ();
         iter != callsites.end (); ++iter)
      {
!       unsigned callee = iter->second->name ();
        /* Check if callsite location match the stmt.  */
        if (iter->first.first != stmt_offset
  	  || iter->second->removed_icall_target ())
  	continue;
        struct cgraph_node *node = cgraph_node::get_for_asmname (
!           get_identifier (afdo_string_table->get_name (callee)));
        if (node == NULL)
          continue;
        (*map)[callee] = iter->second->total_count () * afdo_count_scale;
--- 2278,2290 ----
    for (callsite_map::const_iterator iter = callsites.begin ();
         iter != callsites.end (); ++iter)
      {
!       unsigned callee = iter->second->symbol_name ();
        /* Check if callsite location match the stmt.  */
        if (iter->first.first != stmt_offset
  	  || iter->second->removed_icall_target ())
  	continue;
        struct cgraph_node *node = cgraph_node::get_for_asmname (
! 	get_identifier (afdo_string_table->get_symbol_name (callee)));
        if (node == NULL)
          continue;
        (*map)[callee] = iter->second->total_count () * afdo_count_scale;
*************** autofdo_source_profile::offline_external
*** 1996,2010 ****
       .isra, .ipcp.  */
    for (size_t i = 1; i < afdo_string_table->num_entries (); i++)
      {
!       const char *n1 = afdo_string_table->get_name (i);
!       char *n2 = get_original_name (n1);
        if (!strcmp (n1, n2))
  	{
- 	  free (n2);
  	  /* Watch for duplicate entries.
  	     This seems to happen in practice and may be useful to distinguish
  	     multiple static symbols of the same name, but we do not realy
! 	     have a way to differentiate them in get_name lookup.  */
  	  int index = afdo_string_table->get_index (n1);
  	  if (index != (int)i)
  	    {
--- 2330,2345 ----
       .isra, .ipcp.  */
    for (size_t i = 1; i < afdo_string_table->num_entries (); i++)
      {
!       const char *n1 = afdo_string_table->get_symbol_name (i);
!       std::pair<const char *, int> name_filename
! 	= afdo_string_table->get_original_name (n1);
!       const char *n2 = name_filename.first;
        if (!strcmp (n1, n2))
  	{
  	  /* Watch for duplicate entries.
  	     This seems to happen in practice and may be useful to distinguish
  	     multiple static symbols of the same name, but we do not realy
! 	     have a way to differentiate them in get_symbol_name lookup.  */
  	  int index = afdo_string_table->get_index (n1);
  	  if (index != (int)i)
  	    {
*************** autofdo_source_profile::offline_external
*** 2020,2029 ****
  	fprintf (dump_file, "Adding rename removing clone suffixes %s -> %s\n",
  		 n1, n2);
        int index = afdo_string_table->get_index (n2);
!       if (index != -1)
! 	free (n2);
!       else
! 	index = afdo_string_table->add_name (n2);
        to_symbol_name.put (i, index);
      }
    last_name = afdo_string_table->num_entries ();
--- 2355,2363 ----
  	fprintf (dump_file, "Adding rename removing clone suffixes %s -> %s\n",
  		 n1, n2);
        int index = afdo_string_table->get_index (n2);
!       if (index == -1)
! 	index = afdo_string_table->add_symbol_name (xstrdup (n2),
! 						    name_filename.second);
        to_symbol_name.put (i, index);
      }
    last_name = afdo_string_table->num_entries ();
*************** autofdo_source_profile::offline_external
*** 2042,2052 ****
  	  if (index2 != -1)
  	    {
  	      if (index == -1)
! 		index = afdo_string_table->add_name (xstrdup (name));
  	      if (dump_file)
  		{
  		  fprintf (dump_file, "Adding dwarf->symbol rename %s -> %s\n",
! 			   afdo_string_table->get_name (index2), name);
  		  if (to_symbol_name.get (index2))
  		    fprintf (dump_file, "Dwarf name is not unique");
  		}
--- 2376,2389 ----
  	  if (index2 != -1)
  	    {
  	      if (index == -1)
! 		index = afdo_string_table->add_symbol_name (
! 		  xstrdup (name),
! 		  afdo_string_table->add_filename (
! 		    get_normalized_path (DECL_SOURCE_FILE (node->decl))));
  	      if (dump_file)
  		{
  		  fprintf (dump_file, "Adding dwarf->symbol rename %s -> %s\n",
! 			   afdo_string_table->get_symbol_name (index2), name);
  		  if (to_symbol_name.get (index2))
  		    fprintf (dump_file, "Dwarf name is not unique");
  		}
*************** autofdo_source_profile::offline_external
*** 2058,2064 ****
  	{
  	  if (dump_file)
  	    fprintf (dump_file, "%s is defined in node %s\n",
! 		     afdo_string_table->get_name (index),
  		     node->dump_name ());
  	  seen.add (index);
  	}
--- 2395,2401 ----
  	{
  	  if (dump_file)
  	    fprintf (dump_file, "%s is defined in node %s\n",
! 		     afdo_string_table->get_symbol_name (index),
  		     node->dump_name ());
  	  seen.add (index);
  	}
*************** autofdo_source_profile::offline_external
*** 2109,2118 ****
    auto_vec <function_instance *, 20>fns2;
    /* Populate worklist with all functions to process.  Processing
       may introduce new functions by offlining.  */
!   for (auto const &iter : map_)
      {
!       iter.second->set_in_worklist ();
!       fns.safe_push (iter.second);
      }
  
    /* There are two worklists.  First all functions needs to be matched
--- 2446,2455 ----
    auto_vec <function_instance *, 20>fns2;
    /* Populate worklist with all functions to process.  Processing
       may introduce new functions by offlining.  */
!   for (auto &function : map_)
      {
!       function.second->set_in_worklist ();
!       fns.safe_push (function.second);
      }
  
    /* There are two worklists.  First all functions needs to be matched
*************** autofdo_source_profile::offline_external
*** 2124,2130 ****
        /* In case renaming introduced new name, keep seen up to date.  */
        for (; last_name < afdo_string_table->num_entries (); last_name++)
  	{
! 	  const char *name = afdo_string_table->get_name (last_name);
  	  symtab_node *n
  	    = afdo_string_table->get_cgraph_node (last_name);
  	  if (dump_file)
--- 2461,2467 ----
        /* In case renaming introduced new name, keep seen up to date.  */
        for (; last_name < afdo_string_table->num_entries (); last_name++)
  	{
! 	  const char *name = afdo_string_table->get_symbol_name (last_name);
  	  symtab_node *n
  	    = afdo_string_table->get_cgraph_node (last_name);
  	  if (dump_file)
*************** autofdo_source_profile::offline_external
*** 2139,2158 ****
  	  function_instance *f = fns.pop ();
  	  if (f->get_location () == UNKNOWN_LOCATION)
  	    {
! 	      int index = f->name ();
  	      int *newn = to_symbol_name.get (index);
  	      if (newn)
  		{
! 		  f->set_name (*newn);
! 		  if (map_.count (index)
! 		      && map_[index] == f)
! 		    map_.erase (index);
! 		  if (!map_.count (*newn))
! 		    map_[*newn] = f;
  		}
  	      if (cgraph_node *n = f->get_cgraph_node ())
  		{
! 		  gcc_checking_assert (seen.contains (f->name ()));
  		  f->match (n, fns, to_symbol_name);
  		}
  	    }
--- 2476,2494 ----
  	  function_instance *f = fns.pop ();
  	  if (f->get_location () == UNKNOWN_LOCATION)
  	    {
! 	      int index = f->symbol_name ();
  	      int *newn = to_symbol_name.get (index);
  	      if (newn)
  		{
! 		  if (find_function_instance (f->get_descriptor ()) == f)
! 		    remove_function_instance (f);
! 		  f->set_symbol_name (*newn);
! 		  if (!find_function_instance (f->get_descriptor ()))
! 		    add_function_instance (f);
  		}
  	      if (cgraph_node *n = f->get_cgraph_node ())
  		{
! 		  gcc_checking_assert (seen.contains (f->symbol_name ()));
  		  f->match (n, fns, to_symbol_name);
  		}
  	    }
*************** autofdo_source_profile::offline_external
*** 2161,2172 ****
        else
  	{
  	  function_instance *f = fns2.pop ();
! 	  int index = f->name ();
  	  gcc_checking_assert (f->in_worklist_p ());
  
  	  /* If map has different function_instance of same name, then
  	     this is a duplicated entry which needs to be merged.  */
! 	  if (map_.count (index) && map_[index] != f)
  	    {
  	      if (dump_file)
  		{
--- 2497,2510 ----
        else
  	{
  	  function_instance *f = fns2.pop ();
! 	  int index = f->symbol_name ();
  	  gcc_checking_assert (f->in_worklist_p ());
  
  	  /* If map has different function_instance of same name, then
  	     this is a duplicated entry which needs to be merged.  */
! 	  function_instance *index_inst
! 	    = find_function_instance (f->get_descriptor ());
! 	  if (index_inst && index_inst != f)
  	    {
  	      if (dump_file)
  		{
*************** autofdo_source_profile::offline_external
*** 2174,2180 ****
  		  f->dump_inline_stack (dump_file);
  		  fprintf (dump_file, "\n");
  		}
! 	      map_[index]->merge (f, fns);
  	      gcc_checking_assert (!f->inlined_to ());
  	      f->clear_in_worklist ();
  	      delete f;
--- 2512,2518 ----
  		  f->dump_inline_stack (dump_file);
  		  fprintf (dump_file, "\n");
  		}
! 	      index_inst->merge (f, fns);
  	      gcc_checking_assert (!f->inlined_to ());
  	      f->clear_in_worklist ();
  	      delete f;
*************** autofdo_source_profile::offline_external
*** 2186,2194 ****
  	      f->clear_in_worklist ();
  	      if (dump_file)
  		fprintf (dump_file, "Removing external %s\n",
! 			 afdo_string_table->get_name (f->name ()));
! 	      if (map_.count (index) && map_[index] == f)
! 		map_.erase (f->name ());
  	      delete f;
  	    }
  	  /* If this is offline function instance seen in this
--- 2524,2533 ----
  	      f->clear_in_worklist ();
  	      if (dump_file)
  		fprintf (dump_file, "Removing external %s\n",
! 			 afdo_string_table->get_symbol_name (
! 			   f->symbol_name ()));
! 	      if (index_inst == f)
! 		remove_function_instance (f);
  	      delete f;
  	    }
  	  /* If this is offline function instance seen in this
*************** autofdo_source_profile::offline_external
*** 2202,2211 ****
  	}
      }
    if (dump_file)
!     for (auto const &iter : map_)
        {
! 	seen.contains (iter.second->name ());
! 	iter.second->dump (dump_file);
        }
  }
  
--- 2541,2550 ----
  	}
      }
    if (dump_file)
!     for (auto const &function : map_)
        {
! 	seen.contains (function.second->symbol_name ());
! 	function.second->dump (dump_file);
        }
  }
  
*************** autofdo_source_profile::offline_unrealiz
*** 2259,2280 ****
    auto_vec <function_instance *>fns;
    /* Populate worklist with all functions to process.  Processing
       may introduce new functions by offlining.  */
!   for (auto const &iter : map_)
      {
!       fns.safe_push (iter.second);
!       iter.second->set_in_worklist ();
      }
    while (fns.length ())
      {
        function_instance *f = fns.pop ();
!       int index = f->name ();
!       bool in_map = map_.count (index);
        if (in_map)
  	if (cgraph_node *n = f->get_cgraph_node ())
  	  {
  	    if (dump_file)
  	      fprintf (dump_file, "Marking realized %s\n",
! 		       afdo_string_table->get_name (index));
  	    f->set_realized ();
  	    if (DECL_INITIAL (n->decl)
  		&& DECL_INITIAL (n->decl) != error_mark_node)
--- 2598,2621 ----
    auto_vec <function_instance *>fns;
    /* Populate worklist with all functions to process.  Processing
       may introduce new functions by offlining.  */
!   for (auto const &function : map_)
      {
!       fns.safe_push (function.second);
!       function.second->set_in_worklist ();
      }
    while (fns.length ())
      {
        function_instance *f = fns.pop ();
!       int index = f->symbol_name ();
!       function_instance *index_inst
! 	= find_function_instance (f->get_descriptor ());
!       bool in_map = index_inst != nullptr;
        if (in_map)
  	if (cgraph_node *n = f->get_cgraph_node ())
  	  {
  	    if (dump_file)
  	      fprintf (dump_file, "Marking realized %s\n",
! 		       afdo_string_table->get_symbol_name (index));
  	    f->set_realized ();
  	    if (DECL_INITIAL (n->decl)
  		&& DECL_INITIAL (n->decl) != error_mark_node)
*************** autofdo_source_profile::offline_unrealiz
*** 2285,2291 ****
  			   && f->in_worklist_p ());
  
        /* If this is duplicated instance, merge it into one in map.  */
!       if (in_map && map_[index] != f)
  	{
  	  if (dump_file)
  	    {
--- 2626,2632 ----
  			   && f->in_worklist_p ());
  
        /* If this is duplicated instance, merge it into one in map.  */
!       if (in_map && index_inst != f)
  	{
  	  if (dump_file)
  	    {
*************** autofdo_source_profile::offline_unrealiz
*** 2293,2299 ****
  	      f->dump_inline_stack (dump_file);
  	      fprintf (dump_file, "\n");
  	    }
! 	  map_[index]->merge (f, fns);
  	  f->clear_in_worklist ();
  	  gcc_checking_assert (!f->inlined_to ());
  	  delete f;
--- 2634,2640 ----
  	      f->dump_inline_stack (dump_file);
  	      fprintf (dump_file, "\n");
  	    }
! 	  index_inst->merge (f, fns);
  	  f->clear_in_worklist ();
  	  gcc_checking_assert (!f->inlined_to ());
  	  delete f;
*************** autofdo_source_profile::offline_unrealiz
*** 2303,2310 ****
  	{
  	  if (dump_file)
  	    fprintf (dump_file, "Removing optimized out function %s\n",
! 		     afdo_string_table->get_name (f->name ()));
! 	  map_.erase (index);
  	  f->clear_in_worklist ();
  	  delete f;
  	}
--- 2644,2651 ----
  	{
  	  if (dump_file)
  	    fprintf (dump_file, "Removing optimized out function %s\n",
! 		     afdo_string_table->get_symbol_name (f->symbol_name ()));
! 	  remove_function_instance (index_inst);
  	  f->clear_in_worklist ();
  	  delete f;
  	}
*************** autofdo_source_profile::offline_unrealiz
*** 2312,2319 ****
  	f->clear_in_worklist ();
      }
    if (dump_file)
!     for (auto const &iter : map_)
!       iter.second->dump (dump_file);
  }
  
  /* Read the profile and create a function_instance with head count as
--- 2653,2660 ----
  	f->clear_in_worklist ();
      }
    if (dump_file)
!     for (auto const &function : map_)
!       function.second->dump (dump_file);
  }
  
  /* Read the profile and create a function_instance with head count as
*************** function_instance::read_function_instanc
*** 2354,2360 ****
    unsigned name = gcov_read_unsigned ();
    unsigned num_pos_counts = gcov_read_unsigned ();
    unsigned num_callsites = gcov_read_unsigned ();
!   function_instance *s = new function_instance (name, head_count);
    if (!stack->is_empty ())
      s->set_inlined_to (stack->last ());
    stack->safe_push (s);
--- 2695,2704 ----
    unsigned name = gcov_read_unsigned ();
    unsigned num_pos_counts = gcov_read_unsigned ();
    unsigned num_callsites = gcov_read_unsigned ();
!   function_instance *s
!     = new function_instance (name,
! 			     afdo_string_table->get_filename_by_symbol (name),
! 			     head_count);
    if (!stack->is_empty ())
      s->set_inlined_to (stack->last ());
    stack->safe_push (s);
*************** function_instance::read_function_instanc
*** 2365,2372 ****
        unsigned num_targets = gcov_read_unsigned ();
        gcov_type count = gcov_read_counter ();
        s->pos_counts[offset].count = count;
-       afdo_profile_info->sum_max = std::max (afdo_profile_info->sum_max,
- 					     count);
  
        for (unsigned j = 0; j < stack->length (); j++)
          (*stack)[j]->total_count_ += count;
--- 2709,2714 ----
*************** function_instance::read_function_instanc
*** 2383,2390 ****
        unsigned offset = gcov_read_unsigned ();
        function_instance *callee_function_instance
            = read_function_instance (stack, -1);
!       s->callsites[std::make_pair (offset, callee_function_instance->name ())]
!           = callee_function_instance;
      }
    stack->pop ();
    return s;
--- 2725,2733 ----
        unsigned offset = gcov_read_unsigned ();
        function_instance *callee_function_instance
            = read_function_instance (stack, -1);
!       s->callsites[std::make_pair (offset,
! 				   callee_function_instance->symbol_name ())]
! 	= callee_function_instance;
      }
    stack->pop ();
    return s;
*************** autofdo_source_profile::~autofdo_source_
*** 2404,2424 ****
  function_instance *
  autofdo_source_profile::get_function_instance_by_decl (tree decl) const
  {
    int index = afdo_string_table->get_index_by_decl (decl);
    if (index == -1)
      return NULL;
!   name_function_instance_map::const_iterator ret = map_.find (index);
!   return ret == map_.end () ? NULL : ret->second;
  }
  
! /* For a given NAME_INDEX, returns the top-level function_instance.  */
  
  function_instance *
! autofdo_source_profile::get_function_instance_by_name_index (int name_index)
!        	const
  {
!   name_function_instance_map::const_iterator ret = map_.find (name_index);
!   return ret == map_.end () ? NULL : ret->second;
  }
  
  /* Add function instance FN.  */
--- 2747,2769 ----
  function_instance *
  autofdo_source_profile::get_function_instance_by_decl (tree decl) const
  {
+   const char *filename = get_normalized_path (DECL_SOURCE_FILE (decl));
    int index = afdo_string_table->get_index_by_decl (decl);
    if (index == -1)
      return NULL;
! 
!   function_instance_descriptor descriptor (
!     afdo_string_table->get_filename_index (filename), index);
!   return find_function_instance (descriptor);
  }
  
! /* For a given DESCRIPTOR, return the matching instance if found.  */
  
  function_instance *
! autofdo_source_profile::get_function_instance_by_descriptor (
!   function_instance_descriptor descriptor) const
  {
!   return find_function_instance (descriptor);
  }
  
  /* Add function instance FN.  */
*************** autofdo_source_profile::get_function_ins
*** 2426,2434 ****
  void
  autofdo_source_profile::add_function_instance (function_instance *fn)
  {
!   int index = fn->name ();
!   gcc_checking_assert (map_.count (index) == 0);
!   map_[index] = fn;
  }
  
  /* Find count_info for a given gimple STMT. If found, store the count_info
--- 2771,2778 ----
  void
  autofdo_source_profile::add_function_instance (function_instance *fn)
  {
!   gcc_checking_assert (map_.find (fn->get_descriptor ()) == map_.end ());
!   map_[fn->get_descriptor ()] = fn;
  }
  
  /* Find count_info for a given gimple STMT. If found, store the count_info
*************** autofdo_source_profile::get_callsite_tot
*** 2587,2598 ****
  	fprintf (dump_file, "No function instance found\n");
        return 0;
      }
!   if (afdo_string_table->get_index_by_decl (edge->callee->decl) != s->name ())
      {
        if (dump_file)
  	fprintf (dump_file, "Mismatched name of callee %s and profile %s\n",
  		 raw_symbol_name (edge->callee->decl),
! 		 afdo_string_table->get_name (s->name ()));
        return 0;
      }
  
--- 2931,2943 ----
  	fprintf (dump_file, "No function instance found\n");
        return 0;
      }
!   if (afdo_string_table->get_index_by_decl (edge->callee->decl)
!       != s->symbol_name ())
      {
        if (dump_file)
  	fprintf (dump_file, "Mismatched name of callee %s and profile %s\n",
  		 raw_symbol_name (edge->callee->decl),
! 		 afdo_string_table->get_symbol_name (s->symbol_name ()));
        return 0;
      }
  
*************** autofdo_source_profile::read ()
*** 2632,2650 ****
    for (unsigned i = 0; i < function_num; i++)
      {
        function_instance::function_instance_stack stack;
!       function_instance *s = function_instance::read_function_instance (
!           &stack, gcov_read_counter ());
!       int fun_id = s->name ();
!       /* If function_instance with get_original_name (without the clone
! 	 suffix) exits, merge the function instances.  */
!       if (map_.count (fun_id) == 0)
! 	map_[fun_id] = s;
        else
  	fatal_error (UNKNOWN_LOCATION,
  		     "auto-profile contains duplicated function instance %s",
! 		     afdo_string_table->get_name (s->name ()));
      }
!   int hot_frac = param_hot_bb_count_fraction;
    /* Scale up the profile, but leave some bits in case some counts gets
       bigger than sum_max eventually.  */
    if (afdo_profile_info->sum_max)
--- 2977,2994 ----
    for (unsigned i = 0; i < function_num; i++)
      {
        function_instance::function_instance_stack stack;
!       function_instance *s
! 	= function_instance::read_function_instance (&stack,
! 						     gcov_read_counter ());
! 
!       if (find_function_instance (s->get_descriptor ()) == nullptr)
! 	add_function_instance (s);
        else
  	fatal_error (UNKNOWN_LOCATION,
  		     "auto-profile contains duplicated function instance %s",
! 		     afdo_string_table->get_symbol_name (s->symbol_name ()));
      }
!   afdo_profile_info->sum_max = afdo_summary_info->max_count;
    /* Scale up the profile, but leave some bits in case some counts gets
       bigger than sum_max eventually.  */
    if (afdo_profile_info->sum_max)
*************** autofdo_source_profile::read ()
*** 2652,2673 ****
        = MAX (((gcov_type)1 << (profile_count::n_bits - 10))
  	     / afdo_profile_info->sum_max, 1);
    afdo_profile_info->cutoff *= afdo_count_scale;
!   afdo_hot_bb_threshold
!     = hot_frac
!       ? afdo_profile_info->sum_max * afdo_count_scale / hot_frac
!       : (gcov_type)profile_count::max_count;
    set_hot_bb_threshold (afdo_hot_bb_threshold);
    if (dump_file)
!     fprintf (dump_file, "Max count in profile %" PRIu64 "\n"
! 			"Setting scale %" PRIu64 "\n"
! 			"Scaled max count %" PRIu64 "\n"
! 			"Cutoff %" PRIu64 "\n"
! 			"Hot count threshold %" PRIu64 "\n\n",
! 	     (int64_t)afdo_profile_info->sum_max,
! 	     (int64_t)afdo_count_scale,
! 	     (int64_t)(afdo_profile_info->sum_max * afdo_count_scale),
! 	     (int64_t)afdo_profile_info->cutoff,
! 	     (int64_t)afdo_hot_bb_threshold);
    afdo_profile_info->sum_max *= afdo_count_scale;
    return true;
  }
--- 2996,3020 ----
        = MAX (((gcov_type)1 << (profile_count::n_bits - 10))
  	     / afdo_profile_info->sum_max, 1);
    afdo_profile_info->cutoff *= afdo_count_scale;
!   /* Derive the hot count threshold from the profile summary.  */
!   afdo_hot_bb_threshold = afdo_summary_info->get_threshold_count (
! 			    param_hot_bb_count_ws_permille * 1000)
! 			  * afdo_count_scale;
    set_hot_bb_threshold (afdo_hot_bb_threshold);
    if (dump_file)
!     fprintf (dump_file,
! 	     "Max count in profile %" PRIu64 "\n"
! 	     "Setting scale %" PRIu64 "\n"
! 	     "Scaled max count %" PRIu64 "\n"
! 	     "Cutoff %" PRIu64 "\n"
! 	     "Unscaled hot count threshold %" PRIu64 "\n"
! 	     "Hot count threshold %" PRIu64 "\n\n",
! 	     (int64_t) afdo_profile_info->sum_max, (int64_t) afdo_count_scale,
! 	     (int64_t) (afdo_profile_info->sum_max * afdo_count_scale),
! 	     (int64_t) afdo_profile_info->cutoff,
! 	     (int64_t) afdo_summary_info->get_threshold_count (
! 	       param_hot_bb_count_ws_permille * 1000),
! 	     (int64_t) afdo_hot_bb_threshold);
    afdo_profile_info->sum_max *= afdo_count_scale;
    return true;
  }
*************** function_instance *
*** 2679,2694 ****
  autofdo_source_profile::get_function_instance_by_inline_stack (
      const inline_stack &stack) const
  {
!   name_function_instance_map::const_iterator iter = map_.find (
!       afdo_string_table->get_index_by_decl (stack[stack.length () - 1].decl));
!   if (iter == map_.end ())
      {
        if (dump_file)
  	fprintf (dump_file, "No offline instance for %s\n",
  		 raw_symbol_name (stack[stack.length () - 1].decl));
        return NULL;
      }
!   function_instance *s = iter->second;
    for (unsigned i = stack.length () - 1; i > 0; i--)
      {
        s = s->get_function_instance_by_decl (stack[i].afdo_loc,
--- 3026,3045 ----
  autofdo_source_profile::get_function_instance_by_inline_stack (
      const inline_stack &stack) const
  {
!   function_instance_descriptor descriptor (
!     afdo_string_table->get_filename_index (
!       get_normalized_path (DECL_SOURCE_FILE (stack[stack.length () - 1].decl))),
!     afdo_string_table->get_index_by_decl (stack[stack.length () - 1].decl));
!   function_instance *s = find_function_instance (descriptor);
! 
!   if (s == NULL)
      {
        if (dump_file)
  	fprintf (dump_file, "No offline instance for %s\n",
  		 raw_symbol_name (stack[stack.length () - 1].decl));
        return NULL;
      }
! 
    for (unsigned i = stack.length () - 1; i > 0; i--)
      {
        s = s->get_function_instance_by_decl (stack[i].afdo_loc,
*************** autofdo_source_profile::get_function_ins
*** 2716,2721 ****
--- 3067,3116 ----
    return s;
  }
  
+ /* Find the matching function instance which has DESCRIPTOR as its
+    descriptor.  If not found, also try checking if an instance exists with the
+    same name which has no associated filename.  */
+ 
+ autofdo_source_profile::name_function_instance_map::const_iterator
+ autofdo_source_profile::find_iter_for_function_instance (
+   function_instance_descriptor descriptor) const
+ {
+   auto it = map_.find (descriptor);
+ 
+   /* Try searching for the symbol not having a filename if it isn't found.  */
+   if (it == map_.end ())
+     it = map_.find (
+       function_instance_descriptor (string_table::unknown_filename,
+ 				    (int) descriptor.symbol_name ()));
+   return it;
+ }
+ 
+ /* Similar to the above, but return a pointer to the instance instead of an
+    iterator.  */
+ 
+ function_instance *
+ autofdo_source_profile::find_function_instance (
+   function_instance_descriptor descriptor) const
+ {
+   auto it = find_iter_for_function_instance (descriptor);
+   return it == map_.end () ? NULL : it->second;
+ }
+ 
+ /* Remove a function instance from the map.  Returns true if the entry was
+    actually deleted.  */
+ 
+ bool
+ autofdo_source_profile::remove_function_instance (function_instance *inst)
+ {
+   auto iter = find_iter_for_function_instance (inst->get_descriptor ());
+   if (iter != map_.end ())
+     {
+       map_.erase (iter);
+       return true;
+     }
+   return false;
+ }
+ 
  /* Module profile is only used by LIPO. Here we simply ignore it.  */
  
  static void
*************** read_profile (void)
*** 2761,2766 ****
--- 3156,3169 ----
    /* Skip the empty integer.  */
    gcov_read_unsigned ();
  
+   /* summary_info.  */
+   afdo_summary_info = new summary_info ();
+   if (!afdo_summary_info->read ())
+     {
+       error ("cannot read summary information from %s", auto_profile_file);
+       return;
+     }
+ 
    /* string_table.  */
    afdo_string_table = new string_table ();
    if (!afdo_string_table->read ())
*************** afdo_indirect_call (gcall *stmt, const i
*** 2840,2851 ****
      }
    total *= afdo_count_scale;
    struct cgraph_node *direct_call = cgraph_node::get_for_asmname (
!       get_identifier (afdo_string_table->get_name (max_iter->first)));
    if (direct_call == NULL)
      {
        if (dump_file)
  	fprintf (dump_file, "Failed to find cgraph node for %s\n",
! 		 afdo_string_table->get_name (max_iter->first));
        return false;
      }
  
--- 3243,3254 ----
      }
    total *= afdo_count_scale;
    struct cgraph_node *direct_call = cgraph_node::get_for_asmname (
!     get_identifier (afdo_string_table->get_symbol_name (max_iter->first)));
    if (direct_call == NULL)
      {
        if (dump_file)
  	fprintf (dump_file, "Failed to find cgraph node for %s\n",
! 		 afdo_string_table->get_symbol_name (max_iter->first));
        return false;
      }
  
*************** end_auto_profile (void)
*** 4201,4206 ****
--- 4604,4610 ----
  {
    delete autofdo::afdo_source_profile;
    delete autofdo::afdo_string_table;
+   delete autofdo::afdo_summary_info;
    profile_info = NULL;
  }
  
diff -Nrcpad gcc-16-20251221/gcc/c/ChangeLog gcc-16-20251228/gcc/c/ChangeLog
*** gcc-16-20251221/gcc/c/ChangeLog	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/c/ChangeLog	Sun Dec 28 22:32:06 2025
***************
*** 1,3 ****
--- 1,7 ----
+ 2025-12-23  Dhruv Chawla  <dhruvc@nvidia.com>
+ 
+ 	* Make-lang.in: Bump GCOV version to 3.
+ 
  2025-12-19  Jakub Jelinek  <jakub@redhat.com>
  
  	* gimple-parser.cc (c_parser_gimple_switch_stmt): Fix comment typo,
diff -Nrcpad gcc-16-20251221/gcc/c/Make-lang.in gcc-16-20251228/gcc/c/Make-lang.in
*** gcc-16-20251221/gcc/c/Make-lang.in	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/c/Make-lang.in	Sun Dec 28 22:32:06 2025
*************** create_fdas_for_cc1: ../stage1-gcc/cc1$(
*** 102,108 ****
  	  echo $$perf_path; \
  	  if [ -f $$perf_path ]; then \
  	    profile_name=cc1_$$component_in_prev.fda; \
! 	    $(CREATE_GCOV) -binary ../stage1-gcc/cc1$(exeext) -gcov $$profile_name -profile $$perf_path -gcov_version 2 || exit 1; \
  	  fi; \
  	done;
  
--- 102,108 ----
  	  echo $$perf_path; \
  	  if [ -f $$perf_path ]; then \
  	    profile_name=cc1_$$component_in_prev.fda; \
! 	    $(CREATE_GCOV) -binary ../stage1-gcc/cc1$(exeext) -gcov $$profile_name -profile $$perf_path -gcov_version 3 || exit 1; \
  	  fi; \
  	done;
  
*************** create_fdas_for_cc1: ../stage1-gcc/cc1$(
*** 112,118 ****
  	  echo $$perf_path; \
  	  if [ -f $$perf_path ]; then \
  	    profile_name=cc1_$$component_in_prev_target.fda; \
! 	    $(CREATE_GCOV) -binary ../prev-gcc/cc1$(exeext) -gcov $$profile_name -profile $$perf_path -gcov_version 2 || exit 1; \
  	  fi; \
  	done;
  
--- 112,118 ----
  	  echo $$perf_path; \
  	  if [ -f $$perf_path ]; then \
  	    profile_name=cc1_$$component_in_prev_target.fda; \
! 	    $(CREATE_GCOV) -binary ../prev-gcc/cc1$(exeext) -gcov $$profile_name -profile $$perf_path -gcov_version 3 || exit 1; \
  	  fi; \
  	done;
  
diff -Nrcpad gcc-16-20251221/gcc/c-family/ChangeLog gcc-16-20251228/gcc/c-family/ChangeLog
*** gcc-16-20251221/gcc/c-family/ChangeLog	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/c-family/ChangeLog	Sun Dec 28 22:32:06 2025
***************
*** 1,3 ****
--- 1,17 ----
+ 2025-12-26  Egas Ribeiro  <egas.g.ribeiro@gmail.com>
+ 
+ 	PR c++/121864
+ 	* c-opts.cc (c_common_finish): Use out_fname as fallback when
+ 	fdeps_file is NULL in error message.
+ 
+ 2025-12-23  Yuao Ma  <c8ef@outlook.com>
+ 
+ 	* c-common.cc: Mention c_common_init_options.
+ 
+ 2025-12-21  Yuao Ma  <c8ef@outlook.com>
+ 
+ 	* c-common.h (enum cxx_dialect): c++17 to c++20.
+ 
  2025-12-18  Tobias Burnus  <tburnus@baylibre.com>
  
  	* c-omp.cc (c_omp_split_clauses): Handle target's
diff -Nrcpad gcc-16-20251221/gcc/c-family/c-common.cc gcc-16-20251228/gcc/c-family/c-common.cc
*** gcc-16-20251221/gcc/c-family/c-common.cc	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/c-family/c-common.cc	Sun Dec 28 22:32:06 2025
*************** const char *constant_string_class_name;
*** 262,268 ****
  
  int warn_abi_version = -1;
  
! /* The C++ dialect being used.  Default set in c_common_post_options.  */
  
  enum cxx_dialect cxx_dialect = cxx_unset;
  
--- 262,268 ----
  
  int warn_abi_version = -1;
  
! /* The C++ dialect being used.  Default set in c_common_init_options.  */
  
  enum cxx_dialect cxx_dialect = cxx_unset;
  
diff -Nrcpad gcc-16-20251221/gcc/c-family/c-opts.cc gcc-16-20251228/gcc/c-family/c-opts.cc
*** gcc-16-20251221/gcc/c-family/c-opts.cc	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/c-family/c-opts.cc	Sun Dec 28 22:32:06 2025
*************** c_common_finish (void)
*** 1490,1496 ****
  	}
        if (fdeps_stream == deps_stream && fdeps_stream != stdout)
  	fatal_error (input_location, "%<-MF%> and %<-fdeps-file=%> cannot share an output file %s: %m",
! 		     fdeps_file);
      }
  
    /* For performance, avoid tearing down cpplib's internal structures
--- 1490,1496 ----
  	}
        if (fdeps_stream == deps_stream && fdeps_stream != stdout)
  	fatal_error (input_location, "%<-MF%> and %<-fdeps-file=%> cannot share an output file %s: %m",
! 		     fdeps_file ? fdeps_file : out_fname);
      }
  
    /* For performance, avoid tearing down cpplib's internal structures
diff -Nrcpad gcc-16-20251221/gcc/config/aarch64/aarch64-c.cc gcc-16-20251228/gcc/config/aarch64/aarch64-c.cc
*** gcc-16-20251221/gcc/config/aarch64/aarch64-c.cc	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/config/aarch64/aarch64-c.cc	Sun Dec 28 22:32:06 2025
*************** aarch64_update_cpp_builtins (cpp_reader
*** 294,299 ****
--- 294,303 ----
  
    aarch64_def_or_undef (TARGET_SME, "__ARM_FEATURE_SME", pfile);
    aarch64_def_or_undef (TARGET_SME_I16I64, "__ARM_FEATURE_SME_I16I64", pfile);
+   aarch64_def_or_undef (AARCH64_HAVE_ISA (SME_F8F16),
+ 			"__ARM_FEATURE_SME_F8F16", pfile);
+   aarch64_def_or_undef (AARCH64_HAVE_ISA (SME_F8F32),
+ 			"__ARM_FEATURE_SME_F8F32", pfile);
    aarch64_def_or_undef (AARCH64_HAVE_ISA (SME_B16B16),
  			"__ARM_FEATURE_SME_B16B16", pfile);
    aarch64_def_or_undef (AARCH64_HAVE_ISA (SME_F16F16),
diff -Nrcpad gcc-16-20251221/gcc/config/aarch64/aarch64-option-extensions.def gcc-16-20251228/gcc/config/aarch64/aarch64-option-extensions.def
*** gcc-16-20251221/gcc/config/aarch64/aarch64-option-extensions.def	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/config/aarch64/aarch64-option-extensions.def	Sun Dec 28 22:32:06 2025
*************** AARCH64_OPT_EXTENSION("lut", LUT, (SIMD)
*** 308,313 ****
--- 308,317 ----
  
  AARCH64_OPT_EXTENSION ("sme-lutv2", SME_LUTv2, (SME2), (), (), "smelutv2")
  
+ AARCH64_OPT_EXTENSION ("sme-f8f16", SME_F8F16, (SME2, FP8), (), (), "smef8f16")
+ 
+ AARCH64_OPT_EXTENSION ("sme-f8f32", SME_F8F32, (SME2, FP8), (), (), "smef8f32")
+ 
  AARCH64_OPT_EXTENSION("cpa", CPA, (), (), (), "")
  
  AARCH64_OPT_EXTENSION("fprcvt", FPRCVT, (FP), (), (), "fprcvt")
diff -Nrcpad gcc-16-20251221/gcc/config/aarch64/aarch64-sme.md gcc-16-20251228/gcc/config/aarch64/aarch64-sme.md
*** gcc-16-20251221/gcc/config/aarch64/aarch64-sme.md	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/config/aarch64/aarch64-sme.md	Sun Dec 28 22:32:06 2025
***************
*** 45,50 ****
--- 45,51 ----
  ;; ---- [INT] Ternary widening arithmetic on ZA slice
  ;; ---- [INT] Sum of outer products
  ;; ---- [FP] Dot product
+ ;; ---- [FP8] Dot product
  ;; ---- [FP] Ternary arithmetic on ZA slice
  ;; ---- [FP] Ternary widening arithmetic on ZA slice
  ;; ---- [FP] Sum of outer products
***************
*** 1893,1898 ****
--- 1894,2197 ----
  )
  
  ;; -------------------------------------------------------------------------
+ ;; ---- [FP8] Dot product
+ ;; -------------------------------------------------------------------------
+ ;; Includes:
+ ;; - FDOT (2-way, multiple vectors, FP8 to FP16)
+ ;;   - 2 ZA single-vectors (svdot_za16_mf8_vg1x2_fpm)
+ ;;   - 4 ZA single-vectors (svdot_za16_mf8_vg1x4_fpm)
+ ;; - FDOT (4-way, multiple vectors)
+ ;;   - 2 ZA single-vectors (svdot_za32_mf8_vg1x2_fpm)
+ ;;   - 4 ZA single-vectors (svdot_za32_mf8_vg1x4_fpm)
+ 
+ ;; - FDOT (2-way, multiple and single vector, FP8 to FP16)
+ ;;   - 2 ZA single-vectors (svdot_single_za16_mf8_vg1x2_fpm)
+ ;;   - 4 ZA single-vectors (svdot_single_za16_mf8_vg1x4_fpm)
+ ;; - FDOT (4-way, multiple and single vector)
+ ;;   - 2 ZA single-vectors (svdot_single_za32_mf8_vg1x2_fpm)
+ ;;   - 4 ZA single-vectors (svdot_single_za32_mf8_vg1x4_fpm)
+ 
+ ;; - FDOT (2-way, multiple and indexed vector, FP8 to FP16)
+ ;;   - 2 ZA single-vectors (svdot_lane_za16_mf8_vg1x2_fpm)
+ ;;   - 4 ZA single-vectors (svdot_lane_za16_mf8_vg1x4_fpm)
+ ;; - FDOT (4-way, multiple and indexed vector)
+ ;;   - 2 ZA single-vectors (svdot_lane_za32_mf8_vg1x2_fpm)
+ ;;   - 4 ZA single-vectors (svdot_lane_za32_mf8_vg1x4_fpm)
+ 
+ ;; - FVDOT (FP8 to FP16)
+ ;;   - 2 ZA single-vectors (svvdot_lane_za16_mf8_vg1x2_fpm)
+ 
+ ;; - FVDOTB
+ ;;   - 2 ZA single-vectors (svvdotb_lane_za32_mf8_vg1x4_fpm)
+ 
+ ;; - FVDOTT
+ ;;   - 2 ZA single-vectors (svvdott_lane_za32_mf8_vg1x4_fpm)
+ ;; -------------------------------------------------------------------------
+ 
+ ;; FDOT (2-way, multiple vectors, FP8 to FP16)
+ ;;   Two ZA single-vectors (svdot_za16_mf8_vg1x2_fpm)
+ ;;   FDOT ZA.H[<Wv>, <offs>{, VGx2}], { <Zn1>.B-<Zn2>.B }, { <Zm1>.B-<Zm2>.B }
+ ;;     <Wv> must be W8-W11
+ ;;     <offs> must be 0-7
+ ;;     <Zn1> must be a multiple of 2
+ ;;     <Zn2> must be a multiple of 2 + 1
+ ;;     <Zm1> must be a multiple of 2
+ ;;     <Zm2> must be a multiple of 2 + 1
+ ;;   Four ZA single-vectors (svdot_za16_mf8_vg1x4_fpm)
+ ;;   FDOT ZA.H[<Wv>, <offs>{, VGx4}], { <Zn1>.B-<Zn4>.B }, { <Zm1>.B-<Zm4>.B }
+ ;;     <Wv> must be W8-W11
+ ;;     <offs> must be 0-7
+ ;;     <Zn1> must be a multiple of 4
+ ;;     <Zn4> must be a multiple of 4 + 3
+ ;;     <Zm1> must be a multiple of 4
+ ;;     <Zm4> must be a multiple of 4 + 3
+ ;; FDOT (4-way, multiple vectors)
+ ;;   Two ZA single-vectors (svdot_za32_mf8_vg1x2_fpm)
+ ;;   FDOT ZA.S[<Wv>, <offs>{, VGx2}], { <Zn1>.B-<Zn2>.B }, { <Zm1>.B-<Zm2>.B }
+ ;;     <Wv> must be W8-W11
+ ;;     <offs> must be 0-7
+ ;;     <Zn1> must be a multiple of 2
+ ;;     <Zn2> must be a multiple of 2 + 1
+ ;;     <Zm1> must be a multiple of 2
+ ;;     <Zm2> must be a multiple of 2 + 1
+ ;;   Four ZA single-vectors (svdot_za32_mf8_vg1x4_fpm)
+ ;;   FDOT ZA.S[<Wv>, <offs>{, VGx4}], { <Zn1>.B-<Zn4>.B }, { <Zm1>.B-<Zm4>.B }
+ ;;     <Wv> must be W8-W11
+ ;;     <offs> must be 0-7
+ ;;     <Zn1> must be a multiple of 4
+ ;;     <Zn2> must be a multiple of 4 + 3
+ ;;     <Zm1> must be a multiple of 4
+ ;;     <Zm2> must be a multiple of 4 + 3
+ (define_insn "@aarch64_sme_<optab><SME_ZA_F8F16_32:mode><SME_ZA_FP8_x24:mode>"
+   [(set (reg:SME_ZA_F8F16_32 ZA_REGNUM)
+ 	(unspec:SME_ZA_F8F16_32
+ 	  [(reg:SME_ZA_F8F16_32 ZA_REGNUM)
+ 	   (reg:DI SME_STATE_REGNUM)
+ 	   (match_operand:SI 0 "register_operand" "Uci")
+ 	   (match_operand:SME_ZA_FP8_x24 1 "aligned_register_operand" "Uw<vector_count>")
+ 	   (match_operand:SME_ZA_FP8_x24 2 "aligned_register_operand" "Uw<vector_count>")
+ 	   (reg:DI FPM_REGNUM)]
+ 	  SME_FP8_DOTPROD))]
+   "TARGET_STREAMING"
+   "<optab>\tza.<SME_ZA_F8F16_32:Vetype>[%w0, 0, vgx<vector_count>], %1, %2"
+ )
+ (define_insn "@aarch64_sme_<optab><SME_ZA_F8F16_32:mode><SME_ZA_FP8_x24:mode>_plus"
+   [(set (reg:SME_ZA_F8F16_32 ZA_REGNUM)
+ 	(unspec:SME_ZA_F8F16_32
+ 	  [(reg:SME_ZA_F8F16_32 ZA_REGNUM)
+ 	   (reg:DI SME_STATE_REGNUM)
+ 	   (plus:SI (match_operand:SI 0 "register_operand" "Uci")
+ 		    (match_operand:SI 1 "const_0_to_7_operand"))
+ 	   (match_operand:SME_ZA_FP8_x24 2 "aligned_register_operand" "Uw<vector_count>")
+ 	   (match_operand:SME_ZA_FP8_x24 3 "aligned_register_operand" "Uw<vector_count>")
+ 	   (reg:DI FPM_REGNUM)]
+ 	  SME_FP8_DOTPROD))]
+   "TARGET_STREAMING"
+   "<optab>\tza.<SME_ZA_F8F16_32:Vetype>[%w0, %1, vgx<vector_count>], %2, %3"
+ )
+ 
+ ;; FDOT (2-way, multiple and single vector, FP8 to FP16)
+ ;;   Two ZA single-vectors (svdot_single_za16_mf8_vg1x2_fpm)
+ ;;   FDOT ZA.H[<Wv>, <offs>{, VGx2}], { <Zn1>.B-<Zn2>.B }, <Zm>.B
+ ;;     <Wv> must be W8-W11
+ ;;     <offs> must be 0-7
+ ;;     <Zn1> can be any Z register
+ ;;     <Zn2> must be (<Zn1> + 1) mod 32
+ ;;     <Zm> must be Z0-Z15
+ ;;   Four ZA single-vectors (svdot_single_za16_mf8_vg1x4_fpm)
+ ;;   FDOT ZA.H[<Wv>, <offs>{, VGx4}], { <Zn1>.B-<Zn4>.B }, <Zm>.B
+ ;;     <Wv> must be W8-W11
+ ;;     <offs> must be 0-7
+ ;;     <Zn1> can be any Z register
+ ;;     <Zn4> must be (<Zn1> + 3) mod 32
+ ;;     <Zm> must be Z0-Z15
+ ;; FDOT (4-way, multiple and single vector)
+ ;;   Two ZA single-vectors (svdot_single_za32_mf8_vg1x2_fpm)
+ ;;   FDOT ZA.H[<Wv>, <offs>{, VGx2}], { <Zn1>.B-<Zn2>.B }, <Zm>.B
+ ;;     <Wv> must be W8-W11
+ ;;     <offs> must be 0-7
+ ;;     <Zn1> can be any Z register
+ ;;     <Zn2> must be (<Zn1> + 1) mod 32
+ ;;     <Zm> must be Z0-Z15
+ ;;   Four ZA single-vectors (svdot_single_za32_mf8_vg1x2_fpm)
+ ;;   FDOT ZA.H[<Wv>, <offs>{, VGx4}], { <Zn1>.B-<Zn4>.B }, <Zm>.B
+ ;;     <Wv> must be W8-W11
+ ;;     <offs> must be 0-7
+ ;;     <Zn1> can be any Z register
+ ;;     <Zn4> must be (<Zn1> + 3) mod 32
+ ;;     <Zm> must be Z0-Z15
+ (define_insn "@aarch64_sme_single<optab><SME_ZA_F8F16_32:mode><SME_ZA_FP8_x24:mode>"
+   [(set (reg:SME_ZA_F8F16_32 ZA_REGNUM)
+ 	(unspec:SME_ZA_F8F16_32
+ 	  [(reg:SME_ZA_F8F16_32 ZA_REGNUM)
+ 	   (reg:DI SME_STATE_REGNUM)
+ 	   (match_operand:SI 0 "register_operand" "Uci")
+ 	   (match_operand:SME_ZA_FP8_x24	   1 "register_operand" "w")
+ 	   (match_operand:<SME_ZA_FP8_x24:VSINGLE> 2 "register_operand" "x")
+ 	   (reg:DI FPM_REGNUM)]
+ 	  SME_FP8_DOTPROD))]
+   "TARGET_STREAMING"
+   "<optab>\tza.<SME_ZA_F8F16_32:Vetype>[%w0, 0, vgx<vector_count>], %1, %2.b"
+ )
+ (define_insn "@aarch64_sme_single<optab><SME_ZA_F8F16_32:mode><SME_ZA_FP8_x24:mode>_plus"
+   [(set (reg:SME_ZA_F8F16_32 ZA_REGNUM)
+ 	(unspec:SME_ZA_F8F16_32
+ 	  [(reg:SME_ZA_F8F16_32 ZA_REGNUM)
+ 	   (reg:DI SME_STATE_REGNUM)
+ 	   (plus:SI (match_operand:SI 0 "register_operand" "Uci")
+ 		    (match_operand:SI 1 "const_0_to_7_operand"))
+ 	   (match_operand:SME_ZA_FP8_x24	   2 "register_operand" "w")
+ 	   (match_operand:<SME_ZA_FP8_x24:VSINGLE> 3 "register_operand" "x")
+ 	   (reg:DI FPM_REGNUM)]
+ 	  SME_FP8_DOTPROD))]
+   "TARGET_STREAMING"
+   "<optab>\tza.<SME_ZA_F8F16_32:Vetype>[%w0, %1, vgx<vector_count>], %2, %3.b"
+ )
+ 
+ ;; FDOT (2-way, multiple and indexed vector, FP8 to FP16)
+ ;;   Two ZA single-vectors (svdot_lane_za16_mf8_vg1x2_fpm)
+ ;;   FDOT ZA.H[<Wv>, <offs>{, VGx2}], { <Zn1>.B-<Zn2>.B }, <Zm>.B[<index>]
+ ;;     <Wv> must be W8-W11
+ ;;     <offs> must be 0-7
+ ;;     <Zn1> must be a multiple of 2
+ ;;     <Zn2> must be a multiple of 2 + 1
+ ;;     <Zm> must be Z0-Z15
+ ;;     <index> must be 0-7
+ ;;   Four ZA single-vectors (svdot_lane_za16_mf8_vg1x4_fpm)
+ ;;   FDOT ZA.H[<Wv>, <offs>{, VGx4}], { <Zn1>.B-<Zn4>.B }, <Zm>.B[<index>]
+ ;;     <Wv> must be W8-W11
+ ;;     <offs> must be 0-7
+ ;;     <Zn1> must be a multiple of 4
+ ;;     <Zn4> must be a multiple of 4 + 3
+ ;;     <Zm> must be Z0-Z15
+ ;;     <index> must be 0-7
+ ;;   Two ZA single-vectors (svdot_lane_za32_mf8_vg1x2_fpm)
+ ;;   FDOT ZA.S[<Wv>, <offs>{, VGx2}], { <Zn1>.B-<Zn2>.B }, <Zm>.B[<index>]
+ ;;     <Wv> must be W8-W11
+ ;;     <offs> must be 0-7
+ ;;     <Zn1> must be a multiple of 2
+ ;;     <Zn2> must be a multiple of 2 + 1
+ ;;     <Zm> must be Z0-Z15
+ ;;     <index> must be 0-3
+ ;;   Four ZA single-vectors (svdot_lane_za32_mf8_vg1x4_fpm)
+ ;;   FDOT ZA.S[<Wv>, <offs>{, VGx4}], { <Zn1>.B-<Zn4>.B }, <Zm>.B[<index>]
+ ;;     <Wv> must be W8-W11
+ ;;     <offs> must be 0-7
+ ;;     <Zn1> must be a multiple of 4
+ ;;     <Zn4> must be a multiple of 4 + 3
+ ;;     <Zm> must be Z0-Z15
+ ;;     <index> must be 0-3
+ (define_insn "@aarch64_sme_lane<optab><SME_ZA_F8F16_32:mode><SME_ZA_FP8_x24:mode>"
+   [(set (reg:SME_ZA_F8F16_32 ZA_REGNUM)
+ 	(unspec:SME_ZA_F8F16_32
+ 	  [(reg:SME_ZA_F8F16_32 ZA_REGNUM)
+ 	   (reg:DI SME_STATE_REGNUM)
+ 	   (match_operand:SI 0 "register_operand" "Uci")
+ 	   (match_operand:SME_ZA_FP8_x24	   1 "aligned_register_operand" "Uw<vector_count>")
+ 	   (match_operand:<SME_ZA_FP8_x24:VSINGLE> 2 "register_operand" "x")
+ 	   (match_operand:SI 3 "const_int_operand")
+ 	   (reg:DI FPM_REGNUM)]
+ 	  SME_FP8_DOTPROD))]
+   "TARGET_STREAMING"
+   "<optab>\tza.<SME_ZA_F8F16_32:Vetype>[%w0, 0, vgx<vector_count>], %1, %2.b[%3]"
+ )
+ 
+ (define_insn "@aarch64_sme_lane<optab><SME_ZA_F8F16_32:mode><SME_ZA_FP8_x24:mode>_plus"
+   [(set (reg:SME_ZA_F8F16_32 ZA_REGNUM)
+ 	(unspec:SME_ZA_F8F16_32
+ 	  [(reg:SME_ZA_F8F16_32 ZA_REGNUM)
+ 	   (reg:DI SME_STATE_REGNUM)
+ 	   (plus:SI (match_operand:SI 0 "register_operand" "Uci")
+ 		    (match_operand:SI 1 "const_0_to_7_operand"))
+ 	   (match_operand:SME_ZA_FP8_x24	   2 "aligned_register_operand" "Uw<vector_count>")
+ 	   (match_operand:<SME_ZA_FP8_x24:VSINGLE> 3 "register_operand" "x")
+ 	   (match_operand:SI 4 "const_int_operand")
+ 	   (reg:DI FPM_REGNUM)]
+ 	  SME_FP8_DOTPROD))]
+   "TARGET_STREAMING"
+   "<optab>\tza.<SME_ZA_F8F16_32:Vetype>[%w0, %1, vgx<vector_count>], %2, %3.b[%4]"
+ )
+ 
+ ;; FVDOT (2-way, multiple and indexed vector, FP8 to FP16)
+ ;;   Two ZA single-vectors (svvdot_lane_za16_mf8_vg1x2_fpm)
+ ;;   FVDOT ZA.H[<Wv>, <offs>{, VGx2}], { <Zn1>.B-<Zn2>.B }, <Zm>.B[<index>]
+ ;;     <Wv> must be W8-W11
+ ;;     <offs> must be 0-7
+ ;;     <Zn1> must be a multiple of 2
+ ;;     <Zn2> must be a multiple of 2 + 1
+ ;;     <Zm> must be Z0-Z15
+ ;;     <index> must be 0-7
+ (define_insn "@aarch64_sme_lane<optab><SME_ZA_F8F16:mode><SME_ZA_FP8_x2:mode>"
+   [(set (reg:SME_ZA_F8F16 ZA_REGNUM)
+ 	(unspec:SME_ZA_F8F16
+ 	  [(reg:SME_ZA_F8F16 ZA_REGNUM)
+ 	   (reg:DI SME_STATE_REGNUM)
+ 	   (match_operand:SI 0 "register_operand" "Uci")
+ 	   (match_operand:SME_ZA_FP8_x2		  1 "aligned_register_operand" "Uw<vector_count>")
+ 	   (match_operand:<SME_ZA_FP8_x2:VSINGLE> 2 "register_operand" "x")
+ 	   (match_operand:SI 3 "const_int_operand")
+ 	   (reg:DI FPM_REGNUM)]
+ 	  SME_FP8_FVDOT))]
+   "TARGET_STREAMING"
+   "<optab>\tza.h[%w0, 0, vgx<vector_count>], %1, %2.b[%3]"
+ )
+ (define_insn "@aarch64_sme_lane<optab><SME_ZA_F8F16:mode><SME_ZA_FP8_x2:mode>_plus"
+   [(set (reg:SME_ZA_F8F16 ZA_REGNUM)
+ 	(unspec:SME_ZA_F8F16
+ 	  [(reg:SME_ZA_F8F16 ZA_REGNUM)
+ 	   (reg:DI SME_STATE_REGNUM)
+ 	   (plus:SI (match_operand:SI 0 "register_operand" "Uci")
+ 		    (match_operand:SI 1 "const_0_to_7_operand"))
+ 	   (match_operand:SME_ZA_FP8_x2		  2 "aligned_register_operand" "Uw<vector_count>")
+ 	   (match_operand:<SME_ZA_FP8_x2:VSINGLE> 3 "register_operand" "x")
+ 	   (match_operand:SI 4 "const_int_operand")
+ 	   (reg:DI FPM_REGNUM)]
+ 	  SME_FP8_FVDOT))]
+   "TARGET_STREAMING"
+   "<optab>\tza.h[%w0, %1, vgx<vector_count>], %2, %3.b[%4]"
+ )
+ 
+ ;; FVDOTB (svvdotb_lane_za32_mf8_vg1x4_fpm)
+ ;; FVDOTT (svvdott_lane_za32_mf8_vg1x4_fpm)
+ ;;   FVDOTB ZA.S[<Wv>, <offs>, VGx4], { <Zn1>.B-<Zn2>.B }, <Zm>.B[<index>]
+ ;;   FVDOTT ZA.S[<Wv>, <offs>, VGx4], { <Zn1>.B-<Zn2>.B }, <Zm>.B[<index>]
+ ;;     <Wv> must be W8-W11
+ ;;     <offs> must be 0-7
+ ;;     <Zn1> must be a multiple of 2
+ ;;     <Zn2> must be a multiple of 2 + 1
+ ;;     <Zm> must be Z0-Z15
+ ;;     <index> must be 0-3
+ (define_insn "@aarch64_fvdot_half<optab>"
+   [(set (reg:SME_ZA_F8F32 ZA_REGNUM)
+ 	(unspec:SME_ZA_F8F32
+ 	  [(reg:SME_ZA_F8F32 ZA_REGNUM)
+ 	   (reg:DI SME_STATE_REGNUM)
+ 	   (match_operand:SI 0 "register_operand" "Uci")
+ 	   (match_operand:VNx32QI 1 "aligned_register_operand" "Uw2")
+ 	   (match_operand:VNx16QI 2 "register_operand" "x")
+ 	   (match_operand:DI 3 "const_int_operand")
+ 	   (reg:DI FPM_REGNUM)]
+ 	  SME_FP8_FVDOT_HALF))]
+   "TARGET_STREAMING"
+   "<optab>\tza.s[%w0, 0, vgx4], %1, %2.b[%3]"
+ )
+ (define_insn "@aarch64_fvdot_half<optab>_plus"
+   [(set (reg:SME_ZA_F8F32 ZA_REGNUM)
+ 	(unspec:SME_ZA_F8F32
+ 	  [(reg:SME_ZA_F8F32 ZA_REGNUM)
+ 	   (reg:DI SME_STATE_REGNUM)
+ 	   (plus:SI (match_operand:SI 0 "register_operand" "Uci")
+ 		    (match_operand:SI 1 "const_0_to_7_operand"))
+ 	   (match_operand:VNx32QI 2 "aligned_register_operand" "Uw2")
+ 	   (match_operand:VNx16QI 3 "register_operand" "x")
+ 	   (match_operand:DI 4 "const_int_operand")
+ 	   (reg:DI FPM_REGNUM)]
+ 	  SME_FP8_FVDOT_HALF))]
+   "TARGET_STREAMING"
+   "<optab>\tza.s[%w0, %1, vgx4], %2, %3.b[%4]"
+ )
+ 
+ ;; -------------------------------------------------------------------------
  ;; ---- [FP] Ternary arithmetic on ZA slice
  ;; -------------------------------------------------------------------------
  ;; Includes:
***************
*** 1999,2004 ****
--- 2298,2306 ----
  ;; - BFMLSL (SME2)
  ;; - FMLAL (SME2)
  ;; - FMLSL (SME2)
+ ;; - FMLAL (multiple and indexed vector, FP8 to FP16 and FP8 to FP32, SME2)
+ ;; - FMLAL (multiple and single vector, FP8 to FP16 and FP8 to FP32, SME2)
+ ;; - FMLAL (multiple vectors, FP8 to FP16 and FP8 to FP32, SME2)
  ;; -------------------------------------------------------------------------
  
  (define_insn "@aarch64_sme_<optab><VNx4SI_ONLY:mode><SVE_FULL_HF:mode>"
***************
*** 2129,2134 ****
--- 2431,2666 ----
    }
  )
  
+ ;; svmla_za16[_mf8]_vg2x2_fpm, svmla_za16[_mf8]_vg2x4_fpm
+ ;; svmla_za32[_mf8]_vg4x2_fpm, svmla_za32[_mf8]_vg4x4_fpm
+ (define_insn "@aarch64_sme_<optab><SME_ZA_F8F16_32:mode><SME_ZA_FP8_x24:mode>"
+   [(set (reg:SME_ZA_F8F16_32 ZA_REGNUM)
+ 	(unspec:SME_ZA_F8F16_32
+ 	  [(reg:SME_ZA_F8F16_32 ZA_REGNUM)
+ 	   (reg:DI SME_STATE_REGNUM)
+ 	   (match_operand:SI 0 "register_operand" "Uci")
+ 	   (match_operand:SME_ZA_FP8_x24 1 "aligned_register_operand" "Uw<vector_count>")
+ 	   (match_operand:SME_ZA_FP8_x24 2 "aligned_register_operand" "Uw<vector_count>")
+ 	   (reg:DI FPM_REGNUM)]
+ 	  SME_FP8_TERNARY_SLICE))]
+   "TARGET_STREAMING"
+   "<optab><SME_ZA_F8F16_32:za16_32_long>\tza.<SME_ZA_F8F16_32:Vetype>[%w0, 0:<SME_ZA_F8F16_32:za16_32_last_offset>, vgx<vector_count>], %1, %2"
+ )
+ 
+ ;; svmla_za16[_mf8]_vg2x2_fpm, svmla_za16[_mf8]_vg2x4_fpm (slice variable + offset)
+ (define_insn "*aarch64_sme_<optab><VNx8HI_ONLY:mode><SME_ZA_FP8_x24:mode>_plus"
+   [(set (reg:VNx8HI_ONLY ZA_REGNUM)
+ 	(unspec:VNx8HI_ONLY
+ 	  [(reg:VNx8HI_ONLY ZA_REGNUM)
+ 	   (reg:DI SME_STATE_REGNUM)
+ 	   (plus:SI (match_operand:SI 0 "register_operand" "Uci")
+ 		    (match_operand:SI 1 "const_<za16_offset_range>_operand"))
+ 	   (match_operand:SME_ZA_FP8_x24 2 "aligned_register_operand" "Uw<vector_count>")
+ 	   (match_operand:SME_ZA_FP8_x24 3 "aligned_register_operand" "Uw<vector_count>")
+ 	   (reg:DI FPM_REGNUM)]
+ 	  SME_FP8_TERNARY_SLICE))]
+   "TARGET_STREAMING_SME_F8F16"
+   {
+     operands[4] = GEN_INT (INTVAL (operands[1]) + 1);
+     return "<optab>\tza.h[%w0, %1:%4, vgx<vector_count>], %2, %3";
+   }
+ )
+ 
+ ;; svmla_za32[_mf8]_vg4x2_fpm, svmla_za32[_mf8]_vg4x4_fpm (slice variable + offset)
+ (define_insn "*aarch64_sme_<optab><VNx4SI_ONLY:mode><SME_ZA_FP8_x24:mode>_plus"
+   [(set (reg:VNx4SI_ONLY ZA_REGNUM)
+ 	(unspec:VNx4SI_ONLY
+ 	  [(reg:VNx4SI_ONLY ZA_REGNUM)
+ 	   (reg:DI SME_STATE_REGNUM)
+ 	   (plus:SI (match_operand:SI 0 "register_operand" "Uci")
+ 		    (match_operand:SI 1 "const_<za32_offset_range>_operand"))
+ 	   (match_operand:SME_ZA_FP8_x24 2 "aligned_register_operand" "Uw<vector_count>")
+ 	   (match_operand:SME_ZA_FP8_x24 3 "aligned_register_operand" "Uw<vector_count>")
+ 	   (reg:DI FPM_REGNUM)]
+ 	  SME_FP8_TERNARY_SLICE))]
+   "TARGET_STREAMING_SME_F8F32"
+   {
+     operands[4] = GEN_INT (INTVAL (operands[1]) + 3);
+     return "<optab>l\tza.s[%w0, %1:%4, vgx<vector_count>], %2, %3";
+   }
+ )
+ 
+ ;; svmla_za16[_mf8]_vg2x1_fpm, svmla_za32[_mf8]_vg4x1_fpm
+ (define_insn "@aarch64_sme_<optab><SME_ZA_F8F16_32:mode><VNx16QI_ONLY:mode>"
+   [(set (reg:SME_ZA_F8F16_32 ZA_REGNUM)
+ 	(unspec:SME_ZA_F8F16_32
+ 	  [(reg:SME_ZA_F8F16_32 ZA_REGNUM)
+ 	   (reg:DI SME_STATE_REGNUM)
+ 	   (match_operand:SI 0 "register_operand" "Uci")
+ 	   (match_operand:VNx16QI_ONLY 1 "register_operand" "w")
+ 	   (match_operand:VNx16QI_ONLY 2 "register_operand" "x")
+ 	   (reg:DI FPM_REGNUM)]
+ 	  SME_FP8_TERNARY_SLICE))]
+   "TARGET_STREAMING"
+   "<optab><SME_ZA_F8F16_32:za16_32_long>\tza.<SME_ZA_F8F16_32:Vetype>[%w0, 0:<SME_ZA_F8F16_32:za16_32_last_offset><vg_modifier>], %1.b, %2.b"
+ )
+ 
+ ;; svmla_za16[_mf8]_vg2x1_fpm (slice variable + offset)
+ (define_insn "*aarch64_sme_<optab><VNx8HI_ONLY:mode><VNx16QI_ONLY:mode>_plus"
+   [(set (reg:VNx8HI_ONLY ZA_REGNUM)
+ 	(unspec:VNx8HI_ONLY
+ 	  [(reg:VNx8HI_ONLY ZA_REGNUM)
+ 	   (reg:DI SME_STATE_REGNUM)
+ 	   (plus:SI (match_operand:SI 0 "register_operand" "Uci")
+ 		    (match_operand:SI 1 "const_<VNx16QI_ONLY:za32_offset_range>_operand"))
+ 	   (match_operand:VNx16QI_ONLY 2 "register_operand" "w")
+ 	   (match_operand:VNx16QI_ONLY 3 "register_operand" "x")
+ 	   (reg:DI FPM_REGNUM)]
+ 	  SME_FP8_TERNARY_SLICE))]
+   "TARGET_STREAMING_SME_F8F16"
+   {
+     operands[4] = GEN_INT (INTVAL (operands[1]) + 1);
+     return "<optab>\tza.h[%w0, %1:%4<vg_modifier>], %2.b, %3.b";
+   }
+ )
+ 
+ ;; svmla_za32[_mf8]_vg4x1_fpm (slice variable + offset)
+ (define_insn "*aarch64_sme_<optab><VNx4SI_ONLY:mode><VNx16QI_ONLY:mode>_plus"
+   [(set (reg:VNx4SI_ONLY ZA_REGNUM)
+ 	(unspec:VNx4SI_ONLY
+ 	  [(reg:VNx4SI_ONLY ZA_REGNUM)
+ 	   (reg:DI SME_STATE_REGNUM)
+ 	   (plus:SI (match_operand:SI 0 "register_operand" "Uci")
+ 		    (match_operand:SI 1 "const_<za32_offset_range>_operand"))
+ 	   (match_operand:VNx16QI_ONLY 2 "register_operand" "w")
+ 	   (match_operand:VNx16QI_ONLY 3 "register_operand" "x")
+ 	   (reg:DI FPM_REGNUM)]
+ 	  SME_FP8_TERNARY_SLICE))]
+   "TARGET_STREAMING_SME_F8F32"
+   {
+     operands[4] = GEN_INT (INTVAL (operands[1]) + 3);
+     return "<optab>l\tza.s[%w0, %1:%4<vg_modifier>], %2.b, %3.b";
+   }
+ )
+ 
+ ;; svmla[_single]_za16[_mf8]_vg2x2_fpm, svmla[_single]_za16[_mf8]_vg2x4_fpm,
+ ;; svmla[_single]_za32[_mf8]_vg4x2_fpm, svmla[_single]_za32[_mf8]_vg4x4_fpm
+ (define_insn "@aarch64_sme_single_<optab><SME_ZA_F8F16_32:mode><SME_ZA_FP8_x24:mode>"
+   [(set (reg:SME_ZA_F8F16_32 ZA_REGNUM)
+ 	(unspec:SME_ZA_F8F16_32
+ 	  [(reg:SME_ZA_F8F16_32 ZA_REGNUM)
+ 	   (reg:DI SME_STATE_REGNUM)
+ 	   (match_operand:SI 0 "register_operand" "Uci")
+ 	   (match_operand:SME_ZA_FP8_x24 1 "register_operand" "w")
+ 	   (vec_duplicate:SME_ZA_FP8_x24
+ 	     (match_operand:<SME_ZA_FP8_x24:VSINGLE> 2 "register_operand" "x"))
+ 	   (reg:DI FPM_REGNUM)]
+ 	  SME_FP8_TERNARY_SLICE))]
+   "TARGET_STREAMING"
+   "<optab><SME_ZA_F8F16_32:za16_32_long>\tza.<SME_ZA_F8F16_32:Vetype>[%w0, 0:<SME_ZA_F8F16_32:za16_32_last_offset>, vgx<vector_count>], %1, %2.b"
+ )
+ 
+ ;; svmla[_single]_za16[_mf8]_vg2x2_fpm, svmla[_single]_za16[_mf8]_vg2x4_fpm (slice variable + offset)
+ (define_insn "*aarch64_sme_single_<optab><VNx8HI_ONLY:mode><SME_ZA_FP8_x24:mode>_plus"
+   [(set (reg:VNx8HI_ONLY ZA_REGNUM)
+ 	(unspec:VNx8HI_ONLY
+ 	  [(reg:VNx8HI_ONLY ZA_REGNUM)
+ 	   (reg:DI SME_STATE_REGNUM)
+ 	   (plus:SI (match_operand:SI 0 "register_operand" "Uci")
+ 		    (match_operand:SI 1 "const_<za16_offset_range>_operand"))
+ 	   (match_operand:SME_ZA_FP8_x24 2 "register_operand" "w")
+ 	   (vec_duplicate:SME_ZA_FP8_x24
+ 	     (match_operand:<SME_ZA_FP8_x24:VSINGLE> 3 "register_operand" "x"))
+ 	   (reg:DI FPM_REGNUM)]
+ 	  SME_FP8_TERNARY_SLICE))]
+   "TARGET_STREAMING_SME_F8F16"
+   {
+     operands[4] = GEN_INT (INTVAL (operands[1]) + 1);
+     return "<optab>\tza.h[%w0, %1:%4, vgx<vector_count>], %2, %3.b";
+   }
+ )
+ 
+ ;; svmla[_single]_za32[_mf8]_vg4x2_fpm, svmla[_single]_za32[_mf8]_vg4x4_fpm (slice variable + offset)
+ (define_insn "*aarch64_sme_single_<optab><VNx4SI_ONLY:mode><SME_ZA_FP8_x24:mode>_plus"
+   [(set (reg:VNx4SI_ONLY ZA_REGNUM)
+ 	(unspec:VNx4SI_ONLY
+ 	  [(reg:VNx4SI_ONLY ZA_REGNUM)
+ 	   (reg:DI SME_STATE_REGNUM)
+ 	   (plus:SI (match_operand:SI 0 "register_operand" "Uci")
+ 		    (match_operand:SI 1 "const_<za32_offset_range>_operand"))
+ 	   (match_operand:SME_ZA_FP8_x24 2 "register_operand" "w")
+ 	   (vec_duplicate:SME_ZA_FP8_x24
+ 	     (match_operand:<SME_ZA_FP8_x24:VSINGLE> 3 "register_operand" "x"))
+ 	   (reg:DI FPM_REGNUM)]
+ 	  SME_FP8_TERNARY_SLICE))]
+   "TARGET_STREAMING_SME_F8F32"
+   {
+     operands[4] = GEN_INT (INTVAL (operands[1]) + 3);
+     return "<optab>l\tza.s[%w0, %1:%4, vgx<vector_count>], %2, %3.b";
+   }
+ )
+ 
+ ;; svmla_lane_za16[_mf8]_vg2x1_fpm, svmla_lane_za32[_mf8]_vg4x1_fpm,
+ ;; svmla_lane_za16[_mf8]_vg2x2_fpm, svmla_lane_za32[_mf8]_vg4x2_fpm,
+ ;; svmla_lane_za16[_mf8]_vg2x4_fpm, svmla_lane_za32[_mf8]_vg4x4_fpm
+ (define_insn "@aarch64_sme_lane_<optab><SME_ZA_F8F16_32:mode><SME_ZA_FP8_x124:mode>"
+   [(set (reg:SME_ZA_F8F16_32 ZA_REGNUM)
+ 	(unspec:SME_ZA_F8F16_32
+ 	  [(reg:SME_ZA_F8F16_32 ZA_REGNUM)
+ 	   (reg:DI SME_STATE_REGNUM)
+ 	   (match_operand:SI 0 "register_operand" "Uci")
+ 	   (match_operand:SME_ZA_FP8_x124 1 "<SME_ZA_FP8_x124:aligned_operand>" "<SME_ZA_FP8_x124:aligned_fpr>")
+ 	   (unspec:SME_ZA_FP8_x124
+ 	     [(match_operand:<SME_ZA_FP8_x124:VSINGLE> 2 "register_operand" "x")
+ 	      (match_operand:SI 3 "const_int_operand")]
+ 	     UNSPEC_SVE_LANE_SELECT)
+ 	   (reg:DI FPM_REGNUM)]
+ 	  SME_FP8_TERNARY_SLICE))]
+   "TARGET_STREAMING"
+   "<optab><SME_ZA_F8F16_32:za16_32_long>\tza.<SME_ZA_F8F16_32:Vetype>[%w0, 0:<SME_ZA_F8F16_32:za16_32_last_offset><SME_ZA_FP8_x124:vg_modifier>], %1<SME_ZA_FP8_x124:z_suffix>, %2.b[%3]"
+ )
+ 
+ ;; svmla_lane_za16[_mf8]_vg2x1_fpm, svmla_lane_za16[_mf8]_vg2x2_fpm,
+ ;; svmla_lane_za16[_mf8]_vg2x4_fpm (slice variable + offset)
+ (define_insn "*aarch64_sme_lane_<optab><VNx8HI_ONLY:mode><SME_ZA_FP8_x124:mode>"
+   [(set (reg:VNx8HI_ONLY ZA_REGNUM)
+ 	(unspec:VNx8HI_ONLY
+ 	  [(reg:VNx8HI_ONLY ZA_REGNUM)
+ 	   (reg:DI SME_STATE_REGNUM)
+ 	   (plus:SI (match_operand:SI 0 "register_operand" "Uci")
+ 		    (match_operand:SI 1 "const_<za16_offset_range>_operand"))
+ 	   (match_operand:SME_ZA_FP8_x124 2 "<SME_ZA_FP8_x124:aligned_operand>" "<SME_ZA_FP8_x124:aligned_fpr>")
+ 	   (unspec:SME_ZA_FP8_x124
+ 	     [(match_operand:<SME_ZA_FP8_x124:VSINGLE> 3 "register_operand" "x")
+ 	      (match_operand:SI 4 "const_int_operand")]
+ 	     UNSPEC_SVE_LANE_SELECT)
+ 	   (reg:DI FPM_REGNUM)]
+ 	  SME_FP8_TERNARY_SLICE))]
+    "TARGET_STREAMING_SME_F8F16"
+   {
+     operands[5] = GEN_INT (INTVAL (operands[1]) + 1);
+     return "<optab>\tza.h[%w0, %1:%5<SME_ZA_FP8_x124:vg_modifier>], %2<SME_ZA_FP8_x124:z_suffix>, %3.b[%4]";
+   }
+ )
+ 
+ ;; svmla_lane_za32[_mf8]_vg4x1_fpm, svmla_lane_za32[_mf8]_vg4x2_fpm,
+ ;; svmla_lane_za32[_mf8]_vg4x4_fpm (slice variable + offset)
+ (define_insn "*aarch64_sme_lane_<optab><VNx4SI_ONLY:mode><SME_ZA_FP8_x124:mode>"
+   [(set (reg:VNx4SI_ONLY ZA_REGNUM)
+ 	(unspec:VNx4SI_ONLY
+ 	  [(reg:VNx4SI_ONLY ZA_REGNUM)
+ 	   (reg:DI SME_STATE_REGNUM)
+ 	   (plus:SI (match_operand:SI 0 "register_operand" "Uci")
+ 		    (match_operand:SI 1 "const_<za32_offset_range>_operand"))
+ 	   (match_operand:SME_ZA_FP8_x124 2 "<aligned_operand>" "<aligned_fpr>")
+ 	   (unspec:SME_ZA_FP8_x124
+ 	     [(match_operand:<VSINGLE> 3 "register_operand" "x")
+ 	      (match_operand:SI 4 "const_int_operand")]
+ 	     UNSPEC_SVE_LANE_SELECT)
+ 	   (reg:DI FPM_REGNUM)]
+ 	  SME_FP8_TERNARY_SLICE))]
+    "TARGET_STREAMING_SME_F8F32"
+   {
+     operands[5] = GEN_INT (INTVAL (operands[1]) + 3);
+     return "<optab>l\tza.s[%w0, %1:%5<SME_ZA_FP8_x124:vg_modifier>], %2<z_suffix>, %3.b[%4]";
+   }
+ )
+ 
  ;; -------------------------------------------------------------------------
  ;; ---- [FP] Sum of outer products
  ;; -------------------------------------------------------------------------
***************
*** 2137,2142 ****
--- 2669,2676 ----
  ;; - BFMOPS (SME_B16B16)
  ;; - FMOPA
  ;; - FMOPS
+ ;; - FMOPA (SME_F8F16)
+ ;; - FMOPA (SME_F8F32)
  ;; -------------------------------------------------------------------------
  
  (define_insn "@aarch64_sme_<optab><mode><mode>"
***************
*** 2169,2174 ****
--- 2703,2724 ----
    "<b><optab>\tza%0.<VNx4SI_ONLY:Vetype>, %1/m, %2/m, %3.<SVE_FULL_HF:Vetype>, %4.<SVE_FULL_HF:Vetype>"
  )
  
+ (define_insn "@aarch64_sme_<optab><SME_ZA_F8F16_32:mode><VNx16QI_ONLY:mode>"
+   [(set (reg:SME_ZA_F8F16_32 ZA_REGNUM)
+ 	(unspec:SME_ZA_F8F16_32
+ 	  [(reg:SME_ZA_F8F16_32 ZA_REGNUM)
+ 	   (reg:DI SME_STATE_REGNUM)
+ 	   (match_operand:DI 0 "const_int_operand")
+ 	   (match_operand:<SME_ZA_F8F16_32:VPRED> 1 "register_operand" "Upl")
+ 	   (match_operand:<SME_ZA_F8F16_32:VPRED> 2 "register_operand" "Upl")
+ 	   (match_operand:VNx16QI_ONLY 3 "register_operand" "w")
+ 	   (match_operand:VNx16QI_ONLY 4 "register_operand" "w")
+ 	   (reg:DI FPM_REGNUM)]
+ 	  SME_FP_MOP))]
+   "TARGET_STREAMING"
+   "<optab>\tza%0.<SME_ZA_F8F16_32:Vetype>, %1/m, %2/m, %3.b, %4.b"
+ )
+ 
  ;; =========================================================================
  ;; == Table lookup
  ;; =========================================================================
diff -Nrcpad gcc-16-20251221/gcc/config/aarch64/aarch64-sve-builtins-base.cc gcc-16-20251228/gcc/config/aarch64/aarch64-sve-builtins-base.cc
*** gcc-16-20251221/gcc/config/aarch64/aarch64-sve-builtins-base.cc	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/config/aarch64/aarch64-sve-builtins-base.cc	Sun Dec 28 22:32:06 2025
*************** public:
*** 779,795 ****
        {
  	machine_mode mode0 = e.result_mode ();
  	machine_mode mode1 = GET_MODE (e.args[0]);
! 	convert_optab optab;
! 	if (e.type_suffix (0).integer_p)
! 	  optab = e.type_suffix (0).unsigned_p ? ufix_optab : sfix_optab;
! 	else if (e.type_suffix (1).integer_p)
! 	  optab = e.type_suffix (1).unsigned_p ? ufloat_optab : sfloat_optab;
! 	else if (e.type_suffix (0).element_bits
! 		 < e.type_suffix (1).element_bits)
! 	  optab = trunc_optab;
  	else
! 	  optab = sext_optab;
! 	icode = convert_optab_handler (optab, mode0, mode1);
  	gcc_assert (icode != CODE_FOR_nothing);
  	return e.use_exact_insn (icode);
        }
--- 779,801 ----
        {
  	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
! 	  {
! 	    convert_optab optab;
! 	    if (e.type_suffix (0).integer_p)
! 	      optab = e.type_suffix (0).unsigned_p ? ufix_optab : sfix_optab;
! 	    else if (e.type_suffix (1).integer_p)
! 	      optab = e.type_suffix (1).unsigned_p ? ufloat_optab
! 						   : sfloat_optab;
! 	    else if (e.type_suffix (0).element_bits
! 		     < e.type_suffix (1).element_bits)
! 	      optab = trunc_optab;
! 	    else
! 	      optab = sext_optab;
! 	    icode = convert_optab_handler (optab, mode0, mode1);
! 	  }
  	gcc_assert (icode != CODE_FOR_nothing);
  	return e.use_exact_insn (icode);
        }
*************** public:
*** 2335,2343 ****
  	    tree negated_op = op1;
  	    if (integer_minus_onep (op1))
  	      negated_op = op2;
! 	    type_suffix_pair signed_tsp =
! 	      {find_type_suffix (TYPE_signed, f.type_suffix (0).element_bits),
! 		f.type_suffix_ids[1]};
  	    function_instance instance ("svneg", functions::svneg,
  					shapes::unary, MODE_none, signed_tsp,
  					GROUP_none, f.pred, FPM_unused);
--- 2341,2351 ----
  	    tree negated_op = op1;
  	    if (integer_minus_onep (op1))
  	      negated_op = op2;
! 	    type_suffix_triple signed_tsp = {
! 	      find_type_suffix (TYPE_signed, f.type_suffix (0).element_bits),
! 	      f.type_suffix_ids[1],
! 	      NUM_TYPE_SUFFIXES
! 	    };
  	    function_instance instance ("svneg", functions::svneg,
  					shapes::unary, MODE_none, signed_tsp,
  					GROUP_none, f.pred, FPM_unused);
*************** public:
*** 3459,3464 ****
--- 3467,3491 ----
    unsigned int m_base;
  };
  
+ class svscale_impl : public function_base
+ {
+ public:
+   rtx
+   expand (function_expander &e) const override
+   {
+     if (vectors_per_tuple (e) == 1)
+       return e.map_to_unspecs (-1, -1, UNSPEC_COND_FSCALE);
+     else
+       {
+ 	machine_mode mode = GET_MODE (e.args[0]);
+ 	insn_code code = (e.mode_suffix_id == MODE_single
+ 	  ? code_for_aarch64_sve_single_fscale (mode)
+ 	  : code_for_aarch64_sve_fscale (mode));
+ 	return e.use_exact_insn (code);
+       }
+   }
+ };
+ 
  } /* end anonymous namespace */
  
  namespace aarch64_sve {
*************** FUNCTION (svrintx, svrint_impl, (rint_op
*** 3700,3706 ****
  FUNCTION (svrintz, svrint_impl, (btrunc_optab, UNSPEC_COND_FRINTZ))
  FUNCTION (svrsqrte, unspec_based_function, (-1, UNSPEC_RSQRTE, UNSPEC_RSQRTE))
  FUNCTION (svrsqrts, unspec_based_function, (-1, -1, UNSPEC_RSQRTS))
! FUNCTION (svscale, unspec_based_function, (-1, -1, UNSPEC_COND_FSCALE))
  FUNCTION (svsel, svsel_impl,)
  FUNCTION (svset2, svset_impl, (2))
  FUNCTION (svset3, svset_impl, (3))
--- 3727,3733 ----
  FUNCTION (svrintz, svrint_impl, (btrunc_optab, UNSPEC_COND_FRINTZ))
  FUNCTION (svrsqrte, unspec_based_function, (-1, UNSPEC_RSQRTE, UNSPEC_RSQRTE))
  FUNCTION (svrsqrts, unspec_based_function, (-1, -1, UNSPEC_RSQRTS))
! FUNCTION (svscale, svscale_impl,)
  FUNCTION (svsel, svsel_impl,)
  FUNCTION (svset2, svset_impl, (2))
  FUNCTION (svset3, svset_impl, (3))
diff -Nrcpad gcc-16-20251221/gcc/config/aarch64/aarch64-sve-builtins-functions.h gcc-16-20251228/gcc/config/aarch64/aarch64-sve-builtins-functions.h
*** gcc-16-20251221/gcc/config/aarch64/aarch64-sve-builtins-functions.h	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/config/aarch64/aarch64-sve-builtins-functions.h	Sun Dec 28 22:32:06 2025
*************** public:
*** 462,469 ****
    using parent = read_write_za<unspec_based_function_base>;
  
    CONSTEXPR sme_2mode_function_t (int unspec_for_sint, int unspec_for_uint,
! 				  int unspec_for_fp)
!     : parent (unspec_for_sint, unspec_for_uint, unspec_for_fp, -1, 1)
    {}
  
    rtx
--- 462,470 ----
    using parent = read_write_za<unspec_based_function_base>;
  
    CONSTEXPR sme_2mode_function_t (int unspec_for_sint, int unspec_for_uint,
! 				  int unspec_for_fp, int unspec_for_mfp8 = -1)
!     : parent (unspec_for_sint, unspec_for_uint, unspec_for_fp, unspec_for_mfp8,
! 	      1)
    {}
  
    rtx
*************** public:
*** 481,486 ****
--- 482,505 ----
      return e.use_exact_insn (icode);
    }
  };
+ 
+ class svvdot_half_impl : public read_write_za<unspec_based_function_base>
+ {
+ public:
+   using parent = read_write_za<unspec_based_function_base>;
+ 
+   CONSTEXPR svvdot_half_impl (int unspec_for_sint, int unspec_for_uint,
+ 			      int unspec_for_fp, int unspec_for_mfp8)
+     : parent (unspec_for_sint, unspec_for_uint, unspec_for_fp, unspec_for_mfp8,
+ 	      1)
+   {}
+ 
+   rtx expand (function_expander &e) const override
+   {
+     insn_code icode = code_for_aarch64_fvdot_half (unspec_for (e));
+     return e.use_exact_insn (icode);
+   }
+ };
  
  using sme_2mode_function
    = sme_2mode_function_t<code_for_aarch64_sme, code_for_aarch64_sme_single>;
diff -Nrcpad gcc-16-20251221/gcc/config/aarch64/aarch64-sve-builtins-shapes.cc gcc-16-20251228/gcc/config/aarch64/aarch64-sve-builtins-shapes.cc
*** gcc-16-20251221/gcc/config/aarch64/aarch64-sve-builtins-shapes.cc	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/config/aarch64/aarch64-sve-builtins-shapes.cc	Sun Dec 28 22:32:06 2025
*************** parse_element_type (const function_insta
*** 178,184 ****
  			       type_suffixes[suffix].element_bits / 2);
      }
  
!   if (ch == '0' || ch == '1')
      return instance.type_suffix_ids[ch - '0'];
  
    gcc_unreachable ();
--- 178,184 ----
  			       type_suffixes[suffix].element_bits / 2);
      }
  
!   if (ch == '0' || ch == '1' || ch == '2')
      return instance.type_suffix_ids[ch - '0'];
  
    gcc_unreachable ();
*************** parse_element_type (const function_insta
*** 194,204 ****
--- 194,206 ----
     b       - base vector type (from a _<m0>base suffix)
     c0      - the result of a conversion, based on type and group suffixes
     c1      - the source of a conversion, based on type and group suffixes
+    c2      - the source of a conversion, based on type and group suffixes
     d       - displacement vector type (from a _<m1>index or _<m1>offset suffix)
     e<name> - an enum with the given name
     s<elt>  - a scalar type with the given element suffix
     t<elt>  - a vector or tuple type with given element suffix [*1]
     T<elt>  - a vector or tuple type with given element suffix [*2]
+    u<elt>  - a vector or tuple type with given element suffix [*3]
     v<elt>  - a vector with the given element suffix
     D<elt>  - a 64 bit neon vector
     Q<elt>  - a 128 bit neon vector
*************** parse_element_type (const function_insta
*** 208,213 ****
--- 210,216 ----
     [*1] the vectors_per_tuple function indicates whether the type should
  	be a tuple, and if so, how many vectors it should contain.
     [*2] same as for [*1], but the tuple contains half as many vectors.
+    [*3] same as for [*1], but the tuple contains twice as many vectors.
  */
  static tree
  parse_type (const function_instance &instance, const char *&format)
*************** parse_type (const function_instance &ins
*** 235,250 ****
    if (ch == 'c')
      {
        int ch = *format++;
!       gcc_assert (ch == '0' || ch == '1');
!       unsigned int id = (ch == '0' ? 0 : 1);
        auto vector_type = instance.type_suffix (id).vector_type;
        unsigned int num_vectors = instance.group_suffix ().vectors_per_tuple;
        if (num_vectors != 1)
  	{
! 	  unsigned int bits = instance.type_suffix (id).element_bits;
! 	  unsigned int other_bits = instance.type_suffix (1 - id).element_bits;
! 	  if (other_bits > bits)
! 	    num_vectors /= other_bits / bits;
  	}
        return acle_vector_types[num_vectors - 1][vector_type];
      }
--- 238,256 ----
    if (ch == 'c')
      {
        int ch = *format++;
!       gcc_assert (ch == '0' || ch == '1' || ch == '2');
!       unsigned int id = ch - '0';
        auto vector_type = instance.type_suffix (id).vector_type;
        unsigned int num_vectors = instance.group_suffix ().vectors_per_tuple;
        if (num_vectors != 1)
  	{
! 	  unsigned int type_bits = instance.type_suffix (id).element_bits;
! 	  unsigned int max_bits = std::max ( std:: max (
! 	    instance.type_suffix (0).element_bits,
! 	    instance.type_suffix (1).element_bits),
! 	    instance.type_suffix (2).element_bits);
! 	  if (max_bits > type_bits)
! 	    num_vectors /= max_bits / type_bits;
  	}
        return acle_vector_types[num_vectors - 1][vector_type];
      }
*************** parse_type (const function_instance &ins
*** 288,293 ****
--- 294,307 ----
        return acle_vector_types[num_vectors - 1][vector_type];
      }
  
+   if (ch == 'u')
+     {
+       type_suffix_index suffix = parse_element_type (instance, format);
+       vector_type_index vector_type = type_suffixes[suffix].vector_type;
+       unsigned int num_vectors = instance.vectors_per_tuple () * 2;
+       return acle_vector_types[num_vectors - 1][vector_type];
+     }
+ 
    if (ch == 'v')
      {
        type_suffix_index suffix = parse_element_type (instance, format);
*************** struct binary_za_m_base : public overloa
*** 692,698 ****
    resolve (function_resolver &r) const override
    {
      type_suffix_index type;
!     if (!r.check_num_arguments (5)
  	|| !r.require_integer_immediate (0)
  	|| !r.require_vector_type (1, VECTOR_TYPE_svbool_t)
  	|| !r.require_vector_type (2, VECTOR_TYPE_svbool_t)
--- 706,712 ----
    resolve (function_resolver &r) const override
    {
      type_suffix_index type;
!     if (!r.check_num_arguments (r.fpm_mode == FPM_set ? 6: 5)
  	|| !r.require_integer_immediate (0)
  	|| !r.require_vector_type (1, VECTOR_TYPE_svbool_t)
  	|| !r.require_vector_type (2, VECTOR_TYPE_svbool_t)
*************** struct binary_za_slice_lane_base : publi
*** 729,735 ****
    resolve (function_resolver &r) const override
    {
      sve_type type;
!     if (!r.check_num_arguments (4)
  	|| !r.require_scalar_type (0, "uint32_t")
  	|| !(type = r.infer_tuple_type (1))
  	|| !r.require_derived_vector_type (2, 1, type, TCLASS)
--- 743,749 ----
    resolve (function_resolver &r) const override
    {
      sve_type type;
!     if (!r.check_num_arguments (r.fpm_mode == FPM_set ? 5: 4)
  	|| !r.require_scalar_type (0, "uint32_t")
  	|| !(type = r.infer_tuple_type (1))
  	|| !r.require_derived_vector_type (2, 1, type, TCLASS)
*************** struct binary_za_slice_opt_single_base :
*** 758,764 ****
    resolve (function_resolver &r) const override
    {
      sve_type type;
!     if (!r.check_num_arguments (3)
  	|| !r.require_scalar_type (0, "uint32_t")
  	|| !(type = r.infer_tuple_type (1)))
        return error_mark_node;
--- 772,778 ----
    resolve (function_resolver &r) const override
    {
      sve_type type;
!     if (!r.check_num_arguments (r.fpm_mode == FPM_set ? 4: 3)
  	|| !r.require_scalar_type (0, "uint32_t")
  	|| !(type = r.infer_tuple_type (1)))
        return error_mark_node;
*************** struct load_contiguous_base : public ove
*** 850,856 ****
        return error_mark_node;
  
      return r.resolve_to (r.mode_suffix_id, type, NUM_TYPE_SUFFIXES,
! 			 r.group_suffix_id);
    }
  };
  
--- 864,870 ----
        return error_mark_node;
  
      return r.resolve_to (r.mode_suffix_id, type, NUM_TYPE_SUFFIXES,
! 			 NUM_TYPE_SUFFIXES, r.group_suffix_id);
    }
  };
  
*************** struct compare_scalar_def : public overl
*** 2318,2324 ****
        return error_mark_node;
  
      return r.resolve_to (r.mode_suffix_id, r.type_suffix_ids[0], type,
! 			 r.group_suffix_id);
    }
  };
  SHAPE (compare_scalar)
--- 2332,2338 ----
        return error_mark_node;
  
      return r.resolve_to (r.mode_suffix_id, r.type_suffix_ids[0], type,
! 			 NUM_TYPE_SUFFIXES, r.group_suffix_id);
    }
  };
  SHAPE (compare_scalar)
*************** struct dot_za_slice_lane_def : public bi
*** 2507,2512 ****
--- 2521,2563 ----
  };
  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,
+ 					   fpm_t fpm) __arm_streaming
+ 						      __arm_inout ("za");
+    void svvdotb_lane_za32[_mf8]_vg1x4_fpm (uint32_t slice, svmfloat8x2_t zn,
+ 					   svmfloat8_t zm, uint64_t imm_idx,
+ 					   fpm_t fpm) __arm_streaming
+ 						      __arm_inout ("za");  */
+ struct dot_half_za_slice_lane_def : public binary_za_slice_lane_base<>
+ {
+ 
+   constexpr dot_half_za_slice_lane_def () : binary_za_slice_lane_base<> (0)
+   {}
+ 
+   void build (function_builder &b,
+ 	      const function_group_info &group) const override
+   {
+     b.add_overloaded_functions (group, MODE_none);
+     build_all (b, "_,su32,T1,v1,su64", group, MODE_none);
+   }
+ 
+   tree
+   resolve (function_resolver &r) const override
+   {
+     sve_type type;
+     if (!r.check_num_arguments (5)
+ 	|| !r.require_scalar_type (0, "uint32_t")
+ 	|| !(type = r.infer_vector_or_tuple_type (1, 2))
+ 	|| !r.require_vector_type (2, VECTOR_TYPE_svmfloat8_t)
+ 	|| !r.require_integer_immediate (3))
+       return error_mark_node;
+ 
+     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)
  
     where the final argument indexes a <t0>-sized group of elements in the
*************** struct ternary_mfloat8_def
*** 4130,4136 ****
  	|| !r.require_scalar_type (3, "uint64_t"))
        return error_mark_node;
  
!     return r.resolve_to (r.mode_suffix_id, type, TYPE_SUFFIX_mf8, GROUP_none);
    }
  };
  SHAPE (ternary_mfloat8)
--- 4181,4188 ----
  	|| !r.require_scalar_type (3, "uint64_t"))
        return error_mark_node;
  
!     return r.resolve_to (r.mode_suffix_id, type, TYPE_SUFFIX_mf8,
! 			 NUM_TYPE_SUFFIXES, GROUP_none);
    }
  };
  SHAPE (ternary_mfloat8)
*************** struct ternary_mfloat8_lane_def
*** 4182,4188 ****
  	|| !r.require_scalar_type (4, "uint64_t"))
        return error_mark_node;
  
!     return r.resolve_to (r.mode_suffix_id, type, TYPE_SUFFIX_mf8, GROUP_none);
    }
  };
  SHAPE (ternary_mfloat8_lane)
--- 4234,4241 ----
  	|| !r.require_scalar_type (4, "uint64_t"))
        return error_mark_node;
  
!     return r.resolve_to (r.mode_suffix_id, type, TYPE_SUFFIX_mf8,
! 			 NUM_TYPE_SUFFIXES, GROUP_none);
    }
  };
  SHAPE (ternary_mfloat8_lane)
*************** struct ternary_mfloat8_opt_n_def
*** 4253,4259 ****
      else if (!r.require_vector_type (2, VECTOR_TYPE_svmfloat8_t))
        return error_mark_node;
  
!     return r.resolve_to (mode, type, TYPE_SUFFIX_mf8, GROUP_none);
    }
  };
  SHAPE (ternary_mfloat8_opt_n)
--- 4306,4313 ----
      else if (!r.require_vector_type (2, VECTOR_TYPE_svmfloat8_t))
        return error_mark_node;
  
!     return r.resolve_to (mode, type, TYPE_SUFFIX_mf8, NUM_TYPE_SUFFIXES,
! 			 GROUP_none);
    }
  };
  SHAPE (ternary_mfloat8_opt_n)
diff -Nrcpad gcc-16-20251221/gcc/config/aarch64/aarch64-sve-builtins-shapes.h gcc-16-20251228/gcc/config/aarch64/aarch64-sve-builtins-shapes.h
*** gcc-16-20251221/gcc/config/aarch64/aarch64-sve-builtins-shapes.h	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/config/aarch64/aarch64-sve-builtins-shapes.h	Sun Dec 28 22:32:06 2025
*************** namespace aarch64_sve
*** 126,131 ****
--- 126,132 ----
      extern const function_shape *const count_pred_c;
      extern const function_shape *const count_vector;
      extern const function_shape *const create;
+     extern const function_shape *const dot_half_za_slice_lane;
      extern const function_shape *const dot_za_slice_int_lane;
      extern const function_shape *const dot_za_slice_lane;
      extern const function_shape *const dot_za_slice_uint_lane;
diff -Nrcpad gcc-16-20251221/gcc/config/aarch64/aarch64-sve-builtins-sme.cc gcc-16-20251228/gcc/config/aarch64/aarch64-sve-builtins-sme.cc
*** gcc-16-20251221/gcc/config/aarch64/aarch64-sve-builtins-sme.cc	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/config/aarch64/aarch64-sve-builtins-sme.cc	Sun Dec 28 22:32:06 2025
*************** FUNCTION (svcntsd, svcnts_bhwd_impl, (VN
*** 628,637 ****
  FUNCTION (svcntsh, svcnts_bhwd_impl, (VNx8HImode))
  FUNCTION (svcntsw, svcnts_bhwd_impl, (VNx4SImode))
  FUNCTION (svdot_za, sme_2mode_function, (UNSPEC_SME_SDOT, UNSPEC_SME_UDOT,
! 					 UNSPEC_SME_FDOT))
  FUNCTION (svdot_lane_za, sme_2mode_lane_function, (UNSPEC_SME_SDOT,
  						   UNSPEC_SME_UDOT,
! 						   UNSPEC_SME_FDOT))
  FUNCTION (svld1_hor_za, svld1_za_impl, (UNSPEC_SME_LD1_HOR))
  FUNCTION (svld1_ver_za, svld1_za_impl, (UNSPEC_SME_LD1_VER))
  FUNCTION (svldr_za, svldr_za_impl, )
--- 628,639 ----
  FUNCTION (svcntsh, svcnts_bhwd_impl, (VNx8HImode))
  FUNCTION (svcntsw, svcnts_bhwd_impl, (VNx4SImode))
  FUNCTION (svdot_za, sme_2mode_function, (UNSPEC_SME_SDOT, UNSPEC_SME_UDOT,
! 					 UNSPEC_SME_FDOT,
! 					 UNSPEC_SME_FDOT_FP8))
  FUNCTION (svdot_lane_za, sme_2mode_lane_function, (UNSPEC_SME_SDOT,
  						   UNSPEC_SME_UDOT,
! 						   UNSPEC_SME_FDOT,
! 						   UNSPEC_SME_FDOT_FP8))
  FUNCTION (svld1_hor_za, svld1_za_impl, (UNSPEC_SME_LD1_HOR))
  FUNCTION (svld1_ver_za, svld1_za_impl, (UNSPEC_SME_LD1_VER))
  FUNCTION (svldr_za, svldr_za_impl, )
*************** FUNCTION (svluti2_lane_zt, svluti_lane_z
*** 640,656 ****
  FUNCTION (svluti4_lane_zt, svluti_lane_zt_impl, (4))
  FUNCTION (svluti4_zt, svluti_zt_impl, (4))
  FUNCTION (svmla_za, sme_2mode_function, (UNSPEC_SME_SMLA, UNSPEC_SME_UMLA,
! 					 UNSPEC_SME_FMLA))
  FUNCTION (svmla_lane_za, sme_2mode_lane_function, (UNSPEC_SME_SMLA,
  						   UNSPEC_SME_UMLA,
! 						   UNSPEC_SME_FMLA))
  FUNCTION (svmls_za, sme_2mode_function, (UNSPEC_SME_SMLS, UNSPEC_SME_UMLS,
  					 UNSPEC_SME_FMLS))
  FUNCTION (svmls_lane_za, sme_2mode_lane_function, (UNSPEC_SME_SMLS,
  						   UNSPEC_SME_UMLS,
  						   UNSPEC_SME_FMLS))
  FUNCTION (svmopa_za, sme_2mode_function, (UNSPEC_SME_SMOPA, UNSPEC_SME_UMOPA,
! 					  UNSPEC_SME_FMOPA))
  FUNCTION (svmops_za, sme_2mode_function, (UNSPEC_SME_SMOPS, UNSPEC_SME_UMOPS,
  					  UNSPEC_SME_FMOPS))
  FUNCTION (svread_za, svread_za_impl,)
--- 642,659 ----
  FUNCTION (svluti4_lane_zt, svluti_lane_zt_impl, (4))
  FUNCTION (svluti4_zt, svluti_zt_impl, (4))
  FUNCTION (svmla_za, sme_2mode_function, (UNSPEC_SME_SMLA, UNSPEC_SME_UMLA,
! 					 UNSPEC_SME_FMLA, UNSPEC_SME_FMLAL))
  FUNCTION (svmla_lane_za, sme_2mode_lane_function, (UNSPEC_SME_SMLA,
  						   UNSPEC_SME_UMLA,
! 						   UNSPEC_SME_FMLA,
! 						   UNSPEC_SME_FMLAL))
  FUNCTION (svmls_za, sme_2mode_function, (UNSPEC_SME_SMLS, UNSPEC_SME_UMLS,
  					 UNSPEC_SME_FMLS))
  FUNCTION (svmls_lane_za, sme_2mode_lane_function, (UNSPEC_SME_SMLS,
  						   UNSPEC_SME_UMLS,
  						   UNSPEC_SME_FMLS))
  FUNCTION (svmopa_za, sme_2mode_function, (UNSPEC_SME_SMOPA, UNSPEC_SME_UMOPA,
! 					  UNSPEC_SME_FMOPA, UNSPEC_SME_FMOPA))
  FUNCTION (svmops_za, sme_2mode_function, (UNSPEC_SME_SMOPS, UNSPEC_SME_UMOPS,
  					  UNSPEC_SME_FMOPS))
  FUNCTION (svread_za, svread_za_impl,)
*************** FUNCTION (svusmopa_za, sme_2mode_functio
*** 682,688 ****
  FUNCTION (svusmops_za, sme_2mode_function, (-1, UNSPEC_SME_USMOPS, -1))
  FUNCTION (svvdot_lane_za, sme_2mode_lane_function, (UNSPEC_SME_SVDOT,
  						    UNSPEC_SME_UVDOT,
! 						    UNSPEC_SME_FVDOT))
  FUNCTION (svwrite_za, svwrite_za_impl,)
  FUNCTION (svwrite_hor_za, svwrite_za_tile_impl, (UNSPEC_SME_WRITE_HOR))
  FUNCTION (svwrite_ver_za, svwrite_za_tile_impl, (UNSPEC_SME_WRITE_VER))
--- 685,696 ----
  FUNCTION (svusmops_za, sme_2mode_function, (-1, UNSPEC_SME_USMOPS, -1))
  FUNCTION (svvdot_lane_za, sme_2mode_lane_function, (UNSPEC_SME_SVDOT,
  						    UNSPEC_SME_UVDOT,
! 						    UNSPEC_SME_FVDOT,
! 						    UNSPEC_SME_FVDOT_FP8))
! FUNCTION (svvdotb_lane_za, svvdot_half_impl,
! 	  (-1, -1, -1, UNSPEC_SME_FVDOTB_FP8))
! FUNCTION (svvdott_lane_za, svvdot_half_impl,
! 	  (-1, -1, -1, UNSPEC_SME_FVDOTT_FP8))
  FUNCTION (svwrite_za, svwrite_za_impl,)
  FUNCTION (svwrite_hor_za, svwrite_za_tile_impl, (UNSPEC_SME_WRITE_HOR))
  FUNCTION (svwrite_ver_za, svwrite_za_tile_impl, (UNSPEC_SME_WRITE_VER))
diff -Nrcpad gcc-16-20251221/gcc/config/aarch64/aarch64-sve-builtins-sme.def gcc-16-20251228/gcc/config/aarch64/aarch64-sve-builtins-sme.def
*** gcc-16-20251221/gcc/config/aarch64/aarch64-sve-builtins-sme.def	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/config/aarch64/aarch64-sve-builtins-sme.def	Sun Dec 28 22:32:06 2025
***************
*** 17,35 ****
     along with GCC; see the file COPYING3.  If not see
     <http://www.gnu.org/licenses/>.  */
  
  #ifndef DEF_SME_FUNCTION
  #define DEF_SME_FUNCTION(NAME, SHAPE, TYPES, PREDS) \
!   DEF_SME_FUNCTION_GS (NAME, SHAPE, TYPES, none, PREDS)
  #endif
  
  #ifndef DEF_SME_ZA_FUNCTION_GS
  #define DEF_SME_ZA_FUNCTION_GS(NAME, SHAPE, TYPES, GROUP, PREDS) \
!   DEF_SME_FUNCTION_GS (NAME, SHAPE, TYPES, GROUP, PREDS)
  #endif
  
  #ifndef DEF_SME_ZA_FUNCTION
  #define DEF_SME_ZA_FUNCTION(NAME, SHAPE, TYPES, PREDS) \
!   DEF_SME_ZA_FUNCTION_GS (NAME, SHAPE, TYPES, none, PREDS)
  #endif
  
  #define REQUIRED_EXTENSIONS streaming_compatible (0)
--- 17,41 ----
     along with GCC; see the file COPYING3.  If not see
     <http://www.gnu.org/licenses/>.  */
  
+ 
+ #ifndef DEF_SME_FUNCTION_GS
+ #define DEF_SME_FUNCTION_GS(NAME, SHAPE, TYPES, GROUPS, PREDS) \
+   DEF_SME_FUNCTION_GS_FPM (NAME, SHAPE, TYPES, GROUPS, PREDS, unused)
+ #endif
+ 
  #ifndef DEF_SME_FUNCTION
  #define DEF_SME_FUNCTION(NAME, SHAPE, TYPES, PREDS) \
!   DEF_SME_FUNCTION_GS_FPM (NAME, SHAPE, TYPES, none, PREDS, unused)
  #endif
  
  #ifndef DEF_SME_ZA_FUNCTION_GS
  #define DEF_SME_ZA_FUNCTION_GS(NAME, SHAPE, TYPES, GROUP, PREDS) \
!   DEF_SME_ZA_FUNCTION_GS_FPM (NAME, SHAPE, TYPES, GROUP, PREDS, unused)
  #endif
  
  #ifndef DEF_SME_ZA_FUNCTION
  #define DEF_SME_ZA_FUNCTION(NAME, SHAPE, TYPES, PREDS) \
!   DEF_SME_ZA_FUNCTION_GS_FPM (NAME, SHAPE, TYPES, none, PREDS, unused)
  #endif
  
  #define REQUIRED_EXTENSIONS streaming_compatible (0)
*************** DEF_SME_ZA_FUNCTION_GS (svmls_lane, bina
*** 212,217 ****
--- 218,249 ----
  DEF_SME_ZA_FUNCTION_GS (svsub, unary_za_slice, za_d_float, vg1x24, none)
  #undef REQUIRED_EXTENSIONS
  
+ #define REQUIRED_EXTENSIONS streaming_only (AARCH64_FL_SME_F8F16)
+ DEF_SME_ZA_FUNCTION_GS_FPM (svdot, binary_za_slice_opt_single, za_h_mf8,
+ 			    vg1x24, none, set)
+ DEF_SME_ZA_FUNCTION_GS_FPM (svdot_lane, dot_za_slice_lane, za_h_mf8,
+ 			    vg1x24, none, set)
+ #undef REQUIRED_EXTENSIONS
+ 
+ #define REQUIRED_EXTENSIONS streaming_only (AARCH64_FL_SME_F8F32)
+ DEF_SME_ZA_FUNCTION_GS_FPM (svdot, binary_za_slice_opt_single, za_s_mf8,
+ 			    vg1x24, none, set)
+ DEF_SME_ZA_FUNCTION_GS_FPM (svdot_lane, dot_za_slice_lane, za_s_mf8,
+ 			    vg1x24, none, set)
+ #undef REQUIRED_EXTENSIONS
+ 
+ #define REQUIRED_EXTENSIONS streaming_only (AARCH64_FL_SME_F8F16)
+ DEF_SME_ZA_FUNCTION_GS_FPM (svvdot_lane, dot_za_slice_lane, za_h_mf8,
+ 			    vg1x2, none, set)
+ #undef REQUIRED_EXTENSIONS
+ 
+ #define REQUIRED_EXTENSIONS streaming_only (AARCH64_FL_SME_F8F32)
+ DEF_SME_ZA_FUNCTION_GS_FPM (svvdotb_lane, dot_half_za_slice_lane, za_s_mf8,
+ 			    vg1x4, none, set)
+ DEF_SME_ZA_FUNCTION_GS_FPM (svvdott_lane, dot_half_za_slice_lane, za_s_mf8,
+ 			    vg1x4, none, set)
+ #undef REQUIRED_EXTENSIONS
+ 
  #define REQUIRED_EXTENSIONS streaming_only (AARCH64_FL_SME_F16F16)
  DEF_SME_ZA_FUNCTION_GS (svadd, unary_za_slice, za_h_float, vg1x24, none)
  DEF_SME_ZA_FUNCTION_GS (svmla, binary_za_slice_opt_single, za_h_float,
*************** DEF_SME_FUNCTION_GS (svwrite_lane_zt, wr
*** 259,264 ****
--- 291,313 ----
  DEF_SME_FUNCTION_GS (svluti4_zt,      luti4_zt,      b_integer, x4,   none)
  #undef REQUIRED_EXTENSIONS
  
+ #define REQUIRED_EXTENSIONS streaming_only (AARCH64_FL_SME_F8F16)
+ DEF_SME_ZA_FUNCTION_GS_FPM (svmla_lane, binary_za_slice_lane, za_h_mf8,
+ 			    vg2, none, set)
+ DEF_SME_ZA_FUNCTION_GS_FPM (svmla, binary_za_slice_opt_single, za_h_mf8, vg2, none, set)
+ DEF_SME_ZA_FUNCTION_GS_FPM (svmla, binary_za_slice_opt_single, za_h_mf8, vg1x24, none, set)
+ DEF_SME_ZA_FUNCTION_GS_FPM (svmopa, binary_za_m, za_h_mf8, none, za_m, set)
+ #undef REQUIRED_EXTENSIONS
+ 
+ #define REQUIRED_EXTENSIONS streaming_only (AARCH64_FL_SME_F8F32)
+ DEF_SME_ZA_FUNCTION_GS_FPM (svmla_lane, binary_za_slice_lane, za_s_mf8,
+ 			    vg4, none, set)
+ DEF_SME_ZA_FUNCTION_GS_FPM (svmla, binary_za_slice_opt_single, za_s_mf8, vg4, none, set)
+ DEF_SME_ZA_FUNCTION_GS_FPM (svmla, binary_za_slice_opt_single, za_s_mf8, vg1x24, none, set)
+ DEF_SME_ZA_FUNCTION_GS_FPM (svmopa, binary_za_m, za_s_mf8, none, za_m, set)
+ #undef REQUIRED_EXTENSIONS
+ 
  #undef DEF_SME_ZA_FUNCTION
  #undef DEF_SME_ZA_FUNCTION_GS
+ #undef DEF_SME_ZA_FUNCTION_GS_FPM
  #undef DEF_SME_FUNCTION
diff -Nrcpad gcc-16-20251221/gcc/config/aarch64/aarch64-sve-builtins-sme.h gcc-16-20251228/gcc/config/aarch64/aarch64-sve-builtins-sme.h
*** gcc-16-20251221/gcc/config/aarch64/aarch64-sve-builtins-sme.h	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/config/aarch64/aarch64-sve-builtins-sme.h	Sun Dec 28 22:32:06 2025
*************** namespace aarch64_sve
*** 38,43 ****
--- 38,45 ----
      extern const function_base *const svcntsw;
      extern const function_base *const svdot_za;
      extern const function_base *const svdot_lane_za;
+     extern const function_base *const svvdotb_lane_za;
+     extern const function_base *const svvdott_lane_za;
      extern const function_base *const svld1_hor_za;
      extern const function_base *const svld1_ver_za;
      extern const function_base *const svldr_za;
diff -Nrcpad gcc-16-20251221/gcc/config/aarch64/aarch64-sve-builtins-sve2.cc gcc-16-20251228/gcc/config/aarch64/aarch64-sve-builtins-sve2.cc
*** gcc-16-20251221/gcc/config/aarch64/aarch64-sve-builtins-sve2.cc	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/config/aarch64/aarch64-sve-builtins-sve2.cc	Sun Dec 28 22:32:06 2025
*************** FUNCTION (svclamp, svclamp_impl,)
*** 1020,1025 ****
--- 1020,1027 ----
  FUNCTION (svcvt1, svcvt_fp8_impl, (UNSPEC_F1CVT))
  FUNCTION (svcvt2, svcvt_fp8_impl, (UNSPEC_F2CVT))
  FUNCTION (svcvtl, svcvtl_impl,)
+ FUNCTION (svcvtl1, svcvt_fp8_impl, (UNSPEC_F1CVTL))
+ FUNCTION (svcvtl2, svcvt_fp8_impl, (UNSPEC_F2CVTL))
  FUNCTION (svcvtlt1, svcvt_fp8_impl, (UNSPEC_F1CVTLT))
  FUNCTION (svcvtlt2, svcvt_fp8_impl, (UNSPEC_F2CVTLT))
  FUNCTION (svcvtlt, unspec_based_function, (-1, -1, UNSPEC_COND_FCVTLT))
diff -Nrcpad gcc-16-20251221/gcc/config/aarch64/aarch64-sve-builtins-sve2.def gcc-16-20251228/gcc/config/aarch64/aarch64-sve-builtins-sve2.def
*** gcc-16-20251221/gcc/config/aarch64/aarch64-sve-builtins-sve2.def	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/config/aarch64/aarch64-sve-builtins-sve2.def	Sun Dec 28 22:32:06 2025
*************** DEF_SVE_FUNCTION_GS_FPM (svdot_lane, ter
*** 418,420 ****
--- 418,432 ----
  DEF_SVE_FUNCTION_GS_FPM (svdot, ternary_mfloat8, h_float_mf8, none, none, set)
  DEF_SVE_FUNCTION_GS_FPM (svdot_lane, ternary_mfloat8_lane_group_selection, h_float_mf8, none, none, set)
  #undef REQUIRED_EXTENSIONS
+ 
+ #define REQUIRED_EXTENSIONS \
+   streaming_only (AARCH64_FL_SME2 | AARCH64_FL_FP8)
+ DEF_SVE_FUNCTION_GS_FPM (svcvt, unary_convertxn_narrow, cvtn_mf8, x2, none, set)
+ DEF_SVE_FUNCTION_GS_FPM (svcvt, unary_convertxn_narrow, cvtnx_mf8, x4, none, set)
+ DEF_SVE_FUNCTION_GS_FPM (svcvtn, unary_convertxn_narrow, cvtnx_mf8, x4, none, set)
+ DEF_SVE_FUNCTION_GS_FPM (svcvt1, unary_convert, cvt_mf8, x2, none, set)
+ DEF_SVE_FUNCTION_GS_FPM (svcvt2, unary_convert, cvt_mf8, x2, none, set)
+ DEF_SVE_FUNCTION_GS_FPM (svcvtl1, unary_convert, cvt_mf8, x2, none, set)
+ DEF_SVE_FUNCTION_GS_FPM (svcvtl2, unary_convert, cvt_mf8, x2, none, set)
+ DEF_SVE_FUNCTION_GS (svscale, binary_int_opt_single_n, all_float, x24, none)
+ #undef REQUIRED_EXTENSIONS
diff -Nrcpad gcc-16-20251221/gcc/config/aarch64/aarch64-sve-builtins-sve2.h gcc-16-20251228/gcc/config/aarch64/aarch64-sve-builtins-sve2.h
*** gcc-16-20251221/gcc/config/aarch64/aarch64-sve-builtins-sve2.h	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/config/aarch64/aarch64-sve-builtins-sve2.h	Sun Dec 28 22:32:06 2025
*************** namespace aarch64_sve
*** 64,69 ****
--- 64,71 ----
      extern const function_base *const svcvt1;
      extern const function_base *const svcvt2;
      extern const function_base *const svcvtl;
+     extern const function_base *const svcvtl1;
+     extern const function_base *const svcvtl2;
      extern const function_base *const svcvtlt;
      extern const function_base *const svcvtlt1;
      extern const function_base *const svcvtlt2;
diff -Nrcpad gcc-16-20251221/gcc/config/aarch64/aarch64-sve-builtins.cc gcc-16-20251228/gcc/config/aarch64/aarch64-sve-builtins.cc
*** gcc-16-20251221/gcc/config/aarch64/aarch64-sve-builtins.cc	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/config/aarch64/aarch64-sve-builtins.cc	Sun Dec 28 22:32:06 2025
*************** CONSTEXPR const group_suffix_info group_
*** 192,446 ****
     class ("b", "f", etc.) and a numerical bit count.  */
  
  /* _b8 _b16 _b32 _b64.  */
! #define TYPES_all_pred(S, D) \
    S (b8), S (b16), S (b32), S (b64)
  
  /* _c8 _c16 _c32 _c64.  */
! #define TYPES_all_count(S, D) \
    S (c8), S (c16), S (c32), S (c64)
  
  /* _b8 _b16 _b32 _b64
     _c8 _c16 _c32 _c64.  */
! #define TYPES_all_pred_count(S, D) \
!   TYPES_all_pred (S, D), \
!   TYPES_all_count (S, D)
  
  /* _f16 _f32 _f64.  */
! #define TYPES_all_float(S, D) \
    S (f16), S (f32), S (f64)
  
  /* _s8 _s16 _s32 _s64.  */
! #define TYPES_all_signed(S, D) \
    S (s8), S (s16), S (s32), S (s64)
  
  /*     _f16 _f32 _f64
     _s8 _s16 _s32 _s64.  */
! #define TYPES_all_float_and_signed(S, D) \
!   TYPES_all_float (S, D), TYPES_all_signed (S, D)
  
  /* _u8 _u16 _u32 _u64.  */
! #define TYPES_all_unsigned(S, D) \
    S (u8), S (u16), S (u32), S (u64)
  
  /* _s8 _s16 _s32 _s64
     _u8 _u16 _u32 _u64.  */
! #define TYPES_all_integer(S, D) \
!   TYPES_all_signed (S, D), TYPES_all_unsigned (S, D)
  
  /*     _f16 _f32 _f64
     _s8 _s16 _s32 _s64
     _u8 _u16 _u32 _u64.  */
! #define TYPES_all_arith(S, D) \
!   TYPES_all_float (S, D), TYPES_all_integer (S, D)
  
! #define TYPES_all_data(S, D) \
!   TYPES_b_data (S, D), \
!   TYPES_h_data (S, D), \
!   TYPES_s_data (S, D), \
!   TYPES_d_data (S, D)
  
  /* _b only.  */
! #define TYPES_b(S, D) \
    S (b)
  
  /* _c only.  */
! #define TYPES_c(S, D) \
    S (c)
  
  /* _u8.  */
! #define TYPES_b_unsigned(S, D) \
    S (u8)
  
  /* _s8
     _u8.  */
! #define TYPES_b_integer(S, D) \
!   S (s8), TYPES_b_unsigned (S, D)
  
  /* _mf8
     _s8
     _u8.  */
! #define TYPES_b_data(S, D) \
!   S (mf8), TYPES_b_integer (S, D)
  
  /* _s8 _s16
     _u8 _u16.  */
! #define TYPES_bh_integer(S, D) \
    S (s8), S (s16), S (u8), S (u16)
  
  /* _u8 _u32.  */
! #define TYPES_bs_unsigned(S, D) \
    S (u8), S (u32)
  
  /* _s8 _s16 _s32.  */
! #define TYPES_bhs_signed(S, D) \
    S (s8), S (s16), S (s32)
  
  /* _u8 _u16 _u32.  */
! #define TYPES_bhs_unsigned(S, D) \
    S (u8), S (u16), S (u32)
  
  /* _s8 _s16 _s32
     _u8 _u16 _u32.  */
! #define TYPES_bhs_integer(S, D) \
!   TYPES_bhs_signed (S, D), TYPES_bhs_unsigned (S, D)
  
! #define TYPES_bh_data(S, D)			\
!   TYPES_b_data (S, D), \
!   TYPES_h_data (S, D)
  
! #define TYPES_bhs_data(S, D)			\
!   TYPES_b_data (S, D), \
!   TYPES_h_data (S, D), \
!   TYPES_s_data (S, D)
  
  /* _s16_s8  _s32_s16  _s64_s32
     _u16_u8  _u32_u16  _u64_u32.  */
! #define TYPES_bhs_widen(S, D) \
    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) \
    S (bf16)
  
  /* _f16.  */
! #define TYPES_h_float(S, D) \
    S (f16)
  
  /* _s16
     _u16.  */
! #define TYPES_h_integer(S, D) \
    S (s16), S (u16)
  
  /* _bf16
     _f16
     _s16
     _u16.  */
! #define TYPES_h_data(S, D) \
!   S (bf16), S (f16), TYPES_h_integer (S, D)
  
  /* _s16 _s32.  */
! #define TYPES_hs_signed(S, D) \
    S (s16), S (s32)
  
  /* _s16 _s32
     _u16 _u32.  */
! #define TYPES_hs_integer(S, D) \
!   TYPES_hs_signed (S, D), S (u16), S (u32)
  
  /* _f16 _f32.  */
! #define TYPES_hs_float(S, D) \
    S (f16), S (f32)
  
! #define TYPES_hs_data(S, D) \
!   TYPES_h_data (S, D), \
!   TYPES_s_data (S, D)
  
  /* _u16 _u64.  */
! #define TYPES_hd_unsigned(S, D) \
    S (u16), S (u64)
  
  /* _s16 _s32 _s64.  */
! #define TYPES_hsd_signed(S, D) \
    S (s16), S (s32), S (s64)
  
  /* _s16 _s32 _s64
     _u16 _u32 _u64.  */
! #define TYPES_hsd_integer(S, D) \
!   TYPES_hsd_signed (S, D), S (u16), S (u32), S (u64)
  
! #define TYPES_hsd_data(S, D) \
!   TYPES_h_data (S, D), \
!   TYPES_s_data (S, D), \
!   TYPES_d_data (S, D)
  
  /* _f16_mf8.  */
! #define TYPES_h_float_mf8(S, D) \
    D (f16, mf8)
  
  /* _f32.  */
! #define TYPES_s_float(S, D) \
    S (f32)
  
  /* _f32_mf8.  */
! #define TYPES_s_float_mf8(S, D) \
    D (f32, mf8)
  
  /*      _f32
     _s16 _s32 _s64
     _u16 _u32 _u64.  */
! #define TYPES_s_float_hsd_integer(S, D) \
!   TYPES_s_float (S, D), TYPES_hsd_integer (S, D)
  
  /* _f32
     _s32 _s64
     _u32 _u64.  */
! #define TYPES_s_float_sd_integer(S, D) \
!   TYPES_s_float (S, D), TYPES_sd_integer (S, D)
  
  /* _s32.  */
! #define TYPES_s_signed(S, D) \
    S (s32)
  
  /* _u32.  */
! #define TYPES_s_unsigned(S, D) \
    S (u32)
  
  /* _s32
     _u32.  */
! #define TYPES_s_integer(S, D) \
!   TYPES_s_signed (S, D), TYPES_s_unsigned (S, D)
  
  /* _f32
     _s32
     _u32.  */
! #define TYPES_s_data(S, D) \
!   TYPES_s_float (S, D), TYPES_s_integer (S, D)
  
  /* _s32 _s64.  */
! #define TYPES_sd_signed(S, D) \
    S (s32), S (s64)
  
  /* _u32 _u64.  */
! #define TYPES_sd_unsigned(S, D) \
    S (u32), S (u64)
  
  /* _s32 _s64
     _u32 _u64.  */
! #define TYPES_sd_integer(S, D) \
!   TYPES_sd_signed (S, D), TYPES_sd_unsigned (S, D)
  
! #define TYPES_sd_data(S, D) \
!   TYPES_s_data (S, D), \
!   TYPES_d_data (S, D)
  
  /* _f16 _f32 _f64
  	_s32 _s64
  	_u32 _u64.  */
! #define TYPES_all_float_and_sd_integer(S, D) \
!   TYPES_all_float (S, D), TYPES_sd_integer (S, D)
  
  /* _f64.  */
! #define TYPES_d_float(S, D) \
    S (f64)
  
  /* _u64.  */
! #define TYPES_d_unsigned(S, D) \
    S (u64)
  
  /* _s64
     _u64.  */
! #define TYPES_d_integer(S, D) \
!   S (s64), TYPES_d_unsigned (S, D)
  
  /* _f64
     _s64
     _u64.  */
! #define TYPES_d_data(S, D) \
!   TYPES_d_float (S, D), TYPES_d_integer (S, D)
  
  /* All the type combinations allowed by svcvt.  */
! #define TYPES_cvt(S, D) \
    D (f16, f32), D (f16, f64), \
    D (f16, s16), D (f16, s32), D (f16, s64), \
    D (f16, u16), D (f16, u32), D (f16, u64), \
--- 192,446 ----
     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)
  
  /* _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), \
*************** CONSTEXPR const group_suffix_info group_
*** 462,496 ****
    D (u64, f16), D (u64, f32), D (u64, f64)
  
  /* _bf16_f32.  */
! #define TYPES_cvt_bfloat(S, D) \
    D (bf16, f32)
  
  /* { _bf16 _f16 } x _f32.  */
! #define TYPES_cvt_h_s_float(S, D) \
    D (bf16, f32), D (f16, f32)
  
  /* _f32_f16.  */
! #define TYPES_cvt_f32_f16(S, D) \
    D (f32, f16)
  
  /* _f32_f16
     _f64_f32.  */
! #define TYPES_cvt_long(S, D) \
    D (f32, f16), D (f64, f32)
  
  /* _f16_f32.  */
! #define TYPES_cvt_narrow_s(S, D) \
    D (f32, f64)
  
  /* _f16_f32
     _f32_f64.  */
! #define TYPES_cvt_narrow(S, D) \
!   D (f16, f32), TYPES_cvt_narrow_s (S, D)
  
  /* { _s32 _u32 } x _f32
  
     _f32 x { _s32 _u32 }.  */
! #define TYPES_cvt_s_s(S, D) \
    D (s32, f32), \
    D (u32, f32), \
    D (f32, s32), \
--- 462,496 ----
    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)
  
  /* _f16_f32.  */
! #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), \
*************** CONSTEXPR const group_suffix_info group_
*** 498,520 ****
  
  /* _f16_mf8
     _bf16_mf8.  */
! #define TYPES_cvt_mf8(S, D) \
    D (f16, mf8), D (bf16, mf8)
  
  /* _mf8_f16
     _mf8_bf16.  */
! #define TYPES_cvtn_mf8(S, D) \
    D (mf8, f16), D (mf8, bf16)
  
  /* _mf8_f32.  */
! #define TYPES_cvtnx_mf8(S, D) \
    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) \
    TYPES_inc_dec_n1 (D, s32), \
    TYPES_inc_dec_n1 (D, s64), \
    TYPES_inc_dec_n1 (D, u32), \
--- 498,520 ----
  
  /* _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), \
*************** CONSTEXPR const group_suffix_info group_
*** 523,529 ****
  /* { _s16 _u16 } x _s32
  
     {      _u16 } x _u32.  */
! #define TYPES_qcvt_x2(S, D) \
    D (s16, s32), \
    D (u16, u32), \
    D (u16, s32)
--- 523,529 ----
  /* { _s16 _u16 } x _s32
  
     {      _u16 } x _u32.  */
! #define TYPES_qcvt_x2(S, D, T) \
    D (s16, s32), \
    D (u16, u32), \
    D (u16, s32)
*************** CONSTEXPR const group_suffix_info group_
*** 535,541 ****
     { _s16 _u16 } x _s64
  
     {      _u16 } x _u64.  */
! #define TYPES_qcvt_x4(S, D) \
    D (s8, s32), \
    D (u8, u32), \
    D (u8, s32), \
--- 535,541 ----
     { _s16 _u16 } x _s64
  
     {      _u16 } x _u64.  */
! #define TYPES_qcvt_x4(S, D, T) \
    D (s8, s32), \
    D (u8, u32), \
    D (u8, s32), \
*************** CONSTEXPR const group_suffix_info group_
*** 545,563 ****
  
  /* _s16_s32
     _u16_u32.  */
! #define TYPES_qrshr_x2(S, D) \
    D (s16, s32), \
    D (u16, u32)
  
  /* _u16_s32.  */
! #define TYPES_qrshru_x2(S, D) \
    D (u16, s32)
  
  /* _s8_s32
     _s16_s64
     _u8_u32
     _u16_u64.  */
! #define TYPES_qrshr_x4(S, D) \
    D (s8, s32), \
    D (s16, s64), \
    D (u8, u32), \
--- 545,563 ----
  
  /* _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), \
*************** CONSTEXPR const group_suffix_info group_
*** 565,571 ****
  
  /* _u8_s32
     _u16_s64.  */
! #define TYPES_qrshru_x4(S, D) \
    D (u8, s32), \
    D (u16, s64)
  
--- 565,571 ----
  
  /* _u8_s32
     _u16_s64.  */
! #define TYPES_qrshru_x4(S, D, T) \
    D (u8, s32), \
    D (u16, s64)
  
*************** CONSTEXPR const group_suffix_info group_
*** 579,585 ****
    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) \
    TYPES_reinterpret1 (D, mf8), \
    TYPES_reinterpret1 (D, bf16), \
    TYPES_reinterpret1 (D, f16), \
--- 579,585 ----
    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), \
*************** CONSTEXPR const group_suffix_info group_
*** 596,602 ****
  
  /* _b_c
     _c_b.  */
! #define TYPES_reinterpret_b(S, D) \
    D (b, c), \
    D (c, b)
  
--- 596,602 ----
  
  /* _b_c
     _c_b.  */
! #define TYPES_reinterpret_b(S, D, T) \
    D (b, c), \
    D (c, b)
  
*************** CONSTEXPR const group_suffix_info group_
*** 604,610 ****
  			    { _u32 _u64 } */
  #define TYPES_while1(D, bn) \
    D (bn, s32), D (bn, s64), D (bn, u32), D (bn, u64)
! #define TYPES_while(S, D) \
    TYPES_while1 (D, b8), \
    TYPES_while1 (D, b16), \
    TYPES_while1 (D, b32), \
--- 604,610 ----
  			    { _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), \
*************** CONSTEXPR const group_suffix_info group_
*** 612,618 ****
  
  /* { _b8 _b16 _b32 _b64 } x { _s64 }
  			    { _u64 } */
! #define TYPES_while_x(S, D) \
    D (b8, s64), D (b8, u64), \
    D (b16, s64), D (b16, u64), \
    D (b32, s64), D (b32, u64), \
--- 612,618 ----
  
  /* { _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), \
*************** CONSTEXPR const group_suffix_info group_
*** 620,626 ****
  
  /* { _c8 _c16 _c32 _c64 } x { _s64 }
  			    { _u64 } */
! #define TYPES_while_x_c(S, D) \
    D (c8, s64), D (c8, u64), \
    D (c16, s64), D (c16, u64), \
    D (c32, s64), D (c32, u64), \
--- 620,626 ----
  
  /* { _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), \
*************** CONSTEXPR const group_suffix_info group_
*** 629,654 ****
  /* _f32_f16
     _s32_s16
     _u32_u16.  */
! #define TYPES_s_narrow_fsu(S, D) \
    D (f32, f16), D (s32, s16), D (u32, u16)
  
  /* _za8 _za16 _za32 _za64 _za128.  */
! #define TYPES_all_za(S, D) \
    S (za8), S (za16), S (za32), S (za64), S (za128)
  
  /* _za64.  */
! #define TYPES_d_za(S, D) \
    S (za64)
  
! /* {   _za8 } x {             _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) \
!   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)
--- 629,654 ----
  /* _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)
*************** CONSTEXPR const group_suffix_info group_
*** 660,771 ****
  		{ _s8   _s16 _s32 _s64 }
  		{ _u8   _u16 _u32 _u64 }.  */
  
! #define TYPES_za_all_data(S, D) \
!   TYPES_za_bhsd_data (S, D), \
    TYPES_reinterpret1 (D, za128)
  
  /* _za16_bf16.  */
! #define TYPES_za_h_bfloat(S, D) \
    D (za16, bf16)
  
  /* _za16_f16.  */
! #define TYPES_za_h_float(S, D) \
    D (za16, f16)
  
  /* _za32_s8.  */
! #define TYPES_za_s_b_signed(S, D) \
     D (za32, s8)
  
  /* _za32_u8.  */
! #define TYPES_za_s_b_unsigned(S, D) \
     D (za32, u8)
  
  /* _za32 x { _s8 _u8 }.  */
! #define TYPES_za_s_b_integer(S, D) \
    D (za32, s8), D (za32, u8)
  
  /* _za32 x { _s16 _u16 }.  */
! #define TYPES_za_s_h_integer(S, D) \
    D (za32, s16), D (za32, u16)
  
  /* _za32 x { _bf16 _f16 _s16 _u16 }.  */
! #define TYPES_za_s_h_data(S, D) \
    D (za32, bf16), D (za32, f16), D (za32, s16), D (za32, u16)
  
  /* _za32_u32.  */
! #define TYPES_za_s_unsigned(S, D) \
    D (za32, u32)
  
  /* _za32 x { _s32 _u32 }.  */
! #define TYPES_za_s_integer(S, D) \
    D (za32, s32), D (za32, u32)
  
  /* _za32_f32.  */
! #define TYPES_za_s_float(S, D) \
    D (za32, f32)
  
  /* _za32 x { _f32 _s32 _u32 }.  */
! #define TYPES_za_s_data(S, D) \
    D (za32, f32), D (za32, s32), D (za32, u32)
  
  /* _za64 x { _s16 _u16 }.  */
! #define TYPES_za_d_h_integer(S, D) \
    D (za64, s16), D (za64, u16)
  
  /* _za64_f64.  */
! #define TYPES_za_d_float(S, D) \
    D (za64, f64)
  
  /* _za64 x { _s64 _u64 }.  */
! #define TYPES_za_d_integer(S, D) \
    D (za64, s64), D (za64, u64)
  
  /* _za32 x { _s8 _u8 _bf16 _f16 _f32 }.  */
! #define TYPES_mop_base(S, D) \
    D (za32, s8), D (za32, u8), D (za32, bf16), D (za32, f16), D (za32, f32)
  
  /* _za32_s8.  */
! #define TYPES_mop_base_signed(S, D) \
    D (za32, s8)
  
  /* _za32_u8.  */
! #define TYPES_mop_base_unsigned(S, D) \
    D (za32, u8)
  
  /* _za64 x { _s16 _u16 }.  */
! #define TYPES_mop_i16i64(S, D) \
    D (za64, s16), D (za64, u16)
  
  /* _za64_s16.  */
! #define TYPES_mop_i16i64_signed(S, D) \
    D (za64, s16)
  
  /* _za64_u16.  */
! #define TYPES_mop_i16i64_unsigned(S, D) \
    D (za64, u16)
  
  /* _za.  */
! #define TYPES_za(S, D) \
    S (za)
  
! /* Describe a pair of type suffixes in which only the first is used.  */
! #define DEF_VECTOR_TYPE(X) { TYPE_SUFFIX_ ## X, NUM_TYPE_SUFFIXES }
  
! /* Describe a pair of type suffixes in which both are used.  */
! #define DEF_DOUBLE_TYPE(X, Y) { TYPE_SUFFIX_ ## X, TYPE_SUFFIX_ ## Y }
  
  /* 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_pair types_##NAME[] = { \
!     TYPES_##NAME (DEF_VECTOR_TYPE, DEF_DOUBLE_TYPE), \
!     { NUM_TYPE_SUFFIXES, NUM_TYPE_SUFFIXES } \
    }
  
  /* For functions that don't take any type suffixes.  */
! static const type_suffix_pair types_none[] = {
!   { NUM_TYPE_SUFFIXES, NUM_TYPE_SUFFIXES },
!   { NUM_TYPE_SUFFIXES, NUM_TYPE_SUFFIXES }
  };
  
  /* Create an array for each TYPES_<combination> macro above.  */
--- 660,789 ----
  		{ _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_za);
*** 849,854 ****
--- 867,873 ----
  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_h_integer);
*** 858,863 ****
--- 877,884 ----
  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);
*************** static CONSTEXPR const function_group_in
*** 987,1001 ****
  
  /* A list of all arm_sme.h functions.  */
  static CONSTEXPR const function_group_info sme_function_groups[] = {
! #define DEF_SME_FUNCTION_GS(NAME, SHAPE, TYPES, GROUPS, PREDS) \
    { #NAME, &functions::NAME, &shapes::SHAPE, types_##TYPES, groups_##GROUPS, \
      preds_##PREDS, aarch64_required_extensions::REQUIRED_EXTENSIONS, \
!     FPM_unused },
! #define DEF_SME_ZA_FUNCTION_GS(NAME, SHAPE, TYPES, GROUPS, PREDS) \
    { #NAME, &functions::NAME##_za, &shapes::SHAPE, types_##TYPES, \
      groups_##GROUPS, preds_##PREDS, \
      aarch64_required_extensions::REQUIRED_EXTENSIONS \
!       .and_also (AARCH64_FL_ZA_ON), FPM_unused },
  #include "aarch64-sve-builtins-sme.def"
  };
  
--- 1008,1022 ----
  
  /* 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"
  };
  
*************** function_instance::hash () const
*** 1207,1212 ****
--- 1228,1234 ----
    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);
*************** function_builder::get_name (const functi
*** 1378,1384 ****
        }
    else
      append_name (instance.mode_suffix ().string);
!   for (unsigned int i = 0; i < 2; ++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 ())
--- 1400,1406 ----
        }
    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 ())
*************** function_builder::add_overloaded_functio
*** 1623,1630 ****
  {
    bool explicit_type0 = (*group.shape)->explicit_type_suffix_p (0);
    bool explicit_type1 = (*group.shape)->explicit_type_suffix_p (1);
    bool explicit_group = (*group.shape)->explicit_group_suffix_p ();
!   auto add_function = [&](const type_suffix_pair &types,
  			  group_suffix_index group_suffix_id,
  			  unsigned int pi)
      {
--- 1645,1653 ----
  {
    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_builder::add_overloaded_functio
*** 1652,1660 ****
  	  {
  	    /* Stub out the types that are determined by overload
  	       resolution.  */
! 	    type_suffix_pair types = {
  	      explicit_type0 ? group.types[ti][0] : NUM_TYPE_SUFFIXES,
! 	      explicit_type1 ? group.types[ti][1] : NUM_TYPE_SUFFIXES
  	    };
  	    add_function (types, group_suffix_id, pi);
  	  }
--- 1675,1684 ----
  	  {
  	    /* 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);
  	  }
*************** tree
*** 1805,1813 ****
  function_resolver::lookup_form (mode_suffix_index mode,
  				type_suffix_index type0,
  				type_suffix_index type1,
  				group_suffix_index group)
  {
!   type_suffix_pair types = { type0, type1 };
    function_instance instance (base_name, base, shape, mode, types, group, pred,
  			      fpm_mode);
    registered_function *rfn
--- 1829,1838 ----
  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_resolver::lookup_form (mode_suf
*** 1827,1839 ****
  {
    type_suffix_index type0 = type_suffix_ids[0];
    type_suffix_index type1 = type_suffix_ids[1];
    (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, group);
  }
  
  /* Resolve the function to one with the mode suffix given by MODE, the
--- 1852,1865 ----
  {
    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
*************** tree
*** 1844,1852 ****
  function_resolver::resolve_to (mode_suffix_index mode,
  			       type_suffix_index type0,
  			       type_suffix_index type1,
  			       group_suffix_index group)
  {
!   tree res = lookup_form (mode, type0, type1, group);
    if (!res)
      {
        if (type1 == NUM_TYPE_SUFFIXES)
--- 1870,1879 ----
  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)
*************** function_resolver::resolve_unary (type_c
*** 3207,3213 ****
    /* 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);
  
    return resolve_to (mode_suffix_id, type);
  }
--- 3234,3241 ----
    /* 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);
  }
diff -Nrcpad gcc-16-20251221/gcc/config/aarch64/aarch64-sve-builtins.h gcc-16-20251228/gcc/config/aarch64/aarch64-sve-builtins.h
*** gcc-16-20251221/gcc/config/aarch64/aarch64-sve-builtins.h	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/config/aarch64/aarch64-sve-builtins.h	Sun Dec 28 22:32:06 2025
***************
*** 38,44 ****
     - mode_suffix_index represents the mode suffix
  
     - type_suffix_index represents individual type suffixes, while
!      type_suffix_pair represents a pair of them
  
     - prediction_index extends the predication suffix with an additional
       alternative: PRED_implicit for implicitly-predicated operations
--- 38,44 ----
     - 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
*************** enum group_suffix_index
*** 227,234 ****
    NUM_GROUP_SUFFIXES
  };
  
! /* Combines two type suffixes.  */
! typedef enum type_suffix_index type_suffix_pair[2];
  
  class function_base;
  class function_shape;
--- 227,234 ----
    NUM_GROUP_SUFFIXES
  };
  
! /* Combines three type suffixes.  */
! typedef enum type_suffix_index type_suffix_triple[3];
  
  class function_base;
  class function_shape;
*************** struct function_group_info
*** 367,378 ****
    /* 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 two 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_pair *types;
    const group_suffix_index *groups;
    const predication_index *preds;
  
--- 367,378 ----
    /* 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;
  
*************** class GTY((user)) function_instance
*** 390,396 ****
  public:
    function_instance (const char *, const function_base *,
  		     const function_shape *, mode_suffix_index,
! 		     const type_suffix_pair &, group_suffix_index,
  		     predication_index, fpm_mode_index);
  
    bool operator== (const function_instance &) const;
--- 390,396 ----
  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;
*************** public:
*** 434,440 ****
    const function_base *base;
    const function_shape *shape;
    mode_suffix_index mode_suffix_id;
!   type_suffix_pair type_suffix_ids;
    group_suffix_index group_suffix_id;
    predication_index pred;
    fpm_mode_index fpm_mode;
--- 434,440 ----
    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;
*************** public:
*** 527,537 ****
--- 527,539 ----
    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);
*************** inline function_instance::
*** 907,913 ****
  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_pair &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),
--- 909,915 ----
  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),
*************** function_instance::operator== (const fun
*** 925,930 ****
--- 927,933 ----
  	  && 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);
diff -Nrcpad gcc-16-20251221/gcc/config/aarch64/aarch64-sve2.md gcc-16-20251228/gcc/config/aarch64/aarch64-sve2.md
*** gcc-16-20251221/gcc/config/aarch64/aarch64-sve2.md	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/config/aarch64/aarch64-sve2.md	Sun Dec 28 22:32:06 2025
***************
*** 58,63 ****
--- 58,64 ----
  ;; ---- [INT] Saturating left shifts
  ;; ---- [FP] Non-widening bfloat16 arithmetic
  ;; ---- [FP] Clamp to minimum/maximum
+ ;; ---- [FP] Scaling by powers of two
  ;;
  ;; == Uniform ternary arithmnetic
  ;; ---- [INT] General ternary arithmetic that maps to unspecs
***************
*** 1481,1486 ****
--- 1482,1514 ----
    [(set_attr "sve_type" "sve_fp_arith")]
  )
  
+ ;; -------------------------------------------------------------------------
+ ;; ---- [FP] Scaling by powers of two
+ ;; -------------------------------------------------------------------------
+ ;; Includes the multiple and single vector and multiple vectors forms of
+ ;; - FSCALE
+ ;; -------------------------------------------------------------------------
+ 
+ (define_insn "@aarch64_sve_fscale<mode>"
+   [(set (match_operand:SVE_Fx24_NOBF 0 "register_operand" "=Uw<vector_count>")
+ 	(unspec:SVE_Fx24_NOBF
+ 	  [(match_operand:SVE_Fx24_NOBF 1 "register_operand" "0")
+ 	   (match_operand:<SVSCALE_INTARG> 2 "register_operand" "Uw<vector_count>")]
+ 	  UNSPEC_FSCALE))]
+   "TARGET_STREAMING_SME2 && TARGET_FP8"
+   "fscale\t%0, %1, %2"
+ )
+ 
+ (define_insn "@aarch64_sve_single_fscale<mode>"
+   [(set (match_operand:SVE_Fx24_NOBF 0 "register_operand" "=Uw<vector_count>")
+ 	(unspec:SVE_Fx24_NOBF
+ 	  [(match_operand:SVE_Fx24_NOBF 1 "register_operand" "0")
+ 	   (match_operand:<SVSCALE_SINGLE_INTARG> 2 "register_operand" "x")]
+ 	  UNSPEC_FSCALE))]
+   "TARGET_STREAMING_SME2 && TARGET_FP8"
+   "fscale\t%0, %1, %2.<Vetype>"
+ )
+ 
  ;; =========================================================================
  ;; == Uniform ternary arithmnetic
  ;; =========================================================================
***************
*** 3591,3596 ****
--- 3619,3634 ----
    [(set_attr "sve_type" "sve_fp_cvt")]
  )
  
+ (define_insn "@aarch64_sve2_fp8_cvt_<fp8_cvt_uns_op><mode>"
+   [(set (match_operand:SVE_FULL_HFx2 0 "aligned_register_operand" "=Uw2")
+ 	(unspec:SVE_FULL_HFx2
+ 	  [(match_operand:VNx16QI 1 "register_operand" "w")
+ 	  (reg:DI FPM_REGNUM)]
+ 	  FP8CVT_UNS))]
+   "TARGET_SSME2_FP8"
+   "<b><fp8_cvt_uns_op>\t%0, %1.b"
+ )
+ 
  ;; -------------------------------------------------------------------------
  ;; ---- [FP<-FP] Multi-vector narrowing conversions
  ;; -------------------------------------------------------------------------
***************
*** 3625,3634 ****
  (define_insn "@aarch64_sve2_fp8_cvtn<mode>"
    [(set (match_operand:VNx16QI 0 "register_operand" "=w")
  	(unspec:VNx16QI
! 	  [(match_operand:SVE_FULL_HFx2 1 "aligned_register_operand" "Uw2")
  	   (reg:DI FPM_REGNUM)]
  	  UNSPEC_FP8FCVTN))]
!   "TARGET_SSVE_FP8"
    "<b>fcvtn\t%0.b, %1"
    [(set_attr "sve_type" "sve_fp_cvt")]
  )
--- 3663,3672 ----
  (define_insn "@aarch64_sve2_fp8_cvtn<mode>"
    [(set (match_operand:VNx16QI 0 "register_operand" "=w")
  	(unspec:VNx16QI
! 	  [(match_operand:VNx16F_NARROW 1 "aligned_register_operand" "Uw<vector_count>")
  	   (reg:DI FPM_REGNUM)]
  	  UNSPEC_FP8FCVTN))]
!   "<MODE>mode == VNx16SFmode ? TARGET_SSME2_FP8 : TARGET_SSVE_FP8"
    "<b>fcvtn\t%0.b, %1"
    [(set_attr "sve_type" "sve_fp_cvt")]
  )
***************
*** 3656,3661 ****
--- 3694,3709 ----
    [(set_attr "sve_type" "sve_fp_cvt")]
  )
  
+ (define_insn "@aarch64_sme2_fp8_cvt<mode>"
+   [(set (match_operand:VNx16QI 0 "register_operand" "=w")
+ 	(unspec:VNx16QI
+ 	  [(match_operand:VNx16F_NARROW 1 "aligned_register_operand" "Uw<vector_count>")
+ 	   (reg:DI FPM_REGNUM)]
+ 	  UNSPEC_FCVT))]
+    "TARGET_SSME2_FP8"
+    "<b>fcvt\t%0.b, %1"
+ )
+ 
  ;; -------------------------------------------------------------------------
  ;; ---- [FP<-INT] Multi-vector conversions
  ;; -------------------------------------------------------------------------
diff -Nrcpad gcc-16-20251221/gcc/config/aarch64/aarch64.h gcc-16-20251228/gcc/config/aarch64/aarch64.h
*** gcc-16-20251221/gcc/config/aarch64/aarch64.h	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/config/aarch64/aarch64.h	Sun Dec 28 22:32:06 2025
*************** constexpr auto AARCH64_FL_DEFAULT_ISA_MO
*** 321,326 ****
--- 321,334 ----
  /* The FEAT_SME_I16I64 extension to SME, enabled through +sme-i16i64.  */
  #define TARGET_SME_I16I64 AARCH64_HAVE_ISA (SME_I16I64)
  
+ /* The FEAT_SME_F8F16 extension to SME, enabled through +sme-f8f16.  */
+ #define TARGET_STREAMING_SME_F8F16 \
+   (AARCH64_HAVE_ISA (SME_F8F16) && TARGET_STREAMING)
+ 
+ /* The FEAT_SME_F8F32 extension to SME, enabled through +sme-f8f32.  */
+ #define TARGET_STREAMING_SME_F8F32 \
+   (AARCH64_HAVE_ISA (SME_F8F32) && TARGET_STREAMING)
+ 
  /* The FEAT_SME_B16B16 extension to SME, enabled through +sme-b16b16.  */
  #define TARGET_STREAMING_SME_B16B16 \
    (AARCH64_HAVE_ISA (SME_B16B16) && TARGET_STREAMING)
*************** through +ssve-fp8dot2.  */
*** 538,543 ****
--- 546,553 ----
  		(TARGET_SVE2 && TARGET_FP8DOT2) || TARGET_STREAMING) \
  		&& (AARCH64_HAVE_ISA(SSVE_FP8DOT2) || TARGET_NON_STREAMING))
  
+ #define TARGET_SSME2_FP8 (TARGET_FP8 && TARGET_STREAMING_SME2)
+ 
  /* Standard register usage.  */
  
  /* 31 64-bit general purpose registers R0-R30:
diff -Nrcpad gcc-16-20251221/gcc/config/aarch64/iterators.md gcc-16-20251228/gcc/config/aarch64/iterators.md
*** gcc-16-20251221/gcc/config/aarch64/iterators.md	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/config/aarch64/iterators.md	Sun Dec 28 22:32:06 2025
***************
*** 712,717 ****
--- 712,720 ----
  (define_mode_iterator VNx2_NARROW [VNx2QI VNx2HI VNx2SI])
  (define_mode_iterator VNx2_WIDE [VNx2DI])
  
+ ;; Used for narrowing SVE floating point operations.
+ (define_mode_iterator VNx16F_NARROW [SVE_FULL_HFx2 VNx16SF])
+ 
  ;; All SVE predicate modes.
  (define_mode_iterator PRED_ALL [VNx16BI VNx8BI VNx4BI VNx2BI])
  
***************
*** 732,741 ****
  (define_mode_iterator SVE_Ix24 [VNx32QI VNx16HI VNx8SI VNx4DI
  				VNx64QI VNx32HI VNx16SI VNx8DI])
  
  (define_mode_iterator SVE_Fx24 [(VNx16BF "TARGET_SSVE_B16B16")
  				(VNx32BF "TARGET_SSVE_B16B16")
! 				VNx16HF VNx8SF VNx4DF
! 				VNx32HF VNx16SF VNx8DF])
  
  (define_mode_iterator SVE_SFx24 [VNx8SF VNx16SF])
  
--- 735,746 ----
  (define_mode_iterator SVE_Ix24 [VNx32QI VNx16HI VNx8SI VNx4DI
  				VNx64QI VNx32HI VNx16SI VNx8DI])
  
+ (define_mode_iterator SVE_Fx24_NOBF [VNx16HF VNx8SF VNx4DF
+ 				     VNx32HF VNx16SF VNx8DF])
+ 
  (define_mode_iterator SVE_Fx24 [(VNx16BF "TARGET_SSVE_B16B16")
  				(VNx32BF "TARGET_SSVE_B16B16")
! 				SVE_Fx24_NOBF])
  
  (define_mode_iterator SVE_SFx24 [VNx8SF VNx16SF])
  
***************
*** 753,758 ****
--- 758,776 ----
  (define_mode_iterator SME_ZA_HFx124 [VNx8BF VNx16BF VNx32BF
  				     VNx8HF VNx16HF VNx32HF])
  
+ (define_mode_iterator SME_ZA_F8F16 [(VNx8HI "TARGET_STREAMING_SME_F8F16")])
+ (define_mode_iterator SME_ZA_F8F32 [(VNx4SI "TARGET_STREAMING_SME_F8F32")])
+ 
+ (define_mode_iterator SME_ZA_F8F16_32 [(VNx8HI "TARGET_STREAMING_SME_F8F16")
+ 				       (VNx4SI "TARGET_STREAMING_SME_F8F32")])
+ 
+ (define_mode_iterator SME_ZA_FP8_x24 [VNx32QI VNx64QI])
+ 
+ (define_mode_iterator SME_ZA_FP8_x124 [VNx16QI VNx32QI VNx64QI])
+ (define_mode_iterator SME_ZA_FP8_x1 [VNx16QI])
+ (define_mode_iterator SME_ZA_FP8_x2 [VNx32QI])
+ (define_mode_iterator SME_ZA_FP8_x4 [VNx64QI])
+ 
  (define_mode_iterator SME_ZA_HFx24 [VNx16BF VNx32BF VNx16HF VNx32HF])
  
  (define_mode_iterator SME_ZA_HIx124 [VNx8HI VNx16HI VNx32HI])
***************
*** 1055,1064 ****
--- 1073,1085 ----
      UNSPEC_EORBT	; Used in aarch64-sve2.md.
      UNSPEC_EORTB	; Used in aarch64-sve2.md.
      UNSPEC_F1CVT	; Used in aarch64-sve2.md.
+     UNSPEC_F1CVTL	; Used in aarch64-sve2.md.
      UNSPEC_F1CVTLT	; Used in aarch64-sve2.md.
      UNSPEC_F2CVT	; Used in aarch64-sve2.md.
+     UNSPEC_F2CVTL	; Used in aarch64-sve2.md.
      UNSPEC_F2CVTLT	; Used in aarch64-sve2.md.
      UNSPEC_FADDP	; Used in aarch64-sve2.md.
+     UNSPEC_FCVT		; Used in aarch64-sve2.md.
      UNSPEC_FCVTNB	; Used in aarch64-sve2.md.
      UNSPEC_FCVTNT	; Used in aarch64-sve2.md.
      UNSPEC_FMAXNMP	; Used in aarch64-sve2.md.
***************
*** 1255,1262 ****
--- 1276,1288 ----
      UNSPEC_SME_BMOPS
      UNSPEC_SME_FADD
      UNSPEC_SME_FDOT
+     UNSPEC_SME_FDOT_FP8
      UNSPEC_SME_FVDOT
+     UNSPEC_SME_FVDOT_FP8
+     UNSPEC_SME_FVDOTT_FP8
+     UNSPEC_SME_FVDOTB_FP8
      UNSPEC_SME_FMLA
+     UNSPEC_SME_FMLAL
      UNSPEC_SME_FMLS
      UNSPEC_SME_FMOPA
      UNSPEC_SME_FMOPS
***************
*** 2674,2679 ****
--- 2700,2709 ----
  				    (V4HF "<Vetype>[%4]") (V8HF "<Vetype>[%4]")
  				    ])
  
+ (define_mode_attr za16_offset_range [(VNx16QI "0_to_14_step_2")
+ 				     (VNx32QI "0_to_6_step_2")
+ 				     (VNx64QI "0_to_6_step_2")])
+ 
  (define_mode_attr za32_offset_range [(VNx16QI "0_to_12_step_4")
  				     (VNx8BF "0_to_14_step_2")
  				     (VNx8HF "0_to_14_step_2")
***************
*** 2694,2699 ****
--- 2724,2733 ----
  (define_mode_attr za32_long [(VNx16QI "ll") (VNx32QI "ll") (VNx64QI "ll")
  			     (VNx8HI "l") (VNx16HI "l") (VNx32HI "l")])
  
+ (define_mode_attr za16_32_long [(VNx4SI "l")(VNx8HI "")])
+ 
+ (define_mode_attr za16_32_last_offset [(VNx4SI "3")(VNx8HI "1")])
+ 
  (define_mode_attr za32_last_offset [(VNx16QI "3") (VNx32QI "3") (VNx64QI "3")
  				    (VNx8HI "1") (VNx16HI "1") (VNx32HI "1")])
  
***************
*** 2784,2789 ****
--- 2818,2841 ----
  (define_mode_attr LD1_EXTENDQ_MEM [(VNx4SI "VNx1SI") (VNx4SF "VNx1SI")
  				   (VNx2DI "VNx1DI") (VNx2DF "VNx1DI")])
  
+ ;; Maps the output type of svscale to the corresponding int vector type in the
+ ;; second argument.
+ (define_mode_attr SVSCALE_SINGLE_INTARG [(VNx16HF "VNx8HI") ;; f16_x2 -> s16
+ 					 (VNx32HF "VNx8HI") ;; f16_x4 -> s16
+ 					 (VNx8SF "VNx4SI") ;; f32_x2 -> s32
+ 					 (VNx16SF "VNx4SI") ;; f32_x4 -> s32
+ 					 (VNx4DF "VNx2DI") ;; f64_x2 -> s64
+ 					 (VNx8DF "VNx2DI") ;; f64_x4 -> s64
+ ])
+ 
+ (define_mode_attr SVSCALE_INTARG [(VNx16HF "VNx16HI") ;; f16_x2 -> s16x2
+ 				  (VNx32HF "VNx32HI") ;; f16_x4 -> s16x4
+ 				  (VNx8SF "VNx8SI") ;; f32_x2 -> s32_x2
+ 				  (VNx16SF "VNx16SI") ;; f32_x4 -> s32_x4
+ 				  (VNx4DF "VNx4DI") ;; f64_x2 -> s64_x2
+ 				  (VNx8DF "VNx8DI") ;; f64_x4 -> s64_x4
+ ])
+ 
  ;; -------------------------------------------------------------------
  ;; Code Iterators
  ;; -------------------------------------------------------------------
***************
*** 4023,4028 ****
--- 4075,4088 ----
  
  (define_int_iterator SME_FP_TERNARY_SLICE [UNSPEC_SME_FMLA UNSPEC_SME_FMLS])
  
+ (define_int_iterator SME_FP8_TERNARY_SLICE [UNSPEC_SME_FMLAL])
+ (define_int_iterator SME_FP8_DOTPROD [UNSPEC_SME_FDOT_FP8])
+ (define_int_iterator SME_FP8_FVDOT [UNSPEC_SME_FVDOT_FP8])
+ (define_int_iterator SME_FP8_FVDOT_HALF [
+ 	UNSPEC_SME_FVDOTB_FP8
+ 	UNSPEC_SME_FVDOTT_FP8
+ ])
+ 
  ;; Iterators for atomic operations.
  
  (define_int_iterator ATOMIC_LDOP
***************
*** 4044,4049 ****
--- 4104,4111 ----
  (define_int_iterator FP8CVT_UNS
    [UNSPEC_F1CVT
     UNSPEC_F2CVT
+    UNSPEC_F1CVTL
+    UNSPEC_F2CVTL
     UNSPEC_F1CVTLT
     UNSPEC_F2CVTLT])
  
***************
*** 4168,4175 ****
--- 4230,4242 ----
  			(UNSPEC_SME_BMOPS "bmops")
  			(UNSPEC_SME_FADD "fadd")
  			(UNSPEC_SME_FDOT "fdot")
+ 			(UNSPEC_SME_FDOT_FP8 "fdot")
  			(UNSPEC_SME_FVDOT "fvdot")
+ 			(UNSPEC_SME_FVDOT_FP8 "fvdot")
+ 			(UNSPEC_SME_FVDOTB_FP8 "fvdotb")
+ 			(UNSPEC_SME_FVDOTT_FP8 "fvdott")
  			(UNSPEC_SME_FMLA "fmla")
+ 			(UNSPEC_SME_FMLAL "fmlal")
  			(UNSPEC_SME_FMLS "fmls")
  			(UNSPEC_SME_FMOPA "fmopa")
  			(UNSPEC_SME_FMOPS "fmops")
***************
*** 5187,5192 ****
--- 5254,5261 ----
  (define_int_attr fp8_cvt_uns_op
    [(UNSPEC_F1CVT "f1cvt")
     (UNSPEC_F2CVT "f2cvt")
+    (UNSPEC_F1CVTL "f1cvtl")
+    (UNSPEC_F2CVTL "f2cvtl")
     (UNSPEC_F1CVTLT "f1cvtlt")
     (UNSPEC_F2CVTLT "f2cvtlt")])
  
diff -Nrcpad gcc-16-20251221/gcc/config/i386/i386.opt.urls gcc-16-20251228/gcc/config/i386/i386.opt.urls
*** gcc-16-20251221/gcc/config/i386/i386.opt.urls	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/config/i386/i386.opt.urls	Sun Dec 28 22:32:06 2025
*************** mno-red-zone
*** 84,90 ****
  UrlSuffix(gcc/x86-Options.html#index-mno-red-zone)
  
  momit-leaf-frame-pointer
! UrlSuffix(gcc/x86-Options.html#index-momit-leaf-frame-pointer-2)
  
  mrelax-cmpxchg-loop
  UrlSuffix(gcc/x86-Options.html#index-mrelax-cmpxchg-loop)
--- 84,90 ----
  UrlSuffix(gcc/x86-Options.html#index-mno-red-zone)
  
  momit-leaf-frame-pointer
! UrlSuffix(gcc/x86-Options.html#index-momit-leaf-frame-pointer-3)
  
  mrelax-cmpxchg-loop
  UrlSuffix(gcc/x86-Options.html#index-mrelax-cmpxchg-loop)
*************** UrlSuffix(gcc/x86-Options.html#index-mss
*** 128,133 ****
--- 128,135 ----
  mstackrealign
  UrlSuffix(gcc/x86-Options.html#index-mstackrealign)
  
+ ; skipping UrlSuffix for 'mstringop-strategy=' due to finding no URLs
+ 
  mtls-dialect=
  UrlSuffix(gcc/x86-Options.html#index-mtls-dialect-2)
  
diff -Nrcpad gcc-16-20251221/gcc/config/i386/sol2.h gcc-16-20251228/gcc/config/i386/sol2.h
*** gcc-16-20251221/gcc/config/i386/sol2.h	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/config/i386/sol2.h	Sun Dec 28 22:32:06 2025
*************** along with GCC; see the file COPYING3.
*** 55,61 ****
  #define CPP_SPEC "%(cpp_subtarget)"
  
  #undef CC1_SPEC
! #define CC1_SPEC "%(cc1_cpu) " ASAN_CC1_SPEC \
    " %{mx32:%e-mx32 is not supported on Solaris}"
  
  /* GNU as understands --32 and --64, but the native Solaris
--- 55,61 ----
  #define CPP_SPEC "%(cpp_subtarget)"
  
  #undef CC1_SPEC
! #define CC1_SPEC "%(cc1_cpu) " ASAN_CC1_SPEC SCTF_CC1_SPEC \
    " %{mx32:%e-mx32 is not supported on Solaris}"
  
  /* GNU as understands --32 and --64, but the native Solaris
*************** along with GCC; see the file COPYING3.
*** 68,76 ****
  #define ASM_CPU64_DEFAULT_SPEC "-xarch=generic64"
  #endif
  
  /* Since Studio 12.6, as needs -xbrace_comment=no so its AVX512 syntax is
     fully compatible with gas.  */
- #ifdef HAVE_AS_XBRACE_COMMENT_OPTION
  #define ASM_XBRACE_COMMENT_SPEC "-xbrace_comment=no"
  #else
  #define ASM_XBRACE_COMMENT_SPEC ""
--- 68,76 ----
  #define ASM_CPU64_DEFAULT_SPEC "-xarch=generic64"
  #endif
  
+ #if !HAVE_GNU_AS
  /* Since Studio 12.6, as needs -xbrace_comment=no so its AVX512 syntax is
     fully compatible with gas.  */
  #define ASM_XBRACE_COMMENT_SPEC "-xbrace_comment=no"
  #else
  #define ASM_XBRACE_COMMENT_SPEC ""
diff -Nrcpad gcc-16-20251221/gcc/config/riscv/andes-45-series.md gcc-16-20251228/gcc/config/riscv/andes-45-series.md
*** gcc-16-20251221/gcc/config/riscv/andes-45-series.md	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/config/riscv/andes-45-series.md	Sun Dec 28 22:32:06 2025
***************
*** 112,118 ****
  (define_insn_reservation "andes_45_fpu_alu_s" 3
    (and (eq_attr "tune" "andes_45_series")
         (and (eq_attr "type" "fadd")
! 	    (eq_attr "mode" "SF")))
    "andes_45_fpu_arith")
  
  (define_insn_reservation "andes_45_fpu_alu_d" 4
--- 112,118 ----
  (define_insn_reservation "andes_45_fpu_alu_s" 3
    (and (eq_attr "tune" "andes_45_series")
         (and (eq_attr "type" "fadd")
! 	    (eq_attr "mode" "BF,HF,SF")))
    "andes_45_fpu_arith")
  
  (define_insn_reservation "andes_45_fpu_alu_d" 4
***************
*** 124,130 ****
  (define_insn_reservation "andes_45_fpu_mul_s" 3
    (and (eq_attr "tune" "andes_45_series")
         (and (eq_attr "type" "fmul")
! 	    (eq_attr "mode" "SF")))
    "andes_45_fpu_arith")
  
  (define_insn_reservation "andes_45_fpu_mul_d" 4
--- 124,130 ----
  (define_insn_reservation "andes_45_fpu_mul_s" 3
    (and (eq_attr "tune" "andes_45_series")
         (and (eq_attr "type" "fmul")
! 	    (eq_attr "mode" "BF,HF,SF")))
    "andes_45_fpu_arith")
  
  (define_insn_reservation "andes_45_fpu_mul_d" 4
***************
*** 136,142 ****
  (define_insn_reservation "andes_45_fpu_mac_s" 3
    (and (eq_attr "tune" "andes_45_series")
         (and (eq_attr "type" "fmadd")
! 	    (eq_attr "mode" "SF")))
    "(andes_45_pipe0 | andes_45_pipe1) + andes_45_fpu_fmac + andes_45_fpu_fmv + andes_45_fpu_fmis")
  
  (define_insn_reservation "andes_45_fpu_mac_d" 4
--- 136,142 ----
  (define_insn_reservation "andes_45_fpu_mac_s" 3
    (and (eq_attr "tune" "andes_45_series")
         (and (eq_attr "type" "fmadd")
! 	    (eq_attr "mode" "BF,HF,SF")))
    "(andes_45_pipe0 | andes_45_pipe1) + andes_45_fpu_fmac + andes_45_fpu_fmv + andes_45_fpu_fmis")
  
  (define_insn_reservation "andes_45_fpu_mac_d" 4
diff -Nrcpad gcc-16-20251221/gcc/config/riscv/gen-riscv-ext-texi.cc gcc-16-20251228/gcc/config/riscv/gen-riscv-ext-texi.cc
*** gcc-16-20251221/gcc/config/riscv/gen-riscv-ext-texi.cc	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/config/riscv/gen-riscv-ext-texi.cc	Sun Dec 28 22:32:06 2025
*************** print_ext_doc_entry (const std::string &
*** 35,41 ****
    std::set<version_t> unique_versions;
    for (const auto &version : supported_versions)
      unique_versions.insert (version);
!   printf ("@item %s\n", ext_name.c_str ());
    printf ("@tab");
    for (const auto &version : unique_versions)
      {
--- 35,41 ----
    std::set<version_t> unique_versions;
    for (const auto &version : supported_versions)
      unique_versions.insert (version);
!   printf ("@item @samp{%s}\n", ext_name.c_str ());
    printf ("@tab");
    for (const auto &version : unique_versions)
      {
*************** main ()
*** 62,76 ****
    puts ("");
    puts ("@c Please *DO NOT* edit manually.");
    puts ("");
!   puts ("@multitable @columnfractions .10 .10 .80");
    puts ("@headitem Extension Name @tab Supported Version @tab Description");
    puts ("");
  
!   /* g extension is a very speical extension that no clear version...  */
!   puts ("@item g");
    puts ("@tab -");
    puts (
!     "@tab General-purpose computing base extension, @samp{g} will expand to");
    puts ("@samp{i}, @samp{m}, @samp{a}, @samp{f}, @samp{d}, @samp{zicsr} and");
    puts ("@samp{zifencei}.");
    puts ("");
--- 62,76 ----
    puts ("");
    puts ("@c Please *DO NOT* edit manually.");
    puts ("");
!   puts ("@multitable @columnfractions .25 .15 .6");
    puts ("@headitem Extension Name @tab Supported Version @tab Description");
    puts ("");
  
!   /* g extension is a very special extension that has no clear version...  */
!   puts ("@item @samp{g}");
    puts ("@tab -");
    puts (
!     "@tab General-purpose computing base extension; @samp{g} expands to");
    puts ("@samp{i}, @samp{m}, @samp{a}, @samp{f}, @samp{d}, @samp{zicsr} and");
    puts ("@samp{zifencei}.");
    puts ("");
diff -Nrcpad gcc-16-20251221/gcc/config/riscv/predicates.md gcc-16-20251228/gcc/config/riscv/predicates.md
*** gcc-16-20251221/gcc/config/riscv/predicates.md	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/config/riscv/predicates.md	Sun Dec 28 22:32:06 2025
***************
*** 612,618 ****
    (match_code "eq,ne,le,leu,gt,gtu,lt,ltu"))
  
  (define_predicate "comparison_swappable_operator"
!   (match_code "gtu,gt"))
  
  (define_predicate "ge_operator"
    (match_code "ge,geu"))
--- 612,618 ----
    (match_code "eq,ne,le,leu,gt,gtu,lt,ltu"))
  
  (define_predicate "comparison_swappable_operator"
!   (match_code "gtu,gt,geu"))
  
  (define_predicate "ge_operator"
    (match_code "ge,geu"))
diff -Nrcpad gcc-16-20251221/gcc/config/riscv/riscv-ext-corev.def gcc-16-20251228/gcc/config/riscv/riscv-ext-corev.def
*** gcc-16-20251221/gcc/config/riscv/riscv-ext-corev.def	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/config/riscv/riscv-ext-corev.def	Sun Dec 28 22:32:06 2025
*************** DEFINE_RISCV_EXT(
*** 37,43 ****
  DEFINE_RISCV_EXT(
    /* NAME */ xcvbi,
    /* UPPERCASE_NAME */ XCVBI,
!   /* FULL_NAME */ "xcvbi extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({}),
--- 37,43 ----
  DEFINE_RISCV_EXT(
    /* NAME */ xcvbi,
    /* UPPERCASE_NAME */ XCVBI,
!   /* FULL_NAME */ "Core-V immediate branch extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({}),
*************** DEFINE_RISCV_EXT(
*** 76,82 ****
  DEFINE_RISCV_EXT(
    /* NAME */ xcvsimd,
    /* UPPERCASE_NAME */ XCVSIMD,
!   /* FULL_NAME */ "xcvsimd extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({}),
--- 76,82 ----
  DEFINE_RISCV_EXT(
    /* NAME */ xcvsimd,
    /* UPPERCASE_NAME */ XCVSIMD,
!   /* FULL_NAME */ "Core-V SIMD extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({}),
diff -Nrcpad gcc-16-20251221/gcc/config/riscv/riscv-ext-mips.def gcc-16-20251228/gcc/config/riscv/riscv-ext-mips.def
*** gcc-16-20251221/gcc/config/riscv/riscv-ext-mips.def	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/config/riscv/riscv-ext-mips.def	Sun Dec 28 22:32:06 2025
*************** DEFINE_RISCV_EXT (
*** 37,43 ****
  DEFINE_RISCV_EXT (
    /* NAME.  */ xmipscbop,
    /* UPPERCASE_NAME.  */ XMIPSCBOP,
!   /* FULL_NAME.  */ "Mips Prefetch extension",
    /* DESC.  */ "",
    /* URL.  */ ,
    /* DEP_EXTS.  */ ({}),
--- 37,43 ----
  DEFINE_RISCV_EXT (
    /* NAME.  */ xmipscbop,
    /* UPPERCASE_NAME.  */ XMIPSCBOP,
!   /* FULL_NAME.  */ "Mips prefetch extension",
    /* DESC.  */ "",
    /* URL.  */ ,
    /* DEP_EXTS.  */ ({}),
diff -Nrcpad gcc-16-20251221/gcc/config/riscv/riscv-ext-sifive.def gcc-16-20251228/gcc/config/riscv/riscv-ext-sifive.def
*** gcc-16-20251221/gcc/config/riscv/riscv-ext-sifive.def	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/config/riscv/riscv-ext-sifive.def	Sun Dec 28 22:32:06 2025
*************** Format of DEFINE_RISCV_EXT, please refer
*** 24,30 ****
  DEFINE_RISCV_EXT(
    /* NAME */ xsfcease,
    /* UPPERCASE_NAME */ XSFCEASE,
!   /* FULL_NAME */ "xsfcease extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({}),
--- 24,30 ----
  DEFINE_RISCV_EXT(
    /* NAME */ xsfcease,
    /* UPPERCASE_NAME */ XSFCEASE,
!   /* FULL_NAME */ "SiFive CEASE instruction extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({}),
*************** DEFINE_RISCV_EXT(
*** 37,43 ****
  DEFINE_RISCV_EXT(
    /* NAME */ xsfvcp,
    /* UPPERCASE_NAME */ XSFVCP,
!   /* FULL_NAME */ "xsfvcp extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zve32x"}),
--- 37,43 ----
  DEFINE_RISCV_EXT(
    /* NAME */ xsfvcp,
    /* UPPERCASE_NAME */ XSFVCP,
!   /* FULL_NAME */ "SiFive VCIX vector coprocessor extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zve32x"}),
*************** DEFINE_RISCV_EXT(
*** 50,56 ****
  DEFINE_RISCV_EXT(
    /* NAME */ xsfvfnrclipxfqf,
    /* UPPERCASE_NAME */ XSFVFNRCLIPXFQF,
!   /* FULL_NAME */ "xsfvfnrclipxfqf extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({}),
--- 50,56 ----
  DEFINE_RISCV_EXT(
    /* NAME */ xsfvfnrclipxfqf,
    /* UPPERCASE_NAME */ XSFVFNRCLIPXFQF,
!   /* FULL_NAME */ "SiFive FP32-to-int8 ranged clip instructions",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({}),
*************** DEFINE_RISCV_EXT(
*** 63,69 ****
  DEFINE_RISCV_EXT(
    /* NAME */ xsfvqmaccdod,
    /* UPPERCASE_NAME */ XSFVQMACCDOD,
!   /* FULL_NAME */ "xsfvqmaccdod extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({}),
--- 63,69 ----
  DEFINE_RISCV_EXT(
    /* NAME */ xsfvqmaccdod,
    /* UPPERCASE_NAME */ XSFVQMACCDOD,
!   /* FULL_NAME */ "SiFive int8 matrix multiplication extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({}),
*************** DEFINE_RISCV_EXT(
*** 76,82 ****
  DEFINE_RISCV_EXT(
    /* NAME */ xsfvqmaccqoq,
    /* UPPERCASE_NAME */ XSFVQMACCQOQ,
!   /* FULL_NAME */ "xsfvqmaccqoq extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({}),
--- 76,82 ----
  DEFINE_RISCV_EXT(
    /* NAME */ xsfvqmaccqoq,
    /* UPPERCASE_NAME */ XSFVQMACCQOQ,
!   /* FULL_NAME */ "SiFive int8 matrix multiplication extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({}),
diff -Nrcpad gcc-16-20251221/gcc/config/riscv/riscv-ext-thead.def gcc-16-20251228/gcc/config/riscv/riscv-ext-thead.def
*** gcc-16-20251221/gcc/config/riscv/riscv-ext-thead.def	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/config/riscv/riscv-ext-thead.def	Sun Dec 28 22:32:06 2025
*************** DEFINE_RISCV_EXT(
*** 180,186 ****
  DEFINE_RISCV_EXT(
    /* NAME */ xtheadvector,
    /* UPPERCASE_NAME */ XTHEADVECTOR,
!   /* FULL_NAME */ "xtheadvector extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({}),
--- 180,186 ----
  DEFINE_RISCV_EXT(
    /* NAME */ xtheadvector,
    /* UPPERCASE_NAME */ XTHEADVECTOR,
!   /* FULL_NAME */ "T-head vector extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({}),
diff -Nrcpad gcc-16-20251221/gcc/config/riscv/riscv-ext.def gcc-16-20251228/gcc/config/riscv/riscv-ext.def
*** gcc-16-20251221/gcc/config/riscv/riscv-ext.def	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/config/riscv/riscv-ext.def	Sun Dec 28 22:32:06 2025
*************** DEFINE_RISCV_EXT(
*** 184,190 ****
  DEFINE_RISCV_EXT(
    /* NAME */ b,
    /* UPPERCASE_NAME */ RVB,
!   /* FULL_NAME */ "b extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zba", "zbb", "zbs"}),
--- 184,190 ----
  DEFINE_RISCV_EXT(
    /* NAME */ b,
    /* UPPERCASE_NAME */ RVB,
!   /* FULL_NAME */ "Standard extension for bit manipulation functions",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zba", "zbb", "zbs"}),
*************** DEFINE_RISCV_EXT(
*** 223,229 ****
  DEFINE_RISCV_EXT(
    /* NAME */ zic64b,
    /* UPPERCASE_NAME */ ZIC64B,
!   /* FULL_NAME */ "Cache block size isf 64 bytes",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({}),
--- 223,229 ----
  DEFINE_RISCV_EXT(
    /* NAME */ zic64b,
    /* UPPERCASE_NAME */ ZIC64B,
!   /* FULL_NAME */ "Cache block size is 64 bytes",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({}),
*************** DEFINE_RISCV_EXT(
*** 327,333 ****
  DEFINE_RISCV_EXT(
    /* NAME */ zicfilp,
    /* UPPERCASE_NAME */ ZICFILP,
!   /* FULL_NAME */ "zicfilp extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zicsr"}),
--- 327,333 ----
  DEFINE_RISCV_EXT(
    /* NAME */ zicfilp,
    /* UPPERCASE_NAME */ ZICFILP,
!   /* FULL_NAME */ "Control-flow integrity landing pad extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zicsr"}),
*************** DEFINE_RISCV_EXT(
*** 340,346 ****
  DEFINE_RISCV_EXT(
    /* NAME */ zicfiss,
    /* UPPERCASE_NAME */ ZICFISS,
!   /* FULL_NAME */ "zicfiss extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zicsr", "zimop"}),
--- 340,346 ----
  DEFINE_RISCV_EXT(
    /* NAME */ zicfiss,
    /* UPPERCASE_NAME */ ZICFISS,
!   /* FULL_NAME */ "Control-flow integrity shadow stack extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zicsr", "zimop"}),
*************** DEFINE_RISCV_EXT(
*** 444,450 ****
  DEFINE_RISCV_EXT(
    /* NAME */ zimop,
    /* UPPERCASE_NAME */ ZIMOP,
!   /* FULL_NAME */ "zimop extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({}),
--- 444,450 ----
  DEFINE_RISCV_EXT(
    /* NAME */ zimop,
    /* UPPERCASE_NAME */ ZIMOP,
!   /* FULL_NAME */ "May-be-operations extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({}),
*************** DEFINE_RISCV_EXT(
*** 457,463 ****
  DEFINE_RISCV_EXT(
    /* NAME */ zilsd,
    /* UPPERCASE_NAME */ ZILSD,
!   /* FULL_NAME */ "Load/Store pair instructions extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({}),
--- 457,463 ----
  DEFINE_RISCV_EXT(
    /* NAME */ zilsd,
    /* UPPERCASE_NAME */ ZILSD,
!   /* FULL_NAME */ "Load/store pair instructions extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({}),
*************** DEFINE_RISCV_EXT(
*** 509,515 ****
  DEFINE_RISCV_EXT(
    /* NAME */ zaamo,
    /* UPPERCASE_NAME */ ZAAMO,
!   /* FULL_NAME */ "zaamo extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({}),
--- 509,515 ----
  DEFINE_RISCV_EXT(
    /* NAME */ zaamo,
    /* UPPERCASE_NAME */ ZAAMO,
!   /* FULL_NAME */ "Atomic memory operations extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({}),
*************** DEFINE_RISCV_EXT(
*** 522,528 ****
  DEFINE_RISCV_EXT(
    /* NAME */ zabha,
    /* UPPERCASE_NAME */ ZABHA,
!   /* FULL_NAME */ "zabha extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zaamo"}),
--- 522,528 ----
  DEFINE_RISCV_EXT(
    /* NAME */ zabha,
    /* UPPERCASE_NAME */ ZABHA,
!   /* FULL_NAME */ "Byte and halfword atomic memory operations extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zaamo"}),
*************** DEFINE_RISCV_EXT(
*** 535,541 ****
  DEFINE_RISCV_EXT(
    /* NAME */ zacas,
    /* UPPERCASE_NAME */ ZACAS,
!   /* FULL_NAME */ "zacas extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zaamo"}),
--- 535,541 ----
  DEFINE_RISCV_EXT(
    /* NAME */ zacas,
    /* UPPERCASE_NAME */ ZACAS,
!   /* FULL_NAME */ "Atomic compare-and-swap instructions extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zaamo"}),
*************** DEFINE_RISCV_EXT(
*** 548,554 ****
  DEFINE_RISCV_EXT(
    /* NAME */ zalrsc,
    /* UPPERCASE_NAME */ ZALRSC,
!   /* FULL_NAME */ "zalrsc extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({}),
--- 548,554 ----
  DEFINE_RISCV_EXT(
    /* NAME */ zalrsc,
    /* UPPERCASE_NAME */ ZALRSC,
!   /* FULL_NAME */ "Load-reserved/store-conditional subset of the A extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({}),
*************** DEFINE_RISCV_EXT(
*** 574,582 ****
  DEFINE_RISCV_EXT(
    /* NAME */ zama16b,
    /* UPPERCASE_NAME */ ZAMA16B,
!   /* FULL_NAME */ "Zama16b extension",
!   /* DESC */ "Misaligned loads, stores, and AMOs to main memory regions that do"
! 	     " not cross a naturally aligned 16-byte boundary are atomic.",
    /* URL */ ,
    /* DEP_EXTS */ ({}),
    /* SUPPORTED_VERSIONS */ ({{1, 0}}),
--- 574,583 ----
  DEFINE_RISCV_EXT(
    /* NAME */ zama16b,
    /* UPPERCASE_NAME */ ZAMA16B,
!   /* FULL_NAME */ "Misaligned loads, stores, and AMOs that are fully"
! 		  " contained within a naturally-aligned 16-byte boundary"
! 		  " are atomic",
!   /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({}),
    /* SUPPORTED_VERSIONS */ ({{1, 0}}),
*************** DEFINE_RISCV_EXT(
*** 601,607 ****
  DEFINE_RISCV_EXT(
    /* NAME */ zfbfmin,
    /* UPPERCASE_NAME */ ZFBFMIN,
!   /* FULL_NAME */ "zfbfmin extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zfhmin"}),
--- 602,608 ----
  DEFINE_RISCV_EXT(
    /* NAME */ zfbfmin,
    /* UPPERCASE_NAME */ ZFBFMIN,
!   /* FULL_NAME */ "Minimal BF16 support extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zfhmin"}),
*************** DEFINE_RISCV_EXT(
*** 768,774 ****
  DEFINE_RISCV_EXT(
    /* NAME */ zcmop,
    /* UPPERCASE_NAME */ ZCMOP,
!   /* FULL_NAME */ "zcmop extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zca"}),
--- 769,775 ----
  DEFINE_RISCV_EXT(
    /* NAME */ zcmop,
    /* UPPERCASE_NAME */ ZCMOP,
!   /* FULL_NAME */ "Compressed may-be-operations extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zca"}),
*************** DEFINE_RISCV_EXT(
*** 1067,1073 ****
  DEFINE_RISCV_EXT(
    /* NAME */ zvbc,
    /* UPPERCASE_NAME */ ZVBC,
!   /* FULL_NAME */ "Vector carryless multiplication extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zve64x"}),
--- 1068,1074 ----
  DEFINE_RISCV_EXT(
    /* NAME */ zvbc,
    /* UPPERCASE_NAME */ ZVBC,
!   /* FULL_NAME */ "Vector carry-less multiplication extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zve64x"}),
*************** DEFINE_RISCV_EXT(
*** 1158,1164 ****
  DEFINE_RISCV_EXT(
    /* NAME */ zvfbfwma,
    /* UPPERCASE_NAME */ ZVFBFWMA,
!   /* FULL_NAME */ "zvfbfwma extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zvfbfmin", "zfbfmin"}),
--- 1159,1165 ----
  DEFINE_RISCV_EXT(
    /* NAME */ zvfbfwma,
    /* UPPERCASE_NAME */ ZVFBFWMA,
!   /* FULL_NAME */ "Vector BF16 widening multiply/add extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zvfbfmin", "zfbfmin"}),
*************** DEFINE_RISCV_EXT(
*** 1236,1242 ****
  DEFINE_RISCV_EXT(
    /* NAME */ zvknc,
    /* UPPERCASE_NAME */ ZVKNC,
!   /* FULL_NAME */ "Vector NIST Algorithm Suite with carryless multiply extension, @samp{zvknc}",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zvkn", "zvbc"}),
--- 1237,1243 ----
  DEFINE_RISCV_EXT(
    /* NAME */ zvknc,
    /* UPPERCASE_NAME */ ZVKNC,
!   /* FULL_NAME */ "Vector NIST Algorithm Suite with carry-less multiply extension, @samp{zvknc}",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zvkn", "zvbc"}),
*************** DEFINE_RISCV_EXT(
*** 1314,1320 ****
  DEFINE_RISCV_EXT(
    /* NAME */ zvksc,
    /* UPPERCASE_NAME */ ZVKSC,
!   /* FULL_NAME */ "Vector ShangMi algorithm suite with carryless multiplication extension,",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zvks", "zvbc"}),
--- 1315,1321 ----
  DEFINE_RISCV_EXT(
    /* NAME */ zvksc,
    /* UPPERCASE_NAME */ ZVKSC,
!   /* FULL_NAME */ "Vector ShangMi algorithm suite with carry-less multiplication extension,",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zvks", "zvbc"}),
*************** DEFINE_RISCV_EXT(
*** 1327,1333 ****
  DEFINE_RISCV_EXT(
    /* NAME */ zvksed,
    /* UPPERCASE_NAME */ ZVKSED,
!   /* FULL_NAME */ "Vector SM4 Block Cipher extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zve32x"}),
--- 1328,1334 ----
  DEFINE_RISCV_EXT(
    /* NAME */ zvksed,
    /* UPPERCASE_NAME */ ZVKSED,
!   /* FULL_NAME */ "Vector SM4 block cipher extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zve32x"}),
*************** DEFINE_RISCV_EXT(
*** 1340,1346 ****
  DEFINE_RISCV_EXT(
    /* NAME */ zvksg,
    /* UPPERCASE_NAME */ ZVKSG,
!   /* FULL_NAME */ "Vector ShangMi algorithm suite with GCM extension, @samp{zvksg} will expand",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zvks", "zvkg"}),
--- 1341,1347 ----
  DEFINE_RISCV_EXT(
    /* NAME */ zvksg,
    /* UPPERCASE_NAME */ ZVKSG,
!   /* FULL_NAME */ "Vector ShangMi algorithm suite with GCM extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zvks", "zvkg"}),
*************** DEFINE_RISCV_EXT(
*** 1353,1359 ****
  DEFINE_RISCV_EXT(
    /* NAME */ zvksh,
    /* UPPERCASE_NAME */ ZVKSH,
!   /* FULL_NAME */ "Vector SM3 Secure Hash extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zve32x"}),
--- 1354,1360 ----
  DEFINE_RISCV_EXT(
    /* NAME */ zvksh,
    /* UPPERCASE_NAME */ ZVKSH,
!   /* FULL_NAME */ "Vector SM3 secure hash extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zve32x"}),
*************** DEFINE_RISCV_EXT(
*** 1405,1411 ****
  DEFINE_RISCV_EXT(
    /* NAME */ zvl16384b,
    /* UPPERCASE_NAME */ ZVL16384B,
!   /* FULL_NAME */ "zvl16384b extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zvl8192b"}),
--- 1406,1412 ----
  DEFINE_RISCV_EXT(
    /* NAME */ zvl16384b,
    /* UPPERCASE_NAME */ ZVL16384B,
!   /* FULL_NAME */ "Minimum vector length standard extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zvl8192b"}),
*************** DEFINE_RISCV_EXT(
*** 1444,1450 ****
  DEFINE_RISCV_EXT(
    /* NAME */ zvl32768b,
    /* UPPERCASE_NAME */ ZVL32768B,
!   /* FULL_NAME */ "zvl32768b extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zvl16384b"}),
--- 1445,1451 ----
  DEFINE_RISCV_EXT(
    /* NAME */ zvl32768b,
    /* UPPERCASE_NAME */ ZVL32768B,
!   /* FULL_NAME */ "Minimum vector length standard extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zvl16384b"}),
*************** DEFINE_RISCV_EXT(
*** 1509,1515 ****
  DEFINE_RISCV_EXT(
    /* NAME */ zvl65536b,
    /* UPPERCASE_NAME */ ZVL65536B,
!   /* FULL_NAME */ "zvl65536b extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zvl32768b"}),
--- 1510,1516 ----
  DEFINE_RISCV_EXT(
    /* NAME */ zvl65536b,
    /* UPPERCASE_NAME */ ZVL65536B,
!   /* FULL_NAME */ "Minimum vector length standard extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zvl32768b"}),
*************** DEFINE_RISCV_EXT(
*** 1522,1528 ****
  DEFINE_RISCV_EXT(
    /* NAME */ zvl8192b,
    /* UPPERCASE_NAME */ ZVL8192B,
!   /* FULL_NAME */ "zvl8192b extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zvl4096b"}),
--- 1523,1529 ----
  DEFINE_RISCV_EXT(
    /* NAME */ zvl8192b,
    /* UPPERCASE_NAME */ ZVL8192B,
!   /* FULL_NAME */ "Minimum vector length standard extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zvl4096b"}),
*************** DEFINE_RISCV_EXT(
*** 1561,1567 ****
  DEFINE_RISCV_EXT(
    /* NAME */ sdtrig,
    /* UPPERCASE_NAME */ SDTRIG,
!   /* FULL_NAME */ "sdtrig extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zicsr"}),
--- 1562,1568 ----
  DEFINE_RISCV_EXT(
    /* NAME */ sdtrig,
    /* UPPERCASE_NAME */ SDTRIG,
!   /* FULL_NAME */ "Debug triggers extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zicsr"}),
*************** DEFINE_RISCV_EXT(
*** 1652,1658 ****
  DEFINE_RISCV_EXT(
    /* NAME */ shvstvecd,
    /* UPPERCASE_NAME */ SHVSTVECD,
!   /* FULL_NAME */ "The vstvec register supports Direct mode",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"h"}),
--- 1653,1659 ----
  DEFINE_RISCV_EXT(
    /* NAME */ shvstvecd,
    /* UPPERCASE_NAME */ SHVSTVECD,
!   /* FULL_NAME */ "The vstvec register supports direct mode",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"h"}),
*************** DEFINE_RISCV_EXT(
*** 1704,1710 ****
  DEFINE_RISCV_EXT(
    /* NAME */ smcsrind,
    /* UPPERCASE_NAME */ SMCSRIND,
!   /* FULL_NAME */ "Machine-Level Indirect CSR Access",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zicsr", "sscsrind"}),
--- 1705,1711 ----
  DEFINE_RISCV_EXT(
    /* NAME */ smcsrind,
    /* UPPERCASE_NAME */ SMCSRIND,
!   /* FULL_NAME */ "Machine-level indirect CSR access",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zicsr", "sscsrind"}),
*************** DEFINE_RISCV_EXT(
*** 1717,1723 ****
  DEFINE_RISCV_EXT(
    /* NAME */ smepmp,
    /* UPPERCASE_NAME */ SMEPMP,
!   /* FULL_NAME */ "PMP Enhancements for memory access and execution prevention on Machine mode",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zicsr"}),
--- 1718,1724 ----
  DEFINE_RISCV_EXT(
    /* NAME */ smepmp,
    /* UPPERCASE_NAME */ SMEPMP,
!   /* FULL_NAME */ "PMP enhancements for memory access and execution prevention on machine mode",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zicsr"}),
*************** DEFINE_RISCV_EXT(
*** 1730,1736 ****
  DEFINE_RISCV_EXT(
    /* NAME */ smmpm,
    /* UPPERCASE_NAME */ SMMPM,
!   /* FULL_NAME */ "smmpm extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zicsr"}),
--- 1731,1737 ----
  DEFINE_RISCV_EXT(
    /* NAME */ smmpm,
    /* UPPERCASE_NAME */ SMMPM,
!   /* FULL_NAME */ "Supervisor-mode pointer masking extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zicsr"}),
*************** DEFINE_RISCV_EXT(
*** 1743,1749 ****
  DEFINE_RISCV_EXT(
    /* NAME */ smnpm,
    /* UPPERCASE_NAME */ SMNPM,
!   /* FULL_NAME */ "smnpm extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zicsr"}),
--- 1744,1750 ----
  DEFINE_RISCV_EXT(
    /* NAME */ smnpm,
    /* UPPERCASE_NAME */ SMNPM,
!   /* FULL_NAME */ "Supervisor-mode pointer masking extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zicsr"}),
*************** DEFINE_RISCV_EXT(
*** 1782,1788 ****
  DEFINE_RISCV_EXT(
    /* NAME */ smdbltrp,
    /* UPPERCASE_NAME */ SMDBLTRP,
!   /* FULL_NAME */ "Double Trap Extensions",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zicsr"}),
--- 1783,1789 ----
  DEFINE_RISCV_EXT(
    /* NAME */ smdbltrp,
    /* UPPERCASE_NAME */ SMDBLTRP,
!   /* FULL_NAME */ "Double trap extensions",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zicsr"}),
*************** DEFINE_RISCV_EXT(
*** 1795,1801 ****
  DEFINE_RISCV_EXT(
    /* NAME */ ssaia,
    /* UPPERCASE_NAME */ SSAIA,
!   /* FULL_NAME */ "Advanced interrupt architecture extension for supervisor-mode",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zicsr"}),
--- 1796,1802 ----
  DEFINE_RISCV_EXT(
    /* NAME */ ssaia,
    /* UPPERCASE_NAME */ SSAIA,
!   /* FULL_NAME */ "Advanced interrupt architecture extension for supervisor mode",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zicsr"}),
*************** DEFINE_RISCV_EXT(
*** 1821,1827 ****
  DEFINE_RISCV_EXT(
    /* NAME */ sscofpmf,
    /* UPPERCASE_NAME */ SSCOFPMF,
!   /* FULL_NAME */ "Count overflow & filtering extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zicsr"}),
--- 1822,1828 ----
  DEFINE_RISCV_EXT(
    /* NAME */ sscofpmf,
    /* UPPERCASE_NAME */ SSCOFPMF,
!   /* FULL_NAME */ "Count overflow and filtering extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zicsr"}),
*************** DEFINE_RISCV_EXT(
*** 1847,1853 ****
  DEFINE_RISCV_EXT(
    /* NAME */ sscsrind,
    /* UPPERCASE_NAME */ SSCSRIND,
!   /* FULL_NAME */ "Supervisor-Level Indirect CSR Access",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zicsr"}),
--- 1848,1854 ----
  DEFINE_RISCV_EXT(
    /* NAME */ sscsrind,
    /* UPPERCASE_NAME */ SSCSRIND,
!   /* FULL_NAME */ "Supervisor-mode indirect CSR access",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zicsr"}),
*************** DEFINE_RISCV_EXT(
*** 1860,1866 ****
  DEFINE_RISCV_EXT(
    /* NAME */ ssnpm,
    /* UPPERCASE_NAME */ SSNPM,
!   /* FULL_NAME */ "ssnpm extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zicsr"}),
--- 1861,1867 ----
  DEFINE_RISCV_EXT(
    /* NAME */ ssnpm,
    /* UPPERCASE_NAME */ SSNPM,
!   /* FULL_NAME */ "Supervisor-mode pointer masking extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zicsr"}),
*************** DEFINE_RISCV_EXT(
*** 1873,1879 ****
  DEFINE_RISCV_EXT(
    /* NAME */ sspm,
    /* UPPERCASE_NAME */ SSPM,
!   /* FULL_NAME */ "sspm extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({}),
--- 1874,1880 ----
  DEFINE_RISCV_EXT(
    /* NAME */ sspm,
    /* UPPERCASE_NAME */ SSPM,
!   /* FULL_NAME */ "Supervisor-mode pointer masking extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({}),
*************** DEFINE_RISCV_EXT(
*** 1886,1892 ****
  DEFINE_RISCV_EXT(
    /* NAME */ ssstateen,
    /* UPPERCASE_NAME */ SSSTATEEN,
!   /* FULL_NAME */ "State-enable extension for supervisor-mode",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zicsr"}),
--- 1887,1893 ----
  DEFINE_RISCV_EXT(
    /* NAME */ ssstateen,
    /* UPPERCASE_NAME */ SSSTATEEN,
!   /* FULL_NAME */ "Supervisor-mode state-enable extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zicsr"}),
*************** DEFINE_RISCV_EXT(
*** 1925,1931 ****
  DEFINE_RISCV_EXT(
    /* NAME */ sstvecd,
    /* UPPERCASE_NAME */ SSTVECD,
!   /* FULL_NAME */ "Stvec supports Direct mode",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zicsr"}),
--- 1926,1932 ----
  DEFINE_RISCV_EXT(
    /* NAME */ sstvecd,
    /* UPPERCASE_NAME */ SSTVECD,
!   /* FULL_NAME */ "Stvec supports direct mode",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zicsr"}),
*************** DEFINE_RISCV_EXT(
*** 1938,1944 ****
  DEFINE_RISCV_EXT(
    /* NAME */ ssstrict,
    /* UPPERCASE_NAME */ SSSTRICT,
!   /* FULL_NAME */ "ssstrict extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zicsr"}),
--- 1939,1947 ----
  DEFINE_RISCV_EXT(
    /* NAME */ ssstrict,
    /* UPPERCASE_NAME */ SSSTRICT,
!   /* FULL_NAME */ "Unimplemented reserved encodings raise illegal "
! 		  "instruction exceptions and no non-conforming extensions "
! 		  "are present",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zicsr"}),
*************** DEFINE_RISCV_EXT(
*** 1951,1957 ****
  DEFINE_RISCV_EXT(
    /* NAME */ ssdbltrp,
    /* UPPERCASE_NAME */ SSDBLTRP,
!   /* FULL_NAME */ "Double Trap Extensions",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zicsr"}),
--- 1954,1960 ----
  DEFINE_RISCV_EXT(
    /* NAME */ ssdbltrp,
    /* UPPERCASE_NAME */ SSDBLTRP,
!   /* FULL_NAME */ "Double trap extensions",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zicsr"}),
*************** DEFINE_RISCV_EXT(
*** 1977,1983 ****
  DEFINE_RISCV_EXT(
    /* NAME */ supm,
    /* UPPERCASE_NAME */ SUPM,
!   /* FULL_NAME */ "supm extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({}),
--- 1980,1986 ----
  DEFINE_RISCV_EXT(
    /* NAME */ supm,
    /* UPPERCASE_NAME */ SUPM,
!   /* FULL_NAME */ "User-mode pointer masking extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({}),
*************** DEFINE_RISCV_EXT(
*** 2029,2035 ****
  DEFINE_RISCV_EXT(
    /* NAME */ svvptc,
    /* UPPERCASE_NAME */ SVVPTC,
!   /* FULL_NAME */ "svvptc extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({}),
--- 2032,2039 ----
  DEFINE_RISCV_EXT(
    /* NAME */ svvptc,
    /* UPPERCASE_NAME */ SVVPTC,
!   /* FULL_NAME */ "Extension for obviating memory-management instructions "
! 		  "after marking PTEs valid",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({}),
*************** DEFINE_RISCV_EXT(
*** 2042,2048 ****
  DEFINE_RISCV_EXT(
    /* NAME */ svadu,
    /* UPPERCASE_NAME */ SVADU,
!   /* FULL_NAME */ "Hardware Updating of A/D Bits extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zicsr"}),
--- 2046,2052 ----
  DEFINE_RISCV_EXT(
    /* NAME */ svadu,
    /* UPPERCASE_NAME */ SVADU,
!   /* FULL_NAME */ "Hardware updating of A/D bits extension",
    /* DESC */ "",
    /* URL */ ,
    /* DEP_EXTS */ ({"zicsr"}),
diff -Nrcpad gcc-16-20251221/gcc/config/riscv/riscv-v.cc gcc-16-20251228/gcc/config/riscv/riscv-v.cc
*** gcc-16-20251221/gcc/config/riscv/riscv-v.cc	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/config/riscv/riscv-v.cc	Sun Dec 28 22:32:06 2025
*************** get_swapped_cmp_rtx_code (rtx_code code)
*** 6041,6046 ****
--- 6041,6048 ----
        return LTU;
      case GT:
        return LT;
+     case GEU:
+       return LEU;
      default:
        gcc_unreachable ();
      }
diff -Nrcpad gcc-16-20251221/gcc/config/riscv/riscv.cc gcc-16-20251228/gcc/config/riscv/riscv.cc
*** gcc-16-20251221/gcc/config/riscv/riscv.cc	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/config/riscv/riscv.cc	Sun Dec 28 22:32:06 2025
*************** riscv_expand_op (enum rtx_code code, mac
*** 3497,3510 ****
  /* Expand mult operation with constant integer, multiplicand also used as a
   * temporary register.  */
  
! static void
  riscv_expand_mult_with_const_int (machine_mode mode, rtx dest, rtx multiplicand,
  				  HOST_WIDE_INT multiplier)
  {
    if (multiplier == 0)
      {
        riscv_emit_move (dest, GEN_INT (0));
!       return;
      }
  
    bool neg_p = multiplier < 0;
--- 3497,3510 ----
  /* Expand mult operation with constant integer, multiplicand also used as a
   * temporary register.  */
  
! static bool
  riscv_expand_mult_with_const_int (machine_mode mode, rtx dest, rtx multiplicand,
  				  HOST_WIDE_INT multiplier)
  {
    if (multiplier == 0)
      {
        riscv_emit_move (dest, GEN_INT (0));
!       return false;
      }
  
    bool neg_p = multiplier < 0;
*************** riscv_expand_mult_with_const_int (machin
*** 3515,3521 ****
        if (neg_p)
  	riscv_expand_op (NEG, mode, dest, multiplicand, NULL_RTX);
        else
! 	riscv_emit_move (dest, multiplicand);
      }
    else
      {
--- 3515,3527 ----
        if (neg_p)
  	riscv_expand_op (NEG, mode, dest, multiplicand, NULL_RTX);
        else
! 	{
! 	  riscv_emit_move (dest, multiplicand);
! 
! 	  /* Signal to our caller that it should try to optimize away
! 	     the copy.  */
! 	  return true;
! 	}
      }
    else
      {
*************** riscv_expand_mult_with_const_int (machin
*** 3595,3604 ****
  	  riscv_expand_op (MULT, mode, dest, dest, multiplicand);
  	}
      }
  }
  
! /* Analyze src and emit const_poly_int mov sequence.  */
  
  void
  riscv_legitimize_poly_move (machine_mode mode, rtx dest, rtx tmp, rtx src)
  {
--- 3601,3615 ----
  	  riscv_expand_op (MULT, mode, dest, dest, multiplicand);
  	}
      }
+   return false;
  }
  
! /* Analyze src and emit const_poly_int mov sequence. 
  
+    Essentially we want to generate (set (dest) (src)), where SRC is
+    a poly_int.  We may need TMP as a scratch register.  We assume TMP
+    is truely a scratch register and need not have any particular value
+    after the sequence.  */
  void
  riscv_legitimize_poly_move (machine_mode mode, rtx dest, rtx tmp, rtx src)
  {
*************** riscv_legitimize_poly_move (machine_mode
*** 3655,3662 ****
      riscv_expand_op (LSHIFTRT, mode, tmp, tmp,
  		     gen_int_mode (exact_log2 (div_factor), QImode));
  
!   riscv_expand_mult_with_const_int (mode, dest, tmp,
! 				    factor / (vlenb / div_factor));
    HOST_WIDE_INT constant = offset - factor;
  
    if (constant == 0)
--- 3666,3707 ----
      riscv_expand_op (LSHIFTRT, mode, tmp, tmp,
  		     gen_int_mode (exact_log2 (div_factor), QImode));
  
!   bool opt_seq
!     = riscv_expand_mult_with_const_int (mode, dest, tmp,
! 					factor / (vlenb / div_factor));
! 
!   /* Potentially try to optimize the sequence we've generated so far.
!      Essentially when OPT_SEQ is true, we should have a simple reg->reg
!      copy from TMP to DEST as the last insn in the sequence.  Try to
!      back up one real insn and adjust it in that case.
! 
!      This is important for frame setup/teardown with RVV since we can't
!      propagate away the copy as the copy is not frame related, but the
!      insn creating or destroying the frame is frame related.  */
!   if (opt_seq)
!     {
!       rtx_insn *insn = get_last_insn ();
!       rtx set = single_set (insn);
! 
!       /* Verify the last insn in the chain is a simple assignment from
! 	 DEST to TMP.  */
!       gcc_assert (set);
!       gcc_assert (SET_SRC (set) == tmp);
!       gcc_assert (SET_DEST (set) == dest);
!  
!       /* Now back up one real insn and see if it sets TMP, if so adjust
! 	 it so that it sets DEST.  */
!       rtx_insn *insn2 = prev_nonnote_nondebug_insn (insn);
!       rtx set2 = insn2 ? single_set (insn2) : NULL_RTX;
!       if (set2 && SET_DEST (set2) == tmp)
! 	{
! 	  SET_DEST (set2) = dest;
! 	  /* Turn the prior insn into a NOP.  But don't delete.  */
! 	  SET_SRC (set) = SET_DEST (set);
! 	}
!  
!     }
! 
    HOST_WIDE_INT constant = offset - factor;
  
    if (constant == 0)
diff -Nrcpad gcc-16-20251221/gcc/config/riscv/riscv.md gcc-16-20251228/gcc/config/riscv/riscv.md
*** gcc-16-20251221/gcc/config/riscv/riscv.md	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/config/riscv/riscv.md	Sun Dec 28 22:32:06 2025
***************
*** 4727,4733 ****
    [(match_operand:ANYI 0 "register_operand")
     (match_operand:ANYI 1 "register_operand")
     (match_operand:ANYI 2 "register_operand")]
!   ""
    {
      riscv_expand_usmul (operands[0], operands[1], operands[2]);
      DONE;
--- 4727,4733 ----
    [(match_operand:ANYI 0 "register_operand")
     (match_operand:ANYI 1 "register_operand")
     (match_operand:ANYI 2 "register_operand")]
!   "TARGET_ZMMUL || TARGET_MUL"
    {
      riscv_expand_usmul (operands[0], operands[1], operands[2]);
      DONE;
diff -Nrcpad gcc-16-20251221/gcc/config/riscv/riscv.opt gcc-16-20251228/gcc/config/riscv/riscv.opt
*** gcc-16-20251221/gcc/config/riscv/riscv.opt	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/config/riscv/riscv.opt	Sun Dec 28 22:32:06 2025
*************** Target RejectNegative Joined UInteger Va
*** 34,40 ****
  -mbranch-cost=N	Set the cost of branches to roughly N instructions.
  
  mplt
! Target Alias(fplt)
  This option is deprecated; use -fplt or -fno-plt instead.
  
  mabi=
--- 34,40 ----
  -mbranch-cost=N	Set the cost of branches to roughly N instructions.
  
  mplt
! Target Alias(fplt) Undocumented
  This option is deprecated; use -fplt or -fno-plt instead.
  
  mabi=
*************** Target RejectNegative Joined Var(riscv_c
*** 107,113 ****
  -mcpu=PROCESSOR	Use architecture of and optimize the output for PROCESSOR.
  
  msmall-data-limit=
! Target Joined UInteger Var(g_switch_value) Init(8)
  -msmall-data-limit=N	Put global and static data smaller than <number> bytes into a special section (on some targets).
  
  msave-restore
--- 107,113 ----
  -mcpu=PROCESSOR	Use architecture of and optimize the output for PROCESSOR.
  
  msmall-data-limit=
! Target Joined UInteger Var(g_switch_value) Init(8) RejectNegative
  -msmall-data-limit=N	Put global and static data smaller than <number> bytes into a special section (on some targets).
  
  msave-restore
diff -Nrcpad gcc-16-20251221/gcc/config/riscv/riscv.opt.urls gcc-16-20251228/gcc/config/riscv/riscv.opt.urls
*** gcc-16-20251221/gcc/config/riscv/riscv.opt.urls	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/config/riscv/riscv.opt.urls	Sun Dec 28 22:32:06 2025
*************** UrlSuffix(gcc/RISC-V-Options.html#index-
*** 53,59 ****
  mvector-strict-align
  UrlSuffix(gcc/RISC-V-Options.html#index-mvector-strict-align)
  
! ; skipping UrlSuffix for 'mexplicit-relocs' due to finding no URLs
  
  mrelax
  UrlSuffix(gcc/RISC-V-Options.html#index-mrelax-6)
--- 53,60 ----
  mvector-strict-align
  UrlSuffix(gcc/RISC-V-Options.html#index-mvector-strict-align)
  
! mexplicit-relocs
! UrlSuffix(gcc/RISC-V-Options.html#index-mexplicit-relocs-3)
  
  mrelax
  UrlSuffix(gcc/RISC-V-Options.html#index-mrelax-6)
*************** UrlSuffix(gcc/RISC-V-Options.html#index-
*** 61,67 ****
  mcsr-check
  UrlSuffix(gcc/RISC-V-Options.html#index-mcsr-check)
  
! ; skipping UrlSuffix for 'momit-leaf-frame-pointer' due to finding no URLs
  
  mriscv-attribute
  UrlSuffix(gcc/RISC-V-Options.html#index-mriscv-attribute)
--- 62,69 ----
  mcsr-check
  UrlSuffix(gcc/RISC-V-Options.html#index-mcsr-check)
  
! momit-leaf-frame-pointer
! UrlSuffix(gcc/RISC-V-Options.html#index-momit-leaf-frame-pointer-2)
  
  mriscv-attribute
  UrlSuffix(gcc/RISC-V-Options.html#index-mriscv-attribute)
*************** UrlSuffix(gcc/RISC-V-Options.html#index-
*** 96,105 ****
  minline-strlen
  UrlSuffix(gcc/RISC-V-Options.html#index-minline-strlen)
  
! ; skipping UrlSuffix for 'mmax-vectorization' due to finding no URLs
  
  ; skipping UrlSuffix for 'mtls-dialect=' due to finding no URLs
  
  mfence-tso
  UrlSuffix(gcc/RISC-V-Options.html#index-mfence-tso)
  
--- 98,123 ----
  minline-strlen
  UrlSuffix(gcc/RISC-V-Options.html#index-minline-strlen)
  
! mrvv-max-lmul=
! UrlSuffix(gcc/RISC-V-Options.html#index-mrvv-max-lmul)
! 
! madjust-lmul-cost
! UrlSuffix(gcc/RISC-V-Options.html#index-madjust-lmul-cost)
! 
! mmax-vectorization
! UrlSuffix(gcc/RISC-V-Options.html#index-mmax-vectorization-1)
! 
! mstringop-strategy=
! UrlSuffix(gcc/RISC-V-Options.html#index-mstringop-strategy)
! 
! mrvv-vector-bits=
! UrlSuffix(gcc/RISC-V-Options.html#index-mrvv-vector-bits)
  
  ; skipping UrlSuffix for 'mtls-dialect=' due to finding no URLs
  
  mfence-tso
  UrlSuffix(gcc/RISC-V-Options.html#index-mfence-tso)
  
+ mautovec-segment
+ UrlSuffix(gcc/RISC-V-Options.html#index-mautovec-segment)
+ 
diff -Nrcpad gcc-16-20251221/gcc/config/riscv/spacemit-x60.md gcc-16-20251228/gcc/config/riscv/spacemit-x60.md
*** gcc-16-20251221/gcc/config/riscv/spacemit-x60.md	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/config/riscv/spacemit-x60.md	Sun Dec 28 22:32:06 2025
***************
*** 93,99 ****
  	    (eq_attr "mode" "DI")))
    "spacemit_x60_alu")
  
! (define_insn_reservation "spacemit_x60_clmul" 5
    (and (eq_attr "tune" "spacemit_x60")
         (eq_attr "type" "clmul"))
    "spacemit_x60_alu")
--- 93,99 ----
  	    (eq_attr "mode" "DI")))
    "spacemit_x60_alu")
  
! (define_insn_reservation "spacemit_x60_clmul" 3
    (and (eq_attr "tune" "spacemit_x60")
         (eq_attr "type" "clmul"))
    "spacemit_x60_alu")
diff -Nrcpad gcc-16-20251221/gcc/config/riscv/sync.md gcc-16-20251228/gcc/config/riscv/sync.md
*** gcc-16-20251221/gcc/config/riscv/sync.md	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/config/riscv/sync.md	Sun Dec 28 22:32:06 2025
***************
*** 210,217 ****
  		     (match_operand:SI 2 "arith_operand" "rI")) ;; value for op
  	   (match_operand:SI 3 "const_int_operand")]		   ;; model
  	 UNSPEC_SYNC_OLD_OP_SUBWORD))
!     (match_operand:SI 4 "arith_operand" "rI")		   ;; mask
!     (match_operand:SI 5 "arith_operand" "rI")		   ;; not_mask
      (clobber (match_scratch:SI 6 "=&r"))			   ;; tmp_1
      (clobber (match_scratch:SI 7 "=&r"))]			   ;; tmp_2
    "TARGET_ZALRSC && TARGET_INLINE_SUBWORD_ATOMIC"
--- 210,217 ----
  		     (match_operand:SI 2 "arith_operand" "rI")) ;; value for op
  	   (match_operand:SI 3 "const_int_operand")]		   ;; model
  	 UNSPEC_SYNC_OLD_OP_SUBWORD))
!     (use (match_operand:SI 4 "arith_operand" "rI"))	   ;; mask
!     (use (match_operand:SI 5 "arith_operand" "rI"))	   ;; not_mask
      (clobber (match_scratch:SI 6 "=&r"))			   ;; tmp_1
      (clobber (match_scratch:SI 7 "=&r"))]			   ;; tmp_2
    "TARGET_ZALRSC && TARGET_INLINE_SUBWORD_ATOMIC"
***************
*** 277,284 ****
  			   (match_operand:SI 2 "arith_operand" "rI")))    ;; value for op
  	   (match_operand:SI 3 "const_int_operand")]			  ;; mask
  	 UNSPEC_SYNC_OLD_OP_SUBWORD))
!     (match_operand:SI 4 "arith_operand" "rI")				  ;; mask
!     (match_operand:SI 5 "arith_operand" "rI")				  ;; not_mask
      (clobber (match_scratch:SI 6 "=&r"))				  ;; tmp_1
      (clobber (match_scratch:SI 7 "=&r"))]				  ;; tmp_2
    "TARGET_ZALRSC && TARGET_INLINE_SUBWORD_ATOMIC"
--- 277,284 ----
  			   (match_operand:SI 2 "arith_operand" "rI")))    ;; value for op
  	   (match_operand:SI 3 "const_int_operand")]			  ;; mask
  	 UNSPEC_SYNC_OLD_OP_SUBWORD))
!     (use (match_operand:SI 4 "arith_operand" "rI"))		  ;; mask
!     (use (match_operand:SI 5 "arith_operand" "rI"))		  ;; not_mask
      (clobber (match_scratch:SI 6 "=&r"))				  ;; tmp_1
      (clobber (match_scratch:SI 7 "=&r"))]				  ;; tmp_2
    "TARGET_ZALRSC && TARGET_INLINE_SUBWORD_ATOMIC"
***************
*** 512,518 ****
  	  [(match_operand:SI 2 "arith_operand" "rI")	 ;; value
  	   (match_operand:SI 3 "const_int_operand")]	 ;; model
        UNSPEC_SYNC_EXCHANGE_SUBWORD))
!     (match_operand:SI 4 "arith_operand" "rI")	 ;; not_mask
      (clobber (match_scratch:SI 5 "=&r"))]		 ;; tmp_1
    "TARGET_ZALRSC && TARGET_INLINE_SUBWORD_ATOMIC"
    {
--- 512,518 ----
  	  [(match_operand:SI 2 "arith_operand" "rI")	 ;; value
  	   (match_operand:SI 3 "const_int_operand")]	 ;; model
        UNSPEC_SYNC_EXCHANGE_SUBWORD))
!     (use (match_operand:SI 4 "arith_operand" "rI"))	 ;; not_mask
      (clobber (match_scratch:SI 5 "=&r"))]		 ;; tmp_1
    "TARGET_ZALRSC && TARGET_INLINE_SUBWORD_ATOMIC"
    {
***************
*** 785,794 ****
  	(unspec_volatile:SI [(match_operand:SI 2 "reg_or_0_operand" "rJ")  ;; expected value
  			     (match_operand:SI 3 "arith_operand" "rI")] ;; desired value
  	 UNSPEC_COMPARE_AND_SWAP_SUBWORD))
! 	(match_operand:SI 4 "const_int_operand")			   ;; model
! 	(match_operand:SI 5 "arith_operand" "rI")			   ;; mask
! 	(match_operand:SI 6 "arith_operand" "rI")			   ;; not_mask
! 	(clobber (match_scratch:SI 7 "=&r"))]				   ;; tmp_1
    "TARGET_ZALRSC && TARGET_INLINE_SUBWORD_ATOMIC"
    {
      return "1:\;"
--- 785,794 ----
  	(unspec_volatile:SI [(match_operand:SI 2 "reg_or_0_operand" "rJ")  ;; expected value
  			     (match_operand:SI 3 "arith_operand" "rI")] ;; desired value
  	 UNSPEC_COMPARE_AND_SWAP_SUBWORD))
! 	(match_operand:SI 4 "const_int_operand")		;; model
! 	(use (match_operand:SI 5 "arith_operand" "rI"))		;; mask
! 	(use (match_operand:SI 6 "arith_operand" "rI"))		;; not_mask
! 	(clobber (match_scratch:SI 7 "=&r"))]			;; tmp_1
    "TARGET_ZALRSC && TARGET_INLINE_SUBWORD_ATOMIC"
    {
      return "1:\;"
diff -Nrcpad gcc-16-20251221/gcc/config/sol2.h gcc-16-20251228/gcc/config/sol2.h
*** gcc-16-20251221/gcc/config/sol2.h	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/config/sol2.h	Sun Dec 28 22:32:06 2025
*************** along with GCC; see the file COPYING3.
*** 357,369 ****
  #define LINK_CLEARCAP_SPEC ""
  #endif
  
  #undef  LINK_SPEC
  #define LINK_SPEC \
    "%{h*} %{v:-V} \
     %{!shared:%{!static:%{rdynamic: " RDYNAMIC_SPEC "}}} \
     %{static:-dn -Bstatic} \
     %{shared:-G -dy %{!mimpure-text:-z text}} " \
!    LINK_LIBGCC_MAPFILE_SPEC LINK_CLEARCAP_SPEC " \
     %{symbolic:-Bsymbolic -G -dy -z text} \
     %(link_arch) \
     %{Qy:} %{!Qn:-Qy}"
--- 357,385 ----
  #define LINK_CLEARCAP_SPEC ""
  #endif
  
+ /* Convenience alias for Solaris CTF generation.  */
+ #ifdef HAVE_LD_CTF
+ #define SCTF_CC1_SPEC " %{gsctf:-gctf} %<gsctf"
+ #else
+ #define SCTF_CC1_SPEC " %{gsctf:%e-gsctf is not supported in this configuration}"
+ #endif
+ 
+ /* How to generate Solaris CTF.  */
+ #ifdef HAVE_LD_CTF
+ /* Direct linker support.  */
+ #define LINK_SCTF_SPEC " %{gsctf:-z ctf}"
+ #else
+ #define LINK_SCTF_SPEC \
+   " %{gsctf:%e-gsctf is not supported in this configuration}"
+ #endif
+ 
  #undef  LINK_SPEC
  #define LINK_SPEC \
    "%{h*} %{v:-V} \
     %{!shared:%{!static:%{rdynamic: " RDYNAMIC_SPEC "}}} \
     %{static:-dn -Bstatic} \
     %{shared:-G -dy %{!mimpure-text:-z text}} " \
!    LINK_LIBGCC_MAPFILE_SPEC LINK_CLEARCAP_SPEC LINK_SCTF_SPEC " \
     %{symbolic:-Bsymbolic -G -dy -z text} \
     %(link_arch) \
     %{Qy:} %{!Qn:-Qy}"
diff -Nrcpad gcc-16-20251221/gcc/config/sol2.opt gcc-16-20251228/gcc/config/sol2.opt
*** gcc-16-20251221/gcc/config/sol2.opt	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/config/sol2.opt	Sun Dec 28 22:32:06 2025
*************** Driver Joined
*** 27,32 ****
--- 27,36 ----
  Ym,
  Driver Joined
  
+ gsctf
+ Driver RejectNegative
+ Generate Solaris CTF.
+ 
  mclear-hwcap
  Target
  Clear hardware capabilities when linking.
diff -Nrcpad gcc-16-20251221/gcc/config/sol2.opt.urls gcc-16-20251228/gcc/config/sol2.opt.urls
*** gcc-16-20251221/gcc/config/sol2.opt.urls	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/config/sol2.opt.urls	Sun Dec 28 22:32:06 2025
***************
*** 3,8 ****
--- 3,11 ----
  G
  UrlSuffix(gcc/System-V-Options.html#index-G-5)
  
+ gsctf
+ UrlSuffix(gcc/Solaris-2-Options.html#index-gsctf)
+ 
  mclear-hwcap
  UrlSuffix(gcc/Solaris-2-Options.html#index-mclear-hwcap)
  
diff -Nrcpad gcc-16-20251221/gcc/config/sparc/sol2.h gcc-16-20251228/gcc/config/sparc/sol2.h
*** gcc-16-20251221/gcc/config/sparc/sol2.h	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/config/sparc/sol2.h	Sun Dec 28 22:32:06 2025
*************** extern const char *host_detect_local_cpu
*** 240,246 ****
  %{m64:%{m32:%emay not use both -m32 and -m64}} \
  %{m64:-mptr64 -mstack-bias -mno-v8plus \
    %{!mcpu*:-%{!mv8plus:mcpu=v9}}} \
! " ASAN_CC1_SPEC
  #else
  #define CC1_SPEC "\
  %{m32:%{m64:%emay not use both -m32 and -m64}} \
--- 240,246 ----
  %{m64:%{m32:%emay not use both -m32 and -m64}} \
  %{m64:-mptr64 -mstack-bias -mno-v8plus \
    %{!mcpu*:-%{!mv8plus:mcpu=v9}}} \
! " ASAN_CC1_SPEC SCTF_CC1_SPEC
  #else
  #define CC1_SPEC "\
  %{m32:%{m64:%emay not use both -m32 and -m64}} \
*************** extern const char *host_detect_local_cpu
*** 248,254 ****
    %{!mcpu*:%{!mv8plus:-mcpu=v9}}} \
  %{mv8plus:-m32 -mptr32 -mno-stack-bias \
    %{!mcpu*:-mcpu=v9}} \
! " ASAN_CC1_SPEC
  #endif
  
  /* Support for a compile-time default CPU, et cetera.  The rules are:
--- 248,254 ----
    %{!mcpu*:%{!mv8plus:-mcpu=v9}}} \
  %{mv8plus:-m32 -mptr32 -mno-stack-bias \
    %{!mcpu*:-mcpu=v9}} \
! " ASAN_CC1_SPEC SCTF_CC1_SPEC
  #endif
  
  /* Support for a compile-time default CPU, et cetera.  The rules are:
diff -Nrcpad gcc-16-20251221/gcc/config.gcc gcc-16-20251228/gcc/config.gcc
*** gcc-16-20251221/gcc/config.gcc	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/config.gcc	Sun Dec 28 22:32:06 2025
*************** case "${target}" in
*** 5334,5347 ****
  
  
  		# Check default with_tune configuration using with_arch.
! 		case ${with_arch} in
! 		la32v1.0 | la32rv1.0)
! 			tune_pattern="loongarch32"
! 			;;
! 		loongarch64)
! 			tune_pattern="native|generic|loongarch64|la[46]64"
! 			;;
! 		esac
  
  		case ${with_tune} in
  		"") ;; # OK
--- 5334,5340 ----
  
  
  		# Check default with_tune configuration using with_arch.
! 		tune_pattern="native|generic|loongarch64|la[46]64|loongarch32"
  
  		case ${with_tune} in
  		"") ;; # OK
diff -Nrcpad gcc-16-20251221/gcc/config.in gcc-16-20251228/gcc/config.in
*** gcc-16-20251221/gcc/config.in	Sun Dec 21 22:32:18 2025
--- gcc-16-20251228/gcc/config.in	Sun Dec 28 22:32:21 2025
***************
*** 863,874 ****
  #endif
  
  
- /* Define if your assembler supports -xbrace_comment option. */
- #ifndef USED_FOR_TARGET
- #undef HAVE_AS_XBRACE_COMMENT_OPTION
- #endif
- 
- 
  /* Define to 1 if you have the `atoq' function. */
  #ifndef USED_FOR_TARGET
  #undef HAVE_ATOQ
--- 863,868 ----
***************
*** 1803,1808 ****
--- 1797,1808 ----
  #endif
  
  
+ /* Define if your linker supports -z ctf. */
+ #ifndef USED_FOR_TARGET
+ #undef HAVE_LD_CTF
+ #endif
+ 
+ 
  /* Define if your linker supports --demangle option. */
  #ifndef USED_FOR_TARGET
  #undef HAVE_LD_DEMANGLE
diff -Nrcpad gcc-16-20251221/gcc/configure gcc-16-20251228/gcc/configure
*** gcc-16-20251221/gcc/configure	Sun Dec 21 22:32:18 2025
--- gcc-16-20251228/gcc/configure	Sun Dec 28 22:32:21 2025
*************** fi
*** 29699,29736 ****
         ;;
      esac
  
-     { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for -xbrace_comment" >&5
- $as_echo_n "checking assembler for -xbrace_comment... " >&6; }
- if ${gcc_cv_as_ix86_xbrace_comment+:} false; then :
-   $as_echo_n "(cached) " >&6
- else
-   gcc_cv_as_ix86_xbrace_comment=no
-   if test x"$gcc_cv_as" != x; then
-     $as_echo '.text' > conftest.s
-     if { ac_try='$gcc_cv_as $gcc_cv_as_flags -xbrace_comment=no -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_ix86_xbrace_comment=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_ix86_xbrace_comment" >&5
- $as_echo "$gcc_cv_as_ix86_xbrace_comment" >&6; }
- if test $gcc_cv_as_ix86_xbrace_comment = yes; then
- 
- $as_echo "#define HAVE_AS_XBRACE_COMMENT_OPTION 1" >>confdefs.h
- 
- fi
- 
- 
      { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for filds and fists mnemonics" >&5
  $as_echo_n "checking assembler for filds and fists mnemonics... " >&6; }
  if ${gcc_cv_as_ix86_filds+:} false; then :
--- 29699,29704 ----
*************** _ACEOF
*** 33186,33191 ****
--- 33154,33174 ----
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_ld_compress_debug" >&5
  $as_echo "$gcc_cv_ld_compress_debug" >&6; }
  
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking linker support for -z ctf" >&5
+ $as_echo_n "checking linker support for -z ctf... " >&6; }
+ gcc_cv_ld_ctf=no
+ # 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$gnu_ld = xno && test "$ld_vers_minor" -ge 3315; then
+   gcc_cv_ld_ctf=yes
+ 
+ $as_echo "#define HAVE_LD_CTF 1" >>confdefs.h
+ 
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_ld_ctf" >&5
+ $as_echo "$gcc_cv_ld_ctf" >&6; }
+ 
  if test x"$ld64_flag" = x"yes"; then
  
    # Set defaults for possibly untestable items.
diff -Nrcpad gcc-16-20251221/gcc/configure.ac gcc-16-20251228/gcc/configure.ac
*** gcc-16-20251221/gcc/configure.ac	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/configure.ac	Sun Dec 28 22:32:06 2025
*************** foo:	nop
*** 4950,4960 ****
         ;;
      esac
  
-     gcc_GAS_CHECK_FEATURE([-xbrace_comment], gcc_cv_as_ix86_xbrace_comment,
-       [-xbrace_comment=no], [.text],,
-       [AC_DEFINE(HAVE_AS_XBRACE_COMMENT_OPTION, 1,
- 		[Define if your assembler supports -xbrace_comment option.])])
- 
      gcc_GAS_CHECK_FEATURE([filds and fists mnemonics],
         gcc_cv_as_ix86_filds,,
         [filds (%ebp); fists (%ebp)],,
--- 4950,4955 ----
*************** AC_DEFINE_UNQUOTED(LD_COMPRESS_DEBUG_OPT
*** 6440,6445 ****
--- 6435,6451 ----
  [Define to the linker option to enable compressed debug sections.])
  AC_MSG_RESULT($gcc_cv_ld_compress_debug)
  
+ AC_MSG_CHECKING(linker support for -z ctf)
+ gcc_cv_ld_ctf=no
+ # 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$gnu_ld = xno && 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
+ AC_MSG_RESULT($gcc_cv_ld_ctf)
+ 
  if test x"$ld64_flag" = x"yes"; then
  
    # Set defaults for possibly untestable items.
diff -Nrcpad gcc-16-20251221/gcc/cp/ChangeLog gcc-16-20251228/gcc/cp/ChangeLog
*** gcc-16-20251221/gcc/cp/ChangeLog	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/cp/ChangeLog	Sun Dec 28 22:32:06 2025
***************
*** 1,3 ****
--- 1,66 ----
+ 2025-12-23  Nathaniel Shead  <nathanieloshead@gmail.com>
+ 
+ 	PR c++/122819
+ 	* decl.cc (start_preparsed_function): Use
+ 	DECL_TEMPLOID_INSTANTIATION instead of
+ 	DECL_TEMPLATE_INSTANTIATION to check vague linkage.
+ 	* decl2.cc (vague_linkage_p): Likewise.
+ 	(c_parse_final_cleanups): Simplify condition.
+ 	* pt.cc (non_templated_friend_p): Namespace-scope friend
+ 	function declarations without a primary template are still
+ 	non-templated.
+ 	* semantics.cc (expand_or_defer_fn_1): Also check for temploid
+ 	friend functions.
+ 
+ 2025-12-23  Egas Ribeiro  <egas.g.ribeiro@gmail.com>
+ 
+ 	PR c++/122550
+ 	* decl.cc (member_like_constrained_friend_p): Check that the
+ 	friend's enclosing class is an implicit instantiation.
+ 
+ 2025-12-23  Egas Ribeiro  <egas.g.ribeiro@gmail.com>
+ 
+ 	PR c++/122958
+ 	* pt.cc (maybe_new_partial_specialization): Compare template
+ 	parameter lists when checking for existing specializations and
+ 	remove flag_concepts check.
+ 
+ 2025-12-23  Egas Ribeiro  <egas.g.ribeiro@gmail.com>
+ 
+ 	PR c++/117518
+ 	* parser.cc (cp_parser_lambda_expression): Clear
+ 	processing_template_parmlist when parsing lambda body.
+ 
+ 2025-12-23  Dhruv Chawla  <dhruvc@nvidia.com>
+ 
+ 	* Make-lang.in: Bump GCOV version to 3.
+ 
+ 2025-12-22  Nathaniel Shead  <nathanieloshead@gmail.com>
+ 
+ 	PR c++/122994
+ 	* module.cc (depset::disc_bits): New flag
+ 	DB_IGNORED_EXPOSURE_BIT.
+ 	(depset::is_ignored_exposure_context): New getter.
+ 	(depset::hash::ignore_tu_local): Rename to...
+ 	(depset::hash::ignore_exposure): ...this, and make private.
+ 	(depset::hash::hash): Rename ignore_tu_local.
+ 	(depset::hash::ignore_exposure_if): New function.
+ 	(trees_out::decl_value): Don't build deps for keyed entities.
+ 	(trees_in::decl_value): Handle missing keys.
+ 	(trees_out::write_function_def): Use ignore_exposure_if.
+ 	(trees_out::write_var_def): Likewise.
+ 	(trees_out::write_class_def): Likewise.
+ 	(depset::hash::make_dependency): Set DB_IGNORED_EXPOSURE_BIT if
+ 	appropriate, or clear it otherwise.
+ 	(depset::hash::add_dependency): Rename ignore_tu_local.
+ 	(depset::hash::find_dependencies): Set ignore_exposure if in
+ 	such a context.
+ 
+ 2025-12-22  Yuao Ma  <c8ef@outlook.com>
+ 
+ 	PR c++/123261
+ 	* semantics.cc (expand_or_defer_fn_1): Use maybe_constexpr_fn.
+ 
  2025-12-20  Nathaniel Shead  <nathanieloshead@gmail.com>
  
  	PR c++/122712
diff -Nrcpad gcc-16-20251221/gcc/cp/Make-lang.in gcc-16-20251228/gcc/cp/Make-lang.in
*** gcc-16-20251221/gcc/cp/Make-lang.in	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/cp/Make-lang.in	Sun Dec 28 22:32:06 2025
*************** create_fdas_for_cc1plus: ../stage1-gcc/c
*** 201,207 ****
  	  echo $$perf_path; \
  	  if [ -f $$perf_path ]; then \
  	    profile_name=cc1plus_$$component_in_prev.fda; \
! 	    $(CREATE_GCOV) -binary ../stage1-gcc/cc1plus$(exeext) -gcov $$profile_name -profile $$perf_path -gcov_version 2 || exit 1; \
  	  fi; \
  	done;
  
--- 201,207 ----
  	  echo $$perf_path; \
  	  if [ -f $$perf_path ]; then \
  	    profile_name=cc1plus_$$component_in_prev.fda; \
! 	    $(CREATE_GCOV) -binary ../stage1-gcc/cc1plus$(exeext) -gcov $$profile_name -profile $$perf_path -gcov_version 3 || exit 1; \
  	  fi; \
  	done;
  
*************** create_fdas_for_cc1plus: ../stage1-gcc/c
*** 211,217 ****
  	  echo $$perf_path; \
  	  if [ -f $$perf_path ]; then \
  	    profile_name=cc1plus_$$component_in_prev_target.fda; \
! 	    $(CREATE_GCOV) -binary ../prev-gcc/cc1plus$(exeext) -gcov $$profile_name -profile $$perf_path -gcov_version 2 || exit 1; \
  	  fi; \
  	done;
  
--- 211,217 ----
  	  echo $$perf_path; \
  	  if [ -f $$perf_path ]; then \
  	    profile_name=cc1plus_$$component_in_prev_target.fda; \
! 	    $(CREATE_GCOV) -binary ../prev-gcc/cc1plus$(exeext) -gcov $$profile_name -profile $$perf_path -gcov_version 3 || exit 1; \
  	  fi; \
  	done;
  
diff -Nrcpad gcc-16-20251221/gcc/cp/decl.cc gcc-16-20251228/gcc/cp/decl.cc
*** gcc-16-20251221/gcc/cp/decl.cc	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/cp/decl.cc	Sun Dec 28 22:32:07 2025
*************** member_like_constrained_friend_p (tree d
*** 1129,1134 ****
--- 1129,1135 ----
  	  && DECL_UNIQUE_FRIEND_P (decl)
  	  && DECL_FRIEND_CONTEXT (decl)
  	  && get_constraints (decl)
+ 	  && CLASSTYPE_IMPLICIT_INSTANTIATION (DECL_FRIEND_CONTEXT (decl))
  	  && (!DECL_TEMPLATE_INFO (decl)
  	      || !PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl))
  	      || (uses_outer_template_parms_in_constraints
*************** start_preparsed_function (tree decl1, tr
*** 19760,19766 ****
  	}
      }
  
!   bool honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
  			  /* Implicitly-defined methods (like the
  			     destructor for a class in which no destructor
  			     is explicitly declared) must not be defined
--- 19761,19767 ----
  	}
      }
  
!   bool honor_interface = (!DECL_TEMPLOID_INSTANTIATION (decl1)
  			  /* Implicitly-defined methods (like the
  			     destructor for a class in which no destructor
  			     is explicitly declared) must not be defined
*************** start_preparsed_function (tree decl1, tr
*** 19791,19797 ****
    else if (!finfo->interface_unknown && honor_interface)
      {
        if (DECL_DECLARED_INLINE_P (decl1)
! 	  || DECL_TEMPLATE_INSTANTIATION (decl1))
  	{
  	  DECL_EXTERNAL (decl1)
  	    = (finfo->interface_only
--- 19792,19798 ----
    else if (!finfo->interface_unknown && honor_interface)
      {
        if (DECL_DECLARED_INLINE_P (decl1)
! 	  || DECL_TEMPLOID_INSTANTIATION (decl1))
  	{
  	  DECL_EXTERNAL (decl1)
  	    = (finfo->interface_only
*************** start_preparsed_function (tree decl1, tr
*** 19833,19839 ****
  	DECL_EXTERNAL (decl1) = 0;
  
        if ((DECL_DECLARED_INLINE_P (decl1)
! 	   || DECL_TEMPLATE_INSTANTIATION (decl1))
  	  && ! DECL_INTERFACE_KNOWN (decl1))
  	DECL_DEFER_OUTPUT (decl1) = 1;
        else
--- 19834,19840 ----
  	DECL_EXTERNAL (decl1) = 0;
  
        if ((DECL_DECLARED_INLINE_P (decl1)
! 	   || DECL_TEMPLOID_INSTANTIATION (decl1))
  	  && ! DECL_INTERFACE_KNOWN (decl1))
  	DECL_DEFER_OUTPUT (decl1) = 1;
        else
diff -Nrcpad gcc-16-20251221/gcc/cp/decl2.cc gcc-16-20251228/gcc/cp/decl2.cc
*** gcc-16-20251221/gcc/cp/decl2.cc	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/cp/decl2.cc	Sun Dec 28 22:32:07 2025
*************** vague_linkage_p (tree decl)
*** 2510,2516 ****
        || (TREE_CODE (decl) == FUNCTION_DECL
  	  && DECL_DECLARED_INLINE_P (decl))
        || (DECL_LANG_SPECIFIC (decl)
! 	  && DECL_TEMPLATE_INSTANTIATION (decl))
        || (VAR_P (decl) && DECL_INLINE_VAR_P (decl)))
      return true;
    else if (DECL_FUNCTION_SCOPE_P (decl))
--- 2510,2516 ----
        || (TREE_CODE (decl) == FUNCTION_DECL
  	  && DECL_DECLARED_INLINE_P (decl))
        || (DECL_LANG_SPECIFIC (decl)
! 	  && DECL_TEMPLOID_INSTANTIATION (decl))
        || (VAR_P (decl) && DECL_INLINE_VAR_P (decl)))
      return true;
    else if (DECL_FUNCTION_SCOPE_P (decl))
*************** c_parse_final_cleanups (void)
*** 5850,5857 ****
  	  && !(header_module_p ()
  	       && (DECL_DEFAULTED_FN (decl) || decl_tls_wrapper_p (decl)))
  	  /* Don't complain if the template was defined.  */
! 	  && !((DECL_TEMPLATE_INSTANTIATION (decl)
! 		|| DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (decl))
  	       && DECL_INITIAL (DECL_TEMPLATE_RESULT
  				(template_for_substitution (decl))))
  	  && warning_at (DECL_SOURCE_LOCATION (decl), 0,
--- 5850,5856 ----
  	  && !(header_module_p ()
  	       && (DECL_DEFAULTED_FN (decl) || decl_tls_wrapper_p (decl)))
  	  /* Don't complain if the template was defined.  */
! 	  && !(DECL_TEMPLOID_INSTANTIATION (decl)
  	       && DECL_INITIAL (DECL_TEMPLATE_RESULT
  				(template_for_substitution (decl))))
  	  && warning_at (DECL_SOURCE_LOCATION (decl), 0,
diff -Nrcpad gcc-16-20251221/gcc/cp/module.cc gcc-16-20251228/gcc/cp/module.cc
*** gcc-16-20251221/gcc/cp/module.cc	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/cp/module.cc	Sun Dec 28 22:32:07 2025
*************** private:
*** 2370,2375 ****
--- 2370,2376 ----
      DB_REF_PURVIEW_BIT,		/* Refers to a purview TU-local entity.  */
      DB_EXPOSE_GLOBAL_BIT,	/* Exposes a GMF TU-local entity.  */
      DB_EXPOSE_PURVIEW_BIT,	/* Exposes a purview TU-local entity.  */
+     DB_IGNORED_EXPOSURE_BIT,	/* Only seen where exposures are ignored.  */
      DB_IMPORTED_BIT,		/* An imported entity.  */
      DB_UNREACHED_BIT,		/* A yet-to-be reached entity.  */
      DB_MAYBE_RECURSIVE_BIT,	/* An entity maybe in a recursive cluster.  */
*************** public:
*** 2491,2496 ****
--- 2492,2501 ----
      return (get_flag_bit<DB_EXPOSE_PURVIEW_BIT> ()
  	    || (strict && get_flag_bit <DB_EXPOSE_GLOBAL_BIT> ()));
    }
+   bool is_ignored_exposure_context () const
+   {
+     return get_flag_bit<DB_IGNORED_EXPOSURE_BIT> ();
+   }
  
  public:
    bool is_import () const
*************** public:
*** 2625,2631 ****
      unsigned section;	     /* When writing out, the section.  */
      bool reached_unreached;  /* We reached an unreached entity.  */
      bool writing_merge_key;  /* We're writing merge key information.  */
!     bool ignore_tu_local;    /* In a context where referencing a TU-local
  				entity is not an exposure.  */
  
    private:
--- 2630,2638 ----
      unsigned section;	     /* When writing out, the section.  */
      bool reached_unreached;  /* We reached an unreached entity.  */
      bool writing_merge_key;  /* We're writing merge key information.  */
! 
!   private:
!     bool ignore_exposure;    /* In a context where referencing a TU-local
  				entity is not an exposure.  */
  
    private:
*************** public:
*** 2646,2652 ****
      hash (size_t size, hash *c = NULL)
        : parent (size), chain (c), current (NULL), section (0),
  	reached_unreached (false), writing_merge_key (false),
! 	ignore_tu_local (false)
      {
        worklist.create (size);
        dep_adl_entity_list.create (16);
--- 2653,2659 ----
      hash (size_t size, hash *c = NULL)
        : parent (size), chain (c), current (NULL), section (0),
  	reached_unreached (false), writing_merge_key (false),
! 	ignore_exposure (false)
      {
        worklist.create (size);
        dep_adl_entity_list.create (16);
*************** public:
*** 2663,2668 ****
--- 2670,2684 ----
        return chain != NULL;
      }
  
+   public:
+     /* Returns a temporary override that will additionally consider this
+        to be a context where exposures of TU-local entities are ignored
+        if COND is true.  */
+     temp_override<bool> ignore_exposure_if (bool cond)
+     {
+       return make_temp_override (ignore_exposure, ignore_exposure || cond);
+     }
+ 
    private:
      depset **entity_slot (tree entity, bool = true);
      depset **binding_slot (tree ctx, tree name, bool = true);
*************** trees_out::decl_value (tree decl, depset
*** 8519,8538 ****
  
    if (DECL_LANG_SPECIFIC (inner)
        && DECL_MODULE_KEYED_DECLS_P (inner)
!       && !is_key_order ())
      {
!       /* Stream the keyed entities.  */
        auto *attach_vec = keyed_table->get (inner);
        unsigned num = attach_vec->length ();
!       if (streaming_p ())
! 	u (num);
        for (unsigned ix = 0; ix != num; ix++)
  	{
  	  tree attached = (*attach_vec)[ix];
  	  tree_node (attached);
! 	  if (streaming_p ())
! 	    dump (dumper::MERGE)
! 	      && dump ("Written %d[%u] attached decl %N", tag, ix, attached);
  	}
      }
  
--- 8535,8564 ----
  
    if (DECL_LANG_SPECIFIC (inner)
        && DECL_MODULE_KEYED_DECLS_P (inner)
!       && streaming_p ())
      {
!       /* Stream the keyed entities.  There may be keyed entities that we
! 	 choose not to stream, such as a lambda in a non-inline variable's
! 	 initializer, so don't build dependencies for them here; any deps
! 	 we need should be acquired during write_definition (possibly
! 	 indirectly).  */
        auto *attach_vec = keyed_table->get (inner);
        unsigned num = attach_vec->length ();
!       u (num);
        for (unsigned ix = 0; ix != num; ix++)
  	{
  	  tree attached = (*attach_vec)[ix];
+ 	  if (attached)
+ 	    {
+ 	      tree ti = TYPE_TEMPLATE_INFO (TREE_TYPE (attached));
+ 	      if (!dep_hash->find_dependency (attached)
+ 		  && !(ti && dep_hash->find_dependency (TI_TEMPLATE (ti))))
+ 		attached = NULL_TREE;
+ 	    }
+ 
  	  tree_node (attached);
! 	  dump (dumper::MERGE)
! 	    && dump ("Written %d[%u] attached decl %N", tag, ix, attached);
  	}
      }
  
*************** trees_in::decl_value ()
*** 8844,8850 ****
  	  if (is_new)
  	    set.quick_push (attached);
  	  else if (set[ix] != attached)
! 	    set_overrun ();
  	}
      }
  
--- 8870,8886 ----
  	  if (is_new)
  	    set.quick_push (attached);
  	  else if (set[ix] != attached)
! 	    {
! 	      if (!set[ix] || !attached)
! 		/* One import left a hole for a lambda dep we chose not
! 		   to stream, but another import chose to stream that lambda.
! 		   Let's not error here: hopefully we'll complain later in
! 		   is_matching_decl about whatever caused us to make a
! 		   different decision.  */
! 		;
! 	      else
! 		set_overrun ();
! 	    }
  	}
      }
  
*************** trees_out::write_function_def (tree decl
*** 12948,12955 ****
         is ignored for determining exposures.  This should only matter
         for templates (we don't emit the bodies of non-inline functions
         to begin with).  */
!     auto ovr = make_temp_override (dep_hash->ignore_tu_local,
! 				   !DECL_DECLARED_INLINE_P (decl));
      tree_node (DECL_INITIAL (decl));
      tree_node (DECL_SAVED_TREE (decl));
    }
--- 12984,12990 ----
         is ignored for determining exposures.  This should only matter
         for templates (we don't emit the bodies of non-inline functions
         to begin with).  */
!     auto ovr = dep_hash->ignore_exposure_if (!DECL_DECLARED_INLINE_P (decl));
      tree_node (DECL_INITIAL (decl));
      tree_node (DECL_SAVED_TREE (decl));
    }
*************** trees_out::write_var_def (tree decl)
*** 13087,13094 ****
  {
    /* The initializer of a non-inline variable or variable template is
       ignored for determining exposures.  */
!   auto ovr = make_temp_override (dep_hash->ignore_tu_local,
! 				 VAR_P (decl) && !DECL_INLINE_VAR_P (decl));
  
    tree init = DECL_INITIAL (decl);
    tree_node (init);
--- 13122,13129 ----
  {
    /* The initializer of a non-inline variable or variable template is
       ignored for determining exposures.  */
!   auto ovr = dep_hash->ignore_exposure_if (VAR_P (decl)
! 					   && !DECL_INLINE_VAR_P (decl));
  
    tree init = DECL_INITIAL (decl);
    tree_node (init);
*************** trees_out::write_class_def (tree defn)
*** 13287,13293 ****
        {
  	/* Friend declarations in class definitions are ignored when
  	   determining exposures.  */
! 	auto ovr = make_temp_override (dep_hash->ignore_tu_local, true);
  
  	/* Write the friend classes.  */
  	tree_list (CLASSTYPE_FRIEND_CLASSES (type), false);
--- 13322,13328 ----
        {
  	/* Friend declarations in class definitions are ignored when
  	   determining exposures.  */
! 	auto ovr = dep_hash->ignore_exposure_if (true);
  
  	/* Write the friend classes.  */
  	tree_list (CLASSTYPE_FRIEND_CLASSES (type), false);
*************** depset::hash::make_dependency (tree decl
*** 14446,14451 ****
--- 14481,14489 ----
  	  gcc_checking_assert ((*eslot)->get_entity_kind () == EK_REDIRECT
  			       && !(*eslot)->deps.length ());
  
+       if (ignore_exposure)
+ 	dep->set_flag_bit<DB_IGNORED_EXPOSURE_BIT> ();
+ 
        if (ek != EK_USING)
  	{
  	  tree not_tmpl = STRIP_TEMPLATE (decl);
*************** depset::hash::make_dependency (tree decl
*** 14569,14574 ****
--- 14607,14614 ----
        if (!dep->is_import ())
  	worklist.safe_push (dep);
      }
+   else if (!ignore_exposure)
+     dep->clear_flag_bit<DB_IGNORED_EXPOSURE_BIT> ();
  
    dump (dumper::DEPEND)
      && dump ("%s on %s %C:%N found",
*************** depset::hash::add_dependency (depset *de
*** 14627,14633 ****
        else
  	current->set_flag_bit<DB_REF_GLOBAL_BIT> ();
  
!       if (!ignore_tu_local && !is_exposure_of_member_type (current, dep))
  	{
  	  if (dep->is_tu_local ())
  	    current->set_flag_bit<DB_EXPOSE_PURVIEW_BIT> ();
--- 14667,14673 ----
        else
  	current->set_flag_bit<DB_REF_GLOBAL_BIT> ();
  
!       if (!ignore_exposure && !is_exposure_of_member_type (current, dep))
  	{
  	  if (dep->is_tu_local ())
  	    current->set_flag_bit<DB_EXPOSE_PURVIEW_BIT> ();
*************** depset::hash::find_dependencies (module_
*** 15428,15433 ****
--- 15468,15475 ----
  		      add_namespace_context (item, ns);
  		    }
  
+ 		  auto ovr = make_temp_override
+ 		    (ignore_exposure, item->is_ignored_exposure_context ());
  		  walker.decl_value (decl, current);
  		  if (current->has_defn ())
  		    walker.write_definition (decl, current->refs_tu_local ());
diff -Nrcpad gcc-16-20251221/gcc/cp/parser.cc gcc-16-20251228/gcc/cp/parser.cc
*** gcc-16-20251221/gcc/cp/parser.cc	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/cp/parser.cc	Sun Dec 28 22:32:07 2025
*************** cp_parser_lambda_expression (cp_parser*
*** 12043,12048 ****
--- 12043,12050 ----
      bool saved_omp_array_section_p = parser->omp_array_section_p;
      bool saved_in_targ = parser->in_template_argument_list_p;
      bool saved_in_declarator_p = parser->in_declarator_p;
+     auto parmlist_sentinel
+       = make_temp_override (processing_template_parmlist, 0);
  
      parser->num_template_parameter_lists = 0;
      parser->in_statement = 0;
diff -Nrcpad gcc-16-20251221/gcc/cp/pt.cc gcc-16-20251228/gcc/cp/pt.cc
*** gcc-16-20251221/gcc/cp/pt.cc	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/cp/pt.cc	Sun Dec 28 22:32:07 2025
*************** maybe_new_partial_specialization (tree&
*** 946,952 ****
       Note that we also get here for injected class names and
       late-parsed template definitions. We must ensure that we
       do not create new type declarations for those cases.  */
!   if (flag_concepts && CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
      {
        tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
        tree args = CLASSTYPE_TI_ARGS (type);
--- 946,952 ----
       Note that we also get here for injected class names and
       late-parsed template definitions. We must ensure that we
       do not create new type declarations for those cases.  */
!   if (CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
      {
        tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
        tree args = CLASSTYPE_TI_ARGS (type);
*************** maybe_new_partial_specialization (tree&
*** 979,985 ****
            tree spec_tmpl = TREE_VALUE (specs);
            tree spec_args = TREE_PURPOSE (specs);
            tree spec_constr = get_constraints (spec_tmpl);
!           if (comp_template_args (args, spec_args)
  	      && equivalent_constraints (type_constr, spec_constr))
  	    {
  	      type = TREE_TYPE (spec_tmpl);
--- 979,990 ----
            tree spec_tmpl = TREE_VALUE (specs);
            tree spec_args = TREE_PURPOSE (specs);
            tree spec_constr = get_constraints (spec_tmpl);
! 	  tree spec_parms = DECL_TEMPLATE_PARMS (spec_tmpl);
! 	  /* Per [temp.spec.partial.general]/2, two partial specializations
! 	     declare the same entity if they have equivalent template-heads
! 	     and template argument lists.  */
! 	  if (comp_template_args (args, spec_args)
! 	      && comp_template_parms (spec_parms, current_template_parms)
  	      && equivalent_constraints (type_constr, spec_constr))
  	    {
  	      type = TREE_TYPE (spec_tmpl);
*************** non_templated_friend_p (tree t)
*** 11652,11658 ****
  	 template <class T> friend A<T>::f(); */
        tree tmpl = TI_TEMPLATE (ti);
        tree primary = DECL_PRIMARY_TEMPLATE (tmpl);
!       return (primary && primary != tmpl);
      }
    else
      return false;
--- 11657,11663 ----
  	 template <class T> friend A<T>::f(); */
        tree tmpl = TI_TEMPLATE (ti);
        tree primary = DECL_PRIMARY_TEMPLATE (tmpl);
!       return ((primary || DECL_NAMESPACE_SCOPE_P (t)) && primary != tmpl);
      }
    else
      return false;
diff -Nrcpad gcc-16-20251221/gcc/cp/semantics.cc gcc-16-20251228/gcc/cp/semantics.cc
*** gcc-16-20251221/gcc/cp/semantics.cc	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/cp/semantics.cc	Sun Dec 28 22:32:07 2025
*************** expand_or_defer_fn_1 (tree fn)
*** 5537,5543 ****
       of the compilation.  Until that point, we do not want the back
       end to output them -- but we do want it to see the bodies of
       these functions so that it can inline them as appropriate.  */
!   if (DECL_DECLARED_INLINE_P (fn) || DECL_IMPLICIT_INSTANTIATION (fn))
      {
        if (DECL_INTERFACE_KNOWN (fn))
  	/* We've already made a decision as to how this function will
--- 5537,5545 ----
       of the compilation.  Until that point, we do not want the back
       end to output them -- but we do want it to see the bodies of
       these functions so that it can inline them as appropriate.  */
!   if (DECL_DECLARED_INLINE_P (fn)
!       || DECL_IMPLICIT_INSTANTIATION (fn)
!       || DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (fn))
      {
        if (DECL_INTERFACE_KNOWN (fn))
  	/* We've already made a decision as to how this function will
*************** expand_or_defer_fn_1 (tree fn)
*** 5578,5584 ****
  	 the maybe-in-charge cdtor and regenerate the clones from it on
  	 demand, so we also need to keep the body.  Otherwise we don't
  	 need it anymore.  */
!       if (!DECL_DECLARED_CONSTEXPR_P (fn)
  	  && !(module_maybe_has_cmi_p () && vague_linkage_p (fn)))
  	DECL_SAVED_TREE (fn) = void_node;
        return false;
--- 5580,5586 ----
  	 the maybe-in-charge cdtor and regenerate the clones from it on
  	 demand, so we also need to keep the body.  Otherwise we don't
  	 need it anymore.  */
!       if (!maybe_constexpr_fn (fn)
  	  && !(module_maybe_has_cmi_p () && vague_linkage_p (fn)))
  	DECL_SAVED_TREE (fn) = void_node;
        return false;
diff -Nrcpad gcc-16-20251221/gcc/doc/invoke.texi gcc-16-20251228/gcc/doc/invoke.texi
*** gcc-16-20251221/gcc/doc/invoke.texi	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/doc/invoke.texi	Sun Dec 28 22:32:07 2025
*************** See RS/6000 and PowerPC Options.
*** 1305,1338 ****
  
  @emph{RISC-V Options} (@ref{RISC-V Options})
  @gccoptlist{-mbranch-cost=@var{N-instruction}
- -mplt  -mno-plt
  -mabi=@var{ABI-string}
! -mfdiv  -mno-fdiv
! -mfence-tso  -mno-fence-tso
! -mdiv  -mno-div
  -misa-spec=@var{ISA-spec-string}
! -march=@var{ISA-string|Profiles|Profiles_ISA-string|CPU/processor string}
! -mtune=@var{processor-string}
  -mpreferred-stack-boundary=@var{num}
  -msmall-data-limit=@var{N-bytes}
! -msave-restore  -mno-save-restore
! -mshorten-memrefs  -mno-shorten-memrefs
! -mstrict-align  -mno-strict-align
! -mcmodel=medlow  -mcmodel=medany -mcmodel=large
! -mexplicit-relocs  -mno-explicit-relocs
! -mrelax  -mno-relax
! -mriscv-attribute  -mno-riscv-attribute
  -malign-data=@var{type}
  -mbig-endian  -mlittle-endian
  -mstack-protector-guard=@var{guard}  -mstack-protector-guard-reg=@var{reg}
  -mstack-protector-guard-offset=@var{offset}
! -mcsr-check -mno-csr-check
! -mmovcc  -mno-movcc
! -minline-atomics  -mno-inline-atomics
! -minline-strlen  -mno-inline-strlen
! -minline-strcmp  -mno-inline-strcmp
! -minline-strncmp  -mno-inline-strncmp
! -mtls-dialect=desc  -mtls-dialect=trad}
  
  @emph{RL78 Options} (@ref{RL78 Options})
  @gccoptlist{-msim  -mmul=none  -mmul=g13  -mmul=g14  -mallregs
--- 1305,1333 ----
  
  @emph{RISC-V Options} (@ref{RISC-V Options})
  @gccoptlist{-mbranch-cost=@var{N-instruction}
  -mabi=@var{ABI-string}
! -mfdiv  -mdiv
! -mno-fence-tso
  -misa-spec=@var{ISA-spec-string}
! -march=@r{[}@var{ISA}@r{|}@var{Profile}@r{|}@var{Profile_ISA}@r{|}@var{processor-string}@r{]}
! -mcpu=@var{processor-string}  -mtune=@var{processor-string}
  -mpreferred-stack-boundary=@var{num}
  -msmall-data-limit=@var{N-bytes}
! -msave-restore  -mno-shorten-memrefs
! -mstrict-align  -mscalar-strict-align  -mno-vector-strict-align
! -mcmodel=medlow  -mcmodel=medany  -mcmodel=large
! -mexplicit-relocs  -mrelax  -mriscv-attribute
  -malign-data=@var{type}
  -mbig-endian  -mlittle-endian
  -mstack-protector-guard=@var{guard}  -mstack-protector-guard-reg=@var{reg}
  -mstack-protector-guard-offset=@var{offset}
! -mcsr-check  -momit-leaf-frame-pointer  -mmovcc
! -mno-inline-atomics  -mno-inline-strlen
! -mno-inline-strcmp  -mno-inline-strncmp
! -mstringop-strategy=@var{strategy}
! -mtls-dialect=desc  -mtls-dialect=trad
! -mrvv-vector-bits=@var{value}  -mrvv-max-lmul=@var{value}
! -madjust-lmul-cost  -mmax-vectorization  -mno-autovec-segment}
  
  @emph{RL78 Options} (@ref{RL78 Options})
  @gccoptlist{-msim  -mmul=none  -mmul=g13  -mmul=g14  -mallregs
*************** See RS/6000 and PowerPC Options.
*** 1450,1456 ****
  
  @emph{Solaris 2 Options} (@ref{Solaris 2 Options})
  @gccoptlist{-mclear-hwcap  -mno-clear-hwcap  -mimpure-text  -mno-impure-text
! -pthreads}
  
  @emph{SPARC Options} (@ref{SPARC Options})
  @gccoptlist{-mcpu=@var{cpu-type}
--- 1445,1451 ----
  
  @emph{Solaris 2 Options} (@ref{Solaris 2 Options})
  @gccoptlist{-mclear-hwcap  -mno-clear-hwcap  -mimpure-text  -mno-impure-text
! -gsctf -pthreads}
  
  @emph{SPARC Options} (@ref{SPARC Options})
  @gccoptlist{-mcpu=@var{cpu-type}
*************** Enable hardware-assisted memory tagging
*** 17736,17741 ****
--- 17731,17739 ----
  variables.  This kind of code generation is enabled by default when using
  @option{-fsanitize=memtag-stack}.
  
+ @item memtag-instrument-mem-intrinsics
+ When sanitizing using MTE instructions, include builtin functions.
+ 
  @item use-after-scope-direct-emission-threshold
  If the size of a local variable in bytes is smaller or equal to this
  number, directly poison (or unpoison) shadow memory instead of using
*************** Enable the FEAT_SME_F64F64 extension to
*** 23079,23084 ****
--- 23077,23088 ----
  instructions.
  @item sme2
  Enable the Scalable Matrix Extension 2.  This also enables SME instructions.
+ @item sme-f8f16
+ Enable the FEAT_SME_F8F16 extension to SME.  This also enables SME2 and FP8
+ instructions.
+ @item sme-f8f32
+ Enable the FEAT_SME_F8F32 extension to SME.  This also enables SME2 and FP8
+ instructions.
  @item sme-b16b16
  Enable the FEAT_SME_B16B16 extension to SME.  This also enables SME2
  and SVE_B16B16 instructions.
*************** These command-line options are defined f
*** 31932,31943 ****
  @item -mbranch-cost=@var{n}
  Set the cost of branches to roughly @var{n} instructions.
  
- @opindex plt
- @item -mplt
- @itemx -mno-plt
- When generating PIC code, do or don't allow the use of PLTs. Ignored for
- non-PIC.  The default is @option{-mplt}.
- 
  @opindex mabi
  @item -mabi=@var{ABI-string}
  Specify integer and floating-point calling convention.  @var{ABI-string}
--- 31936,31941 ----
*************** floating-point types.  For example @samp
*** 31948,31968 ****
  registers.  Contrast this with @samp{-march=rv64ifd -mabi=lp64f}, which still
  allows the compiler to generate code that uses the F and D extensions but only
  allows floating-point values up to 32 bits long to be passed in registers; or
! @samp{-march=rv64ifd -mabi=lp64}, in which no floating-point arguments will be
  passed in registers.
  
! The default for this argument is system dependent, users who want a specific
! calling convention should specify one explicitly.  The valid calling
  conventions are: @samp{ilp32}, @samp{ilp32f}, @samp{ilp32d}, @samp{lp64},
  @samp{lp64f}, and @samp{lp64d}.  Some calling conventions are impossible to
  implement on some ISAs: for example, @samp{-march=rv32if -mabi=ilp32d} is
  invalid because the ABI requires 64-bit values be passed in F registers, but F
  registers are only 32 bits wide.  There are also the @samp{ilp32e} ABI that can
  only be used with the @samp{rv32e} architecture and the @samp{lp64e} ABI that
! can only be used with the @samp{rv64e}.  Those ABIs are not well specified at
  present, and are subject to change.
  
  @opindex mfdiv
  @item -mfdiv
  @itemx -mno-fdiv
  Do or don't use hardware floating-point divide and square root instructions.
--- 31946,31967 ----
  registers.  Contrast this with @samp{-march=rv64ifd -mabi=lp64f}, which still
  allows the compiler to generate code that uses the F and D extensions but only
  allows floating-point values up to 32 bits long to be passed in registers; or
! @samp{-march=rv64ifd -mabi=lp64}, in which no floating-point arguments are
  passed in registers.
  
! The default for this argument is system dependent; if you want a specific
! calling convention you should specify one explicitly.  The valid calling
  conventions are: @samp{ilp32}, @samp{ilp32f}, @samp{ilp32d}, @samp{lp64},
  @samp{lp64f}, and @samp{lp64d}.  Some calling conventions are impossible to
  implement on some ISAs: for example, @samp{-march=rv32if -mabi=ilp32d} is
  invalid because the ABI requires 64-bit values be passed in F registers, but F
  registers are only 32 bits wide.  There are also the @samp{ilp32e} ABI that can
  only be used with the @samp{rv32e} architecture and the @samp{lp64e} ABI that
! can only be used with the @samp{rv64e}.  Those ABIs are not well-specified at
  present, and are subject to change.
  
  @opindex mfdiv
+ @opindex mno-fdiv
  @item -mfdiv
  @itemx -mno-fdiv
  Do or don't use hardware floating-point divide and square root instructions.
*************** This requires the F or D extensions for
*** 31970,31975 ****
--- 31969,31975 ----
  is to use them if the specified architecture has these instructions.
  
  @opindex mfence-tso
+ @opindex mno-fence-tso
  @item -mfence-tso
  @itemx -mno-fence-tso
  Do or don't use the @samp{fence.tso} instruction, which is unimplemented on
*************** some processors (including those from T-
*** 31977,31982 ****
--- 31977,31983 ----
  instruction is not available then a stronger fence is used instead.
  
  @opindex mdiv
+ @opindex mno-div
  @item -mdiv
  @itemx -mno-div
  Do or don't use hardware instructions for integer division.  This requires the
*************** these instructions.
*** 31986,31992 ****
  @opindex misa-spec
  @item -misa-spec=@var{ISA-spec-string}
  Specify the version of the RISC-V Unprivileged (formerly User-Level)
! ISA specification to produce code conforming to.  The possibilities
  for @var{ISA-spec-string} are:
  @table @code
  @item 2.2
--- 31987,31993 ----
  @opindex misa-spec
  @item -misa-spec=@var{ISA-spec-string}
  Specify the version of the RISC-V Unprivileged (formerly User-Level)
! ISA specification generated code should conform to.  The possibilities
  for @var{ISA-spec-string} are:
  @table @code
  @item 2.2
*************** The default is @option{-misa-spec=201912
*** 32000,32050 ****
  with @option{--with-isa-spec=} specifying a different default version.
  
  @opindex march
! @item -march=@var{ISA-string|Profiles|Profile_ISA-string|help|unset}
! Generate code for given RISC-V ISA or Profiles or a combination of them
! (e.g.@: @samp{rv64im} @samp{rvi20u64} @samp{rvi20u64_zbb}).  ISA strings and
! Profiles must be lower-case.  Examples include @samp{rv64i}, @samp{rv32g},
  @samp{rv32e}, @samp{rv32imaf}, @samp{rva22u64} and @samp{rva23u64}.
! To combine Profiles and optional RISC-V ISA extention, the profile should start
! at the beginning of the option, then use underline connect ISA-string (e.g.@:
  @samp{rvi20u64_zca_zcb} @samp{rva23u64_zacas}).  Additionally, a special value
! @option{help} (@option{-march=help}) is accepted to list all supported
  extensions.
  
! @samp{-march=unset} causes the compiler to ignore any @samp{-march=@dots{}} options
  that appear earlier on the command line, behaving as if the option was never
! passed. This is useful for ensuring that the architecture is taken from the
! @samp{-mcpu} option, and it will result in an error if no @samp{-mcpu} option
! is given when @samp{-march=unset} is used.
  
  The syntax of the ISA string is defined as follows:
  
! @table @code
! @item The string must start with @samp{rv32} or @samp{rv64}, followed by
  @samp{i}, @samp{e}, or @samp{g}, referred to as the base ISA.
! @item The subsequent part of the string is a list of extension names. Extension
  names can be categorized as multi-letter (e.g.@: @samp{zba}) and single-letter
! (e.g.@: @samp{v}). Single-letter extensions can appear consecutively,
  but multi-letter extensions must be separated by underscores.
! @item An underscore can appear anywhere after the base ISA. It has no specific
  effect but is used to improve readability and can act as a separator.
! @item Extension names may include an optional version number, following the
  syntax @samp{<major>p<minor>} or @samp{<major>}, (e.g.@: @samp{m2p1} or
  @samp{m2}).
! @end table
  
! Supported extension are listed below:
  
  @include riscv-ext.texi
  
! When @option{-march=} is not specified, use the setting from @option{-mcpu}.
  
  If both @option{-march} and @option{-mcpu=} are not specified, the default for
! this argument is system dependent, users who want a specific architecture
! extensions should specify one explicitly.
  
  When the RISC-V specifications define an extension as depending on other
! extensions, GCC will implicitly add the dependent extensions to the enabled
  extension set if they weren't added explicitly.
  
  @include riscv-mcpu.texi
--- 32001,32059 ----
  with @option{--with-isa-spec=} specifying a different default version.
  
  @opindex march
! @item -march=@r{[}@var{ISA}@r{|}@var{Profile}@r{|}@var{Profile_ISA}@r{|}@var{processor-string}@r{]}
! Generate code for given RISC-V ISA or profile or a combination of them
! (e.g.@: @samp{rv64im} @samp{rvi20u64} @samp{rvi20u64_zbb}).  The names of
! ISAs and profiles must be lower case.
! Examples include @samp{rv64i}, @samp{rv32g},
  @samp{rv32e}, @samp{rv32imaf}, @samp{rva22u64} and @samp{rva23u64}.
! To combine a named profile with optional RISC-V ISA extensions,
! give the profile first and then append the extension name(s) using
! an underscore as a delimiter (e.g.@:
  @samp{rvi20u64_zca_zcb} @samp{rva23u64_zacas}).  Additionally, a special value
! @samp{help} (@option{-march=help}) is accepted to list all supported
  extensions.
  
! @option{-march=unset} causes the compiler to ignore any
! @option{-march=@dots{}} options
  that appear earlier on the command line, behaving as if the option was never
! passed.  This is useful for ensuring that the architecture is taken from the
! @option{-mcpu} option, and an error results if no @option{-mcpu} option
! is given when @option{-march=unset} is used.
  
  The syntax of the ISA string is defined as follows:
  
! @itemize @bullet{}
! @item
! The string must start with @samp{rv32} or @samp{rv64}, followed by
  @samp{i}, @samp{e}, or @samp{g}, referred to as the base ISA.
! @item
! The subsequent part of the string is a list of extension names.  Extension
  names can be categorized as multi-letter (e.g.@: @samp{zba}) and single-letter
! (e.g.@: @samp{v}).  Single-letter extensions can appear consecutively,
  but multi-letter extensions must be separated by underscores.
! @item
! An underscore can appear anywhere after the base ISA.  It has no specific
  effect but is used to improve readability and can act as a separator.
! @item
! Extension names may include an optional version number, following the
  syntax @samp{<major>p<minor>} or @samp{<major>}, (e.g.@: @samp{m2p1} or
  @samp{m2}).
! @end itemize
  
! Supported extensions are listed below:
  
  @include riscv-ext.texi
  
! When @option{-march=} is not specified, GCC uses the setting from
! @option{-mcpu}.
  
  If both @option{-march} and @option{-mcpu=} are not specified, the default for
! this argument is system dependent; if you want a specific architecture
! extension, you should specify one explicitly.
  
  When the RISC-V specifications define an extension as depending on other
! extensions, GCC implicitly adds the dependent extensions to the enabled
  extension set if they weren't added explicitly.
  
  @include riscv-mcpu.texi
*************** Note that @option{-mcpu} does not overri
*** 32053,32060 ****
  
  @include riscv-mtune.texi
  
! When @option{-mtune=} is not specified, use the setting from @option{-mcpu},
! the default is @samp{generic} if both are not specified.
  
  The @samp{size} choice is not intended for use by end-users.  This is used
  when @option{-Os} is specified.  It overrides the instruction cost info
--- 32062,32069 ----
  
  @include riscv-mtune.texi
  
! When @option{-mtune=} is not specified, GCC uses the setting from
! @option{-mcpu}.  The default is @samp{generic} if neither is specified.
  
  The @samp{size} choice is not intended for use by end-users.  This is used
  when @option{-Os} is specified.  It overrides the instruction cost info
*************** Put global and static data smaller than
*** 32077,32082 ****
--- 32086,32092 ----
  (on some targets).
  
  @opindex msave-restore
+ @opindex mno-save-restore
  @item -msave-restore
  @itemx -mno-save-restore
  Do or don't use smaller but slower prologue and epilogue code that uses
*************** library function calls.  The default is
*** 32084,32089 ****
--- 32094,32100 ----
  epilogues.
  
  @opindex mmovcc
+ @opindex mno-movcc
  @item -mmovcc
  @itemx -mno-movcc
  Do or don't produce branchless conditional-move code sequences even with
*************** If enabled, sequences of ALU operations
*** 32092,32097 ****
--- 32103,32109 ----
  ISA instructions where profitable.
  
  @opindex minline-atomics
+ @opindex mno-inline-atomics
  @item -minline-atomics
  @itemx -mno-inline-atomics
  Do or don't use smaller but slower subword atomic emulation code that uses
*************** libatomic function calls.  The default i
*** 32099,32136 ****
  that do not require libatomic.
  
  @opindex minline-strlen
  @item -minline-strlen
  @itemx -mno-inline-strlen
! Do or do not attempt to inline strlen calls if possible.
! Inlining will only be done if the string is properly aligned
  and instructions for accelerated processing are available.
! The default is to not inline strlen calls.
  
  @opindex minline-strcmp
  @item -minline-strcmp
  @itemx -mno-inline-strcmp
! Do or do not attempt to inline strcmp calls if possible.
! Inlining will only be done if the strings are properly aligned
  and instructions for accelerated processing are available.
! The default is to not inline strcmp calls.
  
  The @option{--param riscv-strcmp-inline-limit=@var{n}} parameter controls
  the maximum number of bytes compared by the inlined code.
  The default value is 64.
  
  @opindex minline-strncmp
  @item -minline-strncmp
  @itemx -mno-inline-strncmp
! Do or do not attempt to inline strncmp calls if possible.
! Inlining will only be done if the strings are properly aligned
  and instructions for accelerated processing are available.
! The default is to not inline strncmp calls.
  
  The @option{--param riscv-strcmp-inline-limit=@var{n}} parameter controls
  the maximum number of bytes compared by the inlined code.
  The default value is 64.
  
  @opindex mshorten-memrefs
  @item -mshorten-memrefs
  @itemx -mno-shorten-memrefs
  Do or do not attempt to make more use of compressed load/store instructions by
--- 32111,32158 ----
  that do not require libatomic.
  
  @opindex minline-strlen
+ @opindex mno-inline-strlen
  @item -minline-strlen
  @itemx -mno-inline-strlen
! Do or do not attempt to inline @code{strlen} calls if possible.
! Inlining can only be done if the string is properly aligned
  and instructions for accelerated processing are available.
! The default is to inline @code{strlen} calls.
  
  @opindex minline-strcmp
+ @opindex mno-inline-strcmp
  @item -minline-strcmp
  @itemx -mno-inline-strcmp
! Do or do not attempt to inline @code{strcmp} calls if possible.
! Inlining can only be done if the strings are properly aligned
  and instructions for accelerated processing are available.
! The default is to inline @code{strcmp} calls.
  
  The @option{--param riscv-strcmp-inline-limit=@var{n}} parameter controls
  the maximum number of bytes compared by the inlined code.
  The default value is 64.
  
  @opindex minline-strncmp
+ @opindex mno-inline-strncmp
  @item -minline-strncmp
  @itemx -mno-inline-strncmp
! Do or do not attempt to inline @code{strncmp} calls if possible.
! Inlining can only be done if the strings are properly aligned
  and instructions for accelerated processing are available.
! The default is to inline @code{strncmp} calls.
  
  The @option{--param riscv-strcmp-inline-limit=@var{n}} parameter controls
  the maximum number of bytes compared by the inlined code.
  The default value is 64.
  
+ @opindex mstringop-strategy
+ @item -mstringop-strategy=@var{strategy}
+ Specify a particular strategy for inlining string and memory operations.
+ @var{strategy} may be one of @samp{auto}, @samp{libcall}, @samp{scalar},
+ or @samp{vector}.
+ 
  @opindex mshorten-memrefs
+ @opindex mno-shorten-memrefs
  @item -mshorten-memrefs
  @itemx -mno-shorten-memrefs
  Do or do not attempt to make more use of compressed load/store instructions by
*************** register, then the new load/store can be
*** 32140,32145 ****
--- 32162,32168 ----
  integer load/stores only.
  
  @opindex mstrict-align
+ @opindex mno-strict-align
  @item -mstrict-align
  @itemx -mno-strict-align
  Do not or do generate unaligned memory accesses.  The default is set depending
*************** Do not or do generate unaligned vector m
*** 32162,32167 ****
--- 32185,32192 ----
  to off unless the processor we are optimizing for explicitly supports
  element-misaligned vector memory access.
  
+ @opindex mmax-vectorization
+ @opindex mno-max-vectorization
  @item -mmax-vectorization
  @itemx -mno-max-vectorization
  Enable or disable an override to vectorizer cost model making vectorization
*************** executables or libraries.
*** 32194,32206 ****
  Generate code for a large code model, which has no restrictions on size or
  placement of symbols.
  
  @item -mexplicit-relocs
! @itemx -mno-exlicit-relocs
  Use or do not use assembler relocation operators when dealing with symbolic
  addresses.  The alternative is to use assembler macros instead, which may
  limit optimization.
  
  @opindex mrelax
  @item -mrelax
  @itemx -mno-relax
  Take advantage of linker relaxations to reduce the number of instructions
--- 32219,32234 ----
  Generate code for a large code model, which has no restrictions on size or
  placement of symbols.
  
+ @opindex mexplicit-relocs
+ @opindex mno-explicit-relocs
  @item -mexplicit-relocs
! @itemx -mno-explicit-relocs
  Use or do not use assembler relocation operators when dealing with symbolic
  addresses.  The alternative is to use assembler macros instead, which may
  limit optimization.
  
  @opindex mrelax
+ @opindex mno-relax
  @item -mrelax
  @itemx -mno-relax
  Take advantage of linker relaxations to reduce the number of instructions
*************** required to materialize symbol addresses
*** 32208,32223 ****
--- 32236,32260 ----
  linker relaxations.
  
  @opindex mriscv-attribute
+ @opindex mno-riscv-attribute
  @item -mriscv-attribute
  @itemx -mno-riscv-attribute
  Emit (do not emit) RISC-V attribute to record extra information into ELF
  objects.  This feature requires at least binutils 2.32.
  
  @opindex mcsr-check
+ @opindex mno-csr-check
  @item -mcsr-check
  @itemx -mno-csr-check
  Enables or disables the CSR checking.
  
+ @opindex momit-leaf-frame-pointer
+ @opindex mno-omit-leaf-frame-pointer
+ @item -momit-leaf-frame-pointer
+ Don't keep the frame pointer in a register for leaf functions.  This
+ avoids the instructions to save, set up and restore frame pointers and
+ makes an extra register available in leaf functions.
+ 
  @opindex malign-data
  @item -malign-data=@var{type}
  Control how GCC aligns variables and constants of array, structure, or union
*************** of TLS variables.
*** 32263,32268 ****
--- 32300,32338 ----
  @item -mtls-dialect=trad
  Use traditional TLS as the thread-local storage mechanism for dynamic accesses
  of TLS variables.  This is the default.
+ 
+ @opindex mrvv-vector-bits
+ @item -mrvv-vector-bits=@var{value}
+ Specify how the number of bits for an RVV vector register, as taken from
+ the @option{-march=} option, is interpreted.
+ The @var{value} parameter is specified as a string keyword and may be one of
+ @samp{scalable} or @samp{zvl}.  The default is @samp{scalable}, which tells
+ GCC to interpret the number as a minimum, while @samp{zvl} tells GCC to use
+ exactly the number of bits specified.
+ 
+ @opindex mrvv-max-lmul
+ @item -mrvv-max-lmul=@var{value}
+ This option allows explicit control over the maximum length multiplier (LMUL)
+ used when generating code for the RISC-V Vector Extensions (RVV).
+ The @var{value} parameter is specified as a string keyword and may be
+ one of @samp{m1}, @samp{m2}, @samp{m4}, @samp{m8}, or @samp{dynamic}.  The
+ default is @samp{m1} for compatibility with existing hardware that does not
+ support the other options.
+ 
+ @opindex madjust-lmul-cost
+ @opindex mno-adjust-lmul-cost
+ @item -madjust-lmul-cost
+ @itemx -mno-adjust-lmul-cost
+ This option adjusts the cost model used to schedule vector instructions to
+ multiply the latency of instructions by the RVV length multiplier, LMUL.
+ It is disabled by default.
+ 
+ @opindex mautovec-segment
+ @opindex mno-autovec-segment
+ @item -mautovec-segment
+ @itemx -mno-autovec-segment
+ Enable or disable generation of vector segment load/store instructions.
+ This option is enabled by default.
  @end table
  
  @node RL78 Options
*************** using @option{-mimpure-text}, you should
*** 34504,34509 ****
--- 34574,34585 ----
  These switches are supported in addition to the above on Solaris 2:
  
  @table @gcctabopt
+ @opindex gsctf
+ @item -gsctf
+ Generate Solaris CTF.  Needs to be used both for compilation and
+ linking.  See @command{ctf(7)} for more information.  This is only
+ supported since Solaris 11.4 SRU 84 where the necessary toolchain
+ support was added.
  @opindex pthreads
  @item -pthreads
  This is a synonym for @option{-pthread}.
diff -Nrcpad gcc-16-20251221/gcc/doc/riscv-ext.texi gcc-16-20251228/gcc/doc/riscv-ext.texi
*** gcc-16-20251221/gcc/doc/riscv-ext.texi	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/doc/riscv-ext.texi	Sun Dec 28 22:32:07 2025
***************
*** 9,752 ****
  
  @c Please *DO NOT* edit manually.
  
! @multitable @columnfractions .10 .10 .80
  @headitem Extension Name @tab Supported Version @tab Description
  
! @item g
  @tab -
! @tab General-purpose computing base extension, @samp{g} will expand to
  @samp{i}, @samp{m}, @samp{a}, @samp{f}, @samp{d}, @samp{zicsr} and
  @samp{zifencei}.
  
! @item e
  @tab 2.0
  @tab Reduced base integer extension
  
! @item i
  @tab 2.0 2.1
  @tab Base integer extension
  
! @item m
  @tab 2.0
  @tab Integer multiplication and division extension
  
! @item a
  @tab 2.0 2.1
  @tab Atomic extension
  
! @item f
  @tab 2.0 2.2
  @tab Single-precision floating-point extension
  
! @item d
  @tab 2.0 2.2
  @tab Double-precision floating-point extension
  
! @item c
  @tab 2.0
  @tab Compressed extension
  
! @item b
  @tab 1.0
! @tab b extension
  
! @item v
  @tab 1.0
  @tab Vector extension
  
! @item h
  @tab 1.0
  @tab Hypervisor extension
  
! @item zic64b
  @tab 1.0
! @tab Cache block size isf 64 bytes
  
! @item zicbom
  @tab 1.0
  @tab Cache-block management extension
  
! @item zicbop
  @tab 1.0
  @tab Cache-block prefetch extension
  
! @item zicboz
  @tab 1.0
  @tab Cache-block zero extension
  
! @item ziccamoa
  @tab 1.0
  @tab Main memory supports all atomics in A
  
! @item ziccif
  @tab 1.0
  @tab Main memory supports instruction fetch with atomicity requirement
  
! @item zicclsm
  @tab 1.0
  @tab Main memory supports misaligned loads/stores
  
! @item ziccrse
  @tab 1.0
  @tab Main memory supports forward progress on LR/SC sequences
  
! @item zicfilp
  @tab 1.0
! @tab zicfilp extension
  
! @item zicfiss
  @tab 1.0
! @tab zicfiss extension
  
! @item zicntr
  @tab 2.0
  @tab Standard extension for base counters and timers
  
! @item zicond
  @tab 1.0
  @tab Integer conditional operations extension
  
! @item zicsr
  @tab 2.0
  @tab Control and status register access extension
  
! @item zifencei
  @tab 2.0
  @tab Instruction-fetch fence extension
  
! @item zihintntl
  @tab 1.0
  @tab Non-temporal locality hints extension
  
! @item zihintpause
  @tab 2.0
  @tab Pause hint extension
  
! @item zihpm
  @tab 2.0
  @tab Standard extension for hardware performance counters
  
! @item zimop
  @tab 1.0
! @tab zimop extension
  
! @item zilsd
  @tab 1.0
! @tab Load/Store pair instructions extension
  
! @item zmmul
  @tab 1.0
  @tab Integer multiplication extension
  
! @item za128rs
  @tab 1.0
  @tab Reservation set size of 128 bytes
  
! @item za64rs
  @tab 1.0
  @tab Reservation set size of 64 bytes
  
! @item zaamo
  @tab 1.0
! @tab zaamo extension
  
! @item zabha
  @tab 1.0
! @tab zabha extension
  
! @item zacas
  @tab 1.0
! @tab zacas extension
  
! @item zalrsc
  @tab 1.0
! @tab zalrsc extension
  
! @item zawrs
  @tab 1.0
  @tab Wait-on-reservation-set extension
  
! @item zama16b
  @tab 1.0
! @tab Zama16b extension, Misaligned loads, stores, and AMOs to main memory regions that do not cross a naturally aligned 16-byte boundary are atomic.
  
! @item zfa
  @tab 1.0
  @tab Additional floating-point extension
  
! @item zfbfmin
  @tab 1.0
! @tab zfbfmin extension
  
! @item zfh
  @tab 1.0
  @tab Half-precision floating-point extension
  
! @item zfhmin
  @tab 1.0
  @tab Minimal half-precision floating-point extension
  
! @item zfinx
  @tab 1.0
  @tab Single-precision floating-point in integer registers extension
  
! @item zdinx
  @tab 1.0
  @tab Double-precision floating-point in integer registers extension
  
! @item zca
  @tab 1.0
  @tab Integer compressed instruction extension
  
! @item zcb
  @tab 1.0
  @tab Simple compressed instruction extension
  
! @item zcd
  @tab 1.0
  @tab Compressed double-precision floating point loads and stores extension
  
! @item zce
  @tab 1.0
  @tab Compressed instruction extensions for embedded processors
  
! @item zcf
  @tab 1.0
  @tab Compressed single-precision floating point loads and stores extension
  
! @item zcmop
  @tab 1.0
! @tab zcmop extension
  
! @item zcmp
  @tab 1.0
  @tab Compressed push pop extension
  
! @item zcmt
  @tab 1.0
  @tab Table jump instruction extension
  
! @item zclsd
  @tab 1.0
  @tab Compressed load/store pair instructions extension
  
! @item zba
  @tab 1.0
  @tab Address calculation extension
  
! @item zbb
  @tab 1.0
  @tab Basic bit manipulation extension
  
! @item zbc
  @tab 1.0
  @tab Carry-less multiplication extension
  
! @item zbkb
  @tab 1.0
  @tab Cryptography bit-manipulation extension
  
! @item zbkc
  @tab 1.0
  @tab Cryptography carry-less multiply extension
  
! @item zbkx
  @tab 1.0
  @tab Cryptography crossbar permutation extension
  
! @item zbs
  @tab 1.0
  @tab Single-bit operation extension
  
! @item zk
  @tab 1.0
  @tab Standard scalar cryptography extension
  
! @item zkn
  @tab 1.0
  @tab NIST algorithm suite extension
  
! @item zknd
  @tab 1.0
  @tab AES Decryption extension
  
! @item zkne
  @tab 1.0
  @tab AES Encryption extension
  
! @item zknh
  @tab 1.0
  @tab Hash function extension
  
! @item zkr
  @tab 1.0
  @tab Entropy source extension
  
! @item zks
  @tab 1.0
  @tab ShangMi algorithm suite extension
  
! @item zksed
  @tab 1.0
  @tab SM4 block cipher extension
  
! @item zksh
  @tab 1.0
  @tab SM3 hash function extension
  
! @item zkt
  @tab 1.0
  @tab Data independent execution latency extension
  
! @item ztso
  @tab 1.0
  @tab Total store ordering extension
  
! @item zvbb
  @tab 1.0
  @tab Vector basic bit-manipulation extension
  
! @item zvbc
  @tab 1.0
! @tab Vector carryless multiplication extension
  
! @item zve32f
  @tab 1.0
  @tab Vector extensions for embedded processors
  
! @item zve32x
  @tab 1.0
  @tab Vector extensions for embedded processors
  
! @item zve64d
  @tab 1.0
  @tab Vector extensions for embedded processors
  
! @item zve64f
  @tab 1.0
  @tab Vector extensions for embedded processors
  
! @item zve64x
  @tab 1.0
  @tab Vector extensions for embedded processors
  
! @item zvfbfmin
  @tab 1.0
  @tab Vector BF16 converts extension
  
! @item zvfbfwma
  @tab 1.0
! @tab zvfbfwma extension
  
! @item zvfh
  @tab 1.0
  @tab Vector half-precision floating-point extension
  
! @item zvfhmin
  @tab 1.0
  @tab Vector minimal half-precision floating-point extension
  
! @item zvkb
  @tab 1.0
  @tab Vector cryptography bit-manipulation extension
  
! @item zvkg
  @tab 1.0
  @tab Vector GCM/GMAC extension
  
! @item zvkn
  @tab 1.0
  @tab Vector NIST Algorithm Suite extension, @samp{zvkn} will expand to
  
! @item zvknc
  @tab 1.0
! @tab Vector NIST Algorithm Suite with carryless multiply extension, @samp{zvknc}
  
! @item zvkned
  @tab 1.0
  @tab Vector AES block cipher extension
  
! @item zvkng
  @tab 1.0
  @tab Vector NIST Algorithm Suite with GCM extension, @samp{zvkng} will expand
  
! @item zvknha
  @tab 1.0
  @tab Vector SHA-2 secure hash extension
  
! @item zvknhb
  @tab 1.0
  @tab Vector SHA-2 secure hash extension
  
! @item zvks
  @tab 1.0
  @tab Vector ShangMi algorithm suite extension, @samp{zvks} will expand
  
! @item zvksc
  @tab 1.0
! @tab Vector ShangMi algorithm suite with carryless multiplication extension,
  
! @item zvksed
  @tab 1.0
! @tab Vector SM4 Block Cipher extension
  
! @item zvksg
  @tab 1.0
! @tab Vector ShangMi algorithm suite with GCM extension, @samp{zvksg} will expand
  
! @item zvksh
  @tab 1.0
! @tab Vector SM3 Secure Hash extension
  
! @item zvkt
  @tab 1.0
  @tab Vector data independent execution latency extension
  
! @item zvl1024b
  @tab 1.0
  @tab Minimum vector length standard extensions
  
! @item zvl128b
  @tab 1.0
  @tab Minimum vector length standard extensions
  
! @item zvl16384b
  @tab 1.0
! @tab zvl16384b extension
  
! @item zvl2048b
  @tab 1.0
  @tab Minimum vector length standard extensions
  
! @item zvl256b
  @tab 1.0
  @tab Minimum vector length standard extensions
  
! @item zvl32768b
  @tab 1.0
! @tab zvl32768b extension
  
! @item zvl32b
  @tab 1.0
  @tab Minimum vector length standard extensions
  
! @item zvl4096b
  @tab 1.0
  @tab Minimum vector length standard extensions
  
! @item zvl512b
  @tab 1.0
  @tab Minimum vector length standard extensions
  
! @item zvl64b
  @tab 1.0
  @tab Minimum vector length standard extensions
  
! @item zvl65536b
  @tab 1.0
! @tab zvl65536b extension
  
! @item zvl8192b
  @tab 1.0
! @tab zvl8192b extension
  
! @item zhinx
  @tab 1.0
  @tab Half-precision floating-point in integer registers extension
  
! @item zhinxmin
  @tab 1.0
  @tab Minimal half-precision floating-point in integer registers extension
  
! @item sdtrig
  @tab 1.0
! @tab sdtrig extension
  
! @item sha
  @tab 1.0
  @tab The augmented hypervisor extension
  
! @item shcounterenw
  @tab 1.0
  @tab Support writeable enables for any supported counter
  
! @item shgatpa
  @tab 1.0
  @tab SvNNx4 mode supported for all modes supported by satp
  
! @item shlcofideleg
  @tab 1.0
  @tab Delegating LCOFI interrupts to VS-mode
  
! @item shtvala
  @tab 1.0
  @tab The htval register provides all needed values
  
! @item shvstvala
  @tab 1.0
  @tab The vstval register provides all needed values
  
! @item shvstvecd
  @tab 1.0
! @tab The vstvec register supports Direct mode
  
! @item shvsatpa
  @tab 1.0
  @tab The vsatp register supports all modes supported by satp
  
! @item smaia
  @tab 1.0
  @tab Advanced interrupt architecture extension
  
! @item smcntrpmf
  @tab 1.0
  @tab Cycle and instret privilege mode filtering
  
! @item smcsrind
  @tab 1.0
! @tab Machine-Level Indirect CSR Access
  
! @item smepmp
  @tab 1.0
! @tab PMP Enhancements for memory access and execution prevention on Machine mode
  
! @item smmpm
  @tab 1.0
! @tab smmpm extension
  
! @item smnpm
  @tab 1.0
! @tab smnpm extension
  
! @item smrnmi
  @tab 1.0
  @tab Resumable non-maskable interrupts
  
! @item smstateen
  @tab 1.0
  @tab State enable extension
  
! @item smdbltrp
  @tab 1.0
! @tab Double Trap Extensions
  
! @item ssaia
  @tab 1.0
! @tab Advanced interrupt architecture extension for supervisor-mode
  
! @item ssccptr
  @tab 1.0
  @tab Main memory supports page table reads
  
! @item sscofpmf
  @tab 1.0
! @tab Count overflow & filtering extension
  
! @item sscounterenw
  @tab 1.0
  @tab Support writeable enables for any supported counter
  
! @item sscsrind
  @tab 1.0
! @tab Supervisor-Level Indirect CSR Access
  
! @item ssnpm
  @tab 1.0
! @tab ssnpm extension
  
! @item sspm
  @tab 1.0
! @tab sspm extension
  
! @item ssstateen
  @tab 1.0
! @tab State-enable extension for supervisor-mode
  
! @item sstc
  @tab 1.0
  @tab Supervisor-mode timer interrupts extension
  
! @item sstvala
  @tab 1.0
  @tab Stval provides all needed values
  
! @item sstvecd
  @tab 1.0
! @tab Stvec supports Direct mode
  
! @item ssstrict
  @tab 1.0
! @tab ssstrict extension
  
! @item ssdbltrp
  @tab 1.0
! @tab Double Trap Extensions
  
! @item ssu64xl
  @tab 1.0
  @tab UXLEN=64 must be supported
  
! @item supm
  @tab 1.0
! @tab supm extension
  
! @item svinval
  @tab 1.0
  @tab Fine-grained address-translation cache invalidation extension
  
! @item svnapot
  @tab 1.0
  @tab NAPOT translation contiguity extension
  
! @item svpbmt
  @tab 1.0
  @tab Page-based memory types extension
  
! @item svvptc
  @tab 1.0
! @tab svvptc extension
  
! @item svadu
  @tab 1.0
! @tab Hardware Updating of A/D Bits extension
  
! @item svade
  @tab 1.0
  @tab Cause exception when hardware updating of A/D bits is disabled
  
! @item svbare
  @tab 1.0
  @tab Satp mode bare is supported
  
! @item xcvalu
  @tab 1.0
  @tab Core-V miscellaneous ALU extension
  
! @item xcvbi
  @tab 1.0
! @tab xcvbi extension
  
! @item xcvelw
  @tab 1.0
  @tab Core-V event load word extension
  
! @item xcvmac
  @tab 1.0
  @tab Core-V multiply-accumulate extension
  
! @item xcvsimd
  @tab 1.0
! @tab xcvsimd extension
  
! @item xsfcease
  @tab 1.0
! @tab xsfcease extension
  
! @item xsfvcp
  @tab 1.0
! @tab xsfvcp extension
  
! @item xsfvfnrclipxfqf
  @tab 1.0
! @tab xsfvfnrclipxfqf extension
  
! @item xsfvqmaccdod
  @tab 1.0
! @tab xsfvqmaccdod extension
  
! @item xsfvqmaccqoq
  @tab 1.0
! @tab xsfvqmaccqoq extension
  
! @item xtheadba
  @tab 1.0
  @tab T-head address calculation extension
  
! @item xtheadbb
  @tab 1.0
  @tab T-head basic bit-manipulation extension
  
! @item xtheadbs
  @tab 1.0
  @tab T-head single-bit instructions extension
  
! @item xtheadcmo
  @tab 1.0
  @tab T-head cache management operations extension
  
! @item xtheadcondmov
  @tab 1.0
  @tab T-head conditional move extension
  
! @item xtheadfmemidx
  @tab 1.0
  @tab T-head indexed memory operations for floating-point registers extension
  
! @item xtheadfmv
  @tab 1.0
  @tab T-head double floating-point high-bit data transmission extension
  
! @item xtheadint
  @tab 1.0
  @tab T-head acceleration interruption extension
  
! @item xtheadmac
  @tab 1.0
  @tab T-head multiply-accumulate extension
  
! @item xtheadmemidx
  @tab 1.0
  @tab T-head indexed memory operation extension
  
! @item xtheadmempair
  @tab 1.0
  @tab T-head two-GPR memory operation extension
  
! @item xtheadsync
  @tab 1.0
  @tab T-head multi-core synchronization extension
  
! @item xtheadvector
  @tab 1.0
! @tab xtheadvector extension
  
! @item xventanacondops
  @tab 1.0
  @tab Ventana integer conditional operations extension
  
! @item xmipscmov
  @tab 1.0
  @tab Mips conditional move extension
  
! @item xmipscbop
  @tab 1.0
! @tab Mips Prefetch extension
  
! @item xandesperf
  @tab 5.0
  @tab Andes performace extension
  
! @item xandesbfhcvt
  @tab 5.0
  @tab Andes bfloat16 conversion extension
  
! @item xandesvbfhcvt
  @tab 5.0
  @tab Andes vector bfloat16 conversion extension
  
! @item xandesvsintload
  @tab 5.0
  @tab Andes vector INT4 load extension
  
! @item xandesvpackfph
  @tab 5.0
  @tab Andes vector packed FP16 extension
  
! @item xandesvdot
  @tab 5.0
  @tab Andes vector dot product extension
  
! @item xsmtvdot
  @tab 1.0
  @tab SpacemiT vector dot product extension
  
--- 9,752 ----
  
  @c Please *DO NOT* edit manually.
  
! @multitable @columnfractions .25 .15 .6
  @headitem Extension Name @tab Supported Version @tab Description
  
! @item @samp{g}
  @tab -
! @tab General-purpose computing base extension; @samp{g} expands to
  @samp{i}, @samp{m}, @samp{a}, @samp{f}, @samp{d}, @samp{zicsr} and
  @samp{zifencei}.
  
! @item @samp{e}
  @tab 2.0
  @tab Reduced base integer extension
  
! @item @samp{i}
  @tab 2.0 2.1
  @tab Base integer extension
  
! @item @samp{m}
  @tab 2.0
  @tab Integer multiplication and division extension
  
! @item @samp{a}
  @tab 2.0 2.1
  @tab Atomic extension
  
! @item @samp{f}
  @tab 2.0 2.2
  @tab Single-precision floating-point extension
  
! @item @samp{d}
  @tab 2.0 2.2
  @tab Double-precision floating-point extension
  
! @item @samp{c}
  @tab 2.0
  @tab Compressed extension
  
! @item @samp{b}
  @tab 1.0
! @tab Standard extension for bit manipulation functions
  
! @item @samp{v}
  @tab 1.0
  @tab Vector extension
  
! @item @samp{h}
  @tab 1.0
  @tab Hypervisor extension
  
! @item @samp{zic64b}
  @tab 1.0
! @tab Cache block size is 64 bytes
  
! @item @samp{zicbom}
  @tab 1.0
  @tab Cache-block management extension
  
! @item @samp{zicbop}
  @tab 1.0
  @tab Cache-block prefetch extension
  
! @item @samp{zicboz}
  @tab 1.0
  @tab Cache-block zero extension
  
! @item @samp{ziccamoa}
  @tab 1.0
  @tab Main memory supports all atomics in A
  
! @item @samp{ziccif}
  @tab 1.0
  @tab Main memory supports instruction fetch with atomicity requirement
  
! @item @samp{zicclsm}
  @tab 1.0
  @tab Main memory supports misaligned loads/stores
  
! @item @samp{ziccrse}
  @tab 1.0
  @tab Main memory supports forward progress on LR/SC sequences
  
! @item @samp{zicfilp}
  @tab 1.0
! @tab Control-flow integrity landing pad extension
  
! @item @samp{zicfiss}
  @tab 1.0
! @tab Control-flow integrity shadow stack extension
  
! @item @samp{zicntr}
  @tab 2.0
  @tab Standard extension for base counters and timers
  
! @item @samp{zicond}
  @tab 1.0
  @tab Integer conditional operations extension
  
! @item @samp{zicsr}
  @tab 2.0
  @tab Control and status register access extension
  
! @item @samp{zifencei}
  @tab 2.0
  @tab Instruction-fetch fence extension
  
! @item @samp{zihintntl}
  @tab 1.0
  @tab Non-temporal locality hints extension
  
! @item @samp{zihintpause}
  @tab 2.0
  @tab Pause hint extension
  
! @item @samp{zihpm}
  @tab 2.0
  @tab Standard extension for hardware performance counters
  
! @item @samp{zimop}
  @tab 1.0
! @tab May-be-operations extension
  
! @item @samp{zilsd}
  @tab 1.0
! @tab Load/store pair instructions extension
  
! @item @samp{zmmul}
  @tab 1.0
  @tab Integer multiplication extension
  
! @item @samp{za128rs}
  @tab 1.0
  @tab Reservation set size of 128 bytes
  
! @item @samp{za64rs}
  @tab 1.0
  @tab Reservation set size of 64 bytes
  
! @item @samp{zaamo}
  @tab 1.0
! @tab Atomic memory operations extension
  
! @item @samp{zabha}
  @tab 1.0
! @tab Byte and halfword atomic memory operations extension
  
! @item @samp{zacas}
  @tab 1.0
! @tab Atomic compare-and-swap instructions extension
  
! @item @samp{zalrsc}
  @tab 1.0
! @tab Load-reserved/store-conditional subset of the A extension
  
! @item @samp{zawrs}
  @tab 1.0
  @tab Wait-on-reservation-set extension
  
! @item @samp{zama16b}
  @tab 1.0
! @tab Misaligned loads, stores, and AMOs that are fully contained within a naturally-aligned 16-byte boundary are atomic
  
! @item @samp{zfa}
  @tab 1.0
  @tab Additional floating-point extension
  
! @item @samp{zfbfmin}
  @tab 1.0
! @tab Minimal BF16 support extension
  
! @item @samp{zfh}
  @tab 1.0
  @tab Half-precision floating-point extension
  
! @item @samp{zfhmin}
  @tab 1.0
  @tab Minimal half-precision floating-point extension
  
! @item @samp{zfinx}
  @tab 1.0
  @tab Single-precision floating-point in integer registers extension
  
! @item @samp{zdinx}
  @tab 1.0
  @tab Double-precision floating-point in integer registers extension
  
! @item @samp{zca}
  @tab 1.0
  @tab Integer compressed instruction extension
  
! @item @samp{zcb}
  @tab 1.0
  @tab Simple compressed instruction extension
  
! @item @samp{zcd}
  @tab 1.0
  @tab Compressed double-precision floating point loads and stores extension
  
! @item @samp{zce}
  @tab 1.0
  @tab Compressed instruction extensions for embedded processors
  
! @item @samp{zcf}
  @tab 1.0
  @tab Compressed single-precision floating point loads and stores extension
  
! @item @samp{zcmop}
  @tab 1.0
! @tab Compressed may-be-operations extension
  
! @item @samp{zcmp}
  @tab 1.0
  @tab Compressed push pop extension
  
! @item @samp{zcmt}
  @tab 1.0
  @tab Table jump instruction extension
  
! @item @samp{zclsd}
  @tab 1.0
  @tab Compressed load/store pair instructions extension
  
! @item @samp{zba}
  @tab 1.0
  @tab Address calculation extension
  
! @item @samp{zbb}
  @tab 1.0
  @tab Basic bit manipulation extension
  
! @item @samp{zbc}
  @tab 1.0
  @tab Carry-less multiplication extension
  
! @item @samp{zbkb}
  @tab 1.0
  @tab Cryptography bit-manipulation extension
  
! @item @samp{zbkc}
  @tab 1.0
  @tab Cryptography carry-less multiply extension
  
! @item @samp{zbkx}
  @tab 1.0
  @tab Cryptography crossbar permutation extension
  
! @item @samp{zbs}
  @tab 1.0
  @tab Single-bit operation extension
  
! @item @samp{zk}
  @tab 1.0
  @tab Standard scalar cryptography extension
  
! @item @samp{zkn}
  @tab 1.0
  @tab NIST algorithm suite extension
  
! @item @samp{zknd}
  @tab 1.0
  @tab AES Decryption extension
  
! @item @samp{zkne}
  @tab 1.0
  @tab AES Encryption extension
  
! @item @samp{zknh}
  @tab 1.0
  @tab Hash function extension
  
! @item @samp{zkr}
  @tab 1.0
  @tab Entropy source extension
  
! @item @samp{zks}
  @tab 1.0
  @tab ShangMi algorithm suite extension
  
! @item @samp{zksed}
  @tab 1.0
  @tab SM4 block cipher extension
  
! @item @samp{zksh}
  @tab 1.0
  @tab SM3 hash function extension
  
! @item @samp{zkt}
  @tab 1.0
  @tab Data independent execution latency extension
  
! @item @samp{ztso}
  @tab 1.0
  @tab Total store ordering extension
  
! @item @samp{zvbb}
  @tab 1.0
  @tab Vector basic bit-manipulation extension
  
! @item @samp{zvbc}
  @tab 1.0
! @tab Vector carry-less multiplication extension
  
! @item @samp{zve32f}
  @tab 1.0
  @tab Vector extensions for embedded processors
  
! @item @samp{zve32x}
  @tab 1.0
  @tab Vector extensions for embedded processors
  
! @item @samp{zve64d}
  @tab 1.0
  @tab Vector extensions for embedded processors
  
! @item @samp{zve64f}
  @tab 1.0
  @tab Vector extensions for embedded processors
  
! @item @samp{zve64x}
  @tab 1.0
  @tab Vector extensions for embedded processors
  
! @item @samp{zvfbfmin}
  @tab 1.0
  @tab Vector BF16 converts extension
  
! @item @samp{zvfbfwma}
  @tab 1.0
! @tab Vector BF16 widening multiply/add extension
  
! @item @samp{zvfh}
  @tab 1.0
  @tab Vector half-precision floating-point extension
  
! @item @samp{zvfhmin}
  @tab 1.0
  @tab Vector minimal half-precision floating-point extension
  
! @item @samp{zvkb}
  @tab 1.0
  @tab Vector cryptography bit-manipulation extension
  
! @item @samp{zvkg}
  @tab 1.0
  @tab Vector GCM/GMAC extension
  
! @item @samp{zvkn}
  @tab 1.0
  @tab Vector NIST Algorithm Suite extension, @samp{zvkn} will expand to
  
! @item @samp{zvknc}
  @tab 1.0
! @tab Vector NIST Algorithm Suite with carry-less multiply extension, @samp{zvknc}
  
! @item @samp{zvkned}
  @tab 1.0
  @tab Vector AES block cipher extension
  
! @item @samp{zvkng}
  @tab 1.0
  @tab Vector NIST Algorithm Suite with GCM extension, @samp{zvkng} will expand
  
! @item @samp{zvknha}
  @tab 1.0
  @tab Vector SHA-2 secure hash extension
  
! @item @samp{zvknhb}
  @tab 1.0
  @tab Vector SHA-2 secure hash extension
  
! @item @samp{zvks}
  @tab 1.0
  @tab Vector ShangMi algorithm suite extension, @samp{zvks} will expand
  
! @item @samp{zvksc}
  @tab 1.0
! @tab Vector ShangMi algorithm suite with carry-less multiplication extension,
  
! @item @samp{zvksed}
  @tab 1.0
! @tab Vector SM4 block cipher extension
  
! @item @samp{zvksg}
  @tab 1.0
! @tab Vector ShangMi algorithm suite with GCM extension
  
! @item @samp{zvksh}
  @tab 1.0
! @tab Vector SM3 secure hash extension
  
! @item @samp{zvkt}
  @tab 1.0
  @tab Vector data independent execution latency extension
  
! @item @samp{zvl1024b}
  @tab 1.0
  @tab Minimum vector length standard extensions
  
! @item @samp{zvl128b}
  @tab 1.0
  @tab Minimum vector length standard extensions
  
! @item @samp{zvl16384b}
  @tab 1.0
! @tab Minimum vector length standard extension
  
! @item @samp{zvl2048b}
  @tab 1.0
  @tab Minimum vector length standard extensions
  
! @item @samp{zvl256b}
  @tab 1.0
  @tab Minimum vector length standard extensions
  
! @item @samp{zvl32768b}
  @tab 1.0
! @tab Minimum vector length standard extension
  
! @item @samp{zvl32b}
  @tab 1.0
  @tab Minimum vector length standard extensions
  
! @item @samp{zvl4096b}
  @tab 1.0
  @tab Minimum vector length standard extensions
  
! @item @samp{zvl512b}
  @tab 1.0
  @tab Minimum vector length standard extensions
  
! @item @samp{zvl64b}
  @tab 1.0
  @tab Minimum vector length standard extensions
  
! @item @samp{zvl65536b}
  @tab 1.0
! @tab Minimum vector length standard extension
  
! @item @samp{zvl8192b}
  @tab 1.0
! @tab Minimum vector length standard extension
  
! @item @samp{zhinx}
  @tab 1.0
  @tab Half-precision floating-point in integer registers extension
  
! @item @samp{zhinxmin}
  @tab 1.0
  @tab Minimal half-precision floating-point in integer registers extension
  
! @item @samp{sdtrig}
  @tab 1.0
! @tab Debug triggers extension
  
! @item @samp{sha}
  @tab 1.0
  @tab The augmented hypervisor extension
  
! @item @samp{shcounterenw}
  @tab 1.0
  @tab Support writeable enables for any supported counter
  
! @item @samp{shgatpa}
  @tab 1.0
  @tab SvNNx4 mode supported for all modes supported by satp
  
! @item @samp{shlcofideleg}
  @tab 1.0
  @tab Delegating LCOFI interrupts to VS-mode
  
! @item @samp{shtvala}
  @tab 1.0
  @tab The htval register provides all needed values
  
! @item @samp{shvstvala}
  @tab 1.0
  @tab The vstval register provides all needed values
  
! @item @samp{shvstvecd}
  @tab 1.0
! @tab The vstvec register supports direct mode
  
! @item @samp{shvsatpa}
  @tab 1.0
  @tab The vsatp register supports all modes supported by satp
  
! @item @samp{smaia}
  @tab 1.0
  @tab Advanced interrupt architecture extension
  
! @item @samp{smcntrpmf}
  @tab 1.0
  @tab Cycle and instret privilege mode filtering
  
! @item @samp{smcsrind}
  @tab 1.0
! @tab Machine-level indirect CSR access
  
! @item @samp{smepmp}
  @tab 1.0
! @tab PMP enhancements for memory access and execution prevention on machine mode
  
! @item @samp{smmpm}
  @tab 1.0
! @tab Supervisor-mode pointer masking extension
  
! @item @samp{smnpm}
  @tab 1.0
! @tab Supervisor-mode pointer masking extension
  
! @item @samp{smrnmi}
  @tab 1.0
  @tab Resumable non-maskable interrupts
  
! @item @samp{smstateen}
  @tab 1.0
  @tab State enable extension
  
! @item @samp{smdbltrp}
  @tab 1.0
! @tab Double trap extensions
  
! @item @samp{ssaia}
  @tab 1.0
! @tab Advanced interrupt architecture extension for supervisor mode
  
! @item @samp{ssccptr}
  @tab 1.0
  @tab Main memory supports page table reads
  
! @item @samp{sscofpmf}
  @tab 1.0
! @tab Count overflow and filtering extension
  
! @item @samp{sscounterenw}
  @tab 1.0
  @tab Support writeable enables for any supported counter
  
! @item @samp{sscsrind}
  @tab 1.0
! @tab Supervisor-mode indirect CSR access
  
! @item @samp{ssnpm}
  @tab 1.0
! @tab Supervisor-mode pointer masking extension
  
! @item @samp{sspm}
  @tab 1.0
! @tab Supervisor-mode pointer masking extension
  
! @item @samp{ssstateen}
  @tab 1.0
! @tab Supervisor-mode state-enable extension
  
! @item @samp{sstc}
  @tab 1.0
  @tab Supervisor-mode timer interrupts extension
  
! @item @samp{sstvala}
  @tab 1.0
  @tab Stval provides all needed values
  
! @item @samp{sstvecd}
  @tab 1.0
! @tab Stvec supports direct mode
  
! @item @samp{ssstrict}
  @tab 1.0
! @tab Unimplemented reserved encodings raise illegal instruction exceptions and no non-conforming extensions are present
  
! @item @samp{ssdbltrp}
  @tab 1.0
! @tab Double trap extensions
  
! @item @samp{ssu64xl}
  @tab 1.0
  @tab UXLEN=64 must be supported
  
! @item @samp{supm}
  @tab 1.0
! @tab User-mode pointer masking extension
  
! @item @samp{svinval}
  @tab 1.0
  @tab Fine-grained address-translation cache invalidation extension
  
! @item @samp{svnapot}
  @tab 1.0
  @tab NAPOT translation contiguity extension
  
! @item @samp{svpbmt}
  @tab 1.0
  @tab Page-based memory types extension
  
! @item @samp{svvptc}
  @tab 1.0
! @tab Extension for obviating memory-management instructions after marking PTEs valid
  
! @item @samp{svadu}
  @tab 1.0
! @tab Hardware updating of A/D bits extension
  
! @item @samp{svade}
  @tab 1.0
  @tab Cause exception when hardware updating of A/D bits is disabled
  
! @item @samp{svbare}
  @tab 1.0
  @tab Satp mode bare is supported
  
! @item @samp{xcvalu}
  @tab 1.0
  @tab Core-V miscellaneous ALU extension
  
! @item @samp{xcvbi}
  @tab 1.0
! @tab Core-V immediate branch extension
  
! @item @samp{xcvelw}
  @tab 1.0
  @tab Core-V event load word extension
  
! @item @samp{xcvmac}
  @tab 1.0
  @tab Core-V multiply-accumulate extension
  
! @item @samp{xcvsimd}
  @tab 1.0
! @tab Core-V SIMD extension
  
! @item @samp{xsfcease}
  @tab 1.0
! @tab SiFive CEASE instruction extension
  
! @item @samp{xsfvcp}
  @tab 1.0
! @tab SiFive VCIX vector coprocessor extension
  
! @item @samp{xsfvfnrclipxfqf}
  @tab 1.0
! @tab SiFive FP32-to-int8 ranged clip instructions
  
! @item @samp{xsfvqmaccdod}
  @tab 1.0
! @tab SiFive int8 matrix multiplication extension
  
! @item @samp{xsfvqmaccqoq}
  @tab 1.0
! @tab SiFive int8 matrix multiplication extension
  
! @item @samp{xtheadba}
  @tab 1.0
  @tab T-head address calculation extension
  
! @item @samp{xtheadbb}
  @tab 1.0
  @tab T-head basic bit-manipulation extension
  
! @item @samp{xtheadbs}
  @tab 1.0
  @tab T-head single-bit instructions extension
  
! @item @samp{xtheadcmo}
  @tab 1.0
  @tab T-head cache management operations extension
  
! @item @samp{xtheadcondmov}
  @tab 1.0
  @tab T-head conditional move extension
  
! @item @samp{xtheadfmemidx}
  @tab 1.0
  @tab T-head indexed memory operations for floating-point registers extension
  
! @item @samp{xtheadfmv}
  @tab 1.0
  @tab T-head double floating-point high-bit data transmission extension
  
! @item @samp{xtheadint}
  @tab 1.0
  @tab T-head acceleration interruption extension
  
! @item @samp{xtheadmac}
  @tab 1.0
  @tab T-head multiply-accumulate extension
  
! @item @samp{xtheadmemidx}
  @tab 1.0
  @tab T-head indexed memory operation extension
  
! @item @samp{xtheadmempair}
  @tab 1.0
  @tab T-head two-GPR memory operation extension
  
! @item @samp{xtheadsync}
  @tab 1.0
  @tab T-head multi-core synchronization extension
  
! @item @samp{xtheadvector}
  @tab 1.0
! @tab T-head vector extension
  
! @item @samp{xventanacondops}
  @tab 1.0
  @tab Ventana integer conditional operations extension
  
! @item @samp{xmipscmov}
  @tab 1.0
  @tab Mips conditional move extension
  
! @item @samp{xmipscbop}
  @tab 1.0
! @tab Mips prefetch extension
  
! @item @samp{xandesperf}
  @tab 5.0
  @tab Andes performace extension
  
! @item @samp{xandesbfhcvt}
  @tab 5.0
  @tab Andes bfloat16 conversion extension
  
! @item @samp{xandesvbfhcvt}
  @tab 5.0
  @tab Andes vector bfloat16 conversion extension
  
! @item @samp{xandesvsintload}
  @tab 5.0
  @tab Andes vector INT4 load extension
  
! @item @samp{xandesvpackfph}
  @tab 5.0
  @tab Andes vector packed FP16 extension
  
! @item @samp{xandesvdot}
  @tab 5.0
  @tab Andes vector dot product extension
  
! @item @samp{xsmtvdot}
  @tab 1.0
  @tab SpacemiT vector dot product extension
  
diff -Nrcpad gcc-16-20251221/gcc/fortran/ChangeLog gcc-16-20251228/gcc/fortran/ChangeLog
*** gcc-16-20251221/gcc/fortran/ChangeLog	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/fortran/ChangeLog	Sun Dec 28 22:32:07 2025
***************
*** 1,3 ****
--- 1,38 ----
+ 2025-12-22  Steve Kargl  <kargl@gcc.gnu.org>
+ 
+ 	PR fortran/122957
+ 	* interface.cc (gfc_match_generic_spec): Issue an error
+ 	so that users do not use -fdefault-integer-8 with DTIO.
+ 
+ 2025-12-22  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/123253
+ 	* expr.cc (gfc_check_vardef_context): Replace simple check by a
+ 	scan through the association targets for a dummy argument.
+ 
+ 2025-12-21  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/123201
+ 	* trans-expr.cc (conv_dummy_value): Convert string of length 1 to a
+ 	single character for passing as actual argument.
+ 
+ 2025-12-21  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	PR fortran/121472
+ 	* trans.cc (gfc_finalize_tree_expr): Replace !derived->components
+ 	check with TYPE_SIZE_UNIT check for zero-size types.
+ 
+ 2025-12-21  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	PR fortran/121475
+ 	* trans.cc (gfc_finalize_tree_expr): Add logic to allow the
+ 	function result to be resolved in resolve.cc
+ 	(generate_component_assignments).
+ 
+ 2025-12-21  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	* trans-openmp.cc (gfc_trans_omp_clauses): Add default to switch.
+ 
  2025-12-19  Jakub Jelinek  <jakub@redhat.com>
  
  	* dump-parse-tree.cc (show_omp_clauses): Add default: with
diff -Nrcpad gcc-16-20251221/gcc/fortran/expr.cc gcc-16-20251228/gcc/fortran/expr.cc
*** gcc-16-20251221/gcc/fortran/expr.cc	Sun Dec 21 22:32:06 2025
--- gcc-16-20251228/gcc/fortran/expr.cc	Sun Dec 28 22:32:07 2025
*************** gfc_check_vardef_context (gfc_expr* e, b
*** 6784,6797 ****
      }
  
    /* See if the INTENT(IN) check should apply to an ASSOCIATE target.  */
!   if (check_intentin
!       && sym->assoc
!       && sym->assoc->target
!       && sym->assoc->target->symtree
!       && sym->assoc->target->symtree->n.sym
!       && sym->assoc->target->symtree->n.sym->attr.dummy
!       && sym->assoc->target->symtree->n.sym->attr.intent != INTENT_IN)
!     check_intentin = false;
  
    if (check_intentin
        && (sym->attr.intent == INTENT_IN
--- 6784,6814 ----
      }
  
    /* See if the INTENT(IN) check should apply to an ASSOCIATE target.  */
!   if (check_intentin && sym->assoc && sym->assoc->target)
!     {
!       gfc_expr *target;
!       gfc_symbol *tsym;
! 
!       check_intentin = false;
! 
!       /* Walk through associate target chain to find a dummy argument.  */
!       for (target = sym->assoc->target; target; target = tsym->assoc->target)
! 	{
! 	  tsym = target->symtree ? target->symtree->n.sym : NULL;
! 
! 	  if (tsym == NULL)
! 	    break;
! 
! 	  if (tsym->attr.dummy)
! 	    {
! 	      check_intentin = (tsym->attr.intent == INTENT_IN);
! 	      break;
! 	    }
! 
! 	  if (tsym->assoc == NULL)
! 	    break;
! 	}
!     }
  
    if (check_intentin
        && (sym->attr.intent == INTENT_IN
diff -Nrcpad gcc-16-20251221/gcc/fortran/interface.cc gcc-16-20251228/gcc/fortran/interface.cc
*** gcc-16-20251221/gcc/fortran/interface.cc	Sun Dec 21 22:32:07 2025
--- gcc-16-20251228/gcc/fortran/interface.cc	Sun Dec 28 22:32:07 2025
*************** gfc_match_generic_spec (interface_type *
*** 211,221 ****
--- 211,225 ----
        *op = dtio_op (buffer);
        if (*op == INTRINSIC_FORMATTED)
  	{
+ 	  if (flag_default_integer)
+ 	    goto conflict;
  	  strcpy (name, gfc_code2string (dtio_procs, DTIO_RF));
  	  *type = INTERFACE_DTIO;
  	}
        if (*op == INTRINSIC_UNFORMATTED)
  	{
+ 	  if (flag_default_integer)
+ 	    goto conflict;
  	  strcpy (name, gfc_code2string (dtio_procs, DTIO_RUF));
  	  *type = INTERFACE_DTIO;
  	}
*************** gfc_match_generic_spec (interface_type *
*** 228,238 ****
--- 232,246 ----
        *op = dtio_op (buffer);
        if (*op == INTRINSIC_FORMATTED)
  	{
+ 	  if (flag_default_integer)
+ 	    goto conflict;
  	  strcpy (name, gfc_code2string (dtio_procs, DTIO_WF));
  	  *type = INTERFACE_DTIO;
  	}
        if (*op == INTRINSIC_UNFORMATTED)
  	{
+ 	  if (flag_default_integer)
+ 	    goto conflict;
  	  strcpy (name, gfc_code2string (dtio_procs, DTIO_WUF));
  	  *type = INTERFACE_DTIO;
  	}
*************** gfc_match_generic_spec (interface_type *
*** 250,255 ****
--- 258,268 ----
    *type = INTERFACE_NAMELESS;
    return MATCH_YES;
  
+ conflict:
+   gfc_error ("Sorry: -fdefault-integer-8 option is not supported with "
+ 	     "user-defined input/output at %C");
+   return MATCH_ERROR;
+ 
  syntax:
    gfc_error ("Syntax error in generic specification at %C");
    return MATCH_ERROR;
diff -Nrcpad gcc-16-20251221/gcc/gcov-io.h gcc-16-20251228/gcc/gcov-io.h
*** gcc-16-20251221/gcc/gcov-io.h	Sun Dec 21 22:32:07 2025
--- gcc-16-20251228/gcc/gcov-io.h	Sun Dec 28 22:32:07 2025
*************** typedef uint64_t gcov_type_unsigned;
*** 274,279 ****
--- 274,281 ----
  #define GCOV_TAG_OBJECT_SUMMARY  ((gcov_unsigned_t)0xa1000000)
  #define GCOV_TAG_OBJECT_SUMMARY_LENGTH (2 * GCOV_WORD_SIZE)
  #define GCOV_TAG_PROGRAM_SUMMARY ((gcov_unsigned_t)0xa3000000) /* Obsolete */
+ 
+ #define GCOV_TAG_AFDO_SUMMARY    ((gcov_unsigned_t)0xa8000000)
  #define GCOV_TAG_AFDO_FILE_NAMES ((gcov_unsigned_t)0xaa000000)
  #define GCOV_TAG_AFDO_FUNCTION ((gcov_unsigned_t)0xac000000)
  #define GCOV_TAG_AFDO_WORKING_SET ((gcov_unsigned_t)0xaf000000)
diff -Nrcpad gcc-16-20251221/gcc/ifcvt.cc gcc-16-20251228/gcc/ifcvt.cc
*** gcc-16-20251221/gcc/ifcvt.cc	Sun Dec 21 22:32:07 2025
--- gcc-16-20251228/gcc/ifcvt.cc	Sun Dec 28 22:32:07 2025
*************** noce_emit_cmove (struct noce_if_info *if
*** 2037,2071 ****
      return NULL_RTX;
  }
  
- /*  Emit a conditional zero, returning TARGET or NULL_RTX upon failure.
-     IF_INFO describes the if-conversion scenario under consideration.
-     CZERO_CODE selects the condition (EQ/NE).
-     NON_ZERO_OP is the nonzero operand of the conditional move
-     TARGET is the desired output register.  */
- 
- static rtx
- noce_emit_czero (struct noce_if_info *if_info, enum rtx_code czero_code,
- 		 rtx non_zero_op, rtx target)
- {
-   machine_mode mode = GET_MODE (target);
-   rtx cond_op0 = XEXP (if_info->cond, 0);
-   rtx czero_cond
-     = gen_rtx_fmt_ee (czero_code, GET_MODE (cond_op0), cond_op0, const0_rtx);
-   rtx if_then_else
-     = gen_rtx_IF_THEN_ELSE (mode, czero_cond, const0_rtx, non_zero_op);
-   rtx set = gen_rtx_SET (target, if_then_else);
- 
-   rtx_insn *insn = make_insn_raw (set);
- 
-   if (recog_memoized (insn) >= 0)
-     {
-       add_insn (insn);
-       return target;
-     }
- 
-   return NULL_RTX;
- }
- 
  /* Try only simple constants and registers here.  More complex cases
     are handled in noce_try_cmove_arith after noce_try_store_flag_arith
     has had a go at it.  */
--- 2037,2042 ----
*************** get_base_reg (rtx exp)
*** 3141,3306 ****
  {
    if (REG_P (exp))
      return exp;
  
    return NULL_RTX;
  }
  
! /*  Check if IF-BB and THEN-BB satisfy the condition for conditional zero
!     based if conversion, returning TRUE if satisfied otherwise FALSE.
! 
      IF_INFO describes the if-conversion scenario under consideration.
-     COMMON_PTR points to the common REG of canonicalized IF_INFO->A and
-     IF_INFO->B.
-     CZERO_CODE_PTR points to the comparison code to use in czero RTX.
-     A_PTR points to the A expression of canonicalized IF_INFO->A.
-     TO_REPLACE points to the RTX to be replaced by czero RTX destnation.  */
  
! static bool
! noce_bbs_ok_for_cond_zero_arith (struct noce_if_info *if_info, rtx *common_ptr,
! 				 rtx *bin_exp_ptr,
! 				 enum rtx_code *czero_code_ptr, rtx *a_ptr,
! 				 rtx **to_replace)
  {
!   rtx common = NULL_RTX;
    rtx cond = if_info->cond;
!   rtx a = copy_rtx (if_info->a);
!   rtx b = copy_rtx (if_info->b);
!   rtx bin_op1 = NULL_RTX;
!   enum rtx_code czero_code = UNKNOWN;
    bool reverse = false;
-   rtx op0, op1, bin_exp;
  
!   if (!noce_simple_bbs (if_info))
      return false;
  
!   /* COND must be EQ or NE comparision of a reg and 0.  */
!   if (GET_CODE (cond) != NE && GET_CODE (cond) != EQ)
      return false;
    if (!REG_P (XEXP (cond, 0)) || !rtx_equal_p (XEXP (cond, 1), const0_rtx))
      return false;
  
    /* Canonicalize x = y : (y op z) to x = (y op z) : y.  */
    if (REG_P (a) && noce_cond_zero_binary_op_supported (b))
      {
        std::swap (a, b);
!       reverse = !reverse;
      }
  
    /* Check if x = (y op z) : y is supported by czero based ifcvt.  */
!   if (!(noce_cond_zero_binary_op_supported (a) && REG_P (b)))
!     return false;
  
!   bin_exp = a;
  
    /* Canonicalize x = (z op y) : y to x = (y op z) : y */
!   op1 = get_base_reg (XEXP (bin_exp, 1));
!   if (op1 && rtx_equal_p (op1, b) && COMMUTATIVE_ARITH_P (bin_exp))
!     std::swap (XEXP (bin_exp, 0), XEXP (bin_exp, 1));
! 
!   op0 = get_base_reg (XEXP (bin_exp, 0));
!   if (op0 && rtx_equal_p (op0, b))
      {
!       common = b;
!       bin_op1 = XEXP (bin_exp, 1);
!       czero_code = (reverse ^ (GET_CODE (bin_exp) == AND))
! 		     ? noce_reversed_cond_code (if_info)
! 		     : GET_CODE (cond);
      }
-   else
-     return false;
- 
-   if (czero_code == UNKNOWN)
-     return false;
- 
-   if (REG_P (bin_op1))
-     *to_replace = &XEXP (bin_exp, 1);
-   else
-     return false;
- 
-   *common_ptr = common;
-   *bin_exp_ptr = bin_exp;
-   *czero_code_ptr = czero_code;
-   *a_ptr = a;
- 
-   return true;
- }
- 
- /*  Try to covert if-then-else with conditional zero,
-     returning TURE on success or FALSE on failure.
-     IF_INFO describes the if-conversion scenario under consideration.  */
  
! static int
! noce_try_cond_zero_arith (struct noce_if_info *if_info)
! {
!   rtx target, rtmp, a;
!   rtx_insn *seq;
!   machine_mode mode = GET_MODE (if_info->x);
!   rtx common = NULL_RTX;
!   enum rtx_code czero_code = UNKNOWN;
!   rtx bin_exp = NULL_RTX;
!   enum rtx_code bin_code = UNKNOWN;
!   rtx non_zero_op = NULL_RTX;
!   rtx *to_replace = NULL;
  
!   if (!noce_bbs_ok_for_cond_zero_arith (if_info, &common, &bin_exp, &czero_code,
! 					&a, &to_replace))
!     return false;
  
    start_sequence ();
  
!   bin_code = GET_CODE (bin_exp);
  
!   if (bin_code == AND)
!     {
!       rtmp = gen_reg_rtx (mode);
!       noce_emit_move_insn (rtmp, a);
  
!       target = noce_emit_czero (if_info, czero_code, common, if_info->x);
!       if (!target)
! 	{
! 	  end_sequence ();
! 	  return false;
! 	}
  
!       target = expand_simple_binop (mode, IOR, rtmp, target, if_info->x, 0,
  				    OPTAB_WIDEN);
-       if (!target)
- 	{
- 	  end_sequence ();
- 	  return false;
- 	}
  
-       if (target != if_info->x)
- 	noce_emit_move_insn (if_info->x, target);
      }
    else
      {
!       non_zero_op = *to_replace;
!       /* If x is used in both input and out like x = c ? x + z : x,
! 	 use a new reg to avoid modifying x  */
!       if (common && rtx_equal_p (common, if_info->x))
! 	target = gen_reg_rtx (mode);
!       else
! 	target = if_info->x;
  
!       target = noce_emit_czero (if_info, czero_code, non_zero_op, target);
!       if (!target || !to_replace)
! 	{
! 	  end_sequence ();
! 	  return false;
! 	}
  
!       *to_replace = target;
!       noce_emit_move_insn (if_info->x, a);
!     }
  
    seq = end_ifcvt_sequence (if_info);
    if (!seq || !targetm.noce_conversion_profitable_p (seq, if_info))
!     return false;
  
    emit_insn_before_setloc (seq, if_info->jump, INSN_LOCATION (if_info->insn_a));
    if_info->transform_name = "noce_try_cond_zero_arith";
    return true;
  }
  
  /* Optimize away "if (x & C) x |= C" and similar bit manipulation
--- 3112,3247 ----
  {
    if (REG_P (exp))
      return exp;
+   else if (SUBREG_P (exp))
+     return SUBREG_REG (exp);
  
    return NULL_RTX;
  }
  
! /*  Try to covert if-then-else with conditional zero,
!     returning TURE on success or FALSE on failure.
      IF_INFO describes the if-conversion scenario under consideration.
  
!     It verifies the branch structure on left and transforms it into branchless
!     sequence on the right, with a backend provided conditional zero or orig for
!     operand z. If true, tmp is z, 0 otherwise (y op 0 is same as y for most op).
! 
!       if (cond)		|  tmp = cond ? z : 0
! 	x = y op z	|    x = y op tmp
!       else		|
! 	x = y		|
! 
!     AND is special as it needs to be handled differently.
! 
!       tmp = !cond ? y : 0
! 	x = (y & z) | tmp
!   */
! 
! static int
! noce_try_cond_zero_arith (struct noce_if_info *if_info)
  {
!   rtx target, a, b, a_op0, a_op1;
    rtx cond = if_info->cond;
!   rtx_insn *seq;
!   rtx_code op;
!   machine_mode mode = GET_MODE (if_info->x);
    bool reverse = false;
  
!   /* Scalar integral modes are only supported here.
!      Could support scalar floating point but that
!      would be only with -ffast-math and might
!      be worse than a branch.  */
!   if (!SCALAR_INT_MODE_P (mode))
      return false;
  
!   if (!noce_simple_bbs (if_info))
      return false;
+ 
    if (!REG_P (XEXP (cond, 0)) || !rtx_equal_p (XEXP (cond, 1), const0_rtx))
      return false;
  
+   a = copy_rtx (if_info->a);
+   b = copy_rtx (if_info->b);
+ 
    /* Canonicalize x = y : (y op z) to x = (y op z) : y.  */
    if (REG_P (a) && noce_cond_zero_binary_op_supported (b))
      {
+       std::swap (if_info->cond, if_info->rev_cond);
        std::swap (a, b);
!       reverse = true;
      }
  
    /* Check if x = (y op z) : y is supported by czero based ifcvt.  */
!   else if (!(noce_cond_zero_binary_op_supported (a) && REG_P (b)))
!     goto fail;
  
!   op = GET_CODE (a);
  
    /* Canonicalize x = (z op y) : y to x = (y op z) : y */
!   a_op1 = get_base_reg (XEXP (a, 1));
!   if (a_op1 && rtx_equal_p (a_op1, b) && COMMUTATIVE_ARITH_P (a))
      {
!       std::swap (XEXP (a, 0), XEXP (a, 1));
!       a_op1 = get_base_reg (XEXP (a, 1));
      }
  
!   if (a_op1 == NULL_RTX)
!     goto fail;
  
!   /* Ensure the cond is of form: x = (y op z) : y */
!   a_op0 = get_base_reg (XEXP (a, 0));
!   if (!(a_op0 && rtx_equal_p (a_op0, b)))
!     goto fail;
  
    start_sequence ();
  
!   target = gen_reg_rtx (GET_MODE (XEXP (a, op != AND)));
  
!   /* AND requires !cond, instead we swap ops around.  */
!   target = noce_emit_cmove (if_info, target, GET_CODE (if_info->cond),
! 			    XEXP (if_info->cond, 0), XEXP (if_info->cond, 1),
! 			    op != AND ? XEXP (a, 1) : const0_rtx,
! 			    op != AND ? const0_rtx : XEXP (a, 0));
!   if (!target)
!     goto end_seq_n_fail;
  
!   if (op == AND)
!     {
!       rtx a_bin = gen_reg_rtx (mode);
!       noce_emit_move_insn (a_bin, a);
  
!       target = expand_simple_binop (mode, IOR, a_bin, target, if_info->x, 0,
  				    OPTAB_WIDEN);
  
      }
    else
      {
!       target = expand_simple_binop (mode, op, a_op0, target, if_info->x, 0,
! 				    OPTAB_WIDEN);
!     }
  
!   if (!target)
!     goto end_seq_n_fail;
  
!   if (target != if_info->x)
!     noce_emit_move_insn (if_info->x, target);
  
    seq = end_ifcvt_sequence (if_info);
    if (!seq || !targetm.noce_conversion_profitable_p (seq, if_info))
!     goto fail;
  
    emit_insn_before_setloc (seq, if_info->jump, INSN_LOCATION (if_info->insn_a));
    if_info->transform_name = "noce_try_cond_zero_arith";
    return true;
+ 
+ end_seq_n_fail:
+   end_sequence ();
+ 
+ fail:
+   if (reverse)
+     std::swap (if_info->cond, if_info->rev_cond);
+ 
+   return false;
  }
  
  /* Optimize away "if (x & C) x |= C" and similar bit manipulation
diff -Nrcpad gcc-16-20251221/gcc/lto/ChangeLog gcc-16-20251228/gcc/lto/ChangeLog
*** gcc-16-20251221/gcc/lto/ChangeLog	Sun Dec 21 22:32:07 2025
--- gcc-16-20251228/gcc/lto/ChangeLog	Sun Dec 28 22:32:07 2025
***************
*** 1,3 ****
--- 1,7 ----
+ 2025-12-23  Dhruv Chawla  <dhruvc@nvidia.com>
+ 
+ 	* Make-lang.in: Bump GCOV version to 3.
+ 
  2025-12-19  Jakub Jelinek  <jakub@redhat.com>
  
  	* lto-common.cc (lto_resolution_read): Fix comment typo, explicitely
diff -Nrcpad gcc-16-20251221/gcc/lto/Make-lang.in gcc-16-20251228/gcc/lto/Make-lang.in
*** gcc-16-20251221/gcc/lto/Make-lang.in	Sun Dec 21 22:32:07 2025
--- gcc-16-20251228/gcc/lto/Make-lang.in	Sun Dec 28 22:32:07 2025
*************** create_fdas_for_lto1: ../stage1-gcc/lto1
*** 115,121 ****
  	  echo $$perf_path; \
  	  if [ -f $$perf_path ]; then \
  	    profile_name=lto1_$$component_in_prev.fda; \
! 	    $(CREATE_GCOV) -binary ../stage1-gcc/lto1$(exeext) -gcov $$profile_name -profile $$perf_path -gcov_version 2 || exit 1; \
  	  fi; \
  	done;
  
--- 115,121 ----
  	  echo $$perf_path; \
  	  if [ -f $$perf_path ]; then \
  	    profile_name=lto1_$$component_in_prev.fda; \
! 	    $(CREATE_GCOV) -binary ../stage1-gcc/lto1$(exeext) -gcov $$profile_name -profile $$perf_path -gcov_version 3 || exit 1; \
  	  fi; \
  	done;
  
*************** create_fdas_for_lto1: ../stage1-gcc/lto1
*** 125,131 ****
  	  echo $$perf_path; \
  	  if [ -f $$perf_path ]; then \
  	    profile_name=lto1_$$component_in_prev_target.fda; \
! 	    $(CREATE_GCOV) -binary ../prev-gcc/lto1$(exeext) -gcov $$profile_name -profile $$perf_path -gcov_version 2 || exit 1; \
  	  fi; \
  	done;
  
--- 125,131 ----
  	  echo $$perf_path; \
  	  if [ -f $$perf_path ]; then \
  	    profile_name=lto1_$$component_in_prev_target.fda; \
! 	    $(CREATE_GCOV) -binary ../prev-gcc/lto1$(exeext) -gcov $$profile_name -profile $$perf_path -gcov_version 3 || exit 1; \
  	  fi; \
  	done;
  
diff -Nrcpad gcc-16-20251221/gcc/rust/ChangeLog gcc-16-20251228/gcc/rust/ChangeLog
*** gcc-16-20251221/gcc/rust/ChangeLog	Sun Dec 21 22:32:07 2025
--- gcc-16-20251228/gcc/rust/ChangeLog	Sun Dec 28 22:32:07 2025
***************
*** 1,3 ****
--- 1,480 ----
+ 2025-12-23  lenny.chiadmi-delage  <lenny.chiadmi-delage@epita.fr>
+ 
+ 	* checks/errors/feature/rust-feature-gate.cc (FeatureGate::visit): Added
+ 	handling for META_ITEM type attributes to properly process feature gates.
+ 	* expand/rust-cfg-strip.cc (expand_cfg_attrs): Fixed a bug where
+ 	newly inserted cfg_attr attributes wheren't being reprocessed,
+ 	and cleaned up the loop increment logic.
+ 
+ 2025-12-23  Lucas Ly Ba  <lucas.ly-ba@outlook.com>
+ 
+ 	* checks/lints/unused/rust-unused-checker.cc (UnusedChecker::UnusedChecker):
+ 	Add warning for identifier pattern and field ident pattern in struct
+ 	(UnusedChecker::visit): Add methods.
+ 	* checks/lints/unused/rust-unused-checker.h: Same here.
+ 	* checks/lints/unused/rust-unused-collector.cc (UnusedCollector::UnusedCollector):
+ 	Collect unused mut variables
+ 	(UnusedCollector::visit): Add methods.
+ 	* checks/lints/unused/rust-unused-collector.h: Same here.
+ 	* checks/lints/unused/rust-unused-context.cc (UnusedContext::remove_assign):
+ 	Add methods for unused mut set.
+ 	(UnusedContext::add_mut): Same here.
+ 	(UnusedContext::remove_mut): Same here.
+ 	(UnusedContext::is_mut_used): Same here.
+ 	* checks/lints/unused/rust-unused-context.h: Same here.
+ 
+ 2025-12-23  Lucas Ly Ba  <lucas.ly-ba@outlook.com>
+ 
+ 	* Make-lang.in: Compile the right files.
+ 	* checks/lints/unused-var/rust-unused-var-checker.cc: Move to...
+ 	* checks/lints/unused/rust-unused-checker.cc: ...here.
+ 	* checks/lints/unused-var/rust-unused-var-checker.h: Move to...
+ 	* checks/lints/unused/rust-unused-checker.h: ...here.
+ 	* checks/lints/unused-var/rust-unused-var-collector.cc: Move to...
+ 	* checks/lints/unused/rust-unused-collector.cc: ...here.
+ 	* checks/lints/unused-var/rust-unused-var-collector.h: Move to...
+ 	* checks/lints/unused/rust-unused-collector.h: ...here.
+ 	* checks/lints/unused-var/rust-unused-var-context.cc: Move to...
+ 	* checks/lints/unused/rust-unused-context.cc: ...here.
+ 	* checks/lints/unused-var/rust-unused-var-context.h: Move to...
+ 	* checks/lints/unused/rust-unused-context.h: ...here.
+ 	* rust-session-manager.cc (Session::compile_crate): Call the right method.
+ 
+ 2025-12-23  Lucas Ly Ba  <lucas.ly-ba@outlook.com>
+ 
+ 	* checks/lints/unused-var/rust-unused-var-checker.cc (UnusedVarChecker::visit):
+ 	Change unused name warning to unused variable warning.
+ 	* checks/lints/unused-var/rust-unused-var-collector.cc (UnusedVarCollector::visit):
+ 	Remove useless methods.
+ 	* checks/lints/unused-var/rust-unused-var-collector.h: Same here.
+ 	* checks/lints/unused-var/rust-unused-var-context.cc (UnusedVarContext::add_variable):
+ 	Add used variables to set.
+ 	(UnusedVarContext::mark_used): Remove method.
+ 	(UnusedVarContext::is_variable_used):
+ 	Check if the set contains the hir id linked to a variable.
+ 	(UnusedVarContext::as_string): Refactor method for new set.
+ 	* checks/lints/unused-var/rust-unused-var-context.h: Refactor methods.
+ 	* lang.opt: Change description for unused check flag.
+ 
+ 2025-12-23  Lucas Ly Ba  <lucas.ly-ba@outlook.com>
+ 
+ 	* checks/lints/unused-var/rust-unused-var-checker.cc (UnusedVarChecker):
+ 	Implement unused assignments warning.
+ 	(UnusedVarChecker::go): Remove unique pointer unused var context.
+ 	(UnusedVarChecker::visit): Visit AssignExpr in HIR default visitor.
+ 	* checks/lints/unused-var/rust-unused-var-checker.h: Add visit method.
+ 	* checks/lints/unused-var/rust-unused-var-collector.cc (UnusedVarCollector):
+ 	Collect warnings for assignments.
+ 	(UnusedVarCollector::visit): Visit AssignExpr in HIR default visitor.
+ 	* checks/lints/unused-var/rust-unused-var-collector.h: Add visit method.
+ 	* checks/lints/unused-var/rust-unused-var-context.cc (UnusedVarContext::add_assign):
+ 	Add assignment in map.
+ 	(UnusedVarContext::remove_assign): Remove assignment in map.
+ 	(UnusedVarContext::is_variable_assigned): Check if a variable is assigned.
+ 	* checks/lints/unused-var/rust-unused-var-context.h: Add a map to stock assignments.
+ 
+ 2025-12-23  Ryutaro Okada  <1015ryu88@gmail.com>
+ 
+ 	* Make-lang.in: Add new files rules in Makefile.
+ 	* lang.opt: Add new flag.
+ 	* rust-session-manager.cc (Session::compile_crate): Execute new variable checker.
+ 	* checks/lints/unused-var/rust-unused-var-checker.cc (UnusedVarChecker): Implement unused
+ 	variable checker.
+ 	* checks/lints/unused-var/rust-unused-var-checker.h (UnusedVarChecker): Implement unused
+ 	variable checker.
+ 	* checks/lints/unused-var/rust-unused-var-collector.cc (UnusedVarCollector): Implement
+ 	unused variable collector.
+ 	* checks/lints/unused-var/rust-unused-var-collector.h (UnusedVarCollector): Implement
+ 	unused variable collector.
+ 	* checks/lints/unused-var/rust-unused-var-context.cc (UnusedVarContext): Implement
+ 	unused variable context.
+ 	* checks/lints/unused-var/rust-unused-var-context.h (UnusedVarContext): Implement unused
+ 	variable context.
+ 
+ 2025-12-23  Harishankar  <harishankarpp7@gmail.com>
+ 
+ 	* backend/rust-compile-expr.cc (CompileExpr::visit): Always
+ 	evaluate predicate expression before checking for never type
+ 	to preserve side effects in while loop conditions.
+ 	* typecheck/rust-hir-type-check-expr.cc: Update handling of break/continue.
+ 
+ 2025-12-23  Lucas Ly Ba  <lucas.ly-ba@outlook.com>
+ 
+ 	* backend/rust-compile-implitem.h: Change as_string to to_string.
+ 	* backend/rust-compile-type.cc (TyTyResolveCompile::visit): Likewise.
+ 	* checks/errors/rust-readonly-check.cc (ReadonlyChecker::check_variable): Likewise.
+ 	* hir/rust-hir-dump.cc (Dump::do_vis_item): Likewise.
+ 	(Dump::do_pathpattern): Likewise.
+ 	(Dump::do_typepathsegment): Likewise.
+ 	(Dump::do_baseloopexpr): Likewise.
+ 	(Dump::do_struct): Likewise.
+ 	(Dump::do_traitfunctiondecl): Likewise.
+ 	(Dump::do_externalitem): Likewise.
+ 	(Dump::do_tuplefield): Likewise.
+ 	(Dump::do_structfield): Likewise.
+ 	(Dump::visit): Likewise.
+ 	* hir/tree/rust-hir-bound-abstract.h: Likewise.
+ 	* hir/tree/rust-hir-bound.h: Likewise.
+ 	* hir/tree/rust-hir-expr-abstract.h: Likewise.
+ 	* hir/tree/rust-hir-expr.cc (OffsetOf::as_string): Likewise.
+ 	(OffsetOf::to_string): Likewise.
+ 	* hir/tree/rust-hir-expr.h: Likewise.
+ 	* hir/tree/rust-hir-generic-param.cc (ConstGenericParam::as_string): Likewise.
+ 	(ConstGenericParam::to_string): Likewise.
+ 	* hir/tree/rust-hir-generic-param.h: Likewise.
+ 	* hir/tree/rust-hir-item.h: Likewise.
+ 	* hir/tree/rust-hir-path.cc (PathInExpression::is_self): Likewise.
+ 	* hir/tree/rust-hir-path.h: Likewise.
+ 	* hir/tree/rust-hir-pattern-abstract.h: Likewise.
+ 	* hir/tree/rust-hir-pattern.h: Likewise.
+ 	* hir/tree/rust-hir-stmt.h: Likewise.
+ 	* hir/tree/rust-hir-trait-bound.h: Likewise.
+ 	* hir/tree/rust-hir-type-abstract.h: Likewise.
+ 	* hir/tree/rust-hir-type.h: Likewise.
+ 	* hir/tree/rust-hir-visibility.h: Likewise.
+ 	* hir/tree/rust-hir.cc (Crate::as_string): Likewise.
+ 	(Crate::to_string): Likewise.
+ 	(Visibility::as_string): Likewise.
+ 	(Visibility::to_string): Likewise.
+ 	(VisItem::as_string): Likewise.
+ 	(VisItem::to_string): Likewise.
+ 	(Item::as_string): Likewise.
+ 	(Item::to_string): Likewise.
+ 	(Module::as_string): Likewise.
+ 	(Module::to_string): Likewise.
+ 	(StaticItem::as_string): Likewise.
+ 	(StaticItem::to_string): Likewise.
+ 	(ExternCrate::as_string): Likewise.
+ 	(ExternCrate::to_string): Likewise.
+ 	(TupleStruct::as_string): Likewise.
+ 	(TupleStruct::to_string): Likewise.
+ 	(ConstantItem::as_string): Likewise.
+ 	(ConstantItem::to_string): Likewise.
+ 	(ImplBlock::as_string): Likewise.
+ 	(ImplBlock::to_string): Likewise.
+ 	(StructStruct::as_string): Likewise.
+ 	(StructStruct::to_string): Likewise.
+ 	(UseDeclaration::as_string): Likewise.
+ 	(UseDeclaration::to_string): Likewise.
+ 	(UseTreeGlob::as_string): Likewise.
+ 	(UseTreeGlob::to_string): Likewise.
+ 	(UseTreeList::as_string): Likewise.
+ 	(UseTreeList::to_string): Likewise.
+ 	(UseTreeRebind::as_string): Likewise.
+ 	(UseTreeRebind::to_string): Likewise.
+ 	(Enum::as_string): Likewise.
+ 	(Enum::to_string): Likewise.
+ 	(Trait::as_string): Likewise.
+ 	(Trait::to_string): Likewise.
+ 	(Union::as_string): Likewise.
+ 	(Union::to_string): Likewise.
+ 	(Function::as_string): Likewise.
+ 	(Function::to_string): Likewise.
+ 	(WhereClause::as_string): Likewise.
+ 	(WhereClause::to_string): Likewise.
+ 	(BlockExpr::as_string): Likewise.
+ 	(BlockExpr::to_string): Likewise.
+ 	(AnonConst::as_string): Likewise.
+ 	(AnonConst::to_string): Likewise.
+ 	(ConstBlock::as_string): Likewise.
+ 	(ConstBlock::to_string): Likewise.
+ 	(TypeAlias::as_string): Likewise.
+ 	(TypeAlias::to_string): Likewise.
+ 	(ExternBlock::as_string): Likewise.
+ 	(ExternBlock::to_string): Likewise.
+ 	(PathInExpression::as_string): Likewise.
+ 	(PathInExpression::to_string): Likewise.
+ 	(ExprStmt::as_string): Likewise.
+ 	(ExprStmt::to_string): Likewise.
+ 	(ClosureParam::as_string): Likewise.
+ 	(ClosureParam::to_string): Likewise.
+ 	(ClosureExpr::as_string): Likewise.
+ 	(ClosureExpr::to_string): Likewise.
+ 	(PathPattern::as_string): Likewise.
+ 	(PathPattern::to_string): Likewise.
+ 	(QualifiedPathType::as_string): Likewise.
+ 	(QualifiedPathType::to_string): Likewise.
+ 	(QualifiedPathInExpression::as_string): Likewise.
+ 	(QualifiedPathInExpression::to_string): Likewise.
+ 	(BorrowExpr::as_string): Likewise.
+ 	(BorrowExpr::to_string): Likewise.
+ 	(ReturnExpr::as_string): Likewise.
+ 	(ReturnExpr::to_string): Likewise.
+ 	(GroupedExpr::as_string): Likewise.
+ 	(GroupedExpr::to_string): Likewise.
+ 	(RangeToExpr::as_string): Likewise.
+ 	(RangeToExpr::to_string): Likewise.
+ 	(ContinueExpr::as_string): Likewise.
+ 	(ContinueExpr::to_string): Likewise.
+ 	(NegationExpr::as_string): Likewise.
+ 	(NegationExpr::to_string): Likewise.
+ 	(RangeFromExpr::as_string): Likewise.
+ 	(RangeFromExpr::to_string): Likewise.
+ 	(RangeFullExpr::as_string): Likewise.
+ 	(RangeFullExpr::to_string): Likewise.
+ 	(ArrayIndexExpr::as_string): Likewise.
+ 	(ArrayIndexExpr::to_string): Likewise.
+ 	(AssignmentExpr::as_string): Likewise.
+ 	(AssignmentExpr::to_string): Likewise.
+ 	(CompoundAssignmentExpr::as_string): Likewise.
+ 	(CompoundAssignmentExpr::to_string): Likewise.
+ 	(AsyncBlockExpr::as_string): Likewise.
+ 	(AsyncBlockExpr::to_string): Likewise.
+ 	(ComparisonExpr::as_string): Likewise.
+ 	(ComparisonExpr::to_string): Likewise.
+ 	(MethodCallExpr::as_string): Likewise.
+ 	(MethodCallExpr::to_string): Likewise.
+ 	(TupleIndexExpr::as_string): Likewise.
+ 	(TupleIndexExpr::to_string): Likewise.
+ 	(DereferenceExpr::as_string): Likewise.
+ 	(DereferenceExpr::to_string): Likewise.
+ 	(FieldAccessExpr::as_string): Likewise.
+ 	(FieldAccessExpr::to_string): Likewise.
+ 	(LazyBooleanExpr::as_string): Likewise.
+ 	(LazyBooleanExpr::to_string): Likewise.
+ 	(RangeFromToExpr::as_string): Likewise.
+ 	(RangeFromToExpr::to_string): Likewise.
+ 	(RangeToInclExpr::as_string): Likewise.
+ 	(RangeToInclExpr::to_string): Likewise.
+ 	(UnsafeBlockExpr::as_string): Likewise.
+ 	(UnsafeBlockExpr::to_string): Likewise.
+ 	(IfExpr::as_string): Likewise.
+ 	(IfExpr::to_string): Likewise.
+ 	(IfExprConseqElse::as_string): Likewise.
+ 	(IfExprConseqElse::to_string): Likewise.
+ 	(RangeFromToInclExpr::as_string): Likewise.
+ 	(RangeFromToInclExpr::to_string): Likewise.
+ 	(ErrorPropagationExpr::as_string): Likewise.
+ 	(ErrorPropagationExpr::to_string): Likewise.
+ 	(ArithmeticOrLogicalExpr::as_string): Likewise.
+ 	(ArithmeticOrLogicalExpr::to_string): Likewise.
+ 	(CallExpr::as_string): Likewise.
+ 	(CallExpr::to_string): Likewise.
+ 	(WhileLoopExpr::as_string): Likewise.
+ 	(WhileLoopExpr::to_string): Likewise.
+ 	(WhileLetLoopExpr::as_string): Likewise.
+ 	(WhileLetLoopExpr::to_string): Likewise.
+ 	(LoopExpr::as_string): Likewise.
+ 	(LoopExpr::to_string): Likewise.
+ 	(ArrayExpr::as_string): Likewise.
+ 	(ArrayExpr::to_string): Likewise.
+ 	(AwaitExpr::as_string): Likewise.
+ 	(AwaitExpr::to_string): Likewise.
+ 	(BreakExpr::as_string): Likewise.
+ 	(BreakExpr::to_string): Likewise.
+ 	(LoopLabel::as_string): Likewise.
+ 	(LoopLabel::to_string): Likewise.
+ 	(MatchArm::as_string): Likewise.
+ 	(MatchArm::to_string): Likewise.
+ 	(MatchCase::as_string): Likewise.
+ 	(MatchCase::to_string): Likewise.
+ 	(MatchCaseBlockExpr::as_string): Likewise.
+ 	(MatchCaseBlockExpr::to_string): Likewise.
+ 	(MatchCaseExpr::as_string): Likewise.
+ 	(MatchCaseExpr::to_string): Likewise.
+ 	(MatchExpr::as_string): Likewise.
+ 	(MatchExpr::to_string): Likewise.
+ 	(TupleExpr::as_string): Likewise.
+ 	(TupleExpr::to_string): Likewise.
+ 	(FunctionParam::as_string): Likewise.
+ 	(FunctionParam::to_string): Likewise.
+ 	(FunctionQualifiers::as_string): Likewise.
+ 	(FunctionQualifiers::to_string): Likewise.
+ 	(TraitBound::as_string): Likewise.
+ 	(TraitBound::to_string): Likewise.
+ 	(LifetimeParam::as_string): Likewise.
+ 	(LifetimeParam::to_string): Likewise.
+ 	(QualifiedPathInType::as_string): Likewise.
+ 	(QualifiedPathInType::to_string): Likewise.
+ 	(Lifetime::as_string): Likewise.
+ 	(Lifetime::to_string): Likewise.
+ 	(TypePath::as_string): Likewise.
+ 	(TypePath::to_string): Likewise.
+ 	(TypeParam::as_string): Likewise.
+ 	(TypeParam::to_string): Likewise.
+ 	(PathPattern::convert_to_simple_path): Likewise.
+ 	(TypePath::as_simple_path): Likewise.
+ 	(PathExprSegment::as_string): Likewise.
+ 	(PathExprSegment::to_string): Likewise.
+ 	(GenericArgs::as_string): Likewise.
+ 	(GenericArgs::to_string): Likewise.
+ 	(GenericArgsBinding::as_string): Likewise.
+ 	(GenericArgsBinding::to_string): Likewise.
+ 	(RangePattern::as_string): Likewise.
+ 	(RangePattern::to_string): Likewise.
+ 	(RangePatternBoundLiteral::as_string): Likewise.
+ 	(RangePatternBoundLiteral::to_string): Likewise.
+ 	(SlicePatternItemsNoRest::as_string): Likewise.
+ 	(SlicePatternItemsNoRest::to_string): Likewise.
+ 	(SlicePatternItemsHasRest::as_string): Likewise.
+ 	(SlicePatternItemsHasRest::to_string): Likewise.
+ 	(SlicePattern::as_string): Likewise.
+ 	(SlicePattern::to_string): Likewise.
+ 	(AltPattern::as_string): Likewise.
+ 	(AltPattern::to_string): Likewise.
+ 	(TuplePatternItemsNoRest::as_string): Likewise.
+ 	(TuplePatternItemsNoRest::to_string): Likewise.
+ 	(TuplePatternItemsHasRest::as_string): Likewise.
+ 	(TuplePatternItemsHasRest::to_string): Likewise.
+ 	(TuplePattern::as_string): Likewise.
+ 	(TuplePattern::to_string): Likewise.
+ 	(StructPatternField::as_string): Likewise.
+ 	(StructPatternField::to_string): Likewise.
+ 	(StructPatternFieldIdent::as_string): Likewise.
+ 	(StructPatternFieldIdent::to_string): Likewise.
+ 	(StructPatternFieldTuplePat::as_string): Likewise.
+ 	(StructPatternFieldTuplePat::to_string): Likewise.
+ 	(StructPatternFieldIdentPat::as_string): Likewise.
+ 	(StructPatternFieldIdentPat::to_string): Likewise.
+ 	(StructPatternElements::as_string): Likewise.
+ 	(StructPatternElements::to_string): Likewise.
+ 	(StructPattern::as_string): Likewise.
+ 	(StructPattern::to_string): Likewise.
+ 	(LiteralPattern::as_string): Likewise.
+ 	(LiteralPattern::to_string): Likewise.
+ 	(ReferencePattern::as_string): Likewise.
+ 	(ReferencePattern::to_string): Likewise.
+ 	(IdentifierPattern::as_string): Likewise.
+ 	(IdentifierPattern::to_string): Likewise.
+ 	(TupleStructItemsNoRest::as_string): Likewise.
+ 	(TupleStructItemsNoRest::to_string): Likewise.
+ 	(TupleStructItemsHasRest::as_string): Likewise.
+ 	(TupleStructItemsHasRest::to_string): Likewise.
+ 	(TupleStructPattern::as_string): Likewise.
+ 	(TupleStructPattern::to_string): Likewise.
+ 	(LetStmt::as_string): Likewise.
+ 	(LetStmt::to_string): Likewise.
+ 	(Expr::as_string): Likewise.
+ 	(Expr::to_string): Likewise.
+ 	(InferredType::as_string): Likewise.
+ 	(InferredType::to_string): Likewise.
+ 	(TypeCastExpr::as_string): Likewise.
+ 	(TypeCastExpr::to_string): Likewise.
+ 	(ImplTraitType::as_string): Likewise.
+ 	(ImplTraitType::to_string): Likewise.
+ 	(ReferenceType::as_string): Likewise.
+ 	(ReferenceType::to_string): Likewise.
+ 	(RawPointerType::as_string): Likewise.
+ 	(RawPointerType::to_string): Likewise.
+ 	(TraitObjectType::as_string): Likewise.
+ 	(TraitObjectType::to_string): Likewise.
+ 	(BareFunctionType::as_string): Likewise.
+ 	(BareFunctionType::to_string): Likewise.
+ 	(TypePathSegmentGeneric::as_string): Likewise.
+ 	(TypePathSegmentGeneric::to_string): Likewise.
+ 	(TypePathFunction::as_string): Likewise.
+ 	(TypePathFunction::to_string): Likewise.
+ 	(TypePathSegmentFunction::as_string): Likewise.
+ 	(TypePathSegmentFunction::to_string): Likewise.
+ 	(ArrayType::as_string): Likewise.
+ 	(ArrayType::to_string): Likewise.
+ 	(SliceType::as_string): Likewise.
+ 	(SliceType::to_string): Likewise.
+ 	(TupleType::as_string): Likewise.
+ 	(TupleType::to_string): Likewise.
+ 	(StructExpr::as_string): Likewise.
+ 	(StructExpr::to_string): Likewise.
+ 	(StructExprStruct::as_string): Likewise.
+ 	(StructExprStruct::to_string): Likewise.
+ 	(StructBase::as_string): Likewise.
+ 	(StructBase::to_string): Likewise.
+ 	(StructExprFieldWithVal::as_string): Likewise.
+ 	(StructExprFieldWithVal::to_string): Likewise.
+ 	(StructExprFieldIdentifierValue::as_string): Likewise.
+ 	(StructExprFieldIdentifierValue::to_string): Likewise.
+ 	(StructExprFieldIndexValue::as_string): Likewise.
+ 	(StructExprFieldIndexValue::to_string): Likewise.
+ 	(StructExprStructFields::as_string): Likewise.
+ 	(StructExprStructFields::to_string): Likewise.
+ 	(EnumItem::as_string): Likewise.
+ 	(EnumItem::to_string): Likewise.
+ 	(EnumItemTuple::as_string): Likewise.
+ 	(EnumItemTuple::to_string): Likewise.
+ 	(TupleField::as_string): Likewise.
+ 	(TupleField::to_string): Likewise.
+ 	(EnumItemStruct::as_string): Likewise.
+ 	(EnumItemStruct::to_string): Likewise.
+ 	(StructField::as_string): Likewise.
+ 	(StructField::to_string): Likewise.
+ 	(EnumItemDiscriminant::as_string): Likewise.
+ 	(EnumItemDiscriminant::to_string): Likewise.
+ 	(ExternalItem::as_string): Likewise.
+ 	(ExternalItem::to_string): Likewise.
+ 	(ExternalStaticItem::as_string): Likewise.
+ 	(ExternalStaticItem::to_string): Likewise.
+ 	(ExternalFunctionItem::as_string): Likewise.
+ 	(ExternalFunctionItem::to_string): Likewise.
+ 	(ExternalTypeItem::as_string): Likewise.
+ 	(ExternalTypeItem::to_string): Likewise.
+ 	(NamedFunctionParam::as_string): Likewise.
+ 	(NamedFunctionParam::to_string): Likewise.
+ 	(attr.as_string): Likewise.
+ 	(attr.to_string): Likewise.
+ 	(TraitItemFunc::as_string): Likewise.
+ 	(TraitItemFunc::to_string): Likewise.
+ 	(TraitFunctionDecl::as_string): Likewise.
+ 	(TraitFunctionDecl::to_string): Likewise.
+ 	(TraitItemConst::as_string): Likewise.
+ 	(TraitItemConst::to_string): Likewise.
+ 	(TraitItemType::as_string): Likewise.
+ 	(TraitItemType::to_string): Likewise.
+ 	(SelfParam::as_string): Likewise.
+ 	(SelfParam::to_string): Likewise.
+ 	(ArrayElemsCopied::as_string): Likewise.
+ 	(ArrayElemsCopied::to_string): Likewise.
+ 	(LifetimeWhereClauseItem::as_string): Likewise.
+ 	(LifetimeWhereClauseItem::to_string): Likewise.
+ 	(TypeBoundWhereClauseItem::as_string): Likewise.
+ 	(TypeBoundWhereClauseItem::to_string): Likewise.
+ 	(ArrayElemsValues::as_string): Likewise.
+ 	(ArrayElemsValues::to_string): Likewise.
+ 	(MaybeNamedParam::as_string): Likewise.
+ 	(MaybeNamedParam::to_string): Likewise.
+ 	* hir/tree/rust-hir.h: Likewise.
+ 	* rust-session-manager.cc (Session::dump_hir): Likewise.
+ 	* typecheck/rust-hir-dot-operator.cc (MethodResolver::select): Likewise.
+ 	* typecheck/rust-hir-path-probe.cc (PathProbeType::visit): Likewise.
+ 	(PathProbeType::process_enum_item_for_candiates): Likewise.
+ 	* typecheck/rust-hir-path-probe.h: Likewise.
+ 	* typecheck/rust-hir-type-check-expr.cc (emit_ambiguous_resolution_error): Likewise.
+ 	(TypeCheckExpr::visit): Likewise.
+ 	(TypeCheckExpr::resolve_fn_trait_call): Likewise.
+ 	* typecheck/rust-hir-type-check-path.cc (TypeCheckExpr::visit): Likewise.
+ 	(TypeCheckExpr::resolve_root_path): Likewise.
+ 	* typecheck/rust-hir-type-check-pattern.cc (TypeCheckPattern::visit): Likewise.
+ 	* typecheck/rust-hir-type-check-type.cc (TypeCheckType::visit): Likewise.
+ 	(TypeCheckType::resolve_root_path): Likewise.
+ 	(ResolveWhereClauseItem::visit): Likewise.
+ 	* typecheck/rust-tyty-bounds.cc: Likewise.
+ 	* typecheck/rust-tyty.cc (VariantDef::as_string): Likewise.
+ 	(FnType::as_string): Likewise.
+ 
+ 2025-12-23  Ashwani Kumar Kamal  <ashwanikamal.im421@gmail.com>
+ 
+ 	* util/rust-attributes.cc: New function to handle deprecated attribute checking
+ 
+ 2025-12-23  Owen Avery  <powerboat9.gamer@gmail.com>
+ 
+ 	* ast/rust-ast-visitor.cc (DefaultASTVisitor::visit): Visit the
+ 	generic parameters of TraitItemType.
+ 	* expand/rust-expand-visitor.h (is_derive): Remove defunct
+ 	function declaration.
+ 	* hir/rust-ast-lower-item.cc (ASTLoweringItem::visit): Remove
+ 	unnecessary copy.
+ 	* resolve/rust-name-resolver.cc (Resolver::Resolver): Skip
+ 	generating builtins for the old resolver.
+ 	* util/rust-hir-map.cc (Mappings::get_next_node_id): Detect node
+ 	id exhaustion.
+ 	* util/rust-mapping-common.h (MAX_NODEID): Add macro definition.
+ 
+ 2025-12-23  lenny.chiadmi-delage  <lenny.chiadmi-delage@epita.fr>
+ 
+ 	* ast/rust-path.cc (TypePath::to_trait_bound): Check if in
+ 	parenthesis.
+ 	* hir/tree/rust-hir-type.cc (ParenthesisedType::to_trait_bound):
+ 	Likewise.
+ 	* hir/tree/rust-hir.cc (TypePath::to_trait_bound): Likewise.
+ 
  2025-12-17  Pierre-Emmanuel Patry  <pierre-emmanuel.patry@embecosm.com>
  
  	* parse/rust-parse-impl-lexer.cc: Fix included file name.
diff -Nrcpad gcc-16-20251221/gcc/rust/Make-lang.in gcc-16-20251228/gcc/rust/Make-lang.in
*** gcc-16-20251221/gcc/rust/Make-lang.in	Sun Dec 21 22:32:07 2025
--- gcc-16-20251228/gcc/rust/Make-lang.in	Sun Dec 28 22:32:07 2025
*************** GRS_OBJS = \
*** 200,205 ****
--- 200,208 ----
      rust/rust-const-checker.o \
      rust/rust-lint-marklive.o \
      rust/rust-lint-unused-var.o \
+     rust/rust-unused-checker.o \
+     rust/rust-unused-collector.o \
+     rust/rust-unused-context.o \
      rust/rust-readonly-check.o \
      rust/rust-hir-type-check-path.o \
      rust/rust-unsafe-checker.o \
*************** RUST_INCLUDES = -I $(srcdir)/rust \
*** 432,437 ****
--- 435,441 ----
  	-I $(srcdir)/rust/typecheck \
  	-I $(srcdir)/rust/checks/lints \
  	-I $(srcdir)/rust/checks/errors \
+     -I $(srcdir)/rust/checks/lints/unused \
  	-I $(srcdir)/rust/checks/errors/privacy \
  	-I $(srcdir)/rust/checks/errors/borrowck \
  	-I $(srcdir)/rust/checks/errors/feature \
*************** rust/%.o: rust/checks/lints/%.cc
*** 502,507 ****
--- 506,516 ----
  	$(COMPILE) $(RUST_CXXFLAGS) $(RUST_INCLUDES) $<
  	$(POSTCOMPILE)
  
+ # build unused checking pass files in rust folder
+ rust/%.o: rust/checks/lints/unused/%.cc
+ 	$(COMPILE) $(RUST_CXXFLAGS) $(RUST_INCLUDES) $<
+ 	$(POSTCOMPILE)
+ 
  # build rust/checks/errors files in rust folder
  rust/%.o: rust/checks/errors/%.cc
  	$(COMPILE) $(RUST_CXXFLAGS) $(RUST_INCLUDES) $<
diff -Nrcpad gcc-16-20251221/gcc/rust/ast/rust-ast-visitor.cc gcc-16-20251228/gcc/rust/ast/rust-ast-visitor.cc
*** gcc-16-20251221/gcc/rust/ast/rust-ast-visitor.cc	Sun Dec 21 22:32:07 2025
--- gcc-16-20251228/gcc/rust/ast/rust-ast-visitor.cc	Sun Dec 28 22:32:07 2025
*************** void
*** 1029,1034 ****
--- 1029,1036 ----
  DefaultASTVisitor::visit (AST::TraitItemType &item)
  {
    visit_outer_attrs (item);
+   for (auto &generic : item.get_generic_params ())
+     visit (generic);
    for (auto &bound : item.get_type_param_bounds ())
      visit (bound);
  }
diff -Nrcpad gcc-16-20251221/gcc/rust/ast/rust-path.cc gcc-16-20251228/gcc/rust/ast/rust-path.cc
*** gcc-16-20251221/gcc/rust/ast/rust-path.cc	Sun Dec 21 22:32:07 2025
--- gcc-16-20251228/gcc/rust/ast/rust-path.cc	Sun Dec 28 22:32:07 2025
*************** TypePath::make_debug_string () const
*** 290,295 ****
--- 290,300 ----
  TraitBound *
  TypePath::to_trait_bound (bool in_parens) const
  {
+   // If already in parentheses, don't convert to trait bound
+   // This ensures (TypePath) stays as ParenthesisedType in the parser
+   if (in_parens)
+     return nullptr;
+ 
    return new TraitBound (TypePath (*this), get_locus (), in_parens);
  }
  
diff -Nrcpad gcc-16-20251221/gcc/rust/backend/rust-compile-expr.cc gcc-16-20251228/gcc/rust/backend/rust-compile-expr.cc
*** gcc-16-20251221/gcc/rust/backend/rust-compile-expr.cc	Sun Dec 21 22:32:07 2025
--- gcc-16-20251228/gcc/rust/backend/rust-compile-expr.cc	Sun Dec 28 22:32:07 2025
*************** CompileExpr::visit (HIR::WhileLoopExpr &
*** 803,809 ****
    ctx->add_statement (loop_begin_label_decl);
    ctx->push_loop_begin_label (loop_begin_label);
  
!   tree condition = CompileExpr::Compile (expr.get_predicate_expr (), ctx);
    tree exit_condition = fold_build1_loc (expr.get_locus (), TRUTH_NOT_EXPR,
  					 boolean_type_node, condition);
    tree exit_expr = Backend::exit_expression (exit_condition, expr.get_locus ());
--- 803,820 ----
    ctx->add_statement (loop_begin_label_decl);
    ctx->push_loop_begin_label (loop_begin_label);
  
!   HIR::Expr &predicate = expr.get_predicate_expr ();
!   TyTy::BaseType *predicate_type = nullptr;
!   bool ok
!     = ctx->get_tyctx ()->lookup_type (predicate.get_mappings ().get_hirid (),
! 				      &predicate_type);
!   rust_assert (ok && predicate_type != nullptr);
!   tree condition = CompileExpr::Compile (predicate, ctx);
!   if (predicate_type->get_kind () == TyTy::TypeKind::NEVER)
!     {
!       ctx->add_statement (condition);
!       condition = boolean_true_node;
!     }
    tree exit_condition = fold_build1_loc (expr.get_locus (), TRUTH_NOT_EXPR,
  					 boolean_type_node, condition);
    tree exit_expr = Backend::exit_expression (exit_condition, expr.get_locus ());
diff -Nrcpad gcc-16-20251221/gcc/rust/backend/rust-compile-implitem.h gcc-16-20251228/gcc/rust/backend/rust-compile-implitem.h
*** gcc-16-20251221/gcc/rust/backend/rust-compile-implitem.h	Sun Dec 21 22:32:07 2025
--- gcc-16-20251228/gcc/rust/backend/rust-compile-implitem.h	Sun Dec 28 22:32:07 2025
*************** public:
*** 56,62 ****
  
      if (is_query_mode && compiler.reference == error_mark_node)
        rust_internal_error_at (ref_locus, "failed to compile trait item: %s",
! 			      item->as_string ().c_str ());
  
      return compiler.reference;
    }
--- 56,62 ----
  
      if (is_query_mode && compiler.reference == error_mark_node)
        rust_internal_error_at (ref_locus, "failed to compile trait item: %s",
! 			      item->to_string ().c_str ());
  
      return compiler.reference;
    }
diff -Nrcpad gcc-16-20251221/gcc/rust/backend/rust-compile-type.cc gcc-16-20251228/gcc/rust/backend/rust-compile-type.cc
*** gcc-16-20251221/gcc/rust/backend/rust-compile-type.cc	Sun Dec 21 22:32:07 2025
--- gcc-16-20251228/gcc/rust/backend/rust-compile-type.cc	Sun Dec 28 22:32:07 2025
*************** TyTyResolveCompile::visit (const TyTy::F
*** 244,250 ****
        auto compiled_param_type
  	= TyTyResolveCompile::compile (ctx, param_tyty, trait_object_mode);
  
!       parameters.emplace_back (param_pair.get_pattern ().as_string (),
  			       compiled_param_type,
  			       ctx->get_mappings ().lookup_location (
  				 param_tyty->get_ref ()));
--- 244,250 ----
        auto compiled_param_type
  	= TyTyResolveCompile::compile (ctx, param_tyty, trait_object_mode);
  
!       parameters.emplace_back (param_pair.get_pattern ().to_string (),
  			       compiled_param_type,
  			       ctx->get_mappings ().lookup_location (
  				 param_tyty->get_ref ()));
diff -Nrcpad gcc-16-20251221/gcc/rust/checks/errors/feature/rust-feature-gate.cc gcc-16-20251228/gcc/rust/checks/errors/feature/rust-feature-gate.cc
*** gcc-16-20251221/gcc/rust/checks/errors/feature/rust-feature-gate.cc	Sun Dec 21 22:32:07 2025
--- gcc-16-20251228/gcc/rust/checks/errors/feature/rust-feature-gate.cc	Sun Dec 28 22:32:07 2025
*************** FeatureGate::visit (AST::Crate &crate)
*** 69,74 ****
--- 69,90 ----
  		    valid_lib_features.emplace (name_str, item->get_locus ());
  		}
  	    }
+ 	  else if (type == AST::AttrInput::AttrInputType::META_ITEM)
+ 	    {
+ 	      const auto &meta_item
+ 		= static_cast<const AST::AttrInputMetaItemContainer &> (
+ 		  attr_input);
+ 	      for (const auto &item : meta_item.get_items ())
+ 		{
+ 		  const auto &name_str = item->as_string ();
+ 
+ 		  // TODO: detect duplicates
+ 		  if (auto tname = Feature::as_name (name_str))
+ 		    valid_lang_features.insert (tname.value ());
+ 		  else
+ 		    valid_lib_features.emplace (name_str, item->get_locus ());
+ 		}
+ 	    }
  	}
      }
  
diff -Nrcpad gcc-16-20251221/gcc/rust/checks/errors/rust-readonly-check.cc gcc-16-20251228/gcc/rust/checks/errors/rust-readonly-check.cc
*** gcc-16-20251221/gcc/rust/checks/errors/rust-readonly-check.cc	Sun Dec 21 22:32:07 2025
--- gcc-16-20251228/gcc/rust/checks/errors/rust-readonly-check.cc	Sun Dec 28 22:32:07 2025
*************** ReadonlyChecker::check_variable (Identif
*** 121,127 ****
    auto hir_id = pattern->get_mappings ().get_hirid ();
    if (already_assigned_variables.count (hir_id) > 0)
      rust_error_at (assigned_loc, "assignment of read-only variable '%s'",
! 		   pattern->as_string ().c_str ());
    already_assigned_variables.insert (hir_id);
  }
  
--- 121,127 ----
    auto hir_id = pattern->get_mappings ().get_hirid ();
    if (already_assigned_variables.count (hir_id) > 0)
      rust_error_at (assigned_loc, "assignment of read-only variable '%s'",
! 		   pattern->to_string ().c_str ());
    already_assigned_variables.insert (hir_id);
  }
  
diff -Nrcpad gcc-16-20251221/gcc/rust/checks/lints/unused/rust-unused-checker.cc gcc-16-20251228/gcc/rust/checks/lints/unused/rust-unused-checker.cc
*** gcc-16-20251221/gcc/rust/checks/lints/unused/rust-unused-checker.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/rust/checks/lints/unused/rust-unused-checker.cc	Sun Dec 28 22:32:07 2025
***************
*** 0 ****
--- 1,121 ----
+ // Copyright (C) 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 "rust-unused-checker.h"
+ #include "rust-hir-expr.h"
+ #include "rust-hir-item.h"
+ 
+ #include "options.h"
+ #include "rust-keyword-values.h"
+ 
+ namespace Rust {
+ namespace Analysis {
+ UnusedChecker::UnusedChecker ()
+   : nr_context (
+     Resolver2_0::ImmutableNameResolutionContext::get ().resolver ()),
+     mappings (Analysis::Mappings::get ()), unused_context (UnusedContext ())
+ {}
+ void
+ UnusedChecker::go (HIR::Crate &crate)
+ {
+   UnusedCollector collector (unused_context);
+   collector.go (crate);
+   for (auto &item : crate.get_items ())
+     item->accept_vis (*this);
+ }
+ 
+ void
+ UnusedChecker::visit (HIR::ConstantItem &item)
+ {
+   std::string var_name = item.get_identifier ().as_string ();
+   auto id = item.get_mappings ().get_hirid ();
+   if (!unused_context.is_variable_used (id) && var_name[0] != '_')
+     rust_warning_at (item.get_locus (), OPT_Wunused_variable,
+ 		     "unused variable %qs",
+ 		     item.get_identifier ().as_string ().c_str ());
+ }
+ 
+ void
+ UnusedChecker::visit (HIR::StaticItem &item)
+ {
+   std::string var_name = item.get_identifier ().as_string ();
+   auto id = item.get_mappings ().get_hirid ();
+   if (!unused_context.is_variable_used (id) && var_name[0] != '_')
+     rust_warning_at (item.get_locus (), OPT_Wunused_variable,
+ 		     "unused variable %qs",
+ 		     item.get_identifier ().as_string ().c_str ());
+ }
+ 
+ void
+ UnusedChecker::visit (HIR::TraitItemFunc &item)
+ {
+   // TODO: check trait item functions if they are not derived.
+ }
+ void
+ UnusedChecker::visit (HIR::IdentifierPattern &pattern)
+ {
+   std::string var_name = pattern.get_identifier ().as_string ();
+   auto id = pattern.get_mappings ().get_hirid ();
+   if (!unused_context.is_variable_used (id)
+       && var_name != Values::Keywords::SELF && var_name[0] != '_')
+     rust_warning_at (pattern.get_locus (), OPT_Wunused_variable,
+ 		     "unused variable %qs",
+ 		     pattern.get_identifier ().as_string ().c_str ());
+ 
+   if (pattern.is_mut () && !unused_context.is_mut_used (id)
+       && var_name != Values::Keywords::SELF && var_name[0] != '_')
+     rust_warning_at (pattern.get_locus (), OPT_Wunused_variable,
+ 		     "unused mut %qs",
+ 		     pattern.get_identifier ().as_string ().c_str ());
+ }
+ void
+ 
+ UnusedChecker::visit (HIR::AssignmentExpr &expr)
+ 
+ {
+   const auto &lhs = expr.get_lhs ();
+   auto var_name = lhs.to_string ();
+   NodeId ast_node_id = lhs.get_mappings ().get_nodeid ();
+   NodeId def_id = nr_context.lookup (ast_node_id).value ();
+   HirId id = mappings.lookup_node_to_hir (def_id).value ();
+   if (unused_context.is_variable_assigned (id, lhs.get_mappings ().get_hirid ())
+       && var_name[0] != '_')
+     rust_warning_at (lhs.get_locus (), OPT_Wunused_variable,
+ 		     "unused assignment %qs", var_name.c_str ());
+ }
+ 
+ void
+ UnusedChecker::visit (HIR::StructPatternFieldIdent &pattern)
+ {
+   std::string var_name = pattern.get_identifier ().as_string ();
+   auto id = pattern.get_mappings ().get_hirid ();
+   if (!unused_context.is_variable_used (id)
+       && var_name != Values::Keywords::SELF && var_name[0] != '_')
+     rust_warning_at (pattern.get_locus (), OPT_Wunused_variable,
+ 		     "unused variable %qs",
+ 		     pattern.get_identifier ().as_string ().c_str ());
+ 
+   if (pattern.is_mut () && !unused_context.is_mut_used (id)
+       && var_name != Values::Keywords::SELF && var_name[0] != '_')
+     rust_warning_at (pattern.get_locus (), OPT_Wunused_variable,
+ 		     "unused mut %qs",
+ 		     pattern.get_identifier ().as_string ().c_str ());
+ }
+ 
+ } // namespace Analysis
+ } // namespace Rust
diff -Nrcpad gcc-16-20251221/gcc/rust/checks/lints/unused/rust-unused-checker.h gcc-16-20251228/gcc/rust/checks/lints/unused/rust-unused-checker.h
*** gcc-16-20251221/gcc/rust/checks/lints/unused/rust-unused-checker.h	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/rust/checks/lints/unused/rust-unused-checker.h	Sun Dec 28 22:32:07 2025
***************
*** 0 ****
--- 1,48 ----
+ // Copyright (C) 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 "rust-hir-expr.h"
+ #include "rust-hir-item.h"
+ #include "rust-hir-pattern.h"
+ #include "rust-hir-visitor.h"
+ #include "rust-unused-collector.h"
+ #include "rust-immutable-name-resolution-context.h"
+ 
+ namespace Rust {
+ namespace Analysis {
+ class UnusedChecker : public HIR::DefaultHIRVisitor
+ {
+ public:
+   UnusedChecker ();
+   void go (HIR::Crate &crate);
+ 
+ private:
+   const Resolver2_0::NameResolutionContext &nr_context;
+   Analysis::Mappings &mappings;
+   UnusedContext unused_context;
+ 
+   using HIR::DefaultHIRVisitor::visit;
+   virtual void visit (HIR::TraitItemFunc &decl) override;
+   virtual void visit (HIR::ConstantItem &item) override;
+   virtual void visit (HIR::StaticItem &item) override;
+   virtual void visit (HIR::IdentifierPattern &identifier) override;
+   virtual void visit (HIR::AssignmentExpr &identifier) override;
+   virtual void visit (HIR::StructPatternFieldIdent &identifier) override;
+ };
+ } // namespace Analysis
+ } // namespace Rust
diff -Nrcpad gcc-16-20251221/gcc/rust/checks/lints/unused/rust-unused-collector.cc gcc-16-20251228/gcc/rust/checks/lints/unused/rust-unused-collector.cc
*** gcc-16-20251221/gcc/rust/checks/lints/unused/rust-unused-collector.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/rust/checks/lints/unused/rust-unused-collector.cc	Sun Dec 28 22:32:07 2025
***************
*** 0 ****
--- 1,92 ----
+ // Copyright (C) 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 "rust-unused-collector.h"
+ #include "rust-hir-expr.h"
+ #include "rust-hir-full-decls.h"
+ #include "rust-hir-item.h"
+ #include "rust-hir-path.h"
+ #include "rust-hir-pattern.h"
+ #include "rust-immutable-name-resolution-context.h"
+ 
+ namespace Rust {
+ namespace Analysis {
+ UnusedCollector::UnusedCollector (UnusedContext &context)
+   : nr_context (
+     Resolver2_0::ImmutableNameResolutionContext::get ().resolver ()),
+     mappings (Analysis::Mappings::get ()), unused_context (context)
+ {}
+ void
+ UnusedCollector::go (HIR::Crate &crate)
+ {
+   for (auto &item : crate.get_items ())
+     item->accept_vis (*this);
+ }
+ 
+ void
+ UnusedCollector::visit (HIR::PathInExpression &expr)
+ {
+   mark_path_used (expr);
+   walk (expr);
+ }
+ 
+ void
+ UnusedCollector::visit (HIR::QualifiedPathInExpression &expr)
+ {
+   mark_path_used (expr);
+   walk (expr);
+ }
+ 
+ void
+ UnusedCollector::visit (HIR::StructExprFieldIdentifier &ident)
+ {
+   mark_path_used (ident);
+   walk (ident);
+ }
+ 
+ void
+ UnusedCollector::visit (HIR::AssignmentExpr &expr)
+ {
+   auto def_id = get_def_id (expr.get_lhs ());
+   HirId id = expr.get_lhs ().get_mappings ().get_hirid ();
+   unused_context.remove_mut (def_id);
+   unused_context.add_assign (def_id, id);
+   visit_outer_attrs (expr);
+   expr.get_rhs ().accept_vis (*this);
+ }
+ 
+ void
+ UnusedCollector::visit (HIR::IdentifierPattern &pattern)
+ {
+   if (pattern.is_mut ())
+     unused_context.add_mut (pattern.get_mappings ().get_hirid ());
+ 
+   walk (pattern);
+ }
+ 
+ void
+ UnusedCollector::visit (HIR::StructPatternFieldIdent &pattern)
+ {
+   if (pattern.is_mut ())
+     unused_context.add_mut (pattern.get_mappings ().get_hirid ());
+ 
+   walk (pattern);
+ }
+ 
+ } // namespace Analysis
+ } // namespace Rust
diff -Nrcpad gcc-16-20251221/gcc/rust/checks/lints/unused/rust-unused-collector.h gcc-16-20251228/gcc/rust/checks/lints/unused/rust-unused-collector.h
*** gcc-16-20251221/gcc/rust/checks/lints/unused/rust-unused-collector.h	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/rust/checks/lints/unused/rust-unused-collector.h	Sun Dec 28 22:32:07 2025
***************
*** 0 ****
--- 1,70 ----
+ // Copyright (C) 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 "rust-hir-expr.h"
+ #include "rust-hir-path.h"
+ #include "rust-hir-pattern.h"
+ #include "rust-hir-visitor.h"
+ #include "rust-mapping-common.h"
+ #include "rust-name-resolution-context.h"
+ #include "rust-unused-context.h"
+ 
+ namespace Rust {
+ namespace Analysis {
+ class UnusedCollector : public HIR::DefaultHIRVisitor
+ {
+ public:
+   UnusedCollector (UnusedContext &context);
+   void go (HIR::Crate &crate);
+ 
+ private:
+   const Resolver2_0::NameResolutionContext &nr_context;
+   Analysis::Mappings &mappings;
+   UnusedContext &unused_context;
+ 
+   using HIR::DefaultHIRVisitor::visit;
+ 
+   // Unused var
+   virtual void visit (HIR::PathInExpression &expr) override;
+   virtual void visit (HIR::StructExprFieldIdentifier &ident) override;
+   virtual void visit (HIR::QualifiedPathInExpression &expr) override;
+ 
+   // Unused assignments
+   virtual void visit (HIR::AssignmentExpr &expr) override;
+ 
+   // Unused mut
+   virtual void visit (HIR::IdentifierPattern &pattern) override;
+   virtual void visit (HIR::StructPatternFieldIdent &pattern) override;
+ 
+   template <typename T> HirId get_def_id (T &path_expr)
+   {
+     NodeId ast_node_id = path_expr.get_mappings ().get_nodeid ();
+     NodeId id = nr_context.lookup (ast_node_id).value ();
+     HirId def_id = mappings.lookup_node_to_hir (id).value ();
+     return def_id;
+   }
+ 
+   template <typename T> void mark_path_used (T &path_expr)
+   {
+     auto def_id = get_def_id (path_expr);
+     unused_context.add_variable (def_id);
+     unused_context.remove_assign (def_id);
+   }
+ };
+ } // namespace Analysis
+ } // namespace Rust
diff -Nrcpad gcc-16-20251221/gcc/rust/checks/lints/unused/rust-unused-context.cc gcc-16-20251228/gcc/rust/checks/lints/unused/rust-unused-context.cc
*** gcc-16-20251221/gcc/rust/checks/lints/unused/rust-unused-context.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/rust/checks/lints/unused/rust-unused-context.cc	Sun Dec 28 22:32:07 2025
***************
*** 0 ****
--- 1,89 ----
+ // Copyright (C) 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 "rust-unused-context.h"
+ 
+ namespace Rust {
+ namespace Analysis {
+ 
+ void
+ UnusedContext::add_variable (HirId id)
+ 
+ {
+   used_vars.emplace (id);
+ }
+ 
+ bool
+ UnusedContext::is_variable_used (HirId id) const
+ {
+   return used_vars.find (id) != used_vars.end ();
+ }
+ 
+ void
+ UnusedContext::add_assign (HirId id_def, HirId id)
+ {
+   assigned_vars[id_def].push_back (id);
+ }
+ 
+ void
+ UnusedContext::remove_assign (HirId id_def)
+ {
+   if (assigned_vars.find (id_def) != assigned_vars.end ())
+     assigned_vars[id_def].pop_back ();
+ }
+ 
+ bool
+ UnusedContext::is_variable_assigned (HirId id_def, HirId id)
+ {
+   auto assigned_vec = assigned_vars[id_def];
+   return std::find (assigned_vec.begin (), assigned_vec.end (), id)
+ 	 != assigned_vec.end ();
+ }
+ 
+ void
+ UnusedContext::add_mut (HirId id)
+ {
+   mutable_vars.emplace (id);
+ }
+ 
+ void
+ UnusedContext::remove_mut (HirId id)
+ {
+   mutable_vars.erase (id);
+ }
+ 
+ bool
+ UnusedContext::is_mut_used (HirId id) const
+ {
+   return mutable_vars.find (id) == mutable_vars.end ();
+ }
+ 
+ std::string
+ UnusedContext::as_string () const
+ {
+   std::stringstream ss;
+   ss << "UnusedContext: ";
+   for (const auto &v : used_vars)
+     {
+       ss << "HirId: " << v << "\n";
+     }
+   return ss.str ();
+ }
+ 
+ } // namespace Analysis
+ } // namespace Rust
diff -Nrcpad gcc-16-20251221/gcc/rust/checks/lints/unused/rust-unused-context.h gcc-16-20251228/gcc/rust/checks/lints/unused/rust-unused-context.h
*** gcc-16-20251221/gcc/rust/checks/lints/unused/rust-unused-context.h	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/rust/checks/lints/unused/rust-unused-context.h	Sun Dec 28 22:32:07 2025
***************
*** 0 ****
--- 1,49 ----
+ // Copyright (C) 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 "rust-mapping-common.h"
+ 
+ namespace Rust {
+ namespace Analysis {
+ 
+ class UnusedContext
+ {
+ public:
+   // Unused var
+   void add_variable (HirId id);
+   bool is_variable_used (HirId id) const;
+ 
+   // Assigned var
+   void add_assign (HirId id_def, HirId id);
+   void remove_assign (HirId id_def);
+   bool is_variable_assigned (HirId id_def, HirId id);
+ 
+   // Mutable var
+   void add_mut (HirId id);
+   void remove_mut (HirId id);
+   bool is_mut_used (HirId id) const;
+   std::string as_string () const;
+ 
+ private:
+   std::unordered_set<HirId> used_vars;
+   std::unordered_set<HirId> mutable_vars;
+   std::map<HirId, std::vector<HirId>> assigned_vars;
+ };
+ 
+ } // namespace Analysis
+ } // namespace Rust
diff -Nrcpad gcc-16-20251221/gcc/rust/expand/rust-cfg-strip.cc gcc-16-20251228/gcc/rust/expand/rust-cfg-strip.cc
*** gcc-16-20251221/gcc/rust/expand/rust-cfg-strip.cc	Sun Dec 21 22:32:07 2025
--- gcc-16-20251228/gcc/rust/expand/rust-cfg-strip.cc	Sun Dec 28 22:32:07 2025
*************** expand_cfg_attrs (AST::AttrVec &attrs)
*** 124,129 ****
--- 124,135 ----
  	      attrs.insert (attrs.begin () + i,
  			    std::make_move_iterator (new_attrs.begin ()),
  			    std::make_move_iterator (new_attrs.end ()));
+ 
+ 	      /* Decrement i so that the for loop's i++ will bring us back to
+ 	       * position i, allowing us to reprocess the newly inserted
+ 	       * attribute (in case it's also a cfg_attr that needs expansion)
+ 	       */
+ 	      i--;
  	    }
  
  	  /* do something - if feature (first token in tree) is in fact enabled,
*************** expand_cfg_attrs (AST::AttrVec &attrs)
*** 133,142 ****
  	   * recursive, so check for expanded attributes being recursive and
  	   * possibly recursively call the expand_attrs? */
  	}
-       else
- 	{
- 	  i++;
- 	}
      }
    attrs.shrink_to_fit ();
  }
--- 139,144 ----
diff -Nrcpad gcc-16-20251221/gcc/rust/expand/rust-expand-visitor.h gcc-16-20251228/gcc/rust/expand/rust-expand-visitor.h
*** gcc-16-20251221/gcc/rust/expand/rust-expand-visitor.h	Sun Dec 21 22:32:07 2025
--- gcc-16-20251228/gcc/rust/expand/rust-expand-visitor.h	Sun Dec 28 22:32:07 2025
***************
*** 28,38 ****
  namespace Rust {
  
  /**
-  * Whether or not an attribute is a derive attribute
-  */
- bool is_derive (AST::Attribute &attr);
- 
- /**
   * Whether or not an attribute is builtin
   */
  bool is_builtin (AST::Attribute &attr);
--- 28,33 ----
diff -Nrcpad gcc-16-20251221/gcc/rust/hir/rust-ast-lower-item.cc gcc-16-20251228/gcc/rust/hir/rust-ast-lower-item.cc
*** gcc-16-20251221/gcc/rust/hir/rust-ast-lower-item.cc	Sun Dec 21 22:32:07 2025
--- gcc-16-20251228/gcc/rust/hir/rust-ast-lower-item.cc	Sun Dec 28 22:32:07 2025
*************** ASTLoweringItem::visit (AST::Function &f
*** 451,457 ****
  	  continue;
  	}
  
!       auto param = static_cast<AST::FunctionParam &> (*p);
  
        auto translated_pattern = std::unique_ptr<HIR::Pattern> (
  	ASTLoweringPattern::translate (param.get_pattern ()));
--- 451,457 ----
  	  continue;
  	}
  
!       auto &param = static_cast<AST::FunctionParam &> (*p);
  
        auto translated_pattern = std::unique_ptr<HIR::Pattern> (
  	ASTLoweringPattern::translate (param.get_pattern ()));
diff -Nrcpad gcc-16-20251221/gcc/rust/hir/rust-hir-dump.cc gcc-16-20251228/gcc/rust/hir/rust-hir-dump.cc
*** gcc-16-20251221/gcc/rust/hir/rust-hir-dump.cc	Sun Dec 21 22:32:07 2025
--- gcc-16-20251228/gcc/rust/hir/rust-hir-dump.cc	Sun Dec 28 22:32:07 2025
*************** Dump::do_vis_item (VisItem &e)
*** 298,304 ****
    do_item (e);
    std::string str = "none";
    if (e.has_visibility ())
!     str = e.get_visibility ().as_string ();
    put_field ("visibility", str);
  }
  
--- 298,304 ----
    do_item (e);
    std::string str = "none";
    if (e.has_visibility ())
!     str = e.get_visibility ().to_string ();
    put_field ("visibility", str);
  }
  
*************** Dump::do_pathpattern (PathPattern &e)
*** 326,332 ****
    std::string str = "";
  
    for (const auto &segment : e.get_segments ())
!     str += segment.as_string () + ", ";
  
    put_field ("segments", str);
  }
--- 326,332 ----
    std::string str = "";
  
    for (const auto &segment : e.get_segments ())
!     str += segment.to_string () + ", ";
  
    put_field ("segments", str);
  }
*************** Dump::do_typepathsegment (TypePathSegmen
*** 399,405 ****
    if (e.is_lang_item ())
      put_field ("ident_segment", LangItem::PrettyString (e.get_lang_item ()));
    else
!     put_field ("ident_segment", e.get_ident_segment ().as_string ());
  }
  
  void
--- 399,405 ----
    if (e.is_lang_item ())
      put_field ("ident_segment", LangItem::PrettyString (e.get_lang_item ()));
    else
!     put_field ("ident_segment", e.get_ident_segment ().to_string ());
  }
  
  void
*************** Dump::do_baseloopexpr (BaseLoopExpr &e)
*** 474,480 ****
    if (!e.has_loop_label ())
      put_field ("label", "none");
    else
!     put_field ("label", e.get_loop_label ().as_string ());
  
    visit_field ("loop_block", e.get_loop_block ());
  }
--- 474,480 ----
    if (!e.has_loop_label ())
      put_field ("label", "none");
    else
!     put_field ("label", e.get_loop_label ().to_string ());
  
    visit_field ("loop_block", e.get_loop_block ());
  }
*************** Dump::do_struct (Struct &e)
*** 489,495 ****
    if (!e.has_where_clause ())
      put_field ("where_clause", "none");
    else
!     put_field ("where clause", e.get_where_clause ().as_string ());
  }
  
  void
--- 489,495 ----
    if (!e.has_where_clause ())
      put_field ("where_clause", "none");
    else
!     put_field ("where clause", e.get_where_clause ().to_string ());
  }
  
  void
*************** void
*** 522,528 ****
  Dump::do_traitfunctiondecl (TraitFunctionDecl &e)
  {
    begin ("TraitFunctionDecl");
!   put_field ("qualifiers", e.get_qualifiers ().as_string ());
    put_field ("function_name", e.get_function_name ().as_string ());
    visit_collection ("generic_params", e.get_generic_params ());
  
--- 522,528 ----
  Dump::do_traitfunctiondecl (TraitFunctionDecl &e)
  {
    begin ("TraitFunctionDecl");
!   put_field ("qualifiers", e.get_qualifiers ().to_string ());
    put_field ("function_name", e.get_function_name ().as_string ());
    visit_collection ("generic_params", e.get_generic_params ());
  
*************** Dump::do_traitfunctiondecl (TraitFunctio
*** 542,553 ****
      put_field ("return_type", "none");
  
    if (e.has_where_clause ())
!     put_field ("where_clause", e.get_where_clause ().as_string ());
    else
      put_field ("where_clause", "none");
  
    if (e.is_method ())
!     put_field ("self", e.get_self_unchecked ().as_string ());
  
    end ("TraitFunctionDecl");
  }
--- 542,553 ----
      put_field ("return_type", "none");
  
    if (e.has_where_clause ())
!     put_field ("where_clause", e.get_where_clause ().to_string ());
    else
      put_field ("where_clause", "none");
  
    if (e.is_method ())
!     put_field ("self", e.get_self_unchecked ().to_string ());
  
    end ("TraitFunctionDecl");
  }
*************** Dump::do_externalitem (ExternalItem &e)
*** 562,568 ****
  
    std::string str = "none";
    if (e.has_visibility ())
!     str = e.get_visibility ().as_string ();
    put_field ("visibility", str);
    put_field ("item_name", e.get_item_name ().as_string ());
  }
--- 562,568 ----
  
    std::string str = "none";
    if (e.has_visibility ())
!     str = e.get_visibility ().to_string ();
    put_field ("visibility", str);
    put_field ("item_name", e.get_item_name ().as_string ());
  }
*************** Dump::do_tuplefield (TupleField &e)
*** 606,612 ****
  
    std::string str = "none";
    if (e.has_visibility ())
!     str = e.get_visibility ().as_string ();
    put_field ("visibility", str);
  
    visit_field ("field_type", e.get_field_type ());
--- 606,612 ----
  
    std::string str = "none";
    if (e.has_visibility ())
!     str = e.get_visibility ().to_string ();
    put_field ("visibility", str);
  
    visit_field ("field_type", e.get_field_type ());
*************** Dump::do_structfield (StructField &e)
*** 621,627 ****
  
    std::string str = "none";
    if (e.has_visibility ())
!     str = e.get_visibility ().as_string ();
    put_field ("visibility", str);
    put_field ("field_name", e.get_field_name ().as_string ());
    visit_field ("field_type", e.get_field_type ());
--- 621,627 ----
  
    std::string str = "none";
    if (e.has_visibility ())
!     str = e.get_visibility ().to_string ();
    put_field ("visibility", str);
    put_field ("field_name", e.get_field_name ().as_string ());
    visit_field ("field_type", e.get_field_type ());
*************** void
*** 721,727 ****
  Dump::visit (LifetimeParam &lifetimeparam)
  {
    begin ("Lifetimeparam");
!   put (lifetimeparam.as_string ());
    end ("Lifetimeparam");
  }
  
--- 721,727 ----
  Dump::visit (LifetimeParam &lifetimeparam)
  {
    begin ("Lifetimeparam");
!   put (lifetimeparam.to_debug_string ());
    end ("Lifetimeparam");
  }
  
*************** Dump::visit (StructExprStructFields &e)
*** 1191,1197 ****
    if (!e.has_struct_base ())
      put_field ("struct_base", "none");
    else
!     put_field ("struct_base", e.get_struct_base ().as_string ());
  
    end ("StructExprStructFields");
  }
--- 1191,1197 ----
    if (!e.has_struct_base ())
      put_field ("struct_base", "none");
    else
!     put_field ("struct_base", e.get_struct_base ().to_string ());
  
    end ("StructExprStructFields");
  }
*************** Dump::visit (StructExprStructBase &e)
*** 1202,1208 ****
    begin ("StructExprStructBase");
    do_structexprstruct (e);
  
!   put_field ("struct_base", e.get_struct_base ().as_string ());
  
    end ("StructExprStructBase");
  }
--- 1202,1208 ----
    begin ("StructExprStructBase");
    do_structexprstruct (e);
  
!   put_field ("struct_base", e.get_struct_base ().to_string ());
  
    end ("StructExprStructBase");
  }
*************** Dump::visit (MethodCallExpr &e)
*** 1226,1232 ****
    do_expr (e);
  
    visit_field ("receiver", e.get_receiver ());
!   put_field ("method_name", e.get_method_name ().as_string ());
    visit_collection ("params", e.get_arguments ());
  
    end ("MethodCallExpr");
--- 1226,1232 ----
    do_expr (e);
  
    visit_field ("receiver", e.get_receiver ());
!   put_field ("method_name", e.get_method_name ().to_string ());
    visit_collection ("params", e.get_arguments ());
  
    end ("MethodCallExpr");
*************** Dump::visit (BlockExpr &e)
*** 1286,1292 ****
    put_field ("tail_reachable", std::to_string (e.is_tail_reachable ()));
  
    if (e.has_label ())
!     put_field ("label", e.get_label ().as_string ());
  
    visit_collection ("statements", e.get_statements ());
  
--- 1286,1292 ----
    put_field ("tail_reachable", std::to_string (e.is_tail_reachable ()));
  
    if (e.has_label ())
!     put_field ("label", e.get_label ().to_string ());
  
    visit_collection ("statements", e.get_statements ());
  
*************** Dump::visit (ContinueExpr &e)
*** 1327,1333 ****
    begin ("ContinueExpr");
  
    if (e.has_label ())
!     put_field ("label", e.get_label ().as_string ());
    else
      put_field ("label", "none");
  
--- 1327,1333 ----
    begin ("ContinueExpr");
  
    if (e.has_label ())
!     put_field ("label", e.get_label ().to_string ());
    else
      put_field ("label", "none");
  
*************** Dump::visit (BreakExpr &e)
*** 1341,1347 ****
    std::string str ("break ");
  
    if (e.has_label ())
!     put_field ("label", e.get_label ().as_string ());
    else
      put_field ("label", "none");
  
--- 1341,1347 ----
    std::string str ("break ");
  
    if (e.has_label ())
!     put_field ("label", e.get_label ().to_string ());
    else
      put_field ("label", "none");
  
*************** Dump::visit (OffsetOf &e)
*** 1610,1616 ****
  {
    begin ("OffsetOf");
  
!   put_field ("type", e.get_type ().as_string ());
    put_field ("field", e.get_field ());
  
    end ("OffsetOf");
--- 1610,1616 ----
  {
    begin ("OffsetOf");
  
!   put_field ("type", e.get_type ().to_debug_string ());
    put_field ("field", e.get_field ());
  
    end ("OffsetOf");
*************** Dump::visit (Function &e)
*** 1778,1784 ****
    begin ("Function");
    do_vis_item (e);
  
!   put_field ("function_qualifiers", e.get_qualifiers ().as_string ());
  
    visit_collection ("generic_params", e.get_generic_params ());
  
--- 1778,1784 ----
    begin ("Function");
    do_vis_item (e);
  
!   put_field ("function_qualifiers", e.get_qualifiers ().to_string ());
  
    visit_collection ("generic_params", e.get_generic_params ());
  
*************** Dump::visit (Function &e)
*** 1802,1812 ****
    if (!e.has_where_clause ())
      put_field ("where_clause", "none");
    else
!     put_field ("where clause", e.get_where_clause ().as_string ());
  
    visit_field ("function_body", e.get_definition ());
    if (e.is_method ())
!     put_field ("self", e.get_self_param_unchecked ().as_string ());
  
    end ("Function");
  }
--- 1802,1812 ----
    if (!e.has_where_clause ())
      put_field ("where_clause", "none");
    else
!     put_field ("where clause", e.get_where_clause ().to_string ());
  
    visit_field ("function_body", e.get_definition ());
    if (e.is_method ())
!     put_field ("self", e.get_self_param_unchecked ().to_string ());
  
    end ("Function");
  }
*************** Dump::visit (TypeAlias &e)
*** 1825,1833 ****
    if (!e.has_where_clause ())
      put_field ("where_clause", "none");
    else
!     put_field ("where clause", e.get_where_clause ().as_string ());
  
!   put_field ("type", e.get_type_aliased ().as_string ());
  
    end ("TypeAlias");
  }
--- 1825,1833 ----
    if (!e.has_where_clause ())
      put_field ("where_clause", "none");
    else
!     put_field ("where clause", e.get_where_clause ().to_string ());
  
!   put_field ("type", e.get_type_aliased ().to_debug_string ());
  
    end ("TypeAlias");
  }
*************** Dump::visit (Enum &e)
*** 1951,1957 ****
  
    std::string str = "none";
    if (e.has_where_clause ())
!     str = e.get_where_clause ().as_string ();
    put_field ("where clause", str);
  
    visit_collection ("items", e.get_variants ());
--- 1951,1957 ----
  
    std::string str = "none";
    if (e.has_where_clause ())
!     str = e.get_where_clause ().to_string ();
    put_field ("where clause", str);
  
    visit_collection ("items", e.get_variants ());
*************** Dump::visit (Union &e)
*** 1969,1975 ****
  
    std::string str;
    if (e.has_where_clause ())
!     str = e.get_where_clause ().as_string ();
    else
      str = "none";
    put_field ("where clause", str);
--- 1969,1975 ----
  
    std::string str;
    if (e.has_where_clause ())
!     str = e.get_where_clause ().to_string ();
    else
      str = "none";
    put_field ("where clause", str);
*************** Dump::visit (Union &e)
*** 1989,1995 ****
  
  	  std::string str = "none";
  	  if (elt.has_visibility ())
! 	    str = elt.get_visibility ().as_string ();
  	  put_field ("visibility", str);
  	  put_field ("field_name", elt.get_field_name ().as_string ());
  	  visit_field ("field_type", elt.get_field_type ());
--- 1989,1995 ----
  
  	  std::string str = "none";
  	  if (elt.has_visibility ())
! 	    str = elt.get_visibility ().to_string ();
  	  put_field ("visibility", str);
  	  put_field ("field_name", elt.get_field_name ().as_string ());
  	  visit_field ("field_type", elt.get_field_type ());
*************** Dump::visit (Trait &e)
*** 2077,2083 ****
  
    std::string str;
    if (e.has_where_clause ())
!     str = e.get_where_clause ().as_string ();
    else
      str = "none";
    put_field ("where clause", str);
--- 2077,2083 ----
  
    std::string str;
    if (e.has_where_clause ())
!     str = e.get_where_clause ().to_string ();
    else
      str = "none";
    put_field ("where clause", str);
*************** Dump::visit (ImplBlock &e)
*** 2099,2105 ****
  
    std::string str;
    if (e.has_where_clause ())
!     str = e.get_where_clause ().as_string ();
    else
      str = "none";
    put_field ("where clause", str);
--- 2099,2105 ----
  
    std::string str;
    if (e.has_where_clause ())
!     str = e.get_where_clause ().to_string ();
    else
      str = "none";
    put_field ("where clause", str);
*************** Dump::visit (ExternalStaticItem &e)
*** 2122,2128 ****
  
    std::string str = "none";
    if (e.has_visibility ())
!     str = e.get_visibility ().as_string ();
    put_field ("visibility", str);
    //
  
--- 2122,2128 ----
  
    std::string str = "none";
    if (e.has_visibility ())
!     str = e.get_visibility ().to_string ();
    put_field ("visibility", str);
    //
  
*************** void
*** 2225,2231 ****
  Dump::visit (RangePatternBoundPath &e)
  {
    begin ("RangePatternBoundPath");
!   put_field ("path", e.get_path ().as_string ());
    end ("RangePatternBoundPath");
  }
  
--- 2225,2231 ----
  Dump::visit (RangePatternBoundPath &e)
  {
    begin ("RangePatternBoundPath");
!   put_field ("path", e.get_path ().to_string ());
    end ("RangePatternBoundPath");
  }
  
*************** Dump::visit (RangePattern &e)
*** 2242,2249 ****
  {
    begin ("RangePattern");
    do_mappings (e.get_mappings ());
!   put_field ("lower", e.get_lower_bound ().as_string ());
!   put_field ("upper", e.get_upper_bound ().as_string ());
    put_field ("has_ellipsis_syntax",
  	     std::to_string (e.get_has_ellipsis_syntax ()));
    end ("RangePattern");
--- 2242,2249 ----
  {
    begin ("RangePattern");
    do_mappings (e.get_mappings ());
!   put_field ("lower", e.get_lower_bound ().to_string ());
!   put_field ("upper", e.get_upper_bound ().to_string ());
    put_field ("has_ellipsis_syntax",
  	     std::to_string (e.get_has_ellipsis_syntax ()));
    end ("RangePattern");
*************** Dump::visit (ReferencePattern &e)
*** 2255,2261 ****
    begin ("ReferencePattern");
    do_mappings (e.get_mappings ());
    put_field ("mut", std::to_string (e.is_mut ()));
!   put_field ("pattern", e.get_referenced_pattern ().as_string ());
    end ("ReferencePattern");
  }
  
--- 2255,2261 ----
    begin ("ReferencePattern");
    do_mappings (e.get_mappings ());
    put_field ("mut", std::to_string (e.is_mut ()));
!   put_field ("pattern", e.get_referenced_pattern ().to_debug_string ());
    end ("ReferencePattern");
  }
  
*************** Dump::visit (StructPatternFieldTuplePat
*** 2267,2273 ****
    auto oa = e.get_outer_attrs ();
    do_outer_attrs (oa);
    put_field ("index", std::to_string (e.get_index ()));
!   put_field ("tuple_pattern", e.get_tuple_pattern ().as_string ());
    end ("StructPatternFieldTuplePat");
  }
  
--- 2267,2273 ----
    auto oa = e.get_outer_attrs ();
    do_outer_attrs (oa);
    put_field ("index", std::to_string (e.get_index ()));
!   put_field ("tuple_pattern", e.get_tuple_pattern ().to_string ());
    end ("StructPatternFieldTuplePat");
  }
  
*************** Dump::visit (StructPattern &e)
*** 2301,2307 ****
    begin ("StructPattern");
  
    visit_field ("path", e.get_path ());
!   put_field ("elems", e.get_struct_pattern_elems ().as_string ());
  
    end ("StructPattern");
  }
--- 2301,2307 ----
    begin ("StructPattern");
  
    visit_field ("path", e.get_path ());
!   put_field ("elems", e.get_struct_pattern_elems ().to_string ());
  
    end ("StructPattern");
  }
*************** Dump::visit (TupleStructPattern &e)
*** 2329,2335 ****
    begin ("TupleStructPattern");
    do_mappings (e.get_mappings ());
  
!   put_field ("path", e.get_path ().as_string ());
  
    visit_field ("items", e.get_items ());
  
--- 2329,2335 ----
    begin ("TupleStructPattern");
    do_mappings (e.get_mappings ());
  
!   put_field ("path", e.get_path ().to_string ());
  
    visit_field ("items", e.get_items ());
  
*************** Dump::visit (ParenthesisedType &e)
*** 2476,2482 ****
  {
    begin ("ParenthesisedType");
    do_type (e);
!   put_field ("type_in_parens", e.get_type_in_parens ().as_string ());
    end ("ParenthesisedType");
  }
  
--- 2476,2482 ----
  {
    begin ("ParenthesisedType");
    do_type (e);
!   put_field ("type_in_parens", e.get_type_in_parens ().to_debug_string ());
    end ("ParenthesisedType");
  }
  
*************** Dump::visit (RawPointerType &e)
*** 2503,2509 ****
    begin ("RawPointerType");
    do_type (e);
    put_field ("mut", Rust::enum_to_str (e.get_mut ()));
!   put_field ("type", e.get_type ().as_string ());
    end ("RawPointerType");
  }
  
--- 2503,2509 ----
    begin ("RawPointerType");
    do_type (e);
    put_field ("mut", Rust::enum_to_str (e.get_mut ()));
!   put_field ("type", e.get_type ().to_debug_string ());
    end ("RawPointerType");
  }
  
*************** Dump::visit (ReferenceType &e)
*** 2512,2520 ****
  {
    begin ("ReferenceType");
    do_type (e);
!   put_field ("lifetime", e.get_lifetime ().as_string ());
    put_field ("mut", enum_to_str (e.get_mut ()));
!   put_field ("type", e.get_base_type ().as_string ());
    end ("ReferenceType");
  }
  
--- 2512,2520 ----
  {
    begin ("ReferenceType");
    do_type (e);
!   put_field ("lifetime", e.get_lifetime ().to_string ());
    put_field ("mut", enum_to_str (e.get_mut ()));
!   put_field ("type", e.get_base_type ().to_debug_string ());
    end ("ReferenceType");
  }
  
*************** Dump::visit (BareFunctionType &e)
*** 2553,2559 ****
  
    visit_collection ("for_lifetimes", e.get_for_lifetimes ());
  
!   put_field ("function_qualifiers", e.get_function_qualifiers ().as_string ());
  
    if (e.get_function_params ().empty ())
      {
--- 2553,2559 ----
  
    visit_collection ("for_lifetimes", e.get_for_lifetimes ());
  
!   put_field ("function_qualifiers", e.get_function_qualifiers ().to_string ());
  
    if (e.get_function_params ().empty ())
      {
diff -Nrcpad gcc-16-20251221/gcc/rust/hir/tree/rust-hir-bound-abstract.h gcc-16-20251228/gcc/rust/hir/tree/rust-hir-bound-abstract.h
*** gcc-16-20251221/gcc/rust/hir/tree/rust-hir-bound-abstract.h	Sun Dec 21 22:32:07 2025
--- gcc-16-20251228/gcc/rust/hir/tree/rust-hir-bound-abstract.h	Sun Dec 28 22:32:07 2025
*************** public:
*** 46,52 ****
      return std::unique_ptr<TypeParamBound> (clone_type_param_bound_impl ());
    }
  
!   virtual std::string as_string () const = 0;
  
    virtual Analysis::NodeMapping get_mappings () const = 0;
  
--- 46,52 ----
      return std::unique_ptr<TypeParamBound> (clone_type_param_bound_impl ());
    }
  
!   virtual std::string to_string () const = 0;
  
    virtual Analysis::NodeMapping get_mappings () const = 0;
  
diff -Nrcpad gcc-16-20251221/gcc/rust/hir/tree/rust-hir-bound.h gcc-16-20251228/gcc/rust/hir/tree/rust-hir-bound.h
*** gcc-16-20251221/gcc/rust/hir/tree/rust-hir-bound.h	Sun Dec 21 22:32:07 2025
--- gcc-16-20251228/gcc/rust/hir/tree/rust-hir-bound.h	Sun Dec 28 22:32:07 2025
*************** public:
*** 44,50 ****
    {}
  
    // Returns true if the lifetime is in an error state.
!   std::string as_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
  
--- 44,50 ----
    {}
  
    // Returns true if the lifetime is in an error state.
!   std::string to_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
  
diff -Nrcpad gcc-16-20251221/gcc/rust/hir/tree/rust-hir-expr-abstract.h gcc-16-20251228/gcc/rust/hir/tree/rust-hir-expr-abstract.h
*** gcc-16-20251221/gcc/rust/hir/tree/rust-hir-expr-abstract.h	Sun Dec 21 22:32:07 2025
--- gcc-16-20251228/gcc/rust/hir/tree/rust-hir-expr-abstract.h	Sun Dec 28 22:32:07 2025
*************** public:
*** 88,94 ****
    }
  
    // TODO: make pure virtual if move out outer attributes to derived classes
!   virtual std::string as_string () const;
  
    virtual ~Expr () {}
  
--- 88,99 ----
    }
  
    // TODO: make pure virtual if move out outer attributes to derived classes
!   virtual std::string to_string () const;
! 
!   std::string to_debug_string () const
!   {
!     return to_string () + mappings.as_string ();
!   }
  
    virtual ~Expr () {}
  
diff -Nrcpad gcc-16-20251221/gcc/rust/hir/tree/rust-hir-expr.cc gcc-16-20251228/gcc/rust/hir/tree/rust-hir-expr.cc
*** gcc-16-20251221/gcc/rust/hir/tree/rust-hir-expr.cc	Sun Dec 21 22:32:07 2025
--- gcc-16-20251228/gcc/rust/hir/tree/rust-hir-expr.cc	Sun Dec 28 22:32:07 2025
*************** OffsetOf::clone_expr_without_block_impl
*** 1545,1553 ****
  }
  
  std::string
! OffsetOf::as_string () const
  {
!   return "OffsetOf(" + type->as_string () + ", " + field.as_string () + ")";
  }
  
  void
--- 1545,1553 ----
  }
  
  std::string
! OffsetOf::to_string () const
  {
!   return "OffsetOf(" + type->to_string () + ", " + field.as_string () + ")";
  }
  
  void
diff -Nrcpad gcc-16-20251221/gcc/rust/hir/tree/rust-hir-expr.h gcc-16-20251228/gcc/rust/hir/tree/rust-hir-expr.h
*** gcc-16-20251221/gcc/rust/hir/tree/rust-hir-expr.h	Sun Dec 21 22:32:07 2025
--- gcc-16-20251228/gcc/rust/hir/tree/rust-hir-expr.h	Sun Dec 28 22:32:07 2025
*************** class LoopLabel /*: public Node*/
*** 43,49 ****
    Analysis::NodeMapping mappings;
  
  public:
!   std::string as_string () const;
  
    LoopLabel (Analysis::NodeMapping mapping, Lifetime loop_label,
  	     location_t locus);
--- 43,49 ----
    Analysis::NodeMapping mappings;
  
  public:
!   std::string to_string () const;
  
    LoopLabel (Analysis::NodeMapping mapping, Lifetime loop_label,
  	     location_t locus);
*************** class LiteralExpr : public ExprWithoutBl
*** 93,103 ****
    bool negative_number = false;
  
  public:
!   std::string as_string () const override
!   {
!     return "( " + literal.as_string () + " (" + get_mappings ().as_string ()
! 	   + "))";
!   }
  
    Literal::LitType get_lit_type () const { return literal.get_lit_type (); }
  
--- 93,99 ----
    bool negative_number = false;
  
  public:
!   std::string to_string () const override { return literal.as_string (); }
  
    Literal::LitType get_lit_type () const { return literal.get_lit_type (); }
  
*************** class BorrowExpr : public OperatorExpr
*** 202,208 ****
    bool raw;
  
  public:
!   std::string as_string () const override;
  
    BorrowExpr (Analysis::NodeMapping mappings,
  	      std::unique_ptr<Expr> borrow_lvalue, Mutability mut, bool raw,
--- 198,204 ----
    bool raw;
  
  public:
!   std::string to_string () const override;
  
    BorrowExpr (Analysis::NodeMapping mappings,
  	      std::unique_ptr<Expr> borrow_lvalue, Mutability mut, bool raw,
*************** protected:
*** 235,241 ****
  class DereferenceExpr : public OperatorExpr
  {
  public:
!   std::string as_string () const override;
  
    // Constructor calls OperatorExpr's protected constructor
    DereferenceExpr (Analysis::NodeMapping mappings,
--- 231,237 ----
  class DereferenceExpr : public OperatorExpr
  {
  public:
!   std::string to_string () const override;
  
    // Constructor calls OperatorExpr's protected constructor
    DereferenceExpr (Analysis::NodeMapping mappings,
*************** protected:
*** 265,271 ****
  class ErrorPropagationExpr : public OperatorExpr
  {
  public:
!   std::string as_string () const override;
  
    // Constructor calls OperatorExpr's protected constructor
    ErrorPropagationExpr (Analysis::NodeMapping mappings,
--- 261,267 ----
  class ErrorPropagationExpr : public OperatorExpr
  {
  public:
!   std::string to_string () const override;
  
    // Constructor calls OperatorExpr's protected constructor
    ErrorPropagationExpr (Analysis::NodeMapping mappings,
*************** private:
*** 304,310 ****
    ExprType expr_type;
  
  public:
!   std::string as_string () const override;
  
    ExprType get_expr_type () const { return expr_type; }
  
--- 300,306 ----
    ExprType expr_type;
  
  public:
!   std::string to_string () const override;
  
    ExprType get_expr_type () const { return expr_type; }
  
*************** private:
*** 345,351 ****
    std::unique_ptr<Expr> right_expr;
  
  public:
!   std::string as_string () const override;
  
    ExprType get_expr_type () const { return expr_type; }
  
--- 341,347 ----
    std::unique_ptr<Expr> right_expr;
  
  public:
!   std::string to_string () const override;
  
    ExprType get_expr_type () const { return expr_type; }
  
*************** private:
*** 407,413 ****
    std::unique_ptr<Expr> right_expr;
  
  public:
!   std::string as_string () const override;
  
    ExprType get_expr_type () const { return expr_type; }
  
--- 403,409 ----
    std::unique_ptr<Expr> right_expr;
  
  public:
!   std::string to_string () const override;
  
    ExprType get_expr_type () const { return expr_type; }
  
*************** public:
*** 483,489 ****
    LazyBooleanExpr (LazyBooleanExpr &&other) = default;
    LazyBooleanExpr &operator= (LazyBooleanExpr &&other) = default;
  
!   std::string as_string () const override;
  
    ExprType get_expr_type () const { return expr_type; }
  
--- 479,485 ----
    LazyBooleanExpr (LazyBooleanExpr &&other) = default;
    LazyBooleanExpr &operator= (LazyBooleanExpr &&other) = default;
  
!   std::string to_string () const override;
  
    ExprType get_expr_type () const { return expr_type; }
  
*************** class TypeCastExpr : public OperatorExpr
*** 516,522 ****
  
    // Note: only certain type casts allowed, outlined in reference
  public:
!   std::string as_string () const override;
  
    // Constructor requires calling protected constructor of OperatorExpr
    TypeCastExpr (Analysis::NodeMapping mappings,
--- 512,518 ----
  
    // Note: only certain type casts allowed, outlined in reference
  public:
!   std::string to_string () const override;
  
    // Constructor requires calling protected constructor of OperatorExpr
    TypeCastExpr (Analysis::NodeMapping mappings,
*************** class AssignmentExpr : public OperatorEx
*** 564,570 ****
    std::unique_ptr<Expr> right_expr;
  
  public:
!   std::string as_string () const override;
  
    // Call OperatorExpr constructor to initialise left_expr
    AssignmentExpr (Analysis::NodeMapping mappings,
--- 560,566 ----
    std::unique_ptr<Expr> right_expr;
  
  public:
!   std::string to_string () const override;
  
    // Call OperatorExpr constructor to initialise left_expr
    AssignmentExpr (Analysis::NodeMapping mappings,
*************** private:
*** 618,624 ****
    std::unique_ptr<Expr> right_expr;
  
  public:
!   std::string as_string () const override;
  
    ExprType get_expr_type () const { return expr_type; }
  
--- 614,620 ----
    std::unique_ptr<Expr> right_expr;
  
  public:
!   std::string to_string () const override;
  
    ExprType get_expr_type () const { return expr_type; }
  
*************** class GroupedExpr : public ExprWithoutBl
*** 668,674 ****
    location_t locus;
  
  public:
!   std::string as_string () const override;
  
    GroupedExpr (Analysis::NodeMapping mappings,
  	       std::unique_ptr<Expr> parenthesised_expr,
--- 664,670 ----
    location_t locus;
  
  public:
!   std::string to_string () const override;
  
    GroupedExpr (Analysis::NodeMapping mappings,
  	       std::unique_ptr<Expr> parenthesised_expr,
*************** public:
*** 734,740 ****
      return std::unique_ptr<ArrayElems> (clone_array_elems_impl ());
    }
  
!   virtual std::string as_string () const = 0;
  
    virtual void accept_vis (HIRFullVisitor &vis) = 0;
  
--- 730,736 ----
      return std::unique_ptr<ArrayElems> (clone_array_elems_impl ());
    }
  
!   virtual std::string to_string () const = 0;
  
    virtual void accept_vis (HIRFullVisitor &vis) = 0;
  
*************** public:
*** 770,776 ****
    ArrayElemsValues (ArrayElemsValues &&other) = default;
    ArrayElemsValues &operator= (ArrayElemsValues &&other) = default;
  
!   std::string as_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
  
--- 766,772 ----
    ArrayElemsValues (ArrayElemsValues &&other) = default;
    ArrayElemsValues &operator= (ArrayElemsValues &&other) = default;
  
!   std::string to_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
  
*************** public:
*** 812,818 ****
    ArrayElemsCopied (ArrayElemsCopied &&other) = default;
    ArrayElemsCopied &operator= (ArrayElemsCopied &&other) = default;
  
!   std::string as_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
  
--- 808,814 ----
    ArrayElemsCopied (ArrayElemsCopied &&other) = default;
    ArrayElemsCopied &operator= (ArrayElemsCopied &&other) = default;
  
!   std::string to_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
  
*************** class ArrayExpr : public ExprWithoutBloc
*** 840,846 ****
    location_t locus;
  
  public:
!   std::string as_string () const override;
  
    // Returns whether array expr has array elems or if it is just empty.
    bool has_array_elems () const { return internal_elements != nullptr; }
--- 836,842 ----
    location_t locus;
  
  public:
!   std::string to_string () const override;
  
    // Returns whether array expr has array elems or if it is just empty.
    bool has_array_elems () const { return internal_elements != nullptr; }
*************** class ArrayIndexExpr : public ExprWithou
*** 894,900 ****
    location_t locus;
  
  public:
!   std::string as_string () const override;
  
    ArrayIndexExpr (Analysis::NodeMapping mappings,
  		  std::unique_ptr<Expr> array_expr,
--- 890,896 ----
    location_t locus;
  
  public:
!   std::string to_string () const override;
  
    ArrayIndexExpr (Analysis::NodeMapping mappings,
  		  std::unique_ptr<Expr> array_expr,
*************** class TupleExpr : public ExprWithoutBloc
*** 949,955 ****
    location_t locus;
  
  public:
!   std::string as_string () const override;
  
    TupleExpr (Analysis::NodeMapping mappings,
  	     std::vector<std::unique_ptr<Expr>> tuple_elements,
--- 945,951 ----
    location_t locus;
  
  public:
!   std::string to_string () const override;
  
    TupleExpr (Analysis::NodeMapping mappings,
  	     std::vector<std::unique_ptr<Expr>> tuple_elements,
*************** class TupleIndexExpr : public ExprWithou
*** 1007,1013 ****
    location_t locus;
  
  public:
!   std::string as_string () const override;
  
    TupleIndex get_tuple_index () const { return tuple_index; }
  
--- 1003,1009 ----
    location_t locus;
  
  public:
!   std::string to_string () const override;
  
    TupleIndex get_tuple_index () const { return tuple_index; }
  
*************** protected:
*** 1066,1072 ****
  public:
    PathInExpression &get_struct_name () { return struct_name; }
  
!   std::string as_string () const override;
  
    ExprType get_expression_type () const override final
    {
--- 1062,1068 ----
  public:
    PathInExpression &get_struct_name () { return struct_name; }
  
!   std::string to_string () const override;
  
    ExprType get_expression_type () const override final
    {
*************** class StructExprStruct : public StructEx
*** 1080,1086 ****
    location_t locus;
  
  public:
!   std::string as_string () const override;
  
    // Constructor has to call protected constructor of base class
    StructExprStruct (Analysis::NodeMapping mappings,
--- 1076,1082 ----
    location_t locus;
  
  public:
!   std::string to_string () const override;
  
    // Constructor has to call protected constructor of base class
    StructExprStruct (Analysis::NodeMapping mappings,
*************** public:
*** 1138,1144 ****
    // Returns whether StructBase is in error state
    bool is_invalid () const { return base_struct == nullptr; }
  
!   std::string as_string () const;
  
    Expr &get_base () { return *base_struct; }
  };
--- 1134,1140 ----
    // Returns whether StructBase is in error state
    bool is_invalid () const { return base_struct == nullptr; }
  
!   std::string to_string () const;
  
    Expr &get_base () { return *base_struct; }
  };
*************** public:
*** 1163,1169 ****
      return std::unique_ptr<StructExprField> (clone_struct_expr_field_impl ());
    }
  
!   virtual std::string as_string () const = 0;
  
    virtual void accept_vis (HIRFullVisitor &vis) = 0;
    virtual void accept_vis (HIRExpressionVisitor &vis) = 0;
--- 1159,1165 ----
      return std::unique_ptr<StructExprField> (clone_struct_expr_field_impl ());
    }
  
!   virtual std::string to_string () const = 0;
  
    virtual void accept_vis (HIRFullVisitor &vis) = 0;
    virtual void accept_vis (HIRExpressionVisitor &vis) = 0;
*************** public:
*** 1195,1201 ****
    StructExprFieldIdentifier (Analysis::NodeMapping mapping,
  			     Identifier field_identifier, location_t locus);
  
!   std::string as_string () const override { return field_name.as_string (); }
  
    void accept_vis (HIRFullVisitor &vis) override;
    void accept_vis (HIRExpressionVisitor &vis) override;
--- 1191,1197 ----
    StructExprFieldIdentifier (Analysis::NodeMapping mapping,
  			     Identifier field_identifier, location_t locus);
  
!   std::string to_string () const override { return field_name.as_string (); }
  
    void accept_vis (HIRFullVisitor &vis) override;
    void accept_vis (HIRExpressionVisitor &vis) override;
*************** protected:
*** 1237,1243 ****
    StructExprFieldWithVal &operator= (StructExprFieldWithVal &&other) = default;
  
  public:
!   std::string as_string () const override;
  
    Expr &get_value () { return *value; }
  };
--- 1233,1239 ----
    StructExprFieldWithVal &operator= (StructExprFieldWithVal &&other) = default;
  
  public:
!   std::string to_string () const override;
  
    Expr &get_value () { return *value; }
  };
*************** public:
*** 1255,1261 ****
  				  std::unique_ptr<Expr> field_value,
  				  location_t locus);
  
!   std::string as_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
    void accept_vis (HIRExpressionVisitor &vis) override;
--- 1251,1257 ----
  				  std::unique_ptr<Expr> field_value,
  				  location_t locus);
  
!   std::string to_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
    void accept_vis (HIRExpressionVisitor &vis) override;
*************** public:
*** 1289,1295 ****
  			     std::unique_ptr<Expr> field_value,
  			     location_t locus);
  
!   std::string as_string () const override;
  
    TupleIndex get_tuple_index () const { return index; };
  
--- 1285,1291 ----
  			     std::unique_ptr<Expr> field_value,
  			     location_t locus);
  
!   std::string to_string () const override;
  
    TupleIndex get_tuple_index () const { return index; };
  
*************** public:
*** 1322,1328 ****
    // is set when type checking
    int union_index = -1;
  
!   std::string as_string () const override;
  
    bool has_struct_base () const { return struct_base.has_value (); }
  
--- 1318,1324 ----
    // is set when type checking
    int union_index = -1;
  
!   std::string to_string () const override;
  
    bool has_struct_base () const { return struct_base.has_value (); }
  
*************** class CallExpr : public ExprWithoutBlock
*** 1420,1426 ****
    location_t locus;
  
  public:
!   std::string as_string () const override;
  
    CallExpr (Analysis::NodeMapping mappings, std::unique_ptr<Expr> function_expr,
  	    std::vector<std::unique_ptr<Expr>> function_params,
--- 1416,1422 ----
    location_t locus;
  
  public:
!   std::string to_string () const override;
  
    CallExpr (Analysis::NodeMapping mappings, std::unique_ptr<Expr> function_expr,
  	    std::vector<std::unique_ptr<Expr>> function_params,
*************** class MethodCallExpr : public ExprWithou
*** 1483,1489 ****
    location_t locus;
  
  public:
!   std::string as_string () const override;
  
    MethodCallExpr (Analysis::NodeMapping mappings,
  		  std::unique_ptr<Expr> call_receiver,
--- 1479,1485 ----
    location_t locus;
  
  public:
!   std::string to_string () const override;
  
    MethodCallExpr (Analysis::NodeMapping mappings,
  		  std::unique_ptr<Expr> call_receiver,
*************** class FieldAccessExpr : public ExprWitho
*** 1552,1558 ****
    location_t locus;
  
  public:
!   std::string as_string () const override;
  
    FieldAccessExpr (Analysis::NodeMapping mappings,
  		   std::unique_ptr<Expr> field_access_receiver,
--- 1548,1554 ----
    location_t locus;
  
  public:
!   std::string to_string () const override;
  
    FieldAccessExpr (Analysis::NodeMapping mappings,
  		   std::unique_ptr<Expr> field_access_receiver,
*************** public:
*** 1629,1635 ****
    ClosureParam (ClosureParam &&other) = default;
    ClosureParam &operator= (ClosureParam &&other) = default;
  
!   std::string as_string () const;
  
    const std::vector<AST::Attribute> &get_outer_attrs () const
    {
--- 1625,1631 ----
    ClosureParam (ClosureParam &&other) = default;
    ClosureParam &operator= (ClosureParam &&other) = default;
  
!   std::string to_string () const;
  
    const std::vector<AST::Attribute> &get_outer_attrs () const
    {
*************** public:
*** 1671,1677 ****
    ClosureExpr (ClosureExpr &&other) = default;
    ClosureExpr &operator= (ClosureExpr &&other) = default;
  
!   std::string as_string () const override;
  
    location_t get_locus () const override final { return locus; }
  
--- 1667,1673 ----
    ClosureExpr (ClosureExpr &&other) = default;
    ClosureExpr &operator= (ClosureExpr &&other) = default;
  
!   std::string to_string () const override;
  
    location_t get_locus () const override final { return locus; }
  
*************** public:
*** 1721,1727 ****
    location_t start_locus;
    location_t end_locus;
  
!   std::string as_string () const override;
  
    AST::AttrVec get_inner_attrs () const { return inner_attrs; }
  
--- 1717,1723 ----
    location_t start_locus;
    location_t end_locus;
  
!   std::string to_string () const override;
  
    AST::AttrVec get_inner_attrs () const { return inner_attrs; }
  
*************** public:
*** 1819,1825 ****
    AnonConst (const AnonConst &other);
    AnonConst operator= (const AnonConst &other);
  
!   std::string as_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
    void accept_vis (HIRExpressionVisitor &vis) override;
--- 1815,1821 ----
    AnonConst (const AnonConst &other);
    AnonConst operator= (const AnonConst &other);
  
!   std::string to_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
    void accept_vis (HIRExpressionVisitor &vis) override;
*************** public:
*** 1868,1874 ****
    void accept_vis (HIRFullVisitor &vis) override;
    void accept_vis (HIRExpressionVisitor &vis) override;
  
!   std::string as_string () const override;
  
    ExprType get_expression_type () const final override
    {
--- 1864,1870 ----
    void accept_vis (HIRFullVisitor &vis) override;
    void accept_vis (HIRExpressionVisitor &vis) override;
  
!   std::string to_string () const override;
  
    ExprType get_expression_type () const final override
    {
*************** class ContinueExpr : public ExprWithoutB
*** 1896,1902 ****
    location_t locus;
  
  public:
!   std::string as_string () const override;
  
    // Returns true if the continue expr has a label.
    bool has_label () const { return label.has_value (); }
--- 1892,1898 ----
    location_t locus;
  
  public:
!   std::string to_string () const override;
  
    // Returns true if the continue expr has a label.
    bool has_label () const { return label.has_value (); }
*************** class BreakExpr : public ExprWithoutBloc
*** 1947,1953 ****
    location_t locus;
  
  public:
!   std::string as_string () const override;
  
    // Returns whether the break expression has a label or not.
    bool has_label () const { return label.has_value (); }
--- 1943,1949 ----
    location_t locus;
  
  public:
!   std::string to_string () const override;
  
    // Returns whether the break expression has a label or not.
    bool has_label () const { return label.has_value (); }
*************** class RangeFromToExpr : public RangeExpr
*** 2026,2032 ****
    std::unique_ptr<Expr> to;
  
  public:
!   std::string as_string () const override;
  
    RangeFromToExpr (Analysis::NodeMapping mappings,
  		   std::unique_ptr<Expr> range_from,
--- 2022,2028 ----
    std::unique_ptr<Expr> to;
  
  public:
!   std::string to_string () const override;
  
    RangeFromToExpr (Analysis::NodeMapping mappings,
  		   std::unique_ptr<Expr> range_from,
*************** class RangeFromExpr : public RangeExpr
*** 2071,2077 ****
    std::unique_ptr<Expr> from;
  
  public:
!   std::string as_string () const override;
  
    RangeFromExpr (Analysis::NodeMapping mappings,
  		 std::unique_ptr<Expr> range_from, location_t locus);
--- 2067,2073 ----
    std::unique_ptr<Expr> from;
  
  public:
!   std::string to_string () const override;
  
    RangeFromExpr (Analysis::NodeMapping mappings,
  		 std::unique_ptr<Expr> range_from, location_t locus);
*************** class RangeToExpr : public RangeExpr
*** 2114,2120 ****
    std::unique_ptr<Expr> to;
  
  public:
!   std::string as_string () const override;
  
    // outer attributes not allowed
    RangeToExpr (Analysis::NodeMapping mappings, std::unique_ptr<Expr> range_to,
--- 2110,2116 ----
    std::unique_ptr<Expr> to;
  
  public:
!   std::string to_string () const override;
  
    // outer attributes not allowed
    RangeToExpr (Analysis::NodeMapping mappings, std::unique_ptr<Expr> range_to,
*************** protected:
*** 2156,2162 ****
  class RangeFullExpr : public RangeExpr
  {
  public:
!   std::string as_string () const override;
  
    RangeFullExpr (Analysis::NodeMapping mappings, location_t locus);
    // outer attributes not allowed
--- 2152,2158 ----
  class RangeFullExpr : public RangeExpr
  {
  public:
!   std::string to_string () const override;
  
    RangeFullExpr (Analysis::NodeMapping mappings, location_t locus);
    // outer attributes not allowed
*************** class RangeFromToInclExpr : public Range
*** 2188,2194 ****
    std::unique_ptr<Expr> to;
  
  public:
!   std::string as_string () const override;
  
    RangeFromToInclExpr (Analysis::NodeMapping mappings,
  		       std::unique_ptr<Expr> range_from,
--- 2184,2190 ----
    std::unique_ptr<Expr> to;
  
  public:
!   std::string to_string () const override;
  
    RangeFromToInclExpr (Analysis::NodeMapping mappings,
  		       std::unique_ptr<Expr> range_from,
*************** class RangeToInclExpr : public RangeExpr
*** 2234,2240 ****
    std::unique_ptr<Expr> to;
  
  public:
!   std::string as_string () const override;
  
    RangeToInclExpr (Analysis::NodeMapping mappings,
  		   std::unique_ptr<Expr> range_to, location_t locus);
--- 2230,2236 ----
    std::unique_ptr<Expr> to;
  
  public:
!   std::string to_string () const override;
  
    RangeToInclExpr (Analysis::NodeMapping mappings,
  		   std::unique_ptr<Expr> range_to, location_t locus);
*************** public:
*** 2279,2285 ****
  
    location_t locus;
  
!   std::string as_string () const override;
  
    /* Returns whether the object has an expression returned (i.e. not void return
     * type). */
--- 2275,2281 ----
  
    location_t locus;
  
!   std::string to_string () const override;
  
    /* Returns whether the object has an expression returned (i.e. not void return
     * type). */
*************** class UnsafeBlockExpr : public ExprWithB
*** 2337,2343 ****
    location_t locus;
  
  public:
!   std::string as_string () const override;
  
    UnsafeBlockExpr (Analysis::NodeMapping mappings,
  		   std::unique_ptr<BlockExpr> block_expr,
--- 2333,2339 ----
    location_t locus;
  
  public:
!   std::string to_string () const override;
  
    UnsafeBlockExpr (Analysis::NodeMapping mappings,
  		   std::unique_ptr<BlockExpr> block_expr,
*************** public:
*** 2428,2434 ****
  class LoopExpr : public BaseLoopExpr
  {
  public:
!   std::string as_string () const override;
  
    // Constructor for LoopExpr
    LoopExpr (Analysis::NodeMapping mappings,
--- 2424,2430 ----
  class LoopExpr : public BaseLoopExpr
  {
  public:
!   std::string to_string () const override;
  
    // Constructor for LoopExpr
    LoopExpr (Analysis::NodeMapping mappings,
*************** class WhileLoopExpr : public BaseLoopExp
*** 2458,2464 ****
    std::unique_ptr<Expr> condition;
  
  public:
!   std::string as_string () const override;
  
    // Constructor for while loop with loop label
    WhileLoopExpr (Analysis::NodeMapping mappings,
--- 2454,2460 ----
    std::unique_ptr<Expr> condition;
  
  public:
!   std::string to_string () const override;
  
    // Constructor for while loop with loop label
    WhileLoopExpr (Analysis::NodeMapping mappings,
*************** class WhileLetLoopExpr : public BaseLoop
*** 2506,2512 ****
    std::unique_ptr<Expr> condition;
  
  public:
!   std::string as_string () const override;
  
    // Constructor with a loop label
    WhileLetLoopExpr (Analysis::NodeMapping mappings,
--- 2502,2508 ----
    std::unique_ptr<Expr> condition;
  
  public:
!   std::string to_string () const override;
  
    // Constructor with a loop label
    WhileLetLoopExpr (Analysis::NodeMapping mappings,
*************** class IfExpr : public ExprWithBlock
*** 2560,2566 ****
    location_t locus;
  
  public:
!   std::string as_string () const override;
  
    IfExpr (Analysis::NodeMapping mappings, std::unique_ptr<Expr> condition,
  	  std::unique_ptr<BlockExpr> if_block, location_t locus);
--- 2556,2562 ----
    location_t locus;
  
  public:
!   std::string to_string () const override;
  
    IfExpr (Analysis::NodeMapping mappings, std::unique_ptr<Expr> condition,
  	  std::unique_ptr<BlockExpr> if_block, location_t locus);
*************** class IfExprConseqElse : public IfExpr
*** 2621,2627 ****
    std::unique_ptr<ExprWithBlock> else_block;
  
  public:
!   std::string as_string () const override;
  
    IfExprConseqElse (Analysis::NodeMapping mappings,
  		    std::unique_ptr<Expr> condition,
--- 2617,2623 ----
    std::unique_ptr<ExprWithBlock> else_block;
  
  public:
!   std::string to_string () const override;
  
    IfExprConseqElse (Analysis::NodeMapping mappings,
  		    std::unique_ptr<Expr> condition,
*************** public:
*** 2710,2716 ****
      return MatchArm (std::vector<std::unique_ptr<Pattern>> (), locus);
    }
  
!   std::string as_string () const;
  
    std::vector<std::unique_ptr<Pattern>> &get_patterns ()
    {
--- 2706,2712 ----
      return MatchArm (std::vector<std::unique_ptr<Pattern>> (), locus);
    }
  
!   std::string to_string () const;
  
    std::vector<std::unique_ptr<Pattern>> &get_patterns ()
    {
*************** public:
*** 2746,2752 ****
  
    ~MatchCase () = default;
  
!   std::string as_string () const;
  
    Analysis::NodeMapping get_mappings () const { return mappings; }
  
--- 2742,2749 ----
  
    ~MatchCase () = default;
  
!   std::string to_string () const;
!   std::string to_debug_string () const;
  
    Analysis::NodeMapping get_mappings () const { return mappings; }
  
*************** class MatchExpr : public ExprWithBlock,
*** 2762,2768 ****
    location_t locus;
  
  public:
!   std::string as_string () const override;
  
    bool has_match_arms () const { return !match_arms.empty (); }
  
--- 2759,2765 ----
    location_t locus;
  
  public:
!   std::string to_string () const override;
  
    bool has_match_arms () const { return !match_arms.empty (); }
  
*************** public:
*** 2829,2835 ****
    AwaitExpr (AwaitExpr &&other) = default;
    AwaitExpr &operator= (AwaitExpr &&other) = default;
  
!   std::string as_string () const override;
  
    location_t get_locus () const override final { return locus; }
  
--- 2826,2832 ----
    AwaitExpr (AwaitExpr &&other) = default;
    AwaitExpr &operator= (AwaitExpr &&other) = default;
  
!   std::string to_string () const override;
  
    location_t get_locus () const override final { return locus; }
  
*************** public:
*** 2874,2880 ****
    AsyncBlockExpr (AsyncBlockExpr &&other) = default;
    AsyncBlockExpr &operator= (AsyncBlockExpr &&other) = default;
  
!   std::string as_string () const override;
  
    location_t get_locus () const override final { return locus; }
  
--- 2871,2877 ----
    AsyncBlockExpr (AsyncBlockExpr &&other) = default;
    AsyncBlockExpr &operator= (AsyncBlockExpr &&other) = default;
  
!   std::string to_string () const override;
  
    location_t get_locus () const override final { return locus; }
  
*************** public:
*** 3185,3191 ****
  
    void accept_vis (HIRFullVisitor &vis) override;
  
!   std::string as_string () const override { return "InlineAsm HIR Node"; }
  
    location_t get_locus () const override { return locus; }
  
--- 3182,3188 ----
  
    void accept_vis (HIRFullVisitor &vis) override;
  
!   std::string to_string () const override { return "InlineAsm HIR Node"; }
  
    location_t get_locus () const override { return locus; }
  
*************** public:
*** 3253,3259 ****
    OffsetOf &operator= (const OffsetOf &other);
  
    ExprWithoutBlock *clone_expr_without_block_impl () const override;
!   std::string as_string () const override;
  
    void accept_vis (HIRExpressionVisitor &vis) override;
    void accept_vis (HIRFullVisitor &vis) override;
--- 3250,3256 ----
    OffsetOf &operator= (const OffsetOf &other);
  
    ExprWithoutBlock *clone_expr_without_block_impl () const override;
!   std::string to_string () const override;
  
    void accept_vis (HIRExpressionVisitor &vis) override;
    void accept_vis (HIRFullVisitor &vis) override;
diff -Nrcpad gcc-16-20251221/gcc/rust/hir/tree/rust-hir-generic-param.cc gcc-16-20251228/gcc/rust/hir/tree/rust-hir-generic-param.cc
*** gcc-16-20251221/gcc/rust/hir/tree/rust-hir-generic-param.cc	Sun Dec 21 22:32:07 2025
--- gcc-16-20251228/gcc/rust/hir/tree/rust-hir-generic-param.cc	Sun Dec 28 22:32:07 2025
*************** LifetimeParam::operator= (LifetimeParam
*** 54,59 ****
--- 54,114 ----
    return *this;
  }
  
+ std::string
+ LifetimeParam::to_debug_string () const
+ {
+   std::string result = "LifetimeParam";
+   result += "\nOuter attributes: ";
+   if (outer_attrs.empty ())
+     {
+       result += "\nnone";
+     }
+   else
+     {
+       for (const auto &attr : outer_attrs)
+ 	{
+ 	  result += "\n" + attr.as_string ();
+ 	}
+     }
+   result += lifetime.to_string ();
+   if (!lifetime_bounds.empty ())
+     {
+       result += ": ";
+       for (size_t i = 0; i < lifetime_bounds.size (); ++i)
+ 	{
+ 	  if (i > 0)
+ 	    result += " + ";
+ 	  result += lifetime_bounds[i].to_string ();
+ 	}
+     }
+   return result;
+ }
+ 
+ std::string
+ LifetimeParam::to_string () const
+ {
+   std::string result;
+   if (!outer_attrs.empty ())
+     {
+       for (const auto &attr : outer_attrs)
+ 	{
+ 	  result += attr.as_string () + "\n";
+ 	}
+     }
+   result += lifetime.to_string ();
+   if (!lifetime_bounds.empty ())
+     {
+       result += ": ";
+       for (size_t i = 0; i < lifetime_bounds.size (); ++i)
+ 	{
+ 	  if (i > 0)
+ 	    result += " + ";
+ 	  result += lifetime_bounds[i].to_string ();
+ 	}
+     }
+   return result;
+ }
+ 
  ConstGenericParam::ConstGenericParam (std::string name,
  				      std::unique_ptr<Type> type,
  				      std::unique_ptr<Expr> default_expression,
*************** ConstGenericParam::ConstGenericParam (co
*** 77,88 ****
  }
  
  std::string
! ConstGenericParam::as_string () const
  {
!   auto result = "ConstGenericParam: " + name + " : " + type->as_string ();
  
    if (default_expression)
!     result += " = " + default_expression->as_string ();
  
    return result;
  }
--- 132,171 ----
  }
  
  std::string
! ConstGenericParam::to_debug_string () const
  {
!   std::string result = "ConstGenericParam:\n";
!   result += "Outer attributes: ";
!   if (outer_attrs.empty ())
!     {
!       result += "\nnone";
!     }
!   else
!     {
!       for (const auto &attr : outer_attrs)
! 	{
! 	  result += "\n" + attr.as_string ();
! 	}
!     }
!   result += "\nconst " + name + ": " + type->to_string ();
  
    if (default_expression)
!     result += " = " + default_expression->to_string ();
! 
!   return result;
! }
! 
! std::string
! ConstGenericParam::to_string () const
! {
!   std::string result;
!   if (!outer_attrs.empty ())
!     for (const auto &attr : outer_attrs)
!       result += attr.as_string () + "\n";
!   result = "const " + name + ": " + type->to_string ();
! 
!   if (default_expression)
!     result += " = " + default_expression->to_string ();
  
    return result;
  }
diff -Nrcpad gcc-16-20251221/gcc/rust/hir/tree/rust-hir-generic-param.h gcc-16-20251228/gcc/rust/hir/tree/rust-hir-generic-param.h
*** gcc-16-20251221/gcc/rust/hir/tree/rust-hir-generic-param.h	Sun Dec 21 22:32:07 2025
--- gcc-16-20251228/gcc/rust/hir/tree/rust-hir-generic-param.h	Sun Dec 28 22:32:07 2025
*************** public:
*** 51,57 ****
      return std::unique_ptr<GenericParam> (clone_generic_param_impl ());
    }
  
!   virtual std::string as_string () const = 0;
  
    virtual location_t get_locus () const = 0;
  
--- 51,59 ----
      return std::unique_ptr<GenericParam> (clone_generic_param_impl ());
    }
  
!   virtual std::string to_debug_string () const = 0;
! 
!   virtual std::string to_string () const = 0;
  
    virtual location_t get_locus () const = 0;
  
*************** public:
*** 116,122 ****
    LifetimeParam (LifetimeParam &&other) = default;
    LifetimeParam &operator= (LifetimeParam &&other) = default;
  
!   std::string as_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
  
--- 118,126 ----
    LifetimeParam (LifetimeParam &&other) = default;
    LifetimeParam &operator= (LifetimeParam &&other) = default;
  
!   std::string to_debug_string () const override;
! 
!   std::string to_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
  
*************** public:
*** 144,150 ****
  
    AST::AttrVec &get_outer_attrs () override { return outer_attrs; }
  
!   std::string as_string () const override final;
  
    void accept_vis (HIRFullVisitor &vis) override final;
  
--- 148,156 ----
  
    AST::AttrVec &get_outer_attrs () override { return outer_attrs; }
  
!   std::string to_debug_string () const override final;
! 
!   std::string to_string () const override final;
  
    void accept_vis (HIRFullVisitor &vis) override final;
  
diff -Nrcpad gcc-16-20251221/gcc/rust/hir/tree/rust-hir-item.h gcc-16-20251228/gcc/rust/hir/tree/rust-hir-item.h
*** gcc-16-20251221/gcc/rust/hir/tree/rust-hir-item.h	Sun Dec 21 22:32:07 2025
--- gcc-16-20251228/gcc/rust/hir/tree/rust-hir-item.h	Sun Dec 28 22:32:07 2025
*************** public:
*** 65,71 ****
  
    BaseKind get_hir_kind () override { return Node::BaseKind::ITEM; }
  
!   std::string as_string () const override;
  
    /* Adds crate names to the vector passed by reference, if it can
     * (polymorphism). */
--- 65,71 ----
  
    BaseKind get_hir_kind () override { return Node::BaseKind::ITEM; }
  
!   std::string to_string () const override;
  
    /* Adds crate names to the vector passed by reference, if it can
     * (polymorphism). */
*************** public:
*** 130,136 ****
  
    TypeParam &operator= (TypeParam &&other) = default;
  
!   std::string as_string () const override;
  
    location_t get_locus () const override final { return locus; }
  
--- 130,138 ----
  
    TypeParam &operator= (TypeParam &&other) = default;
  
!   std::string to_debug_string () const override;
! 
!   std::string to_string () const override;
  
    location_t get_locus () const override final { return locus; }
  
*************** public:
*** 177,183 ****
      return std::unique_ptr<WhereClauseItem> (clone_where_clause_item_impl ());
    }
  
!   virtual std::string as_string () const = 0;
  
    virtual void accept_vis (HIRFullVisitor &vis) = 0;
  
--- 179,185 ----
      return std::unique_ptr<WhereClauseItem> (clone_where_clause_item_impl ());
    }
  
!   virtual std::string to_string () const = 0;
  
    virtual void accept_vis (HIRFullVisitor &vis) = 0;
  
*************** public:
*** 207,213 ****
        mappings (std::move (mappings))
    {}
  
!   std::string as_string () const override;
  
    location_t get_locus () const { return locus; }
  
--- 209,215 ----
        mappings (std::move (mappings))
    {}
  
!   std::string to_string () const override;
  
    location_t get_locus () const { return locus; }
  
*************** public:
*** 270,276 ****
  
    location_t get_locus () const { return locus; }
  
!   std::string as_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
  
--- 272,278 ----
  
    location_t get_locus () const { return locus; }
  
!   std::string to_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
  
*************** public:
*** 342,348 ****
    // Returns whether the WhereClause has no items.
    bool is_empty () const { return where_clause_items.empty (); }
  
!   std::string as_string () const;
  
    std::vector<std::unique_ptr<WhereClauseItem>> &get_items ()
    {
--- 344,350 ----
    // Returns whether the WhereClause has no items.
    bool is_empty () const { return where_clause_items.empty (); }
  
!   std::string to_string () const;
  
    std::vector<std::unique_ptr<WhereClauseItem>> &get_items ()
    {
*************** public:
*** 406,412 ****
  
    Lifetime &get_lifetime () { return lifetime.value (); }
  
!   std::string as_string () const;
  
    location_t get_locus () const { return locus; }
  
--- 408,414 ----
  
    Lifetime &get_lifetime () { return lifetime.value (); }
  
!   std::string to_string () const;
  
    location_t get_locus () const { return locus; }
  
*************** public:
*** 444,450 ****
        unsafety (unsafety), has_extern (has_extern), abi (abi)
    {}
  
!   std::string as_string () const;
  
    Const get_const_status () const { return const_status; }
  
--- 446,452 ----
        unsafety (unsafety), has_extern (has_extern), abi (abi)
    {}
  
!   std::string to_string () const;
  
    Const get_const_status () const { return const_status; }
  
*************** public:
*** 479,485 ****
    FunctionParam (FunctionParam &&other) = default;
    FunctionParam &operator= (FunctionParam &&other) = default;
  
!   std::string as_string () const;
  
    location_t get_locus () const { return locus; }
  
--- 481,487 ----
    FunctionParam (FunctionParam &&other) = default;
    FunctionParam &operator= (FunctionParam &&other) = default;
  
!   std::string to_string () const;
  
    location_t get_locus () const { return locus; }
  
*************** public:
*** 531,537 ****
    Visibility &get_visibility () { return visibility; }
    const Visibility &get_visibility () const { return visibility; }
  
!   std::string as_string () const override;
  };
  
  // Rust module item - abstract base class
--- 533,539 ----
    Visibility &get_visibility () { return visibility; }
    const Visibility &get_visibility () const { return visibility; }
  
!   std::string to_string () const override;
  };
  
  // Rust module item - abstract base class
*************** class Module : public VisItem, public Wi
*** 543,549 ****
    std::vector<std::unique_ptr<Item>> items;
  
  public:
!   std::string as_string () const override;
  
    // Returns whether the module has items in its body.
    bool has_items () const { return !items.empty (); }
--- 545,551 ----
    std::vector<std::unique_ptr<Item>> items;
  
  public:
!   std::string to_string () const override;
  
    // Returns whether the module has items in its body.
    bool has_items () const { return !items.empty (); }
*************** class ExternCrate : public VisItem
*** 609,615 ****
        "extern crate foo"
        "extern crate std as cool_std"  */
  public:
!   std::string as_string () const override;
  
    // Returns whether extern crate declaration has an as clause.
    bool has_as_clause () const { return !as_clause_name.empty (); }
--- 611,617 ----
        "extern crate foo"
        "extern crate std as cool_std"  */
  public:
!   std::string to_string () const override;
  
    // Returns whether extern crate declaration has an as clause.
    bool has_as_clause () const { return !as_clause_name.empty (); }
*************** public:
*** 673,679 ****
      return std::unique_ptr<UseTree> (clone_use_tree_impl ());
    }
  
!   virtual std::string as_string () const = 0;
  
    location_t get_locus () const { return locus; }
  
--- 675,681 ----
      return std::unique_ptr<UseTree> (clone_use_tree_impl ());
    }
  
!   virtual std::string to_string () const = 0;
  
    location_t get_locus () const { return locus; }
  
*************** public:
*** 720,726 ****
    PathType get_glob_type () { return glob_type; }
    AST::SimplePath get_path () { return path; };
  
!   std::string as_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
  
--- 722,728 ----
    PathType get_glob_type () { return glob_type; }
    AST::SimplePath get_path () { return path; };
  
!   std::string to_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
  
*************** public:
*** 801,807 ****
    // Returns whether has inner tree elements.
    bool has_trees () const { return !trees.empty (); }
  
!   std::string as_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
  
--- 803,809 ----
    // Returns whether has inner tree elements.
    bool has_trees () const { return !trees.empty (); }
  
!   std::string to_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
  
*************** public:
*** 856,862 ****
    // Returns whether has identifier (or, rather, is allowed to).
    bool has_identifier () const { return bind_type == IDENTIFIER; }
  
!   std::string as_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
  
--- 858,864 ----
    // Returns whether has identifier (or, rather, is allowed to).
    bool has_identifier () const { return bind_type == IDENTIFIER; }
  
!   std::string to_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
  
*************** class UseDeclaration : public VisItem
*** 880,886 ****
    location_t locus;
  
  public:
!   std::string as_string () const override;
  
    UseDeclaration (Analysis::NodeMapping mappings,
  		  std::unique_ptr<UseTree> use_tree, Visibility visibility,
--- 882,888 ----
    location_t locus;
  
  public:
!   std::string to_string () const override;
  
    UseDeclaration (Analysis::NodeMapping mappings,
  		  std::unique_ptr<UseTree> use_tree, Visibility visibility,
*************** class Function : public VisItem, public
*** 962,968 ****
    Defaultness defaultness;
  
  public:
!   std::string as_string () const override;
  
    // Returns whether function has generic parameters.
    bool has_generics () const { return !generic_params.empty (); }
--- 964,970 ----
    Defaultness defaultness;
  
  public:
!   std::string to_string () const override;
  
    // Returns whether function has generic parameters.
    bool has_generics () const { return !generic_params.empty (); }
*************** class TypeAlias : public VisItem, public
*** 1091,1097 ****
    location_t locus;
  
  public:
!   std::string as_string () const override;
  
    // Returns whether type alias has generic parameters.
    bool has_generics () const { return !generic_params.empty (); }
--- 1093,1099 ----
    location_t locus;
  
  public:
!   std::string to_string () const override;
  
    // Returns whether type alias has generic parameters.
    bool has_generics () const { return !generic_params.empty (); }
*************** protected:
*** 1175,1181 ****
  class Struct : public VisItem
  {
  protected:
!   // protected to enable access by derived classes - allows better as_string
    Identifier struct_name;
  
    // bool has_generics;
--- 1177,1183 ----
  class Struct : public VisItem
  {
  protected:
!   // protected to enable access by derived classes - allows better to_string
    Identifier struct_name;
  
    // bool has_generics;
*************** public:
*** 1287,1293 ****
    StructField (StructField &&other) = default;
    StructField &operator= (StructField &&other) = default;
  
!   std::string as_string () const;
  
    Identifier get_field_name () const { return field_name; }
  
--- 1289,1295 ----
    StructField (StructField &&other) = default;
    StructField &operator= (StructField &&other) = default;
  
!   std::string to_string () const;
  
    Identifier get_field_name () const { return field_name; }
  
*************** public:
*** 1307,1313 ****
    std::vector<StructField> fields;
    bool is_unit;
  
!   std::string as_string () const override;
  
    // Mega-constructor with all possible fields
    StructStruct (Analysis::NodeMapping mappings, std::vector<StructField> fields,
--- 1309,1315 ----
    std::vector<StructField> fields;
    bool is_unit;
  
!   std::string to_string () const override;
  
    // Mega-constructor with all possible fields
    StructStruct (Analysis::NodeMapping mappings, std::vector<StructField> fields,
*************** public:
*** 1403,1409 ****
    // Returns whether tuple field is in an error state.
    bool is_error () const { return field_type == nullptr; }
  
!   std::string as_string () const;
  
    Analysis::NodeMapping get_mappings () const { return mappings; }
  
--- 1405,1411 ----
    // Returns whether tuple field is in an error state.
    bool is_error () const { return field_type == nullptr; }
  
!   std::string to_string () const;
  
    Analysis::NodeMapping get_mappings () const { return mappings; }
  
*************** class TupleStruct : public Struct
*** 1421,1427 ****
    std::vector<TupleField> fields;
  
  public:
!   std::string as_string () const override;
  
    // Mega-constructor with all possible fields
    TupleStruct (Analysis::NodeMapping mappings, std::vector<TupleField> fields,
--- 1423,1429 ----
    std::vector<TupleField> fields;
  
  public:
!   std::string to_string () const override;
  
    // Mega-constructor with all possible fields
    TupleStruct (Analysis::NodeMapping mappings, std::vector<TupleField> fields,
*************** public:
*** 1481,1487 ****
      return std::unique_ptr<EnumItem> (clone_item_impl ());
    }
  
!   virtual std::string as_string () const override;
    virtual EnumItemKind get_enum_item_kind () const { return Named; };
  
    // not pure virtual as not abstract
--- 1483,1489 ----
      return std::unique_ptr<EnumItem> (clone_item_impl ());
    }
  
!   virtual std::string to_string () const override;
    virtual EnumItemKind get_enum_item_kind () const { return Named; };
  
    // not pure virtual as not abstract
*************** public:
*** 1518,1524 ****
  		 std::vector<TupleField> tuple_fields, AST::AttrVec outer_attrs,
  		 location_t locus);
  
!   std::string as_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
    void accept_vis (HIRStmtVisitor &vis) override;
--- 1520,1526 ----
  		 std::vector<TupleField> tuple_fields, AST::AttrVec outer_attrs,
  		 location_t locus);
  
!   std::string to_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
    void accept_vis (HIRStmtVisitor &vis) override;
*************** public:
*** 1552,1558 ****
  		  std::vector<StructField> struct_fields,
  		  AST::AttrVec outer_attrs, location_t locus);
  
!   std::string as_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
    void accept_vis (HIRStmtVisitor &vis) override;
--- 1554,1560 ----
  		  std::vector<StructField> struct_fields,
  		  AST::AttrVec outer_attrs, location_t locus);
  
!   std::string to_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
    void accept_vis (HIRStmtVisitor &vis) override;
*************** public:
*** 1592,1598 ****
      return EnumItemKind::Discriminant;
    }
  
!   std::string as_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
    void accept_vis (HIRStmtVisitor &vis) override;
--- 1594,1600 ----
      return EnumItemKind::Discriminant;
    }
  
!   std::string to_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
    void accept_vis (HIRStmtVisitor &vis) override;
*************** class Enum : public VisItem
*** 1629,1635 ****
    location_t locus;
  
  public:
!   std::string as_string () const override;
  
    // Returns whether "enum" has generic parameters.
    bool has_generics () const { return !generic_params.empty (); }
--- 1631,1637 ----
    location_t locus;
  
  public:
!   std::string to_string () const override;
  
    // Returns whether "enum" has generic parameters.
    bool has_generics () const { return !generic_params.empty (); }
*************** class Union : public VisItem
*** 1710,1716 ****
    location_t locus;
  
  public:
!   std::string as_string () const override;
  
    // Returns whether union has generic params.
    bool has_generics () const { return !generic_params.empty (); }
--- 1712,1718 ----
    location_t locus;
  
  public:
!   std::string to_string () const override;
  
    // Returns whether union has generic params.
    bool has_generics () const { return !generic_params.empty (); }
*************** class ConstantItem : public VisItem, pub
*** 1766,1772 ****
    location_t locus;
  
  public:
!   std::string as_string () const override;
  
    ConstantItem (Analysis::NodeMapping mappings, Identifier ident,
  		Visibility vis, std::unique_ptr<Type> type,
--- 1768,1774 ----
    location_t locus;
  
  public:
!   std::string to_string () const override;
  
    ConstantItem (Analysis::NodeMapping mappings, Identifier ident,
  		Visibility vis, std::unique_ptr<Type> type,
*************** class StaticItem : public VisItem
*** 1852,1858 ****
    location_t locus;
  
  public:
!   std::string as_string () const override;
  
    StaticItem (Analysis::NodeMapping mappings, Identifier name, Mutability mut,
  	      std::unique_ptr<Type> type, std::unique_ptr<Expr> expr,
--- 1854,1860 ----
    location_t locus;
  
  public:
!   std::string to_string () const override;
  
    StaticItem (Analysis::NodeMapping mappings, Identifier name, Mutability mut,
  	      std::unique_ptr<Type> type, std::unique_ptr<Expr> expr,
*************** public:
*** 1934,1940 ****
    TraitFunctionDecl (TraitFunctionDecl &&other) = default;
    TraitFunctionDecl &operator= (TraitFunctionDecl &&other) = default;
  
!   std::string as_string () const;
  
    // Returns whether function decl has generic parameters.
    bool has_generics () const { return !generic_params.empty (); }
--- 1936,1942 ----
    TraitFunctionDecl (TraitFunctionDecl &&other) = default;
    TraitFunctionDecl &operator= (TraitFunctionDecl &&other) = default;
  
!   std::string to_string () const;
  
    // Returns whether function decl has generic parameters.
    bool has_generics () const { return !generic_params.empty (); }
*************** public:
*** 1998,2004 ****
    TraitItemFunc (TraitItemFunc &&other) = default;
    TraitItemFunc &operator= (TraitItemFunc &&other) = default;
  
!   std::string as_string () const override;
  
    location_t get_locus () const { return locus; }
  
--- 2000,2006 ----
    TraitItemFunc (TraitItemFunc &&other) = default;
    TraitItemFunc &operator= (TraitItemFunc &&other) = default;
  
!   std::string to_string () const override;
  
    location_t get_locus () const { return locus; }
  
*************** public:
*** 2064,2070 ****
    TraitItemConst (TraitItemConst &&other) = default;
    TraitItemConst &operator= (TraitItemConst &&other) = default;
  
!   std::string as_string () const override;
  
    location_t get_locus () const { return locus; }
  
--- 2066,2072 ----
    TraitItemConst (TraitItemConst &&other) = default;
    TraitItemConst &operator= (TraitItemConst &&other) = default;
  
!   std::string to_string () const override;
  
    location_t get_locus () const { return locus; }
  
*************** public:
*** 2148,2154 ****
    TraitItemType (TraitItemType &&other) = default;
    TraitItemType &operator= (TraitItemType &&other) = default;
  
!   std::string as_string () const override;
  
    location_t get_locus () const { return locus; }
  
--- 2150,2156 ----
    TraitItemType (TraitItemType &&other) = default;
    TraitItemType &operator= (TraitItemType &&other) = default;
  
!   std::string to_string () const override;
  
    location_t get_locus () const { return locus; }
  
*************** class Trait : public VisItem
*** 2209,2215 ****
    location_t locus;
  
  public:
!   std::string as_string () const override;
  
    // Returns whether trait has generic parameters.
    bool has_generics () const { return !generic_params.empty (); }
--- 2211,2217 ----
    location_t locus;
  
  public:
!   std::string to_string () const override;
  
    // Returns whether trait has generic parameters.
    bool has_generics () const { return !generic_params.empty (); }
*************** public:
*** 2313,2319 ****
    ImplBlock (ImplBlock &&other) = default;
    ImplBlock &operator= (ImplBlock &&other) = default;
  
!   std::string as_string () const override;
  
    // Returns whether inherent impl block has inherent impl items.
    bool has_impl_items () const { return !impl_items.empty (); }
--- 2315,2321 ----
    ImplBlock (ImplBlock &&other) = default;
    ImplBlock &operator= (ImplBlock &&other) = default;
  
!   std::string to_string () const override;
  
    // Returns whether inherent impl block has inherent impl items.
    bool has_impl_items () const { return !impl_items.empty (); }
*************** public:
*** 2405,2411 ****
      return std::unique_ptr<ExternalItem> (clone_external_item_impl ());
    }
  
!   virtual std::string as_string () const;
  
    location_t get_locus () const { return locus; }
  
--- 2407,2418 ----
      return std::unique_ptr<ExternalItem> (clone_external_item_impl ());
    }
  
!   virtual std::string to_string () const;
! 
!   std::string to_debug_string () const
!   {
!     return to_string () + mappings.as_string ();
!   }
  
    location_t get_locus () const { return locus; }
  
*************** public:
*** 2459,2465 ****
    ExternalStaticItem (ExternalStaticItem &&other) = default;
    ExternalStaticItem &operator= (ExternalStaticItem &&other) = default;
  
!   std::string as_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
    void accept_vis (HIRExternalItemVisitor &vis) override;
--- 2466,2472 ----
    ExternalStaticItem (ExternalStaticItem &&other) = default;
    ExternalStaticItem &operator= (ExternalStaticItem &&other) = default;
  
!   std::string to_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
    void accept_vis (HIRExternalItemVisitor &vis) override;
*************** public:
*** 2507,2513 ****
    NamedFunctionParam (NamedFunctionParam &&other) = default;
    NamedFunctionParam &operator= (NamedFunctionParam &&other) = default;
  
!   std::string as_string () const;
  
    Identifier get_param_name () const { return name; }
  
--- 2514,2520 ----
    NamedFunctionParam (NamedFunctionParam &&other) = default;
    NamedFunctionParam &operator= (NamedFunctionParam &&other) = default;
  
!   std::string to_string () const;
  
    Identifier get_param_name () const { return name; }
  
*************** public:
*** 2569,2575 ****
    ExternalFunctionItem (ExternalFunctionItem &&other) = default;
    ExternalFunctionItem &operator= (ExternalFunctionItem &&other) = default;
  
!   std::string as_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
    void accept_vis (HIRExternalItemVisitor &vis) override;
--- 2576,2582 ----
    ExternalFunctionItem (ExternalFunctionItem &&other) = default;
    ExternalFunctionItem &operator= (ExternalFunctionItem &&other) = default;
  
!   std::string to_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
    void accept_vis (HIRExternalItemVisitor &vis) override;
*************** public:
*** 2611,2617 ****
    ExternalTypeItem &operator= (ExternalTypeItem &&other) = default;
    ExternalTypeItem &operator= (ExternalTypeItem const &other) = default;
  
!   std::string as_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
    void accept_vis (HIRExternalItemVisitor &vis) override;
--- 2618,2624 ----
    ExternalTypeItem &operator= (ExternalTypeItem &&other) = default;
    ExternalTypeItem &operator= (ExternalTypeItem const &other) = default;
  
!   std::string to_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
    void accept_vis (HIRExternalItemVisitor &vis) override;
*************** class ExternBlock : public VisItem, publ
*** 2635,2641 ****
    location_t locus;
  
  public:
!   std::string as_string () const override;
  
    // Returns whether extern block has extern items.
    bool has_extern_items () const { return !extern_items.empty (); }
--- 2642,2648 ----
    location_t locus;
  
  public:
!   std::string to_string () const override;
  
    // Returns whether extern block has extern items.
    bool has_extern_items () const { return !extern_items.empty (); }
diff -Nrcpad gcc-16-20251221/gcc/rust/hir/tree/rust-hir-path.cc gcc-16-20251228/gcc/rust/hir/tree/rust-hir-path.cc
*** gcc-16-20251221/gcc/rust/hir/tree/rust-hir-path.cc	Sun Dec 21 22:32:07 2025
--- gcc-16-20251228/gcc/rust/hir/tree/rust-hir-path.cc	Sun Dec 28 22:32:07 2025
*************** PathInExpression::is_self () const
*** 168,174 ****
    if (!is_single_segment ())
      return false;
  
!   return get_final_segment ().get_segment ().as_string ().compare ("self") == 0;
  }
  
  TypePathSegment::TypePathSegment (Analysis::NodeMapping mappings,
--- 168,176 ----
    if (!is_single_segment ())
      return false;
  
!   return get_final_segment ().get_segment ().to_string ().compare (
! 	   Rust::Values::Keywords::SELF)
! 	 == 0;
  }
  
  TypePathSegment::TypePathSegment (Analysis::NodeMapping mappings,
diff -Nrcpad gcc-16-20251221/gcc/rust/hir/tree/rust-hir-path.h gcc-16-20251228/gcc/rust/hir/tree/rust-hir-path.h
*** gcc-16-20251221/gcc/rust/hir/tree/rust-hir-path.h	Sun Dec 21 22:32:07 2025
--- gcc-16-20251228/gcc/rust/hir/tree/rust-hir-path.h	Sun Dec 28 22:32:07 2025
*************** public:
*** 57,63 ****
    // Returns whether PathIdentSegment is in an error state.
    bool is_error () const { return segment_name.empty (); }
  
!   std::string as_string () const { return segment_name; }
  };
  
  // A binding of an identifier to a type used in generic arguments in paths
--- 57,63 ----
    // Returns whether PathIdentSegment is in an error state.
    bool is_error () const { return segment_name.empty (); }
  
!   std::string to_string () const { return segment_name; }
  };
  
  // A binding of an identifier to a type used in generic arguments in paths
*************** public:
*** 99,105 ****
    GenericArgsBinding (GenericArgsBinding &&other) = default;
    GenericArgsBinding &operator= (GenericArgsBinding &&other) = default;
  
!   std::string as_string () const;
  
    Identifier &get_identifier () { return identifier; }
    const Identifier &get_identifier () const { return identifier; }
--- 99,105 ----
    GenericArgsBinding (GenericArgsBinding &&other) = default;
    GenericArgsBinding &operator= (GenericArgsBinding &&other) = default;
  
!   std::string to_string () const;
  
    Identifier &get_identifier () { return identifier; }
    const Identifier &get_identifier () const { return identifier; }
*************** public:
*** 180,186 ****
  
    bool is_empty () const;
  
!   std::string as_string () const;
  
    std::vector<Lifetime> &get_lifetime_args () { return lifetime_args; }
    const std::vector<Lifetime> &get_lifetime_args () const
--- 180,186 ----
  
    bool is_empty () const;
  
!   std::string to_string () const;
  
    std::vector<Lifetime> &get_lifetime_args () { return lifetime_args; }
    const std::vector<Lifetime> &get_lifetime_args () const
*************** public:
*** 220,226 ****
    PathExprSegment (PathExprSegment &&other) = default;
    PathExprSegment &operator= (PathExprSegment &&other) = default;
  
!   std::string as_string () const;
  
    location_t get_locus () const { return locus; }
  
--- 220,226 ----
    PathExprSegment (PathExprSegment &&other) = default;
    PathExprSegment &operator= (PathExprSegment &&other) = default;
  
!   std::string to_string () const;
  
    location_t get_locus () const { return locus; }
  
*************** public:
*** 280,286 ****
      return segments.size () == 1;
    }
  
!   std::string as_string () const override;
  
    void iterate_path_segments (std::function<bool (PathExprSegment &)> cb);
  
--- 280,286 ----
      return segments.size () == 1;
    }
  
!   std::string to_string () const override;
  
    void iterate_path_segments (std::function<bool (PathExprSegment &)> cb);
  
*************** class PathInExpression : public PathPatt
*** 339,345 ****
    location_t locus;
  
  public:
!   std::string as_string () const override;
  
    // Constructor
    PathInExpression (Analysis::NodeMapping mappings,
--- 339,345 ----
    location_t locus;
  
  public:
!   std::string to_string () const override;
  
    // Constructor
    PathInExpression (Analysis::NodeMapping mappings,
*************** public:
*** 459,468 ****
    TypePathSegment (Analysis::NodeMapping mappings, std::string segment_name,
  		   bool has_separating_scope_resolution, location_t locus);
  
!   virtual std::string as_string () const
    {
      if (ident_segment)
!       return ident_segment->as_string ();
  
      return LangItem::PrettyString (*lang_item);
    }
--- 459,468 ----
    TypePathSegment (Analysis::NodeMapping mappings, std::string segment_name,
  		   bool has_separating_scope_resolution, location_t locus);
  
!   virtual std::string to_string () const
    {
      if (ident_segment)
!       return ident_segment->to_string ();
  
      return LangItem::PrettyString (*lang_item);
    }
*************** public:
*** 536,542 ****
  			  std::vector<ConstGenericArg> const_args,
  			  location_t locus);
  
!   std::string as_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
  
--- 536,542 ----
  			  std::vector<ConstGenericArg> const_args,
  			  location_t locus);
  
!   std::string to_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
  
*************** public:
*** 583,589 ****
    TypePathFunction (TypePathFunction &&other) = default;
    TypePathFunction &operator= (TypePathFunction &&other) = default;
  
!   std::string as_string () const;
  
    const std::vector<std::unique_ptr<Type> > &get_params () const
    {
--- 583,589 ----
    TypePathFunction (TypePathFunction &&other) = default;
    TypePathFunction &operator= (TypePathFunction &&other) = default;
  
!   std::string to_string () const;
  
    const std::vector<std::unique_ptr<Type> > &get_params () const
    {
*************** public:
*** 613,619 ****
  			   bool has_separating_scope_resolution,
  			   TypePathFunction function_path, location_t locus);
  
!   std::string as_string () const override;
  
    bool is_ident_only () const override { return false; }
  
--- 613,619 ----
  			   bool has_separating_scope_resolution,
  			   TypePathFunction function_path, location_t locus);
  
!   std::string to_string () const override;
  
    bool is_ident_only () const override { return false; }
  
*************** public:
*** 683,689 ****
    TypePath (TypePath &&other) = default;
    TypePath &operator= (TypePath &&other) = default;
  
!   std::string as_string () const override;
  
    /* Converts TypePath to SimplePath if possible (i.e. no generic or function
     * arguments). Otherwise returns an empty SimplePath. */
--- 683,689 ----
    TypePath (TypePath &&other) = default;
    TypePath &operator= (TypePath &&other) = default;
  
!   std::string to_string () const override;
  
    /* Converts TypePath to SimplePath if possible (i.e. no generic or function
     * arguments). Otherwise returns an empty SimplePath. */
*************** public:
*** 733,739 ****
    // Returns whether the qualified path type has a rebind as clause.
    bool has_as_clause () const { return trait != nullptr; }
  
!   std::string as_string () const;
  
    location_t get_locus () const { return locus; }
  
--- 733,739 ----
    // Returns whether the qualified path type has a rebind as clause.
    bool has_as_clause () const { return trait != nullptr; }
  
!   std::string to_string () const;
  
    location_t get_locus () const { return locus; }
  
*************** class QualifiedPathInExpression : public
*** 767,773 ****
    location_t locus;
  
  public:
!   std::string as_string () const override;
  
    QualifiedPathInExpression (Analysis::NodeMapping mappings,
  			     QualifiedPathType qual_path_type,
--- 767,773 ----
    location_t locus;
  
  public:
!   std::string to_string () const override;
  
    QualifiedPathInExpression (Analysis::NodeMapping mappings,
  			     QualifiedPathType qual_path_type,
*************** public:
*** 855,861 ****
    QualifiedPathInType (QualifiedPathInType &&other) = default;
    QualifiedPathInType &operator= (QualifiedPathInType &&other) = default;
  
!   std::string as_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
    void accept_vis (HIRTypeVisitor &vis) override;
--- 855,861 ----
    QualifiedPathInType (QualifiedPathInType &&other) = default;
    QualifiedPathInType &operator= (QualifiedPathInType &&other) = default;
  
!   std::string to_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
    void accept_vis (HIRTypeVisitor &vis) override;
diff -Nrcpad gcc-16-20251221/gcc/rust/hir/tree/rust-hir-pattern-abstract.h gcc-16-20251228/gcc/rust/hir/tree/rust-hir-pattern-abstract.h
*** gcc-16-20251221/gcc/rust/hir/tree/rust-hir-pattern-abstract.h	Sun Dec 21 22:32:07 2025
--- gcc-16-20251228/gcc/rust/hir/tree/rust-hir-pattern-abstract.h	Sun Dec 28 22:32:07 2025
*************** public:
*** 61,67 ****
  
    virtual ~Pattern () {}
  
!   virtual std::string as_string () const = 0;
  
    virtual void accept_vis (HIRPatternVisitor &vis) = 0;
  
--- 61,72 ----
  
    virtual ~Pattern () {}
  
!   virtual std::string to_string () const = 0;
! 
!   std::string to_debug_string () const
!   {
!     return to_string () + get_mappings ().as_string ();
!   }
  
    virtual void accept_vis (HIRPatternVisitor &vis) = 0;
  
diff -Nrcpad gcc-16-20251221/gcc/rust/hir/tree/rust-hir-pattern.h gcc-16-20251228/gcc/rust/hir/tree/rust-hir-pattern.h
*** gcc-16-20251221/gcc/rust/hir/tree/rust-hir-pattern.h	Sun Dec 21 22:32:07 2025
--- gcc-16-20251228/gcc/rust/hir/tree/rust-hir-pattern.h	Sun Dec 28 22:32:07 2025
*************** class LiteralPattern : public Pattern
*** 35,41 ****
    bool has_minus;
  
  public:
!   std::string as_string () const override;
  
    // Constructor for a literal pattern
    LiteralPattern (Analysis::NodeMapping mappings, Literal lit, location_t locus)
--- 35,41 ----
    bool has_minus;
  
  public:
!   std::string to_string () const override;
  
    // Constructor for a literal pattern
    LiteralPattern (Analysis::NodeMapping mappings, Literal lit, location_t locus)
*************** class IdentifierPattern : public Pattern
*** 95,101 ****
    Analysis::NodeMapping mappings;
  
  public:
!   std::string as_string () const override;
  
    // Returns whether the IdentifierPattern has a pattern to bind.
    bool has_subpattern () const { return subpattern != nullptr; }
--- 95,101 ----
    Analysis::NodeMapping mappings;
  
  public:
!   std::string to_string () const override;
  
    // Returns whether the IdentifierPattern has a pattern to bind.
    bool has_subpattern () const { return subpattern != nullptr; }
*************** class WildcardPattern : public Pattern
*** 176,182 ****
    Analysis::NodeMapping mappings;
  
  public:
!   std::string as_string () const override { return std::string (1, '_'); }
  
    WildcardPattern (Analysis::NodeMapping mappings, location_t locus)
      : locus (locus), mappings (mappings)
--- 176,182 ----
    Analysis::NodeMapping mappings;
  
  public:
!   std::string to_string () const override { return "_"; }
  
    WildcardPattern (Analysis::NodeMapping mappings, location_t locus)
      : locus (locus), mappings (mappings)
*************** public:
*** 226,232 ****
        clone_range_pattern_bound_impl ());
    }
  
!   virtual std::string as_string () const = 0;
  
    virtual void accept_vis (HIRFullVisitor &vis) = 0;
  
--- 226,232 ----
        clone_range_pattern_bound_impl ());
    }
  
!   virtual std::string to_string () const = 0;
  
    virtual void accept_vis (HIRFullVisitor &vis) = 0;
  
*************** public:
*** 256,262 ****
      : literal (literal), has_minus (has_minus), locus (locus)
    {}
  
!   std::string as_string () const override;
  
    location_t get_locus () const { return locus; }
  
--- 256,262 ----
      : literal (literal), has_minus (has_minus), locus (locus)
    {}
  
!   std::string to_string () const override;
  
    location_t get_locus () const { return locus; }
  
*************** class RangePatternBoundPath : public Ran
*** 290,296 ****
  public:
    RangePatternBoundPath (PathInExpression path) : path (std::move (path)) {}
  
!   std::string as_string () const override { return path.as_string (); }
  
    location_t get_locus () const { return path.get_locus (); }
  
--- 290,296 ----
  public:
    RangePatternBoundPath (PathInExpression path) : path (std::move (path)) {}
  
!   std::string to_string () const override { return path.to_string (); }
  
    location_t get_locus () const { return path.get_locus (); }
  
*************** public:
*** 326,332 ****
      : path (std::move (path))
    {}
  
!   std::string as_string () const override { return path.as_string (); }
  
    location_t get_locus () const { return path.get_locus (); }
  
--- 326,332 ----
      : path (std::move (path))
    {}
  
!   std::string to_string () const override { return path.to_string (); }
  
    location_t get_locus () const { return path.get_locus (); }
  
*************** class RangePattern : public Pattern
*** 364,370 ****
    Analysis::NodeMapping mappings;
  
  public:
!   std::string as_string () const override;
  
    // Constructor
    RangePattern (Analysis::NodeMapping mappings,
--- 364,370 ----
    Analysis::NodeMapping mappings;
  
  public:
!   std::string to_string () const override;
  
    // Constructor
    RangePattern (Analysis::NodeMapping mappings,
*************** class ReferencePattern : public Pattern
*** 441,447 ****
    Analysis::NodeMapping mappings;
  
  public:
!   std::string as_string () const override;
  
    ReferencePattern (Analysis::NodeMapping mappings,
  		    std::unique_ptr<Pattern> pattern, Mutability reference_mut,
--- 441,447 ----
    Analysis::NodeMapping mappings;
  
  public:
!   std::string to_string () const override;
  
    ReferencePattern (Analysis::NodeMapping mappings,
  		    std::unique_ptr<Pattern> pattern, Mutability reference_mut,
*************** public:
*** 525,531 ****
        clone_struct_pattern_field_impl ());
    }
  
!   virtual std::string as_string () const;
    virtual void accept_vis (HIRFullVisitor &vis) = 0;
    virtual ItemType get_item_type () const = 0;
  
--- 525,531 ----
        clone_struct_pattern_field_impl ());
    }
  
!   virtual std::string to_string () const;
    virtual void accept_vis (HIRFullVisitor &vis) = 0;
    virtual ItemType get_item_type () const = 0;
  
*************** public:
*** 581,587 ****
    StructPatternFieldTuplePat &operator= (StructPatternFieldTuplePat &&other)
      = default;
  
!   std::string as_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
  
--- 581,587 ----
    StructPatternFieldTuplePat &operator= (StructPatternFieldTuplePat &&other)
      = default;
  
!   std::string to_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
  
*************** public:
*** 636,642 ****
    StructPatternFieldIdentPat &operator= (StructPatternFieldIdentPat &&other)
      = default;
  
!   std::string as_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
  
--- 636,642 ----
    StructPatternFieldIdentPat &operator= (StructPatternFieldIdentPat &&other)
      = default;
  
!   std::string to_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
  
*************** public:
*** 670,676 ****
        has_ref (is_ref), mut (mut), ident (std::move (ident))
    {}
  
!   std::string as_string () const override;
  
    bool is_mut () const { return mut == Mutability::Mut; }
  
--- 670,676 ----
        has_ref (is_ref), mut (mut), ident (std::move (ident))
    {}
  
!   std::string to_string () const override;
  
    bool is_mut () const { return mut == Mutability::Mut; }
  
*************** public:
*** 748,754 ****
        std::vector<std::unique_ptr<StructPatternField>> ());
    }
  
!   std::string as_string () const;
  
    std::vector<std::unique_ptr<StructPatternField>> &get_struct_pattern_fields ()
    {
--- 748,754 ----
        std::vector<std::unique_ptr<StructPatternField>> ());
    }
  
!   std::string to_string () const;
  
    std::vector<std::unique_ptr<StructPatternField>> &get_struct_pattern_fields ()
    {
*************** class StructPattern : public Pattern
*** 764,770 ****
    Analysis::NodeMapping mappings;
  
  public:
!   std::string as_string () const override;
  
    StructPattern (Analysis::NodeMapping mappings, PathInExpression struct_path,
  		 StructPatternElements elems)
--- 764,770 ----
    Analysis::NodeMapping mappings;
  
  public:
!   std::string to_string () const override;
  
    StructPattern (Analysis::NodeMapping mappings, PathInExpression struct_path,
  		 StructPatternElements elems)
*************** public:
*** 824,830 ****
  
    virtual ItemType get_item_type () const = 0;
  
!   virtual std::string as_string () const = 0;
  
  protected:
    // pure virtual clone implementation
--- 824,830 ----
  
    virtual ItemType get_item_type () const = 0;
  
!   virtual std::string to_string () const = 0;
  
  protected:
    // pure virtual clone implementation
*************** public:
*** 879,885 ****
    TupleStructItemsNoRest (TupleStructItemsNoRest &&other) = default;
    TupleStructItemsNoRest &operator= (TupleStructItemsNoRest &&other) = default;
  
!   std::string as_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
  
--- 879,885 ----
    TupleStructItemsNoRest (TupleStructItemsNoRest &&other) = default;
    TupleStructItemsNoRest &operator= (TupleStructItemsNoRest &&other) = default;
  
!   std::string to_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
  
*************** public:
*** 947,953 ****
    TupleStructItemsHasRest &operator= (TupleStructItemsHasRest &&other)
      = default;
  
!   std::string as_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
  
--- 947,953 ----
    TupleStructItemsHasRest &operator= (TupleStructItemsHasRest &&other)
      = default;
  
!   std::string to_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
  
*************** class TupleStructPattern : public Patter
*** 992,998 ****
     * data */
  
  public:
!   std::string as_string () const override;
  
    TupleStructPattern (Analysis::NodeMapping mappings,
  		      PathInExpression tuple_struct_path,
--- 992,998 ----
     * data */
  
  public:
!   std::string to_string () const override;
  
    TupleStructPattern (Analysis::NodeMapping mappings,
  		      PathInExpression tuple_struct_path,
*************** public:
*** 1098,1104 ****
    TuplePatternItemsNoRest &operator= (TuplePatternItemsNoRest &&other)
      = default;
  
!   std::string as_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
  
--- 1098,1104 ----
    TuplePatternItemsNoRest &operator= (TuplePatternItemsNoRest &&other)
      = default;
  
!   std::string to_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
  
*************** public:
*** 1167,1173 ****
    TuplePatternItemsHasRest &operator= (TuplePatternItemsHasRest &&other)
      = default;
  
!   std::string as_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
  
--- 1167,1173 ----
    TuplePatternItemsHasRest &operator= (TuplePatternItemsHasRest &&other)
      = default;
  
!   std::string to_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
  
*************** class TuplePattern : public Pattern
*** 1208,1214 ****
    Analysis::NodeMapping mappings;
  
  public:
!   std::string as_string () const override;
  
    // Returns true if the tuple pattern has items
    bool has_tuple_pattern_items () const { return items != nullptr; }
--- 1208,1214 ----
    Analysis::NodeMapping mappings;
  
  public:
!   std::string to_string () const override;
  
    // Returns true if the tuple pattern has items
    bool has_tuple_pattern_items () const { return items != nullptr; }
*************** public:
*** 1310,1316 ****
    SlicePatternItemsNoRest &operator= (SlicePatternItemsNoRest &&other)
      = default;
  
!   std::string as_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
  
--- 1310,1316 ----
    SlicePatternItemsNoRest &operator= (SlicePatternItemsNoRest &&other)
      = default;
  
!   std::string to_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
  
*************** public:
*** 1379,1385 ****
    SlicePatternItemsHasRest &operator= (SlicePatternItemsHasRest &&other)
      = default;
  
!   std::string as_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
  
--- 1379,1385 ----
    SlicePatternItemsHasRest &operator= (SlicePatternItemsHasRest &&other)
      = default;
  
!   std::string to_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
  
*************** class SlicePattern : public Pattern
*** 1420,1426 ****
    Analysis::NodeMapping mappings;
  
  public:
!   std::string as_string () const override;
  
    SlicePattern (Analysis::NodeMapping mappings,
  		std::unique_ptr<SlicePatternItems> items, location_t locus)
--- 1420,1426 ----
    Analysis::NodeMapping mappings;
  
  public:
!   std::string to_string () const override;
  
    SlicePattern (Analysis::NodeMapping mappings,
  		std::unique_ptr<SlicePatternItems> items, location_t locus)
*************** class AltPattern : public Pattern
*** 1482,1488 ****
    Analysis::NodeMapping mappings;
  
  public:
!   std::string as_string () const override;
  
    AltPattern (Analysis::NodeMapping mappings,
  	      std::vector<std::unique_ptr<Pattern>> alts, location_t locus)
--- 1482,1488 ----
    Analysis::NodeMapping mappings;
  
  public:
!   std::string to_string () const override;
  
    AltPattern (Analysis::NodeMapping mappings,
  	      std::vector<std::unique_ptr<Pattern>> alts, location_t locus)
diff -Nrcpad gcc-16-20251221/gcc/rust/hir/tree/rust-hir-stmt.h gcc-16-20251228/gcc/rust/hir/tree/rust-hir-stmt.h
*** gcc-16-20251221/gcc/rust/hir/tree/rust-hir-stmt.h	Sun Dec 21 22:32:07 2025
--- gcc-16-20251228/gcc/rust/hir/tree/rust-hir-stmt.h	Sun Dec 28 22:32:07 2025
*************** public:
*** 43,49 ****
  
    virtual ~Stmt () {}
  
!   virtual std::string as_string () const = 0;
  
    virtual void accept_vis (HIRStmtVisitor &vis) = 0;
  
--- 43,54 ----
  
    virtual ~Stmt () {}
  
!   virtual std::string to_string () const = 0;
! 
!   std::string to_debug_string () const
!   {
!     return to_string () + mappings.as_string ();
!   }
  
    virtual void accept_vis (HIRStmtVisitor &vis) = 0;
  
*************** class EmptyStmt : public Stmt
*** 70,76 ****
    location_t locus;
  
  public:
!   std::string as_string () const override { return std::string (1, ';'); }
  
    EmptyStmt (Analysis::NodeMapping mappings, location_t locus)
      : Stmt (std::move (mappings)), locus (locus)
--- 75,81 ----
    location_t locus;
  
  public:
!   std::string to_string () const override { return ";"; }
  
    EmptyStmt (Analysis::NodeMapping mappings, location_t locus)
      : Stmt (std::move (mappings)), locus (locus)
*************** public:
*** 117,123 ****
    // Returns whether let statement has a diverging else expression.
    bool has_else_expr () const { return else_expr.has_value (); }
  
!   std::string as_string () const override;
  
    LetStmt (Analysis::NodeMapping mappings,
  	   std::unique_ptr<Pattern> variables_pattern,
--- 122,128 ----
    // Returns whether let statement has a diverging else expression.
    bool has_else_expr () const { return else_expr.has_value (); }
  
!   std::string to_string () const override;
  
    LetStmt (Analysis::NodeMapping mappings,
  	   std::unique_ptr<Pattern> variables_pattern,
*************** public:
*** 207,213 ****
    ExprStmt (Analysis::NodeMapping mappings, std::unique_ptr<Expr> expr,
  	    location_t locus);
  
!   std::string as_string () const override;
  
    location_t get_locus () const override final { return locus; }
  
--- 212,218 ----
    ExprStmt (Analysis::NodeMapping mappings, std::unique_ptr<Expr> expr,
  	    location_t locus);
  
!   std::string to_string () const override;
  
    location_t get_locus () const override final { return locus; }
  
diff -Nrcpad gcc-16-20251221/gcc/rust/hir/tree/rust-hir-trait-bound.h gcc-16-20251228/gcc/rust/hir/tree/rust-hir-trait-bound.h
*** gcc-16-20251221/gcc/rust/hir/tree/rust-hir-trait-bound.h	Sun Dec 21 22:32:07 2025
--- gcc-16-20251228/gcc/rust/hir/tree/rust-hir-trait-bound.h	Sun Dec 28 22:32:07 2025
*************** public:
*** 51,57 ****
        type_path (std::move (type_path)), locus (locus), mappings (mapping)
    {}
  
!   std::string as_string () const override;
  
    location_t get_locus () const override final { return locus; }
  
--- 51,59 ----
        type_path (std::move (type_path)), locus (locus), mappings (mapping)
    {}
  
!   std::string to_string () const override;
! 
!   std::string to_debug_string () const;
  
    location_t get_locus () const override final { return locus; }
  
diff -Nrcpad gcc-16-20251221/gcc/rust/hir/tree/rust-hir-type-abstract.h gcc-16-20251228/gcc/rust/hir/tree/rust-hir-type-abstract.h
*** gcc-16-20251221/gcc/rust/hir/tree/rust-hir-type-abstract.h	Sun Dec 21 22:32:07 2025
--- gcc-16-20251228/gcc/rust/hir/tree/rust-hir-type-abstract.h	Sun Dec 28 22:32:07 2025
*************** public:
*** 45,51 ****
  
    BaseKind get_hir_kind () override final { return TYPE; }
  
!   virtual std::string as_string () const = 0;
  
    /* HACK: convert to trait bound. Virtual method overriden by classes that
     * enable this. */
--- 45,56 ----
  
    BaseKind get_hir_kind () override final { return TYPE; }
  
!   virtual std::string to_string () const = 0;
! 
!   std::string to_debug_string () const
!   {
!     return to_string () + mappings.as_string ();
!   }
  
    /* HACK: convert to trait bound. Virtual method overriden by classes that
     * enable this. */
diff -Nrcpad gcc-16-20251221/gcc/rust/hir/tree/rust-hir-type.cc gcc-16-20251228/gcc/rust/hir/tree/rust-hir-type.cc
*** gcc-16-20251221/gcc/rust/hir/tree/rust-hir-type.cc	Sun Dec 21 22:32:07 2025
--- gcc-16-20251228/gcc/rust/hir/tree/rust-hir-type.cc	Sun Dec 28 22:32:07 2025
*************** ParenthesisedType::operator= (Parenthesi
*** 101,108 ****
  }
  
  std::unique_ptr<TraitBound>
! ParenthesisedType::to_trait_bound (bool in_parens ATTRIBUTE_UNUSED) const
  {
    /* NOTE: obviously it is unknown whether the internal type is a trait bound
     * due to polymorphism, so just let the internal type handle it. As
     * parenthesised type, it must be in parentheses. */
--- 101,113 ----
  }
  
  std::unique_ptr<TraitBound>
! ParenthesisedType::to_trait_bound (bool in_parens) const
  {
+   /* If already in parentheses, don't convert - should stay as
+    * ParenthesisedType */
+   if (in_parens)
+     return nullptr;
+ 
    /* NOTE: obviously it is unknown whether the internal type is a trait bound
     * due to polymorphism, so just let the internal type handle it. As
     * parenthesised type, it must be in parentheses. */
diff -Nrcpad gcc-16-20251221/gcc/rust/hir/tree/rust-hir-type.h gcc-16-20251228/gcc/rust/hir/tree/rust-hir-type.h
*** gcc-16-20251221/gcc/rust/hir/tree/rust-hir-type.h	Sun Dec 21 22:32:07 2025
--- gcc-16-20251228/gcc/rust/hir/tree/rust-hir-type.h	Sun Dec 28 22:32:07 2025
*************** public:
*** 57,63 ****
    ImplTraitType (ImplTraitType &&other) = default;
    ImplTraitType &operator= (ImplTraitType &&other) = default;
  
!   std::string as_string () const override;
    std::vector<std::unique_ptr<TypeParamBound>> &get_type_param_bounds ()
    {
      return type_param_bounds;
--- 57,63 ----
    ImplTraitType (ImplTraitType &&other) = default;
    ImplTraitType &operator= (ImplTraitType &&other) = default;
  
!   std::string to_string () const override;
    std::vector<std::unique_ptr<TypeParamBound>> &get_type_param_bounds ()
    {
      return type_param_bounds;
*************** public:
*** 96,102 ****
    TraitObjectType (TraitObjectType &&other) = default;
    TraitObjectType &operator= (TraitObjectType &&other) = default;
  
!   std::string as_string () const override;
    bool get_has_dyn () { return has_dyn; }
    void accept_vis (HIRFullVisitor &vis) override;
    void accept_vis (HIRTypeVisitor &vis) override;
--- 96,102 ----
    TraitObjectType (TraitObjectType &&other) = default;
    TraitObjectType &operator= (TraitObjectType &&other) = default;
  
!   std::string to_string () const override;
    bool get_has_dyn () { return has_dyn; }
    void accept_vis (HIRFullVisitor &vis) override;
    void accept_vis (HIRTypeVisitor &vis) override;
*************** public:
*** 150,158 ****
    ParenthesisedType (ParenthesisedType &&other) = default;
    ParenthesisedType &operator= (ParenthesisedType &&other) = default;
  
!   std::string as_string () const override
    {
!     return "(" + type_in_parens->as_string () + ")";
    }
  
    // Creates a trait bound (clone of this one's trait bound) - HACK
--- 150,158 ----
    ParenthesisedType (ParenthesisedType &&other) = default;
    ParenthesisedType &operator= (ParenthesisedType &&other) = default;
  
!   std::string to_string () const override
    {
!     return "(" + type_in_parens->to_string () + ")";
    }
  
    // Creates a trait bound (clone of this one's trait bound) - HACK
*************** public:
*** 187,193 ****
    TupleType (TupleType &&other) = default;
    TupleType &operator= (TupleType &&other) = default;
  
!   std::string as_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
    void accept_vis (HIRTypeVisitor &vis) override;
--- 187,193 ----
    TupleType (TupleType &&other) = default;
    TupleType &operator= (TupleType &&other) = default;
  
!   std::string to_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
    void accept_vis (HIRTypeVisitor &vis) override;
*************** protected:
*** 228,234 ****
  public:
    NeverType (Analysis::NodeMapping mappings, location_t locus);
  
!   std::string as_string () const override { return "! (never type)"; }
  
    void accept_vis (HIRFullVisitor &vis) override;
    void accept_vis (HIRTypeVisitor &vis) override;
--- 228,234 ----
  public:
    NeverType (Analysis::NodeMapping mappings, location_t locus);
  
!   std::string to_string () const override { return "! (never type)"; }
  
    void accept_vis (HIRFullVisitor &vis) override;
    void accept_vis (HIRTypeVisitor &vis) override;
*************** public:
*** 256,262 ****
    RawPointerType (RawPointerType &&other) = default;
    RawPointerType &operator= (RawPointerType &&other) = default;
  
!   std::string as_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
    void accept_vis (HIRTypeVisitor &vis) override;
--- 256,262 ----
    RawPointerType (RawPointerType &&other) = default;
    RawPointerType &operator= (RawPointerType &&other) = default;
  
!   std::string to_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
    void accept_vis (HIRTypeVisitor &vis) override;
*************** public:
*** 318,324 ****
    ReferenceType (ReferenceType &&other) = default;
    ReferenceType &operator= (ReferenceType &&other) = default;
  
!   std::string as_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
    void accept_vis (HIRTypeVisitor &vis) override;
--- 318,324 ----
    ReferenceType (ReferenceType &&other) = default;
    ReferenceType &operator= (ReferenceType &&other) = default;
  
!   std::string to_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
    void accept_vis (HIRTypeVisitor &vis) override;
*************** public:
*** 367,373 ****
    ArrayType (ArrayType &&other) = default;
    ArrayType &operator= (ArrayType &&other) = default;
  
!   std::string as_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
    void accept_vis (HIRTypeVisitor &vis) override;
--- 367,373 ----
    ArrayType (ArrayType &&other) = default;
    ArrayType &operator= (ArrayType &&other) = default;
  
!   std::string to_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
    void accept_vis (HIRTypeVisitor &vis) override;
*************** public:
*** 410,416 ****
    SliceType (SliceType &&other) = default;
    SliceType &operator= (SliceType &&other) = default;
  
!   std::string as_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
    void accept_vis (HIRTypeVisitor &vis) override;
--- 410,416 ----
    SliceType (SliceType &&other) = default;
    SliceType &operator= (SliceType &&other) = default;
  
!   std::string to_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
    void accept_vis (HIRTypeVisitor &vis) override;
*************** protected:
*** 453,459 ****
  public:
    InferredType (Analysis::NodeMapping mappings, location_t locus);
  
!   std::string as_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
    void accept_vis (HIRTypeVisitor &vis) override;
--- 453,459 ----
  public:
    InferredType (Analysis::NodeMapping mappings, location_t locus);
  
!   std::string to_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
    void accept_vis (HIRTypeVisitor &vis) override;
*************** public:
*** 494,500 ****
    MaybeNamedParam (MaybeNamedParam &&other) = default;
    MaybeNamedParam &operator= (MaybeNamedParam &&other) = default;
  
!   std::string as_string () const;
  
    // Returns whether the param is in an error state.
    bool is_error () const { return param_type == nullptr; }
--- 494,500 ----
    MaybeNamedParam (MaybeNamedParam &&other) = default;
    MaybeNamedParam &operator= (MaybeNamedParam &&other) = default;
  
!   std::string to_string () const;
  
    // Returns whether the param is in an error state.
    bool is_error () const { return param_type == nullptr; }
*************** public:
*** 553,559 ****
    BareFunctionType (BareFunctionType &&other) = default;
    BareFunctionType &operator= (BareFunctionType &&other) = default;
  
!   std::string as_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
    void accept_vis (HIRTypeVisitor &vis) override;
--- 553,559 ----
    BareFunctionType (BareFunctionType &&other) = default;
    BareFunctionType &operator= (BareFunctionType &&other) = default;
  
!   std::string to_string () const override;
  
    void accept_vis (HIRFullVisitor &vis) override;
    void accept_vis (HIRTypeVisitor &vis) override;
diff -Nrcpad gcc-16-20251221/gcc/rust/hir/tree/rust-hir-visibility.h gcc-16-20251228/gcc/rust/hir/tree/rust-hir-visibility.h
*** gcc-16-20251221/gcc/rust/hir/tree/rust-hir-visibility.h	Sun Dec 21 22:32:07 2025
--- gcc-16-20251228/gcc/rust/hir/tree/rust-hir-visibility.h	Sun Dec 28 22:32:07 2025
*************** public:
*** 72,78 ****
      return path;
    }
  
!   std::string as_string () const;
  
    location_t get_locus () const { return locus; }
  };
--- 72,78 ----
      return path;
    }
  
!   std::string to_string () const;
  
    location_t get_locus () const { return locus; }
  };
diff -Nrcpad gcc-16-20251221/gcc/rust/hir/tree/rust-hir.cc gcc-16-20251228/gcc/rust/hir/tree/rust-hir.cc
*** gcc-16-20251221/gcc/rust/hir/tree/rust-hir.cc	Sun Dec 21 22:32:07 2025
--- gcc-16-20251228/gcc/rust/hir/tree/rust-hir.cc	Sun Dec 28 22:32:07 2025
*************** Crate::operator= (Crate const &other)
*** 99,105 ****
  }
  
  std::string
! Crate::as_string () const
  {
    std::string str ("HIR::Crate: ");
  
--- 99,105 ----
  }
  
  std::string
! Crate::to_debug_string () const
  {
    std::string str ("HIR::Crate: ");
  
*************** Crate::as_string () const
*** 137,151 ****
  	      return "nullptr_POINTER_MARK";
  	    }
  
! 	  str += "\n  " + item->as_string ();
  	}
      }
  
!   return str + "\n::" + get_mappings ().as_string () + "\n";
  }
  
  std::string
! Visibility::as_string () const
  {
    switch (vis_type)
      {
--- 137,166 ----
  	      return "nullptr_POINTER_MARK";
  	    }
  
! 	  str += "\n  " + item->to_string ();
  	}
      }
  
!   return str;
  }
  
  std::string
! Crate::to_string () const
! {
!   std::string str;
!   if (!inner_attrs.empty ())
!     for (const auto &attr : inner_attrs)
!       str += attr.as_string () + "\n";
! 
!   if (!items.empty ())
!     for (const auto &item : items)
!       str += item->to_string () + "\n";
! 
!   return str;
! }
! 
! std::string
! Visibility::to_string () const
  {
    switch (vis_type)
      {
*************** Visibility::as_string () const
*** 163,176 ****
  
  // Creates a string that reflects the visibility stored.
  std::string
! VisItem::as_string () const
  {
    // FIXME: can't do formatting on string to make identation occur.
!   std::string str = Item::as_string ();
  
    if (has_visibility ())
      {
!       str = visibility.as_string () + " ";
      }
  
    return str;
--- 178,191 ----
  
  // Creates a string that reflects the visibility stored.
  std::string
! VisItem::to_string () const
  {
    // FIXME: can't do formatting on string to make identation occur.
!   std::string str = Item::to_string ();
  
    if (has_visibility ())
      {
!       str = visibility.to_string () + " ";
      }
  
    return str;
*************** VisItem::as_string () const
*** 178,184 ****
  
  // Creates a string that reflects the outer attributes stored.
  std::string
! Item::as_string () const
  {
    std::string str;
  
--- 193,199 ----
  
  // Creates a string that reflects the outer attributes stored.
  std::string
! Item::to_string () const
  {
    std::string str;
  
*************** Item::as_string () const
*** 194,203 ****
  }
  
  std::string
! Module::as_string () const
  {
    // get module string for "[vis] mod [name]"
!   std::string str = VisItem::as_string () + "mod " + module_name.as_string ();
  
    // inner attributes
    str += "\n inner attributes: ";
--- 209,218 ----
  }
  
  std::string
! Module::to_string () const
  {
    // get module string for "[vis] mod [name]"
!   std::string str = VisItem::to_string () + "mod " + module_name.as_string ();
  
    // inner attributes
    str += "\n inner attributes: ";
*************** Module::as_string () const
*** 233,239 ****
  	      return "nullptr_POINTER_MARK";
  	    }
  
! 	  str += "\n  " + item->as_string ();
  	}
      }
  
--- 248,254 ----
  	      return "nullptr_POINTER_MARK";
  	    }
  
! 	  str += "\n  " + item->to_string ();
  	}
      }
  
*************** Item::item_kind_string (Item::ItemKind k
*** 279,287 ****
  }
  
  std::string
! StaticItem::as_string () const
  {
!   std::string str = VisItem::as_string ();
  
    str += indent_spaces (stay) + "static";
  
--- 294,302 ----
  }
  
  std::string
! StaticItem::to_string () const
  {
!   std::string str = VisItem::to_string ();
  
    str += indent_spaces (stay) + "static";
  
*************** StaticItem::as_string () const
*** 299,305 ****
  		  "pointer type in static item.");
        return "nullptr_POINTER_MARK";
      }
!   str += "\n" + indent_spaces (stay) + "Type: " + type->as_string ();
  
    // DEBUG: null pointer check
    if (expr == nullptr)
--- 314,320 ----
  		  "pointer type in static item.");
        return "nullptr_POINTER_MARK";
      }
!   str += "\n" + indent_spaces (stay) + "Type: " + type->to_string ();
  
    // DEBUG: null pointer check
    if (expr == nullptr)
*************** StaticItem::as_string () const
*** 308,322 ****
  		  "pointer expr in static item.");
        return "nullptr_POINTER_MARK";
      }
!   str += "\n" + indent_spaces (stay) + "Expression: " + expr->as_string ();
  
    return str + "\n";
  }
  
  std::string
! ExternCrate::as_string () const
  {
!   std::string str = VisItem::as_string ();
  
    str += "extern crate " + referenced_crate;
  
--- 323,337 ----
  		  "pointer expr in static item.");
        return "nullptr_POINTER_MARK";
      }
!   str += "\n" + indent_spaces (stay) + "Expression: " + expr->to_string ();
  
    return str + "\n";
  }
  
  std::string
! ExternCrate::to_string () const
  {
!   std::string str = VisItem::to_string ();
  
    str += "extern crate " + referenced_crate;
  
*************** ExternCrate::as_string () const
*** 329,337 ****
  }
  
  std::string
! TupleStruct::as_string () const
  {
!   std::string str = VisItem::as_string ();
  
    str += "struct " + struct_name.as_string ();
  
--- 344,352 ----
  }
  
  std::string
! TupleStruct::to_string () const
  {
!   std::string str = VisItem::to_string ();
  
    str += "struct " + struct_name.as_string ();
  
*************** TupleStruct::as_string () const
*** 354,360 ****
  	      return "nullptr_POINTER_MARK";
  	    }
  
! 	  str += "\n  " + param->as_string ();
  	}
      }
  
--- 369,375 ----
  	      return "nullptr_POINTER_MARK";
  	    }
  
! 	  str += "\n  " + param->to_string ();
  	}
      }
  
*************** TupleStruct::as_string () const
*** 368,381 ****
      {
        for (const auto &field : fields)
  	{
! 	  str += "\n  " + field.as_string ();
  	}
      }
  
    str += "\n Where clause: ";
    if (has_where_clause ())
      {
!       str += where_clause.as_string ();
      }
    else
      {
--- 383,396 ----
      {
        for (const auto &field : fields)
  	{
! 	  str += "\n  " + field.to_string ();
  	}
      }
  
    str += "\n Where clause: ";
    if (has_where_clause ())
      {
!       str += where_clause.to_string ();
      }
    else
      {
*************** TupleStruct::as_string () const
*** 386,394 ****
  }
  
  std::string
! ConstantItem::as_string () const
  {
!   std::string str = VisItem::as_string ();
  
    str += "const " + identifier.as_string ();
  
--- 401,409 ----
  }
  
  std::string
! ConstantItem::to_string () const
  {
!   std::string str = VisItem::to_string ();
  
    str += "const " + identifier.as_string ();
  
*************** ConstantItem::as_string () const
*** 399,405 ****
  		  "pointer type in const item.");
        return "nullptr_POINTER_MARK";
      }
!   str += "\n  Type: " + type->as_string ();
  
    // DEBUG: null pointer check
    if (const_expr == nullptr)
--- 414,420 ----
  		  "pointer type in const item.");
        return "nullptr_POINTER_MARK";
      }
!   str += "\n  Type: " + type->to_string ();
  
    // DEBUG: null pointer check
    if (const_expr == nullptr)
*************** ConstantItem::as_string () const
*** 408,422 ****
  		  "pointer expr in const item.");
        return "nullptr_POINTER_MARK";
      }
!   str += "\n  Expression: " + const_expr->as_string ();
  
    return str + "\n";
  }
  
  std::string
! ImplBlock::as_string () const
  {
!   std::string str = VisItem::as_string ();
  
    str += "impl ";
  
--- 423,437 ----
  		  "pointer expr in const item.");
        return "nullptr_POINTER_MARK";
      }
!   str += "\n  Expression: " + const_expr->to_string ();
  
    return str + "\n";
  }
  
  std::string
! ImplBlock::to_string () const
  {
!   std::string str = VisItem::to_string ();
  
    str += "impl ";
  
*************** ImplBlock::as_string () const
*** 439,454 ****
  	      return "nullptr_POINTER_MARK";
  	    }
  
! 	  str += "\n  " + param->as_string ();
  	}
      }
  
!   str += "\n Type: " + impl_type->as_string ();
  
    str += "\n Where clause: ";
    if (has_where_clause ())
      {
!       str += where_clause.as_string ();
      }
    else
      {
--- 454,469 ----
  	      return "nullptr_POINTER_MARK";
  	    }
  
! 	  str += "\n  " + param->to_string ();
  	}
      }
  
!   str += "\n Type: " + impl_type->to_string ();
  
    str += "\n Where clause: ";
    if (has_where_clause ())
      {
!       str += where_clause.to_string ();
      }
    else
      {
*************** ImplBlock::as_string () const
*** 480,486 ****
      {
        for (const auto &item : impl_items)
  	{
! 	  str += "\n  " + item->as_string ();
  	}
      }
  
--- 495,501 ----
      {
        for (const auto &item : impl_items)
  	{
! 	  str += "\n  " + item->to_string ();
  	}
      }
  
*************** ImplBlock::as_string () const
*** 488,496 ****
  }
  
  std::string
! StructStruct::as_string () const
  {
!   std::string str = VisItem::as_string ();
  
    str += "struct " + struct_name.as_string ();
  
--- 503,511 ----
  }
  
  std::string
! StructStruct::to_string () const
  {
!   std::string str = VisItem::to_string ();
  
    str += "struct " + struct_name.as_string ();
  
*************** StructStruct::as_string () const
*** 513,526 ****
  	      return "nullptr_POINTER_MARK";
  	    }
  
! 	  str += "\n  " + param->as_string ();
  	}
      }
  
    str += "\n Where clause: ";
    if (has_where_clause ())
      {
!       str += where_clause.as_string ();
      }
    else
      {
--- 528,541 ----
  	      return "nullptr_POINTER_MARK";
  	    }
  
! 	  str += "\n  " + param->to_string ();
  	}
      }
  
    str += "\n Where clause: ";
    if (has_where_clause ())
      {
!       str += where_clause.to_string ();
      }
    else
      {
*************** StructStruct::as_string () const
*** 541,558 ****
      {
        for (const auto &field : fields)
  	{
! 	  str += "\n  - " + field.as_string ();
  	}
        str += "\n";
      }
  
!   return str + "::" + get_mappings ().as_string () + "\n";
  }
  
  std::string
! UseDeclaration::as_string () const
  {
!   std::string str = VisItem::as_string ();
  
    // DEBUG: null pointer check
    if (use_tree == nullptr)
--- 556,573 ----
      {
        for (const auto &field : fields)
  	{
! 	  str += "\n  - " + field.to_string ();
  	}
        str += "\n";
      }
  
!   return str;
  }
  
  std::string
! UseDeclaration::to_string () const
  {
!   std::string str = VisItem::to_string ();
  
    // DEBUG: null pointer check
    if (use_tree == nullptr)
*************** UseDeclaration::as_string () const
*** 563,575 ****
        return "nullptr_POINTER_MARK";
      }
  
!   str += "use " + use_tree->as_string ();
  
    return str;
  }
  
  std::string
! UseTreeGlob::as_string () const
  {
    switch (glob_type)
      {
--- 578,590 ----
        return "nullptr_POINTER_MARK";
      }
  
!   str += "use " + use_tree->to_string ();
  
    return str;
  }
  
  std::string
! UseTreeGlob::to_string () const
  {
    switch (glob_type)
      {
*************** UseTreeGlob::as_string () const
*** 590,596 ****
  }
  
  std::string
! UseTreeList::as_string () const
  {
    std::string path_str;
    switch (path_type)
--- 605,611 ----
  }
  
  std::string
! UseTreeList::to_string () const
  {
    std::string path_str;
    switch (path_type)
*************** UseTreeList::as_string () const
*** 626,632 ****
  
        for (; i != e; i++)
  	{
! 	  path_str += (*i)->as_string ();
  	  if (e != i + 1)
  	    path_str += ", ";
  	}
--- 641,647 ----
  
        for (; i != e; i++)
  	{
! 	  path_str += (*i)->to_string ();
  	  if (e != i + 1)
  	    path_str += ", ";
  	}
*************** UseTreeList::as_string () const
*** 640,646 ****
  }
  
  std::string
! UseTreeRebind::as_string () const
  {
    std::string path_str = path.as_string ();
  
--- 655,661 ----
  }
  
  std::string
! UseTreeRebind::to_string () const
  {
    std::string path_str = path.as_string ();
  
*************** UseTreeRebind::as_string () const
*** 664,672 ****
  }
  
  std::string
! Enum::as_string () const
  {
!   std::string str = VisItem::as_string ();
    str += enum_name.as_string ();
  
    // generic params
--- 679,687 ----
  }
  
  std::string
! Enum::to_string () const
  {
!   std::string str = VisItem::to_string ();
    str += enum_name.as_string ();
  
    // generic params
*************** Enum::as_string () const
*** 688,701 ****
  	      return "nullptr_POINTER_MARK";
  	    }
  
! 	  str += "\n  " + param->as_string ();
  	}
      }
  
    str += "\n Where clause: ";
    if (has_where_clause ())
      {
!       str += where_clause.as_string ();
      }
    else
      {
--- 703,716 ----
  	      return "nullptr_POINTER_MARK";
  	    }
  
! 	  str += "\n  " + param->to_string ();
  	}
      }
  
    str += "\n Where clause: ";
    if (has_where_clause ())
      {
!       str += where_clause.to_string ();
      }
    else
      {
*************** Enum::as_string () const
*** 721,727 ****
  	      return "nullptr_POINTER_MARK";
  	    }
  
! 	  str += "\n  " + item->as_string ();
  	}
      }
  
--- 736,742 ----
  	      return "nullptr_POINTER_MARK";
  	    }
  
! 	  str += "\n  " + item->to_string ();
  	}
      }
  
*************** Enum::as_string () const
*** 729,737 ****
  }
  
  std::string
! Trait::as_string () const
  {
!   std::string str = VisItem::as_string ();
  
    if (unsafety == Unsafety::Unsafe)
      {
--- 744,752 ----
  }
  
  std::string
! Trait::to_string () const
  {
!   std::string str = VisItem::to_string ();
  
    if (unsafety == Unsafety::Unsafe)
      {
*************** Trait::as_string () const
*** 759,765 ****
  	      return "nullptr_POINTER_MARK";
  	    }
  
! 	  str += "\n  " + param->as_string ();
  	}
      }
  
--- 774,780 ----
  	      return "nullptr_POINTER_MARK";
  	    }
  
! 	  str += "\n  " + param->to_string ();
  	}
      }
  
*************** Trait::as_string () const
*** 781,787 ****
  	      return "nullptr_POINTER_MARK";
  	    }
  
! 	  str += "\n  " + bound->as_string ();
  	}
      }
  
--- 796,802 ----
  	      return "nullptr_POINTER_MARK";
  	    }
  
! 	  str += "\n  " + bound->to_string ();
  	}
      }
  
*************** Trait::as_string () const
*** 792,798 ****
      }
    else
      {
!       str += where_clause.as_string ();
      }
  
    str += "\n Trait items: ";
--- 807,813 ----
      }
    else
      {
!       str += where_clause.to_string ();
      }
  
    str += "\n Trait items: ";
*************** Trait::as_string () const
*** 813,819 ****
  	      return "nullptr_POINTER_MARK";
  	    }
  
! 	  str += "\n  " + item->as_string ();
  	}
      }
  
--- 828,834 ----
  	      return "nullptr_POINTER_MARK";
  	    }
  
! 	  str += "\n  " + item->to_string ();
  	}
      }
  
*************** Trait::as_string () const
*** 821,829 ****
  }
  
  std::string
! Union::as_string () const
  {
!   std::string str = VisItem::as_string ();
  
    str += "union " + union_name.as_string ();
  
--- 836,844 ----
  }
  
  std::string
! Union::to_string () const
  {
!   std::string str = VisItem::to_string ();
  
    str += "union " + union_name.as_string ();
  
*************** Union::as_string () const
*** 846,859 ****
  	      return "nullptr_POINTER_MARK";
  	    }
  
! 	  str += "\n  " + param->as_string ();
  	}
      }
  
    str += "\n Where clause: ";
    if (has_where_clause ())
      {
!       str += where_clause.as_string ();
      }
    else
      {
--- 861,874 ----
  	      return "nullptr_POINTER_MARK";
  	    }
  
! 	  str += "\n  " + param->to_string ();
  	}
      }
  
    str += "\n Where clause: ";
    if (has_where_clause ())
      {
!       str += where_clause.to_string ();
      }
    else
      {
*************** Union::as_string () const
*** 870,876 ****
      {
        for (const auto &field : variants)
  	{
! 	  str += "\n  " + field.as_string ();
  	}
      }
  
--- 885,891 ----
      {
        for (const auto &field : variants)
  	{
! 	  str += "\n  " + field.to_string ();
  	}
      }
  
*************** Union::as_string () const
*** 878,887 ****
  }
  
  std::string
! Function::as_string () const
  {
!   std::string str = VisItem::as_string () + "\n";
!   std::string qstr = qualifiers.as_string ();
    if ("" != qstr)
      str += qstr + " ";
  
--- 893,902 ----
  }
  
  std::string
! Function::to_string () const
  {
!   std::string str = VisItem::to_string () + "\n";
!   std::string qstr = qualifiers.to_string ();
    if ("" != qstr)
      str += qstr + " ";
  
*************** Function::as_string () const
*** 896,902 ****
  	  return "nullptr_POINTER_MARK";
  	}
  
!       str += return_type->as_string () + " ";
      }
    else
      {
--- 911,917 ----
  	  return "nullptr_POINTER_MARK";
  	}
  
!       str += return_type->to_string () + " ";
      }
    else
      {
*************** Function::as_string () const
*** 922,928 ****
  
        for (; i != e; i++)
  	{
! 	  str += (*i)->as_string ();
  	  if (e != i + 1)
  	    str += ", ";
  	}
--- 937,943 ----
  
        for (; i != e; i++)
  	{
! 	  str += (*i)->to_string ();
  	  if (e != i + 1)
  	    str += ", ";
  	}
*************** Function::as_string () const
*** 936,942 ****
        str += "(";
        for (; i != e; i++)
  	{
! 	  str += (*i).as_string ();
  	  if (e != i + 1)
  	    str += ", ";
  	}
--- 951,957 ----
        str += "(";
        for (; i != e; i++)
  	{
! 	  str += (*i).to_string ();
  	  if (e != i + 1)
  	    str += ", ";
  	}
*************** Function::as_string () const
*** 949,955 ****
  
    if (has_where_clause ())
      {
!       str += " where " + where_clause.as_string ();
      }
  
    str += "\n";
--- 964,970 ----
  
    if (has_where_clause ())
      {
!       str += " where " + where_clause.to_string ();
      }
  
    str += "\n";
*************** Function::as_string () const
*** 962,973 ****
  	"body in function.");
        return "nullptr_POINTER_MARK";
      }
!   return str + function_body->as_string () + "::" + get_mappings ().as_string ()
! 	 + "\n";
  }
  
  std::string
! WhereClause::as_string () const
  {
    // just print where clause items, don't mention "where" or "where clause"
    std::string str;
--- 977,987 ----
  	"body in function.");
        return "nullptr_POINTER_MARK";
      }
!   return str + function_body->to_string ();
  }
  
  std::string
! WhereClause::to_string () const
  {
    // just print where clause items, don't mention "where" or "where clause"
    std::string str;
*************** WhereClause::as_string () const
*** 980,986 ****
      {
        for (const auto &item : where_clause_items)
  	{
! 	  str += "\n  " + item->as_string ();
  	}
      }
  
--- 994,1000 ----
      {
        for (const auto &item : where_clause_items)
  	{
! 	  str += "\n  " + item->to_string ();
  	}
      }
  
*************** WhereClause::as_string () const
*** 988,999 ****
  }
  
  std::string
! BlockExpr::as_string () const
  {
    std::string istr = indent_spaces (enter);
    std::string str = istr + "BlockExpr:\n" + istr;
    // get outer attributes
!   str += "{\n" + indent_spaces (stay) + Expr::as_string ();
  
    // inner attributes
    str += "\n" + indent_spaces (stay) + "inner attributes: ";
--- 1002,1013 ----
  }
  
  std::string
! BlockExpr::to_string () const
  {
    std::string istr = indent_spaces (enter);
    std::string str = istr + "BlockExpr:\n" + istr;
    // get outer attributes
!   str += "{\n" + indent_spaces (stay) + Expr::to_string ();
  
    // inner attributes
    str += "\n" + indent_spaces (stay) + "inner attributes: ";
*************** BlockExpr::as_string () const
*** 1030,1036 ****
  	      return "nullptr_POINTER_MARK";
  	    }
  
! 	  str += "\n" + indent_spaces (stay) + stmt->as_string ();
  	}
      }
  
--- 1044,1050 ----
  	      return "nullptr_POINTER_MARK";
  	    }
  
! 	  str += "\n" + indent_spaces (stay) + stmt->to_string ();
  	}
      }
  
*************** BlockExpr::as_string () const
*** 1042,1048 ****
      }
    else
      {
!       str += "\n" + expr->as_string ();
      }
  
    str += "\n" + indent_spaces (out) + "}";
--- 1056,1062 ----
      }
    else
      {
!       str += "\n" + expr->to_string ();
      }
  
    str += "\n" + indent_spaces (out) + "}";
*************** BlockExpr::as_string () const
*** 1050,1062 ****
  }
  
  std::string
! AnonConst::as_string () const
  {
    std::string istr = indent_spaces (enter);
    std::string str = istr + "AnonConst:\n" + istr;
  
    if (expr.has_value ())
!     str += get_inner_expr ().as_string ();
    else
      str += "_";
  
--- 1064,1076 ----
  }
  
  std::string
! AnonConst::to_string () const
  {
    std::string istr = indent_spaces (enter);
    std::string str = istr + "AnonConst:\n" + istr;
  
    if (expr.has_value ())
!     str += get_inner_expr ().to_string ();
    else
      str += "_";
  
*************** AnonConst::as_string () const
*** 1066,1078 ****
  }
  
  std::string
! ConstBlock::as_string () const
  {
    std::string istr = indent_spaces (enter);
  
    std::string str = istr + "ConstBlock:\n" + istr;
  
!   str += get_const_expr ().as_string ();
  
    str += "\n" + indent_spaces (out);
  
--- 1080,1092 ----
  }
  
  std::string
! ConstBlock::to_string () const
  {
    std::string istr = indent_spaces (enter);
  
    std::string str = istr + "ConstBlock:\n" + istr;
  
!   str += get_const_expr ().to_string ();
  
    str += "\n" + indent_spaces (out);
  
*************** ConstBlock::as_string () const
*** 1080,1088 ****
  }
  
  std::string
! TypeAlias::as_string () const
  {
!   std::string str = VisItem::as_string ();
  
    str += " " + new_type_name.as_string ();
  
--- 1094,1102 ----
  }
  
  std::string
! TypeAlias::to_string () const
  {
!   std::string str = VisItem::to_string ();
  
    str += " " + new_type_name.as_string ();
  
*************** TypeAlias::as_string () const
*** 1099,1105 ****
  
        for (; i != e; i++)
  	{
! 	  str += (*i)->as_string ();
  	  if (e != i + 1)
  	    str += ", ";
  	}
--- 1113,1119 ----
  
        for (; i != e; i++)
  	{
! 	  str += (*i)->to_string ();
  	  if (e != i + 1)
  	    str += ", ";
  	}
*************** TypeAlias::as_string () const
*** 1112,1129 ****
      }
    else
      {
!       str += where_clause.as_string ();
      }
  
!   str += "\n Type: " + existing_type->as_string ();
  
    return str;
  }
  
  std::string
! ExternBlock::as_string () const
  {
!   std::string str = VisItem::as_string ();
  
    str += "extern ";
    str += "\"" + get_string_from_abi (abi) + "\" ";
--- 1126,1143 ----
      }
    else
      {
!       str += where_clause.to_string ();
      }
  
!   str += "\n Type: " + existing_type->to_string ();
  
    return str;
  }
  
  std::string
! ExternBlock::to_string () const
  {
!   std::string str = VisItem::to_string ();
  
    str += "extern ";
    str += "\"" + get_string_from_abi (abi) + "\" ";
*************** ExternBlock::as_string () const
*** 1153,1159 ****
      {
        for (const auto &item : extern_items)
  	{
! 	  str += "\n  " + item->as_string ();
  	}
      }
  
--- 1167,1173 ----
      {
        for (const auto &item : extern_items)
  	{
! 	  str += "\n  " + item->to_string ();
  	}
      }
  
*************** ExternBlock::as_string () const
*** 1161,1167 ****
  }
  
  std::string
! PathInExpression::as_string () const
  {
    std::string str;
  
--- 1175,1181 ----
  }
  
  std::string
! PathInExpression::to_string () const
  {
    std::string str;
  
*************** PathInExpression::as_string () const
*** 1170,1180 ****
        str = "::";
      }
  
!   return str + PathPattern::as_string () + "::" + get_mappings ().as_string ();
  }
  
  std::string
! ExprStmt::as_string () const
  {
    std::string str = indent_spaces (enter) + "ExprStmt:\n";
  
--- 1184,1194 ----
        str = "::";
      }
  
!   return str + PathPattern::to_string ();
  }
  
  std::string
! ExprStmt::to_string () const
  {
    std::string str = indent_spaces (enter) + "ExprStmt:\n";
  
*************** ExprStmt::as_string () const
*** 1185,1191 ****
    else
      {
        indent_spaces (enter);
!       str += expr->as_string ();
        indent_spaces (out);
      }
  
--- 1199,1205 ----
    else
      {
        indent_spaces (enter);
!       str += expr->to_string ();
        indent_spaces (out);
      }
  
*************** ExprStmt::as_string () const
*** 1194,1213 ****
  }
  
  std::string
! ClosureParam::as_string () const
  {
!   std::string str (pattern->as_string ());
  
    if (has_type_given ())
      {
!       str += " : " + type->as_string ();
      }
  
    return str;
  }
  
  std::string
! ClosureExpr::as_string () const
  {
    std::string str ("ClosureExpr:\n Has move: ");
    if (has_move)
--- 1208,1227 ----
  }
  
  std::string
! ClosureParam::to_string () const
  {
!   std::string str (pattern->to_string ());
  
    if (has_type_given ())
      {
!       str += " : " + type->to_string ();
      }
  
    return str;
  }
  
  std::string
! ClosureExpr::to_string () const
  {
    std::string str ("ClosureExpr:\n Has move: ");
    if (has_move)
*************** ClosureExpr::as_string () const
*** 1228,1247 ****
      {
        for (const auto &param : params)
  	{
! 	  str += "\n  " + param.as_string ();
  	}
      }
  
    str += "\n Return type: "
! 	 + (has_return_type () ? return_type->as_string () : "none");
  
!   str += "\n Body: " + expr->as_string ();
  
    return str;
  }
  
  std::string
! PathPattern::as_string () const
  {
    if (is_lang_item ())
      return LangItem::PrettyString (*lang_item);
--- 1242,1261 ----
      {
        for (const auto &param : params)
  	{
! 	  str += "\n  " + param.to_string ();
  	}
      }
  
    str += "\n Return type: "
! 	 + (has_return_type () ? return_type->to_string () : "none");
  
!   str += "\n Body: " + expr->to_string ();
  
    return str;
  }
  
  std::string
! PathPattern::to_string () const
  {
    if (is_lang_item ())
      return LangItem::PrettyString (*lang_item);
*************** PathPattern::as_string () const
*** 1250,1256 ****
  
    for (const auto &segment : segments)
      {
!       str += segment.as_string () + "::";
      }
  
    // basically a hack - remove last two characters of string (remove final ::)
--- 1264,1270 ----
  
    for (const auto &segment : segments)
      {
!       str += segment.to_string () + "::";
      }
  
    // basically a hack - remove last two characters of string (remove final ::)
*************** PathPattern::as_string () const
*** 1260,1286 ****
  }
  
  std::string
! QualifiedPathType::as_string () const
  {
    std::string str ("<");
!   str += type->as_string ();
  
    if (has_as_clause ())
      {
!       str += " as " + trait->as_string ();
      }
  
    return str + ">";
  }
  
  std::string
! QualifiedPathInExpression::as_string () const
  {
!   return path_type.as_string () + "::" + PathPattern::as_string ();
  }
  
  std::string
! BorrowExpr::as_string () const
  {
    std::string str ("&");
  
--- 1274,1300 ----
  }
  
  std::string
! QualifiedPathType::to_string () const
  {
    std::string str ("<");
!   str += type->to_string ();
  
    if (has_as_clause ())
      {
!       str += " as " + trait->to_string ();
      }
  
    return str + ">";
  }
  
  std::string
! QualifiedPathInExpression::to_string () const
  {
!   return path_type.to_string () + "::" + PathPattern::to_string ();
  }
  
  std::string
! BorrowExpr::to_string () const
  {
    std::string str ("&");
  
*************** BorrowExpr::as_string () const
*** 1289,1314 ****
        str += "mut ";
      }
  
!   str += main_or_left_expr->as_string ();
  
    return str;
  }
  
  std::string
! ReturnExpr::as_string () const
  {
    std::string str ("return ");
  
    if (has_return_expr ())
      {
!       str += return_expr->as_string ();
      }
  
!   return str + "::" + get_mappings ().as_string ();
  }
  
  std::string
! GroupedExpr::as_string () const
  {
    std::string str ("Grouped expr:");
  
--- 1303,1328 ----
        str += "mut ";
      }
  
!   str += main_or_left_expr->to_string ();
  
    return str;
  }
  
  std::string
! ReturnExpr::to_string () const
  {
    std::string str ("return ");
  
    if (has_return_expr ())
      {
!       str += return_expr->to_string ();
      }
  
!   return str;
  }
  
  std::string
! GroupedExpr::to_string () const
  {
    std::string str ("Grouped expr:");
  
*************** GroupedExpr::as_string () const
*** 1328,1359 ****
  	}
      }
  
!   str += "\n Expr in parens: " + expr_in_parens->as_string ();
  
    return str;
  }
  
  std::string
! RangeToExpr::as_string () const
  {
!   return ".." + to->as_string ();
  }
  
  std::string
! ContinueExpr::as_string () const
  {
    std::string str ("continue ");
  
    if (has_label ())
      {
!       str += get_label ().as_string ();
      }
  
    return str;
  }
  
  std::string
! NegationExpr::as_string () const
  {
    std::string str;
  
--- 1342,1373 ----
  	}
      }
  
!   str += "\n Expr in parens: " + expr_in_parens->to_string ();
  
    return str;
  }
  
  std::string
! RangeToExpr::to_string () const
  {
!   return ".." + to->to_string ();
  }
  
  std::string
! ContinueExpr::to_string () const
  {
    std::string str ("continue ");
  
    if (has_label ())
      {
!       str += get_label ().to_string ();
      }
  
    return str;
  }
  
  std::string
! NegationExpr::to_string () const
  {
    std::string str;
  
*************** NegationExpr::as_string () const
*** 1369,1402 ****
        return "ERROR_MARK_STRING - negation expr";
      }
  
!   str += main_or_left_expr->as_string ();
  
    return str;
  }
  
  std::string
! RangeFromExpr::as_string () const
  {
!   return from->as_string () + "..";
  }
  
  std::string
! RangeFullExpr::as_string () const
  {
    return "..";
  }
  
  std::string
! ArrayIndexExpr::as_string () const
  {
!   return array_expr->as_string () + "[" + index_expr->as_string () + "]";
  }
  
  std::string
! AssignmentExpr::as_string () const
  {
!   return main_or_left_expr->as_string () + " = " + right_expr->as_string ()
! 	 + "::" + get_mappings ().as_string ();
  }
  
  std::string
--- 1383,1415 ----
        return "ERROR_MARK_STRING - negation expr";
      }
  
!   str += main_or_left_expr->to_string ();
  
    return str;
  }
  
  std::string
! RangeFromExpr::to_string () const
  {
!   return from->to_string () + "..";
  }
  
  std::string
! RangeFullExpr::to_string () const
  {
    return "..";
  }
  
  std::string
! ArrayIndexExpr::to_string () const
  {
!   return array_expr->to_string () + "[" + index_expr->to_string () + "]";
  }
  
  std::string
! AssignmentExpr::to_string () const
  {
!   return main_or_left_expr->to_string () + " = " + right_expr->to_string ();
  }
  
  std::string
*************** CompoundAssignmentExpr::get_operator_str
*** 1449,1455 ****
  }
  
  std::string
! CompoundAssignmentExpr::as_string () const
  {
    std::string str ("CompoundAssignmentExpr: ");
    std::string operator_str = get_operator_str ();
--- 1462,1468 ----
  }
  
  std::string
! CompoundAssignmentExpr::to_string () const
  {
    std::string str ("CompoundAssignmentExpr: ");
    std::string operator_str = get_operator_str ();
*************** CompoundAssignmentExpr::as_string () con
*** 1459,1466 ****
      }
    else
      {
!       str += "\n left: " + main_or_left_expr->as_string ();
!       str += "\n right: " + right_expr->as_string ();
        str += "\n operator: " + operator_str;
      }
  
--- 1472,1479 ----
      }
    else
      {
!       str += "\n left: " + main_or_left_expr->to_string ();
!       str += "\n right: " + right_expr->to_string ();
        str += "\n operator: " + operator_str;
      }
  
*************** CompoundAssignmentExpr::as_string () con
*** 1468,1490 ****
  }
  
  std::string
! AsyncBlockExpr::as_string () const
  {
    std::string str = "AsyncBlockExpr: ";
  
    // get outer attributes
!   str += "\n " + Expr::as_string ();
  
    str += "\n Has move: ";
    str += has_move ? "true" : "false";
  
!   return str + "\n" + block_expr->as_string ();
  }
  
  std::string
! ComparisonExpr::as_string () const
  {
!   std::string str (main_or_left_expr->as_string ());
  
    switch (expr_type)
      {
--- 1481,1503 ----
  }
  
  std::string
! AsyncBlockExpr::to_string () const
  {
    std::string str = "AsyncBlockExpr: ";
  
    // get outer attributes
!   str += "\n " + Expr::to_string ();
  
    str += "\n Has move: ";
    str += has_move ? "true" : "false";
  
!   return str + "\n" + block_expr->to_string ();
  }
  
  std::string
! ComparisonExpr::to_string () const
  {
!   std::string str (main_or_left_expr->to_string ());
  
    switch (expr_type)
      {
*************** ComparisonExpr::as_string () const
*** 1510,1530 ****
        return "ERROR_MARK_STRING - comparison expr";
      }
  
!   str += right_expr->as_string ();
  
    return str;
  }
  
  std::string
! MethodCallExpr::as_string () const
  {
    std::string str ("MethodCallExpr: \n Object (receiver) expr: ");
  
!   str += receiver->as_string ();
  
    str += "\n Method path segment: \n";
  
!   str += method_name.as_string ();
  
    str += "\n Call params:";
    if (params.empty ())
--- 1523,1543 ----
        return "ERROR_MARK_STRING - comparison expr";
      }
  
!   str += right_expr->to_string ();
  
    return str;
  }
  
  std::string
! MethodCallExpr::to_string () const
  {
    std::string str ("MethodCallExpr: \n Object (receiver) expr: ");
  
!   str += receiver->to_string ();
  
    str += "\n Method path segment: \n";
  
!   str += method_name.to_string ();
  
    str += "\n Call params:";
    if (params.empty ())
*************** MethodCallExpr::as_string () const
*** 1540,1546 ****
  	      return "ERROR_MARK_STRING - method call expr param is null";
  	    }
  
! 	  str += "\n  " + param->as_string ();
  	}
      }
  
--- 1553,1559 ----
  	      return "ERROR_MARK_STRING - method call expr param is null";
  	    }
  
! 	  str += "\n  " + param->to_string ();
  	}
      }
  
*************** MethodCallExpr::as_string () const
*** 1548,1574 ****
  }
  
  std::string
! TupleIndexExpr::as_string () const
  {
!   return tuple_expr->as_string () + "." + std::to_string (tuple_index);
  }
  
  std::string
! DereferenceExpr::as_string () const
  {
!   return "*" + main_or_left_expr->as_string ();
  }
  
  std::string
! FieldAccessExpr::as_string () const
  {
!   return receiver->as_string () + "." + field.as_string ();
  }
  
  std::string
! LazyBooleanExpr::as_string () const
  {
!   std::string str (main_or_left_expr->as_string ());
  
    switch (expr_type)
      {
--- 1561,1587 ----
  }
  
  std::string
! TupleIndexExpr::to_string () const
  {
!   return tuple_expr->to_string () + "." + std::to_string (tuple_index);
  }
  
  std::string
! DereferenceExpr::to_string () const
  {
!   return "*" + main_or_left_expr->to_string ();
  }
  
  std::string
! FieldAccessExpr::to_string () const
  {
!   return receiver->to_string () + "." + field.as_string ();
  }
  
  std::string
! LazyBooleanExpr::to_string () const
  {
!   std::string str (main_or_left_expr->to_string ());
  
    switch (expr_type)
      {
*************** LazyBooleanExpr::as_string () const
*** 1582,1649 ****
        return "ERROR_MARK_STRING - lazy boolean expr out of bounds";
      }
  
!   str += right_expr->as_string ();
  
    return str;
  }
  
  std::string
! RangeFromToExpr::as_string () const
  {
!   return from->as_string () + ".." + to->as_string ();
  }
  
  std::string
! RangeToInclExpr::as_string () const
  {
!   return "..=" + to->as_string ();
  }
  
  std::string
! UnsafeBlockExpr::as_string () const
  {
    std::string istr = indent_spaces (enter);
    std::string str = istr + "UnsafeBlockExpr:";
    str += istr + "{";
  
    // get outer attributes
!   str += "\n" + indent_spaces (stay) + Expr::as_string ();
  
!   return str + "\n" + indent_spaces (out) + "}\n" + expr->as_string ();
  }
  
  std::string
! IfExpr::as_string () const
  {
    std::string str ("IfExpr: ");
  
!   str += "\n Condition expr: " + condition->as_string ();
  
!   str += "\n If block expr: " + if_block->as_string ();
  
    return str;
  }
  
  std::string
! IfExprConseqElse::as_string () const
  {
!   std::string str = IfExpr::as_string ();
  
!   str += "\n Else expr: " + else_block->as_string ();
  
    return str;
  }
  
  std::string
! RangeFromToInclExpr::as_string () const
  {
!   return from->as_string () + "..=" + to->as_string ();
  }
  
  std::string
! ErrorPropagationExpr::as_string () const
  {
!   return main_or_left_expr->as_string () + "?";
  }
  
  std::string
--- 1595,1662 ----
        return "ERROR_MARK_STRING - lazy boolean expr out of bounds";
      }
  
!   str += right_expr->to_string ();
  
    return str;
  }
  
  std::string
! RangeFromToExpr::to_string () const
  {
!   return from->to_string () + ".." + to->to_string ();
  }
  
  std::string
! RangeToInclExpr::to_string () const
  {
!   return "..=" + to->to_string ();
  }
  
  std::string
! UnsafeBlockExpr::to_string () const
  {
    std::string istr = indent_spaces (enter);
    std::string str = istr + "UnsafeBlockExpr:";
    str += istr + "{";
  
    // get outer attributes
!   str += "\n" + indent_spaces (stay) + Expr::to_string ();
  
!   return str + "\n" + indent_spaces (out) + "}\n" + expr->to_string ();
  }
  
  std::string
! IfExpr::to_string () const
  {
    std::string str ("IfExpr: ");
  
!   str += "\n Condition expr: " + condition->to_string ();
  
!   str += "\n If block expr: " + if_block->to_string ();
  
    return str;
  }
  
  std::string
! IfExprConseqElse::to_string () const
  {
!   std::string str = IfExpr::to_string ();
  
!   str += "\n Else expr: " + else_block->to_string ();
  
    return str;
  }
  
  std::string
! RangeFromToInclExpr::to_string () const
  {
!   return from->to_string () + "..=" + to->to_string ();
  }
  
  std::string
! ErrorPropagationExpr::to_string () const
  {
!   return main_or_left_expr->to_string () + "?";
  }
  
  std::string
*************** ArithmeticOrLogicalExpr::get_operator_st
*** 1694,1712 ****
  }
  
  std::string
! ArithmeticOrLogicalExpr::as_string () const
  {
!   std::string str = main_or_left_expr->as_string () + " ";
    str += get_operator_str () + " ";
!   str += right_expr->as_string ();
  
!   return "( " + str + " (" + get_mappings ().as_string () + "))";
  }
  
  std::string
! CallExpr::as_string () const
  {
!   std::string str = function->as_string () + "(";
    if (!has_params ())
      str += "none";
    else
--- 1707,1725 ----
  }
  
  std::string
! ArithmeticOrLogicalExpr::to_string () const
  {
!   std::string str = main_or_left_expr->to_string () + " ";
    str += get_operator_str () + " ";
!   str += right_expr->to_string ();
  
!   return "( " + str + " )";
  }
  
  std::string
! CallExpr::to_string () const
  {
!   std::string str = function->to_string () + "(";
    if (!has_params ())
      str += "none";
    else
*************** CallExpr::as_string () const
*** 1718,1731 ****
  	      return "ERROR_MARK_STRING - call expr param is null";
  	    }
  
! 	  str += param->as_string () + ",";
  	}
      }
!   return str + ")" + "::" + get_mappings ().as_string ();
  }
  
  std::string
! WhileLoopExpr::as_string () const
  {
    std::string str ("WhileLoopExpr: ");
  
--- 1731,1744 ----
  	      return "ERROR_MARK_STRING - call expr param is null";
  	    }
  
! 	  str += param->to_string () + ",";
  	}
      }
!   return str + ")";
  }
  
  std::string
! WhileLoopExpr::to_string () const
  {
    std::string str ("WhileLoopExpr: ");
  
*************** WhileLoopExpr::as_string () const
*** 1736,1753 ****
      }
    else
      {
!       str += get_loop_label ().as_string ();
      }
  
!   str += "\n Conditional expr: " + condition->as_string ();
  
!   str += "\n Loop block: " + loop_block->as_string ();
  
    return str;
  }
  
  std::string
! WhileLetLoopExpr::as_string () const
  {
    std::string str ("WhileLetLoopExpr: ");
  
--- 1749,1766 ----
      }
    else
      {
!       str += get_loop_label ().to_string ();
      }
  
!   str += "\n Conditional expr: " + condition->to_string ();
  
!   str += "\n Loop block: " + loop_block->to_string ();
  
    return str;
  }
  
  std::string
! WhileLetLoopExpr::to_string () const
  {
    std::string str ("WhileLetLoopExpr: ");
  
*************** WhileLetLoopExpr::as_string () const
*** 1758,1764 ****
      }
    else
      {
!       str += get_loop_label ().as_string ();
      }
  
    str += "\n Match arm patterns: ";
--- 1771,1777 ----
      }
    else
      {
!       str += get_loop_label ().to_string ();
      }
  
    str += "\n Match arm patterns: ";
*************** WhileLetLoopExpr::as_string () const
*** 1770,1788 ****
      {
        for (const auto &pattern : match_arm_patterns)
  	{
! 	  str += "\n  " + pattern->as_string ();
  	}
      }
  
!   str += "\n Scrutinee expr: " + condition->as_string ();
  
!   str += "\n Loop block: " + loop_block->as_string ();
  
    return str;
  }
  
  std::string
! LoopExpr::as_string () const
  {
    std::string str ("LoopExpr: (infinite loop)");
  
--- 1783,1801 ----
      {
        for (const auto &pattern : match_arm_patterns)
  	{
! 	  str += "\n  " + pattern->to_string ();
  	}
      }
  
!   str += "\n Scrutinee expr: " + condition->to_string ();
  
!   str += "\n Loop block: " + loop_block->to_string ();
  
    return str;
  }
  
  std::string
! LoopExpr::to_string () const
  {
    std::string str ("LoopExpr: (infinite loop)");
  
*************** LoopExpr::as_string () const
*** 1793,1808 ****
      }
    else
      {
!       str += get_loop_label ().as_string ();
      }
  
!   str += "\n Loop block: " + loop_block->as_string ();
  
    return str;
  }
  
  std::string
! ArrayExpr::as_string () const
  {
    std::string str ("ArrayExpr:");
  
--- 1806,1821 ----
      }
    else
      {
!       str += get_loop_label ().to_string ();
      }
  
!   str += "\n Loop block: " + loop_block->to_string ();
  
    return str;
  }
  
  std::string
! ArrayExpr::to_string () const
  {
    std::string str ("ArrayExpr:");
  
*************** ArrayExpr::as_string () const
*** 1829,1872 ****
      }
    else
      {
!       str += internal_elements->as_string ();
      }
  
    return str;
  }
  
  std::string
! AwaitExpr::as_string () const
  {
!   return awaited_expr->as_string () + ".await";
  }
  
  std::string
! BreakExpr::as_string () const
  {
    std::string str ("break ");
  
    if (has_label ())
      {
!       str += get_label ().as_string () + " ";
      }
  
    if (has_break_expr ())
      {
!       str += break_expr->as_string ();
      }
  
    return str;
  }
  
  std::string
! LoopLabel::as_string () const
  {
!   return label.as_string () + ": (label) ";
  }
  
  std::string
! MatchArm::as_string () const
  {
    // outer attributes
    std::string str = "Outer attributes: ";
--- 1842,1885 ----
      }
    else
      {
!       str += internal_elements->to_string ();
      }
  
    return str;
  }
  
  std::string
! AwaitExpr::to_string () const
  {
!   return awaited_expr->to_string () + ".await";
  }
  
  std::string
! BreakExpr::to_string () const
  {
    std::string str ("break ");
  
    if (has_label ())
      {
!       str += get_label ().to_string () + " ";
      }
  
    if (has_break_expr ())
      {
!       str += break_expr->to_string ();
      }
  
    return str;
  }
  
  std::string
! LoopLabel::to_string () const
  {
!   return label.to_string () + ": (label) ";
  }
  
  std::string
! MatchArm::to_string () const
  {
    // outer attributes
    std::string str = "Outer attributes: ";
*************** MatchArm::as_string () const
*** 1893,1899 ****
      {
        for (const auto &pattern : match_arm_patterns)
  	{
! 	  str += "\n " + pattern->as_string ();
  	}
      }
  
--- 1906,1912 ----
      {
        for (const auto &pattern : match_arm_patterns)
  	{
! 	  str += "\n " + pattern->to_string ();
  	}
      }
  
*************** MatchArm::as_string () const
*** 1904,1952 ****
      }
    else
      {
!       str += guard_expr->as_string ();
      }
  
    return str;
  }
  
  std::string
! MatchCase::as_string () const
  {
    std::string str ("MatchCase: (match arm) ");
  
!   str += "\n Match arm matcher: \n" + arm.as_string ();
!   str += "\n Expr: " + expr->as_string ();
  
    return str;
  }
  
  /*std::string
! MatchCaseBlockExpr::as_string () const
  {
!   std::string str = MatchCase::as_string ();
  
!   str += "\n Block expr: " + block_expr->as_string ();
  
    return str;
  }
  
  std::string
! MatchCaseExpr::as_string () const
  {
!   std::string str = MatchCase::as_string ();
  
!   str += "\n Expr: " + expr->as_string ();
  
    return str;
  }*/
  
  std::string
! MatchExpr::as_string () const
  {
    std::string str ("MatchExpr:");
  
!   str += "\n Scrutinee expr: " + branch_value->as_string ();
  
    // inner attributes
    str += "\n inner attributes: ";
--- 1917,1974 ----
      }
    else
      {
!       str += guard_expr->to_string ();
      }
  
    return str;
  }
  
  std::string
! MatchCase::to_debug_string () const
  {
    std::string str ("MatchCase: (match arm) ");
  
!   str += "\n Match arm matcher: \n" + arm.to_string ();
!   str += "\n Expr: " + expr->to_string ();
  
    return str;
  }
  
+ std::string
+ MatchCase::to_string () const
+ {
+   std::string str = arm.to_string ();
+   str += " => ";
+   str += expr ? expr->to_string () : "null";
+   return str;
+ }
+ 
  /*std::string
! MatchCaseBlockExpr::to_string () const
  {
!   std::string str = MatchCase::to_string ();
  
!   str += "\n Block expr: " + block_expr->to_string ();
  
    return str;
  }
  
  std::string
! MatchCaseExpr::to_string () const
  {
!   std::string str = MatchCase::to_string ();
  
!   str += "\n Expr: " + expr->to_string ();
  
    return str;
  }*/
  
  std::string
! MatchExpr::to_string () const
  {
    std::string str ("MatchExpr:");
  
!   str += "\n Scrutinee expr: " + branch_value->to_string ();
  
    // inner attributes
    str += "\n inner attributes: ";
*************** MatchExpr::as_string () const
*** 1973,1986 ****
    else
      {
        for (const auto &arm : match_arms)
! 	str += "\n  " + arm.as_string ();
      }
  
    return str;
  }
  
  std::string
! TupleExpr::as_string () const
  {
    std::string str ("TupleExpr:");
  
--- 1995,2008 ----
    else
      {
        for (const auto &arm : match_arms)
! 	str += "\n  " + arm.to_string ();
      }
  
    return str;
  }
  
  std::string
! TupleExpr::to_string () const
  {
    std::string str ("TupleExpr:");
  
*************** TupleExpr::as_string () const
*** 2009,2015 ****
      {
        for (const auto &elem : tuple_elems)
  	{
! 	  str += "\n  " + elem->as_string ();
  	}
      }
  
--- 2031,2037 ----
      {
        for (const auto &elem : tuple_elems)
  	{
! 	  str += "\n  " + elem->to_string ();
  	}
      }
  
*************** TupleExpr::as_string () const
*** 2017,2029 ****
  }
  
  std::string
! FunctionParam::as_string () const
  {
!   return param_name->as_string () + " : " + type->as_string ();
  }
  
  std::string
! FunctionQualifiers::as_string () const
  {
    std::string str;
  
--- 2039,2051 ----
  }
  
  std::string
! FunctionParam::to_string () const
  {
!   return param_name->to_string () + " : " + type->to_string ();
  }
  
  std::string
! FunctionQualifiers::to_string () const
  {
    std::string str;
  
*************** FunctionQualifiers::as_string () const
*** 2044,2050 ****
  }
  
  std::string
! TraitBound::as_string () const
  {
    std::string str ("TraitBound:");
  
--- 2066,2072 ----
  }
  
  std::string
! TraitBound::to_debug_string () const
  {
    std::string str ("TraitBound:");
  
*************** TraitBound::as_string () const
*** 2069,2137 ****
      {
        for (const auto &lifetime : for_lifetimes)
  	{
! 	  str += "\n  " + lifetime.as_string ();
  	}
      }
  
!   str += "\n Type path: " + type_path.as_string ();
  
    return str;
  }
  
  std::string
! LifetimeParam::as_string () const
  {
!   std::string str ("LifetimeParam: ");
! 
!   str += "\n Outer attributes: ";
!   if (outer_attrs.empty ())
!     {
!       str += "none";
!     }
!   else
      {
!       /* note that this does not print them with "outer attribute" syntax -
!        * just the body */
!       for (const auto &attr : outer_attrs)
! 	{
! 	  str += "\n " + attr.as_string ();
! 	}
      }
  
!   str += "\n Lifetime: " + lifetime.as_string ();
  
!   str += "\n Lifetime bounds: ";
!   if (!has_lifetime_bounds ())
!     {
!       str += "none";
!     }
!   else
!     {
!       for (const auto &bound : lifetime_bounds)
! 	{
! 	  str += "\n  " + bound.as_string ();
! 	}
!     }
  
    return str;
  }
  
  std::string
! QualifiedPathInType::as_string () const
  {
!   std::string str = path_type.as_string ();
  
!   str += "::" + associated_segment->as_string ();
    for (const auto &segment : segments)
      {
!       str += "::" + segment->as_string ();
      }
  
    return str;
  }
  
  std::string
! Lifetime::as_string () const
  {
    switch (lifetime_type)
      {
--- 2091,2146 ----
      {
        for (const auto &lifetime : for_lifetimes)
  	{
! 	  str += "\n  " + lifetime.to_string ();
  	}
      }
  
!   str += "\n Type path: " + type_path.to_string ();
  
    return str;
  }
  
  std::string
! TraitBound::to_string () const
  {
!   std::string str;
!   switch (polarity)
      {
!     case RegularBound:
!       break;
!     case NegativeBound:
!       str += "!";
!       break;
!     case AntiBound:
!       str += "?";
!       break;
      }
  
!   if (has_for_lifetimes ())
!     for (const auto &lifetime : for_lifetimes)
!       str += "\n  " + lifetime.to_string ();
  
!   str += "\n" + type_path.to_string ();
  
    return str;
  }
  
  std::string
! QualifiedPathInType::to_string () const
  {
!   std::string str = path_type.to_string ();
  
!   str += "::" + associated_segment->to_string ();
    for (const auto &segment : segments)
      {
!       str += "::" + segment->to_string ();
      }
  
    return str;
  }
  
  std::string
! Lifetime::to_string () const
  {
    switch (lifetime_type)
      {
*************** Lifetime::as_string () const
*** 2147,2153 ****
  }
  
  std::string
! TypePath::as_string () const
  {
    std::string str;
  
--- 2156,2162 ----
  }
  
  std::string
! TypePath::to_string () const
  {
    std::string str;
  
*************** TypePath::as_string () const
*** 2158,2164 ****
  
    for (const auto &segment : segments)
      {
!       str += segment->as_string () + "::";
      }
  
    // kinda hack - remove last 2 '::' characters
--- 2167,2173 ----
  
    for (const auto &segment : segments)
      {
!       str += segment->to_string () + "::";
      }
  
    // kinda hack - remove last 2 '::' characters
*************** TypePath::as_string () const
*** 2168,2181 ****
  }
  
  std::string
! TypeParam::as_string () const
  {
    std::string str ("TypeParam: ");
  
    str += "\n Outer attributes: ";
    if (outer_attrs.empty ())
      {
!       str += "none";
      }
    else
      {
--- 2177,2190 ----
  }
  
  std::string
! TypeParam::to_debug_string () const
  {
    std::string str ("TypeParam: ");
  
    str += "\n Outer attributes: ";
    if (outer_attrs.empty ())
      {
!       str += "\nnone";
      }
    else
      {
*************** TypeParam::as_string () const
*** 2198,2204 ****
      {
        for (const auto &bound : type_param_bounds)
  	{
! 	  str += "\n  " + bound->as_string ();
  	}
      }
  
--- 2207,2213 ----
      {
        for (const auto &bound : type_param_bounds)
  	{
! 	  str += "\n  " + bound->to_string ();
  	}
      }
  
*************** TypeParam::as_string () const
*** 2209,2220 ****
      }
    else
      {
!       str += type.value ()->as_string ();
      }
  
    return str;
  }
  
  AST::SimplePath
  PathPattern::convert_to_simple_path (bool with_opening_scope_resolution) const
  {
--- 2218,2260 ----
      }
    else
      {
!       str += type.value ()->to_string ();
      }
  
    return str;
  }
  
+ std::string
+ TypeParam::to_string () const
+ {
+   std::string str;
+   if (!outer_attrs.empty ())
+     {
+       for (const auto &attr : outer_attrs)
+ 	{
+ 	  str += attr.as_string () + "\n";
+ 	}
+     }
+ 
+   str += type_representation.as_string ();
+ 
+   if (!has_type_param_bounds ())
+     {
+       str += ": ";
+       for (size_t i = 0; i < type_param_bounds.size (); ++i)
+ 	{
+ 	  if (i > 0)
+ 	    str += " + ";
+ 	  str += type_param_bounds[i]->to_string ();
+ 	}
+     }
+ 
+   if (has_type ())
+     str += ": " + type.value ()->to_string ();
+ 
+   return str;
+ }
+ 
  AST::SimplePath
  PathPattern::convert_to_simple_path (bool with_opening_scope_resolution) const
  {
*************** PathPattern::convert_to_simple_path (boo
*** 2232,2244 ****
    for (const auto &segment : segments)
      {
        // return empty path if doesn't meet simple path segment requirements
!       if (segment.has_generic_args () || segment.as_string () == "Self")
  	{
  	  return AST::SimplePath::create_empty ();
  	}
  
        // create segment and add to vector
!       std::string segment_str = segment.as_string ();
        simple_segments.emplace_back (std::move (segment_str),
  				    segment.get_locus ());
      }
--- 2272,2284 ----
    for (const auto &segment : segments)
      {
        // return empty path if doesn't meet simple path segment requirements
!       if (segment.has_generic_args () || segment.to_string () == "Self")
  	{
  	  return AST::SimplePath::create_empty ();
  	}
  
        // create segment and add to vector
!       std::string segment_str = segment.to_string ();
        simple_segments.emplace_back (std::move (segment_str),
  				    segment.get_locus ());
      }
*************** TypePath::as_simple_path () const
*** 2274,2286 ****
      {
        // return empty path if doesn't meet simple path segment requirements
        if (segment == nullptr || segment->is_error ()
! 	  || !segment->is_ident_only () || segment->as_string () == "Self")
  	{
  	  return AST::SimplePath::create_empty ();
  	}
  
        // create segment and add to vector
!       std::string segment_str = segment->as_string ();
        simple_segments.emplace_back (std::move (segment_str),
  				    segment->get_locus ());
      }
--- 2314,2326 ----
      {
        // return empty path if doesn't meet simple path segment requirements
        if (segment == nullptr || segment->is_error ()
! 	  || !segment->is_ident_only () || segment->to_string () == "Self")
  	{
  	  return AST::SimplePath::create_empty ();
  	}
  
        // create segment and add to vector
!       std::string segment_str = segment->to_string ();
        simple_segments.emplace_back (std::move (segment_str),
  				    segment->get_locus ());
      }
*************** TypePath::as_simple_path () const
*** 2290,2308 ****
  }
  
  std::string
! PathExprSegment::as_string () const
  {
!   std::string ident_str = segment_name.as_string ();
    if (has_generic_args ())
      {
!       ident_str += "::<" + generic_args.as_string () + ">";
      }
  
    return ident_str;
  }
  
  std::string
! GenericArgs::as_string () const
  {
    std::string args;
  
--- 2330,2348 ----
  }
  
  std::string
! PathExprSegment::to_string () const
  {
!   std::string ident_str = segment_name.to_string ();
    if (has_generic_args ())
      {
!       ident_str += "::<" + generic_args.to_string () + ">";
      }
  
    return ident_str;
  }
  
  std::string
! GenericArgs::to_string () const
  {
    std::string args;
  
*************** GenericArgs::as_string () const
*** 2314,2320 ****
  
        for (; i != e; i++)
  	{
! 	  args += (*i).as_string ();
  	  if (e != i + 1)
  	    args += ", ";
  	}
--- 2354,2360 ----
  
        for (; i != e; i++)
  	{
! 	  args += (*i).to_string ();
  	  if (e != i + 1)
  	    args += ", ";
  	}
*************** GenericArgs::as_string () const
*** 2328,2334 ****
  
        for (; i != e; i++)
  	{
! 	  args += (*i)->as_string ();
  	  if (e != i + 1)
  	    args += ", ";
  	}
--- 2368,2374 ----
  
        for (; i != e; i++)
  	{
! 	  args += (*i)->to_string ();
  	  if (e != i + 1)
  	    args += ", ";
  	}
*************** GenericArgs::as_string () const
*** 2342,2348 ****
  
        for (; i != e; i++)
  	{
! 	  args += (*i).as_string ();
  	  if (e != i + 1)
  	    args += ", ";
  	}
--- 2382,2388 ----
  
        for (; i != e; i++)
  	{
! 	  args += (*i).to_string ();
  	  if (e != i + 1)
  	    args += ", ";
  	}
*************** GenericArgs::as_string () const
*** 2352,2377 ****
  }
  
  std::string
! GenericArgsBinding::as_string () const
  {
!   return identifier.as_string () + " = " + type->as_string ();
  }
  
  std::string
! RangePattern::as_string () const
  {
    if (has_ellipsis_syntax)
      {
!       return lower->as_string () + "..." + upper->as_string ();
      }
    else
      {
!       return lower->as_string () + "..=" + upper->as_string ();
      }
  }
  
  std::string
! RangePatternBoundLiteral::as_string () const
  {
    std::string str;
  
--- 2392,2417 ----
  }
  
  std::string
! GenericArgsBinding::to_string () const
  {
!   return identifier.as_string () + " = " + type->to_string ();
  }
  
  std::string
! RangePattern::to_string () const
  {
    if (has_ellipsis_syntax)
      {
!       return lower->to_string () + "..." + upper->to_string ();
      }
    else
      {
!       return lower->to_string () + "..=" + upper->to_string ();
      }
  }
  
  std::string
! RangePatternBoundLiteral::to_string () const
  {
    std::string str;
  
*************** RangePatternBoundLiteral::as_string () c
*** 2386,2405 ****
  }
  
  std::string
! SlicePatternItemsNoRest::as_string () const
  {
    std::string str;
  
    for (const auto &pattern : patterns)
      {
!       str += "\n " + pattern->as_string ();
      }
  
    return str;
  }
  
  std::string
! SlicePatternItemsHasRest::as_string () const
  {
    std::string str;
  
--- 2426,2445 ----
  }
  
  std::string
! SlicePatternItemsNoRest::to_string () const
  {
    std::string str;
  
    for (const auto &pattern : patterns)
      {
!       str += "\n " + pattern->to_string ();
      }
  
    return str;
  }
  
  std::string
! SlicePatternItemsHasRest::to_string () const
  {
    std::string str;
  
*************** SlicePatternItemsHasRest::as_string () c
*** 2412,2418 ****
      {
        for (const auto &lower : lower_patterns)
  	{
! 	  str += "\n  " + lower->as_string ();
  	}
      }
  
--- 2452,2458 ----
      {
        for (const auto &lower : lower_patterns)
  	{
! 	  str += "\n  " + lower->to_string ();
  	}
      }
  
*************** SlicePatternItemsHasRest::as_string () c
*** 2425,2431 ****
      {
        for (const auto &upper : upper_patterns)
  	{
! 	  str += "\n  " + upper->as_string ();
  	}
      }
  
--- 2465,2471 ----
      {
        for (const auto &upper : upper_patterns)
  	{
! 	  str += "\n  " + upper->to_string ();
  	}
      }
  
*************** SlicePatternItemsHasRest::as_string () c
*** 2433,2471 ****
  }
  
  std::string
! SlicePattern::as_string () const
  {
!   return "SlicePattern: " + items->as_string ();
  }
  
  std::string
! AltPattern::as_string () const
  {
    std::string str ("AltPattern: ");
  
    for (const auto &pattern : alts)
      {
!       str += "\n " + pattern->as_string ();
      }
  
    return str;
  }
  
  std::string
! TuplePatternItemsNoRest::as_string () const
  {
    std::string str;
  
    for (const auto &pattern : patterns)
      {
!       str += "\n " + pattern->as_string ();
      }
  
    return str;
  }
  
  std::string
! TuplePatternItemsHasRest::as_string () const
  {
    std::string str;
  
--- 2473,2511 ----
  }
  
  std::string
! SlicePattern::to_string () const
  {
!   return "SlicePattern: " + items->to_string ();
  }
  
  std::string
! AltPattern::to_string () const
  {
    std::string str ("AltPattern: ");
  
    for (const auto &pattern : alts)
      {
!       str += "\n " + pattern->to_string ();
      }
  
    return str;
  }
  
  std::string
! TuplePatternItemsNoRest::to_string () const
  {
    std::string str;
  
    for (const auto &pattern : patterns)
      {
!       str += "\n " + pattern->to_string ();
      }
  
    return str;
  }
  
  std::string
! TuplePatternItemsHasRest::to_string () const
  {
    std::string str;
  
*************** TuplePatternItemsHasRest::as_string () c
*** 2478,2484 ****
      {
        for (const auto &lower : lower_patterns)
  	{
! 	  str += "\n  " + lower->as_string ();
  	}
      }
  
--- 2518,2524 ----
      {
        for (const auto &lower : lower_patterns)
  	{
! 	  str += "\n  " + lower->to_string ();
  	}
      }
  
*************** TuplePatternItemsHasRest::as_string () c
*** 2491,2497 ****
      {
        for (const auto &upper : upper_patterns)
  	{
! 	  str += "\n  " + upper->as_string ();
  	}
      }
  
--- 2531,2537 ----
      {
        for (const auto &upper : upper_patterns)
  	{
! 	  str += "\n  " + upper->to_string ();
  	}
      }
  
*************** TuplePatternItemsHasRest::as_string () c
*** 2499,2511 ****
  }
  
  std::string
! TuplePattern::as_string () const
  {
!   return "TuplePattern: " + items->as_string ();
  }
  
  std::string
! StructPatternField::as_string () const
  {
    // outer attributes
    std::string str ("Outer attributes: ");
--- 2539,2551 ----
  }
  
  std::string
! TuplePattern::to_string () const
  {
!   return items->to_string ();
  }
  
  std::string
! StructPatternField::to_string () const
  {
    // outer attributes
    std::string str ("Outer attributes: ");
*************** StructPatternField::as_string () const
*** 2540,2554 ****
        break;
      }
  
-   str += "\n   mapping: " + mappings.as_string ();
- 
    return str;
  }
  
  std::string
! StructPatternFieldIdent::as_string () const
  {
!   std::string str = StructPatternField::as_string ();
  
    str += "\n";
  
--- 2580,2592 ----
        break;
      }
  
    return str;
  }
  
  std::string
! StructPatternFieldIdent::to_string () const
  {
!   std::string str = StructPatternField::to_string ();
  
    str += "\n";
  
*************** StructPatternFieldIdent::as_string () co
*** 2568,2598 ****
  }
  
  std::string
! StructPatternFieldTuplePat::as_string () const
  {
!   std::string str = StructPatternField::as_string ();
  
    str += "\n";
  
!   str += std::to_string (index) + " : " + tuple_pattern->as_string ();
  
    return str;
  }
  
  std::string
! StructPatternFieldIdentPat::as_string () const
  {
!   std::string str = StructPatternField::as_string ();
  
    str += "\n";
  
!   str += ident.as_string () + " : " + ident_pattern->as_string ();
  
    return str;
  }
  
  std::string
! StructPatternElements::as_string () const
  {
    std::string str ("\n  Fields: ");
  
--- 2606,2636 ----
  }
  
  std::string
! StructPatternFieldTuplePat::to_string () const
  {
!   std::string str = StructPatternField::to_string ();
  
    str += "\n";
  
!   str += std::to_string (index) + " : " + tuple_pattern->to_string ();
  
    return str;
  }
  
  std::string
! StructPatternFieldIdentPat::to_string () const
  {
!   std::string str = StructPatternField::to_string ();
  
    str += "\n";
  
!   str += ident.as_string () + " : " + ident_pattern->to_string ();
  
    return str;
  }
  
  std::string
! StructPatternElements::to_string () const
  {
    std::string str ("\n  Fields: ");
  
*************** StructPatternElements::as_string () cons
*** 2604,2610 ****
      {
        for (const auto &field : fields)
  	{
! 	  str += "\n   " + field->as_string ();
  	}
      }
  
--- 2642,2648 ----
      {
        for (const auto &field : fields)
  	{
! 	  str += "\n   " + field->to_string ();
  	}
      }
  
*************** StructPatternElements::as_string () cons
*** 2612,2622 ****
  }
  
  std::string
! StructPattern::as_string () const
  {
    std::string str ("StructPattern: \n Path: ");
  
!   str += path.as_string ();
  
    str += "\n Struct pattern elems: ";
    if (!has_struct_pattern_elems ())
--- 2650,2660 ----
  }
  
  std::string
! StructPattern::to_string () const
  {
    std::string str ("StructPattern: \n Path: ");
  
!   str += path.to_string ();
  
    str += "\n Struct pattern elems: ";
    if (!has_struct_pattern_elems ())
*************** StructPattern::as_string () const
*** 2625,2644 ****
      }
    else
      {
!       str += elems.as_string ();
      }
  
    return str;
  }
  
  std::string
! LiteralPattern::as_string () const
  {
    return (has_minus ? "-" : "") + lit.as_string ();
  }
  
  std::string
! ReferencePattern::as_string () const
  {
    std::string str ("&");
  
--- 2663,2682 ----
      }
    else
      {
!       str += elems.to_string ();
      }
  
    return str;
  }
  
  std::string
! LiteralPattern::to_string () const
  {
    return (has_minus ? "-" : "") + lit.as_string ();
  }
  
  std::string
! ReferencePattern::to_string () const
  {
    std::string str ("&");
  
*************** ReferencePattern::as_string () const
*** 2647,2659 ****
        str += "mut ";
      }
  
!   str += pattern->as_string ();
  
    return str;
  }
  
  std::string
! IdentifierPattern::as_string () const
  {
    std::string str;
  
--- 2685,2697 ----
        str += "mut ";
      }
  
!   str += pattern->to_string ();
  
    return str;
  }
  
  std::string
! IdentifierPattern::to_string () const
  {
    std::string str;
  
*************** IdentifierPattern::as_string () const
*** 2671,2697 ****
  
    if (has_subpattern ())
      {
!       str += " @ " + subpattern->as_string ();
      }
  
    return str;
  }
  
  std::string
! TupleStructItemsNoRest::as_string () const
  {
    std::string str;
  
    for (const auto &pattern : patterns)
      {
!       str += "\n  " + pattern->as_string ();
      }
  
    return str;
  }
  
  std::string
! TupleStructItemsHasRest::as_string () const
  {
    std::string str ("\n  Lower patterns: ");
  
--- 2709,2735 ----
  
    if (has_subpattern ())
      {
!       str += " @ " + subpattern->to_string ();
      }
  
    return str;
  }
  
  std::string
! TupleStructItemsNoRest::to_string () const
  {
    std::string str;
  
    for (const auto &pattern : patterns)
      {
!       str += "\n  " + pattern->to_string ();
      }
  
    return str;
  }
  
  std::string
! TupleStructItemsHasRest::to_string () const
  {
    std::string str ("\n  Lower patterns: ");
  
*************** TupleStructItemsHasRest::as_string () co
*** 2703,2709 ****
      {
        for (const auto &lower : lower_patterns)
  	{
! 	  str += "\n   " + lower->as_string ();
  	}
      }
  
--- 2741,2747 ----
      {
        for (const auto &lower : lower_patterns)
  	{
! 	  str += "\n   " + lower->to_string ();
  	}
      }
  
*************** TupleStructItemsHasRest::as_string () co
*** 2716,2722 ****
      {
        for (const auto &upper : upper_patterns)
  	{
! 	  str += "\n   " + upper->as_string ();
  	}
      }
  
--- 2754,2760 ----
      {
        for (const auto &upper : upper_patterns)
  	{
! 	  str += "\n   " + upper->to_string ();
  	}
      }
  
*************** TupleStructItemsHasRest::as_string () co
*** 2724,2742 ****
  }
  
  std::string
! TupleStructPattern::as_string () const
  {
    std::string str ("TupleStructPattern: \n Path: ");
  
!   str += path.as_string ();
  
!   str += "\n Tuple struct items: " + items->as_string ();
  
    return str;
  }
  
  std::string
! LetStmt::as_string () const
  {
    // outer attributes
    std::string str = "Outer attributes: ";
--- 2762,2780 ----
  }
  
  std::string
! TupleStructPattern::to_string () const
  {
    std::string str ("TupleStructPattern: \n Path: ");
  
!   str += path.to_string ();
  
!   str += "\n Tuple struct items: " + items->to_string ();
  
    return str;
  }
  
  std::string
! LetStmt::to_string () const
  {
    // outer attributes
    std::string str = "Outer attributes: ";
*************** LetStmt::as_string () const
*** 2756,2771 ****
        indent_spaces (out);
      }
  
!   str += "\n" + indent_spaces (stay) + "let " + variables_pattern->as_string ();
  
    if (has_type ())
      {
!       str += " : " + get_type ().as_string ();
      }
  
    if (has_init_expr ())
      {
!       str += " = " + get_init_expr ().as_string ();
      }
  
    return str;
--- 2794,2809 ----
        indent_spaces (out);
      }
  
!   str += "\n" + indent_spaces (stay) + "let " + variables_pattern->to_string ();
  
    if (has_type ())
      {
!       str += " : " + get_type ().to_string ();
      }
  
    if (has_init_expr ())
      {
!       str += " = " + get_init_expr ().to_string ();
      }
  
    return str;
*************** LetStmt::as_string () const
*** 2773,2779 ****
  
  // Used to get outer attributes for expressions.
  std::string
! Expr::as_string () const
  {
    // outer attributes
    std::string str = "outer attributes: ";
--- 2811,2817 ----
  
  // Used to get outer attributes for expressions.
  std::string
! Expr::to_string () const
  {
    // outer attributes
    std::string str = "outer attributes: ";
*************** Expr::as_string () const
*** 2798,2803 ****
--- 2836,2846 ----
  std::unique_ptr<TraitBound>
  TypePath::to_trait_bound (bool in_parens) const
  {
+   // If already in parentheses, don't convert to trait bound
+   // This ensures (TypePath) stays as ParenthesisedType in the parser
+   if (in_parens)
+     return nullptr;
+ 
    // create clone FIXME is this required? or is copy constructor automatically
    // called?
    TypePath copy (*this);
*************** TypePath::to_trait_bound (bool in_parens
*** 2806,2825 ****
  }
  
  std::string
! InferredType::as_string () const
  {
!   return "_ (inferred) " + get_mappings ().as_string ();
  }
  
  std::string
! TypeCastExpr::as_string () const
  {
!   return main_or_left_expr->as_string () + " as "
! 	 + type_to_convert_to->as_string ();
  }
  
  std::string
! ImplTraitType::as_string () const
  {
    std::string str ("ImplTraitType: \n TypeParamBounds: ");
  
--- 2849,2868 ----
  }
  
  std::string
! InferredType::to_string () const
  {
!   return "_ (inferred)";
  }
  
  std::string
! TypeCastExpr::to_string () const
  {
!   return main_or_left_expr->to_string () + " as "
! 	 + type_to_convert_to->to_string ();
  }
  
  std::string
! ImplTraitType::to_string () const
  {
    std::string str ("ImplTraitType: \n TypeParamBounds: ");
  
*************** ImplTraitType::as_string () const
*** 2831,2837 ****
      {
        for (const auto &bound : type_param_bounds)
  	{
! 	  str += "\n  " + bound->as_string ();
  	}
      }
  
--- 2874,2880 ----
      {
        for (const auto &bound : type_param_bounds)
  	{
! 	  str += "\n  " + bound->to_string ();
  	}
      }
  
*************** ImplTraitType::as_string () const
*** 2839,2851 ****
  }
  
  std::string
! ReferenceType::as_string () const
  {
    std::string str ("&");
  
    if (has_lifetime ())
      {
!       str += get_lifetime ().as_string () + " ";
      }
  
    if (is_mut ())
--- 2882,2894 ----
  }
  
  std::string
! ReferenceType::to_string () const
  {
    std::string str ("&");
  
    if (has_lifetime ())
      {
!       str += get_lifetime ().to_string () + " ";
      }
  
    if (is_mut ())
*************** ReferenceType::as_string () const
*** 2853,2872 ****
        str += "mut ";
      }
  
!   str += type->as_string ();
  
    return str;
  }
  
  std::string
! RawPointerType::as_string () const
  {
    return std::string ("*") + (is_mut () ? "mut " : "const ")
! 	 + type->as_string ();
  }
  
  std::string
! TraitObjectType::as_string () const
  {
    std::string str ("TraitObjectType: \n Has dyn dispatch: ");
  
--- 2896,2915 ----
        str += "mut ";
      }
  
!   str += type->to_string ();
  
    return str;
  }
  
  std::string
! RawPointerType::to_string () const
  {
    return std::string ("*") + (is_mut () ? "mut " : "const ")
! 	 + type->to_string ();
  }
  
  std::string
! TraitObjectType::to_string () const
  {
    std::string str ("TraitObjectType: \n Has dyn dispatch: ");
  
*************** TraitObjectType::as_string () const
*** 2888,2894 ****
      {
        for (const auto &bound : type_param_bounds)
  	{
! 	  str += "\n  " + bound->as_string ();
  	}
      }
  
--- 2931,2937 ----
      {
        for (const auto &bound : type_param_bounds)
  	{
! 	  str += "\n  " + bound->to_string ();
  	}
      }
  
*************** TraitObjectType::as_string () const
*** 2896,2902 ****
  }
  
  std::string
! BareFunctionType::as_string () const
  {
    std::string str ("BareFunctionType: \n For lifetimes: ");
  
--- 2939,2945 ----
  }
  
  std::string
! BareFunctionType::to_string () const
  {
    std::string str ("BareFunctionType: \n For lifetimes: ");
  
*************** BareFunctionType::as_string () const
*** 2908,2918 ****
      {
        for (const auto &for_lifetime : for_lifetimes)
  	{
! 	  str += "\n  " + for_lifetime.as_string ();
  	}
      }
  
!   str += "\n Qualifiers: " + function_qualifiers.as_string ();
  
    str += "\n Params: ";
    if (params.empty ())
--- 2951,2961 ----
      {
        for (const auto &for_lifetime : for_lifetimes)
  	{
! 	  str += "\n  " + for_lifetime.to_string ();
  	}
      }
  
!   str += "\n Qualifiers: " + function_qualifiers.to_string ();
  
    str += "\n Params: ";
    if (params.empty ())
*************** BareFunctionType::as_string () const
*** 2923,2929 ****
      {
        for (const auto &param : params)
  	{
! 	  str += "\n  " + param.as_string ();
  	}
      }
  
--- 2966,2972 ----
      {
        for (const auto &param : params)
  	{
! 	  str += "\n  " + param.to_string ();
  	}
      }
  
*************** BareFunctionType::as_string () const
*** 2944,2963 ****
      }
    else
      {
!       str += return_type->as_string ();
      }
  
    return str;
  }
  
  std::string
! TypePathSegmentGeneric::as_string () const
  {
!   return TypePathSegment::as_string () + "<" + generic_args.as_string () + ">";
  }
  
  std::string
! TypePathFunction::as_string () const
  {
    std::string str ("(");
  
--- 2987,3006 ----
      }
    else
      {
!       str += return_type->to_string ();
      }
  
    return str;
  }
  
  std::string
! TypePathSegmentGeneric::to_string () const
  {
!   return TypePathSegment::to_string () + "<" + generic_args.to_string () + ">";
  }
  
  std::string
! TypePathFunction::to_string () const
  {
    std::string str ("(");
  
*************** TypePathFunction::as_string () const
*** 2968,2974 ****
  
        for (; i != e; i++)
  	{
! 	  str += (*i)->as_string ();
  	  if (e != i + 1)
  	    str += ", ";
  	}
--- 3011,3017 ----
  
        for (; i != e; i++)
  	{
! 	  str += (*i)->to_string ();
  	  if (e != i + 1)
  	    str += ", ";
  	}
*************** TypePathFunction::as_string () const
*** 2978,3009 ****
  
    if (has_return_type ())
      {
!       str += " -> " + return_type->as_string ();
      }
  
    return str;
  }
  
  std::string
! TypePathSegmentFunction::as_string () const
  {
!   return TypePathSegment::as_string () + function_path.as_string ();
  }
  
  std::string
! ArrayType::as_string () const
  {
!   return "[" + elem_type->as_string () + "; " + size->as_string () + "]";
  }
  
  std::string
! SliceType::as_string () const
  {
!   return "[" + elem_type->as_string () + "]";
  }
  
  std::string
! TupleType::as_string () const
  {
    std::string str ("(");
  
--- 3021,3052 ----
  
    if (has_return_type ())
      {
!       str += " -> " + return_type->to_string ();
      }
  
    return str;
  }
  
  std::string
! TypePathSegmentFunction::to_string () const
  {
!   return TypePathSegment::to_string () + function_path.to_string ();
  }
  
  std::string
! ArrayType::to_string () const
  {
!   return "[" + elem_type->to_string () + "; " + size->to_string () + "]";
  }
  
  std::string
! SliceType::to_string () const
  {
!   return "[" + elem_type->to_string () + "]";
  }
  
  std::string
! TupleType::to_string () const
  {
    std::string str ("(");
  
*************** TupleType::as_string () const
*** 3014,3020 ****
  
        for (; i != e; i++)
  	{
! 	  str += (*i)->as_string ();
  	  if (e != i + 1)
  	    str += ", ";
  	}
--- 3057,3063 ----
  
        for (; i != e; i++)
  	{
! 	  str += (*i)->to_string ();
  	  if (e != i + 1)
  	    str += ", ";
  	}
*************** TupleType::as_string () const
*** 3026,3050 ****
  }
  
  std::string
! StructExpr::as_string () const
  {
!   std::string str = ExprWithoutBlock::as_string ();
    indent_spaces (enter);
    str += "\n" + indent_spaces (stay) + "StructExpr:";
    indent_spaces (enter);
    str += "\n" + indent_spaces (stay) + "PathInExpr:\n";
!   str += indent_spaces (stay) + struct_name.as_string ();
    indent_spaces (out);
    indent_spaces (out);
    return str;
  }
  
  std::string
! StructExprStruct::as_string () const
  {
    std::string str ("StructExprStruct (or subclass): ");
  
!   str += "\n Path: " + struct_name.as_string ();
  
    // inner attributes
    str += "\n inner attributes: ";
--- 3069,3093 ----
  }
  
  std::string
! StructExpr::to_string () const
  {
!   std::string str = ExprWithoutBlock::to_string ();
    indent_spaces (enter);
    str += "\n" + indent_spaces (stay) + "StructExpr:";
    indent_spaces (enter);
    str += "\n" + indent_spaces (stay) + "PathInExpr:\n";
!   str += indent_spaces (stay) + struct_name.to_string ();
    indent_spaces (out);
    indent_spaces (out);
    return str;
  }
  
  std::string
! StructExprStruct::to_string () const
  {
    std::string str ("StructExprStruct (or subclass): ");
  
!   str += "\n Path: " + struct_name.to_string ();
  
    // inner attributes
    str += "\n inner attributes: ";
*************** StructExprStruct::as_string () const
*** 3066,3076 ****
  }
  
  std::string
! StructBase::as_string () const
  {
    if (base_struct != nullptr)
      {
!       return base_struct->as_string ();
      }
    else
      {
--- 3109,3119 ----
  }
  
  std::string
! StructBase::to_string () const
  {
    if (base_struct != nullptr)
      {
!       return base_struct->to_string ();
      }
    else
      {
*************** StructBase::as_string () const
*** 3079,3106 ****
  }
  
  std::string
! StructExprFieldWithVal::as_string () const
  {
    // used to get value string
!   return value->as_string ();
  }
  
  std::string
! StructExprFieldIdentifierValue::as_string () const
  {
!   return field_name.as_string () + " : " + StructExprFieldWithVal::as_string ();
  }
  
  std::string
! StructExprFieldIndexValue::as_string () const
  {
!   return std::to_string (index) + " : " + StructExprFieldWithVal::as_string ();
  }
  
  std::string
! StructExprStructFields::as_string () const
  {
!   std::string str = StructExprStruct::as_string ();
  
    str += "\n Fields: ";
    if (fields.empty ())
--- 3122,3149 ----
  }
  
  std::string
! StructExprFieldWithVal::to_string () const
  {
    // used to get value string
!   return value->to_string ();
  }
  
  std::string
! StructExprFieldIdentifierValue::to_string () const
  {
!   return field_name.as_string () + " : " + StructExprFieldWithVal::to_string ();
  }
  
  std::string
! StructExprFieldIndexValue::to_string () const
  {
!   return std::to_string (index) + " : " + StructExprFieldWithVal::to_string ();
  }
  
  std::string
! StructExprStructFields::to_string () const
  {
!   std::string str = StructExprStruct::to_string ();
  
    str += "\n Fields: ";
    if (fields.empty ())
*************** StructExprStructFields::as_string () con
*** 3111,3117 ****
      {
        for (const auto &field : fields)
  	{
! 	  str += "\n  " + field->as_string ();
  	}
      }
  
--- 3154,3160 ----
      {
        for (const auto &field : fields)
  	{
! 	  str += "\n  " + field->to_string ();
  	}
      }
  
*************** StructExprStructFields::as_string () con
*** 3122,3137 ****
      }
    else
      {
!       str += (*struct_base)->as_string ();
      }
  
    return str;
  }
  
  std::string
! EnumItem::as_string () const
  {
!   std::string str = Item::as_string ();
    str += variant_name.as_string ();
    str += " ";
    switch (get_enum_item_kind ())
--- 3165,3180 ----
      }
    else
      {
!       str += (*struct_base)->to_string ();
      }
  
    return str;
  }
  
  std::string
! EnumItem::to_string () const
  {
!   std::string str = Item::to_string ();
    str += variant_name.as_string ();
    str += " ";
    switch (get_enum_item_kind ())
*************** EnumItem::as_string () const
*** 3154,3162 ****
  }
  
  std::string
! EnumItemTuple::as_string () const
  {
!   std::string str = EnumItem::as_string ();
  
    // add tuple opening parens
    str += "(";
--- 3197,3205 ----
  }
  
  std::string
! EnumItemTuple::to_string () const
  {
!   std::string str = EnumItem::to_string ();
  
    // add tuple opening parens
    str += "(";
*************** EnumItemTuple::as_string () const
*** 3169,3175 ****
  
        for (; i != e; i++)
  	{
! 	  str += (*i).as_string ();
  	  if (e != i + 1)
  	    str += ", ";
  	}
--- 3212,3218 ----
  
        for (; i != e; i++)
  	{
! 	  str += (*i).to_string ();
  	  if (e != i + 1)
  	    str += ", ";
  	}
*************** EnumItemTuple::as_string () const
*** 3182,3188 ****
  }
  
  std::string
! TupleField::as_string () const
  {
    // outer attributes
    std::string str = "outer attributes: ";
--- 3225,3231 ----
  }
  
  std::string
! TupleField::to_string () const
  {
    // outer attributes
    std::string str = "outer attributes: ";
*************** TupleField::as_string () const
*** 3202,3219 ****
  
    if (has_visibility ())
      {
!       str += "\n" + visibility.as_string ();
      }
  
!   str += " " + field_type->as_string ();
  
    return str;
  }
  
  std::string
! EnumItemStruct::as_string () const
  {
!   std::string str = EnumItem::as_string ();
  
    // add struct opening parens
    str += "{";
--- 3245,3262 ----
  
    if (has_visibility ())
      {
!       str += "\n" + visibility.to_string ();
      }
  
!   str += " " + field_type->to_string ();
  
    return str;
  }
  
  std::string
! EnumItemStruct::to_string () const
  {
!   std::string str = EnumItem::to_string ();
  
    // add struct opening parens
    str += "{";
*************** EnumItemStruct::as_string () const
*** 3226,3232 ****
  
        for (; i != e; i++)
  	{
! 	  str += (*i).as_string ();
  	  if (e != i + 1)
  	    str += ", ";
  	}
--- 3269,3275 ----
  
        for (; i != e; i++)
  	{
! 	  str += (*i).to_string ();
  	  if (e != i + 1)
  	    str += ", ";
  	}
*************** EnumItemStruct::as_string () const
*** 3239,3245 ****
  }
  
  std::string
! StructField::as_string () const
  {
    // outer attributes
    std::string str = "outer attributes: ";
--- 3282,3288 ----
  }
  
  std::string
! StructField::to_string () const
  {
    // outer attributes
    std::string str = "outer attributes: ";
*************** StructField::as_string () const
*** 3259,3285 ****
  
    if (has_visibility ())
      {
!       str += "\n" + visibility.as_string ();
      }
  
!   str += " " + field_name.as_string () + " : " + field_type->as_string ();
  
    return str;
  }
  
  std::string
! EnumItemDiscriminant::as_string () const
  {
!   std::string str = EnumItem::as_string ();
  
    // add equal and expression
!   str += " = " + expression->as_string ();
  
    return str;
  }
  
  std::string
! ExternalItem::as_string () const
  {
    // outer attributes
    std::string str = "outer attributes: ";
--- 3302,3328 ----
  
    if (has_visibility ())
      {
!       str += "\n" + visibility.to_string ();
      }
  
!   str += " " + field_name.as_string () + " : " + field_type->to_string ();
  
    return str;
  }
  
  std::string
! EnumItemDiscriminant::to_string () const
  {
!   std::string str = EnumItem::to_string ();
  
    // add equal and expression
!   str += " = " + expression->to_string ();
  
    return str;
  }
  
  std::string
! ExternalItem::to_string () const
  {
    // outer attributes
    std::string str = "outer attributes: ";
*************** ExternalItem::as_string () const
*** 3298,3312 ****
      }
  
    // start visibility on new line and with a space
!   str += "\n" + visibility.as_string () + " ";
  
    return str;
  }
  
  std::string
! ExternalStaticItem::as_string () const
  {
!   std::string str = ExternalItem::as_string ();
  
    str += "static ";
  
--- 3341,3355 ----
      }
  
    // start visibility on new line and with a space
!   str += "\n" + visibility.to_string () + " ";
  
    return str;
  }
  
  std::string
! ExternalStaticItem::to_string () const
  {
!   std::string str = ExternalItem::to_string ();
  
    str += "static ";
  
*************** ExternalStaticItem::as_string () const
*** 3319,3333 ****
    str += get_item_name ().as_string ();
  
    // add type on new line
!   str += "\n Type: " + item_type->as_string ();
  
    return str;
  }
  
  std::string
! ExternalFunctionItem::as_string () const
  {
!   std::string str = ExternalItem::as_string ();
  
    str += "fn ";
  
--- 3362,3376 ----
    str += get_item_name ().as_string ();
  
    // add type on new line
!   str += "\n Type: " + item_type->to_string ();
  
    return str;
  }
  
  std::string
! ExternalFunctionItem::to_string () const
  {
!   std::string str = ExternalItem::to_string ();
  
    str += "fn ";
  
*************** ExternalFunctionItem::as_string () const
*** 3353,3359 ****
  	      return "nullptr_POINTER_MARK";
  	    }
  
! 	  str += "\n  " + param->as_string ();
  	}
      }
  
--- 3396,3402 ----
  	      return "nullptr_POINTER_MARK";
  	    }
  
! 	  str += "\n  " + param->to_string ();
  	}
      }
  
*************** ExternalFunctionItem::as_string () const
*** 3367,3373 ****
      {
        for (const auto &param : function_params)
  	{
! 	  str += "\n  " + param.as_string ();
  	}
        if (has_variadics)
  	{
--- 3410,3416 ----
      {
        for (const auto &param : function_params)
  	{
! 	  str += "\n  " + param.to_string ();
  	}
        if (has_variadics)
  	{
*************** ExternalFunctionItem::as_string () const
*** 3377,3389 ****
  
    // add type on new line)
    str += "\n (return) Type: "
! 	 + (has_return_type () ? return_type->as_string () : "()");
  
    // where clause
    str += "\n Where clause: ";
    if (has_where_clause ())
      {
!       str += where_clause.as_string ();
      }
    else
      {
--- 3420,3432 ----
  
    // add type on new line)
    str += "\n (return) Type: "
! 	 + (has_return_type () ? return_type->to_string () : "()");
  
    // where clause
    str += "\n Where clause: ";
    if (has_where_clause ())
      {
!       str += where_clause.to_string ();
      }
    else
      {
*************** ExternalFunctionItem::as_string () const
*** 3394,3402 ****
  }
  
  std::string
! ExternalTypeItem::as_string () const
  {
!   std::string str = ExternalItem::as_string ();
  
    str += "type ";
  
--- 3437,3445 ----
  }
  
  std::string
! ExternalTypeItem::to_string () const
  {
!   std::string str = ExternalItem::to_string ();
  
    str += "type ";
  
*************** ExternalTypeItem::as_string () const
*** 3407,3422 ****
  }
  
  std::string
! NamedFunctionParam::as_string () const
  {
    std::string str = name.as_string ();
  
!   str += "\n Type: " + param_type->as_string ();
  
    return str;
  }
  
! /*std::string TraitItem::as_string() const {
      // outer attributes
      std::string str = "outer attributes: ";
      if (outer_attrs.empty()) {
--- 3450,3465 ----
  }
  
  std::string
! NamedFunctionParam::to_string () const
  {
    std::string str = name.as_string ();
  
!   str += "\n Type: " + param_type->to_string ();
  
    return str;
  }
  
! /*std::string TraitItem::to_string() const {
      // outer attributes
      std::string str = "outer attributes: ";
      if (outer_attrs.empty()) {
*************** NamedFunctionParam::as_string () const
*** 3424,3430 ****
      } else {
  	// note that this does not print them with "outer attribute" syntax -
  just the body for (const auto& attr : outer_attrs) { str += "\n  " +
! attr.as_string();
  	}
      }
  
--- 3467,3473 ----
      } else {
  	// note that this does not print them with "outer attribute" syntax -
  just the body for (const auto& attr : outer_attrs) { str += "\n  " +
! attr.to_string();
  	}
      }
  
*************** attr.as_string();
*** 3432,3438 ****
  }*/
  
  std::string
! TraitItemFunc::as_string () const
  {
    std::string str = "outer attributes: ";
    if (outer_attrs.empty ())
--- 3475,3481 ----
  }*/
  
  std::string
! TraitItemFunc::to_string () const
  {
    std::string str = "outer attributes: ";
    if (outer_attrs.empty ())
*************** TraitItemFunc::as_string () const
*** 3449,3460 ****
  	}
      }
  
!   str += "\n" + decl.as_string ();
  
    str += "\n Definition (block expr): ";
    if (has_definition ())
      {
!       str += block_expr->as_string ();
      }
    else
      {
--- 3492,3503 ----
  	}
      }
  
!   str += "\n" + decl.to_string ();
  
    str += "\n Definition (block expr): ";
    if (has_definition ())
      {
!       str += block_expr->to_string ();
      }
    else
      {
*************** TraitItemFunc::as_string () const
*** 3465,3474 ****
  }
  
  std::string
! TraitFunctionDecl::as_string () const
  {
    std::string str
!     = qualifiers.as_string () + "fn " + function_name.as_string ();
  
    // generic params
    str += "\n Generic params: ";
--- 3508,3517 ----
  }
  
  std::string
! TraitFunctionDecl::to_string () const
  {
    std::string str
!     = qualifiers.to_string () + "fn " + function_name.as_string ();
  
    // generic params
    str += "\n Generic params: ";
*************** TraitFunctionDecl::as_string () const
*** 3489,3509 ****
  	      return "nullptr_POINTER_MARK";
  	    }
  
! 	  str += "\n  " + param->as_string ();
  	}
      }
  
    str += "\n Function params: ";
    if (is_method ())
      {
!       str += get_self_unchecked ().as_string () + (has_params () ? ", " : "");
      }
  
    if (has_params ())
      {
        for (const auto &param : function_params)
  	{
! 	  str += "\n  " + param.as_string ();
  	}
      }
    else if (!is_method ())
--- 3532,3552 ----
  	      return "nullptr_POINTER_MARK";
  	    }
  
! 	  str += "\n  " + param->to_string ();
  	}
      }
  
    str += "\n Function params: ";
    if (is_method ())
      {
!       str += get_self_unchecked ().to_string () + (has_params () ? ", " : "");
      }
  
    if (has_params ())
      {
        for (const auto &param : function_params)
  	{
! 	  str += "\n  " + param.to_string ();
  	}
      }
    else if (!is_method ())
*************** TraitFunctionDecl::as_string () const
*** 3514,3520 ****
    str += "\n Return type: ";
    if (has_return_type ())
      {
!       str += return_type->as_string ();
      }
    else
      {
--- 3557,3563 ----
    str += "\n Return type: ";
    if (has_return_type ())
      {
!       str += return_type->to_string ();
      }
    else
      {
*************** TraitFunctionDecl::as_string () const
*** 3524,3530 ****
    str += "\n Where clause: ";
    if (has_where_clause ())
      {
!       str += where_clause.as_string ();
      }
    else
      {
--- 3567,3573 ----
    str += "\n Where clause: ";
    if (has_where_clause ())
      {
!       str += where_clause.to_string ();
      }
    else
      {
*************** TraitFunctionDecl::as_string () const
*** 3535,3541 ****
  }
  
  std::string
! TraitItemConst::as_string () const
  {
    std::string str = "outer attributes: ";
    if (outer_attrs.empty ())
--- 3578,3584 ----
  }
  
  std::string
! TraitItemConst::to_string () const
  {
    std::string str = "outer attributes: ";
    if (outer_attrs.empty ())
*************** TraitItemConst::as_string () const
*** 3552,3569 ****
  	}
      }
  
!   str += "\nconst " + name.as_string () + " : " + type->as_string ();
  
    if (has_expression ())
      {
!       str += " = " + expr->as_string ();
      }
  
    return str;
  }
  
  std::string
! TraitItemType::as_string () const
  {
    std::string str = "outer attributes: ";
    if (outer_attrs.empty ())
--- 3595,3612 ----
  	}
      }
  
!   str += "\nconst " + name.as_string () + " : " + type->to_string ();
  
    if (has_expression ())
      {
!       str += " = " + expr->to_string ();
      }
  
    return str;
  }
  
  std::string
! TraitItemType::to_string () const
  {
    std::string str = "outer attributes: ";
    if (outer_attrs.empty ())
*************** TraitItemType::as_string () const
*** 3589,3595 ****
  	{
  	  if (i > 0)
  	    str += ", ";
! 	  str += generic_params[i]->as_string ();
  	}
        str += ">";
      }
--- 3632,3638 ----
  	{
  	  if (i > 0)
  	    str += ", ";
! 	  str += generic_params[i]->to_string ();
  	}
        str += ">";
      }
*************** TraitItemType::as_string () const
*** 3612,3618 ****
  	      return "nullptr_POINTER_MARK";
  	    }
  
! 	  str += "\n  " + bound->as_string ();
  	}
      }
  
--- 3655,3661 ----
  	      return "nullptr_POINTER_MARK";
  	    }
  
! 	  str += "\n  " + bound->to_string ();
  	}
      }
  
*************** TraitItemType::as_string () const
*** 3620,3626 ****
  }
  
  std::string
! SelfParam::as_string () const
  {
    if (has_type ())
      {
--- 3663,3669 ----
  }
  
  std::string
! SelfParam::to_string () const
  {
    if (has_type ())
      {
*************** SelfParam::as_string () const
*** 3634,3647 ****
  
        str += "self : ";
  
!       str += type->as_string ();
  
        return str;
      }
    else if (has_lifetime ())
      {
        // ref and lifetime
!       std::string str = "&" + get_lifetime ().as_string () + " ";
  
        if (is_mut ())
  	{
--- 3677,3690 ----
  
        str += "self : ";
  
!       str += type->to_string ();
  
        return str;
      }
    else if (has_lifetime ())
      {
        // ref and lifetime
!       std::string str = "&" + get_lifetime ().to_string () + " ";
  
        if (is_mut ())
  	{
*************** SelfParam::as_string () const
*** 3683,3712 ****
  }
  
  std::string
! ArrayElemsCopied::as_string () const
  {
!   return elem_to_copy->as_string () + "; " + num_copies->as_string ();
  }
  
  std::string
! LifetimeWhereClauseItem::as_string () const
  {
    std::string str ("Lifetime: ");
  
!   str += lifetime.as_string ();
  
    str += "\nLifetime bounds: ";
  
    for (const auto &bound : lifetime_bounds)
      {
!       str += "\n " + bound.as_string ();
      }
  
    return str;
  }
  
  std::string
! TypeBoundWhereClauseItem::as_string () const
  {
    std::string str ("For lifetimes: ");
  
--- 3726,3755 ----
  }
  
  std::string
! ArrayElemsCopied::to_string () const
  {
!   return elem_to_copy->to_string () + "; " + num_copies->to_string ();
  }
  
  std::string
! LifetimeWhereClauseItem::to_string () const
  {
    std::string str ("Lifetime: ");
  
!   str += lifetime.to_string ();
  
    str += "\nLifetime bounds: ";
  
    for (const auto &bound : lifetime_bounds)
      {
!       str += "\n " + bound.to_string ();
      }
  
    return str;
  }
  
  std::string
! TypeBoundWhereClauseItem::to_string () const
  {
    std::string str ("For lifetimes: ");
  
*************** TypeBoundWhereClauseItem::as_string () c
*** 3718,3728 ****
      {
        for (const auto &for_lifetime : for_lifetimes)
  	{
! 	  str += "\n " + for_lifetime.as_string ();
  	}
      }
  
!   str += "\nType: " + bound_type->as_string ();
  
    str += "\nType param bounds bounds: ";
  
--- 3761,3771 ----
      {
        for (const auto &for_lifetime : for_lifetimes)
  	{
! 	  str += "\n " + for_lifetime.to_string ();
  	}
      }
  
!   str += "\nType: " + bound_type->to_string ();
  
    str += "\nType param bounds bounds: ";
  
*************** TypeBoundWhereClauseItem::as_string () c
*** 3734,3747 ****
  	  return "nullptr_POINTER_MARK - type param bounds";
  	}
  
!       str += "\n " + bound->as_string ();
      }
  
    return str;
  }
  
  std::string
! ArrayElemsValues::as_string () const
  {
    std::string str;
  
--- 3777,3790 ----
  	  return "nullptr_POINTER_MARK - type param bounds";
  	}
  
!       str += "\n " + bound->to_string ();
      }
  
    return str;
  }
  
  std::string
! ArrayElemsValues::to_string () const
  {
    std::string str;
  
*************** ArrayElemsValues::as_string () const
*** 3755,3768 ****
  	  return "nullptr_POINTER_MARK";
  	}
  
!       str += "\n  " + expr->as_string ();
      }
  
    return str;
  }
  
  std::string
! MaybeNamedParam::as_string () const
  {
    std::string str;
  
--- 3798,3811 ----
  	  return "nullptr_POINTER_MARK";
  	}
  
!       str += "\n  " + expr->to_string ();
      }
  
    return str;
  }
  
  std::string
! MaybeNamedParam::to_string () const
  {
    std::string str;
  
*************** MaybeNamedParam::as_string () const
*** 3780,3786 ****
        return "ERROR_MARK_STRING - maybe named param unrecognised param kind";
      }
  
!   str += param_type->as_string ();
  
    return str;
  }
--- 3823,3829 ----
        return "ERROR_MARK_STRING - maybe named param unrecognised param kind";
      }
  
!   str += param_type->to_string ();
  
    return str;
  }
diff -Nrcpad gcc-16-20251221/gcc/rust/hir/tree/rust-hir.h gcc-16-20251228/gcc/rust/hir/tree/rust-hir.h
*** gcc-16-20251221/gcc/rust/hir/tree/rust-hir.h	Sun Dec 21 22:32:07 2025
--- gcc-16-20251228/gcc/rust/hir/tree/rust-hir.h	Sun Dec 28 22:32:07 2025
*************** public:
*** 69,75 ****
      return std::unique_ptr<TraitItem> (clone_trait_item_impl ());
    }
  
!   virtual std::string as_string () const = 0;
  
    virtual void accept_vis (HIRTraitItemVisitor &vis) = 0;
  
--- 69,80 ----
      return std::unique_ptr<TraitItem> (clone_trait_item_impl ());
    }
  
!   virtual std::string to_string () const = 0;
! 
!   std::string to_debug_string () const
!   {
!     return to_string () + mappings.as_string ();
!   }
  
    virtual void accept_vis (HIRTraitItemVisitor &vis) = 0;
  
*************** public:
*** 106,112 ****
      return std::unique_ptr<ImplItem> (clone_inherent_impl_item_impl ());
    }
  
!   virtual std::string as_string () const = 0;
  
    virtual void accept_vis (HIRImplVisitor &vis) = 0;
    virtual void accept_vis (HIRStmtVisitor &vis) = 0;
--- 111,122 ----
      return std::unique_ptr<ImplItem> (clone_inherent_impl_item_impl ());
    }
  
!   virtual std::string to_string () const = 0;
! 
!   std::string to_debug_string () const
!   {
!     return to_string () + get_impl_mappings ().as_string ();
!   }
  
    virtual void accept_vis (HIRImplVisitor &vis) = 0;
    virtual void accept_vis (HIRStmtVisitor &vis) = 0;
*************** public:
*** 152,158 ****
    Crate &operator= (Crate &&other) = default;
  
    // Get crate representation as string (e.g. for debugging).
!   std::string as_string () const;
  
    const Analysis::NodeMapping &get_mappings () const { return mappings; }
    std::vector<std::unique_ptr<Item>> &get_items () { return items; }
--- 162,170 ----
    Crate &operator= (Crate &&other) = default;
  
    // Get crate representation as string (e.g. for debugging).
!   std::string to_string () const;
! 
!   std::string to_debug_string () const;
  
    const Analysis::NodeMapping &get_mappings () const { return mappings; }
    std::vector<std::unique_ptr<Item>> &get_items () { return items; }
diff -Nrcpad gcc-16-20251221/gcc/rust/lang.opt gcc-16-20251228/gcc/rust/lang.opt
*** gcc-16-20251221/gcc/rust/lang.opt	Sun Dec 21 22:32:07 2025
--- gcc-16-20251228/gcc/rust/lang.opt	Sun Dec 28 22:32:07 2025
*************** frust-assume-builtin-offset-of
*** 233,236 ****
--- 233,240 ----
  Rust Var(flag_assume_builtin_offset_of)
  Define a built-in offset_of macro in the compiler and assume it is present
  
+ frust-unused-check-2.0
+ Rust Var(flag_unused_check_2_0)
+ Use the new unused variable check implementation.
+ 
  ; This comment is to ensure we retain the blank line above.
diff -Nrcpad gcc-16-20251221/gcc/rust/resolve/rust-name-resolver.cc gcc-16-20251228/gcc/rust/resolve/rust-name-resolver.cc
*** gcc-16-20251221/gcc/rust/resolve/rust-name-resolver.cc	Sun Dec 21 22:32:07 2025
--- gcc-16-20251228/gcc/rust/resolve/rust-name-resolver.cc	Sun Dec 28 22:32:07 2025
*************** Resolver::Resolver ()
*** 282,290 ****
      label_scope (Scope (mappings.get_current_crate ())),
      macro_scope (Scope (mappings.get_current_crate ())),
      global_type_node_id (UNKNOWN_NODEID), unit_ty_node_id (UNKNOWN_NODEID)
! {
!   generate_builtins ();
! }
  
  Resolver *
  Resolver::get ()
--- 282,288 ----
      label_scope (Scope (mappings.get_current_crate ())),
      macro_scope (Scope (mappings.get_current_crate ())),
      global_type_node_id (UNKNOWN_NODEID), unit_ty_node_id (UNKNOWN_NODEID)
! {}
  
  Resolver *
  Resolver::get ()
diff -Nrcpad gcc-16-20251221/gcc/rust/rust-session-manager.cc gcc-16-20251228/gcc/rust/rust-session-manager.cc
*** gcc-16-20251221/gcc/rust/rust-session-manager.cc	Sun Dec 21 22:32:07 2025
--- gcc-16-20251228/gcc/rust/rust-session-manager.cc	Sun Dec 28 22:32:07 2025
***************
*** 39,44 ****
--- 39,45 ----
  #include "rust-cfg-parser.h"
  #include "rust-lint-scan-deadcode.h"
  #include "rust-lint-unused-var.h"
+ #include "rust-unused-checker.h"
  #include "rust-readonly-check.h"
  #include "rust-hir-dump.h"
  #include "rust-ast-dump.h"
*************** Session::compile_crate (const char *file
*** 781,787 ****
      {
        // lints
        Analysis::ScanDeadcode::Scan (hir);
!       Analysis::UnusedVariables::Lint (*ctx);
        HIR::ReadonlyChecker ().go (hir);
  
        // metadata
--- 782,793 ----
      {
        // lints
        Analysis::ScanDeadcode::Scan (hir);
! 
!       if (flag_unused_check_2_0)
! 	Analysis::UnusedChecker ().go (hir);
!       else
! 	Analysis::UnusedVariables::Lint (*ctx);
! 
        HIR::ReadonlyChecker ().go (hir);
  
        // metadata
*************** Session::dump_hir (HIR::Crate &crate) co
*** 1130,1136 ****
        return;
      }
  
!   out << crate.as_string ();
    out.close ();
  }
  
--- 1136,1142 ----
        return;
      }
  
!   out << crate.to_string ();
    out.close ();
  }
  
diff -Nrcpad gcc-16-20251221/gcc/rust/typecheck/rust-hir-dot-operator.cc gcc-16-20251228/gcc/rust/typecheck/rust-hir-dot-operator.cc
*** gcc-16-20251221/gcc/rust/typecheck/rust-hir-dot-operator.cc	Sun Dec 21 22:32:07 2025
--- gcc-16-20251228/gcc/rust/typecheck/rust-hir-dot-operator.cc	Sun Dec 28 22:32:07 2025
*************** MethodResolver::assemble_inherent_impl_c
*** 131,137 ****
  	return true;
  
        bool name_matches = func->get_function_name ().as_string ().compare (
! 			    segment_name.as_string ())
  			  == 0;
        if (!name_matches)
  	return true;
--- 131,137 ----
  	return true;
  
        bool name_matches = func->get_function_name ().as_string ().compare (
! 			    segment_name.to_string ())
  			  == 0;
        if (!name_matches)
  	return true;
*************** MethodResolver::assemble_trait_impl_cand
*** 215,221 ****
  	  continue;
  
  	bool name_matches = func->get_function_name ().as_string ().compare (
! 			      segment_name.as_string ())
  			    == 0;
  	if (!name_matches)
  	  continue;
--- 215,221 ----
  	  continue;
  
  	bool name_matches = func->get_function_name ().as_string ().compare (
! 			      segment_name.to_string ())
  			    == 0;
  	if (!name_matches)
  	  continue;
*************** MethodResolver::assemble_trait_impl_cand
*** 271,277 ****
      rust_assert (!trait_ref->is_error ());
  
      auto item_ref
!       = trait_ref->lookup_trait_item (segment_name.as_string (),
  				      TraitItemReference::TraitItemType::FN);
      if (item_ref->is_error ())
        return true;
--- 271,277 ----
      rust_assert (!trait_ref->is_error ());
  
      auto item_ref
!       = trait_ref->lookup_trait_item (segment_name.to_string (),
  				      TraitItemReference::TraitItemType::FN);
      if (item_ref->is_error ())
        return true;
*************** MethodResolver::select (TyTy::BaseType &
*** 424,430 ****
  {
    rust_debug ("MethodResolver::select reciever=[%s] path=[%s]",
  	      receiver.debug_str ().c_str (),
! 	      segment_name.as_string ().c_str ());
  
    // Assemble candidates
    std::vector<impl_item_candidate> inherent_impl_fns
--- 424,430 ----
  {
    rust_debug ("MethodResolver::select reciever=[%s] path=[%s]",
  	      receiver.debug_str ().c_str (),
! 	      segment_name.to_string ().c_str ());
  
    // Assemble candidates
    std::vector<impl_item_candidate> inherent_impl_fns
*************** MethodResolver::get_predicate_items (
*** 472,478 ****
    for (auto &bound : specified_bounds)
      {
        tl::optional<TyTy::TypeBoundPredicateItem> lookup
! 	= bound.lookup_associated_item (segment_name.as_string ());
        if (!lookup.has_value ())
  	continue;
  
--- 472,478 ----
    for (auto &bound : specified_bounds)
      {
        tl::optional<TyTy::TypeBoundPredicateItem> lookup
! 	= bound.lookup_associated_item (segment_name.to_string ());
        if (!lookup.has_value ())
  	continue;
  
diff -Nrcpad gcc-16-20251221/gcc/rust/typecheck/rust-hir-path-probe.cc gcc-16-20251228/gcc/rust/typecheck/rust-hir-path-probe.cc
*** gcc-16-20251221/gcc/rust/typecheck/rust-hir-path-probe.cc	Sun Dec 21 22:32:07 2025
--- gcc-16-20251228/gcc/rust/typecheck/rust-hir-path-probe.cc	Sun Dec 28 22:32:07 2025
*************** void
*** 208,214 ****
  PathProbeType::visit (HIR::TypeAlias &alias)
  {
    Identifier name = alias.get_new_type_name ();
!   if (search.as_string ().compare (name.as_string ()) == 0)
      {
        HirId tyid = alias.get_mappings ().get_hirid ();
        TyTy::BaseType *ty = nullptr;
--- 208,214 ----
  PathProbeType::visit (HIR::TypeAlias &alias)
  {
    Identifier name = alias.get_new_type_name ();
!   if (search.to_string ().compare (name.as_string ()) == 0)
      {
        HirId tyid = alias.get_mappings ().get_hirid ();
        TyTy::BaseType *ty = nullptr;
*************** void
*** 228,234 ****
  PathProbeType::visit (HIR::ConstantItem &constant)
  {
    Identifier name = constant.get_identifier ();
!   if (search.as_string ().compare (name.as_string ()) == 0)
      {
        HirId tyid = constant.get_mappings ().get_hirid ();
        TyTy::BaseType *ty = nullptr;
--- 228,234 ----
  PathProbeType::visit (HIR::ConstantItem &constant)
  {
    Identifier name = constant.get_identifier ();
!   if (search.to_string ().compare (name.as_string ()) == 0)
      {
        HirId tyid = constant.get_mappings ().get_hirid ();
        TyTy::BaseType *ty = nullptr;
*************** void
*** 248,254 ****
  PathProbeType::visit (HIR::Function &function)
  {
    Identifier name = function.get_function_name ();
!   if (search.as_string ().compare (name.as_string ()) == 0)
      {
        HirId tyid = function.get_mappings ().get_hirid ();
        TyTy::BaseType *ty = nullptr;
--- 248,254 ----
  PathProbeType::visit (HIR::Function &function)
  {
    Identifier name = function.get_function_name ();
!   if (search.to_string ().compare (name.as_string ()) == 0)
      {
        HirId tyid = function.get_mappings ().get_hirid ();
        TyTy::BaseType *ty = nullptr;
*************** PathProbeType::process_enum_item_for_can
*** 271,277 ****
      return;
  
    TyTy::VariantDef *v;
!   if (!adt->lookup_variant (search.as_string (), &v))
      return;
  
    PathProbeCandidate::EnumItemCandidate enum_item_candidate{adt, v};
--- 271,277 ----
      return;
  
    TyTy::VariantDef *v;
!   if (!adt->lookup_variant (search.to_string (), &v))
      return;
  
    PathProbeCandidate::EnumItemCandidate enum_item_candidate{adt, v};
*************** PathProbeType::process_associated_trait_
*** 317,323 ****
    bool ignore_mandatory_trait_items)
  {
    const TraitItemReference *trait_item_ref = nullptr;
!   if (!trait_ref->lookup_trait_item (search.as_string (), &trait_item_ref))
      return;
  
    bool trait_item_needs_implementation = !trait_item_ref->is_optional ();
--- 317,323 ----
    bool ignore_mandatory_trait_items)
  {
    const TraitItemReference *trait_item_ref = nullptr;
!   if (!trait_ref->lookup_trait_item (search.to_string (), &trait_item_ref))
      return;
  
    bool trait_item_needs_implementation = !trait_item_ref->is_optional ();
*************** PathProbeType::process_predicate_for_can
*** 367,373 ****
    const TraitReference *trait_ref = predicate.get ();
  
    tl::optional<TyTy::TypeBoundPredicateItem> item
!     = predicate.lookup_associated_item (search.as_string ());
    if (!item.has_value ())
      return;
  
--- 367,373 ----
    const TraitReference *trait_ref = predicate.get ();
  
    tl::optional<TyTy::TypeBoundPredicateItem> item
!     = predicate.lookup_associated_item (search.to_string ());
    if (!item.has_value ())
      return;
  
diff -Nrcpad gcc-16-20251221/gcc/rust/typecheck/rust-hir-path-probe.h gcc-16-20251228/gcc/rust/typecheck/rust-hir-path-probe.h
*** gcc-16-20251221/gcc/rust/typecheck/rust-hir-path-probe.h	Sun Dec 21 22:32:07 2025
--- gcc-16-20251228/gcc/rust/typecheck/rust-hir-path-probe.h	Sun Dec 28 22:32:07 2025
*************** public:
*** 164,175 ****
      for (auto &c : candidates)
        r.add_range (c.locus);
  
!     std::string rich_msg = "multiple " + query.as_string () + " found";
      r.add_fixit_replace (rich_msg.c_str ());
  
      rust_error_at (r, ErrorCode::E0034,
  		   "multiple applicable items in scope for: %qs",
! 		   query.as_string ().c_str ());
    }
  };
  
--- 164,175 ----
      for (auto &c : candidates)
        r.add_range (c.locus);
  
!     std::string rich_msg = "multiple " + query.to_string () + " found";
      r.add_fixit_replace (rich_msg.c_str ());
  
      rust_error_at (r, ErrorCode::E0034,
  		   "multiple applicable items in scope for: %qs",
! 		   query.to_string ().c_str ());
    }
  };
  
diff -Nrcpad gcc-16-20251221/gcc/rust/typecheck/rust-hir-type-check-expr.cc gcc-16-20251228/gcc/rust/typecheck/rust-hir-type-check-expr.cc
*** gcc-16-20251221/gcc/rust/typecheck/rust-hir-type-check-expr.cc	Sun Dec 21 22:32:07 2025
--- gcc-16-20251228/gcc/rust/typecheck/rust-hir-type-check-expr.cc	Sun Dec 28 22:32:07 2025
*************** emit_ambiguous_resolution_error (HIR::Me
*** 1293,1299 ****
  {
    rich_location r (line_table, expr.get_method_name ().get_locus ());
    std::string rich_msg = "multiple "
! 			 + expr.get_method_name ().get_segment ().as_string ()
  			 + " found";
  
    // We have to filter out default candidates
--- 1293,1299 ----
  {
    rich_location r (line_table, expr.get_method_name ().get_locus ());
    std::string rich_msg = "multiple "
! 			 + expr.get_method_name ().get_segment ().to_string ()
  			 + " found";
  
    // We have to filter out default candidates
*************** emit_ambiguous_resolution_error (HIR::Me
*** 1304,1310 ****
    r.add_fixit_replace (rich_msg.c_str ());
  
    rust_error_at (r, ErrorCode::E0592, "duplicate definitions with name %qs",
! 		 expr.get_method_name ().get_segment ().as_string ().c_str ());
  }
  
  // We are allowed to have multiple candidates if they are all specializable
--- 1304,1310 ----
    r.add_fixit_replace (rich_msg.c_str ());
  
    rust_error_at (r, ErrorCode::E0592, "duplicate definitions with name %qs",
! 		 expr.get_method_name ().get_segment ().to_string ().c_str ());
  }
  
  // We are allowed to have multiple candidates if they are all specializable
*************** TypeCheckExpr::visit (HIR::MethodCallExp
*** 1380,1386 ****
        rust_error_at (
  	richloc, ErrorCode::E0599,
  	"no method named %qs found in the current scope",
! 	expr.get_method_name ().get_segment ().as_string ().c_str ());
        return;
      }
  
--- 1380,1386 ----
        rust_error_at (
  	richloc, ErrorCode::E0599,
  	"no method named %qs found in the current scope",
! 	expr.get_method_name ().get_segment ().to_string ().c_str ());
        return;
      }
  
*************** void
*** 1550,1567 ****
  TypeCheckExpr::visit (HIR::WhileLoopExpr &expr)
  {
    context->push_new_while_loop_context (expr.get_mappings ().get_hirid ());
! 
!   TypeCheckExpr::Resolve (expr.get_predicate_expr ());
    TyTy::BaseType *block_expr = TypeCheckExpr::Resolve (expr.get_loop_block ());
- 
    if (!block_expr->is_unit ())
      {
        rust_error_at (expr.get_loop_block ().get_locus (),
  		     "expected %<()%> got %s",
  		     block_expr->as_string ().c_str ());
        return;
      }
- 
    context->pop_loop_context ();
    infered = TyTy::TupleType::get_unit_type ();
  }
--- 1550,1574 ----
  TypeCheckExpr::visit (HIR::WhileLoopExpr &expr)
  {
    context->push_new_while_loop_context (expr.get_mappings ().get_hirid ());
!   TyTy::BaseType *predicate_type
!     = TypeCheckExpr::Resolve (expr.get_predicate_expr ());
!   if (predicate_type->get_kind () != TyTy::TypeKind::BOOL
!       && predicate_type->get_kind () != TyTy::TypeKind::NEVER)
!     {
!       rust_error_at (expr.get_predicate_expr ().get_locus (),
! 		     "expected boolean expression in %<while%> condition");
!       context->pop_loop_context ();
!       return;
!     }
    TyTy::BaseType *block_expr = TypeCheckExpr::Resolve (expr.get_loop_block ());
    if (!block_expr->is_unit ())
      {
        rust_error_at (expr.get_loop_block ().get_locus (),
  		     "expected %<()%> got %s",
  		     block_expr->as_string ().c_str ());
+       context->pop_loop_context ();
        return;
      }
    context->pop_loop_context ();
    infered = TyTy::TupleType::get_unit_type ();
  }
*************** TypeCheckExpr::visit (HIR::ContinueExpr
*** 1611,1617 ****
  		     "%<continue%> outside of a loop");
        return;
      }
- 
    infered = new TyTy::NeverType (expr.get_mappings ().get_hirid ());
  }
  
--- 1618,1623 ----
*************** TypeCheckExpr::resolve_fn_trait_call (HI
*** 2253,2259 ****
  
        rust_error_at (
  	r, "multiple candidates found for function trait method call %qs",
! 	method_name.as_string ().c_str ());
        return false;
      }
  
--- 2259,2265 ----
  
        rust_error_at (
  	r, "multiple candidates found for function trait method call %qs",
! 	method_name.to_string ().c_str ());
        return false;
      }
  
diff -Nrcpad gcc-16-20251221/gcc/rust/typecheck/rust-hir-type-check-path.cc gcc-16-20251228/gcc/rust/typecheck/rust-hir-type-check-path.cc
*** gcc-16-20251221/gcc/rust/typecheck/rust-hir-type-check-path.cc	Sun Dec 21 22:32:07 2025
--- gcc-16-20251228/gcc/rust/typecheck/rust-hir-type-check-path.cc	Sun Dec 28 22:32:07 2025
*************** TypeCheckExpr::visit (HIR::QualifiedPath
*** 78,84 ****
    HIR::PathExprSegment &item_seg = expr.get_segments ().at (0);
    HIR::PathIdentSegment item_seg_identifier = item_seg.get_segment ();
    tl::optional<TyTy::TypeBoundPredicateItem> item
!     = specified_bound.lookup_associated_item (item_seg_identifier.as_string ());
    if (!item.has_value ())
      {
        rust_error_at (item_seg.get_locus (), "unknown associated item");
--- 78,84 ----
    HIR::PathExprSegment &item_seg = expr.get_segments ().at (0);
    HIR::PathIdentSegment item_seg_identifier = item_seg.get_segment ();
    tl::optional<TyTy::TypeBoundPredicateItem> item
!     = specified_bound.lookup_associated_item (item_seg_identifier.to_string ());
    if (!item.has_value ())
      {
        rust_error_at (item_seg.get_locus (), "unknown associated item");
*************** TypeCheckExpr::visit (HIR::QualifiedPath
*** 99,105 ****
  	   associated_impl_trait->get_impl_block ()->get_impl_items ())
  	{
  	  bool found = i->get_impl_item_name ().compare (
! 			 item_seg_identifier.as_string ())
  		       == 0;
  	  if (found)
  	    {
--- 99,105 ----
  	   associated_impl_trait->get_impl_block ()->get_impl_items ())
  	{
  	  bool found = i->get_impl_item_name ().compare (
! 			 item_seg_identifier.to_string ())
  		       == 0;
  	  if (found)
  	    {
*************** TypeCheckExpr::resolve_root_path (HIR::P
*** 284,290 ****
  	  rust_error_at (seg.get_locus (), "456 reverse lookup failure");
  	  rust_debug_loc (seg.get_locus (),
  			  "failure with [%s] mappings [%s] ref_node_id [%u]",
! 			  seg.as_string ().c_str (),
  			  seg.get_mappings ().as_string ().c_str (),
  			  ref_node_id);
  
--- 284,290 ----
  	  rust_error_at (seg.get_locus (), "456 reverse lookup failure");
  	  rust_debug_loc (seg.get_locus (),
  			  "failure with [%s] mappings [%s] ref_node_id [%u]",
! 			  seg.to_string ().c_str (),
  			  seg.get_mappings ().as_string ().c_str (),
  			  ref_node_id);
  
*************** TypeCheckExpr::resolve_root_path (HIR::P
*** 296,302 ****
        auto seg_is_crate = mappings.is_local_hirid_crate (ref);
        auto seg_is_pattern = mappings.lookup_hir_pattern (ref).has_value ();
        auto seg_is_self = is_root && !have_more_segments
! 			 && seg.get_segment ().as_string () == "self";
        if (seg_is_module || seg_is_crate)
  	{
  	  // A::B::C::this_is_a_module::D::E::F
--- 296,302 ----
        auto seg_is_crate = mappings.is_local_hirid_crate (ref);
        auto seg_is_pattern = mappings.lookup_hir_pattern (ref).has_value ();
        auto seg_is_self = is_root && !have_more_segments
! 			 && seg.get_segment ().to_string () == "self";
        if (seg_is_module || seg_is_crate)
  	{
  	  // A::B::C::this_is_a_module::D::E::F
diff -Nrcpad gcc-16-20251221/gcc/rust/typecheck/rust-hir-type-check-pattern.cc gcc-16-20251228/gcc/rust/typecheck/rust-hir-type-check-pattern.cc
*** gcc-16-20251221/gcc/rust/typecheck/rust-hir-type-check-pattern.cc	Sun Dec 21 22:32:07 2025
--- gcc-16-20251228/gcc/rust/typecheck/rust-hir-type-check-pattern.cc	Sun Dec 28 22:32:07 2025
***************
*** 19,24 ****
--- 19,25 ----
  #include "rust-hir-type-check-pattern.h"
  #include "rust-hir-pattern.h"
  #include "rust-hir-type-check-expr.h"
+ #include "rust-token.h"
  #include "rust-type-util.h"
  #include "rust-immutable-name-resolution-context.h"
  #include "rust-tyty.h"
*************** TypeCheckPattern::visit (HIR::PathInExpr
*** 90,96 ****
  	      for (size_t i = 0; i < pattern.get_segments ().size (); i++)
  		{
  		  HIR::PathExprSegment &seg = pattern.get_segments ().at (i);
! 		  path_buf += seg.as_string ();
  		  if (i != pattern.get_segments ().size () - 1)
  		    path_buf += "::";
  		}
--- 91,97 ----
  	      for (size_t i = 0; i < pattern.get_segments ().size (); i++)
  		{
  		  HIR::PathExprSegment &seg = pattern.get_segments ().at (i);
! 		  path_buf += seg.to_string ();
  		  if (i != pattern.get_segments ().size () - 1)
  		    path_buf += "::";
  		}
*************** TypeCheckPattern::visit (HIR::StructPatt
*** 543,549 ****
  		auto first_elem
  		  = struct_pattern_elems.get_struct_pattern_fields ()
  		      .at (0)
! 		      ->as_string ();
  		rust_error_at (pattern.get_locus (),
  			       "%qs cannot be used in union patterns",
  			       first_elem.c_str ());
--- 544,550 ----
  		auto first_elem
  		  = struct_pattern_elems.get_struct_pattern_fields ()
  		      .at (0)
! 		      ->to_string ();
  		rust_error_at (pattern.get_locus (),
  			       "%qs cannot be used in union patterns",
  			       first_elem.c_str ());
diff -Nrcpad gcc-16-20251221/gcc/rust/typecheck/rust-hir-type-check-type.cc gcc-16-20251228/gcc/rust/typecheck/rust-hir-type-check-type.cc
*** gcc-16-20251221/gcc/rust/typecheck/rust-hir-type-check-type.cc	Sun Dec 21 22:32:07 2025
--- gcc-16-20251228/gcc/rust/typecheck/rust-hir-type-check-type.cc	Sun Dec 28 22:32:07 2025
*************** TypeCheckType::visit (HIR::TupleType &tu
*** 138,144 ****
  void
  TypeCheckType::visit (HIR::TypePath &path)
  {
!   rust_debug ("{ARTHUR}: Path visited: %s", path.as_string ().c_str ());
  
    // this can happen so we need to look up the root then resolve the
    // remaining segments if possible
--- 138,144 ----
  void
  TypeCheckType::visit (HIR::TypePath &path)
  {
!   rust_debug ("{ARTHUR}: Path visited: %s", path.to_string ().c_str ());
  
    // this can happen so we need to look up the root then resolve the
    // remaining segments if possible
*************** TypeCheckType::visit (HIR::QualifiedPath
*** 215,225 ****
    HIR::TypePathSegment &item_seg = path.get_associated_segment ();
    HIR::PathIdentSegment item_seg_identifier = item_seg.get_ident_segment ();
    tl::optional<TyTy::TypeBoundPredicateItem> item
!     = specified_bound.lookup_associated_item (item_seg_identifier.as_string ());
    if (!item.has_value ())
      {
        std::string item_seg_ident_name, rich_msg;
!       item_seg_ident_name = qual_path_type.get_trait ().as_string ();
        rich_msg = "not found in `" + item_seg_ident_name + "`";
  
        rich_location richloc (line_table, item_seg.get_locus ());
--- 215,225 ----
    HIR::TypePathSegment &item_seg = path.get_associated_segment ();
    HIR::PathIdentSegment item_seg_identifier = item_seg.get_ident_segment ();
    tl::optional<TyTy::TypeBoundPredicateItem> item
!     = specified_bound.lookup_associated_item (item_seg_identifier.to_string ());
    if (!item.has_value ())
      {
        std::string item_seg_ident_name, rich_msg;
!       item_seg_ident_name = qual_path_type.get_trait ().to_string ();
        rich_msg = "not found in `" + item_seg_ident_name + "`";
  
        rich_location richloc (line_table, item_seg.get_locus ());
*************** TypeCheckType::visit (HIR::QualifiedPath
*** 227,233 ****
  
        rust_error_at (richloc, ErrorCode::E0576,
  		     "cannot find associated type %qs in trait %qs",
! 		     item_seg_identifier.as_string ().c_str (),
  		     item_seg_ident_name.c_str ());
        return;
      }
--- 227,233 ----
  
        rust_error_at (richloc, ErrorCode::E0576,
  		     "cannot find associated type %qs in trait %qs",
! 		     item_seg_identifier.to_string ().c_str (),
  		     item_seg_ident_name.c_str ());
        return;
      }
*************** TypeCheckType::visit (HIR::QualifiedPath
*** 251,257 ****
  	       associated_impl_trait->get_impl_block ()->get_impl_items ())
  	    {
  	      bool found = i->get_impl_item_name ().compare (
! 			     item_seg_identifier.as_string ())
  			   == 0;
  	      if (found)
  		{
--- 251,257 ----
  	       associated_impl_trait->get_impl_block ()->get_impl_items ())
  	    {
  	      bool found = i->get_impl_item_name ().compare (
! 			     item_seg_identifier.to_string ())
  			   == 0;
  	      if (found)
  		{
*************** TypeCheckType::resolve_root_path (HIR::T
*** 359,378 ****
  	    {
  	      rust_error_at (seg->get_locus (),
  			     "unknown reference for resolved name: %qs",
! 			     seg->as_string ().c_str ());
  	      return new TyTy::ErrorType (path.get_mappings ().get_hirid ());
  	    }
  	  else if (root_tyty == nullptr)
  	    {
  	      rust_error_at (seg->get_locus (),
  			     "unknown reference for resolved name: %qs",
! 			     seg->as_string ().c_str ());
  	      return new TyTy::ErrorType (path.get_mappings ().get_hirid ());
  	    }
  	  return root_tyty;
  	}
  
!       if (seg->is_ident_only () && seg->as_string () == "Self")
  	*wasBigSelf = true;
  
        // node back to HIR
--- 359,378 ----
  	    {
  	      rust_error_at (seg->get_locus (),
  			     "unknown reference for resolved name: %qs",
! 			     seg->to_string ().c_str ());
  	      return new TyTy::ErrorType (path.get_mappings ().get_hirid ());
  	    }
  	  else if (root_tyty == nullptr)
  	    {
  	      rust_error_at (seg->get_locus (),
  			     "unknown reference for resolved name: %qs",
! 			     seg->to_string ().c_str ());
  	      return new TyTy::ErrorType (path.get_mappings ().get_hirid ());
  	    }
  	  return root_tyty;
  	}
  
!       if (seg->is_ident_only () && seg->to_string () == "Self")
  	*wasBigSelf = true;
  
        // node back to HIR
*************** TypeCheckType::resolve_root_path (HIR::T
*** 385,391 ****
  	      rust_debug_loc (
  		seg->get_locus (),
  		"failure with [%s] mappings [%s] ref_node_id [%u]",
! 		seg->as_string ().c_str (),
  		seg->get_mappings ().as_string ().c_str (), ref_node_id);
  
  	      return new TyTy::ErrorType (path.get_mappings ().get_hirid ());
--- 385,391 ----
  	      rust_debug_loc (
  		seg->get_locus (),
  		"failure with [%s] mappings [%s] ref_node_id [%u]",
! 		seg->to_string ().c_str (),
  		seg->get_mappings ().as_string ().c_str (), ref_node_id);
  
  	      return new TyTy::ErrorType (path.get_mappings ().get_hirid ());
*************** TypeCheckType::resolve_root_path (HIR::T
*** 423,429 ****
  	    {
  	      rust_error_at (seg->get_locus (),
  			     "failed to resolve type path segment: %qs",
! 			     seg->as_string ().c_str ());
  	      return new TyTy::ErrorType (path.get_mappings ().get_hirid ());
  	    }
  
--- 423,429 ----
  	    {
  	      rust_error_at (seg->get_locus (),
  			     "failed to resolve type path segment: %qs",
! 			     seg->to_string ().c_str ());
  	      return new TyTy::ErrorType (path.get_mappings ().get_hirid ());
  	    }
  
*************** TypeCheckType::resolve_segments (
*** 556,562 ****
  	  TypeCheckBlockContextItem ctx = context->block_context ().peek ();
  	  TyTy::BaseType *lookup = nullptr;
  	  selfResolveOk
! 	    = resolve_associated_type (seg->as_string (), ctx, &lookup);
  	  if (selfResolveOk)
  	    {
  	      prev_segment = tyseg;
--- 556,562 ----
  	  TypeCheckBlockContextItem ctx = context->block_context ().peek ();
  	  TyTy::BaseType *lookup = nullptr;
  	  selfResolveOk
! 	    = resolve_associated_type (seg->to_string (), ctx, &lookup);
  	  if (selfResolveOk)
  	    {
  	      prev_segment = tyseg;
*************** ResolveWhereClauseItem::visit (HIR::Type
*** 1120,1126 ****
        // FIXME
        rust_error_at (UNDEF_LOCATION,
  		     "Failed to lookup type reference for node: %s",
! 		     binding_type_path.as_string ().c_str ());
        return;
      }
  
--- 1120,1126 ----
        // FIXME
        rust_error_at (UNDEF_LOCATION,
  		     "Failed to lookup type reference for node: %s",
! 		     binding_type_path.to_string ().c_str ());
        return;
      }
  
*************** ResolveWhereClauseItem::visit (HIR::Type
*** 1133,1139 ****
  	{
  	  rust_error_at (mappings.lookup_location (*hid),
  			 "Failed to resolve where-clause binding type: %s",
! 			 binding_type_path.as_string ().c_str ());
  	  return;
  	}
  
--- 1133,1139 ----
  	{
  	  rust_error_at (mappings.lookup_location (*hid),
  			 "Failed to resolve where-clause binding type: %s",
! 			 binding_type_path.to_string ().c_str ());
  	  return;
  	}
  
diff -Nrcpad gcc-16-20251221/gcc/rust/typecheck/rust-tyty-bounds.cc gcc-16-20251228/gcc/rust/typecheck/rust-tyty-bounds.cc
*** gcc-16-20251221/gcc/rust/typecheck/rust-tyty-bounds.cc	Sun Dec 21 22:32:07 2025
--- gcc-16-20251228/gcc/rust/typecheck/rust-tyty-bounds.cc	Sun Dec 28 22:32:07 2025
*************** TypeBoundPredicate::validate_type_implem
*** 883,896 ****
  	    = "required by this bound in: " + ptref.get_name ();
  	  std::string fixit2 = "the trait " + sptref.get_name ()
  			       + " is not implemented for "
! 			       + impl_type.as_string ();
  
  	  rich_location r (line_table, trait.get_locus ());
  	  r.add_fixit_insert_after (super.get_locus (), fixit1.c_str ());
  	  r.add_fixit_insert_after (trait.get_locus (), fixit2.c_str ());
  	  rust_error_at (r, ErrorCode::E0277,
  			 "the trait bound %<%s: %s%> is not satisfied",
! 			 impl_type.as_string ().c_str (),
  			 sptref.get_name ().c_str ());
  
  	  return false;
--- 883,896 ----
  	    = "required by this bound in: " + ptref.get_name ();
  	  std::string fixit2 = "the trait " + sptref.get_name ()
  			       + " is not implemented for "
! 			       + impl_type.to_string ();
  
  	  rich_location r (line_table, trait.get_locus ());
  	  r.add_fixit_insert_after (super.get_locus (), fixit1.c_str ());
  	  r.add_fixit_insert_after (trait.get_locus (), fixit2.c_str ());
  	  rust_error_at (r, ErrorCode::E0277,
  			 "the trait bound %<%s: %s%> is not satisfied",
! 			 impl_type.to_string ().c_str (),
  			 sptref.get_name ().c_str ());
  
  	  return false;
diff -Nrcpad gcc-16-20251221/gcc/rust/typecheck/rust-tyty.cc gcc-16-20251228/gcc/rust/typecheck/rust-tyty.cc
*** gcc-16-20251221/gcc/rust/typecheck/rust-tyty.cc	Sun Dec 21 22:32:07 2025
--- gcc-16-20251228/gcc/rust/typecheck/rust-tyty.cc	Sun Dec 28 22:32:08 2025
*************** VariantDef::as_string () const
*** 1653,1659 ****
  {
    if (type == VariantType::NUM)
      return identifier
! 	   + (has_discriminant () ? " = " + get_discriminant ().as_string ()
  				  : "");
  
    std::string buffer;
--- 1653,1659 ----
  {
    if (type == VariantType::NUM)
      return identifier
! 	   + (has_discriminant () ? " = " + get_discriminant ().to_string ()
  				  : "");
  
    std::string buffer;
*************** FnType::as_string () const
*** 2099,2105 ****
      {
        auto &pattern = param.get_pattern ();
        auto ty = param.get_type ();
!       params_str += pattern.as_string () + " " + ty->as_string ();
        params_str += ",";
      }
  
--- 2099,2105 ----
      {
        auto &pattern = param.get_pattern ();
        auto ty = param.get_type ();
!       params_str += pattern.to_string () + " " + ty->as_string ();
        params_str += ",";
      }
  
diff -Nrcpad gcc-16-20251221/gcc/rust/util/rust-attributes.cc gcc-16-20251228/gcc/rust/util/rust-attributes.cc
*** gcc-16-20251221/gcc/rust/util/rust-attributes.cc	Sun Dec 21 22:32:07 2025
--- gcc-16-20251228/gcc/rust/util/rust-attributes.cc	Sun Dec 28 22:32:08 2025
*************** check_doc_attribute (const AST::Attribut
*** 277,282 ****
--- 277,373 ----
      }
  }
  
+ static void
+ check_deprecated_attribute (const AST::Attribute &attribute)
+ {
+   const auto &input = attribute.get_attr_input ();
+ 
+   if (input.get_attr_input_type () != AST::AttrInput::META_ITEM)
+     return;
+ 
+   auto &meta = static_cast<const AST::AttrInputMetaItemContainer &> (input);
+ 
+   for (auto &current : meta.get_items ())
+     {
+       switch (current->get_kind ())
+ 	{
+ 	case AST::MetaItemInner::Kind::MetaItem:
+ 	  {
+ 	    auto *meta_item = static_cast<AST::MetaItem *> (current.get ());
+ 
+ 	    switch (meta_item->get_item_kind ())
+ 	      {
+ 	      case AST::MetaItem::ItemKind::NameValueStr:
+ 		{
+ 		  auto *nv = static_cast<AST::MetaNameValueStr *> (meta_item);
+ 
+ 		  const std::string key = nv->get_name ().as_string ();
+ 
+ 		  if (key != "since" && key != "note")
+ 		    {
+ 		      rust_error_at (nv->get_locus (), "unknown meta item %qs",
+ 				     key.c_str ());
+ 		      rust_inform (nv->get_locus (),
+ 				   "expected one of %<since%>, %<note%>");
+ 		    }
+ 		}
+ 		break;
+ 
+ 	      case AST::MetaItem::ItemKind::Path:
+ 		{
+ 		  // #[deprecated(a,a)]
+ 		  auto *p = static_cast<AST::MetaItemPath *> (meta_item);
+ 
+ 		  std::string ident = p->get_path ().as_string ();
+ 
+ 		  rust_error_at (p->get_locus (), "unknown meta item %qs",
+ 				 ident.c_str ());
+ 		  rust_inform (p->get_locus (),
+ 			       "expected one of %<since%>, %<note%>");
+ 		}
+ 		break;
+ 
+ 	      case AST::MetaItem::ItemKind::Word:
+ 		{
+ 		  // #[deprecated("a")]
+ 		  auto *w = static_cast<AST::MetaWord *> (meta_item);
+ 
+ 		  rust_error_at (
+ 		    w->get_locus (),
+ 		    "item in %<deprecated%> must be a key/value pair");
+ 		}
+ 		break;
+ 
+ 	      case AST::MetaItem::ItemKind::PathExpr:
+ 		{
+ 		  // #[deprecated(since=a)]
+ 		  auto *px = static_cast<AST::MetaItemPathExpr *> (meta_item);
+ 
+ 		  rust_error_at (
+ 		    px->get_locus (),
+ 		    "expected unsuffixed literal or identifier, found %qs",
+ 		    px->get_expr ().as_string ().c_str ());
+ 		}
+ 		break;
+ 
+ 	      case AST::MetaItem::ItemKind::Seq:
+ 	      case AST::MetaItem::ItemKind::ListPaths:
+ 	      case AST::MetaItem::ItemKind::ListNameValueStr:
+ 	      default:
+ 		gcc_unreachable ();
+ 		break;
+ 	      }
+ 	  }
+ 	  break;
+ 
+ 	case AST::MetaItemInner::Kind::LitExpr:
+ 	default:
+ 	  gcc_unreachable ();
+ 	  break;
+ 	}
+     }
+ }
+ 
  static bool
  is_proc_macro_type (const AST::Attribute &attribute)
  {
*************** AttributeChecker::check_attribute (const
*** 370,375 ****
--- 461,468 ----
    // and costly
    if (result.name == Attrs::DOC)
      check_doc_attribute (attribute);
+   else if (result.name == Attrs::DEPRECATED)
+     check_deprecated_attribute (attribute);
  }
  
  void
diff -Nrcpad gcc-16-20251221/gcc/rust/util/rust-hir-map.cc gcc-16-20251228/gcc/rust/util/rust-hir-map.cc
*** gcc-16-20251221/gcc/rust/util/rust-hir-map.cc	Sun Dec 21 22:32:07 2025
--- gcc-16-20251228/gcc/rust/util/rust-hir-map.cc	Sun Dec 28 22:32:08 2025
*************** NodeId
*** 201,206 ****
--- 201,208 ----
  Mappings::get_next_node_id ()
  {
    auto it = nodeIdIter;
+   if (UNLIKELY (it > MAX_NODEID))
+     rust_fatal_error (UNKNOWN_LOCATION, "out of node ids");
    nodeIdIter++;
    return it;
  }
diff -Nrcpad gcc-16-20251221/gcc/rust/util/rust-mapping-common.h gcc-16-20251228/gcc/rust/util/rust-mapping-common.h
*** gcc-16-20251221/gcc/rust/util/rust-mapping-common.h	Sun Dec 21 22:32:07 2025
--- gcc-16-20251228/gcc/rust/util/rust-mapping-common.h	Sun Dec 28 22:32:08 2025
*************** struct DefId
*** 63,68 ****
--- 63,69 ----
  
  #define UNKNOWN_CRATENUM ((uint32_t) (UINT32_MAX))
  #define UNKNOWN_NODEID ((uint32_t) (UINT32_MAX))
+ #define MAX_NODEID (UNKNOWN_NODEID - 1)
  #define UNKNOWN_HIRID ((uint32_t) (UINT32_MAX))
  #define UNKNOWN_LOCAL_DEFID ((uint32_t) (0))
  #define UNKNOWN_DEFID (DefId{0, 0})
diff -Nrcpad gcc-16-20251221/gcc/simplify-rtx.cc gcc-16-20251228/gcc/simplify-rtx.cc
*** gcc-16-20251221/gcc/simplify-rtx.cc	Sun Dec 21 22:32:07 2025
--- gcc-16-20251228/gcc/simplify-rtx.cc	Sun Dec 28 22:32:08 2025
*************** simplify_context::simplify_relational_op
*** 6509,6516 ****
  	  /* only enters if op1 is 0 */
  	  /* Verify IOR operand is NE */
  	  && GET_CODE (XEXP (op0, 0)) == NE
  	  /* Verify second NE operand is 0 */
! 	  && XEXP (XEXP (op0, 0), 1) == CONST0_RTX (mode))
  	{
  	  rtx t = gen_rtx_IOR (cmp_mode, XEXP (XEXP (op0, 0), 0), XEXP (op0, 1));
  	  t = gen_rtx_fmt_ee (code, mode, t, CONST0_RTX (mode));
--- 6509,6517 ----
  	  /* only enters if op1 is 0 */
  	  /* Verify IOR operand is NE */
  	  && GET_CODE (XEXP (op0, 0)) == NE
+ 	  && GET_MODE (XEXP (XEXP (op0, 0), 0)) == cmp_mode
  	  /* Verify second NE operand is 0 */
! 	  && XEXP (XEXP (op0, 0), 1) == CONST0_RTX (cmp_mode))
  	{
  	  rtx t = gen_rtx_IOR (cmp_mode, XEXP (XEXP (op0, 0), 0), XEXP (op0, 1));
  	  t = gen_rtx_fmt_ee (code, mode, t, CONST0_RTX (mode));
diff -Nrcpad gcc-16-20251221/gcc/testsuite/ChangeLog gcc-16-20251228/gcc/testsuite/ChangeLog
*** gcc-16-20251221/gcc/testsuite/ChangeLog	Sun Dec 21 22:32:07 2025
--- gcc-16-20251228/gcc/testsuite/ChangeLog	Sun Dec 28 22:32:08 2025
***************
*** 1,3 ****
--- 1,442 ----
+ 2025-12-27  Jose E. Marchesi  <jose.marchesi@oracle.com>
+ 
+ 	* algol68/execute/modules/module22bar.a68: New test.
+ 	* algol68/execute/modules/module22foo.a68: Likewise.
+ 	* algol68/execute/modules/program-22.a68: Likewise.
+ 	* algol68/compile/modules/program-11.a68: Adjust test to
+ 	publicized modules.
+ 	* algol68/compile/modules/program-error-multiple-delaration-module-1.a68:
+ 	Likewise.
+ 
+ 2025-12-27  Jose E. Marchesi  <jose.marchesi@oracle.com>
+ 
+ 	* algol68/compile/error-loop-1.a68: New test.
+ 
+ 2025-12-27  Jose E. Marchesi  <jose.marchesi@oracle.com>
+ 
+ 	* algol68/compile/module-2.a68: Expand test a little.
+ 
+ 2025-12-27  Jose E. Marchesi  <jose.marchesi@oracle.com>
+ 
+ 	* algol68/execute/pack-soids-in-moid-1.a68: New test.
+ 
+ 2025-12-27  Jose E. Marchesi  <jose.marchesi@oracle.com>
+ 
+ 	* algol68/compile/modules/program-error-multiple-delaration-module-1.a68:
+ 	New test.
+ 
+ 2025-12-27  Jose E. Marchesi  <jose.marchesi@oracle.com>
+ 
+ 	* algol68/compile/modules/module10.a68: New test.
+ 	* algol68/execute/modules/program-18.a68: Likewise.
+ 	* algol68/execute/modules/module18c.a68: Likewise.
+ 	* algol68/execute/modules/module18b.a68: Likewise.
+ 	* algol68/execute/modules/module18a.a68: Likewise.
+ 	* algol68/compile/modules/program-11.a68: Likewise.
+ 	* algol68/compile/modules/program-10.a68: Likewise.
+ 	* algol68/compile/modules/module12.a68: Likewise.
+ 	* algol68/compile/modules/module11.a68: Likewise.
+ 
+ 2025-12-27  Jose E. Marchesi  <jose.marchesi@oracle.com>
+ 
+ 	* algol68/compile/error-module-nested-access-1.a68: New test.
+ 	* algol68/execute/modules/program-21.a68: Likewise.
+ 
+ 2025-12-27  Jose E. Marchesi  <jose.marchesi@oracle.com>
+ 
+ 	* algol68/execute/modules/module17.a68: New test.
+ 
+ 2025-12-27  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR rtl-optimization/123114
+ 	* gcc.dg/pr123114.c: New test.
+ 
+ 2025-12-27  Eric Botcazou  <ebotcazou@gcc.gnu.org>
+ 
+ 	* gnat.dg/specs/mutably_tagged1.ads: New test.
+ 
+ 2025-12-26  Eric Botcazou  <ebotcazou@gcc.gnu.org>
+ 
+ 	* gnat.dg/aggr34.adb: New test.
+ 	* gnat.dg/aggr34_pkg1.ads, gnat.dg/aggr34_pkg1.adb: New helper.
+ 	* gnat.dg/aggr34_pkg2.ads, gnat.dg/aggr34_pkg2.adb: Likewise.
+ 	* gnat.dg/aggr34_pkg3.ads: Likewise.
+ 
+ 2025-12-26  Eric Botcazou  <ebotcazou@gcc.gnu.org>
+ 
+ 	* gnat.dg/specs/aggr9.ads: New test.
+ 
+ 2025-12-25  Arsen Arsenović  <aarsenovic@baylibre.com>
+ 
+ 	* gcc.dg/tree-ssa/sincos-ice-on-ifn_sin-call.c: New test.
+ 	* gcc.target/gcn/sincos-ice-on-ifn_sin-call-1.c: New test.
+ 
+ 2025-12-24  Pan Li  <pan2.li@intel.com>
+ 
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c: Add asm check
+ 	for vmsleu.vx.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u8.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u16.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u32.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u64.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u8.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u16.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u8.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_binary.h: Add test
+ 	helper macros.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_binary_data.h: Add test
+ 	data for run test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vmsleu-run-1-u16.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vmsleu-run-1-u32.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vmsleu-run-1-u64.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vmsleu-run-1-u8.c: New test.
+ 
+ 2025-12-24  Karl Meakin  <karl.meakin@arm.com>
+ 
+ 	* gcc.target/aarch64/sme2/acle-asm/dot_lane_za16_mf8_vg1x2.c: New test.
+ 	* gcc.target/aarch64/sme2/acle-asm/dot_lane_za16_mf8_vg1x4.c: New test.
+ 	* gcc.target/aarch64/sme2/acle-asm/dot_lane_za32_mf8_vg1x2.c: New test.
+ 	* gcc.target/aarch64/sme2/acle-asm/dot_lane_za32_mf8_vg1x4.c: New test.
+ 	* gcc.target/aarch64/sme2/acle-asm/dot_single_za16_mf8_vg1x2.c: New test.
+ 	* gcc.target/aarch64/sme2/acle-asm/dot_single_za16_mf8_vg1x4.c: New test.
+ 	* gcc.target/aarch64/sme2/acle-asm/dot_single_za32_mf8_vg1x2.c: New test.
+ 	* gcc.target/aarch64/sme2/acle-asm/dot_single_za32_mf8_vg1x4.c: New test.
+ 	* gcc.target/aarch64/sme2/acle-asm/dot_za16_mf8_vg1x2.c: New test.
+ 	* gcc.target/aarch64/sme2/acle-asm/dot_za16_mf8_vg1x4.c: New test.
+ 	* gcc.target/aarch64/sme2/acle-asm/dot_za32_mf8_vg1x2.c: New test.
+ 	* gcc.target/aarch64/sme2/acle-asm/dot_za32_mf8_vg1x4.c: New test.
+ 	* gcc.target/aarch64/sme2/acle-asm/vdot_lane_za16_mf8_vg1x2.c: New test.
+ 	* gcc.target/aarch64/sme2/acle-asm/vdotb_lane_za32_mf8_vg1x4.c: New test.
+ 	* gcc.target/aarch64/sme2/acle-asm/vdott_lane_za32_mf8_vg1x4.c: New test.
+ 	* gcc.target/aarch64/sve/acle/general-c/dot_half_za_slice_lane_fpm.c: New test.
+ 
+ 2025-12-24  Claudio Bantaloukas  <claudio.bantaloukas@arm.com>
+ 
+ 	* gcc.target/aarch64/sme/acle-asm/test_sme_acle.h: (TEST_UNIFORM_ZA):
+ 	Add fpm0 parameter.
+ 	* gcc.target/aarch64/sve/acle/general-c/binary_za_m_1.c: Add tests for
+ 	variants accepting fpm.
+ 	* gcc.target/aarch64/sme2/acle-asm/mopa_za16_mf8.c: New test.
+ 	* gcc.target/aarch64/sme2/acle-asm/mopa_za32_mf8.c: Likewise.
+ 
+ 2025-12-24  Claudio Bantaloukas  <claudio.bantaloukas@arm.com>
+ 
+ 	* gcc.target/aarch64/sme2/acle-asm/test_sme2_acle.h: (TEST_ZA_X1,
+ 	TEST_ZA_XN, TEST_ZA_SINGLE, TEST_ZA_SINGLE_Z15, TEST_ZA_LANE,
+ 	TEST_ZA_LANE_Z15): Add fpm0 parameter.
+ 	* gcc.target/aarch64/sve/acle/general-c/binary_za_slice_lane_1.c: Add
+ 	tests for variants accepting fpm.
+ 	* gcc.target/aarch64/sve/acle/general-c/binary_za_slice_opt_single_1.c:
+ 	Likewise.
+ 	* gcc.target/aarch64/sme2/acle-asm/mla_lane_za16_mf8_vg2x1.c: New test.
+ 	* gcc.target/aarch64/sme2/acle-asm/mla_lane_za16_mf8_vg2x2.c: New test.
+ 	* gcc.target/aarch64/sme2/acle-asm/mla_lane_za16_mf8_vg2x4.c: New test.
+ 	* gcc.target/aarch64/sme2/acle-asm/mla_lane_za32_mf8_vg4x1.c: New test.
+ 	* gcc.target/aarch64/sme2/acle-asm/mla_lane_za32_mf8_vg4x2.c: New test.
+ 	* gcc.target/aarch64/sme2/acle-asm/mla_lane_za32_mf8_vg4x4.c: New test.
+ 	* gcc.target/aarch64/sme2/acle-asm/mla_za16_mf8_vg2x1.c: New test.
+ 	* gcc.target/aarch64/sme2/acle-asm/mla_za16_mf8_vg2x2.c: New test.
+ 	* gcc.target/aarch64/sme2/acle-asm/mla_za16_mf8_vg2x4.c: New test.
+ 	* gcc.target/aarch64/sme2/acle-asm/mla_za32_mf8_vg4x1.c: New test.
+ 	* gcc.target/aarch64/sme2/acle-asm/mla_za32_mf8_vg4x2.c: New test.
+ 	* gcc.target/aarch64/sme2/acle-asm/mla_za32_mf8_vg4x4.c: New test.
+ 
+ 2025-12-24  Claudio Bantaloukas  <claudio.bantaloukas@arm.com>
+ 
+ 	* gcc.target/aarch64/pragma_cpp_predefs_4.c: Add tests checking that
+ 	sme-f8f16 and sme-f8f32 prefefs are off by default, and checks for
+ 	feature dependencies.
+ 	* lib/target-supports.exp: Add check_effective_target support for
+ 	sme-f8f16 and sme-f8f32.
+ 
+ 2025-12-24  Claudio Bantaloukas  <claudio.bantaloukas@arm.com>
+ 
+ 	* gcc.target/aarch64/sme2/acle-asm/scale_f16_x2.c: : Added test file.
+ 	* gcc.target/aarch64/sme2/acle-asm/scale_f16_x4.c: : Likewise.
+ 	* gcc.target/aarch64/sme2/acle-asm/scale_f32_x2.c: : Added test file.
+ 	* gcc.target/aarch64/sme2/acle-asm/scale_f32_x4.c: : Likewise.
+ 	* gcc.target/aarch64/sme2/acle-asm/scale_f64_x2.c: : Added test file.
+ 	* gcc.target/aarch64/sme2/acle-asm/scale_f64_x4.c: : Likewise.
+ 
+ 2025-12-24  Claudio Bantaloukas  <claudio.bantaloukas@arm.com>
+ 
+ 	* gcc.target/aarch64/sme2/acle-asm/cvt_mf8_bf16_x2.c: Added test file.
+ 	* gcc.target/aarch64/sme2/acle-asm/cvt_mf8_f16_x2.c: Likewise.
+ 	* gcc.target/aarch64/sme2/acle-asm/cvt_mf8_f32_x4.c: Likewise.
+ 	* gcc.target/aarch64/sme2/acle-asm/cvtn_mf8_f32_x4.c: Likewise.
+ 	* gcc.target/aarch64/sve/acle/asm/test_sve_acle.h
+ 	(TEST_X2_NARROW): Added fpm0 argument for intrinsics.
+ 	(TEST_X4_NARROW): Likewise.
+ 
+ 2025-12-24  Claudio Bantaloukas  <claudio.bantaloukas@arm.com>
+ 
+ 	* g++.target/aarch64/sme2/aarch64-sme2-acle-asm.exp: Use tuning flag
+ 	to reduce churn in testsuites.
+ 	* gcc.target/aarch64/sme2/aarch64-sme2-acle-asm.exp: Likewise.
+ 	* gcc.target/aarch64/sme2/acle-asm/cvt_mf8_x2.c: Added test file.
+ 	* gcc.target/aarch64/sme2/acle-asm/cvtl_mf8_x2.c: Likewise.
+ 	* gcc.target/aarch64/sve/acle/asm/test_sve_acle.h (TEST_X2_WIDE): Added
+ 	fpm0 argument for intrinsics.
+ 
+ 2025-12-24  Claudio Bantaloukas  <claudio.bantaloukas@arm.com>
+ 
+ 	* gcc.target/aarch64/sme/acle-asm/revd_mf8.c: Added test file.
+ 	* gcc.target/aarch64/sme2/acle-asm/ld1_mf8_x2.c: Likewise.
+ 	* gcc.target/aarch64/sme2/acle-asm/ld1_mf8_x4.c: Likewise.
+ 	* gcc.target/aarch64/sme2/acle-asm/ldnt1_mf8_x2.c: Likewise.
+ 	* gcc.target/aarch64/sme2/acle-asm/ldnt1_mf8_x4.c: Likewise.
+ 	* gcc.target/aarch64/sme2/acle-asm/readz_ver_za128.c: Likewise.
+ 	* gcc.target/aarch64/sme2/acle-asm/sel_mf8_x2.c: Likewise.
+ 	* gcc.target/aarch64/sme2/acle-asm/sel_mf8_x4.c: Likewise.
+ 	* gcc.target/aarch64/sme2/acle-asm/st1_mf8_x2.c: Likewise.
+ 	* gcc.target/aarch64/sme2/acle-asm/st1_mf8_x4.c: Likewise.
+ 	* gcc.target/aarch64/sme2/acle-asm/stnt1_mf8_x2.c: Likewise.
+ 	* gcc.target/aarch64/sme2/acle-asm/stnt1_mf8_x4.c: Likewise.
+ 	* gcc.target/aarch64/sme2/acle-asm/uzp_mf8_x2.c: Likewise.
+ 	* gcc.target/aarch64/sme2/acle-asm/uzp_mf8_x4.c: Likewise.
+ 	* gcc.target/aarch64/sme2/acle-asm/uzpq_mf8_x2.c: Likewise.
+ 	* gcc.target/aarch64/sme2/acle-asm/uzpq_mf8_x4.c: Likewise.
+ 	* gcc.target/aarch64/sme2/acle-asm/zip_mf8_x2.c: Likewise.
+ 	* gcc.target/aarch64/sme2/acle-asm/zip_mf8_x4.c: Likewise.
+ 	* gcc.target/aarch64/sme2/acle-asm/zipq_mf8_x2.c: Likewise.
+ 	* gcc.target/aarch64/sme2/acle-asm/zipq_mf8_x4.c: Likewise.
+ 	* gcc.target/aarch64/sve2/acle/asm/ld1_mf8_x2.c: Likewise.
+ 	* gcc.target/aarch64/sve2/acle/asm/ld1_mf8_x4.c: Likewise.
+ 	* gcc.target/aarch64/sve2/acle/asm/ldnt1_mf8_x2.c: Likewise.
+ 	* gcc.target/aarch64/sve2/acle/asm/ldnt1_mf8_x4.c: Likewise.
+ 	* gcc.target/aarch64/sve2/acle/asm/revd_mf8.c: Likewise.
+ 	* gcc.target/aarch64/sve2/acle/asm/stnt1_mf8_x2.c: Likewise.
+ 	* gcc.target/aarch64/sve2/acle/asm/stnt1_mf8_x4.c: Likewise.
+ 	* gcc.target/aarch64/sme/acle-asm/read_hor_za128.c: Added mf8 tests.
+ 	* gcc.target/aarch64/sme/acle-asm/read_hor_za8.c: Likewise.
+ 	* gcc.target/aarch64/sme/acle-asm/read_ver_za128.c: Likewise.
+ 	* gcc.target/aarch64/sme/acle-asm/read_ver_za8.c: Likewise.
+ 	* gcc.target/aarch64/sme/acle-asm/write_hor_za128.c: Likewise.
+ 	* gcc.target/aarch64/sme/acle-asm/write_hor_za8.c: Likewise.
+ 	* gcc.target/aarch64/sme/acle-asm/write_ver_za128.c: Likewise.
+ 	* gcc.target/aarch64/sme/acle-asm/write_ver_za8.c: Likewise.
+ 	* gcc.target/aarch64/sme2/acle-asm/read_hor_za8_vg2.c: Likewise.
+ 	* gcc.target/aarch64/sme2/acle-asm/read_hor_za8_vg4.c: Likewise.
+ 	* gcc.target/aarch64/sme2/acle-asm/read_ver_za8_vg2.c: Likewise.
+ 	* gcc.target/aarch64/sme2/acle-asm/read_ver_za8_vg4.c: Likewise.
+ 	* gcc.target/aarch64/sme2/acle-asm/read_za8_vg1x2.c: Likewise.
+ 	* gcc.target/aarch64/sme2/acle-asm/read_za8_vg1x4.c: Likewise.
+ 	* gcc.target/aarch64/sme2/acle-asm/readz_hor_za128.c: Likewise.
+ 	* gcc.target/aarch64/sme2/acle-asm/readz_hor_za8_vg2.c: Likewise.
+ 	* gcc.target/aarch64/sme2/acle-asm/readz_hor_za8_vg4.c: Likewise.
+ 	* gcc.target/aarch64/sme2/acle-asm/readz_hor_za8.c: Likewise.
+ 	* gcc.target/aarch64/sme2/acle-asm/readz_ver_za8_vg2.c: Likewise.
+ 	* gcc.target/aarch64/sme2/acle-asm/readz_ver_za8_vg4.c: Likewise.
+ 	* gcc.target/aarch64/sme2/acle-asm/readz_ver_za8.c: Likewise.
+ 	* gcc.target/aarch64/sme2/acle-asm/readz_za8_vg1x2.c: Likewise.
+ 	* gcc.target/aarch64/sme2/acle-asm/readz_za8_vg1x4.c: Likewise.
+ 	* gcc.target/aarch64/sme2/acle-asm/write_hor_za8_vg2.c: Likewise.
+ 	* gcc.target/aarch64/sme2/acle-asm/write_hor_za8_vg4.c: Likewise.
+ 	* gcc.target/aarch64/sme2/acle-asm/write_ver_za8_vg2.c: Likewise.
+ 	* gcc.target/aarch64/sme2/acle-asm/write_ver_za8_vg4.c: Likewise.
+ 	* gcc.target/aarch64/sme2/acle-asm/write_za8_vg1x2.c: Likewise.
+ 	* gcc.target/aarch64/sme2/acle-asm/write_za8_vg1x4.c: Likewise.
+ 
+ 2025-12-24  Claudio Bantaloukas  <claudio.bantaloukas@arm.com>
+ 
+ 	* gcc.target/aarch64/sme2/acle-asm/luti2_mf8_x2.c: New test.
+ 	* gcc.target/aarch64/sme2/acle-asm/luti2_mf8_x4.c: Likewise.
+ 	* gcc.target/aarch64/sme2/acle-asm/luti2_mf8.c: Likewise.
+ 	* gcc.target/aarch64/sme2/acle-asm/luti4_mf8_x2.c: Likewise.
+ 	* gcc.target/aarch64/sme2/acle-asm/luti4_mf8.c: Likewise.
+ 
+ 2025-12-23  Nathaniel Shead  <nathanieloshead@gmail.com>
+ 
+ 	PR c++/122819
+ 	* g++.dg/modules/tpl-friend-22.C: New test.
+ 	* g++.dg/template/friend88.C: New test.
+ 
+ 2025-12-23  Mohammad-Reza Nabipoor  <mnabipoor@gnu.org>
+ 
+ 	* algol68/compile/modules/compile.exp (dg-data): New procedure
+ 	for writing binary test data to disk.
+ 	* algol68/compile/modules/program-m68-lp64.a68: New test which
+ 	embeds binary module data.
+ 	* algol68/compile/modules/program-m68-llp64.a68: Likewise.
+ 	* algol68/compile/modules/program-m68-ilp32.a68: Likewise.
+ 	* algol68/compile/modules/program-m68-lp64-be.a68: Likewise.
+ 	* algol68/compile/modules/program-m68-llp64-be.a68: Likewise.
+ 
+ 2025-12-23  Jeff Law  <jeffrey.law@oss.qualcomm.com>
+ 
+ 	PR target/123274
+ 	* gcc.target/riscv/pr123274.c: New test.
+ 
+ 2025-12-23  Jeff Law  <jeffrey.law@oss.qualcomm.com>
+ 
+ 	PR target/123278
+ 	* gcc.target/riscv/pr123278.c: New test.
+ 
+ 2025-12-23  Egas Ribeiro  <egas.g.ribeiro@gmail.com>
+ 
+ 	PR c++/122550
+ 	* g++.dg/cpp2a/concepts-friend18.C: New test.
+ 	* g++.dg/cpp2a/concepts-friend18a.C: New test.
+ 
+ 2025-12-23  Egas Ribeiro  <egas.g.ribeiro@gmail.com>
+ 
+ 	PR c++/122958
+ 	* g++.dg/cpp2a/partial-spec-redecl.C: New test.
+ 
+ 2025-12-23  lenny.chiadmi-delage  <lenny.chiadmi-delage@epita.fr>
+ 
+ 	* rust/compile/issue-4245.rs: New test.
+ 
+ 2025-12-23  Lucas Ly Ba  <lucas.ly-ba@outlook.com>
+ 
+ 	* rust/compile/unused-mut-identifier_0.rs: New test.
+ 	* rust/compile/unused-mut-struct-field_0.rs: New test.
+ 
+ 2025-12-23  Lucas Ly Ba  <lucas.ly-ba@outlook.com>
+ 
+ 	* rust/compile/static_item_0.rs: Modify warning output.
+ 	* rust/compile/template_function_0.rs: Modify warning output.
+ 
+ 2025-12-23  Lucas Ly Ba  <lucas.ly-ba@outlook.com>
+ 
+ 	* rust/compile/issue-4260_0.rs: New test.
+ 
+ 2025-12-23  Ryutaro Okada  <1015ryu88@gmail.com>
+ 
+ 	* rust/compile/static_item_0.rs: New test.
+ 	* rust/compile/template_function_0.rs: New test.
+ 
+ 2025-12-23  Harishankar  <harishankarpp7@gmail.com>
+ 
+ 	* rust/compile/issue-3977.rs: New test.
+ 
+ 2025-12-23  lenny.chiadmi-delage  <lenny.chiadmi-delage@epita.fr>
+ 
+ 	* rust/compile/issue-4148.rs: Test should produce errors.
+ 
+ 2025-12-23  Egas Ribeiro  <egas.g.ribeiro@gmail.com>
+ 
+ 	PR c++/117518
+ 	* g++.dg/cpp2a/lambda-targ19.C: New test.
+ 
+ 2025-12-23  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR rtl-optimization/123267
+ 	* gcc.dg/torture/pr123267-1.c: New test.
+ 
+ 2025-12-23  Dhruv Chawla  <dhruvc@nvidia.com>
+ 
+ 	* lib/profopt.exp: Bump GCOV version to 3.
+ 	* gcc.dg/tree-prof/afdo-lto_priv-basic-0.c: New test.
+ 	* gcc.dg/tree-prof/afdo-lto_priv-basic-1.c: Likewise.
+ 	* gcc.dg/tree-prof/afdo-lto_priv-header-0.c: Likewise.
+ 	* gcc.dg/tree-prof/afdo-lto_priv-header-0.h: Likewise.
+ 	* gcc.dg/tree-prof/afdo-lto_priv-header-1.c: Likewise.
+ 	* gcc.dg/tree-prof/afdo-lto_priv-header-1.h: Likewise.
+ 
+ 2025-12-22  Nathaniel Shead  <nathanieloshead@gmail.com>
+ 
+ 	PR c++/122994
+ 	* g++.dg/modules/internal-17_b.C: Use functions and internal
+ 	types rather than lambdas.
+ 	* g++.dg/modules/internal-4_b.C: Correct expected result.
+ 	* g++.dg/modules/internal-20_a.C: New test.
+ 	* g++.dg/modules/internal-20_b.C: New test.
+ 	* g++.dg/modules/internal-20_c.C: New test.
+ 	* g++.dg/modules/internal-21_a.C: New test.
+ 	* g++.dg/modules/internal-21_b.C: New test.
+ 
+ 2025-12-22  Steve Kargl  <kargl@gcc.gnu.org>
+ 
+ 	PR fortran/122957
+ 	* gfortran.dg/pr122957.f90: New test.
+ 
+ 2025-12-22  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/123253
+ 	* gfortran.dg/associate_76.f90: Extended testcase.
+ 	* gfortran.dg/associate_77.f90: New test.
+ 
+ 2025-12-22  Kugan Vivekanandarajah  <kvivekananda@nvidia.com>
+ 
+ 	PR middle-end/123067
+ 	* gcc.dg/licm-self-write-partial-alias.c: New test.
+ 
+ 2025-12-22  Jose E. Marchesi  <jose.marchesi@oracle.com>
+ 
+ 	* algol68/execute/modules/Modules20.map (module-bar): Add
+ 	underscores.
+ 
+ 2025-12-22  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gnat.dg/specs/class_wide1.ads: New test.
+ 
+ 2025-12-22  Jeff Law  <jlaw@ventanamicro.com>
+ 
+ 	* gcc.target/riscv/rvv/base/spill-7.c: Update expected output.
+ 
+ 2025-12-22  Yuao Ma  <c8ef@outlook.com>
+ 
+ 	PR c++/123261
+ 	* g++.dg/ext/fimplicit-constexpr2.C: New test.
+ 
+ 2025-12-22  Vineet Gupta  <vineetg@rivosinc.com>
+ 
+ 	* gcc.target/riscv/zicond_ifcvt_opt.c: Adjust increased czero counts.
+ 
+ 2025-12-22  Vineet Gupta  <vineetg@rivosinc.com>
+ 	    Philipp Tomsich  <philipp.tomsich@vrull.eu>
+ 
+ 	PR target/122769
+ 	* gcc.target/riscv/pr122769.c: New test.
+ 
+ 2025-12-22  Jeff Law  <jlaw@ventanamicro.com>
+ 
+ 	* gcc.target/riscv/rvv/base/spill-1.c: Update expected output.
+ 	* gcc.target/riscv/rvv/base/spill-2.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/spill-3.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/spill-4.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/spill-5.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/spill-6.c: Likewise.
+ 
+ 2025-12-22  Stefan Schulze Frielinghaus  <stefansf@gcc.gnu.org>
+ 
+ 	* gcc.target/s390/zvector/vec-addc-u128.c: Honor deprecation
+ 	warning.
+ 
+ 2025-12-21  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	PR fortran/121472
+ 	* gfortran.dg/pr121472.f90: New test.
+ 
+ 2025-12-21  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	PR fortran/121475
+ 	* gfortran.dg/pr121475.f90: New test as posted in the PR
+ 	from Christopher Albert
+ 
+ 2025-12-21  Antoni Boucher  <bouanto@zoho.com>
+ 
+ 	* jit.dg/all-non-failing-tests.h: Update comment about
+ 	test-cold-attribute.c.
+ 	* jit.dg/test-cold-attribute.c: Use -Oz to fix test.
+ 
+ 2025-12-21  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	PR tree-optimization/123089
+ 	* gcc.dg/vect/vect-early-break_141-pr123089.c: New test.
+ 	* gcc.target/aarch64/sve/peel_ind_14.c: New test.
+ 	* gcc.target/aarch64/sve/peel_ind_14_run.c: New test.
+ 	* gcc.target/aarch64/sve/peel_ind_15.c: New test.
+ 	* gcc.target/aarch64/sve/peel_ind_15_run.c: New test.
+ 	* gcc.target/aarch64/sve/peel_ind_16.c: New test.
+ 	* gcc.target/aarch64/sve/peel_ind_16_run.c: New test.
+ 	* gcc.target/aarch64/sve/peel_ind_17.c: New test.
+ 	* gcc.target/aarch64/sve/peel_ind_17_run.c: New test.
+ 
  2025-12-20  Nathaniel Shead  <nathanieloshead@gmail.com>
  
  	PR c++/122712
diff -Nrcpad gcc-16-20251221/gcc/testsuite/algol68/compile/error-loop-1.a68 gcc-16-20251228/gcc/testsuite/algol68/compile/error-loop-1.a68
*** gcc-16-20251221/gcc/testsuite/algol68/compile/error-loop-1.a68	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/algol68/compile/error-loop-1.a68	Sun Dec 28 22:32:09 2025
***************
*** 0 ****
--- 1 ----
+ from i from 1 to 10 do skip od { dg-error "" }
diff -Nrcpad gcc-16-20251221/gcc/testsuite/algol68/compile/error-module-nested-access-1.a68 gcc-16-20251228/gcc/testsuite/algol68/compile/error-module-nested-access-1.a68
*** gcc-16-20251221/gcc/testsuite/algol68/compile/error-module-nested-access-1.a68	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/algol68/compile/error-module-nested-access-1.a68	Sun Dec 28 22:32:09 2025
***************
*** 0 ****
--- 1,6 ----
+ module Foo = { dg-error "expected module text" }
+           access Bar access Baz access Quux { dg-error "nested" }
+ def
+     pub int bar = foo + baz;
+     skip
+ fed
diff -Nrcpad gcc-16-20251221/gcc/testsuite/algol68/compile/module-2.a68 gcc-16-20251228/gcc/testsuite/algol68/compile/module-2.a68
*** gcc-16-20251221/gcc/testsuite/algol68/compile/module-2.a68	Sun Dec 21 22:32:08 2025
--- gcc-16-20251228/gcc/testsuite/algol68/compile/module-2.a68	Sun Dec 28 22:32:09 2025
*************** module Foo = def pub int idpublic = 10;
*** 4,8 ****
--- 4,9 ----
                   real varprivate := 3.14;
                   pub proc lala = (int a, b) int: a + b;
                   pub proc lele := (int a, b) int: a - b;
+                  pub proc(int,int)int lili := (int a, b) int: a * b;
                   skip
               fed
diff -Nrcpad gcc-16-20251221/gcc/testsuite/algol68/compile/modules/compile.exp gcc-16-20251228/gcc/testsuite/algol68/compile/modules/compile.exp
*** gcc-16-20251221/gcc/testsuite/algol68/compile/modules/compile.exp	Sun Dec 21 22:32:08 2025
--- gcc-16-20251228/gcc/testsuite/algol68/compile/modules/compile.exp	Sun Dec 28 22:32:09 2025
***************
*** 20,25 ****
--- 20,41 ----
  
  load_lib algol68-dg.exp
  
+ proc dg-data { args } {
+   global objdir
+ 
+   if { [llength $args] != 3 } {
+       error "[lindex $args 0]: invalid arguments"
+   }
+ 
+   set filename $objdir/[lindex $args 1]
+   set bytes [lindex $args 2]
+ 
+   set fd [open $filename w]
+   fconfigure $fd -translation binary
+   puts -nonewline $fd [binary format c* $bytes]
+   close $fd
+ }
+ 
  # Initialize `dg'.
  dg-init
  
diff -Nrcpad gcc-16-20251221/gcc/testsuite/algol68/compile/modules/module10.a68 gcc-16-20251228/gcc/testsuite/algol68/compile/modules/module10.a68
*** gcc-16-20251221/gcc/testsuite/algol68/compile/modules/module10.a68	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/algol68/compile/modules/module10.a68	Sun Dec 28 22:32:09 2025
***************
*** 0 ****
--- 1 ----
+ module Module_10 = def pub int foo = 10; skip fed
diff -Nrcpad gcc-16-20251221/gcc/testsuite/algol68/compile/modules/module11.a68 gcc-16-20251228/gcc/testsuite/algol68/compile/modules/module11.a68
*** gcc-16-20251221/gcc/testsuite/algol68/compile/modules/module11.a68	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/algol68/compile/modules/module11.a68	Sun Dec 28 22:32:09 2025
***************
*** 0 ****
--- 1,5 ----
+ module Module_11 = access pub Module_10
+ def
+     pub int bar = foo + 10;
+     skip
+ fed
diff -Nrcpad gcc-16-20251221/gcc/testsuite/algol68/compile/modules/module12.a68 gcc-16-20251228/gcc/testsuite/algol68/compile/modules/module12.a68
*** gcc-16-20251221/gcc/testsuite/algol68/compile/modules/module12.a68	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/algol68/compile/modules/module12.a68	Sun Dec 28 22:32:09 2025
***************
*** 0 ****
--- 1 ----
+ module Module12 = def int baz = 30; skip fed
diff -Nrcpad gcc-16-20251221/gcc/testsuite/algol68/compile/modules/program-10.a68 gcc-16-20251228/gcc/testsuite/algol68/compile/modules/program-10.a68
*** gcc-16-20251221/gcc/testsuite/algol68/compile/modules/program-10.a68	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/algol68/compile/modules/program-10.a68	Sun Dec 28 22:32:09 2025
***************
*** 0 ****
--- 1,8 ----
+ { dg-modules "module10 module11 module12" }
+ 
+ access Module10,
+        NonExistantModule, { dg-error "" }
+        Module12
+ begin assert (foo = 10);
+       assert (bar = 20)
+ end
diff -Nrcpad gcc-16-20251221/gcc/testsuite/algol68/compile/modules/program-11.a68 gcc-16-20251228/gcc/testsuite/algol68/compile/modules/program-11.a68
*** gcc-16-20251221/gcc/testsuite/algol68/compile/modules/program-11.a68	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/algol68/compile/modules/program-11.a68	Sun Dec 28 22:32:09 2025
***************
*** 0 ****
--- 1,11 ----
+ { dg-modules "module10 module11 module12" }
+ 
+ { Check that mode checking and coercion is performed
+   inside controlled clauses in access clauses with
+   several revelations.  }
+ 
+ access Module11,
+        Module12
+ begin assert (foo = 10);
+       assert (bar = "foo") { dg-error "" }
+ end
diff -Nrcpad gcc-16-20251221/gcc/testsuite/algol68/compile/modules/program-error-multiple-delaration-module-1.a68 gcc-16-20251228/gcc/testsuite/algol68/compile/modules/program-error-multiple-delaration-module-1.a68
*** gcc-16-20251221/gcc/testsuite/algol68/compile/modules/program-error-multiple-delaration-module-1.a68	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/algol68/compile/modules/program-error-multiple-delaration-module-1.a68	Sun Dec 28 22:32:09 2025
***************
*** 0 ****
--- 1,10 ----
+ { dg-modules "module10 module11 module12" }
+ 
+ { Note how Module11 also exports the foo from Module10.  }
+ 
+ access Module10,
+        Module11, { dg-error "multiple declaration.*foo" }
+        Module11 { dg-error "multiple declaration.*bar" }
+ begin assert (foo = 10);
+       assert (bar = 20)
+ end
diff -Nrcpad gcc-16-20251221/gcc/testsuite/algol68/compile/modules/program-m68-ilp32.a68 gcc-16-20251228/gcc/testsuite/algol68/compile/modules/program-m68-ilp32.a68
*** gcc-16-20251221/gcc/testsuite/algol68/compile/modules/program-m68-ilp32.a68	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/algol68/compile/modules/program-m68-ilp32.a68	Sun Dec 28 22:32:09 2025
***************
*** 0 ****
--- 1,14 ----
+ { dg-require-effective-target ilp32 }
+ { dg-require-effective-target le }
+ {
+   { The following dg-data is representing this module: }
+   module Module_m68 =
+   def
+       pub mode Foo = struct (int i, long int l);
+       pub mode Bar = int;
+       skip
+   fed
+ }
+ { dg-data modulem68.m68 {0x0a 0x68 0x01 0x00 0x0a 0x00 0x4d 0x4f 0x44 0x55 0x4c 0x45 0x4d 0x36 0x38 0x00 0x13 0x00 0x4d 0x4f 0x44 0x55 0x4c 0x45 0x4d 0x36 0x38 0x5f 0x5f 0x70 0x72 0x65 0x6c 0x75 0x64 0x65 0x00 0x14 0x00 0x4d 0x4f 0x44 0x55 0x4c 0x45 0x4d 0x36 0x38 0x5f 0x5f 0x70 0x6f 0x73 0x74 0x6c 0x75 0x64 0x65 0x00 0x17 0x00 0x00 0x00 0x02 0x00 0x02 0x01 0x0a 0x02 0x00 0x3f 0x00 0x00 0x00 0x02 0x00 0x69 0x00 0x41 0x00 0x00 0x00 0x02 0x00 0x6c 0x00 0x3a 0x00 0x00 0x00 0x19 0x00 0x00 0x00 0x02 0x0e 0x00 0x4d 0x4f 0x44 0x55 0x4c 0x45 0x4d 0x36 0x38 0x5f 0x42 0x41 0x52 0x00 0x3f 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x19 0x00 0x00 0x00 0x02 0x0e 0x00 0x4d 0x4f 0x44 0x55 0x4c 0x45 0x4d 0x36 0x38 0x5f 0x46 0x4f 0x4f 0x00 0x43 0x00 0x00 0x00 0x00 0x00 0x00 0x00} }
+ 
+ access Module_m68 (Foo foo; i of foo)
diff -Nrcpad gcc-16-20251221/gcc/testsuite/algol68/compile/modules/program-m68-llp64-be.a68 gcc-16-20251228/gcc/testsuite/algol68/compile/modules/program-m68-llp64-be.a68
*** gcc-16-20251221/gcc/testsuite/algol68/compile/modules/program-m68-llp64-be.a68	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/algol68/compile/modules/program-m68-llp64-be.a68	Sun Dec 28 22:32:09 2025
***************
*** 0 ****
--- 1,14 ----
+ { dg-require-effective-target llp64 }
+ { dg-require-effective-target be }
+ {
+   { The following dg-data is representing this module: }
+   module Module_m68 =
+   def
+       pub mode Foo = struct (int i, long int l);
+       pub mode Bar = int;
+       skip
+   fed
+ }
+ { dg-data modulem68.m68 {0x0a 0x68 0x00 0x01 0x00 0x0a 0x4d 0x4f 0x44 0x55 0x4c 0x45 0x4d 0x36 0x38 0x00 0x00 0x13 0x4d 0x4f 0x44 0x55 0x4c 0x45 0x4d 0x36 0x38 0x5f 0x5f 0x70 0x72 0x65 0x6c 0x75 0x64 0x65 0x00 0x00 0x14 0x4d 0x4f 0x44 0x55 0x4c 0x45 0x4d 0x36 0x38 0x5f 0x5f 0x70 0x6f 0x73 0x74 0x6c 0x75 0x64 0x65 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x1f 0x02 0x00 0x02 0x01 0x0a 0x00 0x02 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x43 0x00 0x02 0x69 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x45 0x00 0x02 0x6c 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x52 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x21 0x02 0x00 0x0e 0x4d 0x4f 0x44 0x55 0x4c 0x45 0x4d 0x36 0x38 0x5f 0x42 0x41 0x52 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x43 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x21 0x02 0x00 0x0e 0x4d 0x4f 0x44 0x55 0x4c 0x45 0x4d 0x36 0x38 0x5f 0x46 0x4f 0x4f 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x47 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00} }
+ 
+ access Module_m68 (Foo foo; i of foo)
diff -Nrcpad gcc-16-20251221/gcc/testsuite/algol68/compile/modules/program-m68-llp64.a68 gcc-16-20251228/gcc/testsuite/algol68/compile/modules/program-m68-llp64.a68
*** gcc-16-20251221/gcc/testsuite/algol68/compile/modules/program-m68-llp64.a68	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/algol68/compile/modules/program-m68-llp64.a68	Sun Dec 28 22:32:09 2025
***************
*** 0 ****
--- 1,14 ----
+ { dg-require-effective-target llp64 }
+ { dg-require-effective-target le }
+ {
+   { The following dg-data is representing this module: }
+   module Module_m68 =
+   def
+       pub mode Foo = struct (int i, long int l);
+       pub mode Bar = int;
+       skip
+   fed
+ }
+ { dg-data modulem68.m68 {0x0a 0x68 0x01 0x00 0x0a 0x00 0x4d 0x4f 0x44 0x55 0x4c 0x45 0x4d 0x36 0x38 0x00 0x13 0x00 0x4d 0x4f 0x44 0x55 0x4c 0x45 0x4d 0x36 0x38 0x5f 0x5f 0x70 0x72 0x65 0x6c 0x75 0x64 0x65 0x00 0x14 0x00 0x4d 0x4f 0x44 0x55 0x4c 0x45 0x4d 0x36 0x38 0x5f 0x5f 0x70 0x6f 0x73 0x74 0x6c 0x75 0x64 0x65 0x00 0x1f 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x02 0x00 0x02 0x01 0x0a 0x02 0x00 0x43 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x02 0x00 0x69 0x00 0x45 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x02 0x00 0x6c 0x00 0x52 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x21 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x02 0x0e 0x00 0x4d 0x4f 0x44 0x55 0x4c 0x45 0x4d 0x36 0x38 0x5f 0x42 0x41 0x52 0x00 0x43 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x21 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x02 0x0e 0x00 0x4d 0x4f 0x44 0x55 0x4c 0x45 0x4d 0x36 0x38 0x5f 0x46 0x4f 0x4f 0x00 0x47 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00} }
+ 
+ access Module_m68 (Foo foo; i of foo)
diff -Nrcpad gcc-16-20251221/gcc/testsuite/algol68/compile/modules/program-m68-lp64-be.a68 gcc-16-20251228/gcc/testsuite/algol68/compile/modules/program-m68-lp64-be.a68
*** gcc-16-20251221/gcc/testsuite/algol68/compile/modules/program-m68-lp64-be.a68	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/algol68/compile/modules/program-m68-lp64-be.a68	Sun Dec 28 22:32:09 2025
***************
*** 0 ****
--- 1,14 ----
+ { dg-require-effective-target lp64 }
+ { dg-require-effective-target be }
+ {
+   { The following dg-data is representing this module: }
+   module Module_m68 =
+   def
+       pub mode Foo = struct (int i, long int l);
+       pub mode Bar = int;
+       skip
+   fed
+ }
+ { dg-data modulem68.m68 {0x0a 0x68 0x00 0x01 0x00 0x0a 0x4d 0x4f 0x44 0x55 0x4c 0x45 0x4d 0x36 0x38 0x00 0x00 0x13 0x4d 0x4f 0x44 0x55 0x4c 0x45 0x4d 0x36 0x38 0x5f 0x5f 0x70 0x72 0x65 0x6c 0x75 0x64 0x65 0x00 0x00 0x14 0x4d 0x4f 0x44 0x55 0x4c 0x45 0x4d 0x36 0x38 0x5f 0x5f 0x70 0x6f 0x73 0x74 0x6c 0x75 0x64 0x65 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x1f 0x02 0x00 0x02 0x01 0x0a 0x00 0x02 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x43 0x00 0x02 0x69 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x45 0x00 0x02 0x6c 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x52 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x21 0x02 0x00 0x0e 0x4d 0x4f 0x44 0x55 0x4c 0x45 0x4d 0x36 0x38 0x5f 0x42 0x41 0x52 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x43 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x21 0x02 0x00 0x0e 0x4d 0x4f 0x44 0x55 0x4c 0x45 0x4d 0x36 0x38 0x5f 0x46 0x4f 0x4f 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x47 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00} }
+ 
+ access Module_m68 (Foo foo; i of foo)
diff -Nrcpad gcc-16-20251221/gcc/testsuite/algol68/compile/modules/program-m68-lp64.a68 gcc-16-20251228/gcc/testsuite/algol68/compile/modules/program-m68-lp64.a68
*** gcc-16-20251221/gcc/testsuite/algol68/compile/modules/program-m68-lp64.a68	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/algol68/compile/modules/program-m68-lp64.a68	Sun Dec 28 22:32:09 2025
***************
*** 0 ****
--- 1,14 ----
+ { dg-require-effective-target lp64 }
+ { dg-require-effective-target le }
+ {
+   { The following dg-data is representing this module: }
+   module Module_m68 =
+   def
+       pub mode Foo = struct (int i, long int l);
+       pub mode Bar = int;
+       skip
+   fed
+ }
+ { dg-data modulem68.m68 {0x0a 0x68 0x01 0x00 0x0a 0x00 0x4d 0x4f 0x44 0x55 0x4c 0x45 0x4d 0x36 0x38 0x00 0x13 0x00 0x4d 0x4f 0x44 0x55 0x4c 0x45 0x4d 0x36 0x38 0x5f 0x5f 0x70 0x72 0x65 0x6c 0x75 0x64 0x65 0x00 0x14 0x00 0x4d 0x4f 0x44 0x55 0x4c 0x45 0x4d 0x36 0x38 0x5f 0x5f 0x70 0x6f 0x73 0x74 0x6c 0x75 0x64 0x65 0x00 0x1f 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x02 0x00 0x02 0x01 0x0a 0x02 0x00 0x43 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x02 0x00 0x69 0x00 0x45 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x02 0x00 0x6c 0x00 0x52 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x21 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x02 0x0e 0x00 0x4d 0x4f 0x44 0x55 0x4c 0x45 0x4d 0x36 0x38 0x5f 0x42 0x41 0x52 0x00 0x43 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x21 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x02 0x0e 0x00 0x4d 0x4f 0x44 0x55 0x4c 0x45 0x4d 0x36 0x38 0x5f 0x46 0x4f 0x4f 0x00 0x47 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00} }
+ 
+ access Module_m68 (Foo foo; i of foo)
diff -Nrcpad gcc-16-20251221/gcc/testsuite/algol68/execute/modules/Modules20.map gcc-16-20251228/gcc/testsuite/algol68/execute/modules/Modules20.map
*** gcc-16-20251221/gcc/testsuite/algol68/execute/modules/Modules20.map	Sun Dec 21 22:32:08 2025
--- gcc-16-20251228/gcc/testsuite/algol68/execute/modules/Modules20.map	Sun Dec 28 22:32:09 2025
***************
*** 1,2 ****
! module-foo=Foo:
! module-bar=Bar
--- 1,2 ----
! module-foo=F_oo:
! module-bar=Bar_
diff -Nrcpad gcc-16-20251221/gcc/testsuite/algol68/execute/modules/module17.a68 gcc-16-20251228/gcc/testsuite/algol68/execute/modules/module17.a68
*** gcc-16-20251221/gcc/testsuite/algol68/execute/modules/module17.a68	Sun Dec 21 22:32:08 2025
--- gcc-16-20251228/gcc/testsuite/algol68/execute/modules/module17.a68	Sun Dec 28 22:32:09 2025
***************
*** 1,4 ****
! module Module =
  def
      pub int ce_port;
      pub string ce_host;
--- 1,4 ----
! module Module_17 =
  def
      pub int ce_port;
      pub string ce_host;
diff -Nrcpad gcc-16-20251221/gcc/testsuite/algol68/execute/modules/module18a.a68 gcc-16-20251228/gcc/testsuite/algol68/execute/modules/module18a.a68
*** gcc-16-20251221/gcc/testsuite/algol68/execute/modules/module18a.a68	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/algol68/execute/modules/module18a.a68	Sun Dec 28 22:32:09 2025
***************
*** 0 ****
--- 1 ----
+ module Module_18a = def pub int foo = 10; skip fed
diff -Nrcpad gcc-16-20251221/gcc/testsuite/algol68/execute/modules/module18b.a68 gcc-16-20251228/gcc/testsuite/algol68/execute/modules/module18b.a68
*** gcc-16-20251221/gcc/testsuite/algol68/execute/modules/module18b.a68	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/algol68/execute/modules/module18b.a68	Sun Dec 28 22:32:09 2025
***************
*** 0 ****
--- 1 ----
+ module Module_18b = access Module_18a def pub int bar = foo + 10; skip fed
diff -Nrcpad gcc-16-20251221/gcc/testsuite/algol68/execute/modules/module18c.a68 gcc-16-20251228/gcc/testsuite/algol68/execute/modules/module18c.a68
*** gcc-16-20251221/gcc/testsuite/algol68/execute/modules/module18c.a68	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/algol68/execute/modules/module18c.a68	Sun Dec 28 22:32:09 2025
***************
*** 0 ****
--- 1 ----
+ module Module_18c = def pub int baz = 30; skip fed
diff -Nrcpad gcc-16-20251221/gcc/testsuite/algol68/execute/modules/module22bar.a68 gcc-16-20251228/gcc/testsuite/algol68/execute/modules/module22bar.a68
*** gcc-16-20251221/gcc/testsuite/algol68/execute/modules/module22bar.a68	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/algol68/execute/modules/module22bar.a68	Sun Dec 28 22:32:09 2025
***************
*** 0 ****
--- 1,7 ----
+ module Module22Bar = access pub Module22Foo
+ def
+     puts ("bar prelude'n");
+     pub int bar = foo + 10;
+     skip
+ fed
+ 
diff -Nrcpad gcc-16-20251221/gcc/testsuite/algol68/execute/modules/module22foo.a68 gcc-16-20251228/gcc/testsuite/algol68/execute/modules/module22foo.a68
*** gcc-16-20251221/gcc/testsuite/algol68/execute/modules/module22foo.a68	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/algol68/execute/modules/module22foo.a68	Sun Dec 28 22:32:09 2025
***************
*** 0 ****
--- 1,4 ----
+ module Module22Foo =
+ def pub int foo = 10;
+     skip
+ fed
diff -Nrcpad gcc-16-20251221/gcc/testsuite/algol68/execute/modules/module23bar.a68 gcc-16-20251228/gcc/testsuite/algol68/execute/modules/module23bar.a68
*** gcc-16-20251221/gcc/testsuite/algol68/execute/modules/module23bar.a68	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/algol68/execute/modules/module23bar.a68	Sun Dec 28 22:32:09 2025
***************
*** 0 ****
--- 1,7 ----
+ module Module23Bar = access pub Module23Foo
+ def
+     pub mode BarMode = ref FooMode;
+     pub int bar = foo + 10;
+     skip
+ fed
+ 
diff -Nrcpad gcc-16-20251221/gcc/testsuite/algol68/execute/modules/module23foo.a68 gcc-16-20251228/gcc/testsuite/algol68/execute/modules/module23foo.a68
*** gcc-16-20251221/gcc/testsuite/algol68/execute/modules/module23foo.a68	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/algol68/execute/modules/module23foo.a68	Sun Dec 28 22:32:09 2025
***************
*** 0 ****
--- 1,5 ----
+ module Module23Foo =
+ def pub mode FooMode = struct (string name, doc);
+     pub int foo = 10;
+     skip
+ fed
diff -Nrcpad gcc-16-20251221/gcc/testsuite/algol68/execute/modules/module24.a68 gcc-16-20251228/gcc/testsuite/algol68/execute/modules/module24.a68
*** gcc-16-20251221/gcc/testsuite/algol68/execute/modules/module24.a68	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/algol68/execute/modules/module24.a68	Sun Dec 28 22:32:09 2025
***************
*** 0 ****
--- 1,4 ----
+ module Module_24 =
+ def pub prio + = 7, * = 6;
+     skip
+ fed
diff -Nrcpad gcc-16-20251221/gcc/testsuite/algol68/execute/modules/program-18.a68 gcc-16-20251228/gcc/testsuite/algol68/execute/modules/program-18.a68
*** gcc-16-20251221/gcc/testsuite/algol68/execute/modules/program-18.a68	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/algol68/execute/modules/program-18.a68	Sun Dec 28 22:32:09 2025
***************
*** 0 ****
--- 1,9 ----
+ { dg-modules "module18a module18b module18c" }
+ 
+ access Module18a,
+        Module18b,
+        Module18c
+ begin assert (foo = 10);
+       assert (bar = 20);
+       assert (baz = 30)
+ end
diff -Nrcpad gcc-16-20251221/gcc/testsuite/algol68/execute/modules/program-21.a68 gcc-16-20251228/gcc/testsuite/algol68/execute/modules/program-21.a68
*** gcc-16-20251221/gcc/testsuite/algol68/execute/modules/program-21.a68	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/algol68/execute/modules/program-21.a68	Sun Dec 28 22:32:09 2025
***************
*** 0 ****
--- 1,5 ----
+ { dg-modules "module-foo module-bar" }
+ { dg-options "-fmodules-map-file=$srcdir/algol68/execute/modules/Modules20.map" }
+ 
+ access Foo
+   access Bar (assert (foo = 10); assert (bar = 20))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/algol68/execute/modules/program-22.a68 gcc-16-20251228/gcc/testsuite/algol68/execute/modules/program-22.a68
*** gcc-16-20251221/gcc/testsuite/algol68/execute/modules/program-22.a68	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/algol68/execute/modules/program-22.a68	Sun Dec 28 22:32:09 2025
***************
*** 0 ****
--- 1,6 ----
+ { dg-modules "module22foo module22bar" }
+ 
+ access Module22Bar
+ begin assert (foo = 10);
+       assert (bar = 20)
+ end
diff -Nrcpad gcc-16-20251221/gcc/testsuite/algol68/execute/modules/program-23.a68 gcc-16-20251228/gcc/testsuite/algol68/execute/modules/program-23.a68
*** gcc-16-20251221/gcc/testsuite/algol68/execute/modules/program-23.a68	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/algol68/execute/modules/program-23.a68	Sun Dec 28 22:32:09 2025
***************
*** 0 ****
--- 1,6 ----
+ { dg-modules "module23foo module23bar" }
+ 
+ access Module23Bar
+ begin assert (foo = 10);
+       assert (bar = 20)
+ end
diff -Nrcpad gcc-16-20251221/gcc/testsuite/algol68/execute/modules/program-24.a68 gcc-16-20251228/gcc/testsuite/algol68/execute/modules/program-24.a68
*** gcc-16-20251221/gcc/testsuite/algol68/execute/modules/program-24.a68	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/algol68/execute/modules/program-24.a68	Sun Dec 28 22:32:09 2025
***************
*** 0 ****
--- 1,2 ----
+ { dg-modules module24 }
+ access Module_24 (assert (2+3 * 4+1 = 25))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/algol68/execute/pack-soids-in-moid-1.a68 gcc-16-20251228/gcc/testsuite/algol68/execute/pack-soids-in-moid-1.a68
*** gcc-16-20251221/gcc/testsuite/algol68/execute/pack-soids-in-moid-1.a68	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/algol68/execute/pack-soids-in-moid-1.a68	Sun Dec 28 22:32:09 2025
***************
*** 0 ****
--- 1,3 ----
+ begin []int lele = (1,2,3);
+       assert (ELEMS (lele) = ELEMS (lele))
+ end
diff -Nrcpad gcc-16-20251221/gcc/testsuite/g++.dg/cpp2a/concepts-friend18.C gcc-16-20251228/gcc/testsuite/g++.dg/cpp2a/concepts-friend18.C
*** gcc-16-20251221/gcc/testsuite/g++.dg/cpp2a/concepts-friend18.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/g++.dg/cpp2a/concepts-friend18.C	Sun Dec 28 22:32:11 2025
***************
*** 0 ****
--- 1,19 ----
+ // PR c++/122550
+ // { dg-do compile { target c++20 } }
+ 
+ struct Hasher;
+ template <class a>
+ concept C = true;
+ 
+ template<C T>
+ void add(Hasher&, T);
+ 
+ struct Hasher {
+     template<C T>
+     friend void add(Hasher& hasher, T integer) {}
+ };
+ 
+ int main() {
+     Hasher h;
+     add(h, 0);
+ }
diff -Nrcpad gcc-16-20251221/gcc/testsuite/g++.dg/cpp2a/concepts-friend18a.C gcc-16-20251228/gcc/testsuite/g++.dg/cpp2a/concepts-friend18a.C
*** gcc-16-20251221/gcc/testsuite/g++.dg/cpp2a/concepts-friend18a.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/g++.dg/cpp2a/concepts-friend18a.C	Sun Dec 28 22:32:11 2025
***************
*** 0 ****
--- 1,22 ----
+ // PR c++/122550
+ // { dg-do compile { target c++20 } }
+ 
+ template<typename U>
+ struct Hasher;
+ 
+ template <class a>
+ concept C = true;
+ 
+ template<C T>
+ void add(Hasher<int>&, T);
+ 
+ template<>
+ struct Hasher<int> {
+     template<C T>
+     friend void add(Hasher& hasher, T integer) {}
+ };
+ 
+ int main() {
+     Hasher<int> h;
+     add(h, 0);
+ }
diff -Nrcpad gcc-16-20251221/gcc/testsuite/g++.dg/cpp2a/lambda-targ19.C gcc-16-20251228/gcc/testsuite/g++.dg/cpp2a/lambda-targ19.C
*** gcc-16-20251221/gcc/testsuite/g++.dg/cpp2a/lambda-targ19.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/g++.dg/cpp2a/lambda-targ19.C	Sun Dec 28 22:32:11 2025
***************
*** 0 ****
--- 1,4 ----
+ // { dg-do compile { target c++20 } }
+ // PR c++/117518
+ template <auto = []<int> (auto) {}> int x;
+ int y = x<>;
diff -Nrcpad gcc-16-20251221/gcc/testsuite/g++.dg/cpp2a/partial-spec-redecl.C gcc-16-20251228/gcc/testsuite/g++.dg/cpp2a/partial-spec-redecl.C
*** gcc-16-20251221/gcc/testsuite/g++.dg/cpp2a/partial-spec-redecl.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/g++.dg/cpp2a/partial-spec-redecl.C	Sun Dec 28 22:32:11 2025
***************
*** 0 ****
--- 1,10 ----
+ // PR c++/122958
+ // { dg-do compile }
+ template <class>
+ class D;
+ 
+ template <class R, class S>
+ class D<R(S)>;
+ 
+ template <class R, class S, class Extra>
+ class D<R(S)> {}; // { dg-error "template parameters not deducible" }
diff -Nrcpad gcc-16-20251221/gcc/testsuite/g++.dg/ext/fimplicit-constexpr2.C gcc-16-20251228/gcc/testsuite/g++.dg/ext/fimplicit-constexpr2.C
*** gcc-16-20251221/gcc/testsuite/g++.dg/ext/fimplicit-constexpr2.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/g++.dg/ext/fimplicit-constexpr2.C	Sun Dec 28 22:32:11 2025
***************
*** 0 ****
--- 1,18 ----
+ // { dg-additional-options -fimplicit-constexpr }
+ // { dg-do compile { target c++23 } }
+ 
+ class A
+ {
+ public:
+   A () { asm volatile (""); } // { dg-error {inline assembly is not a constant expression} }
+   ~A () {}
+ };
+ 
+ constexpr bool
+ test ()
+ {
+   A a; // { dg-error {'A::A\(\)' called in a constant expression} }
+   return true;
+ }
+ 
+ static_assert (test ()); // { dg-error {non-constant condition for static assertion} }
diff -Nrcpad gcc-16-20251221/gcc/testsuite/g++.dg/modules/internal-17_b.C gcc-16-20251228/gcc/testsuite/g++.dg/modules/internal-17_b.C
*** gcc-16-20251221/gcc/testsuite/g++.dg/modules/internal-17_b.C	Sun Dec 21 22:32:09 2025
--- gcc-16-20251228/gcc/testsuite/g++.dg/modules/internal-17_b.C	Sun Dec 28 22:32:11 2025
***************
*** 4,14 ****
  
  module;
  
! static inline int x  // { dg-error "TU-local" }
! 		     // { dg-message "exposed elsewhere" "" { target *-*-* } .-1 }
!   = []{ return 1; }();  // { dg-message "internal" }
  
! static inline int y = []{ return 2; }();  // { dg-bogus "" }
  
  namespace {
    struct S {};
--- 4,25 ----
  
  module;
  
! namespace {
!   struct InternalX {};  // { dg-message "internal" }
!   // Only used by '::y', so should be discarded and not complain
!   struct InternalY {};  // { dg-bogus "" }
! }
  
! static inline int x() { // { dg-error "TU-local" }
! 		        // { dg-message "exposed elsewhere" "" { target *-*-* } .-1 }
!   InternalX x;
!   return 1;
! }
! 
! static inline int y() {  // { dg-bogus "" }
!   InternalY y;
!   return 2;
! }
  
  namespace {
    struct S {};
*************** void test_usage() {
*** 38,44 ****
  }
  
  inline void expose() {  // { dg-warning "exposes TU-local" }
!   int result = x;
  }
  
  // Internal linkage types always hard error
--- 49,55 ----
  }
  
  inline void expose() {  // { dg-warning "exposes TU-local" }
!   int result = x();
  }
  
  // Internal linkage types always hard error
diff -Nrcpad gcc-16-20251221/gcc/testsuite/g++.dg/modules/internal-20_a.C gcc-16-20251228/gcc/testsuite/g++.dg/modules/internal-20_a.C
*** gcc-16-20251221/gcc/testsuite/g++.dg/modules/internal-20_a.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/g++.dg/modules/internal-20_a.C	Sun Dec 28 22:32:11 2025
***************
*** 0 ****
--- 1,37 ----
+ // PR c++/122994
+ // { dg-additional-options "-fmodules -Wtemplate-names-tu-local" }
+ // { dg-module-cmi m }
+ 
+ export module m;
+ 
+ extern "C++" {
+   static int internal() { return 42; }
+ }
+ 
+ export int a = internal();
+ export int b = []{ return internal(); }();
+ 
+ export template <typename T> int c
+   = []{ return internal(); }();  // { dg-warning "refers to TU-local entity" }
+ export template <typename T> int d
+   = []{ return internal(); }();  // { dg-warning "refers to TU-local entity" }
+ template int d<int>;
+ 
+ export int e = []{
+   return []{
+     return internal();
+   }();
+ }();
+ 
+ export int f = []{
+   struct S {
+     inline int foo() {
+       return internal();
+     }
+   };
+   return S{}.foo();
+ }();
+ 
+ export extern "C++" {
+   int merge = []{ return internal(); }();
+ }
diff -Nrcpad gcc-16-20251221/gcc/testsuite/g++.dg/modules/internal-20_b.C gcc-16-20251228/gcc/testsuite/g++.dg/modules/internal-20_b.C
*** gcc-16-20251221/gcc/testsuite/g++.dg/modules/internal-20_b.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/g++.dg/modules/internal-20_b.C	Sun Dec 28 22:32:11 2025
***************
*** 0 ****
--- 1,18 ----
+ // PR c++/122994
+ // { dg-additional-options "-fmodules" }
+ 
+ static int internal() { return 42; }
+ int merge = []{ return internal(); }();
+ 
+ import m;
+ 
+ int& use_a = a;
+ int& use_b = b;
+ int& use_c = c<int>;  // { dg-message "required from here" }
+ int& use_d = d<int>;  // { dg-bogus "" }
+ int& use_d2 = d<double>;  // { dg-message "required from here" }
+ int& use_e = e;
+ int& use_f = f;
+ int& use_merge = merge;
+ 
+ // { dg-error "instantiation exposes TU-local entity" "" { target *-*-* } 0 }
diff -Nrcpad gcc-16-20251221/gcc/testsuite/g++.dg/modules/internal-20_c.C gcc-16-20251228/gcc/testsuite/g++.dg/modules/internal-20_c.C
*** gcc-16-20251221/gcc/testsuite/g++.dg/modules/internal-20_c.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/g++.dg/modules/internal-20_c.C	Sun Dec 28 22:32:11 2025
***************
*** 0 ****
--- 1,19 ----
+ // PR c++/122994
+ // { dg-additional-options "-fmodules" }
+ // { dg-module-cmi !x }
+ 
+ export module x;
+ 
+ static int internal() { return 42; }
+ 
+ auto a
+   = []{ return internal(); };  // { dg-error "exposes TU-local" }
+ 
+ auto b = []{
+   struct S {
+     inline int foo() {  // { dg-error "exposes TU-local" }
+       return internal();
+     }
+   };
+   return S{};
+ }();
diff -Nrcpad gcc-16-20251221/gcc/testsuite/g++.dg/modules/internal-21_a.C gcc-16-20251228/gcc/testsuite/g++.dg/modules/internal-21_a.C
*** gcc-16-20251221/gcc/testsuite/g++.dg/modules/internal-21_a.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/g++.dg/modules/internal-21_a.C	Sun Dec 28 22:32:11 2025
***************
*** 0 ****
--- 1,14 ----
+ // { dg-additional-options "-fmodules" }
+ // { dg-module-cmi M }
+ 
+ export module M;
+ 
+ static int internal() { return 42; }
+ 
+ // We don't error here, despite this being an exposure we really should
+ // probably complain about, because we never actually expose the lambda
+ // (the dynamic initialization just occurs in this TU and nowhere else)
+ // and so this appears to function "correctly"...
+ export inline int x = internal(); // { dg-error "exposes TU-local" "" { xfail *-*-* } }
+ export inline int y
+   = []{ return internal(); }(); // { dg-error "exposes TU-local" "" { xfail *-*-* } }
diff -Nrcpad gcc-16-20251221/gcc/testsuite/g++.dg/modules/internal-21_b.C gcc-16-20251228/gcc/testsuite/g++.dg/modules/internal-21_b.C
*** gcc-16-20251221/gcc/testsuite/g++.dg/modules/internal-21_b.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/g++.dg/modules/internal-21_b.C	Sun Dec 28 22:32:11 2025
***************
*** 0 ****
--- 1,13 ----
+ // { dg-module-do run }
+ // { dg-additional-options "-fmodules" }
+ 
+ import M;
+ 
+ // Ideally M was not built and so this file is not needed at all,
+ // but while it is, let's at least check we function correctly.
+ int main() {
+   if (x != 42)
+     __builtin_abort ();
+   if (y != 42)
+     __builtin_abort ();
+ }
diff -Nrcpad gcc-16-20251221/gcc/testsuite/g++.dg/modules/internal-4_b.C gcc-16-20251228/gcc/testsuite/g++.dg/modules/internal-4_b.C
*** gcc-16-20251221/gcc/testsuite/g++.dg/modules/internal-4_b.C	Sun Dec 21 22:32:09 2025
--- gcc-16-20251228/gcc/testsuite/g++.dg/modules/internal-4_b.C	Sun Dec 28 22:32:11 2025
*************** V* expose_v;  // { dg-error "exposes TU-
*** 66,73 ****
  static auto internal_lambda = []{ internal_f(); };  // OK
  auto expose_lambda = internal_lambda;  // { dg-error "exposes TU-local entity" }
  
  int not_in_tu_local
!   = ([]{ internal_f(); }(),  // { dg-error "exposes TU-local entity" }
       0);
  
  
--- 66,74 ----
  static auto internal_lambda = []{ internal_f(); };  // OK
  auto expose_lambda = internal_lambda;  // { dg-error "exposes TU-local entity" }
  
+ // This is OK because we ignore exposures in an initializer.
  int not_in_tu_local
!   = ([]{ internal_f(); }(),  // { dg-bogus "exposes TU-local entity" }
       0);
  
  
diff -Nrcpad gcc-16-20251221/gcc/testsuite/g++.dg/modules/tpl-friend-22.C gcc-16-20251228/gcc/testsuite/g++.dg/modules/tpl-friend-22.C
*** gcc-16-20251221/gcc/testsuite/g++.dg/modules/tpl-friend-22.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/g++.dg/modules/tpl-friend-22.C	Sun Dec 28 22:32:11 2025
***************
*** 0 ****
--- 1,24 ----
+ // PR c++/122819
+ // { dg-do compile { target *-*-*gnu* } }
+ // { dg-additional-options "-fmodules" }
+ 
+ export module M;
+ 
+ template <typename T> struct S;
+ void foo(S<float>);
+ 
+ template <typename T> struct S {
+   friend void foo(S) {}
+ };
+ 
+ void foo(S<double>);
+ 
+ void use() {
+   foo(S<int>{});
+   foo(S<float>{});
+   foo(S<double>{});
+ }
+ 
+ // { dg-final { scan-assembler "_ZW1M3fooS_1SIiE,comdat" } }
+ // { dg-final { scan-assembler "_ZW1M3fooS_1SIfE,comdat" } }
+ // { dg-final { scan-assembler "_ZW1M3fooS_1SIdE,comdat" } }
diff -Nrcpad gcc-16-20251221/gcc/testsuite/g++.dg/template/friend88.C gcc-16-20251228/gcc/testsuite/g++.dg/template/friend88.C
*** gcc-16-20251221/gcc/testsuite/g++.dg/template/friend88.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/g++.dg/template/friend88.C	Sun Dec 28 22:32:11 2025
***************
*** 0 ****
--- 1,32 ----
+ // PR c++/122819
+ // { dg-do compile { target c++11 } }
+ 
+ template <typename T> struct basic_streambuf;
+ using streambuf = basic_streambuf<char>;
+ 
+ struct S {
+   void foo();
+   template <typename T> void bar();
+ };
+ 
+ template <typename T> struct X {
+   void foo();
+ };
+ 
+ template <typename T> struct basic_streambuf {
+   void qux();
+ 
+   friend void foo();
+   friend void S::foo();
+   template <typename U> friend void S::bar();
+   template <typename U> friend void X<U>::foo();
+   template <typename U> friend void basic_streambuf<U>::qux();
+ };
+ extern template struct basic_streambuf<char>;
+ 
+ void foo() {}
+ void S::foo() {}
+ 
+ // { dg-final { scan-assembler {_Z3foov:} } }
+ // { dg-final { scan-assembler {_ZN1S3fooEv:} } }
+ // { dg-final { scan-assembler-not {comdat} } }
diff -Nrcpad gcc-16-20251221/gcc/testsuite/g++.target/aarch64/sme2/aarch64-sme2-acle-asm.exp gcc-16-20251228/gcc/testsuite/g++.target/aarch64/sme2/aarch64-sme2-acle-asm.exp
*** gcc-16-20251221/gcc/testsuite/g++.target/aarch64/sme2/aarch64-sme2-acle-asm.exp	Sun Dec 21 22:32:09 2025
--- gcc-16-20251228/gcc/testsuite/g++.target/aarch64/sme2/aarch64-sme2-acle-asm.exp	Sun Dec 28 22:32:11 2025
*************** if { [check_effective_target_aarch64_sme
*** 39,45 ****
  
  # Turn off any codegen tweaks by default that may affect expected assembly.
  # Tests relying on those should turn them on explicitly.
! set sme2_flags "$sme2_flags -mtune=generic -moverride=tune=none"
  
  global gcc_runtest_parallelize_limit_minor
  if { [info exists gcc_runtest_parallelize_limit_minor] } {
--- 39,46 ----
  
  # Turn off any codegen tweaks by default that may affect expected assembly.
  # Tests relying on those should turn them on explicitly.
! # Reduce testsuite churn when writing to fmpr
! set sme2_flags "$sme2_flags -mtune=generic -moverride=tune=none -moverride=tune=cheap_fpmr_write"
  
  global gcc_runtest_parallelize_limit_minor
  if { [info exists gcc_runtest_parallelize_limit_minor] } {
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.dg/licm-self-write-partial-alias.c gcc-16-20251228/gcc/testsuite/gcc.dg/licm-self-write-partial-alias.c
*** gcc-16-20251221/gcc/testsuite/gcc.dg/licm-self-write-partial-alias.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.dg/licm-self-write-partial-alias.c	Sun Dec 28 22:32:12 2025
***************
*** 0 ****
--- 1,31 ----
+ /* { dg-do run } */
+ /* { dg-options "-O2" } */
+ 
+ int
+ main (void)
+ {
+   /* Array element shifting - partial aliasing.  */
+   {
+     int a[6] = {0, 0, 1, 2, 0, 0};
+     unsigned char i, j;
+     for (i = 1; i != 0; ++i)
+       {
+         for (j = 1; j <= 4; j++)
+           a[j] = a[j + 1];
+       }
+     if (a[1] != 0)
+       __builtin_abort ();
+   }
+ 
+   /* Memmove with overlapping regions - partial aliasing.  */
+   {
+     unsigned char a[6] = {0, 0, 1, 2, 0, 0};
+     for (int i = 0; i < 256; i++)
+       __builtin_memmove (&a[1], &a[2], 4);
+     if (a[1] != 0)
+       __builtin_abort ();
+   }
+ 
+   return 0;
+ }
+ 
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.dg/pr123114.c gcc-16-20251228/gcc/testsuite/gcc.dg/pr123114.c
*** gcc-16-20251221/gcc/testsuite/gcc.dg/pr123114.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.dg/pr123114.c	Sun Dec 28 22:32:12 2025
***************
*** 0 ****
--- 1,21 ----
+ /* PR rtl-optimization/123114 */
+ /* { dg-do compile } */
+ /* { dg-options "-O3 -fno-tree-vrp" } */
+ 
+ volatile int a, b, g;
+ unsigned short e;
+ int f;
+ 
+ int
+ main ()
+ {
+   int c, d;
+   while (a)
+     {
+       c = e = b << 2;
+       d = f;
+       g = (c <= 0 && d) || c ? 0 : d;
+       a = g;
+     }
+   return 0;
+ }
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.dg/torture/pr123267-1.c gcc-16-20251228/gcc/testsuite/gcc.dg/torture/pr123267-1.c
*** gcc-16-20251221/gcc/testsuite/gcc.dg/torture/pr123267-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.dg/torture/pr123267-1.c	Sun Dec 28 22:32:12 2025
***************
*** 0 ****
--- 1,7 ----
+ /* { dg-do compile } */
+ 
+ /* PR rtl-optimization/123267 */
+ 
+ int j(long e, int k, int i) {
+   return (i&-3) == 0 ? k : k - e;
+ }
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.dg/tree-prof/afdo-lto_priv-basic-0.c gcc-16-20251228/gcc/testsuite/gcc.dg/tree-prof/afdo-lto_priv-basic-0.c
*** gcc-16-20251221/gcc/testsuite/gcc.dg/tree-prof/afdo-lto_priv-basic-0.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.dg/tree-prof/afdo-lto_priv-basic-0.c	Sun Dec 28 22:32:12 2025
***************
*** 0 ****
--- 1,47 ----
+ /* { dg-require-effective-target lto } */
+ /* { dg-additional-sources "afdo-lto_priv-basic-1.c" } */
+ /* { dg-options "-O2 -flto -fdump-ipa-afdo" } */
+ /* { dg-require-profiling "-fauto-profile" } */ 
+ 
+ #define TRIP 1000000000
+ 
+ /* Check against exported symbols.  */
+ __attribute__ ((noinline, noipa)) void effect_1 () {}
+ __attribute__ ((noinline, noipa)) void effect_2 () {}
+ __attribute__ ((noinline, noipa)) static int foo () { return 5; }
+ 
+ /* Prevent GCC from optimizing the loop.  */
+ __attribute__ ((noinline, noipa)) int
+ use (int x)
+ {
+   volatile int y = x;
+   return x;
+ }
+ 
+ extern void global ();
+ 
+ int
+ main ()
+ {
+   for (int i = 0; i < TRIP; i++)
+     {
+       /* Call only 50% of the time.  */
+       if (use (i) < TRIP / 2)
+ 	global ();
+ 
+       if (foo () < 5)
+ 	/* This function is never called.  */
+ 	effect_1 ();
+       else
+ 	effect_2 ();
+     }
+ }
+ 
+ /* Check that the annotation actually occurs.  */
+ /* { dg-final-use-autofdo { scan-ipa-dump-not "No afdo profile for main" afdo } } */
+ /* { dg-final-use-autofdo { scan-ipa-dump-not "No afdo profile for use" afdo } } */
+ /* { dg-final-use-autofdo { scan-ipa-dump-not "No afdo profile for foo" afdo } } */
+ /* { dg-final-use-autofdo { scan-ipa-dump-not "No afdo profile for effect_2" afdo } } */
+ 
+ /* There should be no collision with effect_1 from afdo-lto_priv-basic-1.c.  */
+ /* { dg-final-use-autofdo { scan-ipa-dump "No afdo profile for effect_1" afdo } } */
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.dg/tree-prof/afdo-lto_priv-basic-1.c gcc-16-20251228/gcc/testsuite/gcc.dg/tree-prof/afdo-lto_priv-basic-1.c
*** gcc-16-20251221/gcc/testsuite/gcc.dg/tree-prof/afdo-lto_priv-basic-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.dg/tree-prof/afdo-lto_priv-basic-1.c	Sun Dec 28 22:32:12 2025
***************
*** 0 ****
--- 1,20 ----
+ /* { dg-require-effective-target lto } */
+ /* { dg-additional-sources "afdo-lto_priv-basic-0.c" } */
+ /* { dg-options "-O2 -flto -fdump-ipa-afdo" } */
+ /* { dg-require-profiling "-fauto-profile" } */ 
+ 
+ __attribute__((noinline, noipa)) static void do_nothing() {}
+ __attribute__((noinline, noipa)) static void effect_1() { do_nothing(); }
+ __attribute__((noinline, noipa)) static void effect_2() { do_nothing(); }
+ 
+ void global()
+ {
+   effect_1();
+   effect_2();
+ }
+ 
+ /* Check that the annotation actually occurs.  */
+ /* { dg-final-use-autofdo { scan-ipa-dump-not "No afdo profile for global" afdo } } */
+ /* { dg-final-use-autofdo { scan-ipa-dump-not "No afdo profile for effect_2" afdo } } */
+ /* { dg-final-use-autofdo { scan-ipa-dump-not "No afdo profile for effect_1" afdo } } */
+ /* { dg-final-use-autofdo { scan-ipa-dump-not "No afdo profile for do_nothing" afdo } } */
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.dg/tree-prof/afdo-lto_priv-header-0.c gcc-16-20251228/gcc/testsuite/gcc.dg/tree-prof/afdo-lto_priv-header-0.c
*** gcc-16-20251221/gcc/testsuite/gcc.dg/tree-prof/afdo-lto_priv-header-0.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.dg/tree-prof/afdo-lto_priv-header-0.c	Sun Dec 28 22:32:12 2025
***************
*** 0 ****
--- 1,47 ----
+ /* { dg-require-effective-target lto } */
+ /* { dg-additional-sources "afdo-lto_priv-header-1.c" } */
+ /* { dg-options "-O2 -flto -fdump-ipa-afdo" } */
+ /* { dg-require-profiling "-fauto-profile" } */ 
+ 
+ /* Verify that symbols included from headers get their file names set and
+    compared correctly.  */
+ 
+ #define TRIP 1000000000
+ 
+ #include "afdo-lto_priv-header-0.h"
+ 
+ /* Prevent GCC from optimizing the loop.  */
+ __attribute__ ((noinline, noipa)) int
+ use (int x)
+ {
+   volatile int y = x;
+   return x;
+ }
+ 
+ extern void global ();
+ 
+ int
+ main ()
+ {
+   for (int i = 0; i < TRIP; i++)
+     {
+       /* Call only 50% of the time.  */
+       if (use (i) < TRIP / 2)
+ 	global ();
+ 
+       if (foo () < 5)
+ 	/* This function is never called.  */
+ 	effect_1 ();
+       else
+ 	effect_2 ();
+     }
+ }
+ 
+ /* Check that the annotation actually occurs.  */
+ /* { dg-final-use-autofdo { scan-ipa-dump-not "No afdo profile for main" afdo } } */
+ /* { dg-final-use-autofdo { scan-ipa-dump-not "No afdo profile for use" afdo } } */
+ /* { dg-final-use-autofdo { scan-ipa-dump-not "No afdo profile for foo" afdo } } */
+ /* { dg-final-use-autofdo { scan-ipa-dump-not "No afdo profile for effect_2" afdo } } */
+ 
+ /* There should be no collision with effect_1 from afdo-lto_priv-header-1.c.  */
+ /* { dg-final-use-autofdo { scan-ipa-dump "No afdo profile for effect_1" afdo } } */
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.dg/tree-prof/afdo-lto_priv-header-0.h gcc-16-20251228/gcc/testsuite/gcc.dg/tree-prof/afdo-lto_priv-header-0.h
*** gcc-16-20251221/gcc/testsuite/gcc.dg/tree-prof/afdo-lto_priv-header-0.h	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.dg/tree-prof/afdo-lto_priv-header-0.h	Sun Dec 28 22:32:12 2025
***************
*** 0 ****
--- 1,3 ----
+ __attribute__ ((noinline, noipa)) static void effect_1 () {}
+ __attribute__ ((noinline, noipa)) static void effect_2 () {}
+ __attribute__ ((noinline, noipa)) static int foo () { return 5; }
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.dg/tree-prof/afdo-lto_priv-header-1.c gcc-16-20251228/gcc/testsuite/gcc.dg/tree-prof/afdo-lto_priv-header-1.c
*** gcc-16-20251221/gcc/testsuite/gcc.dg/tree-prof/afdo-lto_priv-header-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.dg/tree-prof/afdo-lto_priv-header-1.c	Sun Dec 28 22:32:12 2025
***************
*** 0 ****
--- 1,18 ----
+ /* { dg-require-effective-target lto } */
+ /* { dg-additional-sources "afdo-lto_priv-header-0.c" } */
+ /* { dg-options "-O2 -flto -fdump-ipa-afdo" } */
+ /* { dg-require-profiling "-fauto-profile" } */ 
+ 
+ #include "afdo-lto_priv-header-1.h"
+ 
+ void global()
+ {
+   effect_1();
+   effect_2();
+ }
+ 
+ /* Check that the annotation actually occurs.  */
+ /* { dg-final-use-autofdo { scan-ipa-dump-not "No afdo profile for global" afdo } } */
+ /* { dg-final-use-autofdo { scan-ipa-dump-not "No afdo profile for effect_2" afdo } } */
+ /* { dg-final-use-autofdo { scan-ipa-dump-not "No afdo profile for effect_1" afdo } } */
+ /* { dg-final-use-autofdo { scan-ipa-dump-not "No afdo profile for do_nothing" afdo } } */
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.dg/tree-prof/afdo-lto_priv-header-1.h gcc-16-20251228/gcc/testsuite/gcc.dg/tree-prof/afdo-lto_priv-header-1.h
*** gcc-16-20251221/gcc/testsuite/gcc.dg/tree-prof/afdo-lto_priv-header-1.h	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.dg/tree-prof/afdo-lto_priv-header-1.h	Sun Dec 28 22:32:12 2025
***************
*** 0 ****
--- 1,3 ----
+ __attribute__((noinline, noipa)) static void do_nothing() {}
+ __attribute__((noinline, noipa)) static void effect_1() { do_nothing(); }
+ __attribute__((noinline, noipa)) static void effect_2() { do_nothing(); }
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.dg/tree-ssa/sincos-ice-on-ifn_sin-call.c gcc-16-20251228/gcc/testsuite/gcc.dg/tree-ssa/sincos-ice-on-ifn_sin-call.c
*** gcc-16-20251221/gcc/testsuite/gcc.dg/tree-ssa/sincos-ice-on-ifn_sin-call.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.dg/tree-ssa/sincos-ice-on-ifn_sin-call.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,19 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-O -fgimple" } */
+ typedef float V __attribute__ ((vector_size (16)));
+ 
+ void __GIMPLE (ssa, startwith ("sincos"))
+ foo (float * output, const float * input)
+ {
+   V a;
+   V b;
+   V c;
+   V d;
+ 
+   __BB(2):
+   a = __MEM <const V> (input);
+   b = .COS (a);
+   c = .SIN (a);
+   d = a + b;
+   return;
+ }
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/pragma_cpp_predefs_4.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/pragma_cpp_predefs_4.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/pragma_cpp_predefs_4.c	Sun Dec 21 22:32:10 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/pragma_cpp_predefs_4.c	Sun Dec 28 22:32:13 2025
***************
*** 70,75 ****
--- 70,81 ----
  #ifdef __ARM_FEATURE_SME_I16I64
  #error Foo
  #endif
+ #ifdef __ARM_FEATURE_SME_F8F16
+ #error Foo
+ #endif
+ #ifdef __ARM_FEATURE_SME_F8F32
+ #error Foo
+ #endif
  #ifdef __ARM_FEATURE_SME_B16B16
  #error Foo
  #endif
***************
*** 105,110 ****
--- 111,144 ----
  #error Foo
  #endif
  
+ #pragma GCC target "+nothing+sve2+sme-f8f16"
+ #ifndef __ARM_FEATURE_SME_F8F16
+ #error Foo
+ #endif
+ #ifndef __ARM_FEATURE_SME
+ #error Foo
+ #endif
+ #ifndef __ARM_FEATURE_SME2
+ #error Foo
+ #endif
+ #ifndef __ARM_FEATURE_FP8
+ #error Foo
+ #endif
+ 
+ #pragma GCC target "+nothing+sve2+sme-f8f32"
+ #ifndef __ARM_FEATURE_SME_F8F32
+ #error Foo
+ #endif
+ #ifndef __ARM_FEATURE_SME
+ #error Foo
+ #endif
+ #ifndef __ARM_FEATURE_SME2
+ #error Foo
+ #endif
+ #ifndef __ARM_FEATURE_FP8
+ #error Foo
+ #endif
+ 
  #pragma GCC target "+nothing+sve2+sme-f16f16"
  #ifndef __ARM_FEATURE_SME_F16F16
  #error Foo
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/read_hor_za128.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/read_hor_za128.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/read_hor_za128.c	Sun Dec 21 22:32:10 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/read_hor_za128.c	Sun Dec 28 22:32:13 2025
*************** TEST_READ_ZA (read_za128_u8_0_w0_tied, s
*** 104,109 ****
--- 104,119 ----
  	      z0 = svread_hor_za128_m (z0, p0, 0, w0))
  
  /*
+ ** read_za128_mf8_0_w0_tied:
+ **	mov	(w1[2-5]), w0
+ **	mova	z0\.q, p0/m, za0h\.q\[\1, 0\]
+ **	ret
+ */
+ TEST_READ_ZA (read_za128_mf8_0_w0_tied, svmfloat8_t,
+ 	      z0 = svread_hor_za128_mf8_m (z0, p0, 0, w0),
+ 	      z0 = svread_hor_za128_m (z0, p0, 0, w0))
+ 
+ /*
  ** read_za128_u8_0_w0_untied:
  ** (
  **	mov	(w1[2-5]), w0
*************** TEST_READ_ZA (read_za128_u8_0_w0_untied,
*** 125,130 ****
--- 135,161 ----
  	      z0 = svread_hor_za128_m (z1, p0, 0, w0))
  
  /*
+ ** read_za128_mf8_0_w0_untied:
+ ** (
+ **	mov	(w1[2-5]), w0
+ **	mov	z0\.d, z1\.d
+ **	mova	z0\.q, p0/m, za0h\.q\[\1, 0\]
+ ** |
+ **	mov	z0\.d, z1\.d
+ **	mov	(w1[2-5]), w0
+ **	mova	z0\.q, p0/m, za0h\.q\[\2, 0\]
+ ** |
+ **	mov	(w1[2-5]), w0
+ **	mova	z1\.q, p0/m, za0h\.q\[\3, 0\]
+ **	mov	z0\.d, z1\.d
+ ** )
+ **	ret
+ */
+ TEST_READ_ZA (read_za128_mf8_0_w0_untied, svmfloat8_t,
+ 	      z0 = svread_hor_za128_mf8_m (z1, p0, 0, w0),
+ 	      z0 = svread_hor_za128_m (z1, p0, 0, w0))
+ 
+ /*
  ** read_za128_s16_0_w0_tied:
  **	mov	(w1[2-5]), w0
  **	mova	z0\.q, p0/m, za0h\.q\[\1, 0\]
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/read_hor_za8.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/read_hor_za8.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/read_hor_za8.c	Sun Dec 21 22:32:10 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/read_hor_za8.c	Sun Dec 28 22:32:13 2025
*************** TEST_READ_ZA (read_za8_u8_0_w0_tied, svu
*** 104,109 ****
--- 104,119 ----
  	      z0 = svread_hor_za8_m (z0, p0, 0, w0))
  
  /*
+ ** read_za8_mf8_0_w0_tied:
+ **	mov	(w1[2-5]), w0
+ **	mova	z0\.b, p0/m, za0h\.b\[\1, 0\]
+ **	ret
+ */
+ TEST_READ_ZA (read_za8_mf8_0_w0_tied, svmfloat8_t,
+ 	      z0 = svread_hor_za8_mf8_m (z0, p0, 0, w0),
+ 	      z0 = svread_hor_za8_m (z0, p0, 0, w0))
+ 
+ /*
  ** read_za8_u8_0_w0_untied:
  ** (
  **	mov	(w1[2-5]), w0
*************** TEST_READ_ZA (read_za8_u8_0_w0_tied, svu
*** 123,125 ****
--- 133,156 ----
  TEST_READ_ZA (read_za8_u8_0_w0_untied, svuint8_t,
  	      z0 = svread_hor_za8_u8_m (z1, p0, 0, w0),
  	      z0 = svread_hor_za8_m (z1, p0, 0, w0))
+ 
+ /*
+ ** read_za8_mf8_0_w0_untied:
+ ** (
+ **	mov	(w1[2-5]), w0
+ **	mov	z0\.d, z1\.d
+ **	mova	z0\.b, p0/m, za0h\.b\[\1, 0\]
+ ** |
+ **	mov	z0\.d, z1\.d
+ **	mov	(w1[2-5]), w0
+ **	mova	z0\.b, p0/m, za0h\.b\[\2, 0\]
+ ** |
+ **	mov	(w1[2-5]), w0
+ **	mova	z1\.b, p0/m, za0h\.b\[\3, 0\]
+ **	mov	z0\.d, z1\.d
+ ** )
+ **	ret
+ */
+ TEST_READ_ZA (read_za8_mf8_0_w0_untied, svmfloat8_t,
+ 	      z0 = svread_hor_za8_mf8_m (z1, p0, 0, w0),
+ 	      z0 = svread_hor_za8_m (z1, p0, 0, w0))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/read_ver_za128.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/read_ver_za128.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/read_ver_za128.c	Sun Dec 21 22:32:10 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/read_ver_za128.c	Sun Dec 28 22:32:13 2025
*************** TEST_READ_ZA (read_za128_u8_0_w0_tied, s
*** 104,109 ****
--- 104,119 ----
  	      z0 = svread_ver_za128_m (z0, p0, 0, w0))
  
  /*
+ ** read_za128_mf8_0_w0_tied:
+ **	mov	(w1[2-5]), w0
+ **	mova	z0\.q, p0/m, za0v\.q\[\1, 0\]
+ **	ret
+ */
+ TEST_READ_ZA (read_za128_mf8_0_w0_tied, svmfloat8_t,
+ 	      z0 = svread_ver_za128_mf8_m (z0, p0, 0, w0),
+ 	      z0 = svread_ver_za128_m (z0, p0, 0, w0))
+ 
+ /*
  ** read_za128_u8_0_w0_untied:
  ** (
  **	mov	(w1[2-5]), w0
*************** TEST_READ_ZA (read_za128_u8_0_w0_untied,
*** 125,130 ****
--- 135,161 ----
  	      z0 = svread_ver_za128_m (z1, p0, 0, w0))
  
  /*
+ ** read_za128_mf8_0_w0_untied:
+ ** (
+ **	mov	(w1[2-5]), w0
+ **	mov	z0\.d, z1\.d
+ **	mova	z0\.q, p0/m, za0v\.q\[\1, 0\]
+ ** |
+ **	mov	z0\.d, z1\.d
+ **	mov	(w1[2-5]), w0
+ **	mova	z0\.q, p0/m, za0v\.q\[\2, 0\]
+ ** |
+ **	mov	(w1[2-5]), w0
+ **	mova	z1\.q, p0/m, za0v\.q\[\3, 0\]
+ **	mov	z0\.d, z1\.d
+ ** )
+ **	ret
+ */
+ TEST_READ_ZA (read_za128_mf8_0_w0_untied, svmfloat8_t,
+ 	      z0 = svread_ver_za128_mf8_m (z1, p0, 0, w0),
+ 	      z0 = svread_ver_za128_m (z1, p0, 0, w0))
+ 
+ /*
  ** read_za128_s16_0_w0_tied:
  **	mov	(w1[2-5]), w0
  **	mova	z0\.q, p0/m, za0v\.q\[\1, 0\]
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/read_ver_za8.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/read_ver_za8.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/read_ver_za8.c	Sun Dec 21 22:32:10 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/read_ver_za8.c	Sun Dec 28 22:32:13 2025
*************** TEST_READ_ZA (read_za8_u8_0_w0_tied, svu
*** 104,109 ****
--- 104,119 ----
  	      z0 = svread_ver_za8_m (z0, p0, 0, w0))
  
  /*
+ ** read_za8_mf8_0_w0_tied:
+ **	mov	(w1[2-5]), w0
+ **	mova	z0\.b, p0/m, za0v\.b\[\1, 0\]
+ **	ret
+ */
+ TEST_READ_ZA (read_za8_mf8_0_w0_tied, svmfloat8_t,
+ 	      z0 = svread_ver_za8_mf8_m (z0, p0, 0, w0),
+ 	      z0 = svread_ver_za8_m (z0, p0, 0, w0))
+ 
+ /*
  ** read_za8_u8_0_w0_untied:
  ** (
  **	mov	(w1[2-5]), w0
*************** TEST_READ_ZA (read_za8_u8_0_w0_tied, svu
*** 123,125 ****
--- 133,156 ----
  TEST_READ_ZA (read_za8_u8_0_w0_untied, svuint8_t,
  	      z0 = svread_ver_za8_u8_m (z1, p0, 0, w0),
  	      z0 = svread_ver_za8_m (z1, p0, 0, w0))
+ 
+ /*
+ ** read_za8_mf8_0_w0_untied:
+ ** (
+ **	mov	(w1[2-5]), w0
+ **	mov	z0\.d, z1\.d
+ **	mova	z0\.b, p0/m, za0v\.b\[\1, 0\]
+ ** |
+ **	mov	z0\.d, z1\.d
+ **	mov	(w1[2-5]), w0
+ **	mova	z0\.b, p0/m, za0v\.b\[\2, 0\]
+ ** |
+ **	mov	(w1[2-5]), w0
+ **	mova	z1\.b, p0/m, za0v\.b\[\3, 0\]
+ **	mov	z0\.d, z1\.d
+ ** )
+ **	ret
+ */
+ TEST_READ_ZA (read_za8_mf8_0_w0_untied, svmfloat8_t,
+ 	      z0 = svread_ver_za8_mf8_m (z1, p0, 0, w0),
+ 	      z0 = svread_ver_za8_m (z1, p0, 0, w0))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_mf8.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_mf8.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_mf8.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/revd_mf8.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,76 ----
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme_acle.h"
+ 
+ /*
+ ** revd_mf8_m_tied12:
+ **	revd	z0\.q, p0/m, z0\.q
+ **	ret
+ */
+ TEST_UNIFORM_Z (revd_mf8_m_tied12, svmfloat8_t,
+ 		z0 = svrevd_mf8_m (z0, p0, z0),
+ 		z0 = svrevd_m (z0, p0, z0))
+ 
+ /*
+ ** revd_mf8_m_tied1:
+ **	revd	z0\.q, p0/m, z1\.q
+ **	ret
+ */
+ TEST_UNIFORM_Z (revd_mf8_m_tied1, svmfloat8_t,
+ 		z0 = svrevd_mf8_m (z0, p0, z1),
+ 		z0 = svrevd_m (z0, p0, z1))
+ 
+ /*
+ ** revd_mf8_m_tied2:
+ **	mov	(z[0-9]+)\.d, z0\.d
+ **	movprfx	z0, z1
+ **	revd	z0\.q, p0/m, \1\.q
+ **	ret
+ */
+ TEST_UNIFORM_Z (revd_mf8_m_tied2, svmfloat8_t,
+ 		z0 = svrevd_mf8_m (z1, p0, z0),
+ 		z0 = svrevd_m (z1, p0, z0))
+ 
+ /*
+ ** revd_mf8_m_untied:
+ **	movprfx	z0, z2
+ **	revd	z0\.q, p0/m, z1\.q
+ **	ret
+ */
+ TEST_UNIFORM_Z (revd_mf8_m_untied, svmfloat8_t,
+ 		z0 = svrevd_mf8_m (z2, p0, z1),
+ 		z0 = svrevd_m (z2, p0, z1))
+ 
+ /* Awkward register allocation.  Don't require specific output.  */
+ TEST_UNIFORM_Z (revd_mf8_z_tied1, svmfloat8_t,
+ 		z0 = svrevd_mf8_z (p0, z0),
+ 		z0 = svrevd_z (p0, z0))
+ 
+ /*
+ ** revd_mf8_z_untied:
+ **	movi?	[vdz]0\.?(?:[0-9]*[bhsd])?, #?0
+ **	revd	z0\.q, p0/m, z1\.q
+ **	ret
+ */
+ TEST_UNIFORM_Z (revd_mf8_z_untied, svmfloat8_t,
+ 		z0 = svrevd_mf8_z (p0, z1),
+ 		z0 = svrevd_z (p0, z1))
+ 
+ /*
+ ** revd_mf8_x_tied1:
+ **	revd	z0\.q, p0/m, z0\.q
+ **	ret
+ */
+ TEST_UNIFORM_Z (revd_mf8_x_tied1, svmfloat8_t,
+ 		z0 = svrevd_mf8_x (p0, z0),
+ 		z0 = svrevd_x (p0, z0))
+ 
+ /*
+ ** revd_mf8_x_untied:
+ **	movprfx	z0, z1
+ **	revd	z0\.q, p0/m, z1\.q
+ **	ret
+ */
+ TEST_UNIFORM_Z (revd_mf8_x_untied, svmfloat8_t,
+ 		z0 = svrevd_mf8_x (p0, z1),
+ 		z0 = svrevd_x (p0, z1))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/test_sme_acle.h gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/test_sme_acle.h
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/test_sme_acle.h	Sun Dec 21 22:32:10 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/test_sme_acle.h	Sun Dec 28 22:32:13 2025
***************
*** 46,52 ****
  
  #define TEST_UNIFORM_ZA(NAME, TYPE, CODE1, CODE2)		\
    PROTO (NAME, void, (TYPE z0, TYPE z1, svbool_t p0,		\
! 		      svbool_t p1))				\
    {								\
      INVOKE (CODE1, CODE2);					\
    }
--- 46,52 ----
  
  #define TEST_UNIFORM_ZA(NAME, TYPE, CODE1, CODE2)		\
    PROTO (NAME, void, (TYPE z0, TYPE z1, svbool_t p0,		\
! 		      svbool_t p1, fpm_t fpm0))			\
    {								\
      INVOKE (CODE1, CODE2);					\
    }
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/write_hor_za128.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/write_hor_za128.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/write_hor_za128.c	Sun Dec 21 22:32:10 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/write_hor_za128.c	Sun Dec 28 22:32:13 2025
*************** TEST_WRITE_ZA (write_za128_u8_0_w0_z0, s
*** 93,98 ****
--- 93,108 ----
  	       svwrite_hor_za128_m (0, w0, p0, z0))
  
  /*
+ ** write_za128_mf8_0_w0_z0:
+ **	mov	(w1[2-5]), w0
+ **	mova	za0h\.q\[\1, 0\], p0/m, z0\.q
+ **	ret
+ */
+ TEST_WRITE_ZA (write_za128_mf8_0_w0_z0, svmfloat8_t,
+ 	       svwrite_hor_za128_mf8_m (0, w0, p0, z0),
+ 	       svwrite_hor_za128_m (0, w0, p0, z0))
+ 
+ /*
  ** write_za128_s16_0_w0_z0:
  **	mov	(w1[2-5]), w0
  **	mova	za0h\.q\[\1, 0\], p0/m, z0\.q
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/write_hor_za8.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/write_hor_za8.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/write_hor_za8.c	Sun Dec 21 22:32:10 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/write_hor_za8.c	Sun Dec 28 22:32:13 2025
*************** TEST_WRITE_ZA (write_za8_s8_0_w0_z1, svi
*** 91,93 ****
--- 91,103 ----
  TEST_WRITE_ZA (write_za8_u8_0_w0_z0, svuint8_t,
  	       svwrite_hor_za8_u8_m (0, w0, p0, z0),
  	       svwrite_hor_za8_m (0, w0, p0, z0))
+ 
+ /*
+ ** write_za8_mf8_0_w0_z0:
+ **	mov	(w1[2-5]), w0
+ **	mova	za0h\.b\[\1, 0\], p0/m, z0\.b
+ **	ret
+ */
+ TEST_WRITE_ZA (write_za8_mf8_0_w0_z0, svmfloat8_t,
+ 	       svwrite_hor_za8_mf8_m (0, w0, p0, z0),
+ 	       svwrite_hor_za8_m (0, w0, p0, z0))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/write_ver_za128.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/write_ver_za128.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/write_ver_za128.c	Sun Dec 21 22:32:10 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/write_ver_za128.c	Sun Dec 28 22:32:13 2025
*************** TEST_WRITE_ZA (write_za128_u8_0_w0_z0, s
*** 93,98 ****
--- 93,108 ----
  	       svwrite_ver_za128_m (0, w0, p0, z0))
  
  /*
+ ** write_za128_mf8_0_w0_z0:
+ **	mov	(w1[2-5]), w0
+ **	mova	za0v\.q\[\1, 0\], p0/m, z0\.q
+ **	ret
+ */
+ TEST_WRITE_ZA (write_za128_mf8_0_w0_z0, svmfloat8_t,
+ 	       svwrite_ver_za128_mf8_m (0, w0, p0, z0),
+ 	       svwrite_ver_za128_m (0, w0, p0, z0))
+ 
+ /*
  ** write_za128_s16_0_w0_z0:
  **	mov	(w1[2-5]), w0
  **	mova	za0v\.q\[\1, 0\], p0/m, z0\.q
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/write_ver_za8.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/write_ver_za8.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/write_ver_za8.c	Sun Dec 21 22:32:10 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/write_ver_za8.c	Sun Dec 28 22:32:13 2025
*************** TEST_WRITE_ZA (write_za8_s8_0_w0_z1, svi
*** 91,93 ****
--- 91,103 ----
  TEST_WRITE_ZA (write_za8_u8_0_w0_z0, svuint8_t,
  	       svwrite_ver_za8_u8_m (0, w0, p0, z0),
  	       svwrite_ver_za8_m (0, w0, p0, z0))
+ 
+ /*
+ ** write_za8_mf8_0_w0_z0:
+ **	mov	(w1[2-5]), w0
+ **	mova	za0v\.b\[\1, 0\], p0/m, z0\.b
+ **	ret
+ */
+ TEST_WRITE_ZA (write_za8_mf8_0_w0_z0, svmfloat8_t,
+ 	       svwrite_ver_za8_mf8_m (0, w0, p0, z0),
+ 	       svwrite_ver_za8_m (0, w0, p0, z0))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/aarch64-sme2-acle-asm.exp gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/aarch64-sme2-acle-asm.exp
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/aarch64-sme2-acle-asm.exp	Sun Dec 21 22:32:10 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/aarch64-sme2-acle-asm.exp	Sun Dec 28 22:32:13 2025
*************** if { [check_effective_target_aarch64_sme
*** 39,45 ****
  
  # Turn off any codegen tweaks by default that may affect expected assembly.
  # Tests relying on those should turn them on explicitly.
! set sme2_flags "$sme2_flags -mtune=generic -moverride=tune=none"
  
  global gcc_runtest_parallelize_limit_minor
  if { [info exists gcc_runtest_parallelize_limit_minor] } {
--- 39,46 ----
  
  # Turn off any codegen tweaks by default that may affect expected assembly.
  # Tests relying on those should turn them on explicitly.
! # Reduce testsuite churn when writing to fmpr
! set sme2_flags "$sme2_flags -mtune=generic -moverride=tune=none -moverride=tune=cheap_fpmr_write"
  
  global gcc_runtest_parallelize_limit_minor
  if { [info exists gcc_runtest_parallelize_limit_minor] } {
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/cvt_mf8_bf16_x2.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/cvt_mf8_bf16_x2.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/cvt_mf8_bf16_x2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/cvt_mf8_bf16_x2.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,56 ----
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #pragma GCC target "+fp8+bf16"
+ #include "test_sme2_acle.h"
+ 
+ /*
+ ** cvt_z0_z0:
+ **	msr	fpmr, x0
+ **	bfcvt	z0\.b, {z0\.h - z1\.h}
+ **	ret
+ */
+ TEST_X2_NARROW (cvt_z0_z0, svbfloat16x2_t, svmfloat8_t,
+ 		z0_res = svcvt_mf8_bf16_x2_fpm (z0, fpm0),
+ 		z0_res = svcvt_mf8_fpm (z0, fpm0))
+ 
+ /*
+ ** cvt_z0_z6:
+ **	msr	fpmr, x0
+ **	bfcvt	z0\.b, {z6\.h - z7\.h}
+ **	ret
+ */
+ TEST_X2_NARROW (cvt_z0_z6, svbfloat16x2_t, svmfloat8_t,
+ 		z0_res = svcvt_mf8_bf16_x2_fpm (z6, fpm0),
+ 		z0_res = svcvt_mf8_fpm (z6, fpm0))
+ 
+ /*
+ ** cvt_z0_z29:
+ **	msr	fpmr, x0
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	bfcvt	z0\.b, [^\n]+
+ **	ret
+ */
+ TEST_X2_NARROW (cvt_z0_z29, svbfloat16x2_t, svmfloat8_t,
+ 		z0_res = svcvt_mf8_bf16_x2_fpm (z29, fpm0),
+ 		z0_res = svcvt_mf8_fpm (z29, fpm0))
+ 
+ /*
+ ** cvt_z5_z0:
+ **	msr	fpmr, x0
+ **	bfcvt	z5\.b, {z0\.h - z1\.h}
+ **	ret
+ */
+ TEST_X2_NARROW (cvt_z5_z0, svbfloat16x2_t, svmfloat8_t,
+ 		z5 = svcvt_mf8_bf16_x2_fpm (z0, fpm0),
+ 		z5 = svcvt_mf8_fpm (z0, fpm0))
+ 
+ /*
+ ** cvt_z22_z16:
+ **	msr	fpmr, x0
+ **	bfcvt	z22\.b, {z16\.h - z17\.h}
+ **	ret
+ */
+ TEST_X2_NARROW (cvt_z22_z16, svbfloat16x2_t, svmfloat8_t,
+ 		z22 = svcvt_mf8_bf16_x2_fpm (z16, fpm0),
+ 		z22 = svcvt_mf8_fpm (z16, fpm0))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/cvt_mf8_f16_x2.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/cvt_mf8_f16_x2.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/cvt_mf8_f16_x2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/cvt_mf8_f16_x2.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,56 ----
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ #pragma GCC target "+fp8"
+ 
+ /*
+ ** cvt_z0_z0:
+ **	msr	fpmr, x0
+ **	fcvt	z0\.b, {z0\.h - z1\.h}
+ **	ret
+ */
+ TEST_X2_NARROW (cvt_z0_z0, svfloat16x2_t, svmfloat8_t,
+ 		z0_res = svcvt_mf8_f16_x2_fpm (z0, fpm0),
+ 		z0_res = svcvt_mf8_fpm (z0, fpm0))
+ 
+ /*
+ ** cvt_z0_z6:
+ **	msr	fpmr, x0
+ **	fcvt	z0\.b, {z6\.h - z7\.h}
+ **	ret
+ */
+ TEST_X2_NARROW (cvt_z0_z6, svfloat16x2_t, svmfloat8_t,
+ 		z0_res = svcvt_mf8_f16_x2_fpm (z6, fpm0),
+ 		z0_res = svcvt_mf8_fpm (z6, fpm0))
+ 
+ /*
+ ** cvt_z0_z29:
+ **	msr	fpmr, x0
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	fcvt	z0\.b, {z0\.h - z1\.h}
+ **	ret
+ */
+ TEST_X2_NARROW (cvt_z0_z29, svfloat16x2_t, svmfloat8_t,
+ 		z0_res = svcvt_mf8_f16_x2_fpm (z29, fpm0),
+ 		z0_res = svcvt_mf8_fpm (z29, fpm0))
+ 
+ /*
+ ** cvt_z5_z0:
+ **	msr	fpmr, x0
+ **	fcvt	z5\.b, {z0\.h - z1\.h}
+ **	ret
+ */
+ TEST_X2_NARROW (cvt_z5_z0, svfloat16x2_t, svmfloat8_t,
+ 		z5 = svcvt_mf8_f16_x2_fpm (z0, fpm0),
+ 		z5 = svcvt_mf8_fpm (z0, fpm0))
+ 
+ /*
+ ** cvt_z22_z16:
+ **	msr	fpmr, x0
+ **	fcvt	z22\.b, {z16\.h - z17\.h}
+ **	ret
+ */
+ TEST_X2_NARROW (cvt_z22_z16, svfloat16x2_t, svmfloat8_t,
+ 		z22 = svcvt_mf8_f16_x2_fpm (z16, fpm0),
+ 		z22 = svcvt_mf8_fpm (z16, fpm0))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/cvt_mf8_f32_x4.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/cvt_mf8_f32_x4.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/cvt_mf8_f32_x4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/cvt_mf8_f32_x4.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,72 ----
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ #pragma GCC target "+fp8"
+ 
+ /*
+ ** cvt_z0_z0:
+ **	msr	fpmr, x0
+ **	fcvt	z0\.b, {z0\.s - z3\.s}
+ **	ret
+ */
+ TEST_X4_NARROW (cvt_z0_z0, svfloat32x4_t, svmfloat8_t,
+ 		z0_res = svcvt_mf8_f32_x4_fpm (z0, fpm0),
+ 		z0_res = svcvt_mf8_fpm (z0, fpm0))
+ 
+ /*
+ ** cvt_z0_z4:
+ **	msr	fpmr, x0
+ **	fcvt	z0\.b, {z4\.s - z7\.s}
+ **	ret
+ */
+ TEST_X4_NARROW (cvt_z0_z4, svfloat32x4_t, svmfloat8_t,
+ 		z0_res = svcvt_mf8_f32_x4_fpm (z4, fpm0),
+ 		z0_res = svcvt_mf8_fpm (z4, fpm0))
+ 
+ /*
+ ** cvt_z0_z21:
+ **	msr	fpmr, x0
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	fcvt	z0\.b, [^\n]+
+ **	ret
+ */
+ TEST_X4_NARROW (cvt_z0_z21, svfloat32x4_t, svmfloat8_t,
+ 		z0_res = svcvt_mf8_f32_x4_fpm (z21, fpm0),
+ 		z0_res = svcvt_mf8_fpm (z21, fpm0))
+ 
+ /*
+ ** cvt_z25_z26:
+ **	msr	fpmr, x0
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	fcvt	z25\.b, {z28\.s - z31\.s}
+ **	ret
+ */
+ TEST_X4_NARROW (cvt_z25_z26, svfloat32x4_t, svmfloat8_t,
+ 		z25 = svcvt_mf8_f32_x4_fpm (z26, fpm0),
+ 		z25 = svcvt_mf8_fpm (z26, fpm0))
+ 
+ /*
+ ** cvt_z25_z0:
+ **	msr	fpmr, x0
+ **	fcvt	z25\.b, {z0\.s - z3\.s}
+ **	ret
+ */
+ TEST_X4_NARROW (cvt_z25_z0, svfloat32x4_t, svmfloat8_t,
+ 	z25 = svcvt_mf8_f32_x4_fpm (z0, fpm0),
+ 	z25 = svcvt_mf8_fpm (z0, fpm0))
+ 
+ /*
+ ** cvt_z22_z16:
+ **	msr	fpmr, x0
+ **	fcvt	z22\.b, {z16\.s - z19\.s}
+ **	ret
+ */
+ TEST_X4_NARROW (cvt_z22_z16, svfloat32x4_t, svmfloat8_t,
+ 	z22_res = svcvt_mf8_f32_x4_fpm (z16, fpm0),
+ 	z22_res = svcvt_mf8_fpm (z16, fpm0))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/cvt_mf8_x2.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/cvt_mf8_x2.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/cvt_mf8_x2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/cvt_mf8_x2.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,47 ----
+ /* { dg-do assemble { target { aarch64_asm_fp8_ok && aarch64_asm_sme2_ok } } } */
+ /* { dg-do compile { target { ! { aarch64_asm_fp8_ok && aarch64_asm_sme2_ok } } } } */
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ 
+ #pragma GCC target "+fp8"
+ 
+ /*
+ ** cvt1_f16_mf8_x2_fpm:
+ **	msr	fpmr, x0
+ **	f1cvt	{z0\.h - z1\.h}, z0\.b
+ **	ret
+ */
+ TEST_X2_WIDE (cvt1_f16_mf8_x2_fpm, svfloat16x2_t, svmfloat8_t,
+ 	      z0_res = svcvt1_f16_mf8_x2_fpm (z0, fpm0),
+ 	      z0_res = svcvt1_f16_x2_fpm (z0, fpm0))
+ 
+ /*
+ ** cvt1_bf16_mf8_x2_fpm:
+ **	msr	fpmr, x0
+ **	bf1cvt	{z0\.h - z1\.h}, z0\.b
+ **	ret
+ */
+ TEST_X2_WIDE (cvt1_bf16_mf8_x2_fpm, svbfloat16x2_t, svmfloat8_t,
+ 	      z0_res = svcvt1_bf16_mf8_x2_fpm (z0, fpm0),
+ 	      z0_res = svcvt1_bf16_x2_fpm (z0, fpm0))
+ 
+ /*
+ ** cvt2_f16_mf8_x2_fpm:
+ **	msr	fpmr, x0
+ **	f2cvt	{z0\.h - z1\.h}, z0\.b
+ **	ret
+ */
+ TEST_X2_WIDE (cvt2_f16_mf8_x2_fpm, svfloat16x2_t, svmfloat8_t,
+ 	      z0_res = svcvt2_f16_mf8_x2_fpm (z0, fpm0),
+ 	      z0_res = svcvt2_f16_x2_fpm (z0, fpm0))
+ 
+ /*
+ ** cvt2_bf16_mf8_x2_fpm:
+ **	msr	fpmr, x0
+ **	bf2cvt	{z0\.h - z1\.h}, z0\.b
+ **	ret
+ */
+ TEST_X2_WIDE (cvt2_bf16_mf8_x2_fpm, svbfloat16x2_t, svmfloat8_t,
+ 	      z0_res = svcvt2_bf16_mf8_x2_fpm (z0, fpm0),
+ 	      z0_res = svcvt2_bf16_x2_fpm (z0, fpm0))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/cvtl_mf8_x2.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/cvtl_mf8_x2.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/cvtl_mf8_x2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/cvtl_mf8_x2.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,47 ----
+ /* { dg-do assemble { target { aarch64_asm_fp8_ok && aarch64_asm_sme2_ok } } } */
+ /* { dg-do compile { target { ! { aarch64_asm_fp8_ok && aarch64_asm_sme2_ok } } } } */
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ 
+ #pragma GCC target "+fp8"
+ 
+ /*
+ ** cvtl1_f16_mf8_x2_fpm:
+ **	msr	fpmr, x0
+ **	f1cvtl	{z0\.h - z1\.h}, z0\.b
+ **	ret
+ */
+ TEST_X2_WIDE (cvtl1_f16_mf8_x2_fpm, svfloat16x2_t, svmfloat8_t,
+ 	      z0_res = svcvtl1_f16_mf8_x2_fpm (z0, fpm0),
+ 	      z0_res = svcvtl1_f16_x2_fpm (z0, fpm0))
+ 
+ /*
+ ** cvtl1_bf16_mf8_x2_fpm:
+ **	msr	fpmr, x0
+ **	bf1cvtl	{z0\.h - z1\.h}, z0\.b
+ **	ret
+ */
+ TEST_X2_WIDE (cvtl1_bf16_mf8_x2_fpm, svbfloat16x2_t, svmfloat8_t,
+ 	      z0_res = svcvtl1_bf16_mf8_x2_fpm (z0, fpm0),
+ 	      z0_res = svcvtl1_bf16_x2_fpm (z0, fpm0))
+ 
+ /*
+ ** cvtl2_f16_mf8_x2_fpm:
+ **	msr	fpmr, x0
+ **	f2cvtl	{z0\.h - z1\.h}, z0\.b
+ **	ret
+ */
+ TEST_X2_WIDE (cvtl2_f16_mf8_x2_fpm, svfloat16x2_t, svmfloat8_t,
+ 	      z0_res = svcvtl2_f16_mf8_x2_fpm (z0, fpm0),
+ 	      z0_res = svcvtl2_f16_x2_fpm (z0, fpm0))
+ 
+ /*
+ ** cvtl2_bf16_mf8_x2_fpm:
+ **	msr	fpmr, x0
+ **	bf2cvtl	{z0\.h - z1\.h}, z0\.b
+ **	ret
+ */
+ TEST_X2_WIDE (cvtl2_bf16_mf8_x2_fpm, svbfloat16x2_t, svmfloat8_t,
+ 	      z0_res = svcvtl2_bf16_mf8_x2_fpm (z0, fpm0),
+ 	      z0_res = svcvtl2_bf16_x2_fpm (z0, fpm0))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/cvtn_mf8_f32_x4.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/cvtn_mf8_f32_x4.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/cvtn_mf8_f32_x4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/cvtn_mf8_f32_x4.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,72 ----
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ #pragma GCC target "+fp8"
+ 
+ /*
+ ** cvtn_z0_z0:
+ **	msr	fpmr, x0
+ **	fcvtn	z0\.b, {z0\.s - z3\.s}
+ **	ret
+ */
+ TEST_X4_NARROW (cvtn_z0_z0, svfloat32x4_t, svmfloat8_t,
+ 		z0_res = svcvtn_mf8_f32_x4_fpm (z0, fpm0),
+ 		z0_res = svcvtn_mf8_fpm (z0, fpm0))
+ 
+ /*
+ ** cvtn_z0_z4:
+ **	msr	fpmr, x0
+ **	fcvtn	z0\.b, {z4\.s - z7\.s}
+ **	ret
+ */
+ TEST_X4_NARROW (cvtn_z0_z4, svfloat32x4_t, svmfloat8_t,
+ 		z0_res = svcvtn_mf8_f32_x4_fpm (z4, fpm0),
+ 		z0_res = svcvtn_mf8_fpm (z4, fpm0))
+ 
+ /*
+ ** cvtn_z0_z21:
+ **	msr	fpmr, x0
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	fcvtn	z0\.b, [^\n]+
+ **	ret
+ */
+ TEST_X4_NARROW (cvtn_z0_z21, svfloat32x4_t, svmfloat8_t,
+ 		z0_res = svcvtn_mf8_f32_x4_fpm (z21, fpm0),
+ 		z0_res = svcvtn_mf8_fpm (z21, fpm0))
+ 
+ /*
+ ** cvtn_z25_z26:
+ **	msr	fpmr, x0
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	fcvtn	z25\.b, {z28\.s - z31\.s}
+ **	ret
+ */
+ TEST_X4_NARROW (cvtn_z25_z26, svfloat32x4_t, svmfloat8_t,
+ 		z25 = svcvtn_mf8_f32_x4_fpm (z26, fpm0),
+ 		z25 = svcvtn_mf8_fpm (z26, fpm0))
+ 
+ /*
+ ** cvtn_z25_z0:
+ **	msr	fpmr, x0
+ **	fcvtn	z25\.b, {z0\.s - z3\.s}
+ **	ret
+ */
+ TEST_X4_NARROW (cvtn_z25_z0, svfloat32x4_t, svmfloat8_t,
+ 	z25 = svcvtn_mf8_f32_x4_fpm (z0, fpm0),
+ 	z25 = svcvtn_mf8_fpm (z0, fpm0))
+ 
+ /*
+ ** cvtn_z22_z16:
+ **	msr	fpmr, x0
+ **	fcvtn	z22\.b, {z16\.s - z19\.s}
+ **	ret
+ */
+ TEST_X4_NARROW (cvtn_z22_z16, svfloat32x4_t, svmfloat8_t,
+ 	z22_res = svcvtn_mf8_f32_x4_fpm (z16, fpm0),
+ 	z22_res = svcvtn_mf8_fpm (z16, fpm0))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_lane_za16_mf8_vg1x2.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_lane_za16_mf8_vg1x2.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_lane_za16_mf8_vg1x2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_lane_za16_mf8_vg1x2.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,119 ----
+ /* { dg-do assemble { target { aarch64_asm_sme-f8f16_ok } } } */
+ /* { dg-do compile { target { ! { aarch64_asm_sme-f8f16_ok } } } } */
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ #pragma GCC target "+sve2,+sme-f8f16"
+ 
+ /* Available variants are:
+    _za16 if __ARM_FEATURE_SME_F8F16 != 0
+    void svdot_lane_za16[_mf8]_vg1x2_fpm (uint32_t slice, svmfloat8x2_t zn, svmfloat8_t zm, uint64_t imm_idx, fpm_t fpm) __arm_streaming __arm_inout("za");  */
+ 
+ /*
+ ** dot_lane_0_z0_z4_0:
+ **	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), #?0
+ **	fdot	za\.h\[\1, 0, vgx2\], {z0\.b - z1\.b}, z4\.b\[0\]
+ **	ret
+ */
+ TEST_ZA_LANE (dot_lane_0_z0_z4_0, svmfloat8x2_t, svmfloat8_t,
+ 	      svdot_lane_za16_mf8_vg1x2_fpm (0, z0, z4, 0, fpm0),
+ 	      svdot_lane_za16_vg1x2_fpm (0, z0, z4, 0, fpm0))
+ 
+ /*
+ ** dot_lane_w0_z0_z7_1:
+ **	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), w0
+ **	fdot	za\.h\[\1, 0, vgx2\], {z0\.b - z1\.b}, z7\.b\[1\]
+ **	ret
+ */
+ TEST_ZA_LANE (dot_lane_w0_z0_z7_1, svmfloat8x2_t, svmfloat8_t,
+ 	      svdot_lane_za16_mf8_vg1x2_fpm (w0, z0, z7, 1, fpm0),
+ 	      svdot_lane_za16_vg1x2_fpm (w0, z0, z7, 1, fpm0))
+ 
+ /*
+ ** dot_lane_w8_z28_z4_2:
+ **	msr	fpmr, x1
+ **	fdot	za\.h\[w8, 0, vgx2\], {z28\.b - z29\.b}, z4\.b\[2\]
+ **	ret
+ */
+ TEST_ZA_LANE (dot_lane_w8_z28_z4_2, svmfloat8x2_t, svmfloat8_t,
+ 	      svdot_lane_za16_mf8_vg1x2_fpm (w8, z28, z4, 2, fpm0),
+ 	      svdot_lane_za16_vg1x2_fpm (w8, z28, z4, 2, fpm0))
+ 
+ /*
+ ** dot_lane_w8p7_z0_z4_3:
+ **	msr	fpmr, x1
+ **	fdot	za\.h\[w8, 7, vgx2\], {z0\.b - z1\.b}, z4\.b\[3\]
+ **	ret
+ */
+ TEST_ZA_LANE (dot_lane_w8p7_z0_z4_3, svmfloat8x2_t, svmfloat8_t,
+ 	      svdot_lane_za16_mf8_vg1x2_fpm (w8 + 7, z0, z4, 3, fpm0),
+ 	      svdot_lane_za16_vg1x2_fpm (w8 + 7, z0, z4, 3, fpm0))
+ 
+ /*
+ ** dot_lane_w8p8_z0_z4_0:
+ **	add	(w8|w9|w10|w11), w8, #?8
+ **	msr	fpmr, x1
+ **	fdot	za\.h\[\1, 0, vgx2\], {z0\.b - z1\.b}, z4\.b\[0\]
+ **	ret
+ */
+ TEST_ZA_LANE (dot_lane_w8p8_z0_z4_0, svmfloat8x2_t, svmfloat8_t,
+ 	      svdot_lane_za16_mf8_vg1x2_fpm (w8 + 8, z0, z4, 0, fpm0),
+ 	      svdot_lane_za16_vg1x2_fpm (w8 + 8, z0, z4, 0, fpm0))
+ 
+ /*
+ ** dot_lane_w0m1_z0_z4_1:
+ **	sub	(w8|w9|w10|w11), w0, #?1
+ **	msr	fpmr, x1
+ **	fdot	za\.h\[\1, 0, vgx2\], {z0\.b - z1\.b}, z4\.b\[1\]
+ **	ret
+ */
+ TEST_ZA_LANE (dot_lane_w0m1_z0_z4_1, svmfloat8x2_t, svmfloat8_t,
+ 	      svdot_lane_za16_mf8_vg1x2_fpm (w0 - 1, z0, z4, 1, fpm0),
+ 	      svdot_lane_za16_vg1x2_fpm (w0 - 1, z0, z4, 1, fpm0))
+ 
+ /*
+ ** dot_lane_w8_z4_z15_2:
+ **	str	d15, \[sp, #?-16\]!
+ **	msr	fpmr, x1
+ **	fdot	za\.h\[w8, 0, vgx2\], {z4\.b - z5\.b}, z15\.b\[2\]
+ **	ldr	d15, \[sp\], #?16
+ **	ret
+ */
+ TEST_ZA_LANE_Z15 (dot_lane_w8_z4_z15_2, svmfloat8x2_t, svmfloat8_t,
+ 		  svdot_lane_za16_mf8_vg1x2_fpm (w8, z4, z15, 2, fpm0),
+ 		  svdot_lane_za16_vg1x2_fpm (w8, z4, z15, 2, fpm0))
+ 
+ /*
+ ** dot_lane_w8_z28_z16_3:
+ **	msr	fpmr, x1
+ **	mov	(z[0-7]).d, z16.d
+ **	fdot	za\.h\[w8, 0, vgx2\], {z28\.b - z29\.b}, \1\.b\[3\]
+ **	ret
+ */
+ TEST_ZA_LANE (dot_lane_w8_z28_z16_3, svmfloat8x2_t, svmfloat8_t,
+ 	      svdot_lane_za16_mf8_vg1x2_fpm (w8, z28, z16, 3, fpm0),
+ 	      svdot_lane_za16_vg1x2_fpm (w8, z28, z16, 3, fpm0))
+ 
+ /*
+ ** dot_lane_w8_z17_z7_0:
+ **	msr	fpmr, x1
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	fdot	za\.h\[w8, 0, vgx2\], [^\n]+, z7\.b\[0\]
+ **	ret
+ */
+ TEST_ZA_LANE (dot_lane_w8_z17_z7_0, svmfloat8x2_t, svmfloat8_t,
+ 	      svdot_lane_za16_mf8_vg1x2_fpm (w8, z17, z7, 0, fpm0),
+ 	      svdot_lane_za16_vg1x2_fpm (w8, z17, z7, 0, fpm0))
+ 
+ /*
+ ** dot_lane_w8_z22_z4_1:
+ **	msr	fpmr, x1
+ **	fdot	za\.h\[w8, 0, vgx2\], {z22\.b - z23\.b}, z4\.b\[1\]
+ **	ret
+ */
+ TEST_ZA_LANE (dot_lane_w8_z22_z4_1, svmfloat8x2_t, svmfloat8_t,
+ 	      svdot_lane_za16_mf8_vg1x2_fpm (w8, z22, z4, 1, fpm0),
+ 	      svdot_lane_za16_vg1x2_fpm (w8, z22, z4, 1, fpm0))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_lane_za16_mf8_vg1x4.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_lane_za16_mf8_vg1x4.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_lane_za16_mf8_vg1x4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_lane_za16_mf8_vg1x4.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,125 ----
+ /* { dg-do assemble { target { aarch64_asm_sme-f8f16_ok } } } */
+ /* { dg-do compile { target { ! { aarch64_asm_sme-f8f16_ok } } } } */
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ #pragma GCC target "+sve2,+sme-f8f16"
+ 
+ /* Available variants are:
+    _za16 if __ARM_FEATURE_SME_F8F16 != 0
+    void svdot_lane_za16[_mf8]_vg1x4_fpm (uint32_t slice, svmfloat8x4_t zn, svmfloat8_t zm, uint64_t imm_idx, fpm_t fpm) __arm_streaming __arm_inout("za");  */
+ 
+ /*
+ ** dot_lane_0_z0_z4_0:
+ **	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), #?0
+ **	fdot	za\.h\[\1, 0, vgx4\], {z0\.b - z3\.b}, z4\.b\[0\]
+ **	ret
+ */
+ TEST_ZA_LANE (dot_lane_0_z0_z4_0, svmfloat8x4_t, svmfloat8_t,
+ 	      svdot_lane_za16_mf8_vg1x4_fpm (0, z0, z4, 0, fpm0),
+ 	      svdot_lane_za16_vg1x4_fpm (0, z0, z4, 0, fpm0))
+ 
+ /*
+ ** dot_lane_w0_z0_z7_1:
+ **	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), w0
+ **	fdot	za\.h\[\1, 0, vgx4\], {z0\.b - z3\.b}, z7\.b\[1\]
+ **	ret
+ */
+ TEST_ZA_LANE (dot_lane_w0_z0_z7_1, svmfloat8x4_t, svmfloat8_t,
+ 	      svdot_lane_za16_mf8_vg1x4_fpm (w0, z0, z7, 1, fpm0),
+ 	      svdot_lane_za16_vg1x4_fpm (w0, z0, z7, 1, fpm0))
+ 
+ /*
+ ** dot_lane_w8_z28_z4_2:
+ **	msr	fpmr, x1
+ **	fdot	za\.h\[w8, 0, vgx4\], {z28\.b - z31\.b}, z4\.b\[2\]
+ **	ret
+ */
+ TEST_ZA_LANE (dot_lane_w8_z28_z4_2, svmfloat8x4_t, svmfloat8_t,
+ 	      svdot_lane_za16_mf8_vg1x4_fpm (w8, z28, z4, 2, fpm0),
+ 	      svdot_lane_za16_vg1x4_fpm (w8, z28, z4, 2, fpm0))
+ 
+ /*
+ ** dot_lane_w8p7_z0_z4_3:
+ **	msr	fpmr, x1
+ **	fdot	za\.h\[w8, 7, vgx4\], {z0\.b - z3\.b}, z4\.b\[3\]
+ **	ret
+ */
+ TEST_ZA_LANE (dot_lane_w8p7_z0_z4_3, svmfloat8x4_t, svmfloat8_t,
+ 	      svdot_lane_za16_mf8_vg1x4_fpm (w8 + 7, z0, z4, 3, fpm0),
+ 	      svdot_lane_za16_vg1x4_fpm (w8 + 7, z0, z4, 3, fpm0))
+ 
+ /*
+ ** dot_lane_w8p8_z0_z4_0:
+ **	add	(w8|w9|w10|w11), w8, #?8
+ **	msr	fpmr, x1
+ **	fdot	za\.h\[\1, 0, vgx4\], {z0\.b - z3\.b}, z4\.b\[0\]
+ **	ret
+ */
+ TEST_ZA_LANE (dot_lane_w8p8_z0_z4_0, svmfloat8x4_t, svmfloat8_t,
+ 	      svdot_lane_za16_mf8_vg1x4_fpm (w8 + 8, z0, z4, 0, fpm0),
+ 	      svdot_lane_za16_vg1x4_fpm (w8 + 8, z0, z4, 0, fpm0))
+ 
+ /*
+ ** dot_lane_w0m1_z0_z4_1:
+ **	sub	(w8|w9|w10|w11), w0, #?1
+ **	msr	fpmr, x1
+ **	fdot	za\.h\[\1, 0, vgx4\], {z0\.b - z3\.b}, z4\.b\[1\]
+ **	ret
+ */
+ TEST_ZA_LANE (dot_lane_w0m1_z0_z4_1, svmfloat8x4_t, svmfloat8_t,
+ 	      svdot_lane_za16_mf8_vg1x4_fpm (w0 - 1, z0, z4, 1, fpm0),
+ 	      svdot_lane_za16_vg1x4_fpm (w0 - 1, z0, z4, 1, fpm0))
+ 
+ /*
+ ** dot_lane_w8_z4_z15_2:
+ **	str	d15, \[sp, #?-16\]!
+ **	msr	fpmr, x1
+ **	fdot	za\.h\[w8, 0, vgx4\], {z4\.b - z7\.b}, z15\.b\[2\]
+ **	ldr	d15, \[sp\], #?16
+ **	ret
+ */
+ TEST_ZA_LANE_Z15 (dot_lane_w8_z4_z15_2, svmfloat8x4_t, svmfloat8_t,
+ 		  svdot_lane_za16_mf8_vg1x4_fpm (w8, z4, z15, 2, fpm0),
+ 		  svdot_lane_za16_vg1x4_fpm (w8, z4, z15, 2, fpm0))
+ 
+ /*
+ ** dot_lane_w8_z28_z16_3:
+ **	msr	fpmr, x1
+ **	mov	(z[0-7]).d, z16.d
+ **	fdot	za\.h\[w8, 0, vgx4\], {z28\.b - z31\.b}, \1\.b\[3\]
+ **	ret
+ */
+ TEST_ZA_LANE (dot_lane_w8_z28_z16_3, svmfloat8x4_t, svmfloat8_t,
+ 	      svdot_lane_za16_mf8_vg1x4_fpm (w8, z28, z16, 3, fpm0),
+ 	      svdot_lane_za16_vg1x4_fpm (w8, z28, z16, 3, fpm0))
+ 
+ /*
+ ** dot_lane_w8_z17_z7_0:
+ **	msr	fpmr, x1
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	fdot	za\.h\[w8, 0, vgx4\], [^\n]+, z7\.b\[0\]
+ **	ret
+ */
+ TEST_ZA_LANE (dot_lane_w8_z17_z7_0, svmfloat8x4_t, svmfloat8_t,
+ 	      svdot_lane_za16_mf8_vg1x4_fpm (w8, z17, z7, 0, fpm0),
+ 	      svdot_lane_za16_vg1x4_fpm (w8, z17, z7, 0, fpm0))
+ 
+ /*
+ ** dot_lane_w8_z22_z4_1:
+ **	msr	fpmr, x1
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	fdot	za\.h\[w8, 0, vgx4\], {z28\.b - z31\.b}, z4\.b\[1\]
+ **	ret
+ */
+ TEST_ZA_LANE (dot_lane_w8_z22_z4_1, svmfloat8x4_t, svmfloat8_t,
+ 	      svdot_lane_za16_mf8_vg1x4_fpm (w8, z22, z4, 1, fpm0),
+ 	      svdot_lane_za16_vg1x4_fpm (w8, z22, z4, 1, fpm0))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_lane_za32_mf8_vg1x2.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_lane_za32_mf8_vg1x2.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_lane_za32_mf8_vg1x2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_lane_za32_mf8_vg1x2.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,119 ----
+ /* { dg-do assemble { target { aarch64_asm_sme-f8f32_ok } } } */
+ /* { dg-do compile { target { ! { aarch64_asm_sme-f8f32_ok } } } } */
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ #pragma GCC target "+sve2,+sme-f8f32"
+ 
+ /* Available variants are:
+    _za32 if __ARM_FEATURE_SME_F8F32 != 0
+    void svdot_lane_za32[_mf8]_vg1x2_fpm (uint32_t slice, svmfloat8x2_t zn, svmfloat8_t zm, uint64_t imm_idx, fpm_t fpm) __arm_streaming __arm_inout("za");  */
+ 
+ /*
+ ** dot_lane_0_z0_z4_0:
+ **	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), #?0
+ **	fdot	za\.s\[\1, 0, vgx2\], {z0\.b - z1\.b}, z4\.b\[0\]
+ **	ret
+ */
+ TEST_ZA_LANE (dot_lane_0_z0_z4_0, svmfloat8x2_t, svmfloat8_t,
+ 	      svdot_lane_za32_mf8_vg1x2_fpm (0, z0, z4, 0, fpm0),
+ 	      svdot_lane_za32_vg1x2_fpm (0, z0, z4, 0, fpm0))
+ 
+ /*
+ ** dot_lane_w0_z0_z7_1:
+ **	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), w0
+ **	fdot	za\.s\[\1, 0, vgx2\], {z0\.b - z1\.b}, z7\.b\[1\]
+ **	ret
+ */
+ TEST_ZA_LANE (dot_lane_w0_z0_z7_1, svmfloat8x2_t, svmfloat8_t,
+ 	      svdot_lane_za32_mf8_vg1x2_fpm (w0, z0, z7, 1, fpm0),
+ 	      svdot_lane_za32_vg1x2_fpm (w0, z0, z7, 1, fpm0))
+ 
+ /*
+ ** dot_lane_w8_z28_z4_2:
+ **	msr	fpmr, x1
+ **	fdot	za\.s\[w8, 0, vgx2\], {z28\.b - z29\.b}, z4\.b\[2\]
+ **	ret
+ */
+ TEST_ZA_LANE (dot_lane_w8_z28_z4_2, svmfloat8x2_t, svmfloat8_t,
+ 	      svdot_lane_za32_mf8_vg1x2_fpm (w8, z28, z4, 2, fpm0),
+ 	      svdot_lane_za32_vg1x2_fpm (w8, z28, z4, 2, fpm0))
+ 
+ /*
+ ** dot_lane_w8p7_z0_z4_3:
+ **	msr	fpmr, x1
+ **	fdot	za\.s\[w8, 7, vgx2\], {z0\.b - z1\.b}, z4\.b\[3\]
+ **	ret
+ */
+ TEST_ZA_LANE (dot_lane_w8p7_z0_z4_3, svmfloat8x2_t, svmfloat8_t,
+ 	      svdot_lane_za32_mf8_vg1x2_fpm (w8 + 7, z0, z4, 3, fpm0),
+ 	      svdot_lane_za32_vg1x2_fpm (w8 + 7, z0, z4, 3, fpm0))
+ 
+ /*
+ ** dot_lane_w8p8_z0_z4_0:
+ **	add	(w8|w9|w10|w11), w8, #?8
+ **	msr	fpmr, x1
+ **	fdot	za\.s\[\1, 0, vgx2\], {z0\.b - z1\.b}, z4\.b\[0\]
+ **	ret
+ */
+ TEST_ZA_LANE (dot_lane_w8p8_z0_z4_0, svmfloat8x2_t, svmfloat8_t,
+ 	      svdot_lane_za32_mf8_vg1x2_fpm (w8 + 8, z0, z4, 0, fpm0),
+ 	      svdot_lane_za32_vg1x2_fpm (w8 + 8, z0, z4, 0, fpm0))
+ 
+ /*
+ ** dot_lane_w0m1_z0_z4_1:
+ **	sub	(w8|w9|w10|w11), w0, #?1
+ **	msr	fpmr, x1
+ **	fdot	za\.s\[\1, 0, vgx2\], {z0\.b - z1\.b}, z4\.b\[1\]
+ **	ret
+ */
+ TEST_ZA_LANE (dot_lane_w0m1_z0_z4_1, svmfloat8x2_t, svmfloat8_t,
+ 	      svdot_lane_za32_mf8_vg1x2_fpm (w0 - 1, z0, z4, 1, fpm0),
+ 	      svdot_lane_za32_vg1x2_fpm (w0 - 1, z0, z4, 1, fpm0))
+ 
+ /*
+ ** dot_lane_w8_z4_z15_2:
+ **	str	d15, \[sp, #?-16\]!
+ **	msr	fpmr, x1
+ **	fdot	za\.s\[w8, 0, vgx2\], {z4\.b - z5\.b}, z15\.b\[2\]
+ **	ldr	d15, \[sp\], #?16
+ **	ret
+ */
+ TEST_ZA_LANE_Z15 (dot_lane_w8_z4_z15_2, svmfloat8x2_t, svmfloat8_t,
+ 		  svdot_lane_za32_mf8_vg1x2_fpm (w8, z4, z15, 2, fpm0),
+ 		  svdot_lane_za32_vg1x2_fpm (w8, z4, z15, 2, fpm0))
+ 
+ /*
+ ** dot_lane_w8_z28_z16_3:
+ **	msr	fpmr, x1
+ **	mov	(z[0-7]).d, z16.d
+ **	fdot	za\.s\[w8, 0, vgx2\], {z28\.b - z29\.b}, \1\.b\[3\]
+ **	ret
+ */
+ TEST_ZA_LANE (dot_lane_w8_z28_z16_3, svmfloat8x2_t, svmfloat8_t,
+ 	      svdot_lane_za32_mf8_vg1x2_fpm (w8, z28, z16, 3, fpm0),
+ 	      svdot_lane_za32_vg1x2_fpm (w8, z28, z16, 3, fpm0))
+ 
+ /*
+ ** dot_lane_w8_z17_z7_0:
+ **	msr	fpmr, x1
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	fdot	za\.s\[w8, 0, vgx2\], [^\n]+, z7\.b\[0\]
+ **	ret
+ */
+ TEST_ZA_LANE (dot_lane_w8_z17_z7_0, svmfloat8x2_t, svmfloat8_t,
+ 	      svdot_lane_za32_mf8_vg1x2_fpm (w8, z17, z7, 0, fpm0),
+ 	      svdot_lane_za32_vg1x2_fpm (w8, z17, z7, 0, fpm0))
+ 
+ /*
+ ** dot_lane_w8_z22_z4_1:
+ **	msr	fpmr, x1
+ **	fdot	za\.s\[w8, 0, vgx2\], {z22\.b - z23\.b}, z4\.b\[1\]
+ **	ret
+ */
+ TEST_ZA_LANE (dot_lane_w8_z22_z4_1, svmfloat8x2_t, svmfloat8_t,
+ 	      svdot_lane_za32_mf8_vg1x2_fpm (w8, z22, z4, 1, fpm0),
+ 	      svdot_lane_za32_vg1x2_fpm (w8, z22, z4, 1, fpm0))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_lane_za32_mf8_vg1x4.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_lane_za32_mf8_vg1x4.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_lane_za32_mf8_vg1x4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_lane_za32_mf8_vg1x4.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,125 ----
+ /* { dg-do assemble { target { aarch64_asm_sme-f8f32_ok } } } */
+ /* { dg-do compile { target { ! { aarch64_asm_sme-f8f32_ok } } } } */
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ #pragma GCC target "+sve2,+sme-f8f32"
+ 
+ /* Available variants are:
+    _za32 if __ARM_FEATURE_SME_F8F32 != 0
+    void svdot_lane_za32[_mf8]_vg1x4_fpm (uint32_t slice, svmfloat8x4_t zn, svmfloat8_t zm, uint64_t imm_idx, fpm_t fpm) __arm_streaming __arm_inout("za");  */
+ 
+ /*
+ ** dot_lane_0_z0_z4_0:
+ **	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), #?0
+ **	fdot	za\.s\[\1, 0, vgx4\], {z0\.b - z3\.b}, z4\.b\[0\]
+ **	ret
+ */
+ TEST_ZA_LANE (dot_lane_0_z0_z4_0, svmfloat8x4_t, svmfloat8_t,
+ 	      svdot_lane_za32_mf8_vg1x4_fpm (0, z0, z4, 0, fpm0),
+ 	      svdot_lane_za32_vg1x4_fpm (0, z0, z4, 0, fpm0))
+ 
+ /*
+ ** dot_lane_w0_z0_z7_1:
+ **	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), w0
+ **	fdot	za\.s\[\1, 0, vgx4\], {z0\.b - z3\.b}, z7\.b\[1\]
+ **	ret
+ */
+ TEST_ZA_LANE (dot_lane_w0_z0_z7_1, svmfloat8x4_t, svmfloat8_t,
+ 	      svdot_lane_za32_mf8_vg1x4_fpm (w0, z0, z7, 1, fpm0),
+ 	      svdot_lane_za32_vg1x4_fpm (w0, z0, z7, 1, fpm0))
+ 
+ /*
+ ** dot_lane_w8_z28_z4_2:
+ **	msr	fpmr, x1
+ **	fdot	za\.s\[w8, 0, vgx4\], {z28\.b - z31\.b}, z4\.b\[2\]
+ **	ret
+ */
+ TEST_ZA_LANE (dot_lane_w8_z28_z4_2, svmfloat8x4_t, svmfloat8_t,
+ 	      svdot_lane_za32_mf8_vg1x4_fpm (w8, z28, z4, 2, fpm0),
+ 	      svdot_lane_za32_vg1x4_fpm (w8, z28, z4, 2, fpm0))
+ 
+ /*
+ ** dot_lane_w8p7_z0_z4_3:
+ **	msr	fpmr, x1
+ **	fdot	za\.s\[w8, 7, vgx4\], {z0\.b - z3\.b}, z4\.b\[3\]
+ **	ret
+ */
+ TEST_ZA_LANE (dot_lane_w8p7_z0_z4_3, svmfloat8x4_t, svmfloat8_t,
+ 	      svdot_lane_za32_mf8_vg1x4_fpm (w8 + 7, z0, z4, 3, fpm0),
+ 	      svdot_lane_za32_vg1x4_fpm (w8 + 7, z0, z4, 3, fpm0))
+ 
+ /*
+ ** dot_lane_w8p8_z0_z4_0:
+ **	add	(w8|w9|w10|w11), w8, #?8
+ **	msr	fpmr, x1
+ **	fdot	za\.s\[\1, 0, vgx4\], {z0\.b - z3\.b}, z4\.b\[0\]
+ **	ret
+ */
+ TEST_ZA_LANE (dot_lane_w8p8_z0_z4_0, svmfloat8x4_t, svmfloat8_t,
+ 	      svdot_lane_za32_mf8_vg1x4_fpm (w8 + 8, z0, z4, 0, fpm0),
+ 	      svdot_lane_za32_vg1x4_fpm (w8 + 8, z0, z4, 0, fpm0))
+ 
+ /*
+ ** dot_lane_w0m1_z0_z4_1:
+ **	sub	(w8|w9|w10|w11), w0, #?1
+ **	msr	fpmr, x1
+ **	fdot	za\.s\[\1, 0, vgx4\], {z0\.b - z3\.b}, z4\.b\[1\]
+ **	ret
+ */
+ TEST_ZA_LANE (dot_lane_w0m1_z0_z4_1, svmfloat8x4_t, svmfloat8_t,
+ 	      svdot_lane_za32_mf8_vg1x4_fpm (w0 - 1, z0, z4, 1, fpm0),
+ 	      svdot_lane_za32_vg1x4_fpm (w0 - 1, z0, z4, 1, fpm0))
+ 
+ /*
+ ** dot_lane_w8_z4_z15_2:
+ **	str	d15, \[sp, #?-16\]!
+ **	msr	fpmr, x1
+ **	fdot	za\.s\[w8, 0, vgx4\], {z4\.b - z7\.b}, z15\.b\[2\]
+ **	ldr	d15, \[sp\], #?16
+ **	ret
+ */
+ TEST_ZA_LANE_Z15 (dot_lane_w8_z4_z15_2, svmfloat8x4_t, svmfloat8_t,
+ 		  svdot_lane_za32_mf8_vg1x4_fpm (w8, z4, z15, 2, fpm0),
+ 		  svdot_lane_za32_vg1x4_fpm (w8, z4, z15, 2, fpm0))
+ 
+ /*
+ ** dot_lane_w8_z28_z16_3:
+ **	msr	fpmr, x1
+ **	mov	(z[0-7]).d, z16.d
+ **	fdot	za\.s\[w8, 0, vgx4\], {z28\.b - z31\.b}, \1\.b\[3\]
+ **	ret
+ */
+ TEST_ZA_LANE (dot_lane_w8_z28_z16_3, svmfloat8x4_t, svmfloat8_t,
+ 	      svdot_lane_za32_mf8_vg1x4_fpm (w8, z28, z16, 3, fpm0),
+ 	      svdot_lane_za32_vg1x4_fpm (w8, z28, z16, 3, fpm0))
+ 
+ /*
+ ** dot_lane_w8_z17_z7_0:
+ **	msr	fpmr, x1
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	fdot	za\.s\[w8, 0, vgx4\], [^\n]+, z7\.b\[0\]
+ **	ret
+ */
+ TEST_ZA_LANE (dot_lane_w8_z17_z7_0, svmfloat8x4_t, svmfloat8_t,
+ 	      svdot_lane_za32_mf8_vg1x4_fpm (w8, z17, z7, 0, fpm0),
+ 	      svdot_lane_za32_vg1x4_fpm (w8, z17, z7, 0, fpm0))
+ 
+ /*
+ ** dot_lane_w8_z22_z4_1:
+ **	msr	fpmr, x1
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	fdot	za\.s\[w8, 0, vgx4\], {z28\.b - z31\.b}, z4\.b\[1\]
+ **	ret
+ */
+ TEST_ZA_LANE (dot_lane_w8_z22_z4_1, svmfloat8x4_t, svmfloat8_t,
+ 	      svdot_lane_za32_mf8_vg1x4_fpm (w8, z22, z4, 1, fpm0),
+ 	      svdot_lane_za32_vg1x4_fpm (w8, z22, z4, 1, fpm0))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_single_za16_mf8_vg1x2.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_single_za16_mf8_vg1x2.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_single_za16_mf8_vg1x2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_single_za16_mf8_vg1x2.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,126 ----
+ /* { dg-do assemble { target { aarch64_asm_sme-f8f16_ok } } } */
+ /* { dg-do compile { target { ! { aarch64_asm_sme-f8f16_ok } } } } */
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ #pragma GCC target "+sve2,+sme-f8f16"
+ 
+ /* Available variants are:
+    _za16 if __ARM_FEATURE_SME_F8F16 != 0
+    void svdot[_single]_za16[_mf8]_vg1x2_fpm (uint32_t slice, svmfloat8x2_t zn, svmfloat8_t zm, fpm_t fpm) __arm_streaming __arm_inout("za");  */
+ /*
+ ** dot_single_0_z1_z0:
+ **	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), #?0
+ **	fdot	za\.h\[\1, 0, vgx2\], {z1\.b - z2\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (dot_single_0_z1_z0, svmfloat8x2_t, svmfloat8_t,
+ 		svdot_single_za16_mf8_vg1x2_fpm (0, z1, z0, fpm0),
+ 		svdot_za16_vg1x2_fpm (0, z1, z0, fpm0))
+ 
+ /*
+ ** dot_single_w0_z1_z0:
+ **	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), w0
+ **	fdot	za\.h\[\1, 0, vgx2\], {z1\.b - z2\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (dot_single_w0_z1_z0, svmfloat8x2_t, svmfloat8_t,
+ 		svdot_single_za16_mf8_vg1x2_fpm (w0, z1, z0, fpm0),
+ 		svdot_za16_vg1x2_fpm (w0, z1, z0, fpm0))
+ 
+ /*
+ ** dot_single_w8_z1_z0:
+ **	msr	fpmr, x1
+ **	fdot	za\.h\[w8, 0, vgx2\], {z1\.b - z2\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (dot_single_w8_z1_z0, svmfloat8x2_t, svmfloat8_t,
+ 		svdot_single_za16_mf8_vg1x2_fpm (w8, z1, z0, fpm0),
+ 		svdot_za16_vg1x2_fpm (w8, z1, z0, fpm0))
+ 
+ /*
+ ** dot_single_w8p1_z1_z0:
+ **	msr	fpmr, x1
+ **	fdot	za\.h\[w8, 1, vgx2\], {z1\.b - z2\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (dot_single_w8p1_z1_z0, svmfloat8x2_t, svmfloat8_t,
+ 		svdot_single_za16_mf8_vg1x2_fpm (w8 + 1, z1, z0, fpm0),
+ 		svdot_za16_vg1x2_fpm (w8 + 1, z1, z0, fpm0))
+ 
+ /*
+ ** dot_single_w8p2_z20_z0:
+ **	msr	fpmr, x1
+ **	fdot	za\.h\[w8, 2, vgx2\], {z20\.b - z21\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (dot_single_w8p2_z20_z0, svmfloat8x2_t, svmfloat8_t,
+ 		svdot_single_za16_mf8_vg1x2_fpm (w8 + 2, z20, z0, fpm0),
+ 		svdot_za16_vg1x2_fpm (w8 + 2, z20, z0, fpm0))
+ 
+ /*
+ ** dot_single_w11p4_z27_z0:
+ **	msr	fpmr, x1
+ **	fdot	za\.h\[w11, 4, vgx2\], {z27\.b - z28\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (dot_single_w11p4_z27_z0, svmfloat8x2_t, svmfloat8_t,
+ 		svdot_single_za16_mf8_vg1x2_fpm (w11 + 4, z27, z0, fpm0),
+ 		svdot_za16_vg1x2_fpm (w11 + 4, z27, z0, fpm0))
+ 
+ /*
+ ** dot_single_w8p7_z1_z0:
+ **	msr	fpmr, x1
+ **	fdot	za\.h\[w8, 7, vgx2\], {z1\.b - z2\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (dot_single_w8p7_z1_z0, svmfloat8x2_t, svmfloat8_t,
+ 		svdot_single_za16_mf8_vg1x2_fpm (w8 + 7, z1, z0, fpm0),
+ 		svdot_za16_vg1x2_fpm (w8 + 7, z1, z0, fpm0))
+ 
+ /*
+ ** dot_single_w8p8_z1_z0:
+ **	add	(w8|w9|w10|w11), w8, #?8
+ **	msr	fpmr, x1
+ **	fdot	za\.h\[\1, 0, vgx2\], {z1\.b - z2\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (dot_single_w8p8_z1_z0, svmfloat8x2_t, svmfloat8_t,
+ 		svdot_single_za16_mf8_vg1x2_fpm (w8 + 8, z1, z0, fpm0),
+ 		svdot_za16_vg1x2_fpm (w8 + 8, z1, z0, fpm0))
+ 
+ /*
+ ** dot_single_w0m1_z1_z0:
+ **	sub	(w8|w9|w10|w11), w0, #?1
+ **	msr	fpmr, x1
+ **	fdot	za\.h\[\1, 0, vgx2\], {z1\.b - z2\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (dot_single_w0m1_z1_z0, svmfloat8x2_t, svmfloat8_t,
+ 		svdot_single_za16_mf8_vg1x2_fpm (w0 - 1, z1, z0, fpm0),
+ 		svdot_za16_vg1x2_fpm (w0 - 1, z1, z0, fpm0))
+ 
+ /*
+ ** dot_single_w8_z0_z15:
+ **	str	d15, \[sp, #?-16\]!
+ **	msr	fpmr, x1
+ **	fdot	za\.h\[w8, 0, vgx2\], {z0\.b - z1\.b}, z15\.b
+ **	ldr	d15, \[sp\], #?16
+ **	ret
+ */
+ TEST_ZA_SINGLE_Z15 (dot_single_w8_z0_z15, svmfloat8x2_t, svmfloat8_t,
+ 		    svdot_single_za16_mf8_vg1x2_fpm (w8, z0, z15, fpm0),
+ 		    svdot_za16_vg1x2_fpm (w8, z0, z15, fpm0))
+ 
+ /*
+ ** dot_single_w8_z20_z16:
+ **	msr	fpmr, x1
+ **	mov	(z[0-7]).d, z16.d
+ **	fdot	za\.h\[w8, 0, vgx2\], {z20\.b - z21\.b}, \1\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (dot_single_w8_z20_z16, svmfloat8x2_t, svmfloat8_t,
+ 		svdot_single_za16_mf8_vg1x2_fpm (w8, z20, z16, fpm0),
+ 		svdot_za16_vg1x2_fpm (w8, z20, z16, fpm0))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_single_za16_mf8_vg1x4.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_single_za16_mf8_vg1x4.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_single_za16_mf8_vg1x4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_single_za16_mf8_vg1x4.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,126 ----
+ /* { dg-do assemble { target { aarch64_asm_sme-f8f16_ok } } } */
+ /* { dg-do compile { target { ! { aarch64_asm_sme-f8f16_ok } } } } */
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ #pragma GCC target "+sve2,+sme-f8f16"
+ 
+ /* Available variants are:
+    _za16 if __ARM_FEATURE_SME_F8F16 != 0
+    void svdot[_single]_za16[_mf8]_vg1x4_fpm (uint32_t slice, svmfloat8x4_t zn, svmfloat8_t zm, fpm_t fpm) __arm_streaming __arm_inout("za");  */
+ /*
+ ** dot_single_0_z1_z0:
+ **	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), #?0
+ **	fdot	za\.h\[\1, 0, vgx4\], {z1\.b - z4\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (dot_single_0_z1_z0, svmfloat8x4_t, svmfloat8_t,
+ 		svdot_single_za16_mf8_vg1x4_fpm (0, z1, z0, fpm0),
+ 		svdot_za16_vg1x4_fpm (0, z1, z0, fpm0))
+ 
+ /*
+ ** dot_single_w0_z1_z0:
+ **	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), w0
+ **	fdot	za\.h\[\1, 0, vgx4\], {z1\.b - z4\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (dot_single_w0_z1_z0, svmfloat8x4_t, svmfloat8_t,
+ 		svdot_single_za16_mf8_vg1x4_fpm (w0, z1, z0, fpm0),
+ 		svdot_za16_vg1x4_fpm (w0, z1, z0, fpm0))
+ 
+ /*
+ ** dot_single_w8_z1_z0:
+ **	msr	fpmr, x1
+ **	fdot	za\.h\[w8, 0, vgx4\], {z1\.b - z4\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (dot_single_w8_z1_z0, svmfloat8x4_t, svmfloat8_t,
+ 		svdot_single_za16_mf8_vg1x4_fpm (w8, z1, z0, fpm0),
+ 		svdot_za16_vg1x4_fpm (w8, z1, z0, fpm0))
+ 
+ /*
+ ** dot_single_w8p1_z1_z0:
+ **	msr	fpmr, x1
+ **	fdot	za\.h\[w8, 1, vgx4\], {z1\.b - z4\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (dot_single_w8p1_z1_z0, svmfloat8x4_t, svmfloat8_t,
+ 		svdot_single_za16_mf8_vg1x4_fpm (w8 + 1, z1, z0, fpm0),
+ 		svdot_za16_vg1x4_fpm (w8 + 1, z1, z0, fpm0))
+ 
+ /*
+ ** dot_single_w8p2_z20_z0:
+ **	msr	fpmr, x1
+ **	fdot	za\.h\[w8, 2, vgx4\], {z20\.b - z23\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (dot_single_w8p2_z20_z0, svmfloat8x4_t, svmfloat8_t,
+ 		svdot_single_za16_mf8_vg1x4_fpm (w8 + 2, z20, z0, fpm0),
+ 		svdot_za16_vg1x4_fpm (w8 + 2, z20, z0, fpm0))
+ 
+ /*
+ ** dot_single_w11p4_z27_z0:
+ **	msr	fpmr, x1
+ **	fdot	za\.h\[w11, 4, vgx4\], {z27\.b - z30\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (dot_single_w11p4_z27_z0, svmfloat8x4_t, svmfloat8_t,
+ 		svdot_single_za16_mf8_vg1x4_fpm (w11 + 4, z27, z0, fpm0),
+ 		svdot_za16_vg1x4_fpm (w11 + 4, z27, z0, fpm0))
+ 
+ /*
+ ** dot_single_w8p7_z1_z0:
+ **	msr	fpmr, x1
+ **	fdot	za\.h\[w8, 7, vgx4\], {z1\.b - z4\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (dot_single_w8p7_z1_z0, svmfloat8x4_t, svmfloat8_t,
+ 		svdot_single_za16_mf8_vg1x4_fpm (w8 + 7, z1, z0, fpm0),
+ 		svdot_za16_vg1x4_fpm (w8 + 7, z1, z0, fpm0))
+ 
+ /*
+ ** dot_single_w8p8_z1_z0:
+ **	add	(w8|w9|w10|w11), w8, #?8
+ **	msr	fpmr, x1
+ **	fdot	za\.h\[\1, 0, vgx4\], {z1\.b - z4\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (dot_single_w8p8_z1_z0, svmfloat8x4_t, svmfloat8_t,
+ 		svdot_single_za16_mf8_vg1x4_fpm (w8 + 8, z1, z0, fpm0),
+ 		svdot_za16_vg1x4_fpm (w8 + 8, z1, z0, fpm0))
+ 
+ /*
+ ** dot_single_w0m1_z1_z0:
+ **	sub	(w8|w9|w10|w11), w0, #?1
+ **	msr	fpmr, x1
+ **	fdot	za\.h\[\1, 0, vgx4\], {z1\.b - z4\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (dot_single_w0m1_z1_z0, svmfloat8x4_t, svmfloat8_t,
+ 		svdot_single_za16_mf8_vg1x4_fpm (w0 - 1, z1, z0, fpm0),
+ 		svdot_za16_vg1x4_fpm (w0 - 1, z1, z0, fpm0))
+ 
+ /*
+ ** dot_single_w8_z0_z15:
+ **	str	d15, \[sp, #?-16\]!
+ **	msr	fpmr, x1
+ **	fdot	za\.h\[w8, 0, vgx4\], {z0\.b - z3\.b}, z15\.b
+ **	ldr	d15, \[sp\], #?16
+ **	ret
+ */
+ TEST_ZA_SINGLE_Z15 (dot_single_w8_z0_z15, svmfloat8x4_t, svmfloat8_t,
+ 		    svdot_single_za16_mf8_vg1x4_fpm (w8, z0, z15, fpm0),
+ 		    svdot_za16_vg1x4_fpm (w8, z0, z15, fpm0))
+ 
+ /*
+ ** dot_single_w8_z20_z16:
+ **	msr	fpmr, x1
+ **	mov	(z[0-7]).d, z16.d
+ **	fdot	za\.h\[w8, 0, vgx4\], {z20\.b - z23\.b}, \1\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (dot_single_w8_z20_z16, svmfloat8x4_t, svmfloat8_t,
+ 		svdot_single_za16_mf8_vg1x4_fpm (w8, z20, z16, fpm0),
+ 		svdot_za16_vg1x4_fpm (w8, z20, z16, fpm0))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_single_za32_mf8_vg1x2.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_single_za32_mf8_vg1x2.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_single_za32_mf8_vg1x2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_single_za32_mf8_vg1x2.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,126 ----
+ /* { dg-do assemble { target { aarch64_asm_sme-f8f32_ok } } } */
+ /* { dg-do compile { target { ! { aarch64_asm_sme-f8f32_ok } } } } */
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ #pragma GCC target "+sve2,+sme-f8f32"
+ 
+ /* Available variants are:
+    _za32 if __ARM_FEATURE_SME_F8F32 != 0
+    void svdot[_single]_za32[_mf8]_vg1x2_fpm (uint32_t slice, svmfloat8x2_t zn, svmfloat8_t zm, fpm_t fpm) __arm_streaming __arm_inout("za");  */
+ /*
+ ** dot_single_0_z1_z0:
+ **	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), #?0
+ **	fdot	za\.s\[\1, 0, vgx2\], {z1\.b - z2\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (dot_single_0_z1_z0, svmfloat8x2_t, svmfloat8_t,
+ 		svdot_single_za32_mf8_vg1x2_fpm (0, z1, z0, fpm0),
+ 		svdot_za32_vg1x2_fpm (0, z1, z0, fpm0))
+ 
+ /*
+ ** dot_single_w0_z1_z0:
+ **	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), w0
+ **	fdot	za\.s\[\1, 0, vgx2\], {z1\.b - z2\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (dot_single_w0_z1_z0, svmfloat8x2_t, svmfloat8_t,
+ 		svdot_single_za32_mf8_vg1x2_fpm (w0, z1, z0, fpm0),
+ 		svdot_za32_vg1x2_fpm (w0, z1, z0, fpm0))
+ 
+ /*
+ ** dot_single_w8_z1_z0:
+ **	msr	fpmr, x1
+ **	fdot	za\.s\[w8, 0, vgx2\], {z1\.b - z2\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (dot_single_w8_z1_z0, svmfloat8x2_t, svmfloat8_t,
+ 		svdot_single_za32_mf8_vg1x2_fpm (w8, z1, z0, fpm0),
+ 		svdot_za32_vg1x2_fpm (w8, z1, z0, fpm0))
+ 
+ /*
+ ** dot_single_w8p1_z1_z0:
+ **	msr	fpmr, x1
+ **	fdot	za\.s\[w8, 1, vgx2\], {z1\.b - z2\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (dot_single_w8p1_z1_z0, svmfloat8x2_t, svmfloat8_t,
+ 		svdot_single_za32_mf8_vg1x2_fpm (w8 + 1, z1, z0, fpm0),
+ 		svdot_za32_vg1x2_fpm (w8 + 1, z1, z0, fpm0))
+ 
+ /*
+ ** dot_single_w8p2_z20_z0:
+ **	msr	fpmr, x1
+ **	fdot	za\.s\[w8, 2, vgx2\], {z20\.b - z21\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (dot_single_w8p2_z20_z0, svmfloat8x2_t, svmfloat8_t,
+ 		svdot_single_za32_mf8_vg1x2_fpm (w8 + 2, z20, z0, fpm0),
+ 		svdot_za32_vg1x2_fpm (w8 + 2, z20, z0, fpm0))
+ 
+ /*
+ ** dot_single_w11p4_z27_z0:
+ **	msr	fpmr, x1
+ **	fdot	za\.s\[w11, 4, vgx2\], {z27\.b - z28\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (dot_single_w11p4_z27_z0, svmfloat8x2_t, svmfloat8_t,
+ 		svdot_single_za32_mf8_vg1x2_fpm (w11 + 4, z27, z0, fpm0),
+ 		svdot_za32_vg1x2_fpm (w11 + 4, z27, z0, fpm0))
+ 
+ /*
+ ** dot_single_w8p7_z1_z0:
+ **	msr	fpmr, x1
+ **	fdot	za\.s\[w8, 7, vgx2\], {z1\.b - z2\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (dot_single_w8p7_z1_z0, svmfloat8x2_t, svmfloat8_t,
+ 		svdot_single_za32_mf8_vg1x2_fpm (w8 + 7, z1, z0, fpm0),
+ 		svdot_za32_vg1x2_fpm (w8 + 7, z1, z0, fpm0))
+ 
+ /*
+ ** dot_single_w8p8_z1_z0:
+ **	add	(w8|w9|w10|w11), w8, #?8
+ **	msr	fpmr, x1
+ **	fdot	za\.s\[\1, 0, vgx2\], {z1\.b - z2\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (dot_single_w8p8_z1_z0, svmfloat8x2_t, svmfloat8_t,
+ 		svdot_single_za32_mf8_vg1x2_fpm (w8 + 8, z1, z0, fpm0),
+ 		svdot_za32_vg1x2_fpm (w8 + 8, z1, z0, fpm0))
+ 
+ /*
+ ** dot_single_w0m1_z1_z0:
+ **	sub	(w8|w9|w10|w11), w0, #?1
+ **	msr	fpmr, x1
+ **	fdot	za\.s\[\1, 0, vgx2\], {z1\.b - z2\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (dot_single_w0m1_z1_z0, svmfloat8x2_t, svmfloat8_t,
+ 		svdot_single_za32_mf8_vg1x2_fpm (w0 - 1, z1, z0, fpm0),
+ 		svdot_za32_vg1x2_fpm (w0 - 1, z1, z0, fpm0))
+ 
+ /*
+ ** dot_single_w8_z0_z15:
+ **	str	d15, \[sp, #?-16\]!
+ **	msr	fpmr, x1
+ **	fdot	za\.s\[w8, 0, vgx2\], {z0\.b - z1\.b}, z15\.b
+ **	ldr	d15, \[sp\], #?16
+ **	ret
+ */
+ TEST_ZA_SINGLE_Z15 (dot_single_w8_z0_z15, svmfloat8x2_t, svmfloat8_t,
+ 		    svdot_single_za32_mf8_vg1x2_fpm (w8, z0, z15, fpm0),
+ 		    svdot_za32_vg1x2_fpm (w8, z0, z15, fpm0))
+ 
+ /*
+ ** dot_single_w8_z20_z16:
+ **	msr	fpmr, x1
+ **	mov	(z[0-7]).d, z16.d
+ **	fdot	za\.s\[w8, 0, vgx2\], {z20\.b - z21\.b}, \1\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (dot_single_w8_z20_z16, svmfloat8x2_t, svmfloat8_t,
+ 		svdot_single_za32_mf8_vg1x2_fpm (w8, z20, z16, fpm0),
+ 		svdot_za32_vg1x2_fpm (w8, z20, z16, fpm0))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_single_za32_mf8_vg1x4.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_single_za32_mf8_vg1x4.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_single_za32_mf8_vg1x4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_single_za32_mf8_vg1x4.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,126 ----
+ /* { dg-do assemble { target { aarch64_asm_sme-f8f32_ok } } } */
+ /* { dg-do compile { target { ! { aarch64_asm_sme-f8f32_ok } } } } */
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ #pragma GCC target "+sve2,+sme-f8f32"
+ 
+ /* Available variants are:
+    _za32 if __ARM_FEATURE_SME_F8F32 != 0
+    void svdot[_single]_za32[_mf8]_vg1x4_fpm (uint32_t slice, svmfloat8x4_t zn, svmfloat8_t zm, fpm_t fpm) __arm_streaming __arm_inout("za");  */
+ /*
+ ** dot_single_0_z1_z0:
+ **	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), #?0
+ **	fdot	za\.s\[\1, 0, vgx4\], {z1\.b - z4\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (dot_single_0_z1_z0, svmfloat8x4_t, svmfloat8_t,
+ 		svdot_single_za32_mf8_vg1x4_fpm (0, z1, z0, fpm0),
+ 		svdot_za32_vg1x4_fpm (0, z1, z0, fpm0))
+ 
+ /*
+ ** dot_single_w0_z1_z0:
+ **	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), w0
+ **	fdot	za\.s\[\1, 0, vgx4\], {z1\.b - z4\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (dot_single_w0_z1_z0, svmfloat8x4_t, svmfloat8_t,
+ 		svdot_single_za32_mf8_vg1x4_fpm (w0, z1, z0, fpm0),
+ 		svdot_za32_vg1x4_fpm (w0, z1, z0, fpm0))
+ 
+ /*
+ ** dot_single_w8_z1_z0:
+ **	msr	fpmr, x1
+ **	fdot	za\.s\[w8, 0, vgx4\], {z1\.b - z4\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (dot_single_w8_z1_z0, svmfloat8x4_t, svmfloat8_t,
+ 		svdot_single_za32_mf8_vg1x4_fpm (w8, z1, z0, fpm0),
+ 		svdot_za32_vg1x4_fpm (w8, z1, z0, fpm0))
+ 
+ /*
+ ** dot_single_w8p1_z1_z0:
+ **	msr	fpmr, x1
+ **	fdot	za\.s\[w8, 1, vgx4\], {z1\.b - z4\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (dot_single_w8p1_z1_z0, svmfloat8x4_t, svmfloat8_t,
+ 		svdot_single_za32_mf8_vg1x4_fpm (w8 + 1, z1, z0, fpm0),
+ 		svdot_za32_vg1x4_fpm (w8 + 1, z1, z0, fpm0))
+ 
+ /*
+ ** dot_single_w8p2_z20_z0:
+ **	msr	fpmr, x1
+ **	fdot	za\.s\[w8, 2, vgx4\], {z20\.b - z23\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (dot_single_w8p2_z20_z0, svmfloat8x4_t, svmfloat8_t,
+ 		svdot_single_za32_mf8_vg1x4_fpm (w8 + 2, z20, z0, fpm0),
+ 		svdot_za32_vg1x4_fpm (w8 + 2, z20, z0, fpm0))
+ 
+ /*
+ ** dot_single_w11p4_z27_z0:
+ **	msr	fpmr, x1
+ **	fdot	za\.s\[w11, 4, vgx4\], {z27\.b - z30\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (dot_single_w11p4_z27_z0, svmfloat8x4_t, svmfloat8_t,
+ 		svdot_single_za32_mf8_vg1x4_fpm (w11 + 4, z27, z0, fpm0),
+ 		svdot_za32_vg1x4_fpm (w11 + 4, z27, z0, fpm0))
+ 
+ /*
+ ** dot_single_w8p7_z1_z0:
+ **	msr	fpmr, x1
+ **	fdot	za\.s\[w8, 7, vgx4\], {z1\.b - z4\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (dot_single_w8p7_z1_z0, svmfloat8x4_t, svmfloat8_t,
+ 		svdot_single_za32_mf8_vg1x4_fpm (w8 + 7, z1, z0, fpm0),
+ 		svdot_za32_vg1x4_fpm (w8 + 7, z1, z0, fpm0))
+ 
+ /*
+ ** dot_single_w8p8_z1_z0:
+ **	add	(w8|w9|w10|w11), w8, #?8
+ **	msr	fpmr, x1
+ **	fdot	za\.s\[\1, 0, vgx4\], {z1\.b - z4\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (dot_single_w8p8_z1_z0, svmfloat8x4_t, svmfloat8_t,
+ 		svdot_single_za32_mf8_vg1x4_fpm (w8 + 8, z1, z0, fpm0),
+ 		svdot_za32_vg1x4_fpm (w8 + 8, z1, z0, fpm0))
+ 
+ /*
+ ** dot_single_w0m1_z1_z0:
+ **	sub	(w8|w9|w10|w11), w0, #?1
+ **	msr	fpmr, x1
+ **	fdot	za\.s\[\1, 0, vgx4\], {z1\.b - z4\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (dot_single_w0m1_z1_z0, svmfloat8x4_t, svmfloat8_t,
+ 		svdot_single_za32_mf8_vg1x4_fpm (w0 - 1, z1, z0, fpm0),
+ 		svdot_za32_vg1x4_fpm (w0 - 1, z1, z0, fpm0))
+ 
+ /*
+ ** dot_single_w8_z0_z15:
+ **	str	d15, \[sp, #?-16\]!
+ **	msr	fpmr, x1
+ **	fdot	za\.s\[w8, 0, vgx4\], {z0\.b - z3\.b}, z15\.b
+ **	ldr	d15, \[sp\], #?16
+ **	ret
+ */
+ TEST_ZA_SINGLE_Z15 (dot_single_w8_z0_z15, svmfloat8x4_t, svmfloat8_t,
+ 		    svdot_single_za32_mf8_vg1x4_fpm (w8, z0, z15, fpm0),
+ 		    svdot_za32_vg1x4_fpm (w8, z0, z15, fpm0))
+ 
+ /*
+ ** dot_single_w8_z20_z16:
+ **	msr	fpmr, x1
+ **	mov	(z[0-7]).d, z16.d
+ **	fdot	za\.s\[w8, 0, vgx4\], {z20\.b - z23\.b}, \1\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (dot_single_w8_z20_z16, svmfloat8x4_t, svmfloat8_t,
+ 		svdot_single_za32_mf8_vg1x4_fpm (w8, z20, z16, fpm0),
+ 		svdot_za32_vg1x4_fpm (w8, z20, z16, fpm0))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_za16_mf8_vg1x2.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_za16_mf8_vg1x2.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_za16_mf8_vg1x2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_za16_mf8_vg1x2.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,150 ----
+ /* { dg-do assemble { target { aarch64_asm_sme-f8f16_ok } } } */
+ /* { dg-do compile { target { ! { aarch64_asm_sme-f8f16_ok } } } } */
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ #pragma GCC target "+sve2,+sme-f8f16"
+ 
+ /* Available variants are
+    _za16 if __ARM_FEATURE_SME_F8F16 != 0
+    void svdot_za16[_mf8]_vg1x2_fpm (uint32_t slice, svmfloat8x2_t zn, svmfloat8x2_t zm, fpm_t fpm) __arm_streaming __arm_inout("za");  */
+ 
+ /*
+ ** dot_0_z0_z0:
+ **	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), #?0
+ **	fdot	za\.h\[\1, 0, vgx2\], {z0\.b - z1\.b}, {z0\.b - z1\.b}
+ **	ret
+ */
+ TEST_ZA_XN (dot_0_z0_z0, svmfloat8x2_t, svdot_za16_mf8_vg1x2_fpm (0, z0, z0, fpm0),
+ 	    svdot_za16_vg1x2_fpm (0, z0, z0, fpm0))
+ 
+ /*
+ ** dot_w0_z0_z0:
+ **	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), w0
+ **	fdot	za\.h\[\1, 0, vgx2\], {z0\.b - z1\.b}, {z0\.b - z1\.b}
+ **	ret
+ */
+ TEST_ZA_XN (dot_w0_z0_z0, svmfloat8x2_t, svdot_za16_mf8_vg1x2_fpm (w0, z0, z0, fpm0),
+ 	    svdot_za16_vg1x2_fpm (w0, z0, z0, fpm0))
+ 
+ /*
+ ** dot_w8_z0_z4:
+ **	msr	fpmr, x1
+ **	fdot	za\.h\[w8, 0, vgx2\], {z0\.b - z1\.b}, {z4\.b - z5\.b}
+ **	ret
+ */
+ TEST_ZA_XN (dot_w8_z0_z4, svmfloat8x2_t, svdot_za16_mf8_vg1x2_fpm (w8, z0, z4, fpm0),
+ 	    svdot_za16_vg1x2_fpm (w8, z0, z4, fpm0))
+ 
+ /*
+ ** dot_w8_z4_z18:
+ **	msr	fpmr, x1
+ **	fdot	za\.h\[w8, 0, vgx2\], {z4\.b - z5\.b}, {z18\.b - z19\.b}
+ **	ret
+ */
+ TEST_ZA_XN (dot_w8_z4_z18, svmfloat8x2_t, svdot_za16_mf8_vg1x2_fpm (w8, z4, z18, fpm0),
+ 	    svdot_za16_vg1x2_fpm (w8, z4, z18, fpm0))
+ 
+ /* Leave the assembler to check for correctness for misaligned registers.  */
+ 
+ /*
+ ** dot_w8_z0_z23:
+ **	msr	fpmr, x1
+ **	...
+ **	fdot	za\.h\[w8, 0, vgx2\], {z0\.b - z1\.b}, [^\n]+
+ **	ret
+ */
+ TEST_ZA_XN (dot_w8_z0_z23, svmfloat8x2_t, svdot_za16_mf8_vg1x2_fpm (w8, z0, z23, fpm0),
+ 	    svdot_za16_vg1x2_fpm (w8, z0, z23, fpm0))
+ 
+ /*
+ ** dot_w8_z23_z0:
+ **	msr	fpmr, x1
+ **	...
+ **	fdot	za\.h\[w8, 0, vgx2\], [^\n]+, {z0\.b - z1\.b}
+ **	ret
+ */
+ TEST_ZA_XN (dot_w8_z23_z0, svmfloat8x2_t, svdot_za16_mf8_vg1x2_fpm (w8, z23, z0, fpm0),
+ 	    svdot_za16_vg1x2_fpm (w8, z23, z0, fpm0))
+ 
+ /*
+ ** dot_w8_z18_z28:
+ **	msr	fpmr, x1
+ **	fdot	za\.h\[w8, 0, vgx2\], {z18\.b - z19\.b}, {z28\.b - z29\.b}
+ **	ret
+ */
+ TEST_ZA_XN (dot_w8_z18_z28, svmfloat8x2_t, svdot_za16_mf8_vg1x2_fpm (w8, z18, z28, fpm0),
+ 	    svdot_za16_vg1x2_fpm (w8, z18, z28, fpm0))
+ 
+ /*
+ ** dot_w8_z28_z4:
+ **	msr	fpmr, x1
+ **	fdot	za\.h\[w8, 0, vgx2\], {z28\.b - z29\.b}, {z4\.b - z5\.b}
+ **	ret
+ */
+ TEST_ZA_XN (dot_w8_z28_z4, svmfloat8x2_t, svdot_za16_mf8_vg1x2_fpm (w8, z28, z4, fpm0),
+ 	    svdot_za16_vg1x2_fpm (w8, z28, z4, fpm0))
+ 
+ /*
+ ** dot_w8p1_z4_z0:
+ **	msr	fpmr, x1
+ **	fdot	za\.h\[w8, 1, vgx2\], {z4\.b - z5\.b}, {z0\.b - z1\.b}
+ **	ret
+ */
+ TEST_ZA_XN (dot_w8p1_z4_z0, svmfloat8x2_t,
+ 	    svdot_za16_mf8_vg1x2_fpm (w8 + 1, z4, z0, fpm0),
+ 	    svdot_za16_vg1x2_fpm (w8 + 1, z4, z0, fpm0))
+ 
+ /*
+ ** dot_w8p2_z4_z0:
+ **	msr	fpmr, x1
+ **	fdot	za\.h\[w8, 2, vgx2\], {z4\.b - z5\.b}, {z0\.b - z1\.b}
+ **	ret
+ */
+ TEST_ZA_XN (dot_w8p2_z4_z0, svmfloat8x2_t,
+ 	    svdot_za16_mf8_vg1x2_fpm (w8 + 2, z4, z0, fpm0),
+ 	    svdot_za16_vg1x2_fpm (w8 + 2, z4, z0, fpm0))
+ 
+ /*
+ ** dot_w11p4_z4_z0:
+ **	msr	fpmr, x1
+ **	fdot	za\.h\[w11, 4, vgx2\], {z4\.b - z5\.b}, {z0\.b - z1\.b}
+ **	ret
+ */
+ TEST_ZA_XN (dot_w11p4_z4_z0, svmfloat8x2_t,
+ 	    svdot_za16_mf8_vg1x2_fpm (w11 + 4, z4, z0, fpm0),
+ 	    svdot_za16_vg1x2_fpm (w11 + 4, z4, z0, fpm0))
+ 
+ /*
+ ** dot_w8p7_z4_z0:
+ **	msr	fpmr, x1
+ **	fdot	za\.h\[w8, 7, vgx2\], {z4\.b - z5\.b}, {z0\.b - z1\.b}
+ **	ret
+ */
+ TEST_ZA_XN (dot_w8p7_z4_z0, svmfloat8x2_t,
+ 	    svdot_za16_mf8_vg1x2_fpm (w8 + 7, z4, z0, fpm0),
+ 	    svdot_za16_vg1x2_fpm (w8 + 7, z4, z0, fpm0))
+ 
+ /*
+ ** dot_w8p8_z4_z4:
+ **	add	(w8|w9|w10|w11), w8, #?8
+ **	msr	fpmr, x1
+ **	fdot	za\.h\[\1, 0, vgx2\], {z4\.b - z5\.b}, {z4\.b - z5\.b}
+ **	ret
+ */
+ TEST_ZA_XN (dot_w8p8_z4_z4, svmfloat8x2_t,
+ 	    svdot_za16_mf8_vg1x2_fpm (w8 + 8, z4, z4, fpm0),
+ 	    svdot_za16_vg1x2_fpm (w8 + 8, z4, z4, fpm0))
+ 
+ /*
+ ** dot_w8m1_z4_z0:
+ **	sub	(w8|w9|w10|w11), w8, #?1
+ **	msr	fpmr, x1
+ **	fdot	za\.h\[\1, 0, vgx2\], {z4\.b - z5\.b}, {z0\.b - z1\.b}
+ **	ret
+ */
+ TEST_ZA_XN (dot_w8m1_z4_z0, svmfloat8x2_t,
+ 	    svdot_za16_mf8_vg1x2_fpm (w8 - 1, z4, z0, fpm0),
+ 	    svdot_za16_vg1x2_fpm (w8 - 1, z4, z0, fpm0))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_za16_mf8_vg1x4.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_za16_mf8_vg1x4.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_za16_mf8_vg1x4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_za16_mf8_vg1x4.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,166 ----
+ /* { dg-do assemble { target { aarch64_asm_sme-f8f16_ok } } } */
+ /* { dg-do compile { target { ! { aarch64_asm_sme-f8f16_ok } } } } */
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ #pragma GCC target "+sve2,+sme-f8f16"
+ 
+ /* Available variants are
+    _za16 if __ARM_FEATURE_SME_F8F16 != 0
+    void svdot_za16[_mf8]_vg1x4_fpm (uint32_t slice, svmfloat8x4_t zn, svmfloat8x4_t zm, fpm_t fpm) __arm_streaming __arm_inout("za");  */
+ 
+ /*
+ ** dot_0_z0_z0:
+ **	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), #?0
+ **	fdot	za\.h\[\1, 0, vgx4\], {z0\.b - z3\.b}, {z0\.b - z3\.b}
+ **	ret
+ */
+ TEST_ZA_XN (dot_0_z0_z0, svmfloat8x4_t,
+ 	    svdot_za16_mf8_vg1x4_fpm (0, z0, z0, fpm0),
+ 	    svdot_za16_vg1x4_fpm (0, z0, z0, fpm0))
+ 
+ /*
+ ** dot_w0_z0_z0:
+ **	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), w0
+ **	fdot	za\.h\[\1, 0, vgx4\], {z0\.b - z3\.b}, {z0\.b - z3\.b}
+ **	ret
+ */
+ TEST_ZA_XN (dot_w0_z0_z0, svmfloat8x4_t,
+ 	    svdot_za16_mf8_vg1x4_fpm (w0, z0, z0, fpm0),
+ 	    svdot_za16_vg1x4_fpm (w0, z0, z0, fpm0))
+ 
+ /*
+ ** dot_w8_z0_z4:
+ **	msr	fpmr, x1
+ **	fdot	za\.h\[w8, 0, vgx4\], {z0\.b - z3\.b}, {z4\.b - z7\.b}
+ **	ret
+ */
+ TEST_ZA_XN (dot_w8_z0_z4, svmfloat8x4_t,
+ 	    svdot_za16_mf8_vg1x4_fpm (w8, z0, z4, fpm0),
+ 	    svdot_za16_vg1x4_fpm (w8, z0, z4, fpm0))
+ 
+ /*
+ ** dot_w8_z4_z18:
+ **	msr	fpmr, x1
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	fdot	za\.h\[w8, 0, vgx4\], {z4\.b - z7\.b}, {z28\.b - z31\.b}
+ **	ret
+ */
+ TEST_ZA_XN (dot_w8_z4_z18, svmfloat8x4_t,
+ 	    svdot_za16_mf8_vg1x4_fpm (w8, z4, z18, fpm0),
+ 	    svdot_za16_vg1x4_fpm (w8, z4, z18, fpm0))
+ 
+ /* Leave the assembler to check for correctness for misaligned registers.  */
+ 
+ /*
+ ** dot_w8_z0_z23:
+ **	msr	fpmr, x1
+ **	...
+ **	fdot	za\.h\[w8, 0, vgx4\], {z0\.b - z3\.b}, [^\n]+
+ **	ret
+ */
+ TEST_ZA_XN (dot_w8_z0_z23, svmfloat8x4_t,
+ 	    svdot_za16_mf8_vg1x4_fpm (w8, z0, z23, fpm0),
+ 	    svdot_za16_vg1x4_fpm (w8, z0, z23, fpm0))
+ 
+ /*
+ ** dot_w8_z23_z0:
+ **	msr	fpmr, x1
+ **	...
+ **	fdot	za\.h\[w8, 0, vgx4\], [^\n]+, {z0\.b - z3\.b}
+ **	ret
+ */
+ TEST_ZA_XN (dot_w8_z23_z0, svmfloat8x4_t,
+ 	    svdot_za16_mf8_vg1x4_fpm (w8, z23, z0, fpm0),
+ 	    svdot_za16_vg1x4_fpm (w8, z23, z0, fpm0))
+ 
+ /*
+ ** dot_w8_z18_z28:
+ **	msr	fpmr, x1
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	fdot	za\.h\[w8, 0, vgx4\], {z24\.b - z27\.b}, {z28\.b - z31\.b}
+ **	ret
+ */
+ TEST_ZA_XN (dot_w8_z18_z28, svmfloat8x4_t,
+ 	    svdot_za16_mf8_vg1x4_fpm (w8, z18, z28, fpm0),
+ 	    svdot_za16_vg1x4_fpm (w8, z18, z28, fpm0))
+ 
+ /*
+ ** dot_w8_z28_z4:
+ **	msr	fpmr, x1
+ **	fdot	za\.h\[w8, 0, vgx4\], {z28\.b - z31\.b}, {z4\.b - z7\.b}
+ **	ret
+ */
+ TEST_ZA_XN (dot_w8_z28_z4, svmfloat8x4_t,
+ 	    svdot_za16_mf8_vg1x4_fpm (w8, z28, z4, fpm0),
+ 	    svdot_za16_vg1x4_fpm (w8, z28, z4, fpm0))
+ 
+ /*
+ ** dot_w8p1_z4_z0:
+ **	msr	fpmr, x1
+ **	fdot	za\.h\[w8, 1, vgx4\], {z4\.b - z7\.b}, {z0\.b - z3\.b}
+ **	ret
+ */
+ TEST_ZA_XN (dot_w8p1_z4_z0, svmfloat8x4_t,
+ 	    svdot_za16_mf8_vg1x4_fpm (w8 + 1, z4, z0, fpm0),
+ 	    svdot_za16_vg1x4_fpm (w8 + 1, z4, z0, fpm0))
+ 
+ /*
+ ** dot_w8p2_z4_z0:
+ **	msr	fpmr, x1
+ **	fdot	za\.h\[w8, 2, vgx4\], {z4\.b - z7\.b}, {z0\.b - z3\.b}
+ **	ret
+ */
+ TEST_ZA_XN (dot_w8p2_z4_z0, svmfloat8x4_t,
+ 	    svdot_za16_mf8_vg1x4_fpm (w8 + 2, z4, z0, fpm0),
+ 	    svdot_za16_vg1x4_fpm (w8 + 2, z4, z0, fpm0))
+ 
+ /*
+ ** dot_w11p4_z4_z0:
+ **	msr	fpmr, x1
+ **	fdot	za\.h\[w11, 4, vgx4\], {z4\.b - z7\.b}, {z0\.b - z3\.b}
+ **	ret
+ */
+ TEST_ZA_XN (dot_w11p4_z4_z0, svmfloat8x4_t,
+ 	    svdot_za16_mf8_vg1x4_fpm (w11 + 4, z4, z0, fpm0),
+ 	    svdot_za16_vg1x4_fpm (w11 + 4, z4, z0, fpm0))
+ 
+ /*
+ ** dot_w8p7_z4_z0:
+ **	msr	fpmr, x1
+ **	fdot	za\.h\[w8, 7, vgx4\], {z4\.b - z7\.b}, {z0\.b - z3\.b}
+ **	ret
+ */
+ TEST_ZA_XN (dot_w8p7_z4_z0, svmfloat8x4_t,
+ 	    svdot_za16_mf8_vg1x4_fpm (w8 + 7, z4, z0, fpm0),
+ 	    svdot_za16_vg1x4_fpm (w8 + 7, z4, z0, fpm0))
+ 
+ /*
+ ** dot_w8p8_z4_z4:
+ **	add	(w8|w9|w10|w11), w8, #?8
+ **	msr	fpmr, x1
+ **	fdot	za\.h\[\1, 0, vgx4\], {z4\.b - z7\.b}, {z4\.b - z7\.b}
+ **	ret
+ */
+ TEST_ZA_XN (dot_w8p8_z4_z4, svmfloat8x4_t,
+ 	    svdot_za16_mf8_vg1x4_fpm (w8 + 8, z4, z4, fpm0),
+ 	    svdot_za16_vg1x4_fpm (w8 + 8, z4, z4, fpm0))
+ 
+ /*
+ ** dot_w8m1_z4_z0:
+ **	sub	(w8|w9|w10|w11), w8, #?1
+ **	msr	fpmr, x1
+ **	fdot	za\.h\[\1, 0, vgx4\], {z4\.b - z7\.b}, {z0\.b - z3\.b}
+ **	ret
+ */
+ TEST_ZA_XN (dot_w8m1_z4_z0, svmfloat8x4_t,
+ 	    svdot_za16_mf8_vg1x4_fpm (w8 - 1, z4, z0, fpm0),
+ 	    svdot_za16_vg1x4_fpm (w8 - 1, z4, z0, fpm0))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_za32_mf8_vg1x2.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_za32_mf8_vg1x2.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_za32_mf8_vg1x2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_za32_mf8_vg1x2.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,150 ----
+ /* { dg-do assemble { target { aarch64_asm_sme-f8f32_ok } } } */
+ /* { dg-do compile { target { ! { aarch64_asm_sme-f8f32_ok } } } } */
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ #pragma GCC target "+sve2,+sme-f8f32"
+ 
+ /* Available variants are
+    _za32 if __ARM_FEATURE_SME_F8F32 != 0
+    void svdot_za32[_mf8]_vg1x2_fpm (uint32_t slice, svmfloat8x2_t zn, svmfloat8x2_t zm, fpm_t fpm) __arm_streaming __arm_inout("za");  */
+ 
+ /*
+ ** dot_0_z0_z0:
+ **	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), #?0
+ **	fdot	za\.s\[\1, 0, vgx2\], {z0\.b - z1\.b}, {z0\.b - z1\.b}
+ **	ret
+ */
+ TEST_ZA_XN (dot_0_z0_z0, svmfloat8x2_t, svdot_za32_mf8_vg1x2_fpm (0, z0, z0, fpm0),
+ 	    svdot_za32_vg1x2_fpm (0, z0, z0, fpm0))
+ 
+ /*
+ ** dot_w0_z0_z0:
+ **	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), w0
+ **	fdot	za\.s\[\1, 0, vgx2\], {z0\.b - z1\.b}, {z0\.b - z1\.b}
+ **	ret
+ */
+ TEST_ZA_XN (dot_w0_z0_z0, svmfloat8x2_t, svdot_za32_mf8_vg1x2_fpm (w0, z0, z0, fpm0),
+ 	    svdot_za32_vg1x2_fpm (w0, z0, z0, fpm0))
+ 
+ /*
+ ** dot_w8_z0_z4:
+ **	msr	fpmr, x1
+ **	fdot	za\.s\[w8, 0, vgx2\], {z0\.b - z1\.b}, {z4\.b - z5\.b}
+ **	ret
+ */
+ TEST_ZA_XN (dot_w8_z0_z4, svmfloat8x2_t, svdot_za32_mf8_vg1x2_fpm (w8, z0, z4, fpm0),
+ 	    svdot_za32_vg1x2_fpm (w8, z0, z4, fpm0))
+ 
+ /*
+ ** dot_w8_z4_z18:
+ **	msr	fpmr, x1
+ **	fdot	za\.s\[w8, 0, vgx2\], {z4\.b - z5\.b}, {z18\.b - z19\.b}
+ **	ret
+ */
+ TEST_ZA_XN (dot_w8_z4_z18, svmfloat8x2_t, svdot_za32_mf8_vg1x2_fpm (w8, z4, z18, fpm0),
+ 	    svdot_za32_vg1x2_fpm (w8, z4, z18, fpm0))
+ 
+ /* Leave the assembler to check for correctness for misaligned registers.  */
+ 
+ /*
+ ** dot_w8_z0_z23:
+ **	msr	fpmr, x1
+ **	...
+ **	fdot	za\.s\[w8, 0, vgx2\], {z0\.b - z1\.b}, [^\n]+
+ **	ret
+ */
+ TEST_ZA_XN (dot_w8_z0_z23, svmfloat8x2_t, svdot_za32_mf8_vg1x2_fpm (w8, z0, z23, fpm0),
+ 	    svdot_za32_vg1x2_fpm (w8, z0, z23, fpm0))
+ 
+ /*
+ ** dot_w8_z23_z0:
+ **	msr	fpmr, x1
+ **	...
+ **	fdot	za\.s\[w8, 0, vgx2\], [^\n]+, {z0\.b - z1\.b}
+ **	ret
+ */
+ TEST_ZA_XN (dot_w8_z23_z0, svmfloat8x2_t, svdot_za32_mf8_vg1x2_fpm (w8, z23, z0, fpm0),
+ 	    svdot_za32_vg1x2_fpm (w8, z23, z0, fpm0))
+ 
+ /*
+ ** dot_w8_z18_z28:
+ **	msr	fpmr, x1
+ **	fdot	za\.s\[w8, 0, vgx2\], {z18\.b - z19\.b}, {z28\.b - z29\.b}
+ **	ret
+ */
+ TEST_ZA_XN (dot_w8_z18_z28, svmfloat8x2_t, svdot_za32_mf8_vg1x2_fpm (w8, z18, z28, fpm0),
+ 	    svdot_za32_vg1x2_fpm (w8, z18, z28, fpm0))
+ 
+ /*
+ ** dot_w8_z28_z4:
+ **	msr	fpmr, x1
+ **	fdot	za\.s\[w8, 0, vgx2\], {z28\.b - z29\.b}, {z4\.b - z5\.b}
+ **	ret
+ */
+ TEST_ZA_XN (dot_w8_z28_z4, svmfloat8x2_t, svdot_za32_mf8_vg1x2_fpm (w8, z28, z4, fpm0),
+ 	    svdot_za32_vg1x2_fpm (w8, z28, z4, fpm0))
+ 
+ /*
+ ** dot_w8p1_z4_z0:
+ **	msr	fpmr, x1
+ **	fdot	za\.s\[w8, 1, vgx2\], {z4\.b - z5\.b}, {z0\.b - z1\.b}
+ **	ret
+ */
+ TEST_ZA_XN (dot_w8p1_z4_z0, svmfloat8x2_t,
+ 	    svdot_za32_mf8_vg1x2_fpm (w8 + 1, z4, z0, fpm0),
+ 	    svdot_za32_vg1x2_fpm (w8 + 1, z4, z0, fpm0))
+ 
+ /*
+ ** dot_w8p2_z4_z0:
+ **	msr	fpmr, x1
+ **	fdot	za\.s\[w8, 2, vgx2\], {z4\.b - z5\.b}, {z0\.b - z1\.b}
+ **	ret
+ */
+ TEST_ZA_XN (dot_w8p2_z4_z0, svmfloat8x2_t,
+ 	    svdot_za32_mf8_vg1x2_fpm (w8 + 2, z4, z0, fpm0),
+ 	    svdot_za32_vg1x2_fpm (w8 + 2, z4, z0, fpm0))
+ 
+ /*
+ ** dot_w11p4_z4_z0:
+ **	msr	fpmr, x1
+ **	fdot	za\.s\[w11, 4, vgx2\], {z4\.b - z5\.b}, {z0\.b - z1\.b}
+ **	ret
+ */
+ TEST_ZA_XN (dot_w11p4_z4_z0, svmfloat8x2_t,
+ 	    svdot_za32_mf8_vg1x2_fpm (w11 + 4, z4, z0, fpm0),
+ 	    svdot_za32_vg1x2_fpm (w11 + 4, z4, z0, fpm0))
+ 
+ /*
+ ** dot_w8p7_z4_z0:
+ **	msr	fpmr, x1
+ **	fdot	za\.s\[w8, 7, vgx2\], {z4\.b - z5\.b}, {z0\.b - z1\.b}
+ **	ret
+ */
+ TEST_ZA_XN (dot_w8p7_z4_z0, svmfloat8x2_t,
+ 	    svdot_za32_mf8_vg1x2_fpm (w8 + 7, z4, z0, fpm0),
+ 	    svdot_za32_vg1x2_fpm (w8 + 7, z4, z0, fpm0))
+ 
+ /*
+ ** dot_w8p8_z4_z4:
+ **	add	(w8|w9|w10|w11), w8, #?8
+ **	msr	fpmr, x1
+ **	fdot	za\.s\[\1, 0, vgx2\], {z4\.b - z5\.b}, {z4\.b - z5\.b}
+ **	ret
+ */
+ TEST_ZA_XN (dot_w8p8_z4_z4, svmfloat8x2_t,
+ 	    svdot_za32_mf8_vg1x2_fpm (w8 + 8, z4, z4, fpm0),
+ 	    svdot_za32_vg1x2_fpm (w8 + 8, z4, z4, fpm0))
+ 
+ /*
+ ** dot_w8m1_z4_z0:
+ **	sub	(w8|w9|w10|w11), w8, #?1
+ **	msr	fpmr, x1
+ **	fdot	za\.s\[\1, 0, vgx2\], {z4\.b - z5\.b}, {z0\.b - z1\.b}
+ **	ret
+ */
+ TEST_ZA_XN (dot_w8m1_z4_z0, svmfloat8x2_t,
+ 	    svdot_za32_mf8_vg1x2_fpm (w8 - 1, z4, z0, fpm0),
+ 	    svdot_za32_vg1x2_fpm (w8 - 1, z4, z0, fpm0))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_za32_mf8_vg1x4.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_za32_mf8_vg1x4.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_za32_mf8_vg1x4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/dot_za32_mf8_vg1x4.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,166 ----
+ /* { dg-do assemble { target { aarch64_asm_sme-f8f32_ok } } } */
+ /* { dg-do compile { target { ! { aarch64_asm_sme-f8f32_ok } } } } */
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ #pragma GCC target "+sve2,+sme-f8f32"
+ 
+ /* Available variants are
+    _za32 if __ARM_FEATURE_SME_F8F32 != 0
+    void svdot_za32[_mf8]_vg1x4_fpm (uint32_t slice, svmfloat8x4_t zn, svmfloat8x4_t zm, fpm_t fpm) __arm_streaming __arm_inout("za");  */
+ 
+ /*
+ ** dot_0_z0_z0:
+ **	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), #?0
+ **	fdot	za\.s\[\1, 0, vgx4\], {z0\.b - z3\.b}, {z0\.b - z3\.b}
+ **	ret
+ */
+ TEST_ZA_XN (dot_0_z0_z0, svmfloat8x4_t,
+ 	    svdot_za32_mf8_vg1x4_fpm (0, z0, z0, fpm0),
+ 	    svdot_za32_vg1x4_fpm (0, z0, z0, fpm0))
+ 
+ /*
+ ** dot_w0_z0_z0:
+ **	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), w0
+ **	fdot	za\.s\[\1, 0, vgx4\], {z0\.b - z3\.b}, {z0\.b - z3\.b}
+ **	ret
+ */
+ TEST_ZA_XN (dot_w0_z0_z0, svmfloat8x4_t,
+ 	    svdot_za32_mf8_vg1x4_fpm (w0, z0, z0, fpm0),
+ 	    svdot_za32_vg1x4_fpm (w0, z0, z0, fpm0))
+ 
+ /*
+ ** dot_w8_z0_z4:
+ **	msr	fpmr, x1
+ **	fdot	za\.s\[w8, 0, vgx4\], {z0\.b - z3\.b}, {z4\.b - z7\.b}
+ **	ret
+ */
+ TEST_ZA_XN (dot_w8_z0_z4, svmfloat8x4_t,
+ 	    svdot_za32_mf8_vg1x4_fpm (w8, z0, z4, fpm0),
+ 	    svdot_za32_vg1x4_fpm (w8, z0, z4, fpm0))
+ 
+ /*
+ ** dot_w8_z4_z18:
+ **	msr	fpmr, x1
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	fdot	za\.s\[w8, 0, vgx4\], {z4\.b - z7\.b}, {z28\.b - z31\.b}
+ **	ret
+ */
+ TEST_ZA_XN (dot_w8_z4_z18, svmfloat8x4_t,
+ 	    svdot_za32_mf8_vg1x4_fpm (w8, z4, z18, fpm0),
+ 	    svdot_za32_vg1x4_fpm (w8, z4, z18, fpm0))
+ 
+ /* Leave the assembler to check for correctness for misaligned registers.  */
+ 
+ /*
+ ** dot_w8_z0_z23:
+ **	msr	fpmr, x1
+ **	...
+ **	fdot	za\.s\[w8, 0, vgx4\], {z0\.b - z3\.b}, [^\n]+
+ **	ret
+ */
+ TEST_ZA_XN (dot_w8_z0_z23, svmfloat8x4_t,
+ 	    svdot_za32_mf8_vg1x4_fpm (w8, z0, z23, fpm0),
+ 	    svdot_za32_vg1x4_fpm (w8, z0, z23, fpm0))
+ 
+ /*
+ ** dot_w8_z23_z0:
+ **	msr	fpmr, x1
+ **	...
+ **	fdot	za\.s\[w8, 0, vgx4\], [^\n]+, {z0\.b - z3\.b}
+ **	ret
+ */
+ TEST_ZA_XN (dot_w8_z23_z0, svmfloat8x4_t,
+ 	    svdot_za32_mf8_vg1x4_fpm (w8, z23, z0, fpm0),
+ 	    svdot_za32_vg1x4_fpm (w8, z23, z0, fpm0))
+ 
+ /*
+ ** dot_w8_z18_z28:
+ **	msr	fpmr, x1
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	fdot	za\.s\[w8, 0, vgx4\], {z24\.b - z27\.b}, {z28\.b - z31\.b}
+ **	ret
+ */
+ TEST_ZA_XN (dot_w8_z18_z28, svmfloat8x4_t,
+ 	    svdot_za32_mf8_vg1x4_fpm (w8, z18, z28, fpm0),
+ 	    svdot_za32_vg1x4_fpm (w8, z18, z28, fpm0))
+ 
+ /*
+ ** dot_w8_z28_z4:
+ **	msr	fpmr, x1
+ **	fdot	za\.s\[w8, 0, vgx4\], {z28\.b - z31\.b}, {z4\.b - z7\.b}
+ **	ret
+ */
+ TEST_ZA_XN (dot_w8_z28_z4, svmfloat8x4_t,
+ 	    svdot_za32_mf8_vg1x4_fpm (w8, z28, z4, fpm0),
+ 	    svdot_za32_vg1x4_fpm (w8, z28, z4, fpm0))
+ 
+ /*
+ ** dot_w8p1_z4_z0:
+ **	msr	fpmr, x1
+ **	fdot	za\.s\[w8, 1, vgx4\], {z4\.b - z7\.b}, {z0\.b - z3\.b}
+ **	ret
+ */
+ TEST_ZA_XN (dot_w8p1_z4_z0, svmfloat8x4_t,
+ 	    svdot_za32_mf8_vg1x4_fpm (w8 + 1, z4, z0, fpm0),
+ 	    svdot_za32_vg1x4_fpm (w8 + 1, z4, z0, fpm0))
+ 
+ /*
+ ** dot_w8p2_z4_z0:
+ **	msr	fpmr, x1
+ **	fdot	za\.s\[w8, 2, vgx4\], {z4\.b - z7\.b}, {z0\.b - z3\.b}
+ **	ret
+ */
+ TEST_ZA_XN (dot_w8p2_z4_z0, svmfloat8x4_t,
+ 	    svdot_za32_mf8_vg1x4_fpm (w8 + 2, z4, z0, fpm0),
+ 	    svdot_za32_vg1x4_fpm (w8 + 2, z4, z0, fpm0))
+ 
+ /*
+ ** dot_w11p4_z4_z0:
+ **	msr	fpmr, x1
+ **	fdot	za\.s\[w11, 4, vgx4\], {z4\.b - z7\.b}, {z0\.b - z3\.b}
+ **	ret
+ */
+ TEST_ZA_XN (dot_w11p4_z4_z0, svmfloat8x4_t,
+ 	    svdot_za32_mf8_vg1x4_fpm (w11 + 4, z4, z0, fpm0),
+ 	    svdot_za32_vg1x4_fpm (w11 + 4, z4, z0, fpm0))
+ 
+ /*
+ ** dot_w8p7_z4_z0:
+ **	msr	fpmr, x1
+ **	fdot	za\.s\[w8, 7, vgx4\], {z4\.b - z7\.b}, {z0\.b - z3\.b}
+ **	ret
+ */
+ TEST_ZA_XN (dot_w8p7_z4_z0, svmfloat8x4_t,
+ 	    svdot_za32_mf8_vg1x4_fpm (w8 + 7, z4, z0, fpm0),
+ 	    svdot_za32_vg1x4_fpm (w8 + 7, z4, z0, fpm0))
+ 
+ /*
+ ** dot_w8p8_z4_z4:
+ **	add	(w8|w9|w10|w11), w8, #?8
+ **	msr	fpmr, x1
+ **	fdot	za\.s\[\1, 0, vgx4\], {z4\.b - z7\.b}, {z4\.b - z7\.b}
+ **	ret
+ */
+ TEST_ZA_XN (dot_w8p8_z4_z4, svmfloat8x4_t,
+ 	    svdot_za32_mf8_vg1x4_fpm (w8 + 8, z4, z4, fpm0),
+ 	    svdot_za32_vg1x4_fpm (w8 + 8, z4, z4, fpm0))
+ 
+ /*
+ ** dot_w8m1_z4_z0:
+ **	sub	(w8|w9|w10|w11), w8, #?1
+ **	msr	fpmr, x1
+ **	fdot	za\.s\[\1, 0, vgx4\], {z4\.b - z7\.b}, {z0\.b - z3\.b}
+ **	ret
+ */
+ TEST_ZA_XN (dot_w8m1_z4_z0, svmfloat8x4_t,
+ 	    svdot_za32_mf8_vg1x4_fpm (w8 - 1, z4, z0, fpm0),
+ 	    svdot_za32_vg1x4_fpm (w8 - 1, z4, z0, fpm0))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/ld1_mf8_x2.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/ld1_mf8_x2.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/ld1_mf8_x2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/ld1_mf8_x2.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,262 ----
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" { target { ! ilp32 } } } } */
+ 
+ #include "test_sme2_acle.h"
+ 
+ /*
+ ** ld1_mf8_base:
+ **	ld1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_base, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svld1_mf8_x2 (pn8, x0),
+ 		 z0 = svld1_x2 (pn8, x0))
+ 
+ /*
+ ** ld1_mf8_index:
+ **	ld1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0, x1\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_index, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svld1_mf8_x2 (pn8, x0 + x1),
+ 		 z0 = svld1_x2 (pn8, x0 + x1))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ld1_mf8_1:
+ **	incb	x0
+ **	ld1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_1, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svld1_mf8_x2 (pn8, x0 + svcntb ()),
+ 		 z0 = svld1_x2 (pn8, x0 + svcntb ()))
+ 
+ /*
+ ** ld1_mf8_2:
+ **	ld1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0, #2, mul vl\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_2, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svld1_mf8_x2 (pn8, x0 + svcntb () * 2),
+ 		 z0 = svld1_x2 (pn8, x0 + svcntb () * 2))
+ 
+ /*
+ ** ld1_mf8_14:
+ **	ld1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0, #14, mul vl\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_14, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svld1_mf8_x2 (pn8, x0 + svcntb () * 14),
+ 		 z0 = svld1_x2 (pn8, x0 + svcntb () * 14))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ld1_mf8_16:
+ **	incb	x0, all, mul #16
+ **	ld1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_16, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svld1_mf8_x2 (pn8, x0 + svcntb () * 16),
+ 		 z0 = svld1_x2 (pn8, x0 + svcntb () * 16))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ld1_mf8_m1:
+ **	decb	x0
+ **	ld1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_m1, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svld1_mf8_x2 (pn8, x0 - svcntb ()),
+ 		 z0 = svld1_x2 (pn8, x0 - svcntb ()))
+ 
+ /*
+ ** ld1_mf8_m2:
+ **	ld1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0, #-2, mul vl\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_m2, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svld1_mf8_x2 (pn8, x0 - svcntb () * 2),
+ 		 z0 = svld1_x2 (pn8, x0 - svcntb () * 2))
+ 
+ /*
+ ** ld1_mf8_m16:
+ **	ld1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0, #-16, mul vl\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_m16, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svld1_mf8_x2 (pn8, x0 - svcntb () * 16),
+ 		 z0 = svld1_x2 (pn8, x0 - svcntb () * 16))
+ 
+ /*
+ ** ld1_mf8_m18:
+ **	addvl	(x[0-9]+), x0, #-18
+ **	ld1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[\1\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_m18, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svld1_mf8_x2 (pn8, x0 - svcntb () * 18),
+ 		 z0 = svld1_x2 (pn8, x0 - svcntb () * 18))
+ 
+ /*
+ ** ld1_mf8_z17:
+ **	ld1b	{z[^\n]+}, pn8/z, \[x0\]
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_z17, svmfloat8x2_t, mfloat8_t,
+ 		 z17 = svld1_mf8_x2 (pn8, x0),
+ 		 z17 = svld1_x2 (pn8, x0))
+ 
+ /*
+ ** ld1_mf8_z22:
+ **	ld1b	{z22\.b(?: - |, )z23\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_z22, svmfloat8x2_t, mfloat8_t,
+ 		 z22 = svld1_mf8_x2 (pn8, x0),
+ 		 z22 = svld1_x2 (pn8, x0))
+ 
+ /*
+ ** ld1_mf8_z28:
+ **	ld1b	{z28\.b(?: - |, )z29\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_z28, svmfloat8x2_t, mfloat8_t,
+ 		 z28 = svld1_mf8_x2 (pn8, x0),
+ 		 z28 = svld1_x2 (pn8, x0))
+ 
+ /*
+ ** ld1_mf8_pn0:
+ **	mov	p([89]|1[0-5])\.b, p0\.b
+ **	ld1b	{z0\.b(?: - |, )z1\.b}, pn\1/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_pn0, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svld1_mf8_x2 (pn0, x0),
+ 		 z0 = svld1_x2 (pn0, x0))
+ 
+ /*
+ ** ld1_mf8_pn7:
+ **	mov	p([89]|1[0-5])\.b, p7\.b
+ **	ld1b	{z0\.b(?: - |, )z1\.b}, pn\1/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_pn7, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svld1_mf8_x2 (pn7, x0),
+ 		 z0 = svld1_x2 (pn7, x0))
+ 
+ /*
+ ** ld1_mf8_pn15:
+ **	ld1b	{z0\.b(?: - |, )z1\.b}, pn15/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_pn15, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svld1_mf8_x2 (pn15, x0),
+ 		 z0 = svld1_x2 (pn15, x0))
+ 
+ /*
+ ** ld1_vnum_mf8_0:
+ **	ld1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_vnum_mf8_0, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svld1_vnum_mf8_x2 (pn8, x0, 0),
+ 		 z0 = svld1_vnum_x2 (pn8, x0, 0))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ld1_vnum_mf8_1:
+ **	incb	x0
+ **	ld1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_vnum_mf8_1, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svld1_vnum_mf8_x2 (pn8, x0, 1),
+ 		 z0 = svld1_vnum_x2 (pn8, x0, 1))
+ 
+ /*
+ ** ld1_vnum_mf8_2:
+ **	ld1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0, #2, mul vl\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_vnum_mf8_2, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svld1_vnum_mf8_x2 (pn8, x0, 2),
+ 		 z0 = svld1_vnum_x2 (pn8, x0, 2))
+ 
+ /*
+ ** ld1_vnum_mf8_14:
+ **	ld1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0, #14, mul vl\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_vnum_mf8_14, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svld1_vnum_mf8_x2 (pn8, x0, 14),
+ 		 z0 = svld1_vnum_x2 (pn8, x0, 14))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ld1_vnum_mf8_16:
+ **	incb	x0, all, mul #16
+ **	ld1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_vnum_mf8_16, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svld1_vnum_mf8_x2 (pn8, x0, 16),
+ 		 z0 = svld1_vnum_x2 (pn8, x0, 16))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ld1_vnum_mf8_m1:
+ **	decb	x0
+ **	ld1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_vnum_mf8_m1, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svld1_vnum_mf8_x2 (pn8, x0, -1),
+ 		 z0 = svld1_vnum_x2 (pn8, x0, -1))
+ 
+ /*
+ ** ld1_vnum_mf8_m2:
+ **	ld1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0, #-2, mul vl\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_vnum_mf8_m2, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svld1_vnum_mf8_x2 (pn8, x0, -2),
+ 		 z0 = svld1_vnum_x2 (pn8, x0, -2))
+ 
+ /*
+ ** ld1_vnum_mf8_m16:
+ **	ld1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0, #-16, mul vl\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_vnum_mf8_m16, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svld1_vnum_mf8_x2 (pn8, x0, -16),
+ 		 z0 = svld1_vnum_x2 (pn8, x0, -16))
+ 
+ /*
+ ** ld1_vnum_mf8_m18:
+ **	addvl	(x[0-9]+), x0, #-18
+ **	ld1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[\1\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_vnum_mf8_m18, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svld1_vnum_mf8_x2 (pn8, x0, -18),
+ 		 z0 = svld1_vnum_x2 (pn8, x0, -18))
+ 
+ /*
+ ** ld1_vnum_mf8_x1:
+ **	cntb	(x[0-9]+)
+ ** (
+ **	madd	(x[0-9]+), (?:x1, \1|\1, x1), x0
+ **	ld1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[\2\]
+ ** |
+ **	mul	(x[0-9]+), (?:x1, \1|\1, x1)
+ **	ld1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0, \3\]
+ ** )
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_vnum_mf8_x1, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svld1_vnum_mf8_x2 (pn8, x0, x1),
+ 		 z0 = svld1_vnum_x2 (pn8, x0, x1))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/ld1_mf8_x4.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/ld1_mf8_x4.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/ld1_mf8_x4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/ld1_mf8_x4.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,354 ----
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" { target { ! ilp32 } } } } */
+ 
+ #include "test_sme2_acle.h"
+ 
+ /*
+ ** ld1_mf8_base:
+ **	ld1b	{z0\.b - z3\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_base, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svld1_mf8_x4 (pn8, x0),
+ 		 z0 = svld1_x4 (pn8, x0))
+ 
+ /*
+ ** ld1_mf8_index:
+ **	ld1b	{z0\.b - z3\.b}, pn8/z, \[x0, x1\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_index, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svld1_mf8_x4 (pn8, x0 + x1),
+ 		 z0 = svld1_x4 (pn8, x0 + x1))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ld1_mf8_1:
+ **	incb	x0
+ **	ld1b	{z0\.b - z3\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_1, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svld1_mf8_x4 (pn8, x0 + svcntb ()),
+ 		 z0 = svld1_x4 (pn8, x0 + svcntb ()))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ld1_mf8_2:
+ **	incb	x0, all, mul #2
+ **	ld1b	{z0\.b - z3\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_2, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svld1_mf8_x4 (pn8, x0 + svcntb () * 2),
+ 		 z0 = svld1_x4 (pn8, x0 + svcntb () * 2))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ld1_mf8_3:
+ **	incb	x0, all, mul #3
+ **	ld1b	{z0\.b - z3\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_3, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svld1_mf8_x4 (pn8, x0 + svcntb () * 3),
+ 		 z0 = svld1_x4 (pn8, x0 + svcntb () * 3))
+ 
+ /*
+ ** ld1_mf8_4:
+ **	ld1b	{z0\.b - z3\.b}, pn8/z, \[x0, #4, mul vl\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_4, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svld1_mf8_x4 (pn8, x0 + svcntb () * 4),
+ 		 z0 = svld1_x4 (pn8, x0 + svcntb () * 4))
+ 
+ /*
+ ** ld1_mf8_28:
+ **	ld1b	{z0\.b - z3\.b}, pn8/z, \[x0, #28, mul vl\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_28, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svld1_mf8_x4 (pn8, x0 + svcntb () * 28),
+ 		 z0 = svld1_x4 (pn8, x0 + svcntb () * 28))
+ 
+ /*
+ ** ld1_mf8_32:
+ **	[^{]*
+ **	ld1b	{z0\.b - z3\.b}, pn8/z, \[x0, x[0-9]+\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_32, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svld1_mf8_x4 (pn8, x0 + svcntb () * 32),
+ 		 z0 = svld1_x4 (pn8, x0 + svcntb () * 32))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ld1_mf8_m1:
+ **	decb	x0
+ **	ld1b	{z0\.b - z3\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_m1, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svld1_mf8_x4 (pn8, x0 - svcntb ()),
+ 		 z0 = svld1_x4 (pn8, x0 - svcntb ()))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ld1_mf8_m2:
+ **	decb	x0, all, mul #2
+ **	ld1b	{z0\.b - z3\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_m2, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svld1_mf8_x4 (pn8, x0 - svcntb () * 2),
+ 		 z0 = svld1_x4 (pn8, x0 - svcntb () * 2))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ld1_mf8_m3:
+ **	decb	x0, all, mul #3
+ **	ld1b	{z0\.b - z3\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_m3, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svld1_mf8_x4 (pn8, x0 - svcntb () * 3),
+ 		 z0 = svld1_x4 (pn8, x0 - svcntb () * 3))
+ 
+ /*
+ ** ld1_mf8_m4:
+ **	ld1b	{z0\.b - z3\.b}, pn8/z, \[x0, #-4, mul vl\]
+ **	ret
+ */
+   TEST_LOAD_COUNT (ld1_mf8_m4, svmfloat8x4_t, mfloat8_t,
+ 		   z0 = svld1_mf8_x4 (pn8, x0 - svcntb () * 4),
+ 		   z0 = svld1_x4 (pn8, x0 - svcntb () * 4))
+ 
+ /*
+ ** ld1_mf8_m32:
+ **	ld1b	{z0\.b - z3\.b}, pn8/z, \[x0, #-32, mul vl\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_m32, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svld1_mf8_x4 (pn8, x0 - svcntb () * 32),
+ 		 z0 = svld1_x4 (pn8, x0 - svcntb () * 32))
+ 
+ /*
+ ** ld1_mf8_m36:
+ **	[^{]*
+ **	ld1b	{z0\.b - z3\.b}, pn8/z, \[x0, x[0-9]+\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_m36, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svld1_mf8_x4 (pn8, x0 - svcntb () * 36),
+ 		 z0 = svld1_x4 (pn8, x0 - svcntb () * 36))
+ 
+ /*
+ ** ld1_mf8_z17:
+ **	ld1b	{z[^\n]+}, pn8/z, \[x0\]
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_z17, svmfloat8x4_t, mfloat8_t,
+ 		 z17 = svld1_mf8_x4 (pn8, x0),
+ 		 z17 = svld1_x4 (pn8, x0))
+ 
+ /*
+ ** ld1_mf8_z22:
+ **	ld1b	{z[^\n]+}, pn8/z, \[x0\]
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_z22, svmfloat8x4_t, mfloat8_t,
+ 		 z22 = svld1_mf8_x4 (pn8, x0),
+ 		 z22 = svld1_x4 (pn8, x0))
+ 
+ /*
+ ** ld1_mf8_z28:
+ **	ld1b	{z28\.b(?: - |, )z31\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_z28, svmfloat8x4_t, mfloat8_t,
+ 		 z28 = svld1_mf8_x4 (pn8, x0),
+ 		 z28 = svld1_x4 (pn8, x0))
+ 
+ /*
+ ** ld1_mf8_pn0:
+ **	mov	p([89]|1[0-5])\.b, p0\.b
+ **	ld1b	{z0\.b(?: - |, )z3\.b}, pn\1/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_pn0, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svld1_mf8_x4 (pn0, x0),
+ 		 z0 = svld1_x4 (pn0, x0))
+ 
+ /*
+ ** ld1_mf8_pn7:
+ **	mov	p([89]|1[0-5])\.b, p7\.b
+ **	ld1b	{z0\.b(?: - |, )z3\.b}, pn\1/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_pn7, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svld1_mf8_x4 (pn7, x0),
+ 		 z0 = svld1_x4 (pn7, x0))
+ 
+ /*
+ ** ld1_mf8_pn15:
+ **	ld1b	{z0\.b(?: - |, )z3\.b}, pn15/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_pn15, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svld1_mf8_x4 (pn15, x0),
+ 		 z0 = svld1_x4 (pn15, x0))
+ 
+ /*
+ ** ld1_vnum_mf8_0:
+ **	ld1b	{z0\.b - z3\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_vnum_mf8_0, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svld1_vnum_mf8_x4 (pn8, x0, 0),
+ 		 z0 = svld1_vnum_x4 (pn8, x0, 0))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ld1_vnum_mf8_1:
+ **	incb	x0
+ **	ld1b	{z0\.b - z3\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_vnum_mf8_1, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svld1_vnum_mf8_x4 (pn8, x0, 1),
+ 		 z0 = svld1_vnum_x4 (pn8, x0, 1))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ld1_vnum_mf8_2:
+ **	incb	x0, all, mul #2
+ **	ld1b	{z0\.b - z3\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_vnum_mf8_2, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svld1_vnum_mf8_x4 (pn8, x0, 2),
+ 		 z0 = svld1_vnum_x4 (pn8, x0, 2))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ld1_vnum_mf8_3:
+ **	incb	x0, all, mul #3
+ **	ld1b	{z0\.b - z3\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_vnum_mf8_3, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svld1_vnum_mf8_x4 (pn8, x0, 3),
+ 		 z0 = svld1_vnum_x4 (pn8, x0, 3))
+ 
+ /*
+ ** ld1_vnum_mf8_4:
+ **	ld1b	{z0\.b - z3\.b}, pn8/z, \[x0, #4, mul vl\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_vnum_mf8_4, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svld1_vnum_mf8_x4 (pn8, x0, 4),
+ 		 z0 = svld1_vnum_x4 (pn8, x0, 4))
+ 
+ /*
+ ** ld1_vnum_mf8_28:
+ **	ld1b	{z0\.b - z3\.b}, pn8/z, \[x0, #28, mul vl\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_vnum_mf8_28, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svld1_vnum_mf8_x4 (pn8, x0, 28),
+ 		 z0 = svld1_vnum_x4 (pn8, x0, 28))
+ 
+ /*
+ ** ld1_vnum_mf8_32:
+ **	[^{]*
+ **	ld1b	{z0\.b - z3\.b}, pn8/z, \[x0, x[0-9]+\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_vnum_mf8_32, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svld1_vnum_mf8_x4 (pn8, x0, 32),
+ 		 z0 = svld1_vnum_x4 (pn8, x0, 32))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ld1_vnum_mf8_m1:
+ **	decb	x0
+ **	ld1b	{z0\.b - z3\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_vnum_mf8_m1, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svld1_vnum_mf8_x4 (pn8, x0, -1),
+ 		 z0 = svld1_vnum_x4 (pn8, x0, -1))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ld1_vnum_mf8_m2:
+ **	decb	x0, all, mul #2
+ **	ld1b	{z0\.b - z3\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_vnum_mf8_m2, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svld1_vnum_mf8_x4 (pn8, x0, -2),
+ 		 z0 = svld1_vnum_x4 (pn8, x0, -2))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ld1_vnum_mf8_m3:
+ **	decb	x0, all, mul #3
+ **	ld1b	{z0\.b - z3\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_vnum_mf8_m3, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svld1_vnum_mf8_x4 (pn8, x0, -3),
+ 		 z0 = svld1_vnum_x4 (pn8, x0, -3))
+ 
+ /*
+ ** ld1_vnum_mf8_m4:
+ **	ld1b	{z0\.b - z3\.b}, pn8/z, \[x0, #-4, mul vl\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_vnum_mf8_m4, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svld1_vnum_mf8_x4 (pn8, x0, -4),
+ 		 z0 = svld1_vnum_x4 (pn8, x0, -4))
+ 
+ /*
+ ** ld1_vnum_mf8_m32:
+ **	ld1b	{z0\.b - z3\.b}, pn8/z, \[x0, #-32, mul vl\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_vnum_mf8_m32, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svld1_vnum_mf8_x4 (pn8, x0, -32),
+ 		 z0 = svld1_vnum_x4 (pn8, x0, -32))
+ 
+ /*
+ ** ld1_vnum_mf8_m36:
+ **	[^{]*
+ **	ld1b	{z0\.b - z3\.b}, pn8/z, \[x0, x[0-9]+\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_vnum_mf8_m36, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svld1_vnum_mf8_x4 (pn8, x0, -36),
+ 		 z0 = svld1_vnum_x4 (pn8, x0, -36))
+ 
+ /*
+ ** ld1_vnum_mf8_x1:
+ **	cntb	(x[0-9]+)
+ ** (
+ **	madd	(x[0-9]+), (?:x1, \1|\1, x1), x0
+ **	ld1b	{z0\.b - z3\.b}, pn8/z, \[\2\]
+ ** |
+ **	mul	(x[0-9]+), (?:x1, \1|\1, x1)
+ **	ld1b	{z0\.b - z3\.b}, pn8/z, \[x0, \3\]
+ ** )
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_vnum_mf8_x1, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svld1_vnum_mf8_x4 (pn8, x0, x1),
+ 		 z0 = svld1_vnum_x4 (pn8, x0, x1))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/ldnt1_mf8_x2.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/ldnt1_mf8_x2.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/ldnt1_mf8_x2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/ldnt1_mf8_x2.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,262 ----
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" { target { ! ilp32 } } } } */
+ 
+ #include "test_sme2_acle.h"
+ 
+ /*
+ ** ldnt1_mf8_base:
+ **	ldnt1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_base, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svldnt1_mf8_x2 (pn8, x0),
+ 		 z0 = svldnt1_x2 (pn8, x0))
+ 
+ /*
+ ** ldnt1_mf8_index:
+ **	ldnt1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0, x1\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_index, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svldnt1_mf8_x2 (pn8, x0 + x1),
+ 		 z0 = svldnt1_x2 (pn8, x0 + x1))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ldnt1_mf8_1:
+ **	incb	x0
+ **	ldnt1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_1, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svldnt1_mf8_x2 (pn8, x0 + svcntb ()),
+ 		 z0 = svldnt1_x2 (pn8, x0 + svcntb ()))
+ 
+ /*
+ ** ldnt1_mf8_2:
+ **	ldnt1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0, #2, mul vl\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_2, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svldnt1_mf8_x2 (pn8, x0 + svcntb () * 2),
+ 		 z0 = svldnt1_x2 (pn8, x0 + svcntb () * 2))
+ 
+ /*
+ ** ldnt1_mf8_14:
+ **	ldnt1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0, #14, mul vl\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_14, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svldnt1_mf8_x2 (pn8, x0 + svcntb () * 14),
+ 		 z0 = svldnt1_x2 (pn8, x0 + svcntb () * 14))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ldnt1_mf8_16:
+ **	incb	x0, all, mul #16
+ **	ldnt1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_16, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svldnt1_mf8_x2 (pn8, x0 + svcntb () * 16),
+ 		 z0 = svldnt1_x2 (pn8, x0 + svcntb () * 16))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ldnt1_mf8_m1:
+ **	decb	x0
+ **	ldnt1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_m1, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svldnt1_mf8_x2 (pn8, x0 - svcntb ()),
+ 		 z0 = svldnt1_x2 (pn8, x0 - svcntb ()))
+ 
+ /*
+ ** ldnt1_mf8_m2:
+ **	ldnt1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0, #-2, mul vl\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_m2, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svldnt1_mf8_x2 (pn8, x0 - svcntb () * 2),
+ 		 z0 = svldnt1_x2 (pn8, x0 - svcntb () * 2))
+ 
+ /*
+ ** ldnt1_mf8_m16:
+ **	ldnt1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0, #-16, mul vl\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_m16, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svldnt1_mf8_x2 (pn8, x0 - svcntb () * 16),
+ 		 z0 = svldnt1_x2 (pn8, x0 - svcntb () * 16))
+ 
+ /*
+ ** ldnt1_mf8_m18:
+ **	addvl	(x[0-9]+), x0, #-18
+ **	ldnt1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[\1\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_m18, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svldnt1_mf8_x2 (pn8, x0 - svcntb () * 18),
+ 		 z0 = svldnt1_x2 (pn8, x0 - svcntb () * 18))
+ 
+ /*
+ ** ldnt1_mf8_z17:
+ **	ldnt1b	{z[^\n]+}, pn8/z, \[x0\]
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_z17, svmfloat8x2_t, mfloat8_t,
+ 		 z17 = svldnt1_mf8_x2 (pn8, x0),
+ 		 z17 = svldnt1_x2 (pn8, x0))
+ 
+ /*
+ ** ldnt1_mf8_z22:
+ **	ldnt1b	{z22\.b(?: - |, )z23\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_z22, svmfloat8x2_t, mfloat8_t,
+ 		 z22 = svldnt1_mf8_x2 (pn8, x0),
+ 		 z22 = svldnt1_x2 (pn8, x0))
+ 
+ /*
+ ** ldnt1_mf8_z28:
+ **	ldnt1b	{z28\.b(?: - |, )z29\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_z28, svmfloat8x2_t, mfloat8_t,
+ 		 z28 = svldnt1_mf8_x2 (pn8, x0),
+ 		 z28 = svldnt1_x2 (pn8, x0))
+ 
+ /*
+ ** ldnt1_mf8_pn0:
+ **	mov	p([89]|1[0-5])\.b, p0\.b
+ **	ldnt1b	{z0\.b(?: - |, )z1\.b}, pn\1/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_pn0, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svldnt1_mf8_x2 (pn0, x0),
+ 		 z0 = svldnt1_x2 (pn0, x0))
+ 
+ /*
+ ** ldnt1_mf8_pn7:
+ **	mov	p([89]|1[0-5])\.b, p7\.b
+ **	ldnt1b	{z0\.b(?: - |, )z1\.b}, pn\1/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_pn7, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svldnt1_mf8_x2 (pn7, x0),
+ 		 z0 = svldnt1_x2 (pn7, x0))
+ 
+ /*
+ ** ldnt1_mf8_pn15:
+ **	ldnt1b	{z0\.b(?: - |, )z1\.b}, pn15/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_pn15, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svldnt1_mf8_x2 (pn15, x0),
+ 		 z0 = svldnt1_x2 (pn15, x0))
+ 
+ /*
+ ** ldnt1_vnum_mf8_0:
+ **	ldnt1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_vnum_mf8_0, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svldnt1_vnum_mf8_x2 (pn8, x0, 0),
+ 		 z0 = svldnt1_vnum_x2 (pn8, x0, 0))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ldnt1_vnum_mf8_1:
+ **	incb	x0
+ **	ldnt1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_vnum_mf8_1, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svldnt1_vnum_mf8_x2 (pn8, x0, 1),
+ 		 z0 = svldnt1_vnum_x2 (pn8, x0, 1))
+ 
+ /*
+ ** ldnt1_vnum_mf8_2:
+ **	ldnt1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0, #2, mul vl\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_vnum_mf8_2, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svldnt1_vnum_mf8_x2 (pn8, x0, 2),
+ 		 z0 = svldnt1_vnum_x2 (pn8, x0, 2))
+ 
+ /*
+ ** ldnt1_vnum_mf8_14:
+ **	ldnt1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0, #14, mul vl\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_vnum_mf8_14, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svldnt1_vnum_mf8_x2 (pn8, x0, 14),
+ 		 z0 = svldnt1_vnum_x2 (pn8, x0, 14))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ldnt1_vnum_mf8_16:
+ **	incb	x0, all, mul #16
+ **	ldnt1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_vnum_mf8_16, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svldnt1_vnum_mf8_x2 (pn8, x0, 16),
+ 		 z0 = svldnt1_vnum_x2 (pn8, x0, 16))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ldnt1_vnum_mf8_m1:
+ **	decb	x0
+ **	ldnt1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_vnum_mf8_m1, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svldnt1_vnum_mf8_x2 (pn8, x0, -1),
+ 		 z0 = svldnt1_vnum_x2 (pn8, x0, -1))
+ 
+ /*
+ ** ldnt1_vnum_mf8_m2:
+ **	ldnt1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0, #-2, mul vl\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_vnum_mf8_m2, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svldnt1_vnum_mf8_x2 (pn8, x0, -2),
+ 		 z0 = svldnt1_vnum_x2 (pn8, x0, -2))
+ 
+ /*
+ ** ldnt1_vnum_mf8_m16:
+ **	ldnt1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0, #-16, mul vl\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_vnum_mf8_m16, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svldnt1_vnum_mf8_x2 (pn8, x0, -16),
+ 		 z0 = svldnt1_vnum_x2 (pn8, x0, -16))
+ 
+ /*
+ ** ldnt1_vnum_mf8_m18:
+ **	addvl	(x[0-9]+), x0, #-18
+ **	ldnt1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[\1\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_vnum_mf8_m18, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svldnt1_vnum_mf8_x2 (pn8, x0, -18),
+ 		 z0 = svldnt1_vnum_x2 (pn8, x0, -18))
+ 
+ /*
+ ** ldnt1_vnum_mf8_x1:
+ **	cntb	(x[0-9]+)
+ ** (
+ **	madd	(x[0-9]+), (?:x1, \1|\1, x1), x0
+ **	ldnt1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[\2\]
+ ** |
+ **	mul	(x[0-9]+), (?:x1, \1|\1, x1)
+ **	ldnt1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0, \3\]
+ ** )
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_vnum_mf8_x1, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svldnt1_vnum_mf8_x2 (pn8, x0, x1),
+ 		 z0 = svldnt1_vnum_x2 (pn8, x0, x1))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/ldnt1_mf8_x4.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/ldnt1_mf8_x4.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/ldnt1_mf8_x4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/ldnt1_mf8_x4.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,354 ----
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" { target { ! ilp32 } } } } */
+ 
+ #include "test_sme2_acle.h"
+ 
+ /*
+ ** ldnt1_mf8_base:
+ **	ldnt1b	{z0\.b - z3\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_base, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svldnt1_mf8_x4 (pn8, x0),
+ 		 z0 = svldnt1_x4 (pn8, x0))
+ 
+ /*
+ ** ldnt1_mf8_index:
+ **	ldnt1b	{z0\.b - z3\.b}, pn8/z, \[x0, x1\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_index, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svldnt1_mf8_x4 (pn8, x0 + x1),
+ 		 z0 = svldnt1_x4 (pn8, x0 + x1))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ldnt1_mf8_1:
+ **	incb	x0
+ **	ldnt1b	{z0\.b - z3\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_1, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svldnt1_mf8_x4 (pn8, x0 + svcntb ()),
+ 		 z0 = svldnt1_x4 (pn8, x0 + svcntb ()))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ldnt1_mf8_2:
+ **	incb	x0, all, mul #2
+ **	ldnt1b	{z0\.b - z3\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_2, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svldnt1_mf8_x4 (pn8, x0 + svcntb () * 2),
+ 		 z0 = svldnt1_x4 (pn8, x0 + svcntb () * 2))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ldnt1_mf8_3:
+ **	incb	x0, all, mul #3
+ **	ldnt1b	{z0\.b - z3\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_3, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svldnt1_mf8_x4 (pn8, x0 + svcntb () * 3),
+ 		 z0 = svldnt1_x4 (pn8, x0 + svcntb () * 3))
+ 
+ /*
+ ** ldnt1_mf8_4:
+ **	ldnt1b	{z0\.b - z3\.b}, pn8/z, \[x0, #4, mul vl\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_4, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svldnt1_mf8_x4 (pn8, x0 + svcntb () * 4),
+ 		 z0 = svldnt1_x4 (pn8, x0 + svcntb () * 4))
+ 
+ /*
+ ** ldnt1_mf8_28:
+ **	ldnt1b	{z0\.b - z3\.b}, pn8/z, \[x0, #28, mul vl\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_28, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svldnt1_mf8_x4 (pn8, x0 + svcntb () * 28),
+ 		 z0 = svldnt1_x4 (pn8, x0 + svcntb () * 28))
+ 
+ /*
+ ** ldnt1_mf8_32:
+ **	[^{]*
+ **	ldnt1b	{z0\.b - z3\.b}, pn8/z, \[x0, x[0-9]+\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_32, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svldnt1_mf8_x4 (pn8, x0 + svcntb () * 32),
+ 		 z0 = svldnt1_x4 (pn8, x0 + svcntb () * 32))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ldnt1_mf8_m1:
+ **	decb	x0
+ **	ldnt1b	{z0\.b - z3\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_m1, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svldnt1_mf8_x4 (pn8, x0 - svcntb ()),
+ 		 z0 = svldnt1_x4 (pn8, x0 - svcntb ()))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ldnt1_mf8_m2:
+ **	decb	x0, all, mul #2
+ **	ldnt1b	{z0\.b - z3\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_m2, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svldnt1_mf8_x4 (pn8, x0 - svcntb () * 2),
+ 		 z0 = svldnt1_x4 (pn8, x0 - svcntb () * 2))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ldnt1_mf8_m3:
+ **	decb	x0, all, mul #3
+ **	ldnt1b	{z0\.b - z3\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_m3, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svldnt1_mf8_x4 (pn8, x0 - svcntb () * 3),
+ 		 z0 = svldnt1_x4 (pn8, x0 - svcntb () * 3))
+ 
+ /*
+ ** ldnt1_mf8_m4:
+ **	ldnt1b	{z0\.b - z3\.b}, pn8/z, \[x0, #-4, mul vl\]
+ **	ret
+ */
+   TEST_LOAD_COUNT (ldnt1_mf8_m4, svmfloat8x4_t, mfloat8_t,
+ 		   z0 = svldnt1_mf8_x4 (pn8, x0 - svcntb () * 4),
+ 		   z0 = svldnt1_x4 (pn8, x0 - svcntb () * 4))
+ 
+ /*
+ ** ldnt1_mf8_m32:
+ **	ldnt1b	{z0\.b - z3\.b}, pn8/z, \[x0, #-32, mul vl\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_m32, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svldnt1_mf8_x4 (pn8, x0 - svcntb () * 32),
+ 		 z0 = svldnt1_x4 (pn8, x0 - svcntb () * 32))
+ 
+ /*
+ ** ldnt1_mf8_m36:
+ **	[^{]*
+ **	ldnt1b	{z0\.b - z3\.b}, pn8/z, \[x0, x[0-9]+\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_m36, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svldnt1_mf8_x4 (pn8, x0 - svcntb () * 36),
+ 		 z0 = svldnt1_x4 (pn8, x0 - svcntb () * 36))
+ 
+ /*
+ ** ldnt1_mf8_z17:
+ **	ldnt1b	{z[^\n]+}, pn8/z, \[x0\]
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_z17, svmfloat8x4_t, mfloat8_t,
+ 		 z17 = svldnt1_mf8_x4 (pn8, x0),
+ 		 z17 = svldnt1_x4 (pn8, x0))
+ 
+ /*
+ ** ldnt1_mf8_z22:
+ **	ldnt1b	{z[^\n]+}, pn8/z, \[x0\]
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_z22, svmfloat8x4_t, mfloat8_t,
+ 		 z22 = svldnt1_mf8_x4 (pn8, x0),
+ 		 z22 = svldnt1_x4 (pn8, x0))
+ 
+ /*
+ ** ldnt1_mf8_z28:
+ **	ldnt1b	{z28\.b(?: - |, )z31\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_z28, svmfloat8x4_t, mfloat8_t,
+ 		 z28 = svldnt1_mf8_x4 (pn8, x0),
+ 		 z28 = svldnt1_x4 (pn8, x0))
+ 
+ /*
+ ** ldnt1_mf8_pn0:
+ **	mov	p([89]|1[0-5])\.b, p0\.b
+ **	ldnt1b	{z0\.b(?: - |, )z3\.b}, pn\1/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_pn0, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svldnt1_mf8_x4 (pn0, x0),
+ 		 z0 = svldnt1_x4 (pn0, x0))
+ 
+ /*
+ ** ldnt1_mf8_pn7:
+ **	mov	p([89]|1[0-5])\.b, p7\.b
+ **	ldnt1b	{z0\.b(?: - |, )z3\.b}, pn\1/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_pn7, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svldnt1_mf8_x4 (pn7, x0),
+ 		 z0 = svldnt1_x4 (pn7, x0))
+ 
+ /*
+ ** ldnt1_mf8_pn15:
+ **	ldnt1b	{z0\.b(?: - |, )z3\.b}, pn15/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_pn15, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svldnt1_mf8_x4 (pn15, x0),
+ 		 z0 = svldnt1_x4 (pn15, x0))
+ 
+ /*
+ ** ldnt1_vnum_mf8_0:
+ **	ldnt1b	{z0\.b - z3\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_vnum_mf8_0, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svldnt1_vnum_mf8_x4 (pn8, x0, 0),
+ 		 z0 = svldnt1_vnum_x4 (pn8, x0, 0))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ldnt1_vnum_mf8_1:
+ **	incb	x0
+ **	ldnt1b	{z0\.b - z3\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_vnum_mf8_1, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svldnt1_vnum_mf8_x4 (pn8, x0, 1),
+ 		 z0 = svldnt1_vnum_x4 (pn8, x0, 1))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ldnt1_vnum_mf8_2:
+ **	incb	x0, all, mul #2
+ **	ldnt1b	{z0\.b - z3\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_vnum_mf8_2, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svldnt1_vnum_mf8_x4 (pn8, x0, 2),
+ 		 z0 = svldnt1_vnum_x4 (pn8, x0, 2))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ldnt1_vnum_mf8_3:
+ **	incb	x0, all, mul #3
+ **	ldnt1b	{z0\.b - z3\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_vnum_mf8_3, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svldnt1_vnum_mf8_x4 (pn8, x0, 3),
+ 		 z0 = svldnt1_vnum_x4 (pn8, x0, 3))
+ 
+ /*
+ ** ldnt1_vnum_mf8_4:
+ **	ldnt1b	{z0\.b - z3\.b}, pn8/z, \[x0, #4, mul vl\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_vnum_mf8_4, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svldnt1_vnum_mf8_x4 (pn8, x0, 4),
+ 		 z0 = svldnt1_vnum_x4 (pn8, x0, 4))
+ 
+ /*
+ ** ldnt1_vnum_mf8_28:
+ **	ldnt1b	{z0\.b - z3\.b}, pn8/z, \[x0, #28, mul vl\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_vnum_mf8_28, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svldnt1_vnum_mf8_x4 (pn8, x0, 28),
+ 		 z0 = svldnt1_vnum_x4 (pn8, x0, 28))
+ 
+ /*
+ ** ldnt1_vnum_mf8_32:
+ **	[^{]*
+ **	ldnt1b	{z0\.b - z3\.b}, pn8/z, \[x0, x[0-9]+\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_vnum_mf8_32, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svldnt1_vnum_mf8_x4 (pn8, x0, 32),
+ 		 z0 = svldnt1_vnum_x4 (pn8, x0, 32))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ldnt1_vnum_mf8_m1:
+ **	decb	x0
+ **	ldnt1b	{z0\.b - z3\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_vnum_mf8_m1, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svldnt1_vnum_mf8_x4 (pn8, x0, -1),
+ 		 z0 = svldnt1_vnum_x4 (pn8, x0, -1))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ldnt1_vnum_mf8_m2:
+ **	decb	x0, all, mul #2
+ **	ldnt1b	{z0\.b - z3\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_vnum_mf8_m2, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svldnt1_vnum_mf8_x4 (pn8, x0, -2),
+ 		 z0 = svldnt1_vnum_x4 (pn8, x0, -2))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ldnt1_vnum_mf8_m3:
+ **	decb	x0, all, mul #3
+ **	ldnt1b	{z0\.b - z3\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_vnum_mf8_m3, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svldnt1_vnum_mf8_x4 (pn8, x0, -3),
+ 		 z0 = svldnt1_vnum_x4 (pn8, x0, -3))
+ 
+ /*
+ ** ldnt1_vnum_mf8_m4:
+ **	ldnt1b	{z0\.b - z3\.b}, pn8/z, \[x0, #-4, mul vl\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_vnum_mf8_m4, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svldnt1_vnum_mf8_x4 (pn8, x0, -4),
+ 		 z0 = svldnt1_vnum_x4 (pn8, x0, -4))
+ 
+ /*
+ ** ldnt1_vnum_mf8_m32:
+ **	ldnt1b	{z0\.b - z3\.b}, pn8/z, \[x0, #-32, mul vl\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_vnum_mf8_m32, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svldnt1_vnum_mf8_x4 (pn8, x0, -32),
+ 		 z0 = svldnt1_vnum_x4 (pn8, x0, -32))
+ 
+ /*
+ ** ldnt1_vnum_mf8_m36:
+ **	[^{]*
+ **	ldnt1b	{z0\.b - z3\.b}, pn8/z, \[x0, x[0-9]+\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_vnum_mf8_m36, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svldnt1_vnum_mf8_x4 (pn8, x0, -36),
+ 		 z0 = svldnt1_vnum_x4 (pn8, x0, -36))
+ 
+ /*
+ ** ldnt1_vnum_mf8_x1:
+ **	cntb	(x[0-9]+)
+ ** (
+ **	madd	(x[0-9]+), (?:x1, \1|\1, x1), x0
+ **	ldnt1b	{z0\.b - z3\.b}, pn8/z, \[\2\]
+ ** |
+ **	mul	(x[0-9]+), (?:x1, \1|\1, x1)
+ **	ldnt1b	{z0\.b - z3\.b}, pn8/z, \[x0, \3\]
+ ** )
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_vnum_mf8_x1, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svldnt1_vnum_mf8_x4 (pn8, x0, x1),
+ 		 z0 = svldnt1_vnum_x4 (pn8, x0, x1))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/luti2_mf8.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/luti2_mf8.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/luti2_mf8.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/luti2_mf8.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,48 ----
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ 
+ /*
+ ** luti2_z1_z0_0:
+ **	luti2	z1\.b, zt0, z0\[0\]
+ **	ret
+ */
+ TEST_XN_SINGLE (luti2_z1_z0_0, svmfloat8_t, svuint8_t, z1,
+ 		svluti2_lane_zt_mf8 (0, z0, 0),
+ 		svluti2_lane_zt_mf8 (0, z0, 0))
+ 
+ /*
+ ** luti2_z18_z5_15:
+ **	luti2	z18\.b, zt0, z5\[15\]
+ **	ret
+ */
+ TEST_XN_SINGLE (luti2_z18_z5_15, svmfloat8_t, svuint8_t, z18,
+ 		svluti2_lane_zt_mf8 (0, z5, 15),
+ 		svluti2_lane_zt_mf8 (0, z5, 15))
+ 
+ /*
+ ** luti2_z24_z7_13:
+ **	luti2	z24\.b, zt0, z7\[13\]
+ **	ret
+ */
+ TEST_XN_SINGLE (luti2_z24_z7_13, svmfloat8_t, svuint8_t, z24,
+ 		svluti2_lane_zt_mf8 (0, z7, 13),
+ 		svluti2_lane_zt_mf8 (0, z7, 13))
+ 
+ /*
+ ** luti2_z28_z16_11:
+ **	luti2	z28\.b, zt0, z16\[11\]
+ **	ret
+ */
+ TEST_XN_SINGLE (luti2_z28_z16_11, svmfloat8_t, svuint8_t, z28,
+ 		svluti2_lane_zt_mf8 (0, z16, 11),
+ 		svluti2_lane_zt_mf8 (0, z16, 11))
+ 
+ /*
+ ** luti2_z24_z23_1:
+ **	luti2	z24\.b, zt0, z23\[1\]
+ **	ret
+ */
+ TEST_XN_SINGLE (luti2_z24_z23_1, svmfloat8_t, svuint8_t, z24,
+ 		svluti2_lane_zt_mf8 (0, z23, 1),
+ 		svluti2_lane_zt_mf8 (0, z23, 1))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/luti2_mf8_x2.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/luti2_mf8_x2.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/luti2_mf8_x2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/luti2_mf8_x2.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,50 ----
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ 
+ /*
+ ** luti2_z1_z0_0:
+ **	luti2	{[^\n]+}, zt0, z0\[0\]
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_XN_SINGLE (luti2_z1_z0_0, svmfloat8x2_t, svuint8_t, z1,
+ 		svluti2_lane_zt_mf8_x2 (0, z0, 0),
+ 		svluti2_lane_zt_mf8_x2 (0, z0, 0))
+ 
+ /*
+ ** luti2_z18_z5_7:
+ **	luti2	{z18\.b - z19\.b}, zt0, z5\[7\]
+ **	ret
+ */
+ TEST_XN_SINGLE (luti2_z18_z5_7, svmfloat8x2_t, svuint8_t, z18,
+ 		svluti2_lane_zt_mf8_x2 (0, z5, 7),
+ 		svluti2_lane_zt_mf8_x2 (0, z5, 7))
+ 
+ /*
+ ** luti2_z24_z7_6:
+ **	luti2	{z24\.b - z25\.b}, zt0, z7\[6\]
+ **	ret
+ */
+ TEST_XN_SINGLE (luti2_z24_z7_6, svmfloat8x2_t, svuint8_t, z24,
+ 		svluti2_lane_zt_mf8_x2 (0, z7, 6),
+ 		svluti2_lane_zt_mf8_x2 (0, z7, 6))
+ 
+ /*
+ ** luti2_z28_z16_3:
+ **	luti2	{z28\.b - z29\.b}, zt0, z16\[3\]
+ **	ret
+ */
+ TEST_XN_SINGLE (luti2_z28_z16_3, svmfloat8x2_t, svuint8_t, z28,
+ 		svluti2_lane_zt_mf8_x2 (0, z16, 3),
+ 		svluti2_lane_zt_mf8_x2 (0, z16, 3))
+ 
+ /*
+ ** luti2_z24_z23_1:
+ **	luti2	{z24\.b - z25\.b}, zt0, z23\[1\]
+ **	ret
+ */
+ TEST_XN_SINGLE (luti2_z24_z23_1, svmfloat8x2_t, svuint8_t, z24,
+ 		svluti2_lane_zt_mf8_x2 (0, z23, 1),
+ 		svluti2_lane_zt_mf8_x2 (0, z23, 1))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/luti2_mf8_x4.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/luti2_mf8_x4.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/luti2_mf8_x4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/luti2_mf8_x4.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,56 ----
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ 
+ /*
+ ** luti2_z1_z0_0:
+ **	luti2	{[^\n]+}, zt0, z0\[0\]
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_XN_SINGLE (luti2_z1_z0_0, svmfloat8x4_t, svuint8_t, z1,
+ 		svluti2_lane_zt_mf8_x4 (0, z0, 0),
+ 		svluti2_lane_zt_mf8_x4 (0, z0, 0))
+ 
+ /*
+ ** luti2_z18_z5_3:
+ **	luti2	{[^\n]+}, zt0, z5\[3\]
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_XN_SINGLE (luti2_z18_z5_3, svmfloat8x4_t, svuint8_t, z18,
+ 		svluti2_lane_zt_mf8_x4 (0, z5, 3),
+ 		svluti2_lane_zt_mf8_x4 (0, z5, 3))
+ 
+ /*
+ ** luti2_z24_z7_2:
+ **	luti2	{z24\.b - z27\.b}, zt0, z7\[2\]
+ **	ret
+ */
+ TEST_XN_SINGLE (luti2_z24_z7_2, svmfloat8x4_t, svuint8_t, z24,
+ 		svluti2_lane_zt_mf8_x4 (0, z7, 2),
+ 		svluti2_lane_zt_mf8_x4 (0, z7, 2))
+ 
+ /*
+ ** luti2_z28_z16_1:
+ **	luti2	{z28\.b - z31\.b}, zt0, z16\[1\]
+ **	ret
+ */
+ TEST_XN_SINGLE (luti2_z28_z16_1, svmfloat8x4_t, svuint8_t, z28,
+ 		svluti2_lane_zt_mf8_x4 (0, z16, 1),
+ 		svluti2_lane_zt_mf8_x4 (0, z16, 1))
+ 
+ /*
+ ** luti2_z24_z23_0:
+ **	luti2	{z24\.b - z27\.b}, zt0, z23\[0\]
+ **	ret
+ */
+ TEST_XN_SINGLE (luti2_z24_z23_0, svmfloat8x4_t, svuint8_t, z24,
+ 		svluti2_lane_zt_mf8_x4 (0, z23, 0),
+ 		svluti2_lane_zt_mf8_x4 (0, z23, 0))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/luti4_mf8.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/luti4_mf8.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/luti4_mf8.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/luti4_mf8.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,48 ----
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ 
+ /*
+ ** luti4_z1_z0_0:
+ **	luti4	z1\.b, zt0, z0\[0\]
+ **	ret
+ */
+ TEST_XN_SINGLE (luti4_z1_z0_0, svmfloat8_t, svuint8_t, z1,
+ 		svluti4_lane_zt_mf8 (0, z0, 0),
+ 		svluti4_lane_zt_mf8 (0, z0, 0))
+ 
+ /*
+ ** luti4_z18_z5_7:
+ **	luti4	z18\.b, zt0, z5\[7\]
+ **	ret
+ */
+ TEST_XN_SINGLE (luti4_z18_z5_7, svmfloat8_t, svuint8_t, z18,
+ 		svluti4_lane_zt_mf8 (0, z5, 7),
+ 		svluti4_lane_zt_mf8 (0, z5, 7))
+ 
+ /*
+ ** luti4_z24_z7_6:
+ **	luti4	z24\.b, zt0, z7\[6\]
+ **	ret
+ */
+ TEST_XN_SINGLE (luti4_z24_z7_6, svmfloat8_t, svuint8_t, z24,
+ 		svluti4_lane_zt_mf8 (0, z7, 6),
+ 		svluti4_lane_zt_mf8 (0, z7, 6))
+ 
+ /*
+ ** luti4_z28_z16_4:
+ **	luti4	z28\.b, zt0, z16\[4\]
+ **	ret
+ */
+ TEST_XN_SINGLE (luti4_z28_z16_4, svmfloat8_t, svuint8_t, z28,
+ 		svluti4_lane_zt_mf8 (0, z16, 4),
+ 		svluti4_lane_zt_mf8 (0, z16, 4))
+ 
+ /*
+ ** luti4_z24_z23_1:
+ **	luti4	z24\.b, zt0, z23\[1\]
+ **	ret
+ */
+ TEST_XN_SINGLE (luti4_z24_z23_1, svmfloat8_t, svuint8_t, z24,
+ 		svluti4_lane_zt_mf8 (0, z23, 1),
+ 		svluti4_lane_zt_mf8 (0, z23, 1))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/luti4_mf8_x2.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/luti4_mf8_x2.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/luti4_mf8_x2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/luti4_mf8_x2.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,50 ----
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ 
+ /*
+ ** luti4_z1_z0_0:
+ **	luti4	{[^\n]+}, zt0, z0\[0\]
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_XN_SINGLE (luti4_z1_z0_0, svmfloat8x2_t, svuint8_t, z1,
+ 		svluti4_lane_zt_mf8_x2 (0, z0, 0),
+ 		svluti4_lane_zt_mf8_x2 (0, z0, 0))
+ 
+ /*
+ ** luti4_z18_z5_3:
+ **	luti4	{z18\.b - z19\.b}, zt0, z5\[3\]
+ **	ret
+ */
+ TEST_XN_SINGLE (luti4_z18_z5_3, svmfloat8x2_t, svuint8_t, z18,
+ 		svluti4_lane_zt_mf8_x2 (0, z5, 3),
+ 		svluti4_lane_zt_mf8_x2 (0, z5, 3))
+ 
+ /*
+ ** luti4_z24_z7_2:
+ **	luti4	{z24\.b - z25\.b}, zt0, z7\[2\]
+ **	ret
+ */
+ TEST_XN_SINGLE (luti4_z24_z7_2, svmfloat8x2_t, svuint8_t, z24,
+ 		svluti4_lane_zt_mf8_x2 (0, z7, 2),
+ 		svluti4_lane_zt_mf8_x2 (0, z7, 2))
+ 
+ /*
+ ** luti4_z28_z16_1:
+ **	luti4	{z28\.b - z29\.b}, zt0, z16\[1\]
+ **	ret
+ */
+ TEST_XN_SINGLE (luti4_z28_z16_1, svmfloat8x2_t, svuint8_t, z28,
+ 		svluti4_lane_zt_mf8_x2 (0, z16, 1),
+ 		svluti4_lane_zt_mf8_x2 (0, z16, 1))
+ 
+ /*
+ ** luti4_z24_z23_0:
+ **	luti4	{z24\.b - z25\.b}, zt0, z23\[0\]
+ **	ret
+ */
+ TEST_XN_SINGLE (luti4_z24_z23_0, svmfloat8x2_t, svuint8_t, z24,
+ 		svluti4_lane_zt_mf8_x2 (0, z23, 0),
+ 		svluti4_lane_zt_mf8_x2 (0, z23, 0))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_lane_za16_mf8_vg2x1.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_lane_za16_mf8_vg2x1.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_lane_za16_mf8_vg2x1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_lane_za16_mf8_vg2x1.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,167 ----
+ /* { dg-do assemble { target { aarch64_asm_sme-f8f16_ok } } } */
+ /* { dg-do compile { target { ! { aarch64_asm_sme-f8f16_ok } } } } */
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ #pragma GCC target "+sme+sme-f8f16"
+ 
+ /*
+ ** mla_lane_0_z0_z0_0:
+ ** 	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), #?0
+ **	fmlal	za\.h\[\1, 0:1\], z0\.b, z0\.b\[0\]
+ **	ret
+ */
+ 
+ TEST_ZA_X1 (mla_lane_0_z0_z0_0, svmfloat8_t,
+ 	    svmla_lane_za16_mf8_vg2x1_fpm (0, z0, z0, 0, fpm0),
+ 	    svmla_lane_za16_vg2x1_fpm (0, z0, z0, 0, fpm0))
+ 
+ /*
+ ** mla_lane_w0_z0_z3_1:
+ ** 	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), w0
+ **	fmlal	za\.h\[\1, 0:1\], z0\.b, z3\.b\[1\]
+ **	ret
+ */
+ TEST_ZA_X1 (mla_lane_w0_z0_z3_1, svmfloat8_t,
+ 	    svmla_lane_za16_mf8_vg2x1_fpm (w0, z0, z3, 1, fpm0),
+ 	    svmla_lane_za16_vg2x1_fpm (w0, z0, z3, 1, fpm0))
+ 
+ /*
+ ** mla_lane_w7_z0_z3_2:
+ ** 	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), w7
+ **	fmlal	za\.h\[\1, 0:1\], z0\.b, z3\.b\[2\]
+ **	ret
+ */
+ TEST_ZA_X1 (mla_lane_w7_z0_z3_2, svmfloat8_t,
+ 	    svmla_lane_za16_mf8_vg2x1_fpm (w7, z0, z3, 2, fpm0),
+ 	    svmla_lane_za16_vg2x1_fpm (w7, z0, z3, 2, fpm0))
+ 
+ /*
+ ** mla_lane_w8_z7_z3_3:
+ ** 	msr	fpmr, x1
+ **	fmlal	za\.h\[w8, 0:1\], z7\.b, z3\.b\[3\]
+ **	ret
+ */
+ TEST_ZA_X1 (mla_lane_w8_z7_z3_3, svmfloat8_t,
+ 	    svmla_lane_za16_mf8_vg2x1_fpm (w8, z7, z3, 3, fpm0),
+ 	    svmla_lane_za16_vg2x1_fpm (w8, z7, z3, 3, fpm0))
+ 
+ /*
+ ** mla_lane_w8_z31_z16_4:
+ ** 	msr	fpmr, x1
+ **	mov	(z[0-7])\.d, z16\.d
+ **	fmlal	za\.h\[w8, 0:1\], z31\.b. \1\.b\[4\]
+ **	ret
+ */
+ TEST_ZA_X1 (mla_lane_w8_z31_z16_4, svmfloat8_t,
+ 	    svmla_lane_za16_mf8_vg2x1_fpm (w8, z31, z16, 4, fpm0),
+ 	    svmla_lane_za16_vg2x1_fpm (w8, z31, z16, 4, fpm0))
+ 
+ /*
+ ** mla_lane_w8p1_z0_z0_5:
+ **	add	(w8|w9|w10|w11), w8, #?1
+ ** 	msr	fpmr, x1
+ **	fmlal	za\.h\[\1, 0:1\], z0\.b, z0\.b\[5\]
+ **	ret
+ */
+ TEST_ZA_X1 (mla_lane_w8p1_z0_z0_5, svmfloat8_t,
+ 	    svmla_lane_za16_mf8_vg2x1_fpm (w8 + 1, z0, z0, 5, fpm0),
+ 	    svmla_lane_za16_vg2x1_fpm (w8 + 1, z0, z0, 5, fpm0))
+ 
+ /*
+ ** mla_lane_w8p2_z23_z0_6:
+ ** 	msr	fpmr, x1
+ **	fmlal	za\.h\[w8, 2:3\], z23\.b, z0\.b\[6\]
+ **	ret
+ */
+ TEST_ZA_X1 (mla_lane_w8p2_z23_z0_6, svmfloat8_t,
+ 	    svmla_lane_za16_mf8_vg2x1_fpm (w8 + 2, z23, z0, 6, fpm0),
+ 	    svmla_lane_za16_vg2x1_fpm (w8 + 2, z23, z0, 6, fpm0))
+ 
+ /*
+ ** mla_lane_w11p6_z23_z0_7:
+ ** 	msr	fpmr, x1
+ **	fmlal	za\.h\[w11, 6:7\], z23\.b, z0\.b\[7\]
+ **	ret
+ */
+ TEST_ZA_X1 (mla_lane_w11p6_z23_z0_7, svmfloat8_t,
+ 	    svmla_lane_za16_mf8_vg2x1_fpm (w11 + 6, z23, z0, 7, fpm0),
+ 	    svmla_lane_za16_vg2x1_fpm (w11 + 6, z23, z0, 7, fpm0))
+ 
+ /*
+ ** mla_lane_w8p7_z7_z7_8:
+ **	add	(w8|w9|w10|w11), w8, #?7
+ ** 	msr	fpmr, x1
+ **	fmlal	za\.h\[\1, 0:1\], z7\.b, z7\.b\[8\]
+ **	ret
+ */
+ TEST_ZA_X1 (mla_lane_w8p7_z7_z7_8, svmfloat8_t,
+ 	    svmla_lane_za16_mf8_vg2x1_fpm (w8 + 7, z7, z7, 8, fpm0),
+ 	    svmla_lane_za16_vg2x1_fpm (w8 + 7, z7, z7, 8, fpm0))
+ 
+ /*
+ ** mla_lane_w11p12_z23_z0_7:
+ ** 	msr	fpmr, x1
+ **	fmlal	za\.h\[w11, 12:13\], z23\.b, z0\.b\[7\]
+ **	ret
+ */
+ TEST_ZA_X1 (mla_lane_w11p12_z23_z0_7, svmfloat8_t,
+ 	    svmla_lane_za16_mf8_vg2x1_fpm (w11 + 12, z23, z0, 7, fpm0),
+ 	    svmla_lane_za16_vg2x1_fpm (w11 + 12, z23, z0, 7, fpm0))
+ 
+ /*
+ ** mla_lane_w8p14_z23_z0_10:
+ ** 	msr	fpmr, x1
+ **	fmlal	za\.h\[w8, 14:15\], z23\.b, z0\.b\[10\]
+ **	ret
+ */
+ TEST_ZA_X1 (mla_lane_w8p14_z23_z0_10, svmfloat8_t,
+ 	    svmla_lane_za16_mf8_vg2x1_fpm (w8 + 14, z23, z0, 10, fpm0),
+ 	    svmla_lane_za16_vg2x1_fpm (w8 + 14, z23, z0, 10, fpm0))
+ 
+ /*
+ ** mla_lane_w8p15_z7_z7_11:
+ **	add	(w8|w9|w10|w11), w8, #?15
+ ** 	msr	fpmr, x1
+ **	fmlal	za\.h\[\1, 0:1\], z7\.b, z7\.b\[11\]
+ **	ret
+ */
+ TEST_ZA_X1 (mla_lane_w8p15_z7_z7_11, svmfloat8_t,
+ 	    svmla_lane_za16_mf8_vg2x1_fpm (w8 + 15, z7, z7, 11, fpm0),
+ 	    svmla_lane_za16_vg2x1_fpm (w8 + 15, z7, z7, 11, fpm0))
+ 
+ /*
+ ** mla_lane_w8p16_z7_z7_12:
+ **	add	(w8|w9|w10|w11), w8, #?16
+ ** 	msr	fpmr, x1
+ **	fmlal	za\.h\[\1, 0:1\], z7\.b, z7\.b\[12\]
+ **	ret
+ */
+ TEST_ZA_X1 (mla_lane_w8p16_z7_z7_12, svmfloat8_t,
+ 	    svmla_lane_za16_mf8_vg2x1_fpm (w8 + 16, z7, z7, 12, fpm0),
+ 	    svmla_lane_za16_vg2x1_fpm (w8 + 16, z7, z7, 12, fpm0))
+ 
+ /*
+ ** mla_lane_w8m1_z16_z0_13:
+ **	sub	(w8|w9|w10|w11), w8, #?1
+ ** 	msr	fpmr, x1
+ **	fmlal	za\.h\[\1, 0:1\], z16\.b, z0\.b\[13\]
+ **	ret
+ */
+ TEST_ZA_X1 (mla_lane_w8m1_z16_z0_13, svmfloat8_t,
+ 	    svmla_lane_za16_mf8_vg2x1_fpm (w8 - 1, z16, z0, 13, fpm0),
+ 	    svmla_lane_za16_vg2x1_fpm (w8 - 1, z16, z0, 13, fpm0))
+ 
+ /*
+ ** mla_lane_w12_z0_z3_15:
+ ** 	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), w12
+ **	fmlal	za\.h\[\1, 0:1\], z0\.b, z3\.b\[15\]
+ **	ret
+ */
+ TEST_ZA_X1 (mla_lane_w12_z0_z3_15, svmfloat8_t,
+ 	    svmla_lane_za16_mf8_vg2x1_fpm (w12, z0, z3, 15, fpm0),
+ 	    svmla_lane_za16_vg2x1_fpm (w12, z0, z3, 15, fpm0))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_lane_za16_mf8_vg2x2.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_lane_za16_mf8_vg2x2.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_lane_za16_mf8_vg2x2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_lane_za16_mf8_vg2x2.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,136 ----
+ /* { dg-do assemble { target { aarch64_asm_sme-f8f16_ok } } } */
+ /* { dg-do compile { target { ! { aarch64_asm_sme-f8f16_ok } } } } */
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ #pragma GCC target "+sme-f8f16"
+ 
+ /*
+ ** mla_lane_0_z0_z4_0:
+ ** 	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), #?0
+ **	fmlal	za\.h\[\1, 0:1, vgx2\], {z0\.b - z1\.b}, z4\.b\[0\]
+ **	ret
+ */
+ TEST_ZA_LANE (mla_lane_0_z0_z4_0, svmfloat8x2_t, svmfloat8_t,
+ 	      svmla_lane_za16_mf8_vg2x2_fpm (0, z0, z4, 0, fpm0),
+ 	      svmla_lane_za16_vg2x2_fpm (0, z0, z4, 0, fpm0))
+ 
+ /*
+ ** mla_lane_w0_z0_z7_1:
+ ** 	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), w0
+ **	fmlal	za\.h\[\1, 0:1, vgx2\], {z0\.b - z1\.b}, z7\.b\[1\]
+ **	ret
+ */
+ TEST_ZA_LANE (mla_lane_w0_z0_z7_1, svmfloat8x2_t, svmfloat8_t,
+ 	      svmla_lane_za16_mf8_vg2x2_fpm (w0, z0, z7, 1, fpm0),
+ 	      svmla_lane_za16_vg2x2_fpm (w0, z0, z7, 1, fpm0))
+ 
+ /*
+ ** mla_lane_w8_z28_z4_2:
+ ** 	msr	fpmr, x1
+ **	fmlal	za\.h\[w8, 0:1, vgx2\], {z28\.b - z29\.b}, z4\.b\[2\]
+ **	ret
+ */
+ TEST_ZA_LANE (mla_lane_w8_z28_z4_2, svmfloat8x2_t, svmfloat8_t,
+ 	      svmla_lane_za16_mf8_vg2x2_fpm (w8, z28, z4, 2, fpm0),
+ 	      svmla_lane_za16_vg2x2_fpm (w8, z28, z4, 2, fpm0))
+ 
+ /*
+ ** mla_lane_w11p2_z0_z4_3:
+ ** 	msr	fpmr, x1
+ **	fmlal	za\.h\[w11, 2:3, vgx2\], {z0\.b - z1\.b}, z4\.b\[3\]
+ **	ret
+ */
+ TEST_ZA_LANE (mla_lane_w11p2_z0_z4_3, svmfloat8x2_t, svmfloat8_t,
+ 	      svmla_lane_za16_mf8_vg2x2_fpm (w11 + 2, z0, z4, 3, fpm0),
+ 	      svmla_lane_za16_vg2x2_fpm (w11 + 2, z0, z4, 3, fpm0))
+ 
+ /*
+ ** mla_lane_w8p6_z0_z4_4:
+ ** 	msr	fpmr, x1
+ **	fmlal	za\.h\[w8, 6:7, vgx2\], {z0\.b - z1\.b}, z4\.b\[4\]
+ **	ret
+ */
+ TEST_ZA_LANE (mla_lane_w8p6_z0_z4_4, svmfloat8x2_t, svmfloat8_t,
+ 	      svmla_lane_za16_mf8_vg2x2_fpm (w8 + 6, z0, z4, 4, fpm0),
+ 	      svmla_lane_za16_vg2x2_fpm (w8 + 6, z0, z4, 4, fpm0))
+ 
+ /*
+ ** mla_lane_w8p7_z0_z4_5:
+ **	add	(w8|w9|w10|w11), w8, #?7
+ ** 	msr	fpmr, x1
+ **	fmlal	za\.h\[\1, 0:1, vgx2\], {z0\.b - z1\.b}, z4\.b\[5\]
+ **	ret
+ */
+ TEST_ZA_LANE (mla_lane_w8p7_z0_z4_5, svmfloat8x2_t, svmfloat8_t,
+ 	      svmla_lane_za16_mf8_vg2x2_fpm (w8 + 7, z0, z4, 5, fpm0),
+ 	      svmla_lane_za16_vg2x2_fpm (w8 + 7, z0, z4, 5, fpm0))
+ 
+ /*
+ ** mla_lane_w8p8_z0_z4_7:
+ **	add	(w8|w9|w10|w11), w8, #?8
+ ** 	msr	fpmr, x1
+ **	fmlal	za\.h\[\1, 0:1, vgx2\], {z0\.b - z1\.b}, z4\.b\[7\]
+ **	ret
+ */
+ TEST_ZA_LANE (mla_lane_w8p8_z0_z4_7, svmfloat8x2_t, svmfloat8_t,
+ 	      svmla_lane_za16_mf8_vg2x2_fpm (w8 + 8, z0, z4, 7, fpm0),
+ 	      svmla_lane_za16_vg2x2_fpm (w8 + 8, z0, z4, 7, fpm0))
+ 
+ /*
+ ** mla_lane_w0m1_z0_z4_9:
+ **	sub	(w8|w9|w10|w11), w0, #?1
+ ** 	msr	fpmr, x1
+ **	fmlal	za\.h\[\1, 0:1, vgx2\], {z0\.b - z1\.b}, z4\.b\[9\]
+ **	ret
+ */
+ TEST_ZA_LANE (mla_lane_w0m1_z0_z4_9, svmfloat8x2_t, svmfloat8_t,
+ 	      svmla_lane_za16_mf8_vg2x2_fpm (w0 - 1, z0, z4, 9, fpm0),
+ 	      svmla_lane_za16_vg2x2_fpm (w0 - 1, z0, z4, 9, fpm0))
+ 
+ /*
+ ** mla_lane_w8_z4_z15_10:
+ **	str	d15, \[sp, #?-16\]!
+ ** 	msr	fpmr, x1
+ **	fmlal	za\.h\[w8, 0:1, vgx2\], {z4\.b - z5\.b}, z15\.b\[10\]
+ **	ldr	d15, \[sp\], #?16
+ **	ret
+ */
+ TEST_ZA_LANE_Z15 (mla_lane_w8_z4_z15_10, svmfloat8x2_t, svmfloat8_t,
+ 		  svmla_lane_za16_mf8_vg2x2_fpm (w8, z4, z15, 10, fpm0),
+ 		  svmla_lane_za16_vg2x2_fpm (w8, z4, z15, 10, fpm0))
+ 
+ /*
+ ** mla_lane_w8_z28_z16_11:
+ ** 	msr	fpmr, x1
+ **	mov	(z[0-7]).d, z16.d
+ **	fmlal	za\.h\[w8, 0:1, vgx2\], {z28\.b - z29\.b}, \1\.b\[11\]
+ **	ret
+ */
+ TEST_ZA_LANE (mla_lane_w8_z28_z16_11, svmfloat8x2_t, svmfloat8_t,
+ 	      svmla_lane_za16_mf8_vg2x2_fpm (w8, z28, z16, 11, fpm0),
+ 	      svmla_lane_za16_vg2x2_fpm (w8, z28, z16, 11, fpm0))
+ 
+ /*
+ ** mla_lane_w8_z17_z7_13:
+ ** 	msr	fpmr, x1
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	fmlal	za\.h\[w8, 0:1, vgx2\], [^\n]+, z7\.b\[13\]
+ **	ret
+ */
+ TEST_ZA_LANE (mla_lane_w8_z17_z7_13, svmfloat8x2_t, svmfloat8_t,
+ 	      svmla_lane_za16_mf8_vg2x2_fpm (w8, z17, z7, 13, fpm0),
+ 	      svmla_lane_za16_vg2x2_fpm (w8, z17, z7, 13, fpm0))
+ 
+ /*
+ ** mla_lane_w8_z22_z4_15:
+ ** 	msr	fpmr, x1
+ **	fmlal	za\.h\[w8, 0:1, vgx2\], {z22\.b - z23\.b}, z4\.b\[15\]
+ **	ret
+ */
+ TEST_ZA_LANE (mla_lane_w8_z22_z4_15, svmfloat8x2_t, svmfloat8_t,
+ 	      svmla_lane_za16_mf8_vg2x2_fpm (w8, z22, z4, 15, fpm0),
+ 	      svmla_lane_za16_vg2x2_fpm (w8, z22, z4, 15, fpm0))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_lane_za16_mf8_vg2x4.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_lane_za16_mf8_vg2x4.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_lane_za16_mf8_vg2x4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_lane_za16_mf8_vg2x4.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,142 ----
+ /* { dg-do assemble { target { aarch64_asm_sme-f8f16_ok } } } */
+ /* { dg-do compile { target { ! { aarch64_asm_sme-f8f16_ok } } } } */
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ #pragma GCC target "+sme-f8f16"
+ 
+ /*
+ ** mla_lane_0_z0_z4_0:
+ ** 	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), #?0
+ **	fmlal	za\.h\[\1, 0:1, vgx4\], {z0\.b - z3\.b}, z4\.b\[0\]
+ **	ret
+ */
+ TEST_ZA_LANE (mla_lane_0_z0_z4_0, svmfloat8x4_t, svmfloat8_t,
+ 	      svmla_lane_za16_mf8_vg2x4_fpm (0, z0, z4, 0, fpm0),
+ 	      svmla_lane_za16_vg2x4_fpm (0, z0, z4, 0, fpm0))
+ 
+ /*
+ ** mla_lane_w0_z0_z7_1:
+ ** 	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), w0
+ **	fmlal	za\.h\[\1, 0:1, vgx4\], {z0\.b - z3\.b}, z7\.b\[1\]
+ **	ret
+ */
+ TEST_ZA_LANE (mla_lane_w0_z0_z7_1, svmfloat8x4_t, svmfloat8_t,
+ 	      svmla_lane_za16_mf8_vg2x4_fpm (w0, z0, z7, 1, fpm0),
+ 	      svmla_lane_za16_vg2x4_fpm (w0, z0, z7, 1, fpm0))
+ 
+ /*
+ ** mla_lane_w8_z28_z4_2:
+ ** 	msr	fpmr, x1
+ **	fmlal	za\.h\[w8, 0:1, vgx4\], {z28\.b - z31\.b}, z4\.b\[2\]
+ **	ret
+ */
+ TEST_ZA_LANE (mla_lane_w8_z28_z4_2, svmfloat8x4_t, svmfloat8_t,
+ 	      svmla_lane_za16_mf8_vg2x4_fpm (w8, z28, z4, 2, fpm0),
+ 	      svmla_lane_za16_vg2x4_fpm (w8, z28, z4, 2, fpm0))
+ 
+ /*
+ ** mla_lane_w11p2_z0_z4_7:
+ ** 	msr	fpmr, x1
+ **	fmlal	za\.h\[w11, 2:3, vgx4\], {z0\.b - z3\.b}, z4\.b\[7\]
+ **	ret
+ */
+ TEST_ZA_LANE (mla_lane_w11p2_z0_z4_7, svmfloat8x4_t, svmfloat8_t,
+ 	      svmla_lane_za16_mf8_vg2x4_fpm (w11 + 2, z0, z4, 7, fpm0),
+ 	      svmla_lane_za16_vg2x4_fpm (w11 + 2, z0, z4, 7, fpm0))
+ 
+ /*
+ ** mla_lane_w8p6_z0_z4_8:
+ ** 	msr	fpmr, x1
+ **	fmlal	za\.h\[w8, 6:7, vgx4\], {z0\.b - z3\.b}, z4\.b\[8\]
+ **	ret
+ */
+ TEST_ZA_LANE (mla_lane_w8p6_z0_z4_8, svmfloat8x4_t, svmfloat8_t,
+ 	      svmla_lane_za16_mf8_vg2x4_fpm (w8 + 6, z0, z4, 8, fpm0),
+ 	      svmla_lane_za16_vg2x4_fpm (w8 + 6, z0, z4, 8, fpm0))
+ 
+ /*
+ ** mla_lane_w8p7_z0_z4_9:
+ **	add	(w8|w9|w10|w11), w8, #?7
+ ** 	msr	fpmr, x1
+ **	fmlal	za\.h\[\1, 0:1, vgx4\], {z0\.b - z3\.b}, z4\.b\[9\]
+ **	ret
+ */
+ TEST_ZA_LANE (mla_lane_w8p7_z0_z4_9, svmfloat8x4_t, svmfloat8_t,
+ 	      svmla_lane_za16_mf8_vg2x4_fpm (w8 + 7, z0, z4, 9, fpm0),
+ 	      svmla_lane_za16_vg2x4_fpm (w8 + 7, z0, z4, 9, fpm0))
+ 
+ /*
+ ** mla_lane_w8p8_z0_z4_10:
+ **	add	(w8|w9|w10|w11), w8, #?8
+ ** 	msr	fpmr, x1
+ **	fmlal	za\.h\[\1, 0:1, vgx4\], {z0\.b - z3\.b}, z4\.b\[10\]
+ **	ret
+ */
+ TEST_ZA_LANE (mla_lane_w8p8_z0_z4_10, svmfloat8x4_t, svmfloat8_t,
+ 	      svmla_lane_za16_mf8_vg2x4_fpm (w8 + 8, z0, z4, 10, fpm0),
+ 	      svmla_lane_za16_vg2x4_fpm (w8 + 8, z0, z4, 10, fpm0))
+ 
+ /*
+ ** mla_lane_w0m1_z0_z4_11:
+ **	sub	(w8|w9|w10|w11), w0, #?1
+ ** 	msr	fpmr, x1
+ **	fmlal	za\.h\[\1, 0:1, vgx4\], {z0\.b - z3\.b}, z4\.b\[11\]
+ **	ret
+ */
+ TEST_ZA_LANE (mla_lane_w0m1_z0_z4_11, svmfloat8x4_t, svmfloat8_t,
+ 	      svmla_lane_za16_mf8_vg2x4_fpm (w0 - 1, z0, z4, 11, fpm0),
+ 	      svmla_lane_za16_vg2x4_fpm (w0 - 1, z0, z4, 11, fpm0))
+ 
+ /*
+ ** mla_lane_w8_z4_z15_12:
+ **	str	d15, \[sp, #?-16\]!
+ ** 	msr	fpmr, x1
+ **	fmlal	za\.h\[w8, 0:1, vgx4\], {z4\.b - z7\.b}, z15\.b\[12\]
+ **	ldr	d15, \[sp\], #?16
+ **	ret
+ */
+ TEST_ZA_LANE_Z15 (mla_lane_w8_z4_z15_12, svmfloat8x4_t, svmfloat8_t,
+ 		  svmla_lane_za16_mf8_vg2x4_fpm (w8, z4, z15, 12, fpm0),
+ 		  svmla_lane_za16_vg2x4_fpm (w8, z4, z15, 12, fpm0))
+ 
+ /*
+ ** mla_lane_w8_z28_z16_13:
+ ** 	msr	fpmr, x1
+ **	mov	(z[0-7]).d, z16.d
+ **	fmlal	za\.h\[w8, 0:1, vgx4\], {z28\.b - z31\.b}, \1\.b\[13\]
+ **	ret
+ */
+ TEST_ZA_LANE (mla_lane_w8_z28_z16_13, svmfloat8x4_t, svmfloat8_t,
+ 	      svmla_lane_za16_mf8_vg2x4_fpm (w8, z28, z16, 13, fpm0),
+ 	      svmla_lane_za16_vg2x4_fpm (w8, z28, z16, 13, fpm0))
+ 
+ /*
+ ** mla_lane_w8_z17_z7_14:
+ ** 	msr	fpmr, x1
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	fmlal	za\.h\[w8, 0:1, vgx4\], [^\n]+, z7\.b\[14\]
+ **	ret
+ */
+ TEST_ZA_LANE (mla_lane_w8_z17_z7_14, svmfloat8x4_t, svmfloat8_t,
+ 	      svmla_lane_za16_mf8_vg2x4_fpm (w8, z17, z7, 14, fpm0),
+ 	      svmla_lane_za16_vg2x4_fpm (w8, z17, z7, 14, fpm0))
+ 
+ /*
+ ** mla_lane_w8_z22_z4_15:
+ ** 	msr	fpmr, x1
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	fmlal	za\.h\[w8, 0:1, vgx4\], [^\n]+, z4\.b\[15\]
+ **	ret
+ */
+ TEST_ZA_LANE (mla_lane_w8_z22_z4_15, svmfloat8x4_t, svmfloat8_t,
+ 	      svmla_lane_za16_mf8_vg2x4_fpm (w8, z22, z4, 15, fpm0),
+ 	      svmla_lane_za16_vg2x4_fpm (w8, z22, z4, 15, fpm0))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_lane_za32_mf8_vg4x1.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_lane_za32_mf8_vg4x1.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_lane_za32_mf8_vg4x1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_lane_za32_mf8_vg4x1.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,169 ----
+ /* { dg-do assemble { target { aarch64_asm_sme-f8f32_ok } } } */
+ /* { dg-do compile { target { ! { aarch64_asm_sme-f8f32_ok } } } } */
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ #pragma GCC target "+sme+sme-f8f32"
+ 
+ /*
+ ** mla_lane_0_z0_z0_0:
+ ** 	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), #?0
+ **	fmlall	za\.s\[\1, 0:3\], z0\.b, z0\.b\[0\]
+ **	ret
+ */
+ 
+ TEST_ZA_X1 (mla_lane_0_z0_z0_0, svmfloat8_t,
+ 	    svmla_lane_za32_mf8_vg4x1_fpm (0, z0, z0, 0, fpm0),
+ 	    svmla_lane_za32_vg4x1_fpm (0, z0, z0, 0, fpm0))
+ 
+ /*
+ ** mla_lane_w0_z0_z3_1:
+ ** 	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), w0
+ **	fmlall	za\.s\[\1, 0:3\], z0\.b, z3\.b\[1\]
+ **	ret
+ */
+ TEST_ZA_X1 (mla_lane_w0_z0_z3_1, svmfloat8_t,
+ 	    svmla_lane_za32_mf8_vg4x1_fpm (w0, z0, z3, 1, fpm0),
+ 	    svmla_lane_za32_vg4x1_fpm (w0, z0, z3, 1, fpm0))
+ 
+ /*
+ ** mla_lane_w7_z0_z3_2:
+ ** 	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), w7
+ **	fmlall	za\.s\[\1, 0:3\], z0\.b, z3\.b\[2\]
+ **	ret
+ */
+ TEST_ZA_X1 (mla_lane_w7_z0_z3_2, svmfloat8_t,
+ 	    svmla_lane_za32_mf8_vg4x1_fpm (w7, z0, z3, 2, fpm0),
+ 	    svmla_lane_za32_vg4x1_fpm (w7, z0, z3, 2, fpm0))
+ 
+ /*
+ ** mla_lane_w8_z7_z3_3:
+ ** 	msr	fpmr, x1
+ **	fmlall	za\.s\[w8, 0:3\], z7\.b, z3\.b\[3\]
+ **	ret
+ */
+ TEST_ZA_X1 (mla_lane_w8_z7_z3_3, svmfloat8_t,
+ 	    svmla_lane_za32_mf8_vg4x1_fpm (w8, z7, z3, 3, fpm0),
+ 	    svmla_lane_za32_vg4x1_fpm (w8, z7, z3, 3, fpm0))
+ 
+ /*
+ ** mla_lane_w8_z31_z16_4:
+ ** 	msr	fpmr, x1
+ **	mov	(z[0-7])\.d, z16\.d
+ **	fmlall	za\.s\[w8, 0:3\], z31\.b. \1\.b\[4\]
+ **	ret
+ */
+ TEST_ZA_X1 (mla_lane_w8_z31_z16_4, svmfloat8_t,
+ 	    svmla_lane_za32_mf8_vg4x1_fpm (w8, z31, z16, 4, fpm0),
+ 	    svmla_lane_za32_vg4x1_fpm (w8, z31, z16, 4, fpm0))
+ 
+ /*
+ ** mla_lane_w8p1_z0_z0_5:
+ **	add	(w8|w9|w10|w11), w8, #?1
+ ** 	msr	fpmr, x1
+ **	fmlall	za\.s\[\1, 0:3\], z0\.b, z0\.b\[5\]
+ **	ret
+ */
+ TEST_ZA_X1 (mla_lane_w8p1_z0_z0_5, svmfloat8_t,
+ 	    svmla_lane_za32_mf8_vg4x1_fpm (w8 + 1, z0, z0, 5, fpm0),
+ 	    svmla_lane_za32_vg4x1_fpm (w8 + 1, z0, z0, 5, fpm0))
+ 
+ /*
+ ** mla_lane_w8p2_z23_z0_6:
+ **	add	(w8|w9|w10|w11), w8, #?2
+ ** 	msr	fpmr, x1
+ **	fmlall	za\.s\[\1, 0:3\], z23\.b, z0\.b\[6\]
+ **	ret
+ */
+ TEST_ZA_X1 (mla_lane_w8p2_z23_z0_6, svmfloat8_t,
+ 	    svmla_lane_za32_mf8_vg4x1_fpm (w8 + 2, z23, z0, 6, fpm0),
+ 	    svmla_lane_za32_vg4x1_fpm (w8 + 2, z23, z0, 6, fpm0))
+ 
+ /*
+ ** mla_lane_w11p4_z23_z0_7:
+ ** 	msr	fpmr, x1
+ **	fmlall	za\.s\[w11, 4:7\], z23\.b, z0\.b\[7\]
+ **	ret
+ */
+ TEST_ZA_X1 (mla_lane_w11p4_z23_z0_7, svmfloat8_t,
+ 	    svmla_lane_za32_mf8_vg4x1_fpm (w11 + 4, z23, z0, 7, fpm0),
+ 	    svmla_lane_za32_vg4x1_fpm (w11 + 4, z23, z0, 7, fpm0))
+ 
+ /*
+ ** mla_lane_w8p7_z7_z7_8:
+ **	add	(w8|w9|w10|w11), w8, #?7
+ ** 	msr	fpmr, x1
+ **	fmlall	za\.s\[\1, 0:3\], z7\.b, z7\.b\[8\]
+ **	ret
+ */
+ TEST_ZA_X1 (mla_lane_w8p7_z7_z7_8, svmfloat8_t,
+ 	    svmla_lane_za32_mf8_vg4x1_fpm (w8 + 7, z7, z7, 8, fpm0),
+ 	    svmla_lane_za32_vg4x1_fpm (w8 + 7, z7, z7, 8, fpm0))
+ 
+ /*
+ ** mla_lane_w11p12_z23_z0_9:
+ ** 	msr	fpmr, x1
+ **	fmlall	za\.s\[w11, 12:15\], z23\.b, z0\.b\[9\]
+ **	ret
+ */
+ TEST_ZA_X1 (mla_lane_w11p12_z23_z0_9, svmfloat8_t,
+ 	    svmla_lane_za32_mf8_vg4x1_fpm (w11 + 12, z23, z0, 9, fpm0),
+ 	    svmla_lane_za32_vg4x1_fpm (w11 + 12, z23, z0, 9, fpm0))
+ 
+ /*
+ ** mla_lane_w8p14_z23_z0_10:
+ **	add	(w8|w9|w10|w11), w8, #?14
+ ** 	msr	fpmr, x1
+ **	fmlall	za\.s\[w8, 0:3\], z23\.b, z0\.b\[10\]
+ **	ret
+ */
+ TEST_ZA_X1 (mla_lane_w8p14_z23_z0_10, svmfloat8_t,
+ 	    svmla_lane_za32_mf8_vg4x1_fpm (w8 + 14, z23, z0, 10, fpm0),
+ 	    svmla_lane_za32_vg4x1_fpm (w8 + 14, z23, z0, 10, fpm0))
+ 
+ /*
+ ** mla_lane_w8p15_z7_z7_11:
+ **	add	(w8|w9|w10|w11), w8, #?15
+ ** 	msr	fpmr, x1
+ **	fmlall	za\.s\[\1, 0:3\], z7\.b, z7\.b\[11\]
+ **	ret
+ */
+ TEST_ZA_X1 (mla_lane_w8p15_z7_z7_11, svmfloat8_t,
+ 	    svmla_lane_za32_mf8_vg4x1_fpm (w8 + 15, z7, z7, 11, fpm0),
+ 	    svmla_lane_za32_vg4x1_fpm (w8 + 15, z7, z7, 11, fpm0))
+ 
+ /*
+ ** mla_lane_w8p16_z7_z7_12:
+ **	add	(w8|w9|w10|w11), w8, #?16
+ ** 	msr	fpmr, x1
+ **	fmlall	za\.s\[\1, 0:3\], z7\.b, z7\.b\[12\]
+ **	ret
+ */
+ TEST_ZA_X1 (mla_lane_w8p16_z7_z7_12, svmfloat8_t,
+ 	    svmla_lane_za32_mf8_vg4x1_fpm (w8 + 16, z7, z7, 12, fpm0),
+ 	    svmla_lane_za32_vg4x1_fpm (w8 + 16, z7, z7, 12, fpm0))
+ 
+ /*
+ ** mla_lane_w8m1_z16_z0_13:
+ **	sub	(w8|w9|w10|w11), w8, #?1
+ ** 	msr	fpmr, x1
+ **	fmlall	za\.s\[\1, 0:3\], z16\.b, z0\.b\[13\]
+ **	ret
+ */
+ TEST_ZA_X1 (mla_lane_w8m1_z16_z0_13, svmfloat8_t,
+ 	    svmla_lane_za32_mf8_vg4x1_fpm (w8 - 1, z16, z0, 13, fpm0),
+ 	    svmla_lane_za32_vg4x1_fpm (w8 - 1, z16, z0, 13, fpm0))
+ 
+ /*
+ ** mla_lane_w12_z0_z3_15:
+ ** 	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), w12
+ **	fmlall	za\.s\[\1, 0:3\], z0\.b, z3\.b\[15\]
+ **	ret
+ */
+ TEST_ZA_X1 (mla_lane_w12_z0_z3_15, svmfloat8_t,
+ 	    svmla_lane_za32_mf8_vg4x1_fpm (w12, z0, z3, 15, fpm0),
+ 	    svmla_lane_za32_vg4x1_fpm (w12, z0, z3, 15, fpm0))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_lane_za32_mf8_vg4x2.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_lane_za32_mf8_vg4x2.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_lane_za32_mf8_vg4x2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_lane_za32_mf8_vg4x2.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,137 ----
+ /* { dg-do assemble { target { aarch64_asm_sme-f8f32_ok } } } */
+ /* { dg-do compile { target { ! { aarch64_asm_sme-f8f32_ok } } } } */
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ #pragma GCC target "+sme-f8f32"
+ 
+ /*
+ ** mla_lane_0_z0_z4_0:
+ ** 	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), #?0
+ **	fmlall	za\.s\[\1, 0:3, vgx2\], {z0\.b - z1\.b}, z4\.b\[0\]
+ **	ret
+ */
+ TEST_ZA_LANE (mla_lane_0_z0_z4_0, svmfloat8x2_t, svmfloat8_t,
+ 	      svmla_lane_za32_mf8_vg4x2_fpm (0, z0, z4, 0, fpm0),
+ 	      svmla_lane_za32_vg4x2_fpm (0, z0, z4, 0, fpm0))
+ 
+ /*
+ ** mla_lane_w0_z0_z7_1:
+ ** 	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), w0
+ **	fmlall	za\.s\[\1, 0:3, vgx2\], {z0\.b - z1\.b}, z7\.b\[1\]
+ **	ret
+ */
+ TEST_ZA_LANE (mla_lane_w0_z0_z7_1, svmfloat8x2_t, svmfloat8_t,
+ 	      svmla_lane_za32_mf8_vg4x2_fpm (w0, z0, z7, 1, fpm0),
+ 	      svmla_lane_za32_vg4x2_fpm (w0, z0, z7, 1, fpm0))
+ 
+ /*
+ ** mla_lane_w8_z28_z4_2:
+ ** 	msr	fpmr, x1
+ **	fmlall	za\.s\[w8, 0:3, vgx2\], {z28\.b - z29\.b}, z4\.b\[2\]
+ **	ret
+ */
+ TEST_ZA_LANE (mla_lane_w8_z28_z4_2, svmfloat8x2_t, svmfloat8_t,
+ 	      svmla_lane_za32_mf8_vg4x2_fpm (w8, z28, z4, 2, fpm0),
+ 	      svmla_lane_za32_vg4x2_fpm (w8, z28, z4, 2, fpm0))
+ 
+ /*
+ ** mla_lane_w11p4_z0_z4_3:
+ ** 	msr	fpmr, x1
+ **	fmlall	za\.s\[w11, 4:7, vgx2\], {z0\.b - z1\.b}, z4\.b\[3\]
+ **	ret
+ */
+ TEST_ZA_LANE (mla_lane_w11p4_z0_z4_3, svmfloat8x2_t, svmfloat8_t,
+ 	      svmla_lane_za32_mf8_vg4x2_fpm (w11 + 4, z0, z4, 3, fpm0),
+ 	      svmla_lane_za32_vg4x2_fpm (w11 + 4, z0, z4, 3, fpm0))
+ 
+ /*
+ ** mla_lane_w8p6_z0_z4_4:
+ **	add	(w8|w9|w10|w11), w8, #?6
+ ** 	msr	fpmr, x1
+ **	fmlall	za\.s\[\1, 0:3, vgx2\], {z0\.b - z1\.b}, z4\.b\[4\]
+ **	ret
+ */
+ TEST_ZA_LANE (mla_lane_w8p6_z0_z4_4, svmfloat8x2_t, svmfloat8_t,
+ 	      svmla_lane_za32_mf8_vg4x2_fpm (w8 + 6, z0, z4, 4, fpm0),
+ 	      svmla_lane_za32_vg4x2_fpm (w8 + 6, z0, z4, 4, fpm0))
+ 
+ /*
+ ** mla_lane_w8p7_z0_z4_5:
+ **	add	(w8|w9|w10|w11), w8, #?7
+ ** 	msr	fpmr, x1
+ **	fmlall	za\.s\[\1, 0:3, vgx2\], {z0\.b - z1\.b}, z4\.b\[5\]
+ **	ret
+ */
+ TEST_ZA_LANE (mla_lane_w8p7_z0_z4_5, svmfloat8x2_t, svmfloat8_t,
+ 	      svmla_lane_za32_mf8_vg4x2_fpm (w8 + 7, z0, z4, 5, fpm0),
+ 	      svmla_lane_za32_vg4x2_fpm (w8 + 7, z0, z4, 5, fpm0))
+ 
+ /*
+ ** mla_lane_w8p8_z0_z4_7:
+ **	add	(w8|w9|w10|w11), w8, #?8
+ ** 	msr	fpmr, x1
+ **	fmlall	za\.s\[\1, 0:3, vgx2\], {z0\.b - z1\.b}, z4\.b\[7\]
+ **	ret
+ */
+ TEST_ZA_LANE (mla_lane_w8p8_z0_z4_7, svmfloat8x2_t, svmfloat8_t,
+ 	      svmla_lane_za32_mf8_vg4x2_fpm (w8 + 8, z0, z4, 7, fpm0),
+ 	      svmla_lane_za32_vg4x2_fpm (w8 + 8, z0, z4, 7, fpm0))
+ 
+ /*
+ ** mla_lane_w0m1_z0_z4_9:
+ **	sub	(w8|w9|w10|w11), w0, #?1
+ ** 	msr	fpmr, x1
+ **	fmlall	za\.s\[\1, 0:3, vgx2\], {z0\.b - z1\.b}, z4\.b\[9\]
+ **	ret
+ */
+ TEST_ZA_LANE (mla_lane_w0m1_z0_z4_9, svmfloat8x2_t, svmfloat8_t,
+ 	      svmla_lane_za32_mf8_vg4x2_fpm (w0 - 1, z0, z4, 9, fpm0),
+ 	      svmla_lane_za32_vg4x2_fpm (w0 - 1, z0, z4, 9, fpm0))
+ 
+ /*
+ ** mla_lane_w8_z4_z15_10:
+ **	str	d15, \[sp, #?-16\]!
+ ** 	msr	fpmr, x1
+ **	fmlall	za\.s\[w8, 0:3, vgx2\], {z4\.b - z5\.b}, z15\.b\[10\]
+ **	ldr	d15, \[sp\], #?16
+ **	ret
+ */
+ TEST_ZA_LANE_Z15 (mla_lane_w8_z4_z15_10, svmfloat8x2_t, svmfloat8_t,
+ 		  svmla_lane_za32_mf8_vg4x2_fpm (w8, z4, z15, 10, fpm0),
+ 		  svmla_lane_za32_vg4x2_fpm (w8, z4, z15, 10, fpm0))
+ 
+ /*
+ ** mla_lane_w8_z28_z16_11:
+ ** 	msr	fpmr, x1
+ **	mov	(z[0-7]).d, z16.d
+ **	fmlall	za\.s\[w8, 0:3, vgx2\], {z28\.b - z29\.b}, \1\.b\[11\]
+ **	ret
+ */
+ TEST_ZA_LANE (mla_lane_w8_z28_z16_11, svmfloat8x2_t, svmfloat8_t,
+ 	      svmla_lane_za32_mf8_vg4x2_fpm (w8, z28, z16, 11, fpm0),
+ 	      svmla_lane_za32_vg4x2_fpm (w8, z28, z16, 11, fpm0))
+ 
+ /*
+ ** mla_lane_w8_z17_z7_13:
+ ** 	msr	fpmr, x1
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	fmlall	za\.s\[w8, 0:3, vgx2\], [^\n]+, z7\.b\[13\]
+ **	ret
+ */
+ TEST_ZA_LANE (mla_lane_w8_z17_z7_13, svmfloat8x2_t, svmfloat8_t,
+ 	      svmla_lane_za32_mf8_vg4x2_fpm (w8, z17, z7, 13, fpm0),
+ 	      svmla_lane_za32_vg4x2_fpm (w8, z17, z7, 13, fpm0))
+ 
+ /*
+ ** mla_lane_w8_z22_z4_15:
+ ** 	msr	fpmr, x1
+ **	fmlall	za\.s\[w8, 0:3, vgx2\], {z22\.b - z23\.b}, z4\.b\[15\]
+ **	ret
+ */
+ TEST_ZA_LANE (mla_lane_w8_z22_z4_15, svmfloat8x2_t, svmfloat8_t,
+ 	      svmla_lane_za32_mf8_vg4x2_fpm (w8, z22, z4, 15, fpm0),
+ 	      svmla_lane_za32_vg4x2_fpm (w8, z22, z4, 15, fpm0))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_lane_za32_mf8_vg4x4.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_lane_za32_mf8_vg4x4.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_lane_za32_mf8_vg4x4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_lane_za32_mf8_vg4x4.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,143 ----
+ /* { dg-do assemble { target { aarch64_asm_sme-f8f32_ok } } } */
+ /* { dg-do compile { target { ! { aarch64_asm_sme-f8f32_ok } } } } */
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ #pragma GCC target "+sme-f8f32"
+ 
+ /*
+ ** mla_lane_0_z0_z4_0:
+ ** 	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), #?0
+ **	fmlall	za\.s\[\1, 0:3, vgx4\], {z0\.b - z3\.b}, z4\.b\[0\]
+ **	ret
+ */
+ TEST_ZA_LANE (mla_lane_0_z0_z4_0, svmfloat8x4_t, svmfloat8_t,
+ 	      svmla_lane_za32_mf8_vg4x4_fpm (0, z0, z4, 0, fpm0),
+ 	      svmla_lane_za32_vg4x4_fpm (0, z0, z4, 0, fpm0))
+ 
+ /*
+ ** mla_lane_w0_z0_z7_1:
+ ** 	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), w0
+ **	fmlall	za\.s\[\1, 0:3, vgx4\], {z0\.b - z3\.b}, z7\.b\[1\]
+ **	ret
+ */
+ TEST_ZA_LANE (mla_lane_w0_z0_z7_1, svmfloat8x4_t, svmfloat8_t,
+ 	      svmla_lane_za32_mf8_vg4x4_fpm (w0, z0, z7, 1, fpm0),
+ 	      svmla_lane_za32_vg4x4_fpm (w0, z0, z7, 1, fpm0))
+ 
+ /*
+ ** mla_lane_w8_z28_z4_2:
+ ** 	msr	fpmr, x1
+ **	fmlall	za\.s\[w8, 0:3, vgx4\], {z28\.b - z31\.b}, z4\.b\[2\]
+ **	ret
+ */
+ TEST_ZA_LANE (mla_lane_w8_z28_z4_2, svmfloat8x4_t, svmfloat8_t,
+ 	      svmla_lane_za32_mf8_vg4x4_fpm (w8, z28, z4, 2, fpm0),
+ 	      svmla_lane_za32_vg4x4_fpm (w8, z28, z4, 2, fpm0))
+ 
+ /*
+ ** mla_lane_w11p4_z0_z4_7:
+ ** 	msr	fpmr, x1
+ **	fmlall	za\.s\[w11, 4:7, vgx4\], {z0\.b - z3\.b}, z4\.b\[7\]
+ **	ret
+ */
+ TEST_ZA_LANE (mla_lane_w11p4_z0_z4_7, svmfloat8x4_t, svmfloat8_t,
+ 	      svmla_lane_za32_mf8_vg4x4_fpm (w11 + 4, z0, z4, 7, fpm0),
+ 	      svmla_lane_za32_vg4x4_fpm (w11 + 4, z0, z4, 7, fpm0))
+ 
+ /*
+ ** mla_lane_w8p6_z0_z4_8:
+ **	add	(w8|w9|w10|w11), w8, #?6
+ ** 	msr	fpmr, x1
+ **	fmlall	za\.s\[\1, 0:3, vgx4\], {z0\.b - z3\.b}, z4\.b\[8\]
+ **	ret
+ */
+ TEST_ZA_LANE (mla_lane_w8p6_z0_z4_8, svmfloat8x4_t, svmfloat8_t,
+ 	      svmla_lane_za32_mf8_vg4x4_fpm (w8 + 6, z0, z4, 8, fpm0),
+ 	      svmla_lane_za32_vg4x4_fpm (w8 + 6, z0, z4, 8, fpm0))
+ 
+ /*
+ ** mla_lane_w8p7_z0_z4_9:
+ **	add	(w8|w9|w10|w11), w8, #?7
+ ** 	msr	fpmr, x1
+ **	fmlall	za\.s\[\1, 0:3, vgx4\], {z0\.b - z3\.b}, z4\.b\[9\]
+ **	ret
+ */
+ TEST_ZA_LANE (mla_lane_w8p7_z0_z4_9, svmfloat8x4_t, svmfloat8_t,
+ 	      svmla_lane_za32_mf8_vg4x4_fpm (w8 + 7, z0, z4, 9, fpm0),
+ 	      svmla_lane_za32_vg4x4_fpm (w8 + 7, z0, z4, 9, fpm0))
+ 
+ /*
+ ** mla_lane_w8p8_z0_z4_10:
+ **	add	(w8|w9|w10|w11), w8, #?8
+ ** 	msr	fpmr, x1
+ **	fmlall	za\.s\[\1, 0:3, vgx4\], {z0\.b - z3\.b}, z4\.b\[10\]
+ **	ret
+ */
+ TEST_ZA_LANE (mla_lane_w8p8_z0_z4_10, svmfloat8x4_t, svmfloat8_t,
+ 	      svmla_lane_za32_mf8_vg4x4_fpm (w8 + 8, z0, z4, 10, fpm0),
+ 	      svmla_lane_za32_vg4x4_fpm (w8 + 8, z0, z4, 10, fpm0))
+ 
+ /*
+ ** mla_lane_w0m1_z0_z4_11:
+ **	sub	(w8|w9|w10|w11), w0, #?1
+ ** 	msr	fpmr, x1
+ **	fmlall	za\.s\[\1, 0:3, vgx4\], {z0\.b - z3\.b}, z4\.b\[11\]
+ **	ret
+ */
+ TEST_ZA_LANE (mla_lane_w0m1_z0_z4_11, svmfloat8x4_t, svmfloat8_t,
+ 	      svmla_lane_za32_mf8_vg4x4_fpm (w0 - 1, z0, z4, 11, fpm0),
+ 	      svmla_lane_za32_vg4x4_fpm (w0 - 1, z0, z4, 11, fpm0))
+ 
+ /*
+ ** mla_lane_w8_z4_z15_12:
+ **	str	d15, \[sp, #?-16\]!
+ ** 	msr	fpmr, x1
+ **	fmlall	za\.s\[w8, 0:3, vgx4\], {z4\.b - z7\.b}, z15\.b\[12\]
+ **	ldr	d15, \[sp\], #?16
+ **	ret
+ */
+ TEST_ZA_LANE_Z15 (mla_lane_w8_z4_z15_12, svmfloat8x4_t, svmfloat8_t,
+ 		  svmla_lane_za32_mf8_vg4x4_fpm (w8, z4, z15, 12, fpm0),
+ 		  svmla_lane_za32_vg4x4_fpm (w8, z4, z15, 12, fpm0))
+ 
+ /*
+ ** mla_lane_w8_z28_z16_13:
+ ** 	msr	fpmr, x1
+ **	mov	(z[0-7]).d, z16.d
+ **	fmlall	za\.s\[w8, 0:3, vgx4\], {z28\.b - z31\.b}, \1\.b\[13\]
+ **	ret
+ */
+ TEST_ZA_LANE (mla_lane_w8_z28_z16_13, svmfloat8x4_t, svmfloat8_t,
+ 	      svmla_lane_za32_mf8_vg4x4_fpm (w8, z28, z16, 13, fpm0),
+ 	      svmla_lane_za32_vg4x4_fpm (w8, z28, z16, 13, fpm0))
+ 
+ /*
+ ** mla_lane_w8_z17_z7_14:
+ ** 	msr	fpmr, x1
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	fmlall	za\.s\[w8, 0:3, vgx4\], [^\n]+, z7\.b\[14\]
+ **	ret
+ */
+ TEST_ZA_LANE (mla_lane_w8_z17_z7_14, svmfloat8x4_t, svmfloat8_t,
+ 	      svmla_lane_za32_mf8_vg4x4_fpm (w8, z17, z7, 14, fpm0),
+ 	      svmla_lane_za32_vg4x4_fpm (w8, z17, z7, 14, fpm0))
+ 
+ /*
+ ** mla_lane_w8_z22_z4_15:
+ ** 	msr	fpmr, x1
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	fmlall	za\.s\[w8, 0:3, vgx4\], [^\n]+, z4\.b\[15\]
+ **	ret
+ */
+ TEST_ZA_LANE (mla_lane_w8_z22_z4_15, svmfloat8x4_t, svmfloat8_t,
+ 	      svmla_lane_za32_mf8_vg4x4_fpm (w8, z22, z4, 15, fpm0),
+ 	      svmla_lane_za32_vg4x4_fpm (w8, z22, z4, 15, fpm0))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_za16_mf8_vg2x1.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_za16_mf8_vg2x1.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_za16_mf8_vg2x1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_za16_mf8_vg2x1.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,167 ----
+ /* { dg-do assemble { target { aarch64_asm_sme-f8f16_ok } } } */
+ /* { dg-do compile { target { ! { aarch64_asm_sme-f8f16_ok } } } } */
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ #pragma GCC target "+sme+sme-f8f16"
+ 
+ /*
+ ** mla_0_z0_z0:
+ **	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), #?0
+ **	fmlal	za\.h\[\1, 0:1\], z0\.b, z0\.b
+ **	ret
+ */
+ TEST_ZA_X1 (mla_0_z0_z0, svmfloat8_t,
+ 	    svmla_za16_mf8_vg2x1_fpm (0, z0, z0, fpm0),
+ 	    svmla_za16_vg2x1_fpm (0, z0, z0, fpm0))
+ 
+ /*
+ ** mla_w0_z0_z3:
+ **	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), w0
+ **	fmlal	za\.h\[\1, 0:1\], z0\.b, z3\.b
+ **	ret
+ */
+ TEST_ZA_X1 (mla_w0_z0_z3, svmfloat8_t,
+ 	    svmla_za16_mf8_vg2x1_fpm (w0, z0, z3, fpm0),
+ 	    svmla_za16_vg2x1_fpm (w0, z0, z3, fpm0))
+ 
+ /*
+ ** mla_w7_z0_z3:
+ **	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), w7
+ **	fmlal	za\.h\[\1, 0:1\], z0\.b, z3\.b
+ **	ret
+ */
+ TEST_ZA_X1 (mla_w7_z0_z3, svmfloat8_t,
+ 	    svmla_za16_mf8_vg2x1_fpm (w7, z0, z3, fpm0),
+ 	    svmla_za16_vg2x1_fpm (w7, z0, z3, fpm0))
+ 
+ /*
+ ** mla_w8_z7_z3:
+ **	msr	fpmr, x1
+ **	fmlal	za\.h\[w8, 0:1\], z7\.b, z3\.b
+ **	ret
+ */
+ TEST_ZA_X1 (mla_w8_z7_z3, svmfloat8_t,
+ 	    svmla_za16_mf8_vg2x1_fpm (w8, z7, z3, fpm0),
+ 	    svmla_za16_vg2x1_fpm (w8, z7, z3, fpm0))
+ 
+ /*
+ ** mla_w8_z31_z16:
+ **	msr	fpmr, x1
+ **	mov	(z[0-7])\.d, z16\.d
+ **	fmlal	za\.h\[w8, 0:1\], z31\.b. \1\.b
+ **	ret
+ */
+ TEST_ZA_X1 (mla_w8_z31_z16, svmfloat8_t,
+ 	    svmla_za16_mf8_vg2x1_fpm (w8, z31, z16, fpm0),
+ 	    svmla_za16_vg2x1_fpm (w8, z31, z16, fpm0))
+ 
+ /*
+ ** mla_w8p1_z0_z0:
+ **	add	(w8|w9|w10|w11), w8, #?1
+ **	msr	fpmr, x1
+ **	fmlal	za\.h\[\1, 0:1\], z0\.b, z0\.b
+ **	ret
+ */
+ TEST_ZA_X1 (mla_w8p1_z0_z0, svmfloat8_t,
+ 	    svmla_za16_mf8_vg2x1_fpm (w8 + 1, z0, z0, fpm0),
+ 	    svmla_za16_vg2x1_fpm (w8 + 1, z0, z0, fpm0))
+ 
+ /*
+ ** mla_w10p4_z23_z0:
+ **	msr	fpmr, x1
+ **	fmlal	za\.h\[w10, 4:5\], z23\.b, z0\.b
+ **	ret
+ */
+ TEST_ZA_X1 (mla_w10p4_z23_z0, svmfloat8_t,
+ 	    svmla_za16_mf8_vg2x1_fpm (w10 + 4, z23, z0, fpm0),
+ 	    svmla_za16_vg2x1_fpm (w10 + 4, z23, z0, fpm0))
+ 
+ /*
+ ** mla_w11p6_z23_z0:
+ **	add	(w8|w9|w10|w11), w11, #?6
+ **	msr	fpmr, x1
+ **	fmlal	za\.h\[\1, 0:1\], z23\.b, z0\.b
+ **	ret
+ */
+ TEST_ZA_X1 (mla_w11p6_z23_z0, svmfloat8_t,
+ 	    svmla_za16_mf8_vg2x1_fpm (w11 + 6, z23, z0, fpm0),
+ 	    svmla_za16_vg2x1_fpm (w11 + 6, z23, z0, fpm0))
+ 
+ /*
+ ** mla_w9p8_z7_z7:
+ **	msr	fpmr, x1
+ **	fmlal	za\.h\[w9, 8:9\], z7\.b, z7\.b
+ **	ret
+ */
+ TEST_ZA_X1 (mla_w9p8_z7_z7, svmfloat8_t,
+ 	    svmla_za16_mf8_vg2x1_fpm (w9 + 8, z7, z7, fpm0),
+ 	    svmla_za16_vg2x1_fpm (w9 + 8, z7, z7, fpm0))
+ 
+ /*
+ ** mla_w11p12_z23_z0:
+ **	msr	fpmr, x1
+ **	fmlal	za\.h\[w11, 12:13\], z23\.b, z0\.b
+ **	ret
+ */
+ TEST_ZA_X1 (mla_w11p12_z23_z0, svmfloat8_t,
+ 	    svmla_za16_mf8_vg2x1_fpm (w11 + 12, z23, z0, fpm0),
+ 	    svmla_za16_vg2x1_fpm (w11 + 12, z23, z0, fpm0))
+ 
+ /*
+ ** mla_w8p14_z23_z0:
+ **	add	(w8|w9|w10|w11), w8, #?14
+ **	msr	fpmr, x1
+ **	fmlal	za\.h\[\1, 0:1\], z23\.b, z0\.b
+ **	ret
+ */
+ TEST_ZA_X1 (mla_w8p14_z23_z0, svmfloat8_t,
+ 	    svmla_za16_mf8_vg2x1_fpm (w8 + 14, z23, z0, fpm0),
+ 	    svmla_za16_vg2x1_fpm (w8 + 14, z23, z0, fpm0))
+ 
+ /*
+ ** mla_w8p15_z7_z7:
+ **	add	(w8|w9|w10|w11), w8, #?15
+ **	msr	fpmr, x1
+ **	fmlal	za\.h\[\1, 0:1\], z7\.b, z7\.b
+ **	ret
+ */
+ TEST_ZA_X1 (mla_w8p15_z7_z7, svmfloat8_t,
+ 	    svmla_za16_mf8_vg2x1_fpm (w8 + 15, z7, z7, fpm0),
+ 	    svmla_za16_vg2x1_fpm (w8 + 15, z7, z7, fpm0))
+ 
+ /*
+ ** mla_w8p16_z7_z7:
+ **	add	(w8|w9|w10|w11), w8, #?16
+ **	msr	fpmr, x1
+ **	fmlal	za\.h\[\1, 0:1\], z7\.b, z7\.b
+ **	ret
+ */
+ TEST_ZA_X1 (mla_w8p16_z7_z7, svmfloat8_t,
+ 	    svmla_za16_mf8_vg2x1_fpm (w8 + 16, z7, z7, fpm0),
+ 	    svmla_za16_vg2x1_fpm (w8 + 16, z7, z7, fpm0))
+ 
+ /*
+ ** mla_w8m1_z16_z0:
+ **	sub	(w8|w9|w10|w11), w8, #?1
+ **	msr	fpmr, x1
+ **	fmlal	za\.h\[\1, 0:1\], z16\.b, z0\.b
+ **	ret
+ */
+ TEST_ZA_X1 (mla_w8m1_z16_z0, svmfloat8_t,
+ 	    svmla_za16_mf8_vg2x1_fpm (w8 - 1, z16, z0, fpm0),
+ 	    svmla_za16_vg2x1_fpm (w8 - 1, z16, z0, fpm0))
+ 
+ /*
+ ** mla_w12_z0_z3:
+ **	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), w12
+ **	fmlal	za\.h\[\1, 0:1\], z0\.b, z3\.b
+ **	ret
+ */
+ TEST_ZA_X1 (mla_w12_z0_z3, svmfloat8_t,
+ 	    svmla_za16_mf8_vg2x1_fpm (w12, z0, z3, fpm0),
+ 	    svmla_za16_vg2x1_fpm (w12, z0, z3, fpm0))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_za16_mf8_vg2x2.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_za16_mf8_vg2x2.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_za16_mf8_vg2x2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_za16_mf8_vg2x2.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,285 ----
+ /* { dg-do assemble { target { aarch64_asm_sme-f8f16_ok } } } */
+ /* { dg-do compile { target { ! { aarch64_asm_sme-f8f16_ok } } } } */
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ #pragma GCC target "+sme+sme-f8f16"
+ 
+ /*
+ ** mla_0_z0_z0:
+ **	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), #?0
+ **	fmlal	za\.h\[\1, 0:1, vgx2\], {z0\.b - z1\.b}, {z0\.b - z1\.b}
+ **	ret
+ */
+ TEST_ZA_XN (mla_0_z0_z0, svmfloat8x2_t,
+ 	    svmla_za16_mf8_vg2x2_fpm (0, z0, z0, fpm0),
+ 	    svmla_za16_vg2x2_fpm (0, z0, z0, fpm0))
+ 
+ /*
+ ** mla_w0_z0_z0:
+ **	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), w0
+ **	fmlal	za\.h\[\1, 0:1, vgx2\], {z0\.b - z1\.b}, {z0\.b - z1\.b}
+ **	ret
+ */
+ TEST_ZA_XN (mla_w0_z0_z0, svmfloat8x2_t,
+ 	    svmla_za16_mf8_vg2x2_fpm (w0, z0, z0, fpm0),
+ 	    svmla_za16_vg2x2_fpm (w0, z0, z0, fpm0))
+ 
+ /*
+ ** mla_w8_z0_z4:
+ **	msr	fpmr, x1
+ **	fmlal	za\.h\[w8, 0:1, vgx2\], {z0\.b - z1\.b}, {z4\.b - z5\.b}
+ **	ret
+ */
+ TEST_ZA_XN (mla_w8_z0_z4, svmfloat8x2_t,
+ 	    svmla_za16_mf8_vg2x2_fpm (w8, z0, z4, fpm0),
+ 	    svmla_za16_vg2x2_fpm (w8, z0, z4, fpm0))
+ 
+ /*
+ ** mla_w8_z4_z18:
+ **	msr	fpmr, x1
+ **	fmlal	za\.h\[w8, 0:1, vgx2\], {z4\.b - z5\.b}, {z18\.b - z19\.b}
+ **	ret
+ */
+ TEST_ZA_XN (mla_w8_z4_z18, svmfloat8x2_t,
+ 	    svmla_za16_mf8_vg2x2_fpm (w8, z4, z18, fpm0),
+ 	    svmla_za16_vg2x2_fpm (w8, z4, z18, fpm0))
+ 
+ /* Leave the assembler to check for correctness for misaligned registers.  */
+ 
+ /*
+ ** mla_w8_z0_z23:
+ **	msr	fpmr, x1
+ **	...
+ **	fmlal	za\.h\[w8, 0:1, vgx2\], {z0\.b - z1\.b}, [^\n]+
+ **	ret
+ */
+ TEST_ZA_XN (mla_w8_z0_z23, svmfloat8x2_t,
+ 	    svmla_za16_mf8_vg2x2_fpm (w8, z0, z23, fpm0),
+ 	    svmla_za16_vg2x2_fpm (w8, z0, z23, fpm0))
+ 
+ /*
+ ** mla_w8_z23_z0:
+ **	msr	fpmr, x1
+ **	...
+ **	fmlal	za\.h\[w8, 0:1, vgx2\], [^\n]+, {z0\.b - z1\.b}
+ **	ret
+ */
+ TEST_ZA_XN (mla_w8_z23_z0, svmfloat8x2_t,
+ 	    svmla_za16_mf8_vg2x2_fpm (w8, z23, z0, fpm0),
+ 	    svmla_za16_vg2x2_fpm (w8, z23, z0, fpm0))
+ 
+ /*
+ ** mla_w8_z18_z28:
+ **	msr	fpmr, x1
+ **	fmlal	za\.h\[w8, 0:1, vgx2\], {z18\.b - z19\.b}, {z28\.b - z29\.b}
+ **	ret
+ */
+ TEST_ZA_XN (mla_w8_z18_z28, svmfloat8x2_t,
+ 	    svmla_za16_mf8_vg2x2_fpm (w8, z18, z28, fpm0),
+ 	    svmla_za16_vg2x2_fpm (w8, z18, z28, fpm0))
+ 
+ /*
+ ** mla_w8_z28_z4:
+ **	msr	fpmr, x1
+ **	fmlal	za\.h\[w8, 0:1, vgx2\], {z28\.b - z29\.b}, {z4\.b - z5\.b}
+ **	ret
+ */
+ TEST_ZA_XN (mla_w8_z28_z4, svmfloat8x2_t,
+ 	    svmla_za16_mf8_vg2x2_fpm (w8, z28, z4, fpm0),
+ 	    svmla_za16_vg2x2_fpm (w8, z28, z4, fpm0))
+ 
+ /*
+ ** mla_w8p1_z4_z0:
+ **	add	(w8|w9|w10|w11), w8, #?1
+ **	msr	fpmr, x1
+ **	fmlal	za\.h\[\1, 0:1, vgx2\], {z4\.b - z5\.b}, {z0\.b - z1\.b}
+ **	ret
+ */
+ TEST_ZA_XN (mla_w8p1_z4_z0, svmfloat8x2_t,
+ 	    svmla_za16_mf8_vg2x2_fpm (w8 + 1, z4, z0, fpm0),
+ 	    svmla_za16_vg2x2_fpm (w8 + 1, z4, z0, fpm0))
+ 
+ /*
+ ** mla_w8p2_z4_z0:
+ **	msr	fpmr, x1
+ **	fmlal	za\.h\[w8, 2:3, vgx2\], {z4\.b - z5\.b}, {z0\.b - z1\.b}
+ **	ret
+ */
+ TEST_ZA_XN (mla_w8p2_z4_z0, svmfloat8x2_t,
+ 	    svmla_za16_mf8_vg2x2_fpm (w8 + 2, z4, z0, fpm0),
+ 	    svmla_za16_vg2x2_fpm (w8 + 2, z4, z0, fpm0))
+ 
+ /*
+ ** mla_w11p4_z4_z0:
+ **	msr	fpmr, x1
+ **	fmlal	za\.h\[w11, 4:5, vgx2\], {z4\.b - z5\.b}, {z0\.b - z1\.b}
+ **	ret
+ */
+ TEST_ZA_XN (mla_w11p4_z4_z0, svmfloat8x2_t,
+ 	    svmla_za16_mf8_vg2x2_fpm (w11 + 4, z4, z0, fpm0),
+ 	    svmla_za16_vg2x2_fpm (w11 + 4, z4, z0, fpm0))
+ 
+ /*
+ ** mla_w11p6_z4_z0:
+ **	msr	fpmr, x1
+ **	fmlal	za\.h\[w11, 6:7, vgx2\], {z4\.b - z5\.b}, {z0\.b - z1\.b}
+ **	ret
+ */
+ TEST_ZA_XN (mla_w11p6_z4_z0, svmfloat8x2_t,
+ 	    svmla_za16_mf8_vg2x2_fpm (w11 + 6, z4, z0, fpm0),
+ 	    svmla_za16_vg2x2_fpm (w11 + 6, z4, z0, fpm0))
+ 
+ /*
+ ** mla_w8p7_z4_z0:
+ **	add	(w8|w9|w10|w11), w8, #?7
+ **	msr	fpmr, x1
+ **	fmlal	za\.h\[\1, 0:1, vgx2\], {z4\.b - z5\.b}, {z0\.b - z1\.b}
+ **	ret
+ */
+ TEST_ZA_XN (mla_w8p7_z4_z0, svmfloat8x2_t,
+ 	    svmla_za16_mf8_vg2x2_fpm (w8 + 7, z4, z0, fpm0),
+ 	    svmla_za16_vg2x2_fpm (w8 + 7, z4, z0, fpm0))
+ 
+ /*
+ ** mla_w8p8_z4_z4:
+ **	add	(w8|w9|w10|w11), w8, #?8
+ **	msr	fpmr, x1
+ **	fmlal	za\.h\[\1, 0:1, vgx2\], {z4\.b - z5\.b}, {z4\.b - z5\.b}
+ **	ret
+ */
+ TEST_ZA_XN (mla_w8p8_z4_z4, svmfloat8x2_t,
+ 	    svmla_za16_mf8_vg2x2_fpm (w8 + 8, z4, z4, fpm0),
+ 	    svmla_za16_vg2x2_fpm (w8 + 8, z4, z4, fpm0))
+ 
+ /*
+ ** mla_w8m1_z4_z0:
+ **	sub	(w8|w9|w10|w11), w8, #?1
+ **	msr	fpmr, x1
+ **	fmlal	za\.h\[\1, 0:1, vgx2\], {z4\.b - z5\.b}, {z0\.b - z1\.b}
+ **	ret
+ */
+ TEST_ZA_XN (mla_w8m1_z4_z0, svmfloat8x2_t,
+ 	    svmla_za16_mf8_vg2x2_fpm (w8 - 1, z4, z0, fpm0),
+ 	    svmla_za16_vg2x2_fpm (w8 - 1, z4, z0, fpm0))
+ 
+ /*
+ ** mla_single_0_z1_z0:
+ **	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), #?0
+ **	fmlal	za\.h\[\1, 0:1, vgx2\], {z1\.b - z2\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (mla_single_0_z1_z0, svmfloat8x2_t, svmfloat8_t,
+ 	        svmla_single_za16_mf8_vg2x2_fpm (0, z1, z0, fpm0),
+ 	        svmla_za16_vg2x2_fpm (0, z1, z0, fpm0))
+ 
+ /*
+ ** mla_single_w0_z1_z0:
+ **	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), w0
+ **	fmlal	za\.h\[\1, 0:1, vgx2\], {z1\.b - z2\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (mla_single_w0_z1_z0, svmfloat8x2_t, svmfloat8_t,
+ 	        svmla_single_za16_mf8_vg2x2_fpm (w0, z1, z0, fpm0),
+ 	        svmla_za16_vg2x2_fpm (w0, z1, z0, fpm0))
+ 
+ /*
+ ** mla_single_w8_z1_z0:
+ **	msr	fpmr, x1
+ **	fmlal	za\.h\[w8, 0:1, vgx2\], {z1\.b - z2\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (mla_single_w8_z1_z0, svmfloat8x2_t, svmfloat8_t,
+ 	        svmla_single_za16_mf8_vg2x2_fpm (w8, z1, z0, fpm0),
+ 	        svmla_za16_vg2x2_fpm (w8, z1, z0, fpm0))
+ 
+ /*
+ ** mla_single_w8p1_z1_z0:
+ **	add	(w8|w9|w10|w11), w8, #?1
+ **	msr	fpmr, x1
+ **	fmlal	za\.h\[\1, 0:1, vgx2\], {z1\.b - z2\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (mla_single_w8p1_z1_z0, svmfloat8x2_t, svmfloat8_t,
+ 	        svmla_single_za16_mf8_vg2x2_fpm (w8 + 1, z1, z0, fpm0),
+ 	        svmla_za16_vg2x2_fpm (w8 + 1, z1, z0, fpm0))
+ 
+ /*
+ ** mla_single_w8p2_z20_z0:
+ **	msr	fpmr, x1
+ **	fmlal	za\.h\[w8, 2:3, vgx2\], {z20\.b - z21\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (mla_single_w8p2_z20_z0, svmfloat8x2_t, svmfloat8_t,
+ 	        svmla_single_za16_mf8_vg2x2_fpm (w8 + 2, z20, z0, fpm0),
+ 	        svmla_za16_vg2x2_fpm (w8 + 2, z20, z0, fpm0))
+ 
+ /*
+ ** mla_single_w11p6_z27_z0:
+ **	msr	fpmr, x1
+ **	fmlal	za\.h\[w11, 6:7, vgx2\], {z27\.b - z28\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (mla_single_w11p6_z27_z0, svmfloat8x2_t, svmfloat8_t,
+ 	        svmla_single_za16_mf8_vg2x2_fpm (w11 + 6, z27, z0, fpm0),
+ 	        svmla_za16_vg2x2_fpm (w11 + 6, z27, z0, fpm0))
+ 
+ /*
+ ** mla_single_w8p7_z1_z0:
+ **	add	(w8|w9|w10|w11), w8, #?7
+ **	msr	fpmr, x1
+ **	fmlal	za\.h\[\1, 0:1, vgx2\], {z1\.b - z2\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (mla_single_w8p7_z1_z0, svmfloat8x2_t, svmfloat8_t,
+ 	        svmla_single_za16_mf8_vg2x2_fpm (w8 + 7, z1, z0, fpm0),
+ 	        svmla_za16_vg2x2_fpm (w8 + 7, z1, z0, fpm0))
+ 
+ /*
+ ** mla_single_w8p8_z1_z0:
+ **	add	(w8|w9|w10|w11), w8, #?8
+ **	msr	fpmr, x1
+ **	fmlal	za\.h\[\1, 0:1, vgx2\], {z1\.b - z2\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (mla_single_w8p8_z1_z0, svmfloat8x2_t, svmfloat8_t,
+ 	        svmla_single_za16_mf8_vg2x2_fpm (w8 + 8, z1, z0, fpm0),
+ 	        svmla_za16_vg2x2_fpm (w8 + 8, z1, z0, fpm0))
+ 
+ /*
+ ** mla_single_w0m1_z1_z0:
+ **	sub	(w8|w9|w10|w11), w0, #?1
+ **	msr	fpmr, x1
+ **	fmlal	za\.h\[\1, 0:1, vgx2\], {z1\.b - z2\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (mla_single_w0m1_z1_z0, svmfloat8x2_t, svmfloat8_t,
+ 	        svmla_single_za16_mf8_vg2x2_fpm (w0 - 1, z1, z0, fpm0),
+ 	        svmla_za16_vg2x2_fpm (w0 - 1, z1, z0, fpm0))
+ 
+ /*
+ ** mla_single_w8_z0_z15:
+ **	str	d15, \[sp, #?-16\]!
+ **	msr	fpmr, x1
+ **	fmlal	za\.h\[w8, 0:1, vgx2\], {z0\.b - z1\.b}, z15\.b
+ **	ldr	d15, \[sp\], #?16
+ **	ret
+ */
+ TEST_ZA_SINGLE_Z15 (mla_single_w8_z0_z15, svmfloat8x2_t, svmfloat8_t,
+ 		    svmla_single_za16_mf8_vg2x2_fpm (w8, z0, z15, fpm0),
+ 		    svmla_za16_vg2x2_fpm (w8, z0, z15, fpm0))
+ 
+ /*
+ ** mla_single_w8_z20_z16:
+ **	msr	fpmr, x1
+ **	mov	(z[0-7]).d, z16.d
+ **	fmlal	za\.h\[w8, 0:1, vgx2\], {z20\.b - z21\.b}, \1\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (mla_single_w8_z20_z16, svmfloat8x2_t, svmfloat8_t,
+ 	        svmla_single_za16_mf8_vg2x2_fpm (w8, z20, z16, fpm0),
+ 	        svmla_za16_vg2x2_fpm (w8, z20, z16, fpm0))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_za16_mf8_vg2x4.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_za16_mf8_vg2x4.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_za16_mf8_vg2x4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_za16_mf8_vg2x4.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,287 ----
+ /* { dg-do assemble { target { aarch64_asm_sme-f8f16_ok } } } */
+ /* { dg-do compile { target { ! { aarch64_asm_sme-f8f16_ok } } } } */
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ #pragma GCC target "+sme+sme-f8f16"
+ 
+ /*
+ ** mla_0_z0_z0:
+ **	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), #?0
+ **	fmlal	za\.h\[\1, 0:1, vgx4\], {z0\.b - z3\.b}, {z0\.b - z3\.b}
+ **	ret
+ */
+ TEST_ZA_XN (mla_0_z0_z0, svmfloat8x4_t,
+ 	    svmla_za16_mf8_vg2x4_fpm (0, z0, z0, fpm0),
+ 	    svmla_za16_vg2x4_fpm (0, z0, z0, fpm0))
+ 
+ /*
+ ** mla_w0_z0_z0:
+ **	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), w0
+ **	fmlal	za\.h\[\1, 0:1, vgx4\], {z0\.b - z3\.b}, {z0\.b - z3\.b}
+ **	ret
+ */
+ TEST_ZA_XN (mla_w0_z0_z0, svmfloat8x4_t,
+ 	    svmla_za16_mf8_vg2x4_fpm (w0, z0, z0, fpm0),
+ 	    svmla_za16_vg2x4_fpm (w0, z0, z0, fpm0))
+ 
+ /*
+ ** mla_w8_z0_z4:
+ **	msr	fpmr, x1
+ **	fmlal	za\.h\[w8, 0:1, vgx4\], {z0\.b - z3\.b}, {z4\.b - z7\.b}
+ **	ret
+ */
+ TEST_ZA_XN (mla_w8_z0_z4, svmfloat8x4_t,
+ 	    svmla_za16_mf8_vg2x4_fpm (w8, z0, z4, fpm0),
+ 	    svmla_za16_vg2x4_fpm (w8, z0, z4, fpm0))
+ 
+ /* Leave the assembler to check for correctness for misaligned registers.  */
+ 
+ /*
+ ** mla_w8_z0_z18:
+ **	msr	fpmr, x1
+ **	...
+ **	fmlal	za\.h\[w8, 0:1, vgx4\], {z0\.b - z3\.b}, [^\n]+
+ **	ret
+ */
+ TEST_ZA_XN (mla_w8_z0_z18, svmfloat8x4_t,
+ 	    svmla_za16_mf8_vg2x4_fpm (w8, z0, z18, fpm0),
+ 	    svmla_za16_vg2x4_fpm (w8, z0, z18, fpm0))
+ 
+ /*
+ ** mla_w8_z18_z0:
+ **	msr	fpmr, x1
+ **	...
+ **	fmlal	za\.h\[w8, 0:1, vgx4\], [^\n]+, {z0\.b - z3\.b}
+ **	ret
+ */
+ TEST_ZA_XN (mla_w8_z18_z0, svmfloat8x4_t,
+ 	    svmla_za16_mf8_vg2x4_fpm (w8, z18, z0, fpm0),
+ 	    svmla_za16_vg2x4_fpm (w8, z18, z0, fpm0))
+ 
+ /*
+ ** mla_w8_z0_z23:
+ **	msr	fpmr, x1
+ **	...
+ **	fmlal	za\.h\[w8, 0:1, vgx4\], {z0\.b - z3\.b}, [^\n]+
+ **	ret
+ */
+ TEST_ZA_XN (mla_w8_z0_z23, svmfloat8x4_t,
+ 	    svmla_za16_mf8_vg2x4_fpm (w8, z0, z23, fpm0),
+ 	    svmla_za16_vg2x4_fpm (w8, z0, z23, fpm0))
+ 
+ /*
+ ** mla_w8_z23_z0:
+ **	msr	fpmr, x1
+ **	...
+ **	fmlal	za\.h\[w8, 0:1, vgx4\], [^\n]+, {z0\.b - z3\.b}
+ **	ret
+ */
+ TEST_ZA_XN (mla_w8_z23_z0, svmfloat8x4_t,
+ 	    svmla_za16_mf8_vg2x4_fpm (w8, z23, z0, fpm0),
+ 	    svmla_za16_vg2x4_fpm (w8, z23, z0, fpm0))
+ 
+ /*
+ ** mla_w8_z4_z28:
+ **	msr	fpmr, x1
+ **	fmlal	za\.h\[w8, 0:1, vgx4\], {z4\.b - z7\.b}, {z28\.b - z31\.b}
+ **	ret
+ */
+ TEST_ZA_XN (mla_w8_z4_z28, svmfloat8x4_t,
+ 	    svmla_za16_mf8_vg2x4_fpm (w8, z4, z28, fpm0),
+ 	    svmla_za16_vg2x4_fpm (w8, z4, z28, fpm0))
+ 
+ /*
+ ** mla_w8_z28_z0:
+ **	msr	fpmr, x1
+ **	fmlal	za\.h\[w8, 0:1, vgx4\], {z28\.b - z31\.b}, {z0\.b - z3\.b}
+ **	ret
+ */
+ TEST_ZA_XN (mla_w8_z28_z0, svmfloat8x4_t,
+ 	    svmla_za16_mf8_vg2x4_fpm (w8, z28, z0, fpm0),
+ 	    svmla_za16_vg2x4_fpm (w8, z28, z0, fpm0))
+ 
+ /*
+ ** mla_w8p1_z4_z0:
+ **	add	(w8|w9|w10|w11), w8, #?1
+ **	msr	fpmr, x1
+ **	fmlal	za\.h\[\1, 0:1, vgx4\], {z4\.b - z7\.b}, {z0\.b - z3\.b}
+ **	ret
+ */
+ TEST_ZA_XN (mla_w8p1_z4_z0, svmfloat8x4_t,
+ 	    svmla_za16_mf8_vg2x4_fpm (w8 + 1, z4, z0, fpm0),
+ 	    svmla_za16_vg2x4_fpm (w8 + 1, z4, z0, fpm0))
+ 
+ /*
+ ** mla_w8p2_z4_z0:
+ **	msr	fpmr, x1
+ **	fmlal	za\.h\[w8, 2:3, vgx4\], {z4\.b - z7\.b}, {z0\.b - z3\.b}
+ **	ret
+ */
+ TEST_ZA_XN (mla_w8p2_z4_z0, svmfloat8x4_t,
+ 	    svmla_za16_mf8_vg2x4_fpm (w8 + 2, z4, z0, fpm0),
+ 	    svmla_za16_vg2x4_fpm (w8 + 2, z4, z0, fpm0))
+ 
+ /*
+ ** mla_w11p6_z4_z0:
+ **	msr	fpmr, x1
+ **	fmlal	za\.h\[w11, 6:7, vgx4\], {z4\.b - z7\.b}, {z0\.b - z3\.b}
+ **	ret
+ */
+ TEST_ZA_XN (mla_w11p6_z4_z0, svmfloat8x4_t,
+ 	    svmla_za16_mf8_vg2x4_fpm (w11 + 6, z4, z0, fpm0),
+ 	    svmla_za16_vg2x4_fpm (w11 + 6, z4, z0, fpm0))
+ 
+ /*
+ ** mla_w8p7_z4_z0:
+ **	add	(w8|w9|w10|w11), w8, #?7
+ **	msr	fpmr, x1
+ **	fmlal	za\.h\[\1, 0:1, vgx4\], {z4\.b - z7\.b}, {z0\.b - z3\.b}
+ **	ret
+ */
+ TEST_ZA_XN (mla_w8p7_z4_z0, svmfloat8x4_t,
+ 	    svmla_za16_mf8_vg2x4_fpm (w8 + 7, z4, z0, fpm0),
+ 	    svmla_za16_vg2x4_fpm (w8 + 7, z4, z0, fpm0))
+ 
+ /*
+ ** mla_w8p8_z4_z4:
+ **	add	(w8|w9|w10|w11), w8, #?8
+ **	msr	fpmr, x1
+ **	fmlal	za\.h\[\1, 0:1, vgx4\], {z4\.b - z7\.b}, {z4\.b - z7\.b}
+ **	ret
+ */
+ TEST_ZA_XN (mla_w8p8_z4_z4, svmfloat8x4_t,
+ 	    svmla_za16_mf8_vg2x4_fpm (w8 + 8, z4, z4, fpm0),
+ 	    svmla_za16_vg2x4_fpm (w8 + 8, z4, z4, fpm0))
+ 
+ /*
+ ** mla_w8m1_z4_z0:
+ **	sub	(w8|w9|w10|w11), w8, #?1
+ **	msr	fpmr, x1
+ **	fmlal	za\.h\[\1, 0:1, vgx4\], {z4\.b - z7\.b}, {z0\.b - z3\.b}
+ **	ret
+ */
+ TEST_ZA_XN (mla_w8m1_z4_z0, svmfloat8x4_t,
+ 	    svmla_za16_mf8_vg2x4_fpm (w8 - 1, z4, z0, fpm0),
+ 	    svmla_za16_vg2x4_fpm (w8 - 1, z4, z0, fpm0))
+ 
+ /*
+ ** mla_single_0_z1_z0:
+ **	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), #?0
+ **	fmlal	za\.h\[\1, 0:1, vgx4\], {z1\.b - z4\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (mla_single_0_z1_z0, svmfloat8x4_t, svmfloat8_t,
+ 	        svmla_single_za16_mf8_vg2x4_fpm (0, z1, z0, fpm0),
+ 	        svmla_za16_vg2x4_fpm (0, z1, z0, fpm0))
+ 
+ /*
+ ** mla_single_w0_z1_z0:
+ **	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), w0
+ **	fmlal	za\.h\[\1, 0:1, vgx4\], {z1\.b - z4\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (mla_single_w0_z1_z0, svmfloat8x4_t, svmfloat8_t,
+ 	        svmla_single_za16_mf8_vg2x4_fpm (w0, z1, z0, fpm0),
+ 	        svmla_za16_vg2x4_fpm (w0, z1, z0, fpm0))
+ 
+ /*
+ ** mla_single_w8_z1_z0:
+ **	msr	fpmr, x1
+ **	fmlal	za\.h\[w8, 0:1, vgx4\], {z1\.b - z4\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (mla_single_w8_z1_z0, svmfloat8x4_t, svmfloat8_t,
+ 	        svmla_single_za16_mf8_vg2x4_fpm (w8, z1, z0, fpm0),
+ 	        svmla_za16_vg2x4_fpm (w8, z1, z0, fpm0))
+ 
+ /*
+ ** mla_single_w8p1_z1_z0:
+ **	add	(w8|w9|w10|w11), w8, #?1
+ **	msr	fpmr, x1
+ **	fmlal	za\.h\[\1, 0:1, vgx4\], {z1\.b - z4\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (mla_single_w8p1_z1_z0, svmfloat8x4_t, svmfloat8_t,
+ 	        svmla_single_za16_mf8_vg2x4_fpm (w8 + 1, z1, z0, fpm0),
+ 	        svmla_za16_vg2x4_fpm (w8 + 1, z1, z0, fpm0))
+ 
+ /*
+ ** mla_single_w8p2_z20_z0:
+ **	msr	fpmr, x1
+ **	fmlal	za\.h\[w8, 2:3, vgx4\], {z20\.b - z23\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (mla_single_w8p2_z20_z0, svmfloat8x4_t, svmfloat8_t,
+ 	        svmla_single_za16_mf8_vg2x4_fpm (w8 + 2, z20, z0, fpm0),
+ 	        svmla_za16_vg2x4_fpm (w8 + 2, z20, z0, fpm0))
+ 
+ /*
+ ** mla_single_w8p6_z27_z0:
+ **	msr	fpmr, x1
+ **	fmlal	za\.h\[w8, 6:7, vgx4\], {z27\.b - z30\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (mla_single_w8p6_z27_z0, svmfloat8x4_t, svmfloat8_t,
+ 	        svmla_single_za16_mf8_vg2x4_fpm (w8 + 6, z27, z0, fpm0),
+ 	        svmla_za16_vg2x4_fpm (w8 + 6, z27, z0, fpm0))
+ 
+ /*
+ ** mla_single_w8p7_z1_z0:
+ **	add	(w8|w9|w10|w11), w8, #?7
+ **	msr	fpmr, x1
+ **	fmlal	za\.h\[\1, 0:1, vgx4\], {z1\.b - z4\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (mla_single_w8p7_z1_z0, svmfloat8x4_t, svmfloat8_t,
+ 	        svmla_single_za16_mf8_vg2x4_fpm (w8 + 7, z1, z0, fpm0),
+ 	        svmla_za16_vg2x4_fpm (w8 + 7, z1, z0, fpm0))
+ 
+ /*
+ ** mla_single_w8p8_z1_z0:
+ **	add	(w8|w9|w10|w11), w8, #?8
+ **	msr	fpmr, x1
+ **	fmlal	za\.h\[\1, 0:1, vgx4\], {z1\.b - z4\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (mla_single_w8p8_z1_z0, svmfloat8x4_t, svmfloat8_t,
+ 	        svmla_single_za16_mf8_vg2x4_fpm (w8 + 8, z1, z0, fpm0),
+ 	        svmla_za16_vg2x4_fpm (w8 + 8, z1, z0, fpm0))
+ 
+ /*
+ ** mla_single_w0m1_z1_z0:
+ **	sub	(w8|w9|w10|w11), w0, #?1
+ **	msr	fpmr, x1
+ **	fmlal	za\.h\[\1, 0:1, vgx4\], {z1\.b - z4\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (mla_single_w0m1_z1_z0, svmfloat8x4_t, svmfloat8_t,
+ 	        svmla_single_za16_mf8_vg2x4_fpm (w0 - 1, z1, z0, fpm0),
+ 	        svmla_za16_vg2x4_fpm (w0 - 1, z1, z0, fpm0))
+ 
+ /*
+ ** mla_single_w8_z0_z15:
+ **	str	d15, \[sp, #?-16\]!
+ **	msr	fpmr, x1
+ **	fmlal	za\.h\[w8, 0:1, vgx4\], {z0\.b - z3\.b}, z15\.b
+ **	ldr	d15, \[sp\], #?16
+ **	ret
+ */
+ TEST_ZA_SINGLE_Z15 (mla_single_w8_z0_z15, svmfloat8x4_t, svmfloat8_t,
+ 		    svmla_single_za16_mf8_vg2x4_fpm (w8, z0, z15, fpm0),
+ 		    svmla_za16_vg2x4_fpm (w8, z0, z15, fpm0))
+ 
+ /*
+ ** mla_single_w8_z20_z16:
+ **	msr	fpmr, x1
+ **	mov	(z[0-7]).d, z16.d
+ **	fmlal	za\.h\[w8, 0:1, vgx4\], {z20\.b - z23\.b}, \1\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (mla_single_w8_z20_z16, svmfloat8x4_t, svmfloat8_t,
+ 	        svmla_single_za16_mf8_vg2x4_fpm (w8, z20, z16, fpm0),
+ 	        svmla_za16_vg2x4_fpm (w8, z20, z16, fpm0))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_za32_mf8_vg4x1.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_za32_mf8_vg4x1.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_za32_mf8_vg4x1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_za32_mf8_vg4x1.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,167 ----
+ /* { dg-do assemble { target { aarch64_asm_sme-f8f32_ok } } } */
+ /* { dg-do compile { target { ! { aarch64_asm_sme-f8f32_ok } } } } */
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ #pragma GCC target "+sme+sme-f8f32"
+ 
+ /*
+ ** mla_0_z0_z0:
+ **	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), #?0
+ **	fmlall	za\.s\[\1, 0:3\], z0\.b, z0\.b
+ **	ret
+ */
+ TEST_ZA_X1 (mla_0_z0_z0, svmfloat8_t,
+ 	    svmla_za32_mf8_vg4x1_fpm (0, z0, z0, fpm0),
+ 	    svmla_za32_vg4x1_fpm (0, z0, z0, fpm0))
+ 
+ /*
+ ** mla_w0_z0_z3:
+ **	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), w0
+ **	fmlall	za\.s\[\1, 0:3\], z0\.b, z3\.b
+ **	ret
+ */
+ TEST_ZA_X1 (mla_w0_z0_z3, svmfloat8_t,
+ 	    svmla_za32_mf8_vg4x1_fpm (w0, z0, z3, fpm0),
+ 	    svmla_za32_vg4x1_fpm (w0, z0, z3, fpm0))
+ 
+ /*
+ ** mla_w7_z0_z3:
+ **	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), w7
+ **	fmlall	za\.s\[\1, 0:3\], z0\.b, z3\.b
+ **	ret
+ */
+ TEST_ZA_X1 (mla_w7_z0_z3, svmfloat8_t,
+ 	    svmla_za32_mf8_vg4x1_fpm (w7, z0, z3, fpm0),
+ 	    svmla_za32_vg4x1_fpm (w7, z0, z3, fpm0))
+ 
+ /*
+ ** mla_w8_z7_z3:
+ **	msr	fpmr, x1
+ **	fmlall	za\.s\[w8, 0:3\], z7\.b, z3\.b
+ **	ret
+ */
+ TEST_ZA_X1 (mla_w8_z7_z3, svmfloat8_t,
+ 	    svmla_za32_mf8_vg4x1_fpm (w8, z7, z3, fpm0),
+ 	    svmla_za32_vg4x1_fpm (w8, z7, z3, fpm0))
+ 
+ /*
+ ** mla_w8_z31_z16:
+ **	msr	fpmr, x1
+ **	mov	(z[0-7])\.d, z16\.d
+ **	fmlall	za\.s\[w8, 0:3\], z31\.b. \1\.b
+ **	ret
+ */
+ TEST_ZA_X1 (mla_w8_z31_z16, svmfloat8_t,
+ 	    svmla_za32_mf8_vg4x1_fpm (w8, z31, z16, fpm0),
+ 	    svmla_za32_vg4x1_fpm (w8, z31, z16, fpm0))
+ 
+ /*
+ ** mla_w8p1_z0_z0:
+ **	add	(w8|w9|w10|w11), w8, #?1
+ **	msr	fpmr, x1
+ **	fmlall	za\.s\[\1, 0:3\], z0\.b, z0\.b
+ **	ret
+ */
+ TEST_ZA_X1 (mla_w8p1_z0_z0, svmfloat8_t,
+ 	    svmla_za32_mf8_vg4x1_fpm (w8 + 1, z0, z0, fpm0),
+ 	    svmla_za32_vg4x1_fpm (w8 + 1, z0, z0, fpm0))
+ 
+ /*
+ ** mla_w10p4_z23_z0:
+ **	msr	fpmr, x1
+ **	fmlall	za\.s\[w10, 4:7\], z23\.b, z0\.b
+ **	ret
+ */
+ TEST_ZA_X1 (mla_w10p4_z23_z0, svmfloat8_t,
+ 	    svmla_za32_mf8_vg4x1_fpm (w10 + 4, z23, z0, fpm0),
+ 	    svmla_za32_vg4x1_fpm (w10 + 4, z23, z0, fpm0))
+ 
+ /*
+ ** mla_w11p6_z23_z0:
+ **	add	(w8|w9|w10|w11), w11, #?6
+ **	msr	fpmr, x1
+ **	fmlall	za\.s\[\1, 0:3\], z23\.b, z0\.b
+ **	ret
+ */
+ TEST_ZA_X1 (mla_w11p6_z23_z0, svmfloat8_t,
+ 	    svmla_za32_mf8_vg4x1_fpm (w11 + 6, z23, z0, fpm0),
+ 	    svmla_za32_vg4x1_fpm (w11 + 6, z23, z0, fpm0))
+ 
+ /*
+ ** mla_w9p8_z7_z7:
+ **	msr	fpmr, x1
+ **	fmlall	za\.s\[w9, 8:11\], z7\.b, z7\.b
+ **	ret
+ */
+ TEST_ZA_X1 (mla_w9p8_z7_z7, svmfloat8_t,
+ 	    svmla_za32_mf8_vg4x1_fpm (w9 + 8, z7, z7, fpm0),
+ 	    svmla_za32_vg4x1_fpm (w9 + 8, z7, z7, fpm0))
+ 
+ /*
+ ** mla_w11p12_z23_z0:
+ **	msr	fpmr, x1
+ **	fmlall	za\.s\[w11, 12:15\], z23\.b, z0\.b
+ **	ret
+ */
+ TEST_ZA_X1 (mla_w11p12_z23_z0, svmfloat8_t,
+ 	    svmla_za32_mf8_vg4x1_fpm (w11 + 12, z23, z0, fpm0),
+ 	    svmla_za32_vg4x1_fpm (w11 + 12, z23, z0, fpm0))
+ 
+ /*
+ ** mla_w8p14_z23_z0:
+ **	add	(w8|w9|w10|w11), w8, #?14
+ **	msr	fpmr, x1
+ **	fmlall	za\.s\[\1, 0:3\], z23\.b, z0\.b
+ **	ret
+ */
+ TEST_ZA_X1 (mla_w8p14_z23_z0, svmfloat8_t,
+ 	    svmla_za32_mf8_vg4x1_fpm (w8 + 14, z23, z0, fpm0),
+ 	    svmla_za32_vg4x1_fpm (w8 + 14, z23, z0, fpm0))
+ 
+ /*
+ ** mla_w8p15_z7_z7:
+ **	add	(w8|w9|w10|w11), w8, #?15
+ **	msr	fpmr, x1
+ **	fmlall	za\.s\[\1, 0:3\], z7\.b, z7\.b
+ **	ret
+ */
+ TEST_ZA_X1 (mla_w8p15_z7_z7, svmfloat8_t,
+ 	    svmla_za32_mf8_vg4x1_fpm (w8 + 15, z7, z7, fpm0),
+ 	    svmla_za32_vg4x1_fpm (w8 + 15, z7, z7, fpm0))
+ 
+ /*
+ ** mla_w8p16_z7_z7:
+ **	add	(w8|w9|w10|w11), w8, #?16
+ **	msr	fpmr, x1
+ **	fmlall	za\.s\[\1, 0:3\], z7\.b, z7\.b
+ **	ret
+ */
+ TEST_ZA_X1 (mla_w8p16_z7_z7, svmfloat8_t,
+ 	    svmla_za32_mf8_vg4x1_fpm (w8 + 16, z7, z7, fpm0),
+ 	    svmla_za32_vg4x1_fpm (w8 + 16, z7, z7, fpm0))
+ 
+ /*
+ ** mla_w8m1_z16_z0:
+ **	sub	(w8|w9|w10|w11), w8, #?1
+ **	msr	fpmr, x1
+ **	fmlall	za\.s\[\1, 0:3\], z16\.b, z0\.b
+ **	ret
+ */
+ TEST_ZA_X1 (mla_w8m1_z16_z0, svmfloat8_t,
+ 	    svmla_za32_mf8_vg4x1_fpm (w8 - 1, z16, z0, fpm0),
+ 	    svmla_za32_vg4x1_fpm (w8 - 1, z16, z0, fpm0))
+ 
+ /*
+ ** mla_w12_z0_z3:
+ **	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), w12
+ **	fmlall	za\.s\[\1, 0:3\], z0\.b, z3\.b
+ **	ret
+ */
+ TEST_ZA_X1 (mla_w12_z0_z3, svmfloat8_t,
+ 	    svmla_za32_mf8_vg4x1_fpm (w12, z0, z3, fpm0),
+ 	    svmla_za32_vg4x1_fpm (w12, z0, z3, fpm0))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_za32_mf8_vg4x2.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_za32_mf8_vg4x2.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_za32_mf8_vg4x2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_za32_mf8_vg4x2.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,277 ----
+ /* { dg-do assemble { target { aarch64_asm_sme-f8f32_ok } } } */
+ /* { dg-do compile { target { ! { aarch64_asm_sme-f8f32_ok } } } } */
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ #pragma GCC target "+sme+sme-f8f32"
+ 
+ /*
+ ** mla_0_z0_z0:
+ **	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), #?0
+ **	fmlall	za\.s\[\1, 0:3, vgx2\], {z0\.b - z1\.b}, {z0\.b - z1\.b}
+ **	ret
+ */
+ TEST_ZA_XN (mla_0_z0_z0, svmfloat8x2_t,
+ 	    svmla_za32_mf8_vg4x2_fpm (0, z0, z0, fpm0),
+ 	    svmla_za32_vg4x2_fpm (0, z0, z0, fpm0))
+ 
+ /*
+ ** mla_w0_z0_z0:
+ **	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), w0
+ **	fmlall	za\.s\[\1, 0:3, vgx2\], {z0\.b - z1\.b}, {z0\.b - z1\.b}
+ **	ret
+ */
+ TEST_ZA_XN (mla_w0_z0_z0, svmfloat8x2_t,
+ 	    svmla_za32_mf8_vg4x2_fpm (w0, z0, z0, fpm0),
+ 	    svmla_za32_vg4x2_fpm (w0, z0, z0, fpm0))
+ 
+ /*
+ ** mla_w8_z0_z4:
+ **	msr	fpmr, x1
+ **	fmlall	za\.s\[w8, 0:3, vgx2\], {z0\.b - z1\.b}, {z4\.b - z5\.b}
+ **	ret
+ */
+ TEST_ZA_XN (mla_w8_z0_z4, svmfloat8x2_t,
+ 	    svmla_za32_mf8_vg4x2_fpm (w8, z0, z4, fpm0),
+ 	    svmla_za32_vg4x2_fpm (w8, z0, z4, fpm0))
+ 
+ /*
+ ** mla_w8_z4_z18:
+ **	msr	fpmr, x1
+ **	fmlall	za\.s\[w8, 0:3, vgx2\], {z4\.b - z5\.b}, {z18\.b - z19\.b}
+ **	ret
+ */
+ TEST_ZA_XN (mla_w8_z4_z18, svmfloat8x2_t,
+ 	    svmla_za32_mf8_vg4x2_fpm (w8, z4, z18, fpm0),
+ 	    svmla_za32_vg4x2_fpm (w8, z4, z18, fpm0))
+ 
+ /* Leave the assembler to check for correctness for misaligned registers.  */
+ 
+ /*
+ ** mla_w8_z0_z23:
+ **	msr	fpmr, x1
+ **	...
+ **	fmlall	za\.s\[w8, 0:3, vgx2\], {z0\.b - z1\.b}, [^\n]+
+ **	ret
+ */
+ TEST_ZA_XN (mla_w8_z0_z23, svmfloat8x2_t,
+ 	    svmla_za32_mf8_vg4x2_fpm (w8, z0, z23, fpm0),
+ 	    svmla_za32_vg4x2_fpm (w8, z0, z23, fpm0))
+ 
+ /*
+ ** mla_w8_z23_z0:
+ **	msr	fpmr, x1
+ **	...
+ **	fmlall	za\.s\[w8, 0:3, vgx2\], [^\n]+, {z0\.b - z1\.b}
+ **	ret
+ */
+ TEST_ZA_XN (mla_w8_z23_z0, svmfloat8x2_t,
+ 	    svmla_za32_mf8_vg4x2_fpm (w8, z23, z0, fpm0),
+ 	    svmla_za32_vg4x2_fpm (w8, z23, z0, fpm0))
+ 
+ /*
+ ** mla_w8_z18_z28:
+ **	msr	fpmr, x1
+ **	fmlall	za\.s\[w8, 0:3, vgx2\], {z18\.b - z19\.b}, {z28\.b - z29\.b}
+ **	ret
+ */
+ TEST_ZA_XN (mla_w8_z18_z28, svmfloat8x2_t,
+ 	    svmla_za32_mf8_vg4x2_fpm (w8, z18, z28, fpm0),
+ 	    svmla_za32_vg4x2_fpm (w8, z18, z28, fpm0))
+ 
+ /*
+ ** mla_w8_z28_z4:
+ **	msr	fpmr, x1
+ **	fmlall	za\.s\[w8, 0:3, vgx2\], {z28\.b - z29\.b}, {z4\.b - z5\.b}
+ **	ret
+ */
+ TEST_ZA_XN (mla_w8_z28_z4, svmfloat8x2_t,
+ 	    svmla_za32_mf8_vg4x2_fpm (w8, z28, z4, fpm0),
+ 	    svmla_za32_vg4x2_fpm (w8, z28, z4, fpm0))
+ 
+ /*
+ ** mla_w8p1_z4_z0:
+ **	add	(w8|w9|w10|w11), w8, #?1
+ **	msr	fpmr, x1
+ **	fmlall	za\.s\[\1, 0:3, vgx2\], {z4\.b - z5\.b}, {z0\.b - z1\.b}
+ **	ret
+ */
+ TEST_ZA_XN (mla_w8p1_z4_z0, svmfloat8x2_t,
+ 	    svmla_za32_mf8_vg4x2_fpm (w8 + 1, z4, z0, fpm0),
+ 	    svmla_za32_vg4x2_fpm (w8 + 1, z4, z0, fpm0))
+ 
+ /*
+ ** mla_w8p2_z4_z0:
+ **	add	(w8|w9|w10|w11), w8, #?2
+ **	msr	fpmr, x1
+ **	fmlall	za\.s\[w8, 0:3, vgx2\], {z4\.b - z5\.b}, {z0\.b - z1\.b}
+ **	ret
+ */
+ TEST_ZA_XN (mla_w8p2_z4_z0, svmfloat8x2_t,
+ 	    svmla_za32_mf8_vg4x2_fpm (w8 + 2, z4, z0, fpm0),
+ 	    svmla_za32_vg4x2_fpm (w8 + 2, z4, z0, fpm0))
+ 
+ /*
+ ** mla_w11p4_z4_z0:
+ **	msr	fpmr, x1
+ **	fmlall	za\.s\[w11, 4:7, vgx2\], {z4\.b - z5\.b}, {z0\.b - z1\.b}
+ **	ret
+ */
+ TEST_ZA_XN (mla_w11p4_z4_z0, svmfloat8x2_t,
+ 	    svmla_za32_mf8_vg4x2_fpm (w11 + 4, z4, z0, fpm0),
+ 	    svmla_za32_vg4x2_fpm (w11 + 4, z4, z0, fpm0))
+ 
+ /*
+ ** mla_w8p7_z4_z0:
+ **	add	(w8|w9|w10|w11), w8, #?7
+ **	msr	fpmr, x1
+ **	fmlall	za\.s\[\1, 0:3, vgx2\], {z4\.b - z5\.b}, {z0\.b - z1\.b}
+ **	ret
+ */
+ TEST_ZA_XN (mla_w8p7_z4_z0, svmfloat8x2_t,
+ 	    svmla_za32_mf8_vg4x2_fpm (w8 + 7, z4, z0, fpm0),
+ 	    svmla_za32_vg4x2_fpm (w8 + 7, z4, z0, fpm0))
+ 
+ /*
+ ** mla_w8p8_z4_z4:
+ **	add	(w8|w9|w10|w11), w8, #?8
+ **	msr	fpmr, x1
+ **	fmlall	za\.s\[\1, 0:3, vgx2\], {z4\.b - z5\.b}, {z4\.b - z5\.b}
+ **	ret
+ */
+ TEST_ZA_XN (mla_w8p8_z4_z4, svmfloat8x2_t,
+ 	    svmla_za32_mf8_vg4x2_fpm (w8 + 8, z4, z4, fpm0),
+ 	    svmla_za32_vg4x2_fpm (w8 + 8, z4, z4, fpm0))
+ 
+ /*
+ ** mla_w8m1_z4_z0:
+ **	sub	(w8|w9|w10|w11), w8, #?1
+ **	msr	fpmr, x1
+ **	fmlall	za\.s\[\1, 0:3, vgx2\], {z4\.b - z5\.b}, {z0\.b - z1\.b}
+ **	ret
+ */
+ TEST_ZA_XN (mla_w8m1_z4_z0, svmfloat8x2_t,
+ 	    svmla_za32_mf8_vg4x2_fpm (w8 - 1, z4, z0, fpm0),
+ 	    svmla_za32_vg4x2_fpm (w8 - 1, z4, z0, fpm0))
+ 
+ /*
+ ** mla_single_0_z1_z0:
+ **	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), #?0
+ **	fmlall	za\.s\[\1, 0:3, vgx2\], {z1\.b - z2\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (mla_single_0_z1_z0, svmfloat8x2_t, svmfloat8_t,
+ 	        svmla_single_za32_mf8_vg4x2_fpm (0, z1, z0, fpm0),
+ 	        svmla_za32_vg4x2_fpm (0, z1, z0, fpm0))
+ 
+ /*
+ ** mla_single_w0_z1_z0:
+ **	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), w0
+ **	fmlall	za\.s\[\1, 0:3, vgx2\], {z1\.b - z2\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (mla_single_w0_z1_z0, svmfloat8x2_t, svmfloat8_t,
+ 	        svmla_single_za32_mf8_vg4x2_fpm (w0, z1, z0, fpm0),
+ 	        svmla_za32_vg4x2_fpm (w0, z1, z0, fpm0))
+ 
+ /*
+ ** mla_single_w8_z1_z0:
+ **	msr	fpmr, x1
+ **	fmlall	za\.s\[w8, 0:3, vgx2\], {z1\.b - z2\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (mla_single_w8_z1_z0, svmfloat8x2_t, svmfloat8_t,
+ 	        svmla_single_za32_mf8_vg4x2_fpm (w8, z1, z0, fpm0),
+ 	        svmla_za32_vg4x2_fpm (w8, z1, z0, fpm0))
+ 
+ /*
+ ** mla_single_w8p1_z1_z0:
+ **	add	(w8|w9|w10|w11), w8, #?1
+ **	msr	fpmr, x1
+ **	fmlall	za\.s\[\1, 0:3, vgx2\], {z1\.b - z2\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (mla_single_w8p1_z1_z0, svmfloat8x2_t, svmfloat8_t,
+ 	        svmla_single_za32_mf8_vg4x2_fpm (w8 + 1, z1, z0, fpm0),
+ 	        svmla_za32_vg4x2_fpm (w8 + 1, z1, z0, fpm0))
+ 
+ /*
+ ** mla_single_w8p2_z20_z0:
+ **	add	(w8|w9|w10|w11), w8, #?2
+ **	msr	fpmr, x1
+ **	fmlall	za\.s\[\1, 0:3, vgx2\], {z20\.b - z21\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (mla_single_w8p2_z20_z0, svmfloat8x2_t, svmfloat8_t,
+ 	        svmla_single_za32_mf8_vg4x2_fpm (w8 + 2, z20, z0, fpm0),
+ 	        svmla_za32_vg4x2_fpm (w8 + 2, z20, z0, fpm0))
+ 
+ /*
+ ** mla_single_w11p4_z27_z0:
+ **	msr	fpmr, x1
+ **	fmlall	za\.s\[w11, 4:7, vgx2\], {z27\.b - z28\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (mla_single_w11p4_z27_z0, svmfloat8x2_t, svmfloat8_t,
+ 	        svmla_single_za32_mf8_vg4x2_fpm (w11 + 4, z27, z0, fpm0),
+ 	        svmla_za32_vg4x2_fpm (w11 + 4, z27, z0, fpm0))
+ 
+ /*
+ ** mla_single_w8p7_z1_z0:
+ **	add	(w8|w9|w10|w11), w8, #?7
+ **	msr	fpmr, x1
+ **	fmlall	za\.s\[\1, 0:3, vgx2\], {z1\.b - z2\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (mla_single_w8p7_z1_z0, svmfloat8x2_t, svmfloat8_t,
+ 	        svmla_single_za32_mf8_vg4x2_fpm (w8 + 7, z1, z0, fpm0),
+ 	        svmla_za32_vg4x2_fpm (w8 + 7, z1, z0, fpm0))
+ 
+ /*
+ ** mla_single_w8p8_z1_z0:
+ **	add	(w8|w9|w10|w11), w8, #?8
+ **	msr	fpmr, x1
+ **	fmlall	za\.s\[\1, 0:3, vgx2\], {z1\.b - z2\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (mla_single_w8p8_z1_z0, svmfloat8x2_t, svmfloat8_t,
+ 	        svmla_single_za32_mf8_vg4x2_fpm (w8 + 8, z1, z0, fpm0),
+ 	        svmla_za32_vg4x2_fpm (w8 + 8, z1, z0, fpm0))
+ 
+ /*
+ ** mla_single_w0m1_z1_z0:
+ **	sub	(w8|w9|w10|w11), w0, #?1
+ **	msr	fpmr, x1
+ **	fmlall	za\.s\[\1, 0:3, vgx2\], {z1\.b - z2\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (mla_single_w0m1_z1_z0, svmfloat8x2_t, svmfloat8_t,
+ 	        svmla_single_za32_mf8_vg4x2_fpm (w0 - 1, z1, z0, fpm0),
+ 	        svmla_za32_vg4x2_fpm (w0 - 1, z1, z0, fpm0))
+ 
+ /*
+ ** mla_single_w8_z0_z15:
+ **	str	d15, \[sp, #?-16\]!
+ **	msr	fpmr, x1
+ **	fmlall	za\.s\[w8, 0:3, vgx2\], {z0\.b - z1\.b}, z15\.b
+ **	ldr	d15, \[sp\], #?16
+ **	ret
+ */
+ TEST_ZA_SINGLE_Z15 (mla_single_w8_z0_z15, svmfloat8x2_t, svmfloat8_t,
+ 		    svmla_single_za32_mf8_vg4x2_fpm (w8, z0, z15, fpm0),
+ 		    svmla_za32_vg4x2_fpm (w8, z0, z15, fpm0))
+ 
+ /*
+ ** mla_single_w8_z20_z16:
+ **	msr	fpmr, x1
+ **	mov	(z[0-7]).d, z16.d
+ **	fmlall	za\.s\[w8, 0:3, vgx2\], {z20\.b - z21\.b}, \1\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (mla_single_w8_z20_z16, svmfloat8x2_t, svmfloat8_t,
+ 	        svmla_single_za32_mf8_vg4x2_fpm (w8, z20, z16, fpm0),
+ 	        svmla_za32_vg4x2_fpm (w8, z20, z16, fpm0))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_za32_mf8_vg4x4.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_za32_mf8_vg4x4.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_za32_mf8_vg4x4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mla_za32_mf8_vg4x4.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,289 ----
+ /* { dg-do assemble { target { aarch64_asm_sme-f8f32_ok } } } */
+ /* { dg-do compile { target { ! { aarch64_asm_sme-f8f32_ok } } } } */
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ #pragma GCC target "+sme+sme-f8f32"
+ 
+ /*
+ ** mla_0_z0_z0:
+ **	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), #?0
+ **	fmlall	za\.s\[\1, 0:3, vgx4\], {z0\.b - z3\.b}, {z0\.b - z3\.b}
+ **	ret
+ */
+ TEST_ZA_XN (mla_0_z0_z0, svmfloat8x4_t,
+ 	    svmla_za32_mf8_vg4x4_fpm (0, z0, z0, fpm0),
+ 	    svmla_za32_vg4x4_fpm (0, z0, z0, fpm0))
+ 
+ /*
+ ** mla_w0_z0_z0:
+ **	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), w0
+ **	fmlall	za\.s\[\1, 0:3, vgx4\], {z0\.b - z3\.b}, {z0\.b - z3\.b}
+ **	ret
+ */
+ TEST_ZA_XN (mla_w0_z0_z0, svmfloat8x4_t,
+ 	    svmla_za32_mf8_vg4x4_fpm (w0, z0, z0, fpm0),
+ 	    svmla_za32_vg4x4_fpm (w0, z0, z0, fpm0))
+ 
+ /*
+ ** mla_w8_z0_z4:
+ **	msr	fpmr, x1
+ **	fmlall	za\.s\[w8, 0:3, vgx4\], {z0\.b - z3\.b}, {z4\.b - z7\.b}
+ **	ret
+ */
+ TEST_ZA_XN (mla_w8_z0_z4, svmfloat8x4_t,
+ 	    svmla_za32_mf8_vg4x4_fpm (w8, z0, z4, fpm0),
+ 	    svmla_za32_vg4x4_fpm (w8, z0, z4, fpm0))
+ 
+ /* Leave the assembler to check for correctness for misaligned registers.  */
+ 
+ /*
+ ** mla_w8_z0_z18:
+ **	msr	fpmr, x1
+ **	...
+ **	fmlall	za\.s\[w8, 0:3, vgx4\], {z0\.b - z3\.b}, [^\n]+
+ **	ret
+ */
+ TEST_ZA_XN (mla_w8_z0_z18, svmfloat8x4_t,
+ 	    svmla_za32_mf8_vg4x4_fpm (w8, z0, z18, fpm0),
+ 	    svmla_za32_vg4x4_fpm (w8, z0, z18, fpm0))
+ 
+ /*
+ ** mla_w8_z18_z0:
+ **	msr	fpmr, x1
+ **	...
+ **	fmlall	za\.s\[w8, 0:3, vgx4\], [^\n]+, {z0\.b - z3\.b}
+ **	ret
+ */
+ TEST_ZA_XN (mla_w8_z18_z0, svmfloat8x4_t,
+ 	    svmla_za32_mf8_vg4x4_fpm (w8, z18, z0, fpm0),
+ 	    svmla_za32_vg4x4_fpm (w8, z18, z0, fpm0))
+ 
+ /*
+ ** mla_w8_z0_z23:
+ **	msr	fpmr, x1
+ **	...
+ **	fmlall	za\.s\[w8, 0:3, vgx4\], {z0\.b - z3\.b}, [^\n]+
+ **	ret
+ */
+ TEST_ZA_XN (mla_w8_z0_z23, svmfloat8x4_t,
+ 	    svmla_za32_mf8_vg4x4_fpm (w8, z0, z23, fpm0),
+ 	    svmla_za32_vg4x4_fpm (w8, z0, z23, fpm0))
+ 
+ /*
+ ** mla_w8_z23_z0:
+ **	msr	fpmr, x1
+ **	...
+ **	fmlall	za\.s\[w8, 0:3, vgx4\], [^\n]+, {z0\.b - z3\.b}
+ **	ret
+ */
+ TEST_ZA_XN (mla_w8_z23_z0, svmfloat8x4_t,
+ 	    svmla_za32_mf8_vg4x4_fpm (w8, z23, z0, fpm0),
+ 	    svmla_za32_vg4x4_fpm (w8, z23, z0, fpm0))
+ 
+ /*
+ ** mla_w8_z4_z28:
+ **	msr	fpmr, x1
+ **	fmlall	za\.s\[w8, 0:3, vgx4\], {z4\.b - z7\.b}, {z28\.b - z31\.b}
+ **	ret
+ */
+ TEST_ZA_XN (mla_w8_z4_z28, svmfloat8x4_t,
+ 	    svmla_za32_mf8_vg4x4_fpm (w8, z4, z28, fpm0),
+ 	    svmla_za32_vg4x4_fpm (w8, z4, z28, fpm0))
+ 
+ /*
+ ** mla_w8_z28_z0:
+ **	msr	fpmr, x1
+ **	fmlall	za\.s\[w8, 0:3, vgx4\], {z28\.b - z31\.b}, {z0\.b - z3\.b}
+ **	ret
+ */
+ TEST_ZA_XN (mla_w8_z28_z0, svmfloat8x4_t,
+ 	    svmla_za32_mf8_vg4x4_fpm (w8, z28, z0, fpm0),
+ 	    svmla_za32_vg4x4_fpm (w8, z28, z0, fpm0))
+ 
+ /*
+ ** mla_w8p1_z4_z0:
+ **	add	(w8|w9|w10|w11), w8, #?1
+ **	msr	fpmr, x1
+ **	fmlall	za\.s\[\1, 0:3, vgx4\], {z4\.b - z7\.b}, {z0\.b - z3\.b}
+ **	ret
+ */
+ TEST_ZA_XN (mla_w8p1_z4_z0, svmfloat8x4_t,
+ 	    svmla_za32_mf8_vg4x4_fpm (w8 + 1, z4, z0, fpm0),
+ 	    svmla_za32_vg4x4_fpm (w8 + 1, z4, z0, fpm0))
+ 
+ /*
+ ** mla_w8p2_z4_z0:
+ **	add	(w8|w9|w10|w11), w8, #?2
+ **	msr	fpmr, x1
+ **	fmlall	za\.s\[\1, 0:3, vgx4\], {z4\.b - z7\.b}, {z0\.b - z3\.b}
+ **	ret
+ */
+ TEST_ZA_XN (mla_w8p2_z4_z0, svmfloat8x4_t,
+ 	    svmla_za32_mf8_vg4x4_fpm (w8 + 2, z4, z0, fpm0),
+ 	    svmla_za32_vg4x4_fpm (w8 + 2, z4, z0, fpm0))
+ 
+ /*
+ ** mla_w11p4_z4_z0:
+ **	msr	fpmr, x1
+ **	fmlall	za\.s\[w11, 4:7, vgx4\], {z4\.b - z7\.b}, {z0\.b - z3\.b}
+ **	ret
+ */
+ TEST_ZA_XN (mla_w11p4_z4_z0, svmfloat8x4_t,
+ 	    svmla_za32_mf8_vg4x4_fpm (w11 + 4, z4, z0, fpm0),
+ 	    svmla_za32_vg4x4_fpm (w11 + 4, z4, z0, fpm0))
+ 
+ /*
+ ** mla_w8p7_z4_z0:
+ **	add	(w8|w9|w10|w11), w8, #?7
+ **	msr	fpmr, x1
+ **	fmlall	za\.s\[\1, 0:3, vgx4\], {z4\.b - z7\.b}, {z0\.b - z3\.b}
+ **	ret
+ */
+ TEST_ZA_XN (mla_w8p7_z4_z0, svmfloat8x4_t,
+ 	    svmla_za32_mf8_vg4x4_fpm (w8 + 7, z4, z0, fpm0),
+ 	    svmla_za32_vg4x4_fpm (w8 + 7, z4, z0, fpm0))
+ 
+ /*
+ ** mla_w8p8_z4_z4:
+ **	add	(w8|w9|w10|w11), w8, #?8
+ **	msr	fpmr, x1
+ **	fmlall	za\.s\[\1, 0:3, vgx4\], {z4\.b - z7\.b}, {z4\.b - z7\.b}
+ **	ret
+ */
+ TEST_ZA_XN (mla_w8p8_z4_z4, svmfloat8x4_t,
+ 	    svmla_za32_mf8_vg4x4_fpm (w8 + 8, z4, z4, fpm0),
+ 	    svmla_za32_vg4x4_fpm (w8 + 8, z4, z4, fpm0))
+ 
+ /*
+ ** mla_w8m1_z4_z0:
+ **	sub	(w8|w9|w10|w11), w8, #?1
+ **	msr	fpmr, x1
+ **	fmlall	za\.s\[\1, 0:3, vgx4\], {z4\.b - z7\.b}, {z0\.b - z3\.b}
+ **	ret
+ */
+ TEST_ZA_XN (mla_w8m1_z4_z0, svmfloat8x4_t,
+ 	    svmla_za32_mf8_vg4x4_fpm (w8 - 1, z4, z0, fpm0),
+ 	    svmla_za32_vg4x4_fpm (w8 - 1, z4, z0, fpm0))
+ 
+ /*
+ ** mla_single_0_z1_z0:
+ **	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), #?0
+ **	fmlall	za\.s\[\1, 0:3, vgx4\], {z1\.b - z4\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (mla_single_0_z1_z0, svmfloat8x4_t, svmfloat8_t,
+ 	        svmla_single_za32_mf8_vg4x4_fpm (0, z1, z0, fpm0),
+ 	        svmla_za32_vg4x4_fpm (0, z1, z0, fpm0))
+ 
+ /*
+ ** mla_single_w0_z1_z0:
+ **	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), w0
+ **	fmlall	za\.s\[\1, 0:3, vgx4\], {z1\.b - z4\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (mla_single_w0_z1_z0, svmfloat8x4_t, svmfloat8_t,
+ 	        svmla_single_za32_mf8_vg4x4_fpm (w0, z1, z0, fpm0),
+ 	        svmla_za32_vg4x4_fpm (w0, z1, z0, fpm0))
+ 
+ /*
+ ** mla_single_w8_z1_z0:
+ **	msr	fpmr, x1
+ **	fmlall	za\.s\[w8, 0:3, vgx4\], {z1\.b - z4\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (mla_single_w8_z1_z0, svmfloat8x4_t, svmfloat8_t,
+ 	        svmla_single_za32_mf8_vg4x4_fpm (w8, z1, z0, fpm0),
+ 	        svmla_za32_vg4x4_fpm (w8, z1, z0, fpm0))
+ 
+ /*
+ ** mla_single_w8p1_z1_z0:
+ **	add	(w8|w9|w10|w11), w8, #?1
+ **	msr	fpmr, x1
+ **	fmlall	za\.s\[\1, 0:3, vgx4\], {z1\.b - z4\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (mla_single_w8p1_z1_z0, svmfloat8x4_t, svmfloat8_t,
+ 	        svmla_single_za32_mf8_vg4x4_fpm (w8 + 1, z1, z0, fpm0),
+ 	        svmla_za32_vg4x4_fpm (w8 + 1, z1, z0, fpm0))
+ 
+ /*
+ ** mla_single_w8p4_z20_z0:
+ **	msr	fpmr, x1
+ **	fmlall	za\.s\[w8, 4:7, vgx4\], {z20\.b - z23\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (mla_single_w8p4_z20_z0, svmfloat8x4_t, svmfloat8_t,
+ 	        svmla_single_za32_mf8_vg4x4_fpm (w8 + 4, z20, z0, fpm0),
+ 	        svmla_za32_vg4x4_fpm (w8 + 4, z20, z0, fpm0))
+ 
+ /*
+ ** mla_single_w8p6_z27_z0:
+ **	add	(w8|w9|w10|w11), w8, #?6
+ **	msr	fpmr, x1
+ **	fmlall	za\.s\[\1, 0:3, vgx4\], {z27\.b - z30\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (mla_single_w8p6_z27_z0, svmfloat8x4_t, svmfloat8_t,
+ 	        svmla_single_za32_mf8_vg4x4_fpm (w8 + 6, z27, z0, fpm0),
+ 	        svmla_za32_vg4x4_fpm (w8 + 6, z27, z0, fpm0))
+ 
+ /*
+ ** mla_single_w8p7_z1_z0:
+ **	add	(w8|w9|w10|w11), w8, #?7
+ **	msr	fpmr, x1
+ **	fmlall	za\.s\[\1, 0:3, vgx4\], {z1\.b - z4\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (mla_single_w8p7_z1_z0, svmfloat8x4_t, svmfloat8_t,
+ 	        svmla_single_za32_mf8_vg4x4_fpm (w8 + 7, z1, z0, fpm0),
+ 	        svmla_za32_vg4x4_fpm (w8 + 7, z1, z0, fpm0))
+ 
+ /*
+ ** mla_single_w8p8_z1_z0:
+ **	add	(w8|w9|w10|w11), w8, #?8
+ **	msr	fpmr, x1
+ **	fmlall	za\.s\[\1, 0:3, vgx4\], {z1\.b - z4\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (mla_single_w8p8_z1_z0, svmfloat8x4_t, svmfloat8_t,
+ 	        svmla_single_za32_mf8_vg4x4_fpm (w8 + 8, z1, z0, fpm0),
+ 	        svmla_za32_vg4x4_fpm (w8 + 8, z1, z0, fpm0))
+ 
+ /*
+ ** mla_single_w0m1_z1_z0:
+ **	sub	(w8|w9|w10|w11), w0, #?1
+ **	msr	fpmr, x1
+ **	fmlall	za\.s\[\1, 0:3, vgx4\], {z1\.b - z4\.b}, z0\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (mla_single_w0m1_z1_z0, svmfloat8x4_t, svmfloat8_t,
+ 	        svmla_single_za32_mf8_vg4x4_fpm (w0 - 1, z1, z0, fpm0),
+ 	        svmla_za32_vg4x4_fpm (w0 - 1, z1, z0, fpm0))
+ 
+ /*
+ ** mla_single_w8_z0_z15:
+ **	str	d15, \[sp, #?-16\]!
+ **	msr	fpmr, x1
+ **	fmlall	za\.s\[w8, 0:3, vgx4\], {z0\.b - z3\.b}, z15\.b
+ **	ldr	d15, \[sp\], #?16
+ **	ret
+ */
+ TEST_ZA_SINGLE_Z15 (mla_single_w8_z0_z15, svmfloat8x4_t, svmfloat8_t,
+ 		    svmla_single_za32_mf8_vg4x4_fpm (w8, z0, z15, fpm0),
+ 		    svmla_za32_vg4x4_fpm (w8, z0, z15, fpm0))
+ 
+ /*
+ ** mla_single_w8_z20_z16:
+ **	msr	fpmr, x1
+ **	mov	(z[0-7]).d, z16.d
+ **	fmlall	za\.s\[w8, 0:3, vgx4\], {z20\.b - z23\.b}, \1\.b
+ **	ret
+ */
+ TEST_ZA_SINGLE (mla_single_w8_z20_z16, svmfloat8x4_t, svmfloat8_t,
+ 	        svmla_single_za32_mf8_vg4x4_fpm (w8, z20, z16, fpm0),
+ 	        svmla_za32_vg4x4_fpm (w8, z20, z16, fpm0))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mopa_za16_mf8.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mopa_za16_mf8.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mopa_za16_mf8.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mopa_za16_mf8.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,36 ----
+ /* { dg-do assemble { target aarch64_asm_sme-f8f16_ok } } */
+ /* { dg-do compile { target { ! aarch64_asm_sme-f8f16_ok } } } */
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ 
+ #pragma GCC target "+sme-f8f16"
+ /*
+ ** mopa_za16_mf8_0_p0_p1_z0_z1:
+ ** 	msr	fpmr, x0
+ **	fmopa	za0\.h, p0/m, p1/m, z0\.b, z1\.b
+ **	ret
+ */
+ TEST_UNIFORM_ZA (mopa_za16_mf8_0_p0_p1_z0_z1, svmfloat8_t,
+ 		 svmopa_za16_mf8_m_fpm (0, p0, p1, z0, z1, fpm0),
+ 		 svmopa_za16_m_fpm (0, p0, p1, z0, z1, fpm0))
+ 
+ /*
+ ** mopa_za16_mf8_0_p1_p0_z1_z0:
+ ** 	msr	fpmr, x0
+ **	fmopa	za0\.h, p1/m, p0/m, z1\.b, z0\.b
+ **	ret
+ */
+ TEST_UNIFORM_ZA (mopa_za16_mf8_0_p1_p0_z1_z0, svmfloat8_t,
+ 		 svmopa_za16_mf8_m_fpm (0, p1, p0, z1, z0, fpm0),
+ 		 svmopa_za16_m_fpm (0, p1, p0, z1, z0, fpm0))
+ 
+ /*
+ ** mopa_za16_mf8_1_p0_p1_z0_z1:
+ ** 	msr	fpmr, x0
+ **	fmopa	za1\.h, p0/m, p1/m, z0\.b, z1\.b
+ **	ret
+ */
+ TEST_UNIFORM_ZA (mopa_za16_mf8_1_p0_p1_z0_z1, svmfloat8_t,
+ 		 svmopa_za16_mf8_m_fpm (1, p0, p1, z0, z1, fpm0),
+ 		 svmopa_za16_m_fpm (1, p0, p1, z0, z1, fpm0))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mopa_za32_mf8.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mopa_za32_mf8.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mopa_za32_mf8.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mopa_za32_mf8.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,36 ----
+ /* { dg-do assemble { target aarch64_asm_sme-f8f32_ok } } */
+ /* { dg-do compile { target { ! aarch64_asm_sme-f8f32_ok } } } */
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ 
+ #pragma GCC target "+sme-f8f32"
+ /*
+ ** mopa_za32_mf8_0_p0_p1_z0_z1:
+ ** 	msr	fpmr, x0
+ **	fmopa	za0\.s, p0/m, p1/m, z0\.b, z1\.b
+ **	ret
+ */
+ TEST_UNIFORM_ZA (mopa_za32_mf8_0_p0_p1_z0_z1, svmfloat8_t,
+ 		 svmopa_za32_mf8_m_fpm (0, p0, p1, z0, z1, fpm0),
+ 		 svmopa_za32_m_fpm (0, p0, p1, z0, z1, fpm0))
+ 
+ /*
+ ** mopa_za32_mf8_0_p1_p0_z1_z0:
+ ** 	msr	fpmr, x0
+ **	fmopa	za0\.s, p1/m, p0/m, z1\.b, z0\.b
+ **	ret
+ */
+ TEST_UNIFORM_ZA (mopa_za32_mf8_0_p1_p0_z1_z0, svmfloat8_t,
+ 		 svmopa_za32_mf8_m_fpm (0, p1, p0, z1, z0, fpm0),
+ 		 svmopa_za32_m_fpm (0, p1, p0, z1, z0, fpm0))
+ 
+ /*
+ ** mopa_za32_mf8_1_p0_p1_z0_z1:
+ ** 	msr	fpmr, x0
+ **	fmopa	za1\.s, p0/m, p1/m, z0\.b, z1\.b
+ **	ret
+ */
+ TEST_UNIFORM_ZA (mopa_za32_mf8_1_p0_p1_z0_z1, svmfloat8_t,
+ 		 svmopa_za32_mf8_m_fpm (1, p0, p1, z0, z1, fpm0),
+ 		 svmopa_za32_m_fpm (1, p0, p1, z0, z1, fpm0))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_hor_za8_vg2.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_hor_za8_vg2.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_hor_za8_vg2.c	Sun Dec 21 22:32:10 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_hor_za8_vg2.c	Sun Dec 28 22:32:13 2025
*************** TEST_READ_ZA_XN (read_za8_u8_z4_0_1, svu
*** 23,28 ****
--- 23,38 ----
  		 z4 = svread_hor_za8_u8_vg2 (0, 1))
  
  /*
+ ** read_za8_mf8_z4_0_1:
+ **	mov	(w1[2-5]), #?1
+ **	mova	{z4\.b - z5\.b}, za0h\.b\[\1, 0:1\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (read_za8_mf8_z4_0_1, svmfloat8x2_t,
+ 		 z4 = svread_hor_za8_mf8_vg2 (0, 1),
+ 		 z4 = svread_hor_za8_mf8_vg2 (0, 1))
+ 
+ /*
  ** read_za8_s8_z28_0_w11:
  **	mov	(w1[2-5]), w11
  **	mova	{z28\.b - z29\.b}, za0h\.b\[\1, 0:1\]
*************** TEST_READ_ZA_XN (read_za8_u8_z18_0_w15,
*** 51,56 ****
--- 61,75 ----
  		 z18 = svread_hor_za8_u8_vg2 (0, w15))
  
  /*
+ ** read_za8_mf8_z18_0_w15:
+ **	mova	{z18\.b - z19\.b}, za0h\.b\[w15, 0:1\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (read_za8_mf8_z18_0_w15, svmfloat8x2_t,
+ 		 z18 = svread_hor_za8_mf8_vg2 (0, w15),
+ 		 z18 = svread_hor_za8_mf8_vg2 (0, w15))
+ 
+ /*
  ** read_za8_s8_z23_0_w12p14:
  **	mova	{[^\n]+}, za0h\.b\[w12, 14:15\]
  **	mov	[^\n]+
*************** TEST_READ_ZA_XN (read_za8_u8_z4_0_w12p1,
*** 72,77 ****
--- 91,106 ----
  		 z4 = svread_hor_za8_u8_vg2 (0, w12 + 1))
  
  /*
+ ** read_za8_mf8_z4_0_w12p1:
+ **	add	(w[0-9]+), w12, #?1
+ **	mova	{z4\.b - z5\.b}, za0h\.b\[\1, 0:1\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (read_za8_mf8_z4_0_w12p1, svmfloat8x2_t,
+ 		 z4 = svread_hor_za8_mf8_vg2 (0, w12 + 1),
+ 		 z4 = svread_hor_za8_mf8_vg2 (0, w12 + 1))
+ 
+ /*
  ** read_za8_s8_z28_0_w12p2:
  **	mova	{z28\.b - z29\.b}, za0h\.b\[w12, 2:3\]
  **	ret
*************** TEST_READ_ZA_XN (read_za8_u8_z0_0_w15p3,
*** 91,96 ****
--- 120,135 ----
  		 z0 = svread_hor_za8_u8_vg2 (0, w15 + 3))
  
  /*
+ ** read_za8_mf8_z0_0_w15p3:
+ **	add	(w[0-9]+), w15, #?3
+ **	mova	{z0\.b - z1\.b}, za0h\.b\[\1, 0:1\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (read_za8_mf8_z0_0_w15p3, svmfloat8x2_t,
+ 		 z0 = svread_hor_za8_mf8_vg2 (0, w15 + 3),
+ 		 z0 = svread_hor_za8_mf8_vg2 (0, w15 + 3))
+ 
+ /*
  ** read_za8_u8_z4_0_w15p12:
  **	mova	{z4\.b - z5\.b}, za0h\.b\[w15, 12:13\]
  **	ret
*************** TEST_READ_ZA_XN (read_za8_u8_z4_0_w15p12
*** 100,105 ****
--- 139,153 ----
  		 z4 = svread_hor_za8_u8_vg2 (0, w15 + 12))
  
  /*
+ ** read_za8_mf8_z4_0_w15p12:
+ **	mova	{z4\.b - z5\.b}, za0h\.b\[w15, 12:13\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (read_za8_mf8_z4_0_w15p12, svmfloat8x2_t,
+ 		 z4 = svread_hor_za8_mf8_vg2 (0, w15 + 12),
+ 		 z4 = svread_hor_za8_mf8_vg2 (0, w15 + 12))
+ 
+ /*
  ** read_za8_u8_z28_0_w12p15:
  **	add	(w[0-9]+), w12, #?15
  **	mova	{z28\.b - z29\.b}, za0h\.b\[\1, 0:1\]
*************** TEST_READ_ZA_XN (read_za8_u8_z28_0_w12p1
*** 110,115 ****
--- 158,173 ----
  		 z28 = svread_hor_za8_u8_vg2 (0, w12 + 15))
  
  /*
+ ** read_za8_mf8_z28_0_w12p15:
+ **	add	(w[0-9]+), w12, #?15
+ **	mova	{z28\.b - z29\.b}, za0h\.b\[\1, 0:1\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (read_za8_mf8_z28_0_w12p15, svmfloat8x2_t,
+ 		 z28 = svread_hor_za8_mf8_vg2 (0, w12 + 15),
+ 		 z28 = svread_hor_za8_mf8_vg2 (0, w12 + 15))
+ 
+ /*
  ** read_za8_s8_z0_0_w15p16:
  **	add	(w[0-9]+), w15, #?16
  **	mova	{z0\.b - z1\.b}, za0h\.b\[\1, 0:1\]
*************** TEST_READ_ZA_XN (read_za8_u8_z4_0_w12m1,
*** 130,135 ****
--- 188,203 ----
  		 z4 = svread_hor_za8_u8_vg2 (0, w12 - 1))
  
  /*
+ ** read_za8_mf8_z4_0_w12m1:
+ **	sub	(w[0-9]+), w12, #?1
+ **	mova	{z4\.b - z5\.b}, za0h\.b\[\1, 0:1\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (read_za8_mf8_z4_0_w12m1, svmfloat8x2_t,
+ 		 z4 = svread_hor_za8_mf8_vg2 (0, w12 - 1),
+ 		 z4 = svread_hor_za8_mf8_vg2 (0, w12 - 1))
+ 
+ /*
  ** read_za8_u8_z18_0_w16:
  **	mov	(w1[2-5]), w16
  **	mova	{z18\.b - z19\.b}, za0h\.b\[\1, 0:1\]
*************** TEST_READ_ZA_XN (read_za8_u8_z4_0_w12m1,
*** 138,140 ****
--- 206,218 ----
  TEST_READ_ZA_XN (read_za8_u8_z18_0_w16, svuint8x2_t,
  		 z18 = svread_hor_za8_u8_vg2 (0, w16),
  		 z18 = svread_hor_za8_u8_vg2 (0, w16))
+ 
+ /*
+ ** read_za8_mf8_z18_0_w16:
+ **	mov	(w1[2-5]), w16
+ **	mova	{z18\.b - z19\.b}, za0h\.b\[\1, 0:1\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (read_za8_mf8_z18_0_w16, svmfloat8x2_t,
+ 		 z18 = svread_hor_za8_mf8_vg2 (0, w16),
+ 		 z18 = svread_hor_za8_mf8_vg2 (0, w16))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_hor_za8_vg4.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_hor_za8_vg4.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_hor_za8_vg4.c	Sun Dec 21 22:32:10 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_hor_za8_vg4.c	Sun Dec 28 22:32:13 2025
*************** TEST_READ_ZA_XN (read_za8_u8_z4_0_1, svu
*** 23,28 ****
--- 23,38 ----
  		 z4 = svread_hor_za8_u8_vg4 (0, 1))
  
  /*
+ ** read_za8_mf8_z4_0_1:
+ **	mov	(w1[2-5]), #?1
+ **	mova	{z4\.b - z7\.b}, za0h\.b\[\1, 0:3\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (read_za8_mf8_z4_0_1, svmfloat8x4_t,
+ 		 z4 = svread_hor_za8_mf8_vg4 (0, 1),
+ 		 z4 = svread_hor_za8_mf8_vg4 (0, 1))
+ 
+ /*
  ** read_za8_s8_z28_0_w11:
  **	mov	(w1[2-5]), w11
  **	mova	{z28\.b - z31\.b}, za0h\.b\[\1, 0:3\]
*************** TEST_READ_ZA_XN (read_za8_u8_z18_0_w15,
*** 55,60 ****
--- 65,83 ----
  		 z18 = svread_hor_za8_u8_vg4 (0, w15))
  
  /*
+ ** read_za8_mf8_z18_0_w15:
+ **	mova	{[^\n]+}, za0h\.b\[w15, 0:3\]
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_READ_ZA_XN (read_za8_mf8_z18_0_w15, svmfloat8x4_t,
+ 		 z18 = svread_hor_za8_mf8_vg4 (0, w15),
+ 		 z18 = svread_hor_za8_mf8_vg4 (0, w15))
+ 
+ /*
  ** read_za8_s8_z23_0_w12p12:
  **	mova	{[^\n]+}, za0h\.b\[w12, 12:15\]
  **	mov	[^\n]+
*************** TEST_READ_ZA_XN (read_za8_u8_z4_0_w12p1,
*** 78,83 ****
--- 101,116 ----
  		 z4 = svread_hor_za8_u8_vg4 (0, w12 + 1))
  
  /*
+ ** read_za8_mf8_z4_0_w12p1:
+ **	add	(w[0-9]+), w12, #?1
+ **	mova	{z4\.b - z7\.b}, za0h\.b\[\1, 0:3\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (read_za8_mf8_z4_0_w12p1, svmfloat8x4_t,
+ 		 z4 = svread_hor_za8_mf8_vg4 (0, w12 + 1),
+ 		 z4 = svread_hor_za8_mf8_vg4 (0, w12 + 1))
+ 
+ /*
  ** read_za8_s8_z28_0_w12p2:
  **	add	(w[0-9]+), w12, #?2
  **	mova	{z28\.b - z31\.b}, za0h\.b\[\1, 0:3\]
*************** TEST_READ_ZA_XN (read_za8_u8_z0_0_w15p3,
*** 98,103 ****
--- 131,146 ----
  		 z0 = svread_hor_za8_u8_vg4 (0, w15 + 3))
  
  /*
+ ** read_za8_mf8_z0_0_w15p3:
+ **	add	(w[0-9]+), w15, #?3
+ **	mova	{z0\.b - z3\.b}, za0h\.b\[\1, 0:3\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (read_za8_mf8_z0_0_w15p3, svmfloat8x4_t,
+ 		 z0 = svread_hor_za8_mf8_vg4 (0, w15 + 3),
+ 		 z0 = svread_hor_za8_mf8_vg4 (0, w15 + 3))
+ 
+ /*
  ** read_za8_u8_z0_0_w12p4:
  **	mova	{z0\.b - z3\.b}, za0h\.b\[w12, 4:7\]
  **	ret
*************** TEST_READ_ZA_XN (read_za8_u8_z0_0_w12p4,
*** 107,112 ****
--- 150,164 ----
  		 z0 = svread_hor_za8_u8_vg4 (0, w12 + 4))
  
  /*
+ ** read_za8_mf8_z0_0_w12p4:
+ **	mova	{z0\.b - z3\.b}, za0h\.b\[w12, 4:7\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (read_za8_mf8_z0_0_w12p4, svmfloat8x4_t,
+ 		 z0 = svread_hor_za8_mf8_vg4 (0, w12 + 4),
+ 		 z0 = svread_hor_za8_mf8_vg4 (0, w12 + 4))
+ 
+ /*
  ** read_za8_u8_z4_0_w15p12:
  **	mova	{z4\.b - z7\.b}, za0h\.b\[w15, 12:15\]
  **	ret
*************** TEST_READ_ZA_XN (read_za8_u8_z4_0_w15p12
*** 116,121 ****
--- 168,182 ----
  		 z4 = svread_hor_za8_u8_vg4 (0, w15 + 12))
  
  /*
+ ** read_za8_mf8_z4_0_w15p12:
+ **	mova	{z4\.b - z7\.b}, za0h\.b\[w15, 12:15\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (read_za8_mf8_z4_0_w15p12, svmfloat8x4_t,
+ 		 z4 = svread_hor_za8_mf8_vg4 (0, w15 + 12),
+ 		 z4 = svread_hor_za8_mf8_vg4 (0, w15 + 12))
+ 
+ /*
  ** read_za8_u8_z28_0_w12p14:
  **	add	(w[0-9]+), w12, #?14
  **	mova	{z28\.b - z31\.b}, za0h\.b\[\1, 0:3\]
*************** TEST_READ_ZA_XN (read_za8_u8_z28_0_w12p1
*** 126,131 ****
--- 187,202 ----
  		 z28 = svread_hor_za8_u8_vg4 (0, w12 + 14))
  
  /*
+ ** read_za8_mf8_z28_0_w12p14:
+ **	add	(w[0-9]+), w12, #?14
+ **	mova	{z28\.b - z31\.b}, za0h\.b\[\1, 0:3\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (read_za8_mf8_z28_0_w12p14, svmfloat8x4_t,
+ 		 z28 = svread_hor_za8_mf8_vg4 (0, w12 + 14),
+ 		 z28 = svread_hor_za8_mf8_vg4 (0, w12 + 14))
+ 
+ /*
  ** read_za8_s8_z0_0_w15p16:
  **	add	(w[0-9]+), w15, #?16
  **	mova	{z0\.b - z3\.b}, za0h\.b\[\1, 0:3\]
*************** TEST_READ_ZA_XN (read_za8_u8_z4_0_w12m1,
*** 146,151 ****
--- 217,232 ----
  		 z4 = svread_hor_za8_u8_vg4 (0, w12 - 1))
  
  /*
+ ** read_za8_mf8_z4_0_w12m1:
+ **	sub	(w[0-9]+), w12, #?1
+ **	mova	{z4\.b - z7\.b}, za0h\.b\[\1, 0:3\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (read_za8_mf8_z4_0_w12m1, svmfloat8x4_t,
+ 		 z4 = svread_hor_za8_mf8_vg4 (0, w12 - 1),
+ 		 z4 = svread_hor_za8_mf8_vg4 (0, w12 - 1))
+ 
+ /*
  ** read_za8_u8_z28_0_w16:
  **	mov	(w1[2-5]), w16
  **	mova	{z28\.b - z31\.b}, za0h\.b\[\1, 0:3\]
*************** TEST_READ_ZA_XN (read_za8_u8_z4_0_w12m1,
*** 154,156 ****
--- 235,247 ----
  TEST_READ_ZA_XN (read_za8_u8_z28_0_w16, svuint8x4_t,
  		 z28 = svread_hor_za8_u8_vg4 (0, w16),
  		 z28 = svread_hor_za8_u8_vg4 (0, w16))
+ 
+ /*
+ ** read_za8_u8_z28_0_w16:
+ **	mov	(w1[2-5]), w16
+ **	mova	{z28\.b - z31\.b}, za0h\.b\[\1, 0:3\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (read_za8_mf8_z28_0_w16, svmfloat8x4_t,
+ 		 z28 = svread_hor_za8_mf8_vg4 (0, w16),
+ 		 z28 = svread_hor_za8_mf8_vg4 (0, w16))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_ver_za8_vg2.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_ver_za8_vg2.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_ver_za8_vg2.c	Sun Dec 21 22:32:10 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_ver_za8_vg2.c	Sun Dec 28 22:32:13 2025
*************** TEST_READ_ZA_XN (read_za8_u8_z4_0_1, svu
*** 23,28 ****
--- 23,38 ----
  		 z4 = svread_ver_za8_u8_vg2 (0, 1))
  
  /*
+ ** read_za8_mf8_z4_0_1:
+ **	mov	(w1[2-5]), #?1
+ **	mova	{z4\.b - z5\.b}, za0v\.b\[\1, 0:1\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (read_za8_mf8_z4_0_1, svmfloat8x2_t,
+ 		 z4 = svread_ver_za8_mf8_vg2 (0, 1),
+ 		 z4 = svread_ver_za8_mf8_vg2 (0, 1))
+ 
+ /*
  ** read_za8_s8_z28_0_w11:
  **	mov	(w1[2-5]), w11
  **	mova	{z28\.b - z29\.b}, za0v\.b\[\1, 0:1\]
*************** TEST_READ_ZA_XN (read_za8_u8_z18_0_w15,
*** 51,56 ****
--- 61,75 ----
  		 z18 = svread_ver_za8_u8_vg2 (0, w15))
  
  /*
+ ** read_za8_mf8_z18_0_w15:
+ **	mova	{z18\.b - z19\.b}, za0v\.b\[w15, 0:1\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (read_za8_mf8_z18_0_w15, svmfloat8x2_t,
+ 		 z18 = svread_ver_za8_mf8_vg2 (0, w15),
+ 		 z18 = svread_ver_za8_mf8_vg2 (0, w15))
+ 
+ /*
  ** read_za8_s8_z23_0_w12p14:
  **	mova	{[^\n]+}, za0v\.b\[w12, 14:15\]
  **	mov	[^\n]+
*************** TEST_READ_ZA_XN (read_za8_u8_z4_0_w12p1,
*** 72,77 ****
--- 91,106 ----
  		 z4 = svread_ver_za8_u8_vg2 (0, w12 + 1))
  
  /*
+ ** read_za8_mf8_z4_0_w12p1:
+ **	add	(w[0-9]+), w12, #?1
+ **	mova	{z4\.b - z5\.b}, za0v\.b\[\1, 0:1\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (read_za8_mf8_z4_0_w12p1, svmfloat8x2_t,
+ 		 z4 = svread_ver_za8_mf8_vg2 (0, w12 + 1),
+ 		 z4 = svread_ver_za8_mf8_vg2 (0, w12 + 1))
+ 
+ /*
  ** read_za8_s8_z28_0_w12p2:
  **	mova	{z28\.b - z29\.b}, za0v\.b\[w12, 2:3\]
  **	ret
*************** TEST_READ_ZA_XN (read_za8_u8_z0_0_w15p3,
*** 91,96 ****
--- 120,135 ----
  		 z0 = svread_ver_za8_u8_vg2 (0, w15 + 3))
  
  /*
+ ** read_za8_mf8_z0_0_w15p3:
+ **	add	(w[0-9]+), w15, #?3
+ **	mova	{z0\.b - z1\.b}, za0v\.b\[\1, 0:1\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (read_za8_mf8_z0_0_w15p3, svmfloat8x2_t,
+ 		 z0 = svread_ver_za8_mf8_vg2 (0, w15 + 3),
+ 		 z0 = svread_ver_za8_mf8_vg2 (0, w15 + 3))
+ 
+ /*
  ** read_za8_u8_z4_0_w15p12:
  **	mova	{z4\.b - z5\.b}, za0v\.b\[w15, 12:13\]
  **	ret
*************** TEST_READ_ZA_XN (read_za8_u8_z4_0_w15p12
*** 100,105 ****
--- 139,153 ----
  		 z4 = svread_ver_za8_u8_vg2 (0, w15 + 12))
  
  /*
+ ** read_za8_mf8_z4_0_w15p12:
+ **	mova	{z4\.b - z5\.b}, za0v\.b\[w15, 12:13\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (read_za8_mf8_z4_0_w15p12, svmfloat8x2_t,
+ 		 z4 = svread_ver_za8_mf8_vg2 (0, w15 + 12),
+ 		 z4 = svread_ver_za8_mf8_vg2 (0, w15 + 12))
+ 
+ /*
  ** read_za8_u8_z28_0_w12p15:
  **	add	(w[0-9]+), w12, #?15
  **	mova	{z28\.b - z29\.b}, za0v\.b\[\1, 0:1\]
*************** TEST_READ_ZA_XN (read_za8_u8_z28_0_w12p1
*** 110,115 ****
--- 158,173 ----
  		 z28 = svread_ver_za8_u8_vg2 (0, w12 + 15))
  
  /*
+ ** read_za8_mf8_z28_0_w12p15:
+ **	add	(w[0-9]+), w12, #?15
+ **	mova	{z28\.b - z29\.b}, za0v\.b\[\1, 0:1\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (read_za8_mf8_z28_0_w12p15, svmfloat8x2_t,
+ 		 z28 = svread_ver_za8_mf8_vg2 (0, w12 + 15),
+ 		 z28 = svread_ver_za8_mf8_vg2 (0, w12 + 15))
+ 
+ /*
  ** read_za8_s8_z0_0_w15p16:
  **	add	(w[0-9]+), w15, #?16
  **	mova	{z0\.b - z1\.b}, za0v\.b\[\1, 0:1\]
*************** TEST_READ_ZA_XN (read_za8_u8_z4_0_w12m1,
*** 130,135 ****
--- 188,203 ----
  		 z4 = svread_ver_za8_u8_vg2 (0, w12 - 1))
  
  /*
+ ** read_za8_mf8_z4_0_w12m1:
+ **	sub	(w[0-9]+), w12, #?1
+ **	mova	{z4\.b - z5\.b}, za0v\.b\[\1, 0:1\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (read_za8_mf8_z4_0_w12m1, svmfloat8x2_t,
+ 		 z4 = svread_ver_za8_mf8_vg2 (0, w12 - 1),
+ 		 z4 = svread_ver_za8_mf8_vg2 (0, w12 - 1))
+ 
+ /*
  ** read_za8_u8_z18_0_w16:
  **	mov	(w1[2-5]), w16
  **	mova	{z18\.b - z19\.b}, za0v\.b\[\1, 0:1\]
*************** TEST_READ_ZA_XN (read_za8_u8_z4_0_w12m1,
*** 138,140 ****
--- 206,218 ----
  TEST_READ_ZA_XN (read_za8_u8_z18_0_w16, svuint8x2_t,
  		 z18 = svread_ver_za8_u8_vg2 (0, w16),
  		 z18 = svread_ver_za8_u8_vg2 (0, w16))
+ 
+ /*
+ ** read_za8_mf8_z18_0_w16:
+ **	mov	(w1[2-5]), w16
+ **	mova	{z18\.b - z19\.b}, za0v\.b\[\1, 0:1\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (read_za8_mf8_z18_0_w16, svmfloat8x2_t,
+ 		 z18 = svread_ver_za8_mf8_vg2 (0, w16),
+ 		 z18 = svread_ver_za8_mf8_vg2 (0, w16))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_ver_za8_vg4.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_ver_za8_vg4.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_ver_za8_vg4.c	Sun Dec 21 22:32:10 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_ver_za8_vg4.c	Sun Dec 28 22:32:13 2025
*************** TEST_READ_ZA_XN (read_za8_u8_z4_0_1, svu
*** 23,28 ****
--- 23,38 ----
  		 z4 = svread_ver_za8_u8_vg4 (0, 1))
  
  /*
+ ** read_za8_mf8_z4_0_1:
+ **	mov	(w1[2-5]), #?1
+ **	mova	{z4\.b - z7\.b}, za0v\.b\[\1, 0:3\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (read_za8_mf8_z4_0_1, svmfloat8x4_t,
+ 		 z4 = svread_ver_za8_mf8_vg4 (0, 1),
+ 		 z4 = svread_ver_za8_mf8_vg4 (0, 1))
+ 
+ /*
  ** read_za8_s8_z28_0_w11:
  **	mov	(w1[2-5]), w11
  **	mova	{z28\.b - z31\.b}, za0v\.b\[\1, 0:3\]
*************** TEST_READ_ZA_XN (read_za8_u8_z18_0_w15,
*** 55,60 ****
--- 65,83 ----
  		 z18 = svread_ver_za8_u8_vg4 (0, w15))
  
  /*
+ ** read_za8_mf8_z18_0_w15:
+ **	mova	{[^\n]+}, za0v\.b\[w15, 0:3\]
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_READ_ZA_XN (read_za8_mf8_z18_0_w15, svmfloat8x4_t,
+ 		 z18 = svread_ver_za8_mf8_vg4 (0, w15),
+ 		 z18 = svread_ver_za8_mf8_vg4 (0, w15))
+ 
+ /*
  ** read_za8_s8_z23_0_w12p12:
  **	mova	{[^\n]+}, za0v\.b\[w12, 12:15\]
  **	mov	[^\n]+
*************** TEST_READ_ZA_XN (read_za8_u8_z4_0_w12p1,
*** 78,83 ****
--- 101,116 ----
  		 z4 = svread_ver_za8_u8_vg4 (0, w12 + 1))
  
  /*
+ ** read_za8_mf8_z4_0_w12p1:
+ **	add	(w[0-9]+), w12, #?1
+ **	mova	{z4\.b - z7\.b}, za0v\.b\[\1, 0:3\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (read_za8_mf8_z4_0_w12p1, svmfloat8x4_t,
+ 		 z4 = svread_ver_za8_mf8_vg4 (0, w12 + 1),
+ 		 z4 = svread_ver_za8_mf8_vg4 (0, w12 + 1))
+ 
+ /*
  ** read_za8_s8_z28_0_w12p2:
  **	add	(w[0-9]+), w12, #?2
  **	mova	{z28\.b - z31\.b}, za0v\.b\[\1, 0:3\]
*************** TEST_READ_ZA_XN (read_za8_u8_z0_0_w15p3,
*** 98,103 ****
--- 131,146 ----
  		 z0 = svread_ver_za8_u8_vg4 (0, w15 + 3))
  
  /*
+ ** read_za8_mf8_z0_0_w15p3:
+ **	add	(w[0-9]+), w15, #?3
+ **	mova	{z0\.b - z3\.b}, za0v\.b\[\1, 0:3\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (read_za8_mf8_z0_0_w15p3, svmfloat8x4_t,
+ 		 z0 = svread_ver_za8_mf8_vg4 (0, w15 + 3),
+ 		 z0 = svread_ver_za8_mf8_vg4 (0, w15 + 3))
+ 
+ /*
  ** read_za8_u8_z0_0_w12p4:
  **	mova	{z0\.b - z3\.b}, za0v\.b\[w12, 4:7\]
  **	ret
*************** TEST_READ_ZA_XN (read_za8_u8_z0_0_w12p4,
*** 107,112 ****
--- 150,164 ----
  		 z0 = svread_ver_za8_u8_vg4 (0, w12 + 4))
  
  /*
+ ** read_za8_mf8_z0_0_w12p4:
+ **	mova	{z0\.b - z3\.b}, za0v\.b\[w12, 4:7\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (read_za8_mf8_z0_0_w12p4, svmfloat8x4_t,
+ 		 z0 = svread_ver_za8_mf8_vg4 (0, w12 + 4),
+ 		 z0 = svread_ver_za8_mf8_vg4 (0, w12 + 4))
+ 
+ /*
  ** read_za8_u8_z4_0_w15p12:
  **	mova	{z4\.b - z7\.b}, za0v\.b\[w15, 12:15\]
  **	ret
*************** TEST_READ_ZA_XN (read_za8_u8_z4_0_w15p12
*** 116,121 ****
--- 168,182 ----
  		 z4 = svread_ver_za8_u8_vg4 (0, w15 + 12))
  
  /*
+ ** read_za8_mf8_z4_0_w15p12:
+ **	mova	{z4\.b - z7\.b}, za0v\.b\[w15, 12:15\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (read_za8_mf8_z4_0_w15p12, svmfloat8x4_t,
+ 		 z4 = svread_ver_za8_mf8_vg4 (0, w15 + 12),
+ 		 z4 = svread_ver_za8_mf8_vg4 (0, w15 + 12))
+ 
+ /*
  ** read_za8_u8_z28_0_w12p14:
  **	add	(w[0-9]+), w12, #?14
  **	mova	{z28\.b - z31\.b}, za0v\.b\[\1, 0:3\]
*************** TEST_READ_ZA_XN (read_za8_u8_z28_0_w12p1
*** 126,131 ****
--- 187,202 ----
  		 z28 = svread_ver_za8_u8_vg4 (0, w12 + 14))
  
  /*
+ ** read_za8_mf8_z28_0_w12p14:
+ **	add	(w[0-9]+), w12, #?14
+ **	mova	{z28\.b - z31\.b}, za0v\.b\[\1, 0:3\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (read_za8_mf8_z28_0_w12p14, svmfloat8x4_t,
+ 		 z28 = svread_ver_za8_mf8_vg4 (0, w12 + 14),
+ 		 z28 = svread_ver_za8_mf8_vg4 (0, w12 + 14))
+ 
+ /*
  ** read_za8_s8_z0_0_w15p16:
  **	add	(w[0-9]+), w15, #?16
  **	mova	{z0\.b - z3\.b}, za0v\.b\[\1, 0:3\]
*************** TEST_READ_ZA_XN (read_za8_u8_z4_0_w12m1,
*** 146,151 ****
--- 217,232 ----
  		 z4 = svread_ver_za8_u8_vg4 (0, w12 - 1))
  
  /*
+ ** read_za8_mf8_z4_0_w12m1:
+ **	sub	(w[0-9]+), w12, #?1
+ **	mova	{z4\.b - z7\.b}, za0v\.b\[\1, 0:3\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (read_za8_mf8_z4_0_w12m1, svmfloat8x4_t,
+ 		 z4 = svread_ver_za8_mf8_vg4 (0, w12 - 1),
+ 		 z4 = svread_ver_za8_mf8_vg4 (0, w12 - 1))
+ 
+ /*
  ** read_za8_u8_z28_0_w16:
  **	mov	(w1[2-5]), w16
  **	mova	{z28\.b - z31\.b}, za0v\.b\[\1, 0:3\]
*************** TEST_READ_ZA_XN (read_za8_u8_z4_0_w12m1,
*** 154,156 ****
--- 235,247 ----
  TEST_READ_ZA_XN (read_za8_u8_z28_0_w16, svuint8x4_t,
  		 z28 = svread_ver_za8_u8_vg4 (0, w16),
  		 z28 = svread_ver_za8_u8_vg4 (0, w16))
+ 
+ /*
+ ** read_za8_mf8_z28_0_w16:
+ **	mov	(w1[2-5]), w16
+ **	mova	{z28\.b - z31\.b}, za0v\.b\[\1, 0:3\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (read_za8_mf8_z28_0_w16, svmfloat8x4_t,
+ 		 z28 = svread_ver_za8_mf8_vg4 (0, w16),
+ 		 z28 = svread_ver_za8_mf8_vg4 (0, w16))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_za8_vg1x2.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_za8_vg1x2.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_za8_vg1x2.c	Sun Dec 21 22:32:10 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_za8_vg1x2.c	Sun Dec 28 22:32:13 2025
*************** TEST_READ_ZA_XN (read_w7_z0, svuint8x2_t
*** 33,38 ****
--- 33,48 ----
  		 z0 = svread_za8_u8_vg1x2 (w7))
  
  /*
+ ** read_mf8_w7_z0:
+ **	mov	(w8|w9|w10|w11), w7
+ **	mova	{z0\.d - z1\.d}, za\.d\[\1, 0, vgx2\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (read_mf8_w7_z0, svmfloat8x2_t,
+ 		 z0 = svread_za8_mf8_vg1x2 (w7),
+ 		 z0 = svread_za8_mf8_vg1x2 (w7))
+ 
+ /*
  ** read_w8_z0:
  **	mova	{z0\.d - z1\.d}, za\.d\[w8, 0, vgx2\]
  **	ret
*************** TEST_READ_ZA_XN (read_w12_z0, svuint8x2_
*** 62,67 ****
--- 72,87 ----
  		 z0 = svread_za8_u8_vg1x2 (w12))
  
  /*
+ ** read_mf8_w12_z0:
+ **	mov	(w8|w9|w10|w11), w12
+ **	mova	{z0\.d - z1\.d}, za\.d\[\1, 0, vgx2\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (read_mf8_w12_z0, svmfloat8x2_t,
+ 		 z0 = svread_za8_mf8_vg1x2 (w12),
+ 		 z0 = svread_za8_mf8_vg1x2 (w12))
+ 
+ /*
  ** read_w8p7_z0:
  **	mova	{z0\.d - z1\.d}, za\.d\[w8, 7, vgx2\]
  **	ret
*************** TEST_READ_ZA_XN (read_w8m1_z0, svuint8x2
*** 91,96 ****
--- 111,126 ----
  		 z0 = svread_za8_u8_vg1x2 (w8 - 1))
  
  /*
+ ** read_mf8_w8m1_z0:
+ **	sub	(w8|w9|w10|w11), w8, #?1
+ **	mova	{z0\.d - z1\.d}, za\.d\[\1, 0, vgx2\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (read_mf8_w8m1_z0, svmfloat8x2_t,
+ 		 z0 = svread_za8_mf8_vg1x2 (w8 - 1),
+ 		 z0 = svread_za8_mf8_vg1x2 (w8 - 1))
+ 
+ /*
  ** read_w8_z18:
  **	mova	{z18\.d - z19\.d}, za\.d\[w8, 0, vgx2\]
  **	ret
*************** TEST_READ_ZA_XN (read_w8_z18, svuint8x2_
*** 99,104 ****
--- 129,143 ----
  		 z18 = svread_za8_u8_vg1x2 (w8),
  		 z18 = svread_za8_u8_vg1x2 (w8))
  
+ /*
+ ** read_mf8_w8_z18:
+ **	mova	{z18\.d - z19\.d}, za\.d\[w8, 0, vgx2\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (read_mf8_w8_z18, svmfloat8x2_t,
+ 		 z18 = svread_za8_mf8_vg1x2 (w8),
+ 		 z18 = svread_za8_mf8_vg1x2 (w8))
+ 
  /* Leave the assembler to check for correctness for misaligned registers.  */
  
  /*
*************** TEST_READ_ZA_XN (read_w8_z23, svint8x2_t
*** 120,122 ****
--- 159,170 ----
  TEST_READ_ZA_XN (read_w8_z28, svuint8x2_t,
  		 z28 = svread_za8_u8_vg1x2 (w8),
  		 z28 = svread_za8_u8_vg1x2 (w8))
+ 
+ /*
+ ** read_mf8_w8_z28:
+ **	mova	{z28\.d - z29\.d}, za\.d\[w8, 0, vgx2\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (read_mf8_w8_z28, svmfloat8x2_t,
+ 		 z28 = svread_za8_mf8_vg1x2 (w8),
+ 		 z28 = svread_za8_mf8_vg1x2 (w8))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_za8_vg1x4.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_za8_vg1x4.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_za8_vg1x4.c	Sun Dec 21 22:32:10 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/read_za8_vg1x4.c	Sun Dec 28 22:32:13 2025
*************** TEST_READ_ZA_XN (read_w0_z0, svuint8x4_t
*** 23,28 ****
--- 23,38 ----
  		 z0 = svread_za8_u8_vg1x4 (w0))
  
  /*
+ ** read_mf8_w0_z0:
+ **	mov	(w8|w9|w10|w11), w0
+ **	mova	{z0\.d - z3\.d}, za\.d\[\1, 0, vgx4\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (read_mf8_w0_z0, svmfloat8x4_t,
+ 		 z0 = svread_za8_mf8_vg1x4 (w0),
+ 		 z0 = svread_za8_mf8_vg1x4 (w0))
+ 
+ /*
  ** read_w7_z0:
  **	mov	(w8|w9|w10|w11), w7
  **	mova	{z0\.d - z3\.d}, za\.d\[\1, 0, vgx4\]
*************** TEST_READ_ZA_XN (read_w11_z0, svuint8x4_
*** 50,55 ****
--- 60,73 ----
  		 z0 = svread_za8_u8_vg1x4 (w11),
  		 z0 = svread_za8_u8_vg1x4 (w11))
  
+ /*
+ ** read_mf8_w11_z0:
+ **	mova	{z0\.d - z3\.d}, za\.d\[w11, 0, vgx4\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (read_mf8_w11_z0, svmfloat8x4_t,
+ 		 z0 = svread_za8_mf8_vg1x4 (w11),
+ 		 z0 = svread_za8_mf8_vg1x4 (w11))
  
  /*
  ** read_w12_z0:
*************** TEST_READ_ZA_XN (read_w8p8_z0, svuint8x4
*** 81,86 ****
--- 99,114 ----
  		 z0 = svread_za8_u8_vg1x4 (w8 + 8))
  
  /*
+ ** read_mf8_w8p8_z0:
+ **	add	(w8|w9|w10|w11), w8, #?8
+ **	mova	{z0\.d - z3\.d}, za\.d\[\1, 0, vgx4\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (read_mf8_w8p8_z0, svmfloat8x4_t,
+ 		 z0 = svread_za8_mf8_vg1x4 (w8 + 8),
+ 		 z0 = svread_za8_mf8_vg1x4 (w8 + 8))
+ 
+ /*
  ** read_w8m1_z0:
  **	sub	(w8|w9|w10|w11), w8, #?1
  **	mova	{z0\.d - z3\.d}, za\.d\[\1, 0, vgx4\]
*************** TEST_READ_ZA_XN (read_w8_z18, svuint8x4_
*** 115,120 ****
--- 143,161 ----
  		 z18 = svread_za8_u8_vg1x4 (w8))
  
  /*
+ ** read_mf8_w8_z18:
+ **	mova	[^\n]+, za\.d\[w8, 0, vgx4\]
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_READ_ZA_XN (read_mf8_w8_z18, svmfloat8x4_t,
+ 		 z18 = svread_za8_mf8_vg1x4 (w8),
+ 		 z18 = svread_za8_mf8_vg1x4 (w8))
+ 
+ /*
  ** read_w8_z23:
  **	mova	[^\n]+, za\.d\[w8, 0, vgx4\]
  **	mov	[^\n]+
*************** TEST_READ_ZA_XN (read_w8_z23, svuint8x4_
*** 128,133 ****
--- 169,187 ----
  		 z23 = svread_za8_u8_vg1x4 (w8))
  
  /*
+ ** read_mf8_w8_z23:
+ **	mova	[^\n]+, za\.d\[w8, 0, vgx4\]
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_READ_ZA_XN (read_mf8_w8_z23, svmfloat8x4_t,
+ 		 z23 = svread_za8_mf8_vg1x4 (w8),
+ 		 z23 = svread_za8_mf8_vg1x4 (w8))
+ 
+ /*
  ** read_w8_z28:
  **	mova	{z28\.d - z31\.d}, za\.d\[w8, 0, vgx4\]
  **	ret
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_hor_za128.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_hor_za128.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_hor_za128.c	Sun Dec 21 22:32:10 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_hor_za128.c	Sun Dec 28 22:32:13 2025
*************** TEST_READ_ZA (readz_za128_u8_0_w0, svuin
*** 87,92 ****
--- 87,102 ----
  	      z0 = svreadz_hor_za128_u8 (0, w0))
  
  /*
+ ** readz_za128_mf8_0_w0:
+ **	mov	(w1[2-5]), w0
+ **	movaz	z0\.q, za0h\.q\[\1, 0\]
+ **	ret
+ */
+ TEST_READ_ZA (readz_za128_mf8_0_w0, svmfloat8_t,
+ 	      z0 = svreadz_hor_za128_mf8 (0, w0),
+ 	      z0 = svreadz_hor_za128_mf8 (0, w0))
+ 
+ /*
  ** readz_za128_s16_0_w0:
  **	mov	(w1[2-5]), w0
  **	movaz	z0\.q, za0h\.q\[\1, 0\]
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_hor_za8.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_hor_za8.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_hor_za8.c	Sun Dec 21 22:32:10 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_hor_za8.c	Sun Dec 28 22:32:13 2025
*************** TEST_READ_ZA (readz_za8_s8_0_w0m1, svint
*** 85,87 ****
--- 85,97 ----
  TEST_READ_ZA (readz_za8_u8_0_w0, svuint8_t,
  	      z0 = svreadz_hor_za8_u8 (0, w0),
  	      z0 = svreadz_hor_za8_u8 (0, w0))
+ 
+ /*
+ ** readz_za8_mf8_0_w0:
+ **	mov	(w1[2-5]), w0
+ **	movaz	z0\.b, za0h\.b\[\1, 0\]
+ **	ret
+ */
+ TEST_READ_ZA (readz_za8_mf8_0_w0, svmfloat8_t,
+ 	      z0 = svreadz_hor_za8_mf8 (0, w0),
+ 	      z0 = svreadz_hor_za8_mf8 (0, w0))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_hor_za8_vg2.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_hor_za8_vg2.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_hor_za8_vg2.c	Sun Dec 21 22:32:10 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_hor_za8_vg2.c	Sun Dec 28 22:32:13 2025
*************** TEST_READ_ZA_XN (readz_za8_u8_z4_0_1, sv
*** 27,32 ****
--- 27,42 ----
  		 z4 = svreadz_hor_za8_u8_vg2 (0, 1))
  
  /*
+ ** readz_za8_mf8_z4_0_1:
+ **	mov	(w1[2-5]), #?1
+ **	movaz	{z4\.b - z5\.b}, za0h\.b\[\1, 0:1\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (readz_za8_mf8_z4_0_1, svmfloat8x2_t,
+ 		 z4 = svreadz_hor_za8_mf8_vg2 (0, 1),
+ 		 z4 = svreadz_hor_za8_mf8_vg2 (0, 1))
+ 
+ /*
  ** readz_za8_s8_z28_0_w11:
  **	mov	(w1[2-5]), w11
  **	movaz	{z28\.b - z29\.b}, za0h\.b\[\1, 0:1\]
*************** TEST_READ_ZA_XN (readz_za8_u8_z18_0_w15,
*** 55,60 ****
--- 65,79 ----
  		 z18 = svreadz_hor_za8_u8_vg2 (0, w15))
  
  /*
+ ** readz_za8_mf8_z18_0_w15:
+ **	movaz	{z18\.b - z19\.b}, za0h\.b\[w15, 0:1\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (readz_za8_mf8_z18_0_w15, svmfloat8x2_t,
+ 		 z18 = svreadz_hor_za8_mf8_vg2 (0, w15),
+ 		 z18 = svreadz_hor_za8_mf8_vg2 (0, w15))
+ 
+ /*
  ** readz_za8_s8_z23_0_w12p14:
  **	movaz	{[^\n]+}, za0h\.b\[w12, 14:15\]
  **	mov	[^\n]+
*************** TEST_READ_ZA_XN (readz_za8_u8_z4_0_w12p1
*** 76,81 ****
--- 95,110 ----
  		 z4 = svreadz_hor_za8_u8_vg2 (0, w12 + 1))
  
  /*
+ ** readz_za8_mf8_z4_0_w12p1:
+ **	add	(w[0-9]+), w12, #?1
+ **	movaz	{z4\.b - z5\.b}, za0h\.b\[\1, 0:1\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (readz_za8_mf8_z4_0_w12p1, svmfloat8x2_t,
+ 		 z4 = svreadz_hor_za8_mf8_vg2 (0, w12 + 1),
+ 		 z4 = svreadz_hor_za8_mf8_vg2 (0, w12 + 1))
+ 
+ /*
  ** readz_za8_s8_z28_0_w12p2:
  **	movaz	{z28\.b - z29\.b}, za0h\.b\[w12, 2:3\]
  **	ret
*************** TEST_READ_ZA_XN (readz_za8_u8_z0_0_w15p3
*** 95,100 ****
--- 124,139 ----
  		 z0 = svreadz_hor_za8_u8_vg2 (0, w15 + 3))
  
  /*
+ ** readz_za8_mf8_z0_0_w15p3:
+ **	add	(w[0-9]+), w15, #?3
+ **	movaz	{z0\.b - z1\.b}, za0h\.b\[\1, 0:1\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (readz_za8_mf8_z0_0_w15p3, svmfloat8x2_t,
+ 		 z0 = svreadz_hor_za8_mf8_vg2 (0, w15 + 3),
+ 		 z0 = svreadz_hor_za8_mf8_vg2 (0, w15 + 3))
+ 
+ /*
  ** readz_za8_u8_z4_0_w15p12:
  **	movaz	{z4\.b - z5\.b}, za0h\.b\[w15, 12:13\]
  **	ret
*************** TEST_READ_ZA_XN (readz_za8_u8_z4_0_w15p1
*** 104,109 ****
--- 143,157 ----
  		 z4 = svreadz_hor_za8_u8_vg2 (0, w15 + 12))
  
  /*
+ ** readz_za8_mf8_z4_0_w15p12:
+ **	movaz	{z4\.b - z5\.b}, za0h\.b\[w15, 12:13\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (readz_za8_mf8_z4_0_w15p12, svmfloat8x2_t,
+ 		 z4 = svreadz_hor_za8_mf8_vg2 (0, w15 + 12),
+ 		 z4 = svreadz_hor_za8_mf8_vg2 (0, w15 + 12))
+ 
+ /*
  ** readz_za8_u8_z28_0_w12p15:
  **	add	(w[0-9]+), w12, #?15
  **	movaz	{z28\.b - z29\.b}, za0h\.b\[\1, 0:1\]
*************** TEST_READ_ZA_XN (readz_za8_u8_z28_0_w12p
*** 114,119 ****
--- 162,177 ----
  		 z28 = svreadz_hor_za8_u8_vg2 (0, w12 + 15))
  
  /*
+ ** readz_za8_mf8_z28_0_w12p15:
+ **	add	(w[0-9]+), w12, #?15
+ **	movaz	{z28\.b - z29\.b}, za0h\.b\[\1, 0:1\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (readz_za8_mf8_z28_0_w12p15, svmfloat8x2_t,
+ 		 z28 = svreadz_hor_za8_mf8_vg2 (0, w12 + 15),
+ 		 z28 = svreadz_hor_za8_mf8_vg2 (0, w12 + 15))
+ 
+ /*
  ** readz_za8_s8_z0_0_w15p16:
  **	add	(w[0-9]+), w15, #?16
  **	movaz	{z0\.b - z1\.b}, za0h\.b\[\1, 0:1\]
*************** TEST_READ_ZA_XN (readz_za8_u8_z4_0_w12m1
*** 134,139 ****
--- 192,207 ----
  		 z4 = svreadz_hor_za8_u8_vg2 (0, w12 - 1))
  
  /*
+ ** readz_za8_mf8_z4_0_w12m1:
+ **	sub	(w[0-9]+), w12, #?1
+ **	movaz	{z4\.b - z5\.b}, za0h\.b\[\1, 0:1\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (readz_za8_mf8_z4_0_w12m1, svmfloat8x2_t,
+ 		 z4 = svreadz_hor_za8_mf8_vg2 (0, w12 - 1),
+ 		 z4 = svreadz_hor_za8_mf8_vg2 (0, w12 - 1))
+ 
+ /*
  ** readz_za8_u8_z18_0_w16:
  **	mov	(w1[2-5]), w16
  **	movaz	{z18\.b - z19\.b}, za0h\.b\[\1, 0:1\]
*************** TEST_READ_ZA_XN (readz_za8_u8_z4_0_w12m1
*** 142,144 ****
--- 210,222 ----
  TEST_READ_ZA_XN (readz_za8_u8_z18_0_w16, svuint8x2_t,
  		 z18 = svreadz_hor_za8_u8_vg2 (0, w16),
  		 z18 = svreadz_hor_za8_u8_vg2 (0, w16))
+ 
+ /*
+ ** readz_za8_mf8_z18_0_w16:
+ **	mov	(w1[2-5]), w16
+ **	movaz	{z18\.b - z19\.b}, za0h\.b\[\1, 0:1\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (readz_za8_mf8_z18_0_w16, svmfloat8x2_t,
+ 		 z18 = svreadz_hor_za8_mf8_vg2 (0, w16),
+ 		 z18 = svreadz_hor_za8_mf8_vg2 (0, w16))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_hor_za8_vg4.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_hor_za8_vg4.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_hor_za8_vg4.c	Sun Dec 21 22:32:10 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_hor_za8_vg4.c	Sun Dec 28 22:32:13 2025
*************** TEST_READ_ZA_XN (readz_za8_u8_z4_0_1, sv
*** 27,32 ****
--- 27,42 ----
  		 z4 = svreadz_hor_za8_u8_vg4 (0, 1))
  
  /*
+ ** readz_za8_mf8_z4_0_1:
+ **	mov	(w1[2-5]), #?1
+ **	movaz	{z4\.b - z7\.b}, za0h\.b\[\1, 0:3\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (readz_za8_mf8_z4_0_1, svmfloat8x4_t,
+ 		 z4 = svreadz_hor_za8_mf8_vg4 (0, 1),
+ 		 z4 = svreadz_hor_za8_mf8_vg4 (0, 1))
+ 
+ /*
  ** readz_za8_s8_z28_0_w11:
  **	mov	(w1[2-5]), w11
  **	movaz	{z28\.b - z31\.b}, za0h\.b\[\1, 0:3\]
*************** TEST_READ_ZA_XN (readz_za8_u8_z18_0_w15,
*** 59,64 ****
--- 69,87 ----
  		 z18 = svreadz_hor_za8_u8_vg4 (0, w15))
  
  /*
+ ** readz_za8_mf8_z18_0_w15:
+ **	movaz	{[^\n]+}, za0h\.b\[w15, 0:3\]
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_READ_ZA_XN (readz_za8_mf8_z18_0_w15, svmfloat8x4_t,
+ 		 z18 = svreadz_hor_za8_mf8_vg4 (0, w15),
+ 		 z18 = svreadz_hor_za8_mf8_vg4 (0, w15))
+ 
+ /*
  ** readz_za8_s8_z23_0_w12p12:
  **	movaz	{[^\n]+}, za0h\.b\[w12, 12:15\]
  **	mov	[^\n]+
*************** TEST_READ_ZA_XN (readz_za8_u8_z4_0_w12p1
*** 82,87 ****
--- 105,120 ----
  		 z4 = svreadz_hor_za8_u8_vg4 (0, w12 + 1))
  
  /*
+ ** readz_za8_mf8_z4_0_w12p1:
+ **	add	(w[0-9]+), w12, #?1
+ **	movaz	{z4\.b - z7\.b}, za0h\.b\[\1, 0:3\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (readz_za8_mf8_z4_0_w12p1, svmfloat8x4_t,
+ 		 z4 = svreadz_hor_za8_mf8_vg4 (0, w12 + 1),
+ 		 z4 = svreadz_hor_za8_mf8_vg4 (0, w12 + 1))
+ 
+ /*
  ** readz_za8_s8_z28_0_w12p2:
  **	add	(w[0-9]+), w12, #?2
  **	movaz	{z28\.b - z31\.b}, za0h\.b\[\1, 0:3\]
*************** TEST_READ_ZA_XN (readz_za8_u8_z0_0_w15p3
*** 102,107 ****
--- 135,150 ----
  		 z0 = svreadz_hor_za8_u8_vg4 (0, w15 + 3))
  
  /*
+ ** readz_za8_mf8_z0_0_w15p3:
+ **	add	(w[0-9]+), w15, #?3
+ **	movaz	{z0\.b - z3\.b}, za0h\.b\[\1, 0:3\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (readz_za8_mf8_z0_0_w15p3, svmfloat8x4_t,
+ 		 z0 = svreadz_hor_za8_mf8_vg4 (0, w15 + 3),
+ 		 z0 = svreadz_hor_za8_mf8_vg4 (0, w15 + 3))
+ 
+ /*
  ** readz_za8_u8_z0_0_w12p4:
  **	movaz	{z0\.b - z3\.b}, za0h\.b\[w12, 4:7\]
  **	ret
*************** TEST_READ_ZA_XN (readz_za8_u8_z0_0_w12p4
*** 111,116 ****
--- 154,168 ----
  		 z0 = svreadz_hor_za8_u8_vg4 (0, w12 + 4))
  
  /*
+ ** readz_za8_mf8_z0_0_w12p4:
+ **	movaz	{z0\.b - z3\.b}, za0h\.b\[w12, 4:7\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (readz_za8_mf8_z0_0_w12p4, svmfloat8x4_t,
+ 		 z0 = svreadz_hor_za8_mf8_vg4 (0, w12 + 4),
+ 		 z0 = svreadz_hor_za8_mf8_vg4 (0, w12 + 4))
+ 
+ /*
  ** readz_za8_u8_z4_0_w15p12:
  **	movaz	{z4\.b - z7\.b}, za0h\.b\[w15, 12:15\]
  **	ret
*************** TEST_READ_ZA_XN (readz_za8_u8_z4_0_w15p1
*** 120,125 ****
--- 172,186 ----
  		 z4 = svreadz_hor_za8_u8_vg4 (0, w15 + 12))
  
  /*
+ ** readz_za8_mf8_z4_0_w15p12:
+ **	movaz	{z4\.b - z7\.b}, za0h\.b\[w15, 12:15\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (readz_za8_mf8_z4_0_w15p12, svmfloat8x4_t,
+ 		 z4 = svreadz_hor_za8_mf8_vg4 (0, w15 + 12),
+ 		 z4 = svreadz_hor_za8_mf8_vg4 (0, w15 + 12))
+ 
+ /*
  ** readz_za8_u8_z28_0_w12p14:
  **	add	(w[0-9]+), w12, #?14
  **	movaz	{z28\.b - z31\.b}, za0h\.b\[\1, 0:3\]
*************** TEST_READ_ZA_XN (readz_za8_u8_z28_0_w12p
*** 130,135 ****
--- 191,206 ----
  		 z28 = svreadz_hor_za8_u8_vg4 (0, w12 + 14))
  
  /*
+ ** readz_za8_mf8_z28_0_w12p14:
+ **	add	(w[0-9]+), w12, #?14
+ **	movaz	{z28\.b - z31\.b}, za0h\.b\[\1, 0:3\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (readz_za8_mf8_z28_0_w12p14, svmfloat8x4_t,
+ 		 z28 = svreadz_hor_za8_mf8_vg4 (0, w12 + 14),
+ 		 z28 = svreadz_hor_za8_mf8_vg4 (0, w12 + 14))
+ 
+ /*
  ** readz_za8_s8_z0_0_w15p16:
  **	add	(w[0-9]+), w15, #?16
  **	movaz	{z0\.b - z3\.b}, za0h\.b\[\1, 0:3\]
*************** TEST_READ_ZA_XN (readz_za8_u8_z4_0_w12m1
*** 150,155 ****
--- 221,236 ----
  		 z4 = svreadz_hor_za8_u8_vg4 (0, w12 - 1))
  
  /*
+ ** readz_za8_mf8_z4_0_w12m1:
+ **	sub	(w[0-9]+), w12, #?1
+ **	movaz	{z4\.b - z7\.b}, za0h\.b\[\1, 0:3\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (readz_za8_mf8_z4_0_w12m1, svmfloat8x4_t,
+ 		 z4 = svreadz_hor_za8_mf8_vg4 (0, w12 - 1),
+ 		 z4 = svreadz_hor_za8_mf8_vg4 (0, w12 - 1))
+ 
+ /*
  ** readz_za8_u8_z28_0_w16:
  **	mov	(w1[2-5]), w16
  **	movaz	{z28\.b - z31\.b}, za0h\.b\[\1, 0:3\]
*************** TEST_READ_ZA_XN (readz_za8_u8_z4_0_w12m1
*** 158,160 ****
--- 239,251 ----
  TEST_READ_ZA_XN (readz_za8_u8_z28_0_w16, svuint8x4_t,
  		 z28 = svreadz_hor_za8_u8_vg4 (0, w16),
  		 z28 = svreadz_hor_za8_u8_vg4 (0, w16))
+ 
+ /*
+ ** readz_za8_mf8_z28_0_w16:
+ **	mov	(w1[2-5]), w16
+ **	movaz	{z28\.b - z31\.b}, za0h\.b\[\1, 0:3\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (readz_za8_mf8_z28_0_w16, svmfloat8x4_t,
+ 		 z28 = svreadz_hor_za8_mf8_vg4 (0, w16),
+ 		 z28 = svreadz_hor_za8_mf8_vg4 (0, w16))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_ver_za128.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_ver_za128.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_ver_za128.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_ver_za128.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,197 ----
+ /* { dg-do assemble { target aarch64_asm_sme2p1_ok } } */
+ /* { dg-do compile { target { ! aarch64_asm_sme2p1_ok } } } */
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ 
+ #pragma GCC target "+sme2p1"
+ 
+ /*
+ ** readz_za128_s8_0_0:
+ **	mov	(w1[2-5]), (?:wzr|#?0)
+ **	movaz	z0\.q, za0v\.q\[\1, 0\]
+ **	ret
+ */
+ TEST_READ_ZA (readz_za128_s8_0_0, svint8_t,
+ 	      z0 = svreadz_ver_za128_s8 (0, 0),
+ 	      z0 = svreadz_ver_za128_s8 (0, 0))
+ 
+ /*
+ ** readz_za128_s8_0_1:
+ **	mov	(w1[2-5]), #?1
+ **	movaz	z0\.q, za0v\.q\[\1, 0\]
+ **	ret
+ */
+ TEST_READ_ZA (readz_za128_s8_0_1, svint8_t,
+ 	      z0 = svreadz_ver_za128_s8 (0, 1),
+ 	      z0 = svreadz_ver_za128_s8 (0, 1))
+ 
+ /*
+ ** readz_za128_s8_0_w0:
+ **	mov	(w1[2-5]), w0
+ **	movaz	z0\.q, za0v\.q\[\1, 0\]
+ **	ret
+ */
+ TEST_READ_ZA (readz_za128_s8_0_w0, svint8_t,
+ 	      z0 = svreadz_ver_za128_s8 (0, w0),
+ 	      z0 = svreadz_ver_za128_s8 (0, w0))
+ 
+ /*
+ ** readz_za128_s8_0_w0p1:
+ **	add	(w1[2-5]), w0, #?1
+ **	movaz	z0\.q, za0v\.q\[\1, 0\]
+ **	ret
+ */
+ TEST_READ_ZA (readz_za128_s8_0_w0p1, svint8_t,
+ 	      z0 = svreadz_ver_za128_s8 (0, w0 + 1),
+ 	      z0 = svreadz_ver_za128_s8 (0, w0 + 1))
+ 
+ /*
+ ** readz_za128_s8_0_w0m1:
+ **	sub	(w1[2-5]), w0, #?1
+ **	movaz	z0\.q, za0v\.q\[\1, 0\]
+ **	ret
+ */
+ TEST_READ_ZA (readz_za128_s8_0_w0m1, svint8_t,
+ 	      z0 = svreadz_ver_za128_s8 (0, w0 - 1),
+ 	      z0 = svreadz_ver_za128_s8 (0, w0 - 1))
+ 
+ /*
+ ** readz_za128_s8_1_w0:
+ **	mov	(w1[2-5]), w0
+ **	movaz	z0\.q, za1v\.q\[\1, 0\]
+ **	ret
+ */
+ TEST_READ_ZA (readz_za128_s8_1_w0, svint8_t,
+ 	      z0 = svreadz_ver_za128_s8 (1, w0),
+ 	      z0 = svreadz_ver_za128_s8 (1, w0))
+ 
+ /*
+ ** readz_za128_s8_15_w0:
+ **	mov	(w1[2-5]), w0
+ **	movaz	z0\.q, za15v\.q\[\1, 0\]
+ **	ret
+ */
+ TEST_READ_ZA (readz_za128_s8_15_w0, svint8_t,
+ 	      z0 = svreadz_ver_za128_s8 (15, w0),
+ 	      z0 = svreadz_ver_za128_s8 (15, w0))
+ 
+ /*
+ ** readz_za128_u8_0_w0:
+ **	mov	(w1[2-5]), w0
+ **	movaz	z0\.q, za0v\.q\[\1, 0\]
+ **	ret
+ */
+ TEST_READ_ZA (readz_za128_u8_0_w0, svuint8_t,
+ 	      z0 = svreadz_ver_za128_u8 (0, w0),
+ 	      z0 = svreadz_ver_za128_u8 (0, w0))
+ 
+ /*
+ ** readz_za128_mf8_0_w0:
+ **	mov	(w1[2-5]), w0
+ **	movaz	z0\.q, za0v\.q\[\1, 0\]
+ **	ret
+ */
+ TEST_READ_ZA (readz_za128_mf8_0_w0, svmfloat8_t,
+ 	      z0 = svreadz_ver_za128_mf8 (0, w0),
+ 	      z0 = svreadz_ver_za128_mf8 (0, w0))
+ 
+ /*
+ ** readz_za128_s16_0_w0:
+ **	mov	(w1[2-5]), w0
+ **	movaz	z0\.q, za0v\.q\[\1, 0\]
+ **	ret
+ */
+ TEST_READ_ZA (readz_za128_s16_0_w0, svint16_t,
+ 	      z0 = svreadz_ver_za128_s16 (0, w0),
+ 	      z0 = svreadz_ver_za128_s16 (0, w0))
+ 
+ /*
+ ** readz_za128_u16_0_w0:
+ **	mov	(w1[2-5]), w0
+ **	movaz	z0\.q, za0v\.q\[\1, 0\]
+ **	ret
+ */
+ TEST_READ_ZA (readz_za128_u16_0_w0, svuint16_t,
+ 	      z0 = svreadz_ver_za128_u16 (0, w0),
+ 	      z0 = svreadz_ver_za128_u16 (0, w0))
+ 
+ /*
+ ** readz_za128_f16_0_w0:
+ **	mov	(w1[2-5]), w0
+ **	movaz	z0\.q, za0v\.q\[\1, 0\]
+ **	ret
+ */
+ TEST_READ_ZA (readz_za128_f16_0_w0, svfloat16_t,
+ 	      z0 = svreadz_ver_za128_f16 (0, w0),
+ 	      z0 = svreadz_ver_za128_f16 (0, w0))
+ 
+ /*
+ ** readz_za128_bf16_0_w0:
+ **	mov	(w1[2-5]), w0
+ **	movaz	z0\.q, za0v\.q\[\1, 0\]
+ **	ret
+ */
+ TEST_READ_ZA (readz_za128_bf16_0_w0, svbfloat16_t,
+ 	      z0 = svreadz_ver_za128_bf16 (0, w0),
+ 	      z0 = svreadz_ver_za128_bf16 (0, w0))
+ 
+ /*
+ ** readz_za128_s32_0_w0:
+ **	mov	(w1[2-5]), w0
+ **	movaz	z0\.q, za0v\.q\[\1, 0\]
+ **	ret
+ */
+ TEST_READ_ZA (readz_za128_s32_0_w0, svint32_t,
+ 	      z0 = svreadz_ver_za128_s32 (0, w0),
+ 	      z0 = svreadz_ver_za128_s32 (0, w0))
+ 
+ /*
+ ** readz_za128_u32_0_w0:
+ **	mov	(w1[2-5]), w0
+ **	movaz	z0\.q, za0v\.q\[\1, 0\]
+ **	ret
+ */
+ TEST_READ_ZA (readz_za128_u32_0_w0, svuint32_t,
+ 	      z0 = svreadz_ver_za128_u32 (0, w0),
+ 	      z0 = svreadz_ver_za128_u32 (0, w0))
+ 
+ /*
+ ** readz_za128_f32_0_w0:
+ **	mov	(w1[2-5]), w0
+ **	movaz	z0\.q, za0v\.q\[\1, 0\]
+ **	ret
+ */
+ TEST_READ_ZA (readz_za128_f32_0_w0, svfloat32_t,
+ 	      z0 = svreadz_ver_za128_f32 (0, w0),
+ 	      z0 = svreadz_ver_za128_f32 (0, w0))
+ 
+ /*
+ ** readz_za128_s64_0_w0:
+ **	mov	(w1[2-5]), w0
+ **	movaz	z0\.q, za0v\.q\[\1, 0\]
+ **	ret
+ */
+ TEST_READ_ZA (readz_za128_s64_0_w0, svint64_t,
+ 	      z0 = svreadz_ver_za128_s64 (0, w0),
+ 	      z0 = svreadz_ver_za128_s64 (0, w0))
+ 
+ /*
+ ** readz_za128_u64_0_w0:
+ **	mov	(w1[2-5]), w0
+ **	movaz	z0\.q, za0v\.q\[\1, 0\]
+ **	ret
+ */
+ TEST_READ_ZA (readz_za128_u64_0_w0, svuint64_t,
+ 	      z0 = svreadz_ver_za128_u64 (0, w0),
+ 	      z0 = svreadz_ver_za128_u64 (0, w0))
+ 
+ /*
+ ** readz_za128_f64_0_w0:
+ **	mov	(w1[2-5]), w0
+ **	movaz	z0\.q, za0v\.q\[\1, 0\]
+ **	ret
+ */
+ TEST_READ_ZA (readz_za128_f64_0_w0, svfloat64_t,
+ 	      z0 = svreadz_ver_za128_f64 (0, w0),
+ 	      z0 = svreadz_ver_za128_f64 (0, w0))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_ver_za8.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_ver_za8.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_ver_za8.c	Sun Dec 21 22:32:10 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_ver_za8.c	Sun Dec 28 22:32:13 2025
*************** TEST_READ_ZA (readz_za8_s8_0_w0m1, svint
*** 85,87 ****
--- 85,97 ----
  TEST_READ_ZA (readz_za8_u8_0_w0, svuint8_t,
  	      z0 = svreadz_ver_za8_u8 (0, w0),
  	      z0 = svreadz_ver_za8_u8 (0, w0))
+ 
+ /*
+ ** readz_za8_mf8_0_w0:
+ **	mov	(w1[2-5]), w0
+ **	movaz	z0\.b, za0v\.b\[\1, 0\]
+ **	ret
+ */
+ TEST_READ_ZA (readz_za8_mf8_0_w0, svmfloat8_t,
+ 	      z0 = svreadz_ver_za8_mf8 (0, w0),
+ 	      z0 = svreadz_ver_za8_mf8 (0, w0))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_ver_za8_vg2.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_ver_za8_vg2.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_ver_za8_vg2.c	Sun Dec 21 22:32:10 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_ver_za8_vg2.c	Sun Dec 28 22:32:13 2025
*************** TEST_READ_ZA_XN (readz_za8_u8_z4_0_1, sv
*** 27,32 ****
--- 27,42 ----
  		 z4 = svreadz_ver_za8_u8_vg2 (0, 1))
  
  /*
+ ** readz_za8_mf8_z4_0_1:
+ **	mov	(w1[2-5]), #?1
+ **	movaz	{z4\.b - z5\.b}, za0v\.b\[\1, 0:1\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (readz_za8_mf8_z4_0_1, svmfloat8x2_t,
+ 		 z4 = svreadz_ver_za8_mf8_vg2 (0, 1),
+ 		 z4 = svreadz_ver_za8_mf8_vg2 (0, 1))
+ 
+ /*
  ** readz_za8_s8_z28_0_w11:
  **	mov	(w1[2-5]), w11
  **	movaz	{z28\.b - z29\.b}, za0v\.b\[\1, 0:1\]
*************** TEST_READ_ZA_XN (readz_za8_u8_z18_0_w15,
*** 55,60 ****
--- 65,79 ----
  		 z18 = svreadz_ver_za8_u8_vg2 (0, w15))
  
  /*
+ ** readz_za8_mf8_z18_0_w15:
+ **	movaz	{z18\.b - z19\.b}, za0v\.b\[w15, 0:1\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (readz_za8_mf8_z18_0_w15, svmfloat8x2_t,
+ 		 z18 = svreadz_ver_za8_mf8_vg2 (0, w15),
+ 		 z18 = svreadz_ver_za8_mf8_vg2 (0, w15))
+ 
+ /*
  ** readz_za8_s8_z23_0_w12p14:
  **	movaz	{[^\n]+}, za0v\.b\[w12, 14:15\]
  **	mov	[^\n]+
*************** TEST_READ_ZA_XN (readz_za8_u8_z4_0_w12p1
*** 76,81 ****
--- 95,110 ----
  		 z4 = svreadz_ver_za8_u8_vg2 (0, w12 + 1))
  
  /*
+ ** readz_za8_mf8_z4_0_w12p1:
+ **	add	(w[0-9]+), w12, #?1
+ **	movaz	{z4\.b - z5\.b}, za0v\.b\[\1, 0:1\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (readz_za8_mf8_z4_0_w12p1, svmfloat8x2_t,
+ 		 z4 = svreadz_ver_za8_mf8_vg2 (0, w12 + 1),
+ 		 z4 = svreadz_ver_za8_mf8_vg2 (0, w12 + 1))
+ 
+ /*
  ** readz_za8_s8_z28_0_w12p2:
  **	movaz	{z28\.b - z29\.b}, za0v\.b\[w12, 2:3\]
  **	ret
*************** TEST_READ_ZA_XN (readz_za8_u8_z0_0_w15p3
*** 95,100 ****
--- 124,139 ----
  		 z0 = svreadz_ver_za8_u8_vg2 (0, w15 + 3))
  
  /*
+ ** readz_za8_mf8_z0_0_w15p3:
+ **	add	(w[0-9]+), w15, #?3
+ **	movaz	{z0\.b - z1\.b}, za0v\.b\[\1, 0:1\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (readz_za8_mf8_z0_0_w15p3, svmfloat8x2_t,
+ 		 z0 = svreadz_ver_za8_mf8_vg2 (0, w15 + 3),
+ 		 z0 = svreadz_ver_za8_mf8_vg2 (0, w15 + 3))
+ 
+ /*
  ** readz_za8_u8_z4_0_w15p12:
  **	movaz	{z4\.b - z5\.b}, za0v\.b\[w15, 12:13\]
  **	ret
*************** TEST_READ_ZA_XN (readz_za8_u8_z4_0_w15p1
*** 104,109 ****
--- 143,157 ----
  		 z4 = svreadz_ver_za8_u8_vg2 (0, w15 + 12))
  
  /*
+ ** readz_za8_mf8_z4_0_w15p12:
+ **	movaz	{z4\.b - z5\.b}, za0v\.b\[w15, 12:13\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (readz_za8_mf8_z4_0_w15p12, svmfloat8x2_t,
+ 		 z4 = svreadz_ver_za8_mf8_vg2 (0, w15 + 12),
+ 		 z4 = svreadz_ver_za8_mf8_vg2 (0, w15 + 12))
+ 
+ /*
  ** readz_za8_u8_z28_0_w12p15:
  **	add	(w[0-9]+), w12, #?15
  **	movaz	{z28\.b - z29\.b}, za0v\.b\[\1, 0:1\]
*************** TEST_READ_ZA_XN (readz_za8_u8_z28_0_w12p
*** 114,119 ****
--- 162,177 ----
  		 z28 = svreadz_ver_za8_u8_vg2 (0, w12 + 15))
  
  /*
+ ** readz_za8_mf8_z28_0_w12p15:
+ **	add	(w[0-9]+), w12, #?15
+ **	movaz	{z28\.b - z29\.b}, za0v\.b\[\1, 0:1\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (readz_za8_mf8_z28_0_w12p15, svmfloat8x2_t,
+ 		 z28 = svreadz_ver_za8_mf8_vg2 (0, w12 + 15),
+ 		 z28 = svreadz_ver_za8_mf8_vg2 (0, w12 + 15))
+ 
+ /*
  ** readz_za8_s8_z0_0_w15p16:
  **	add	(w[0-9]+), w15, #?16
  **	movaz	{z0\.b - z1\.b}, za0v\.b\[\1, 0:1\]
*************** TEST_READ_ZA_XN (readz_za8_u8_z4_0_w12m1
*** 134,139 ****
--- 192,207 ----
  		 z4 = svreadz_ver_za8_u8_vg2 (0, w12 - 1))
  
  /*
+ ** readz_za8_mf8_z4_0_w12m1:
+ **	sub	(w[0-9]+), w12, #?1
+ **	movaz	{z4\.b - z5\.b}, za0v\.b\[\1, 0:1\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (readz_za8_mf8_z4_0_w12m1, svmfloat8x2_t,
+ 		 z4 = svreadz_ver_za8_mf8_vg2 (0, w12 - 1),
+ 		 z4 = svreadz_ver_za8_mf8_vg2 (0, w12 - 1))
+ 
+ /*
  ** readz_za8_u8_z18_0_w16:
  **	mov	(w1[2-5]), w16
  **	movaz	{z18\.b - z19\.b}, za0v\.b\[\1, 0:1\]
*************** TEST_READ_ZA_XN (readz_za8_u8_z4_0_w12m1
*** 142,144 ****
--- 210,221 ----
  TEST_READ_ZA_XN (readz_za8_u8_z18_0_w16, svuint8x2_t,
  		 z18 = svreadz_ver_za8_u8_vg2 (0, w16),
  		 z18 = svreadz_ver_za8_u8_vg2 (0, w16))
+ /*
+ ** readz_za8_mf8_z18_0_w16:
+ **	mov	(w1[2-5]), w16
+ **	movaz	{z18\.b - z19\.b}, za0v\.b\[\1, 0:1\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (readz_za8_mf8_z18_0_w16, svmfloat8x2_t,
+ 		 z18 = svreadz_ver_za8_mf8_vg2 (0, w16),
+ 		 z18 = svreadz_ver_za8_mf8_vg2 (0, w16))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_ver_za8_vg4.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_ver_za8_vg4.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_ver_za8_vg4.c	Sun Dec 21 22:32:10 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_ver_za8_vg4.c	Sun Dec 28 22:32:13 2025
*************** TEST_READ_ZA_XN (readz_za8_u8_z4_0_1, sv
*** 27,32 ****
--- 27,42 ----
  		 z4 = svreadz_ver_za8_u8_vg4 (0, 1))
  
  /*
+ ** readz_za8_mf8_z4_0_1:
+ **	mov	(w1[2-5]), #?1
+ **	movaz	{z4\.b - z7\.b}, za0v\.b\[\1, 0:3\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (readz_za8_mf8_z4_0_1, svmfloat8x4_t,
+ 		 z4 = svreadz_ver_za8_mf8_vg4 (0, 1),
+ 		 z4 = svreadz_ver_za8_mf8_vg4 (0, 1))
+ 
+ /*
  ** readz_za8_s8_z28_0_w11:
  **	mov	(w1[2-5]), w11
  **	movaz	{z28\.b - z31\.b}, za0v\.b\[\1, 0:3\]
*************** TEST_READ_ZA_XN (readz_za8_u8_z18_0_w15,
*** 59,64 ****
--- 69,87 ----
  		 z18 = svreadz_ver_za8_u8_vg4 (0, w15))
  
  /*
+ ** readz_za8_mf8_z18_0_w15:
+ **	movaz	{[^\n]+}, za0v\.b\[w15, 0:3\]
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_READ_ZA_XN (readz_za8_mf8_z18_0_w15, svmfloat8x4_t,
+ 		 z18 = svreadz_ver_za8_mf8_vg4 (0, w15),
+ 		 z18 = svreadz_ver_za8_mf8_vg4 (0, w15))
+ 
+ /*
  ** readz_za8_s8_z23_0_w12p12:
  **	movaz	{[^\n]+}, za0v\.b\[w12, 12:15\]
  **	mov	[^\n]+
*************** TEST_READ_ZA_XN (readz_za8_u8_z4_0_w12p1
*** 82,87 ****
--- 105,120 ----
  		 z4 = svreadz_ver_za8_u8_vg4 (0, w12 + 1))
  
  /*
+ ** readz_za8_mf8_z4_0_w12p1:
+ **	add	(w[0-9]+), w12, #?1
+ **	movaz	{z4\.b - z7\.b}, za0v\.b\[\1, 0:3\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (readz_za8_mf8_z4_0_w12p1, svmfloat8x4_t,
+ 		 z4 = svreadz_ver_za8_mf8_vg4 (0, w12 + 1),
+ 		 z4 = svreadz_ver_za8_mf8_vg4 (0, w12 + 1))
+ 
+ /*
  ** readz_za8_s8_z28_0_w12p2:
  **	add	(w[0-9]+), w12, #?2
  **	movaz	{z28\.b - z31\.b}, za0v\.b\[\1, 0:3\]
*************** TEST_READ_ZA_XN (readz_za8_u8_z0_0_w15p3
*** 102,107 ****
--- 135,150 ----
  		 z0 = svreadz_ver_za8_u8_vg4 (0, w15 + 3))
  
  /*
+ ** readz_za8_mf8_z0_0_w15p3:
+ **	add	(w[0-9]+), w15, #?3
+ **	movaz	{z0\.b - z3\.b}, za0v\.b\[\1, 0:3\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (readz_za8_mf8_z0_0_w15p3, svmfloat8x4_t,
+ 		 z0 = svreadz_ver_za8_mf8_vg4 (0, w15 + 3),
+ 		 z0 = svreadz_ver_za8_mf8_vg4 (0, w15 + 3))
+ 
+ /*
  ** readz_za8_u8_z0_0_w12p4:
  **	movaz	{z0\.b - z3\.b}, za0v\.b\[w12, 4:7\]
  **	ret
*************** TEST_READ_ZA_XN (readz_za8_u8_z0_0_w12p4
*** 111,116 ****
--- 154,168 ----
  		 z0 = svreadz_ver_za8_u8_vg4 (0, w12 + 4))
  
  /*
+ ** readz_za8_mf8_z0_0_w12p4:
+ **	movaz	{z0\.b - z3\.b}, za0v\.b\[w12, 4:7\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (readz_za8_mf8_z0_0_w12p4, svmfloat8x4_t,
+ 		 z0 = svreadz_ver_za8_mf8_vg4 (0, w12 + 4),
+ 		 z0 = svreadz_ver_za8_mf8_vg4 (0, w12 + 4))
+ 
+ /*
  ** readz_za8_u8_z4_0_w15p12:
  **	movaz	{z4\.b - z7\.b}, za0v\.b\[w15, 12:15\]
  **	ret
*************** TEST_READ_ZA_XN (readz_za8_u8_z4_0_w15p1
*** 120,125 ****
--- 172,186 ----
  		 z4 = svreadz_ver_za8_u8_vg4 (0, w15 + 12))
  
  /*
+ ** readz_za8_mf8_z4_0_w15p12:
+ **	movaz	{z4\.b - z7\.b}, za0v\.b\[w15, 12:15\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (readz_za8_mf8_z4_0_w15p12, svmfloat8x4_t,
+ 		 z4 = svreadz_ver_za8_mf8_vg4 (0, w15 + 12),
+ 		 z4 = svreadz_ver_za8_mf8_vg4 (0, w15 + 12))
+ 
+ /*
  ** readz_za8_u8_z28_0_w12p14:
  **	add	(w[0-9]+), w12, #?14
  **	movaz	{z28\.b - z31\.b}, za0v\.b\[\1, 0:3\]
*************** TEST_READ_ZA_XN (readz_za8_u8_z28_0_w12p
*** 130,135 ****
--- 191,206 ----
  		 z28 = svreadz_ver_za8_u8_vg4 (0, w12 + 14))
  
  /*
+ ** readz_za8_mf8_z28_0_w12p14:
+ **	add	(w[0-9]+), w12, #?14
+ **	movaz	{z28\.b - z31\.b}, za0v\.b\[\1, 0:3\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (readz_za8_mf8_z28_0_w12p14, svmfloat8x4_t,
+ 		 z28 = svreadz_ver_za8_mf8_vg4 (0, w12 + 14),
+ 		 z28 = svreadz_ver_za8_mf8_vg4 (0, w12 + 14))
+ 
+ /*
  ** readz_za8_s8_z0_0_w15p16:
  **	add	(w[0-9]+), w15, #?16
  **	movaz	{z0\.b - z3\.b}, za0v\.b\[\1, 0:3\]
*************** TEST_READ_ZA_XN (readz_za8_u8_z4_0_w12m1
*** 150,155 ****
--- 221,236 ----
  		 z4 = svreadz_ver_za8_u8_vg4 (0, w12 - 1))
  
  /*
+ ** readz_za8_mf8_z4_0_w12m1:
+ **	sub	(w[0-9]+), w12, #?1
+ **	movaz	{z4\.b - z7\.b}, za0v\.b\[\1, 0:3\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (readz_za8_mf8_z4_0_w12m1, svmfloat8x4_t,
+ 		 z4 = svreadz_ver_za8_mf8_vg4 (0, w12 - 1),
+ 		 z4 = svreadz_ver_za8_mf8_vg4 (0, w12 - 1))
+ 
+ /*
  ** readz_za8_u8_z28_0_w16:
  **	mov	(w1[2-5]), w16
  **	movaz	{z28\.b - z31\.b}, za0v\.b\[\1, 0:3\]
*************** TEST_READ_ZA_XN (readz_za8_u8_z4_0_w12m1
*** 158,160 ****
--- 239,250 ----
  TEST_READ_ZA_XN (readz_za8_u8_z28_0_w16, svuint8x4_t,
  		 z28 = svreadz_ver_za8_u8_vg4 (0, w16),
  		 z28 = svreadz_ver_za8_u8_vg4 (0, w16))
+ /*
+ ** readz_za8_mf8_z28_0_w16:
+ **	mov	(w1[2-5]), w16
+ **	movaz	{z28\.b - z31\.b}, za0v\.b\[\1, 0:3\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (readz_za8_mf8_z28_0_w16, svmfloat8x4_t,
+ 		 z28 = svreadz_ver_za8_mf8_vg4 (0, w16),
+ 		 z28 = svreadz_ver_za8_mf8_vg4 (0, w16))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_za8_vg1x2.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_za8_vg1x2.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_za8_vg1x2.c	Sun Dec 21 22:32:10 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_za8_vg1x2.c	Sun Dec 28 22:32:13 2025
*************** TEST_READ_ZA_XN (readz_w7_z0, svuint8x2_
*** 37,42 ****
--- 37,52 ----
  		 z0 = svreadz_za8_u8_vg1x2 (w7))
  
  /*
+ ** readz_mf8_w7_z0:
+ **	mov	(w8|w9|w10|w11), w7
+ **	movaz	{z0\.d - z1\.d}, za\.d\[\1, 0, vgx2\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (readz_mf8_w7_z0, svmfloat8x2_t,
+ 		 z0 = svreadz_za8_mf8_vg1x2 (w7),
+ 		 z0 = svreadz_za8_mf8_vg1x2 (w7))
+ 
+ /*
  ** readz_w8_z0:
  **	movaz	{z0\.d - z1\.d}, za\.d\[w8, 0, vgx2\]
  **	ret
*************** TEST_READ_ZA_XN (readz_w12_z0, svuint8x2
*** 66,71 ****
--- 76,91 ----
  		 z0 = svreadz_za8_u8_vg1x2 (w12))
  
  /*
+ ** readz_mf8_w12_z0:
+ **	mov	(w8|w9|w10|w11), w12
+ **	movaz	{z0\.d - z1\.d}, za\.d\[\1, 0, vgx2\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (readz_mf8_w12_z0, svmfloat8x2_t,
+ 		 z0 = svreadz_za8_mf8_vg1x2 (w12),
+ 		 z0 = svreadz_za8_mf8_vg1x2 (w12))
+ 
+ /*
  ** readz_w8p7_z0:
  **	movaz	{z0\.d - z1\.d}, za\.d\[w8, 7, vgx2\]
  **	ret
*************** TEST_READ_ZA_XN (readz_w8m1_z0, svuint8x
*** 95,100 ****
--- 115,130 ----
  		 z0 = svreadz_za8_u8_vg1x2 (w8 - 1))
  
  /*
+ ** readz_mf8_w8m1_z0:
+ **	sub	(w8|w9|w10|w11), w8, #?1
+ **	movaz	{z0\.d - z1\.d}, za\.d\[\1, 0, vgx2\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (readz_mf8_w8m1_z0, svmfloat8x2_t,
+ 		 z0 = svreadz_za8_mf8_vg1x2 (w8 - 1),
+ 		 z0 = svreadz_za8_mf8_vg1x2 (w8 - 1))
+ 
+ /*
  ** readz_w8_z18:
  **	movaz	{z18\.d - z19\.d}, za\.d\[w8, 0, vgx2\]
  **	ret
*************** TEST_READ_ZA_XN (readz_w8_z18, svuint8x2
*** 103,108 ****
--- 133,147 ----
  		 z18 = svreadz_za8_u8_vg1x2 (w8),
  		 z18 = svreadz_za8_u8_vg1x2 (w8))
  
+ /*
+ ** readz_mf8_w8_z18:
+ **	movaz	{z18\.d - z19\.d}, za\.d\[w8, 0, vgx2\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (readz_mf8_w8_z18, svmfloat8x2_t,
+ 		 z18 = svreadz_za8_mf8_vg1x2 (w8),
+ 		 z18 = svreadz_za8_mf8_vg1x2 (w8))
+ 
  /* Leave the assembler to check for correctness for misaligned registers.  */
  
  /*
*************** TEST_READ_ZA_XN (readz_w8_z23, svint8x2_
*** 124,126 ****
--- 163,174 ----
  TEST_READ_ZA_XN (readz_w8_z28, svuint8x2_t,
  		 z28 = svreadz_za8_u8_vg1x2 (w8),
  		 z28 = svreadz_za8_u8_vg1x2 (w8))
+ 
+ /*
+ ** readz_mf8_w8_z28:
+ **	movaz	{z28\.d - z29\.d}, za\.d\[w8, 0, vgx2\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (readz_mf8_w8_z28, svmfloat8x2_t,
+ 		 z28 = svreadz_za8_mf8_vg1x2 (w8),
+ 		 z28 = svreadz_za8_mf8_vg1x2 (w8))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_za8_vg1x4.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_za8_vg1x4.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_za8_vg1x4.c	Sun Dec 21 22:32:10 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/readz_za8_vg1x4.c	Sun Dec 28 22:32:13 2025
*************** TEST_READ_ZA_XN (readz_w0_z0, svuint8x4_
*** 27,32 ****
--- 27,42 ----
  		 z0 = svreadz_za8_u8_vg1x4 (w0))
  
  /*
+ ** readz_mf8_w0_z0:
+ **	mov	(w8|w9|w10|w11), w0
+ **	movaz	{z0\.d - z3\.d}, za\.d\[\1, 0, vgx4\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (readz_mf8_w0_z0, svmfloat8x4_t,
+ 		 z0 = svreadz_za8_mf8_vg1x4 (w0),
+ 		 z0 = svreadz_za8_mf8_vg1x4 (w0))
+ 
+ /*
  ** readz_w7_z0:
  **	mov	(w8|w9|w10|w11), w7
  **	movaz	{z0\.d - z3\.d}, za\.d\[\1, 0, vgx4\]
*************** TEST_READ_ZA_XN (readz_w11_z0, svuint8x4
*** 56,61 ****
--- 66,81 ----
  
  
  /*
+ ** readz_mf8_w11_z0:
+ **	movaz	{z0\.d - z3\.d}, za\.d\[w11, 0, vgx4\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (readz_mf8_w11_z0, svmfloat8x4_t,
+ 		 z0 = svreadz_za8_mf8_vg1x4 (w11),
+ 		 z0 = svreadz_za8_mf8_vg1x4 (w11))
+ 
+ 
+ /*
  ** readz_w12_z0:
  **	mov	(w8|w9|w10|w11), w12
  **	movaz	{z0\.d - z3\.d}, za\.d\[\1, 0, vgx4\]
*************** TEST_READ_ZA_XN (readz_w8p8_z0, svuint8x
*** 85,90 ****
--- 105,120 ----
  		 z0 = svreadz_za8_u8_vg1x4 (w8 + 8))
  
  /*
+ ** readz_mf8_w8p8_z0:
+ **	add	(w8|w9|w10|w11), w8, #?8
+ **	movaz	{z0\.d - z3\.d}, za\.d\[\1, 0, vgx4\]
+ **	ret
+ */
+ TEST_READ_ZA_XN (readz_mf8_w8p8_z0, svmfloat8x4_t,
+ 		 z0 = svreadz_za8_mf8_vg1x4 (w8 + 8),
+ 		 z0 = svreadz_za8_mf8_vg1x4 (w8 + 8))
+ 
+ /*
  ** readz_w8m1_z0:
  **	sub	(w8|w9|w10|w11), w8, #?1
  **	movaz	{z0\.d - z3\.d}, za\.d\[\1, 0, vgx4\]
*************** TEST_READ_ZA_XN (readz_w8_z18, svuint8x4
*** 119,124 ****
--- 149,167 ----
  		 z18 = svreadz_za8_u8_vg1x4 (w8))
  
  /*
+ ** readz_mf8_w8_z18:
+ **	movaz	[^\n]+, za\.d\[w8, 0, vgx4\]
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_READ_ZA_XN (readz_mf8_w8_z18, svmfloat8x4_t,
+ 		 z18 = svreadz_za8_mf8_vg1x4 (w8),
+ 		 z18 = svreadz_za8_mf8_vg1x4 (w8))
+ 
+ /*
  ** readz_w8_z23:
  **	movaz	[^\n]+, za\.d\[w8, 0, vgx4\]
  **	mov	[^\n]+
*************** TEST_READ_ZA_XN (readz_w8_z23, svuint8x4
*** 132,137 ****
--- 175,193 ----
  		 z23 = svreadz_za8_u8_vg1x4 (w8))
  
  /*
+ ** readz_mf8_w8_z23:
+ **	movaz	[^\n]+, za\.d\[w8, 0, vgx4\]
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_READ_ZA_XN (readz_mf8_w8_z23, svmfloat8x4_t,
+ 		 z23 = svreadz_za8_mf8_vg1x4 (w8),
+ 		 z23 = svreadz_za8_mf8_vg1x4 (w8))
+ 
+ /*
  ** readz_w8_z28:
  **	movaz	{z28\.d - z31\.d}, za\.d\[w8, 0, vgx4\]
  **	ret
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/scale_f16_x2.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/scale_f16_x2.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/scale_f16_x2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/scale_f16_x2.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,192 ----
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ #pragma GCC target "+fp8"
+ 
+ /*
+ ** scale_z0_z0_z4:
+ **	fscale	{z0\.h - z1\.h}, {z0\.h - z1\.h}, {z4\.h - z5\.h}
+ **	ret
+ */
+ TEST_DUAL_XN (scale_z0_z0_z4, svfloat16x2_t, svint16x2_t, z0,
+ 	 svscale_f16_x2 (z0, z4),
+ 	 svscale (z0, z4))
+ 
+ /*
+ ** scale_z4_z4_z0:
+ **	fscale	{z4\.h - z5\.h}, {z4\.h - z5\.h}, {z0\.h - z1\.h}
+ **	ret
+ */
+ TEST_DUAL_XN (scale_z4_z4_z0, svint16x2_t, svfloat16x2_t, z4,
+ 	 svscale_f16_x2 (z4, z0),
+ 	 svscale (z4, z0))
+ 
+ /*
+ ** scale_z18_z18_z4:
+ **	fscale	{z18\.h - z19\.h}, {z18\.h - z19\.h}, {z4\.h - z5\.h}
+ **	ret
+ */
+ TEST_DUAL_XN (scale_z18_z18_z4, svfloat16x2_t, svint16x2_t, z18,
+ 	 svscale_f16_x2 (z18, z4),
+ 	 svscale (z18, z4))
+ 
+ /*
+ ** scale_z23_z23_z18:
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	fscale	[^\n]+, {z18\.h - z19\.h}
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_DUAL_XN (scale_z23_z23_z18, svint16x2_t, svfloat16x2_t, z23,
+ 	 svscale_f16_x2 (z23, z18),
+ 	 svscale (z23, z18))
+ 
+ 
+ /*
+ ** scale_z28_z28_z4:
+ **	fscale	{z28\.h - z29\.h}, {z28\.h - z29\.h}, {z4\.h - z5\.h}
+ **	ret
+ */
+ TEST_DUAL_XN (scale_z28_z28_z4, svfloat16x2_t, svint16x2_t, z28,
+ 	 svscale_f16_x2 (z28, z4),
+ 	 svscale (z28, z4))
+ 
+ /*
+ ** scale_z4_z4_z18:
+ **	fscale	{z4\.h - z5\.h}, {z4\.h - z5\.h}, {z18\.h - z19\.h}
+ **	ret
+ */
+ TEST_DUAL_XN (scale_z4_z4_z18, svint16x2_t, svfloat16x2_t, z4,
+ 	 svscale_f16_x2 (z4, z18),
+ 	 svscale (z4, z18))
+ 
+ /*
+ ** scale_z28_28_z23:
+ ** (
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	fscale	{z28\.h - z29\.h}, {z28\.h - z29\.h}, [^\n]+
+ ** |
+ **	fscale	{z28\.h - z29\.h}, {z28\.h - z29\.h}, [^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ ** )
+ **	ret
+ */
+ TEST_DUAL_XN (scale_z28_28_z23, svfloat16x2_t, svint16x2_t, z28,
+ 	 svscale_f16_x2 (z28, z23),
+ 	 svscale (z28, z23))
+ 
+ /*
+ ** scale_single_z24_z24_z0:
+ **	fscale	{z24\.h - z25\.h}, {z24\.h - z25\.h}, z0\.h
+ **	ret
+ */
+ TEST_XN_SINGLE (scale_single_z24_z24_z0, svfloat16x2_t, svint16_t, z24,
+ 		svscale_single_f16_x2 (z24, z0),
+ 		svscale (z24, z0))
+ 
+ /*
+ ** scale_single_z24_z28_z0:
+ ** (
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	fscale	{z24\.h - z25\.h}, {z24\.h - z25\.h}, z0\.h
+ ** |
+ **	fscale	{z28\.h - z29\.h}, {z28\.h - z29\.h}, z0\.h
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ ** )
+ **	ret
+ */
+ TEST_XN_SINGLE (scale_single_z24_z28_z0, svfloat16x2_t, svint16_t, z24,
+ 		svscale_single_f16_x2 (z28, z0),
+ 		svscale (z28, z0))
+ 
+ /*
+ ** scale_single_z24_z1_z0:
+ ** (
+ **	mov	z24\.d, z1\.d
+ **	mov	z25\.d, z2\.d
+ ** |
+ **	mov	z25\.d, z2\.d
+ **	mov	z24\.d, z1\.d
+ ** )
+ **	fscale	{z24\.h - z25\.h}, {z24\.h - z25\.h}, z0\.h
+ **	ret
+ */
+ TEST_XN_SINGLE (scale_single_z24_z1_z0, svfloat16x2_t, svint16_t, z24,
+ 		svscale_single_f16_x2 (z1, z0),
+ 		svscale (z1, z0))
+ 
+ /*
+ ** scale_single_z1_z24_z0:
+ **	fscale	{z24\.h - z25\.h}, {z24\.h - z25\.h}, z0\.h
+ ** (
+ **	mov	z1\.d, z24\.d
+ **	mov	z2\.d, z25\.d
+ ** |
+ **	mov	z2\.d, z25\.d
+ **	mov	z1\.d, z24\.d
+ ** )
+ **	ret
+ */
+ TEST_XN_SINGLE (scale_single_z1_z24_z0, svfloat16x2_t, svint16_t, z1,
+ 		svscale_single_f16_x2 (z24, z0),
+ 		svscale (z24, z0))
+ 
+ /*
+ ** scale_single_z1_z1_z0:
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	fscale	({z[0-9]+\.h - z[0-9]+\.h}), \1, z0\.h
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_XN_SINGLE (scale_single_z1_z1_z0, svfloat16x2_t, svint16_t, z1,
+ 		svscale_single_f16_x2 (z1, z0),
+ 		svscale (z1, z0))
+ 
+ /*
+ ** scale_single_z18_z18_z0:
+ **	fscale	{z18\.h - z19\.h}, {z18\.h - z19\.h}, z0\.h
+ **	ret
+ */
+ TEST_XN_SINGLE (scale_single_z18_z18_z0, svfloat16x2_t, svint16_t, z18,
+ 		svscale_single_f16_x2 (z18, z0),
+ 		svscale (z18, z0))
+ 
+ /*
+ ** scale_single_awkward:
+ **	...
+ **	fscale	({z[0-9]+\.h - z[0-9]+\.h}), \1, z[0-9]+\.h
+ **	...
+ **	ret
+ */
+ TEST_XN_SINGLE_AWKWARD (scale_single_awkward, svfloat16x2_t, svint16_t,
+ 			z0_res = svscale_single_f16_x2 (z1, z0),
+ 			z0_res = svscale (z1, z0))
+ 
+ /*
+ ** scale_single_z0_z0_z15:
+ **	...
+ **	fscale	{z0\.h - z1\.h}, {z0\.h - z1\.h}, z15\.h
+ **	...
+ **	ret
+ */
+ TEST_XN_SINGLE_Z15 (scale_single_z0_z0_z15, svfloat16x2_t, svint16_t,
+ 		    z0 = svscale_single_f16_x2 (z0, z15),
+ 		    z0 = svscale (z0, z15))
+ 
+ /*
+ ** scale_single_z24_z24_z16:
+ **	mov	(z[0-7])\.d, z16\.d
+ **	fscale	{z24\.h - z25\.h}, {z24\.h - z25\.h}, \1\.h
+ **	ret
+ */
+ TEST_XN_SINGLE (scale_single_z24_z24_z16, svfloat16x2_t, svint16_t, z24,
+ 		svscale_single_f16_x2 (z24, z16),
+ 		svscale (z24, z16))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/scale_f16_x4.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/scale_f16_x4.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/scale_f16_x4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/scale_f16_x4.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,229 ----
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ #pragma GCC target "+fp8"
+ 
+ /*
+ ** fscale_z0_z0_z4:
+ **	fscale	{z0\.h - z3\.h}, {z0\.h - z3\.h}, {z4\.h - z7\.h}
+ **	ret
+ */
+ TEST_DUAL_XN (fscale_z0_z0_z4, svfloat16x4_t, svint16x4_t, z0,
+ 	      svscale_f16_x4 (z0, z4),
+ 	      svscale (z0, z4))
+ 
+ /*
+ ** fscale_z4_z4_z0:
+ **	fscale	{z4\.h - z7\.h}, {z4\.h - z7\.h}, {z0\.h - z3\.h}
+ **	ret
+ */
+ TEST_DUAL_XN (fscale_z4_z4_z0, svint16x4_t, svfloat16x4_t, z4,
+ 	      svscale_f16_x4 (z4, z0),
+ 	      svscale (z4, z0))
+ 
+ /*
+ ** fscale_z18_z18_z4:
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	fscale	[^\n]+, {z4\.h - z7\.h}
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_DUAL_XN (fscale_z18_z18_z4, svfloat16x4_t, svint16x4_t, z18,
+ 	      svscale_f16_x4 (z18, z4),
+ 	      svscale (z18, z4))
+ 
+ /*
+ ** fscale_z23_z23_z28:
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	fscale	[^\n]+, {z28\.h - z31\.h}
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_DUAL_XN (fscale_z23_z23_z28, svint16x4_t, svfloat16x4_t, z23,
+ 	      svscale_f16_x4 (z23, z28),
+ 	      svscale (z23, z28))
+ 
+ /*
+ ** fscale_z28_z28_z4:
+ **	fscale	{z28\.h - z31\.h}, {z28\.h - z31\.h}, {z4\.h - z7\.h}
+ **	ret
+ */
+ TEST_DUAL_XN (fscale_z28_z28_z4, svfloat16x4_t, svint16x4_t, z28,
+ 	      svscale_f16_x4 (z28, z4),
+ 	      svscale (z28, z4))
+ 
+ /*
+ ** fscale_z4_z4_z18:
+ ** (
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	fscale	{z4\.h - z7\.h}, {z4\.h - z7\.h}, [^\n]+
+ ** |
+ **	fscale	{z4\.h - z7\.h}, {z4\.h - z7\.h}, [^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ ** )
+ **	ret
+ */
+ TEST_DUAL_XN (fscale_z4_z4_z18, svint16x4_t, svfloat16x4_t, z4,
+ 	      svscale_f16_x4 (z4, z18),
+ 	      svscale (z4, z18))
+ 
+ /*
+ ** fscale_z0_z0_z23:
+ ** (
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	fscale	{z0\.h - z3\.h}, {z0\.h - z3\.h}, [^\n]+
+ ** |
+ **	fscale	{z0\.h - z3\.h}, {z0\.h - z3\.h}, [^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ ** )
+ **	ret
+ */
+ TEST_DUAL_XN (fscale_z0_z0_z23, svfloat16x4_t, svint16x4_t, z0,
+ 	      svscale_f16_x4 (z0, z23),
+ 	      svscale (z0, z23))
+ 
+ /*
+ ** fscale_single_z24_z24_z0:
+ **	fscale	{z24\.h - z27\.h}, {z24\.h - z27\.h}, z0\.h
+ **	ret
+ */
+ TEST_XN_SINGLE (fscale_single_z24_z24_z0, svfloat16x4_t, svint16_t, z24,
+ 		svscale_single_f16_x4 (z24, z0),
+ 		svscale (z24, z0))
+ 
+ /*
+ ** fscale_single_z24_z28_z0:
+ ** (
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	fscale	{z24\.h - z27\.h}, {z24\.h - z27\.h}, z0\.h
+ ** |
+ **	fscale	{z28\.h - z31\.h}, {z28\.h - z31\.h}, z0\.h
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ ** )
+ **	ret
+ */
+ TEST_XN_SINGLE (fscale_single_z24_z28_z0, svfloat16x4_t, svint16_t, z24,
+ 		svscale_single_f16_x4 (z28, z0),
+ 		svscale (z28, z0))
+ 
+ /*
+ ** fscale_single_z24_z1_z0:
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	fscale	{z24\.h - z27\.h}, {z24\.h - z27\.h}, z0\.h
+ **	ret
+ */
+ TEST_XN_SINGLE (fscale_single_z24_z1_z0, svfloat16x4_t, svint16_t, z24,
+ 		svscale_single_f16_x4 (z1, z0),
+ 		svscale (z1, z0))
+ 
+ /*
+ ** fscale_single_z1_z24_z0:
+ **	fscale	{z24\.h - z27\.h}, {z24\.h - z27\.h}, z0\.h
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_XN_SINGLE (fscale_single_z1_z24_z0, svfloat16x4_t, svint16_t, z1,
+ 		svscale_single_f16_x4 (z24, z0),
+ 		svscale (z24, z0))
+ 
+ /*
+ ** fscale_single_z1_z1_z0:
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	fscale	({z[0-9]+\.h - z[0-9]+\.h}), \1, z0\.h
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_XN_SINGLE (fscale_single_z1_z1_z0, svfloat16x4_t, svint16_t, z1,
+ 		svscale_single_f16_x4 (z1, z0),
+ 		svscale (z1, z0))
+ 
+ /*
+ ** fscale_single_z18_z18_z0:
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	fscale	[^\n]+, z0\.h
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_XN_SINGLE (fscale_single_z18_z18_z0, svfloat16x4_t, svint16_t, z18,
+ 		svscale_single_f16_x4 (z18, z0),
+ 		svscale (z18, z0))
+ 
+ /*
+ ** fscale_single_awkward:
+ **	...
+ **	fscale	({z[0-9]+\.h - z[0-9]+\.h}), \1, z[0-9]+\.h
+ **	...
+ **	ret
+ */
+ TEST_XN_SINGLE_AWKWARD (fscale_single_awkward, svfloat16x4_t, svint16_t,
+ 			z0_res = svscale_single_f16_x4 (z1, z0),
+ 			z0_res = svscale (z1, z0))
+ 
+ /*
+ ** fscale_single_z0_z0_z15:
+ **	...
+ **	fscale	{z0\.h - z3\.h}, {z0\.h - z3\.h}, z15\.h
+ **	...
+ **	ret
+ */
+ TEST_XN_SINGLE_Z15 (fscale_single_z0_z0_z15, svfloat16x4_t, svint16_t,
+ 		    z0 = svscale_single_f16_x4 (z0, z15),
+ 		    z0 = svscale (z0, z15))
+ 
+ /*
+ ** fscale_single_z24_z24_z16:
+ **	mov	(z[0-7])\.d, z16\.d
+ **	fscale	{z24\.h - z27\.h}, {z24\.h - z27\.h}, \1\.h
+ **	ret
+ */
+ TEST_XN_SINGLE (fscale_single_z24_z24_z16, svfloat16x4_t, svint16_t, z24,
+ 		svscale_single_f16_x4 (z24, z16),
+ 		svscale (z24, z16))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/scale_f32_x2.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/scale_f32_x2.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/scale_f32_x2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/scale_f32_x2.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,208 ----
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ #pragma GCC target "+fp8"
+ 
+ /*
+ ** svscale_z0_z0_z4:
+ **	fscale	{z0\.s - z1\.s}, {z0\.s - z1\.s}, {z4\.s - z5\.s}
+ **	ret
+ */
+ TEST_DUAL_XN (svscale_z0_z0_z4, svfloat32x2_t, svint32x2_t, z0,
+ 	      svscale_f32_x2 (z0, z4),
+ 	      svscale (z0, z4))
+ 
+ /*
+ ** svscale_z4_z4_z0:
+ **	fscale	{z4\.s - z5\.s}, {z4\.s - z5\.s}, {z0\.s - z1\.s}
+ **	ret
+ */
+ TEST_DUAL_XN (svscale_z4_z4_z0, svint32x2_t, svfloat32x2_t, z4,
+ 	      svscale_f32_x2 (z4, z0),
+ 	      svscale (z4, z0))
+ 
+ /*
+ ** svscale_z0_z28_z4:
+ ** (
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	fscale	[^\n]+, {z4\.s - z5\.s}
+ ** |
+ **	fscale	[^\n]+, {z4\.s - z5\.s}
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ ** )
+ **	ret
+ */
+ TEST_DUAL_XN (svscale_z0_z28_z4, svfloat32x2_t, svint32x2_t, z0,
+ 	      svscale_f32_x2 (z28, z4),
+ 	      svscale (z28, z4))
+ 
+ /*
+ ** svscale_z18_z18_z4:
+ **	fscale	{z18\.s - z19\.s}, {z18\.s - z19\.s}, {z4\.s - z5\.s}
+ **	ret
+ */
+ TEST_DUAL_XN (svscale_z18_z18_z4, svfloat32x2_t, svint32x2_t, z18,
+ 	      svscale_f32_x2 (z18, z4),
+ 	      svscale (z18, z4))
+ 
+ /*
+ ** svscale_z23_z23_z18:
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	fscale	[^\n]+, {z18\.s - z19\.s}
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_DUAL_XN (svscale_z23_z23_z18, svint32x2_t, svfloat32x2_t, z23,
+ 	      svscale_f32_x2 (z23, z18),
+ 	      svscale (z23, z18))
+ 
+ /*
+ ** svscale_z28_z28_z4:
+ **	fscale	{z28\.s - z29\.s}, {z28\.s - z29\.s}, {z4\.s - z5\.s}
+ **	ret
+ */
+ TEST_DUAL_XN (svscale_z28_z28_z4, svfloat32x2_t, svint32x2_t, z28,
+ 	      svscale_f32_x2 (z28, z4),
+ 	      svscale (z28, z4))
+ 
+ /*
+ ** svscale_z4_z4_z18:
+ **	fscale	{z4\.s - z5\.s}, {z4\.s - z5\.s}, {z18\.s - z19\.s}
+ **	ret
+ */
+ TEST_DUAL_XN (svscale_z4_z4_z18, svint32x2_t, svfloat32x2_t, z4,
+ 	      svscale_f32_x2 (z4, z18),
+ 	      svscale (z4, z18))
+ 
+ /*
+ ** svscale_z28_z28_z23:
+ ** (
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	fscale	{z28\.s - z29\.s}, {z28\.s - z29\.s}, [^\n]+
+ ** |
+ **	fscale	{z28\.s - z29\.s}, {z28\.s - z29\.s}, [^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ ** )
+ **	ret
+ */
+ TEST_DUAL_XN (svscale_z28_z28_z23, svfloat32x2_t, svint32x2_t, z28,
+ 	      svscale_f32_x2 (z28, z23),
+ 	      svscale (z28, z23))
+ 
+ /*
+ ** svscale_single_z24_z24_z0:
+ **	fscale	{z24\.s - z25\.s}, {z24\.s - z25\.s}, z0\.s
+ **	ret
+ */
+ TEST_XN_SINGLE (svscale_single_z24_z24_z0, svfloat32x2_t, svint32_t, z24,
+ 		svscale_single_f32_x2 (z24, z0),
+ 		svscale (z24, z0))
+ 
+ /*
+ ** svscale_single_z24_z28_z0:
+ ** (
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	fscale	{z24\.s - z25\.s}, {z24\.s - z25\.s}, z0\.s
+ ** |
+ **	fscale	{z28\.s - z29\.s}, {z28\.s - z29\.s}, z0\.s
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ ** )
+ **	ret
+ */
+ TEST_XN_SINGLE (svscale_single_z24_z28_z0, svfloat32x2_t, svint32_t, z24,
+ 		svscale_single_f32_x2 (z28, z0),
+ 		svscale (z28, z0))
+ 
+ /*
+ ** svscale_single_z24_z1_z0:
+ ** (
+ **	mov	z24\.d, z1\.d
+ **	mov	z25\.d, z2\.d
+ ** |
+ **	mov	z25\.d, z2\.d
+ **	mov	z24\.d, z1\.d
+ ** )
+ **	fscale	{z24\.s - z25\.s}, {z24\.s - z25\.s}, z0\.s
+ **	ret
+ */
+ TEST_XN_SINGLE (svscale_single_z24_z1_z0, svfloat32x2_t, svint32_t, z24,
+ 		svscale_single_f32_x2 (z1, z0),
+ 		svscale (z1, z0))
+ 
+ /*
+ ** svscale_single_z1_z24_z0:
+ **	fscale	{z24\.s - z25\.s}, {z24\.s - z25\.s}, z0\.s
+ ** (
+ **	mov	z1\.d, z24\.d
+ **	mov	z2\.d, z25\.d
+ ** |
+ **	mov	z2\.d, z25\.d
+ **	mov	z1\.d, z24\.d
+ ** )
+ **	ret
+ */
+ TEST_XN_SINGLE (svscale_single_z1_z24_z0, svfloat32x2_t, svint32_t, z1,
+ 		svscale_single_f32_x2 (z24, z0),
+ 		svscale (z24, z0))
+ 
+ /*
+ ** svscale_single_z1_z1_z0:
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	fscale	({z[0-9]+\.s - z[0-9]+\.s}), \1, z0\.s
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_XN_SINGLE (svscale_single_z1_z1_z0, svfloat32x2_t, svint32_t, z1,
+ 		svscale_single_f32_x2 (z1, z0),
+ 		svscale (z1, z0))
+ 
+ /*
+ ** svscale_single_z18_z18_z0:
+ **	fscale	{z18\.s - z19\.s}, {z18\.s - z19\.s}, z0\.s
+ **	ret
+ */
+ TEST_XN_SINGLE (svscale_single_z18_z18_z0, svfloat32x2_t, svint32_t, z18,
+ 		svscale_single_f32_x2 (z18, z0),
+ 		svscale (z18, z0))
+ 
+ /*
+ ** svscale_single_awkward:
+ **	...
+ **	fscale	({z[0-9]+\.s - z[0-9]+\.s}), \1, z[0-9]+\.s
+ **	...
+ **	ret
+ */
+ TEST_XN_SINGLE_AWKWARD (svscale_single_awkward, svfloat32x2_t, svint32_t,
+ 			z0_res = svscale_single_f32_x2 (z1, z0),
+ 			z0_res = svscale (z1, z0))
+ 
+ /*
+ ** svscale_single_z0_z0_z15:
+ **	...
+ **	fscale	{z0\.s - z1\.s}, {z0\.s - z1\.s}, z15\.s
+ **	...
+ **	ret
+ */
+ TEST_XN_SINGLE_Z15 (svscale_single_z0_z0_z15, svfloat32x2_t, svint32_t,
+ 		    z0 = svscale_single_f32_x2 (z0, z15),
+ 		    z0 = svscale (z0, z15))
+ 
+ /*
+ ** svscale_single_z24_z24_z16:
+ **	mov	(z[0-7])\.d, z16\.d
+ **	fscale	{z24\.s - z25\.s}, {z24\.s - z25\.s}, \1\.s
+ **	ret
+ */
+ TEST_XN_SINGLE (svscale_single_z24_z24_z16, svfloat32x2_t, svint32_t, z24,
+ 		svscale_single_f32_x2 (z24, z16),
+ 		svscale (z24, z16))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/scale_f32_x4.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/scale_f32_x4.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/scale_f32_x4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/scale_f32_x4.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,229 ----
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ #pragma GCC target "+fp8"
+ 
+ /*
+ ** svscale_z0_z0_z4:
+ **	fscale	{z0\.s - z3\.s}, {z0\.s - z3\.s}, {z4\.s - z7\.s}
+ **	ret
+ */
+ TEST_DUAL_XN (svscale_z0_z0_z4, svfloat32x4_t, svint32x4_t, z0,
+ 	      svscale_f32_x4 (z0, z4),
+ 	      svscale (z0, z4))
+ 
+ /*
+ ** svscale_z4_z4_z0:
+ **	fscale	{z4\.s - z7\.s}, {z4\.s - z7\.s}, {z0\.s - z3\.s}
+ **	ret
+ */
+ TEST_DUAL_XN (svscale_z4_z4_z0, svint32x4_t, svfloat32x4_t, z4,
+ 	      svscale_f32_x4 (z4, z0),
+ 	      svscale (z4, z0))
+ 
+ /*
+ ** svscale_z18_z18_z4:
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	fscale	[^\n]+, {z4\.s - z7\.s}
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_DUAL_XN (svscale_z18_z18_z4, svfloat32x4_t, svint32x4_t, z18,
+ 	      svscale_f32_x4 (z18, z4),
+ 	      svscale (z18, z4))
+ 
+ /*
+ ** svscale_z23_z23_z28:
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	fscale	[^\n]+, {z28\.s - z31\.s}
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_DUAL_XN (svscale_z23_z23_z28, svint32x4_t, svfloat32x4_t, z23,
+ 	      svscale_f32_x4 (z23, z28),
+ 	      svscale (z23, z28))
+ 
+ /*
+ ** svscale_z28_z28_z4:
+ **	fscale	{z28\.s - z31\.s}, {z28\.s - z31\.s}, {z4\.s - z7\.s}
+ **	ret
+ */
+ TEST_DUAL_XN (svscale_z28_z28_z4, svfloat32x4_t, svint32x4_t, z28,
+ 	      svscale_f32_x4 (z28, z4),
+ 	      svscale (z28, z4))
+ 
+ /*
+ ** svscale_z4_z4_z18:
+ ** (
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	fscale	{z4\.s - z7\.s}, {z4\.s - z7\.s}, [^\n]+
+ ** |
+ **	fscale	{z4\.s - z7\.s}, {z4\.s - z7\.s}, [^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ ** )
+ **	ret
+ */
+ TEST_DUAL_XN (svscale_z4_z4_z18, svint32x4_t, svfloat32x4_t, z4,
+ 	      svscale_f32_x4 (z4, z18),
+ 	      svscale (z4, z18))
+ 
+ /*
+ ** svscale_z0_z0_z23:
+ ** (
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	fscale	{z0\.s - z3\.s}, {z0\.s - z3\.s}, [^\n]+
+ ** |
+ **	fscale	{z0\.s - z3\.s}, {z0\.s - z3\.s}, [^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ ** )
+ **	ret
+ */
+ TEST_DUAL_XN (svscale_z0_z0_z23, svfloat32x4_t, svint32x4_t, z0,
+ 	      svscale_f32_x4 (z0, z23),
+ 	      svscale (z0, z23))
+ 
+ /*
+ ** svscale_single_z24_z24_z0:
+ **	fscale	{z24\.s - z27\.s}, {z24\.s - z27\.s}, z0\.s
+ **	ret
+ */
+ TEST_XN_SINGLE (svscale_single_z24_z24_z0, svfloat32x4_t, svint32_t, z24,
+ 		svscale_single_f32_x4 (z24, z0),
+ 		svscale (z24, z0))
+ 
+ /*
+ ** svscale_single_z24_z28_z0:
+ ** (
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	fscale	{z24\.s - z27\.s}, {z24\.s - z27\.s}, z0\.s
+ ** |
+ **	fscale	{z28\.s - z31\.s}, {z28\.s - z31\.s}, z0\.s
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ ** )
+ **	ret
+ */
+ TEST_XN_SINGLE (svscale_single_z24_z28_z0, svfloat32x4_t, svint32_t, z24,
+ 		svscale_single_f32_x4 (z28, z0),
+ 		svscale (z28, z0))
+ 
+ /*
+ ** svscale_single_z24_z1_z0:
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	fscale	{z24\.s - z27\.s}, {z24\.s - z27\.s}, z0\.s
+ **	ret
+ */
+ TEST_XN_SINGLE (svscale_single_z24_z1_z0, svfloat32x4_t, svint32_t, z24,
+ 		svscale_single_f32_x4 (z1, z0),
+ 		svscale (z1, z0))
+ 
+ /*
+ ** svscale_single_z1_z24_z0:
+ **	fscale	{z24\.s - z27\.s}, {z24\.s - z27\.s}, z0\.s
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_XN_SINGLE (svscale_single_z1_z24_z0, svfloat32x4_t, svint32_t, z1,
+ 		svscale_single_f32_x4 (z24, z0),
+ 		svscale (z24, z0))
+ 
+ /*
+ ** svscale_single_z1_z1_z0:
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	fscale	({z[0-9]+\.s - z[0-9]+\.s}), \1, z0\.s
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_XN_SINGLE (svscale_single_z1_z1_z0, svfloat32x4_t, svint32_t, z1,
+ 		svscale_single_f32_x4 (z1, z0),
+ 		svscale (z1, z0))
+ 
+ /*
+ ** svscale_single_z18_z18_z0:
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	fscale	[^\n]+, z0\.s
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_XN_SINGLE (svscale_single_z18_z18_z0, svfloat32x4_t, svint32_t, z18,
+ 		svscale_single_f32_x4 (z18, z0),
+ 		svscale (z18, z0))
+ 
+ /*
+ ** svscale_single_awkward:
+ **	...
+ **	fscale	({z[0-9]+\.s - z[0-9]+\.s}), \1, z[0-9]+\.s
+ **	...
+ **	ret
+ */
+ TEST_XN_SINGLE_AWKWARD (svscale_single_awkward, svfloat32x4_t, svint32_t,
+ 			z0_res = svscale_single_f32_x4 (z1, z0),
+ 			z0_res = svscale (z1, z0))
+ 
+ /*
+ ** svscale_single_z0_z0_z15:
+ **	...
+ **	fscale	{z0\.s - z3\.s}, {z0\.s - z3\.s}, z15\.s
+ **	...
+ **	ret
+ */
+ TEST_XN_SINGLE_Z15 (svscale_single_z0_z0_z15, svfloat32x4_t, svint32_t,
+ 		    z0 = svscale_single_f32_x4 (z0, z15),
+ 		    z0 = svscale (z0, z15))
+ 
+ /*
+ ** svscale_single_z24_z24_z16:
+ **	mov	(z[0-7])\.d, z16\.d
+ **	fscale	{z24\.s - z27\.s}, {z24\.s - z27\.s}, \1\.s
+ **	ret
+ */
+ TEST_XN_SINGLE (svscale_single_z24_z24_z16, svfloat32x4_t, svint32_t, z24,
+ 		svscale_single_f32_x4 (z24, z16),
+ 		svscale (z24, z16))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/scale_f64_x2.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/scale_f64_x2.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/scale_f64_x2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/scale_f64_x2.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,208 ----
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ #pragma GCC target "+fp8"
+ 
+ /*
+ ** svscale_z0_z0_z4:
+ **	fscale	{z0\.d - z1\.d}, {z0\.d - z1\.d}, {z4\.d - z5\.d}
+ **	ret
+ */
+ TEST_DUAL_XN (svscale_z0_z0_z4, svfloat64x2_t, svint64x2_t, z0,
+ 	      svscale_f64_x2 (z0, z4),
+ 	      svscale (z0, z4))
+ 
+ /*
+ ** svscale_z4_z4_z0:
+ **	fscale	{z4\.d - z5\.d}, {z4\.d - z5\.d}, {z0\.d - z1\.d}
+ **	ret
+ */
+ TEST_DUAL_XN (svscale_z4_z4_z0, svint64x2_t, svfloat64x2_t, z4,
+ 	      svscale_f64_x2 (z4, z0),
+ 	      svscale (z4, z0))
+ 
+ /*
+ ** svscale_z0_z28_z4:
+ ** (
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	fscale	[^\n]+, {z4\.d - z5\.d}
+ ** |
+ **	fscale	[^\n]+, {z4\.d - z5\.d}
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ ** )
+ **	ret
+ */
+ TEST_DUAL_XN (svscale_z0_z28_z4, svfloat64x2_t, svint64x2_t, z0,
+ 	      svscale_f64_x2 (z28, z4),
+ 	      svscale (z28, z4))
+ 
+ /*
+ ** svscale_z18_z18_z4:
+ **	fscale	{z18\.d - z19\.d}, {z18\.d - z19\.d}, {z4\.d - z5\.d}
+ **	ret
+ */
+ TEST_DUAL_XN (svscale_z18_z18_z4, svfloat64x2_t, svint64x2_t, z18,
+ 	      svscale_f64_x2 (z18, z4),
+ 	      svscale (z18, z4))
+ 
+ /*
+ ** svscale_z23_z23_z18:
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	fscale	[^\n]+, {z18\.d - z19\.d}
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_DUAL_XN (svscale_z23_z23_z18, svint64x2_t, svfloat64x2_t, z23,
+ 	      svscale_f64_x2 (z23, z18),
+ 	      svscale (z23, z18))
+ 
+ /*
+ ** svscale_z28_z28_z4:
+ **	fscale	{z28\.d - z29\.d}, {z28\.d - z29\.d}, {z4\.d - z5\.d}
+ **	ret
+ */
+ TEST_DUAL_XN (svscale_z28_z28_z4, svfloat64x2_t, svint64x2_t, z28,
+ 	      svscale_f64_x2 (z28, z4),
+ 	      svscale (z28, z4))
+ 
+ /*
+ ** svscale_z4_z4_z18:
+ **	fscale	{z4\.d - z5\.d}, {z4\.d - z5\.d}, {z18\.d - z19\.d}
+ **	ret
+ */
+ TEST_DUAL_XN (svscale_z4_z4_z18, svint64x2_t, svfloat64x2_t, z4,
+ 	      svscale_f64_x2 (z4, z18),
+ 	      svscale (z4, z18))
+ 
+ /*
+ ** svscale_z28_z28_z23:
+ ** (
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	fscale	{z28\.d - z29\.d}, {z28\.d - z29\.d}, [^\n]+
+ ** |
+ **	fscale	{z28\.d - z29\.d}, {z28\.d - z29\.d}, [^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ ** )
+ **	ret
+ */
+ TEST_DUAL_XN (svscale_z28_z28_z23, svfloat64x2_t, svint64x2_t, z28,
+ 	      svscale_f64_x2 (z28, z23),
+ 	      svscale (z28, z23))
+ 
+ /*
+ ** svscale_single_z24_z24_z0:
+ **	fscale	{z24\.d - z25\.d}, {z24\.d - z25\.d}, z0\.d
+ **	ret
+ */
+ TEST_XN_SINGLE (svscale_single_z24_z24_z0, svfloat64x2_t, svint64_t, z24,
+ 		svscale_single_f64_x2 (z24, z0),
+ 		svscale (z24, z0))
+ 
+ /*
+ ** svscale_single_z24_z28_z0:
+ ** (
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	fscale	{z24\.d - z25\.d}, {z24\.d - z25\.d}, z0\.d
+ ** |
+ **	fscale	{z28\.d - z29\.d}, {z28\.d - z29\.d}, z0\.d
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ ** )
+ **	ret
+ */
+ TEST_XN_SINGLE (svscale_single_z24_z28_z0, svfloat64x2_t, svint64_t, z24,
+ 		svscale_single_f64_x2 (z28, z0),
+ 		svscale (z28, z0))
+ 
+ /*
+ ** svscale_single_z24_z1_z0:
+ ** (
+ **	mov	z24\.d, z1\.d
+ **	mov	z25\.d, z2\.d
+ ** |
+ **	mov	z25\.d, z2\.d
+ **	mov	z24\.d, z1\.d
+ ** )
+ **	fscale	{z24\.d - z25\.d}, {z24\.d - z25\.d}, z0\.d
+ **	ret
+ */
+ TEST_XN_SINGLE (svscale_single_z24_z1_z0, svfloat64x2_t, svint64_t, z24,
+ 		svscale_single_f64_x2 (z1, z0),
+ 		svscale (z1, z0))
+ 
+ /*
+ ** svscale_single_z1_z24_z0:
+ **	fscale	{z24\.d - z25\.d}, {z24\.d - z25\.d}, z0\.d
+ ** (
+ **	mov	z1\.d, z24\.d
+ **	mov	z2\.d, z25\.d
+ ** |
+ **	mov	z2\.d, z25\.d
+ **	mov	z1\.d, z24\.d
+ ** )
+ **	ret
+ */
+ TEST_XN_SINGLE (svscale_single_z1_z24_z0, svfloat64x2_t, svint64_t, z1,
+ 		svscale_single_f64_x2 (z24, z0),
+ 		svscale (z24, z0))
+ 
+ /*
+ ** svscale_single_z1_z1_z0:
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	fscale	({z[0-9]+\.d - z[0-9]+\.d}), \1, z0\.d
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_XN_SINGLE (svscale_single_z1_z1_z0, svfloat64x2_t, svint64_t, z1,
+ 		svscale_single_f64_x2 (z1, z0),
+ 		svscale (z1, z0))
+ 
+ /*
+ ** svscale_single_z18_z18_z0:
+ **	fscale	{z18\.d - z19\.d}, {z18\.d - z19\.d}, z0\.d
+ **	ret
+ */
+ TEST_XN_SINGLE (svscale_single_z18_z18_z0, svfloat64x2_t, svint64_t, z18,
+ 		svscale_single_f64_x2 (z18, z0),
+ 		svscale (z18, z0))
+ 
+ /*
+ ** svscale_single_awkward:
+ **	...
+ **	fscale	({z[0-9]+\.d - z[0-9]+\.d}), \1, z[0-9]+\.d
+ **	...
+ **	ret
+ */
+ TEST_XN_SINGLE_AWKWARD (svscale_single_awkward, svfloat64x2_t, svint64_t,
+ 			z0_res = svscale_single_f64_x2 (z1, z0),
+ 			z0_res = svscale (z1, z0))
+ 
+ /*
+ ** svscale_single_z0_z0_z15:
+ **	...
+ **	fscale	{z0\.d - z1\.d}, {z0\.d - z1\.d}, z15\.d
+ **	...
+ **	ret
+ */
+ TEST_XN_SINGLE_Z15 (svscale_single_z0_z0_z15, svfloat64x2_t, svint64_t,
+ 		    z0 = svscale_single_f64_x2 (z0, z15),
+ 		    z0 = svscale (z0, z15))
+ 
+ /*
+ ** svscale_single_z24_z24_z16:
+ **	mov	(z[0-7])\.d, z16\.d
+ **	fscale	{z24\.d - z25\.d}, {z24\.d - z25\.d}, \1\.d
+ **	ret
+ */
+ TEST_XN_SINGLE (svscale_single_z24_z24_z16, svfloat64x2_t, svint64_t, z24,
+ 		svscale_single_f64_x2 (z24, z16),
+ 		svscale (z24, z16))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/scale_f64_x4.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/scale_f64_x4.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/scale_f64_x4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/scale_f64_x4.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,229 ----
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ #pragma GCC target "+fp8"
+ 
+ /*
+ ** svscale_z0_z0_z4:
+ **	fscale	{z0\.d - z3\.d}, {z0\.d - z3\.d}, {z4\.d - z7\.d}
+ **	ret
+ */
+ TEST_DUAL_XN (svscale_z0_z0_z4, svfloat64x4_t, svint64x4_t, z0,
+ 	      svscale_f64_x4 (z0, z4),
+ 	      svscale (z0, z4))
+ 
+ /*
+ ** svscale_z4_z4_z0:
+ **	fscale	{z4\.d - z7\.d}, {z4\.d - z7\.d}, {z0\.d - z3\.d}
+ **	ret
+ */
+ TEST_DUAL_XN (svscale_z4_z4_z0, svint64x4_t, svfloat64x4_t, z4,
+ 	      svscale_f64_x4 (z4, z0),
+ 	      svscale (z4, z0))
+ 
+ /*
+ ** svscale_z18_z18_z4:
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	fscale	[^\n]+, {z4\.d - z7\.d}
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_DUAL_XN (svscale_z18_z18_z4, svfloat64x4_t, svint64x4_t, z18,
+ 	      svscale_f64_x4 (z18, z4),
+ 	      svscale (z18, z4))
+ 
+ /*
+ ** svscale_z23_z23_z28:
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	fscale	[^\n]+, {z28\.d - z31\.d}
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_DUAL_XN (svscale_z23_z23_z28, svint64x4_t, svfloat64x4_t, z23,
+ 	      svscale_f64_x4 (z23, z28),
+ 	      svscale (z23, z28))
+ 
+ /*
+ ** svscale_z28_z28_z4:
+ **	fscale	{z28\.d - z31\.d}, {z28\.d - z31\.d}, {z4\.d - z7\.d}
+ **	ret
+ */
+ TEST_DUAL_XN (svscale_z28_z28_z4, svfloat64x4_t, svint64x4_t, z28,
+ 	      svscale_f64_x4 (z28, z4),
+ 	      svscale (z28, z4))
+ 
+ /*
+ ** svscale_z4_z4_z18:
+ ** (
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	fscale	{z4\.d - z7\.d}, {z4\.d - z7\.d}, [^\n]+
+ ** |
+ **	fscale	{z4\.d - z7\.d}, {z4\.d - z7\.d}, [^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ ** )
+ **	ret
+ */
+ TEST_DUAL_XN (svscale_z4_z4_z18, svint64x4_t, svfloat64x4_t, z4,
+ 	      svscale_f64_x4 (z4, z18),
+ 	      svscale (z4, z18))
+ 
+ /*
+ ** svscale_z0_z0_z23:
+ ** (
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	fscale	{z0\.d - z3\.d}, {z0\.d - z3\.d}, [^\n]+
+ ** |
+ **	fscale	{z0\.d - z3\.d}, {z0\.d - z3\.d}, [^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ ** )
+ **	ret
+ */
+ TEST_DUAL_XN (svscale_z0_z0_z23, svfloat64x4_t, svint64x4_t, z0,
+ 	      svscale_f64_x4 (z0, z23),
+ 	      svscale (z0, z23))
+ 
+ /*
+ ** svscale_single_z24_z24_z0:
+ **	fscale	{z24\.d - z27\.d}, {z24\.d - z27\.d}, z0\.d
+ **	ret
+ */
+ TEST_XN_SINGLE (svscale_single_z24_z24_z0, svfloat64x4_t, svint64_t, z24,
+ 		svscale_single_f64_x4 (z24, z0),
+ 		svscale (z24, z0))
+ 
+ /*
+ ** svscale_single_z24_z28_z0:
+ ** (
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	fscale	{z24\.d - z27\.d}, {z24\.d - z27\.d}, z0\.d
+ ** |
+ **	fscale	{z28\.d - z31\.d}, {z28\.d - z31\.d}, z0\.d
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ ** )
+ **	ret
+ */
+ TEST_XN_SINGLE (svscale_single_z24_z28_z0, svfloat64x4_t, svint64_t, z24,
+ 		svscale_single_f64_x4 (z28, z0),
+ 		svscale (z28, z0))
+ 
+ /*
+ ** svscale_single_z24_z1_z0:
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	fscale	{z24\.d - z27\.d}, {z24\.d - z27\.d}, z0\.d
+ **	ret
+ */
+ TEST_XN_SINGLE (svscale_single_z24_z1_z0, svfloat64x4_t, svint64_t, z24,
+ 		svscale_single_f64_x4 (z1, z0),
+ 		svscale (z1, z0))
+ 
+ /*
+ ** svscale_single_z1_z24_z0:
+ **	fscale	{z24\.d - z27\.d}, {z24\.d - z27\.d}, z0\.d
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_XN_SINGLE (svscale_single_z1_z24_z0, svfloat64x4_t, svint64_t, z1,
+ 		svscale_single_f64_x4 (z24, z0),
+ 		svscale (z24, z0))
+ 
+ /*
+ ** svscale_single_z1_z1_z0:
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	fscale	({z[0-9]+\.d - z[0-9]+\.d}), \1, z0\.d
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_XN_SINGLE (svscale_single_z1_z1_z0, svfloat64x4_t, svint64_t, z1,
+ 		svscale_single_f64_x4 (z1, z0),
+ 		svscale (z1, z0))
+ 
+ /*
+ ** svscale_single_z18_z18_z0:
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	fscale	[^\n]+, z0\.d
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_XN_SINGLE (svscale_single_z18_z18_z0, svfloat64x4_t, svint64_t, z18,
+ 		svscale_single_f64_x4 (z18, z0),
+ 		svscale (z18, z0))
+ 
+ /*
+ ** svscale_single_awkward:
+ **	...
+ **	fscale	({z[0-9]+\.d - z[0-9]+\.d}), \1, z[0-9]+\.d
+ **	...
+ **	ret
+ */
+ TEST_XN_SINGLE_AWKWARD (svscale_single_awkward, svfloat64x4_t, svint64_t,
+ 			z0_res = svscale_single_f64_x4 (z1, z0),
+ 			z0_res = svscale (z1, z0))
+ 
+ /*
+ ** svscale_single_z0_z0_z15:
+ **	...
+ **	fscale	{z0\.d - z3\.d}, {z0\.d - z3\.d}, z15\.d
+ **	...
+ **	ret
+ */
+ TEST_XN_SINGLE_Z15 (svscale_single_z0_z0_z15, svfloat64x4_t, svint64_t,
+ 		    z0 = svscale_single_f64_x4 (z0, z15),
+ 		    z0 = svscale (z0, z15))
+ 
+ /*
+ ** svscale_single_z24_z24_z16:
+ **	mov	(z[0-7])\.d, z16\.d
+ **	fscale	{z24\.d - z27\.d}, {z24\.d - z27\.d}, \1\.d
+ **	ret
+ */
+ TEST_XN_SINGLE (svscale_single_z24_z24_z16, svfloat64x4_t, svint64_t, z24,
+ 		svscale_single_f64_x4 (z24, z16),
+ 		svscale (z24, z16))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/sel_mf8_x2.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/sel_mf8_x2.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/sel_mf8_x2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/sel_mf8_x2.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,92 ----
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ 
+ /*
+ ** sel_z0_pn0_z0_z4:
+ **	mov	p([0-9]+)\.b, p0\.b
+ **	sel	{z0\.b - z1\.b}, pn\1, {z0\.b - z1\.b}, {z4\.b - z5\.b}
+ **	ret
+ */
+ TEST_XN (sel_z0_pn0_z0_z4, svmfloat8x2_t, z0,
+ 	 svsel_mf8_x2 (pn0, z0, z4),
+ 	 svsel (pn0, z0, z4))
+ 
+ /*
+ ** sel_z0_pn7_z0_z4:
+ **	mov	p([0-9]+)\.b, p7\.b
+ **	sel	{z0\.b - z1\.b}, pn\1, {z0\.b - z1\.b}, {z4\.b - z5\.b}
+ **	ret
+ */
+ TEST_XN (sel_z0_pn7_z0_z4, svmfloat8x2_t, z0,
+ 	 svsel_mf8_x2 (pn7, z0, z4),
+ 	 svsel (pn7, z0, z4))
+ 
+ /*
+ ** sel_z0_pn8_z4_z28:
+ **	sel	{z0\.b - z1\.b}, pn8, {z4\.b - z5\.b}, {z28\.b - z29\.b}
+ **	ret
+ */
+ TEST_XN (sel_z0_pn8_z4_z28, svmfloat8x2_t, z0,
+ 	 svsel_mf8_x2 (pn8, z4, z28),
+ 	 svsel (pn8, z4, z28))
+ 
+ /*
+ ** sel_z4_pn8_z18_z0:
+ **	sel	{z4\.b - z5\.b}, pn8, {z18\.b - z19\.b}, {z0\.b - z1\.b}
+ **	ret
+ */
+ TEST_XN (sel_z4_pn8_z18_z0, svmfloat8x2_t, z4,
+ 	 svsel_mf8_x2 (pn8, z18, z0),
+ 	 svsel (pn8, z18, z0))
+ 
+ /*
+ ** sel_z18_pn15_z28_z4:
+ **	sel	{z18\.b - z19\.b}, pn15, {z28\.b - z29\.b}, {z4\.b - z5\.b}
+ **	ret
+ */
+ TEST_XN (sel_z18_pn15_z28_z4, svmfloat8x2_t, z18,
+ 	 svsel_mf8_x2 (pn15, z28, z4),
+ 	 svsel (pn15, z28, z4))
+ 
+ /*
+ ** sel_z18_pn8_z18_z4:
+ **	sel	{z18\.b - z19\.b}, pn8, {z18\.b - z19\.b}, {z4\.b - z5\.b}
+ **	ret
+ */
+ TEST_XN (sel_z18_pn8_z18_z4, svmfloat8x2_t, z18,
+ 	 svsel_mf8_x2 (pn8, z18, z4),
+ 	 svsel (pn8, z18, z4))
+ 
+ /*
+ ** sel_z23_pn15_z0_z18:
+ **	sel	[^\n]+, pn15, {z0\.b - z1\.b}, {z18\.b - z19\.b}
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_XN (sel_z23_pn15_z0_z18, svmfloat8x2_t, z23,
+ 	 svsel_mf8_x2 (pn15, z0, z18),
+ 	 svsel (pn15, z0, z18))
+ 
+ /*
+ ** sel_z0_pn15_z23_z28:
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	sel	{z0\.b - z1\.b}, pn15, {[^}]+}, {z28\.b - z29\.b}
+ **	ret
+ */
+ TEST_XN (sel_z0_pn15_z23_z28, svmfloat8x2_t, z0,
+ 	 svsel_mf8_x2 (pn15, z23, z28),
+ 	 svsel (pn15, z23, z28))
+ 
+ /*
+ ** sel_z0_pn8_z28_z23:
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	sel	{z0\.b - z1\.b}, pn8, {z28\.b - z29\.b}, {[^}]+}
+ **	ret
+ */
+ TEST_XN (sel_z0_pn8_z28_z23, svmfloat8x2_t, z0,
+ 	 svsel_mf8_x2 (pn8, z28, z23),
+ 	 svsel (pn8, z28, z23))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/sel_mf8_x4.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/sel_mf8_x4.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/sel_mf8_x4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/sel_mf8_x4.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,92 ----
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ 
+ /*
+ ** sel_z0_pn0_z0_z4:
+ **	mov	p([0-9]+)\.b, p0\.b
+ **	sel	{z0\.b - z3\.b}, pn\1, {z0\.b - z3\.b}, {z4\.b - z7\.b}
+ **	ret
+ */
+ TEST_XN (sel_z0_pn0_z0_z4, svmfloat8x4_t, z0,
+ 	 svsel_mf8_x4 (pn0, z0, z4),
+ 	 svsel (pn0, z0, z4))
+ 
+ /*
+ ** sel_z0_pn7_z0_z4:
+ **	mov	p([0-9]+)\.b, p7\.b
+ **	sel	{z0\.b - z3\.b}, pn\1, {z0\.b - z3\.b}, {z4\.b - z7\.b}
+ **	ret
+ */
+ TEST_XN (sel_z0_pn7_z0_z4, svmfloat8x4_t, z0,
+ 	 svsel_mf8_x4 (pn7, z0, z4),
+ 	 svsel (pn7, z0, z4))
+ 
+ /*
+ ** sel_z0_pn8_z4_z28:
+ **	sel	{z0\.b - z3\.b}, pn8, {z4\.b - z7\.b}, {z28\.b - z31\.b}
+ **	ret
+ */
+ TEST_XN (sel_z0_pn8_z4_z28, svmfloat8x4_t, z0,
+ 	 svsel_mf8_x4 (pn8, z4, z28),
+ 	 svsel (pn8, z4, z28))
+ 
+ /*
+ ** sel_z4_pn8_z18_z0:
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	sel	{z4\.b - z7\.b}, pn8, {[^}]+}, {z0\.b - z3\.b}
+ **	ret
+ */
+ TEST_XN (sel_z4_pn8_z18_z0, svmfloat8x4_t, z4,
+ 	 svsel_mf8_x4 (pn8, z18, z0),
+ 	 svsel (pn8, z18, z0))
+ 
+ /*
+ ** sel_z18_pn15_z28_z4:
+ **	sel	{[^}]+}, pn15, {z28\.b - z31\.b}, {z4\.b - z7\.b}
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_XN (sel_z18_pn15_z28_z4, svmfloat8x4_t, z18,
+ 	 svsel_mf8_x4 (pn15, z28, z4),
+ 	 svsel (pn15, z28, z4))
+ 
+ /*
+ ** sel_z18_pn8_z18_z4:
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	sel	{[^}]+}, pn8, {[^}]+}, {z4\.b - z7\.b}
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_XN (sel_z18_pn8_z18_z4, svmfloat8x4_t, z18,
+ 	 svsel_mf8_x4 (pn8, z18, z4),
+ 	 svsel (pn8, z18, z4))
+ 
+ /*
+ ** sel_z23_pn15_z0_z18:
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	sel	[^\n]+, pn15, {z0\.b - z3\.b}, {[^}]+}
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_XN (sel_z23_pn15_z0_z18, svmfloat8x4_t, z23,
+ 	 svsel_mf8_x4 (pn15, z0, z18),
+ 	 svsel (pn15, z0, z18))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/st1_mf8_x2.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/st1_mf8_x2.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/st1_mf8_x2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/st1_mf8_x2.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,262 ----
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" { target { ! ilp32 } } } } */
+ 
+ #include "test_sme2_acle.h"
+ 
+ /*
+ ** st1_mf8_base:
+ **	st1b	{z0\.b(?: - |, )z1\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (st1_mf8_base, svmfloat8x2_t, mfloat8_t,
+ 		  svst1_mf8_x2 (pn8, x0, z0),
+ 		  svst1 (pn8, x0, z0))
+ 
+ /*
+ ** st1_mf8_index:
+ **	st1b	{z0\.b(?: - |, )z1\.b}, pn8, \[x0, x1\]
+ **	ret
+ */
+ TEST_STORE_COUNT (st1_mf8_index, svmfloat8x2_t, mfloat8_t,
+ 		  svst1_mf8_x2 (pn8, x0 + x1, z0),
+ 		  svst1 (pn8, x0 + x1, z0))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** st1_mf8_1:
+ **	incb	x0
+ **	st1b	{z0\.b(?: - |, )z1\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (st1_mf8_1, svmfloat8x2_t, mfloat8_t,
+ 		  svst1_mf8_x2 (pn8, x0 + svcntb (), z0),
+ 		  svst1 (pn8, x0 + svcntb (), z0))
+ 
+ /*
+ ** st1_mf8_2:
+ **	st1b	{z0\.b(?: - |, )z1\.b}, pn8, \[x0, #2, mul vl\]
+ **	ret
+ */
+ TEST_STORE_COUNT (st1_mf8_2, svmfloat8x2_t, mfloat8_t,
+ 		  svst1_mf8_x2 (pn8, x0 + svcntb () * 2, z0),
+ 		  svst1 (pn8, x0 + svcntb () * 2, z0))
+ 
+ /*
+ ** st1_mf8_14:
+ **	st1b	{z0\.b(?: - |, )z1\.b}, pn8, \[x0, #14, mul vl\]
+ **	ret
+ */
+ TEST_STORE_COUNT (st1_mf8_14, svmfloat8x2_t, mfloat8_t,
+ 		  svst1_mf8_x2 (pn8, x0 + svcntb () * 14, z0),
+ 		  svst1 (pn8, x0 + svcntb () * 14, z0))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** st1_mf8_16:
+ **	incb	x0, all, mul #16
+ **	st1b	{z0\.b(?: - |, )z1\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (st1_mf8_16, svmfloat8x2_t, mfloat8_t,
+ 		  svst1_mf8_x2 (pn8, x0 + svcntb () * 16, z0),
+ 		  svst1 (pn8, x0 + svcntb () * 16, z0))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** st1_mf8_m1:
+ **	decb	x0
+ **	st1b	{z0\.b(?: - |, )z1\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (st1_mf8_m1, svmfloat8x2_t, mfloat8_t,
+ 		  svst1_mf8_x2 (pn8, x0 - svcntb (), z0),
+ 		  svst1 (pn8, x0 - svcntb (), z0))
+ 
+ /*
+ ** st1_mf8_m2:
+ **	st1b	{z0\.b(?: - |, )z1\.b}, pn8, \[x0, #-2, mul vl\]
+ **	ret
+ */
+ TEST_STORE_COUNT (st1_mf8_m2, svmfloat8x2_t, mfloat8_t,
+ 		  svst1_mf8_x2 (pn8, x0 - svcntb () * 2, z0),
+ 		  svst1 (pn8, x0 - svcntb () * 2, z0))
+ 
+ /*
+ ** st1_mf8_m16:
+ **	st1b	{z0\.b(?: - |, )z1\.b}, pn8, \[x0, #-16, mul vl\]
+ **	ret
+ */
+ TEST_STORE_COUNT (st1_mf8_m16, svmfloat8x2_t, mfloat8_t,
+ 		  svst1_mf8_x2 (pn8, x0 - svcntb () * 16, z0),
+ 		  svst1 (pn8, x0 - svcntb () * 16, z0))
+ 
+ /*
+ ** st1_mf8_m18:
+ **	addvl	(x[0-9]+), x0, #-18
+ **	st1b	{z0\.b(?: - |, )z1\.b}, pn8, \[\1\]
+ **	ret
+ */
+ TEST_STORE_COUNT (st1_mf8_m18, svmfloat8x2_t, mfloat8_t,
+ 		  svst1_mf8_x2 (pn8, x0 - svcntb () * 18, z0),
+ 		  svst1 (pn8, x0 - svcntb () * 18, z0))
+ 
+ /*
+ ** st1_mf8_z17:
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	st1b	{z[^\n]+}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (st1_mf8_z17, svmfloat8x2_t, mfloat8_t,
+ 		  svst1_mf8_x2 (pn8, x0, z17),
+ 		  svst1 (pn8, x0, z17))
+ 
+ /*
+ ** st1_mf8_z22:
+ **	st1b	{z22\.b(?: - |, )z23\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (st1_mf8_z22, svmfloat8x2_t, mfloat8_t,
+ 		  svst1_mf8_x2 (pn8, x0, z22),
+ 		  svst1 (pn8, x0, z22))
+ 
+ /*
+ ** st1_mf8_z28:
+ **	st1b	{z28\.b(?: - |, )z29\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (st1_mf8_z28, svmfloat8x2_t, mfloat8_t,
+ 		  svst1_mf8_x2 (pn8, x0, z28),
+ 		  svst1 (pn8, x0, z28))
+ 
+ /*
+ ** st1_mf8_pn0:
+ **	mov	p([89]|1[0-5])\.b, p0\.b
+ **	st1b	{z0\.b(?: - |, )z1\.b}, pn\1, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (st1_mf8_pn0, svmfloat8x2_t, mfloat8_t,
+ 		  svst1_mf8_x2 (pn0, x0, z0),
+ 		  svst1 (pn0, x0, z0))
+ 
+ /*
+ ** st1_mf8_pn7:
+ **	mov	p([89]|1[0-5])\.b, p7\.b
+ **	st1b	{z0\.b(?: - |, )z1\.b}, pn\1, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (st1_mf8_pn7, svmfloat8x2_t, mfloat8_t,
+ 		  svst1_mf8_x2 (pn7, x0, z0),
+ 		  svst1 (pn7, x0, z0))
+ 
+ /*
+ ** st1_mf8_pn15:
+ **	st1b	{z0\.b(?: - |, )z1\.b}, pn15, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (st1_mf8_pn15, svmfloat8x2_t, mfloat8_t,
+ 		  svst1_mf8_x2 (pn15, x0, z0),
+ 		  svst1 (pn15, x0, z0))
+ 
+ /*
+ ** st1_vnum_mf8_0:
+ **	st1b	{z0\.b(?: - |, )z1\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (st1_vnum_mf8_0, svmfloat8x2_t, mfloat8_t,
+ 		  svst1_vnum_mf8_x2 (pn8, x0, 0, z0),
+ 		  svst1_vnum (pn8, x0, 0, z0))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** st1_vnum_mf8_1:
+ **	incb	x0
+ **	st1b	{z0\.b(?: - |, )z1\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (st1_vnum_mf8_1, svmfloat8x2_t, mfloat8_t,
+ 		  svst1_vnum_mf8_x2 (pn8, x0, 1, z0),
+ 		  svst1_vnum (pn8, x0, 1, z0))
+ 
+ /*
+ ** st1_vnum_mf8_2:
+ **	st1b	{z0\.b(?: - |, )z1\.b}, pn8, \[x0, #2, mul vl\]
+ **	ret
+ */
+ TEST_STORE_COUNT (st1_vnum_mf8_2, svmfloat8x2_t, mfloat8_t,
+ 		  svst1_vnum_mf8_x2 (pn8, x0, 2, z0),
+ 		  svst1_vnum (pn8, x0, 2, z0))
+ 
+ /*
+ ** st1_vnum_mf8_14:
+ **	st1b	{z0\.b(?: - |, )z1\.b}, pn8, \[x0, #14, mul vl\]
+ **	ret
+ */
+ TEST_STORE_COUNT (st1_vnum_mf8_14, svmfloat8x2_t, mfloat8_t,
+ 		  svst1_vnum_mf8_x2 (pn8, x0, 14, z0),
+ 		  svst1_vnum (pn8, x0, 14, z0))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** st1_vnum_mf8_16:
+ **	incb	x0, all, mul #16
+ **	st1b	{z0\.b(?: - |, )z1\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (st1_vnum_mf8_16, svmfloat8x2_t, mfloat8_t,
+ 		  svst1_vnum_mf8_x2 (pn8, x0, 16, z0),
+ 		  svst1_vnum (pn8, x0, 16, z0))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** st1_vnum_mf8_m1:
+ **	decb	x0
+ **	st1b	{z0\.b(?: - |, )z1\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (st1_vnum_mf8_m1, svmfloat8x2_t, mfloat8_t,
+ 		  svst1_vnum_mf8_x2 (pn8, x0, -1, z0),
+ 		  svst1_vnum (pn8, x0, -1, z0))
+ 
+ /*
+ ** st1_vnum_mf8_m2:
+ **	st1b	{z0\.b(?: - |, )z1\.b}, pn8, \[x0, #-2, mul vl\]
+ **	ret
+ */
+ TEST_STORE_COUNT (st1_vnum_mf8_m2, svmfloat8x2_t, mfloat8_t,
+ 		  svst1_vnum_mf8_x2 (pn8, x0, -2, z0),
+ 		  svst1_vnum (pn8, x0, -2, z0))
+ 
+ /*
+ ** st1_vnum_mf8_m16:
+ **	st1b	{z0\.b(?: - |, )z1\.b}, pn8, \[x0, #-16, mul vl\]
+ **	ret
+ */
+ TEST_STORE_COUNT (st1_vnum_mf8_m16, svmfloat8x2_t, mfloat8_t,
+ 		  svst1_vnum_mf8_x2 (pn8, x0, -16, z0),
+ 		  svst1_vnum (pn8, x0, -16, z0))
+ 
+ /*
+ ** st1_vnum_mf8_m18:
+ **	addvl	(x[0-9]+), x0, #-18
+ **	st1b	{z0\.b(?: - |, )z1\.b}, pn8, \[\1\]
+ **	ret
+ */
+ TEST_STORE_COUNT (st1_vnum_mf8_m18, svmfloat8x2_t, mfloat8_t,
+ 		  svst1_vnum_mf8_x2 (pn8, x0, -18, z0),
+ 		  svst1_vnum (pn8, x0, -18, z0))
+ 
+ /*
+ ** st1_vnum_mf8_x1:
+ **	cntb	(x[0-9]+)
+ ** (
+ **	madd	(x[0-9]+), (?:x1, \1|\1, x1), x0
+ **	st1b	{z0\.b(?: - |, )z1\.b}, pn8, \[\2\]
+ ** |
+ **	mul	(x[0-9]+), (?:x1, \1|\1, x1)
+ **	st1b	{z0\.b(?: - |, )z1\.b}, pn8, \[x0, \3\]
+ ** )
+ **	ret
+ */
+ TEST_STORE_COUNT (st1_vnum_mf8_x1, svmfloat8x2_t, mfloat8_t,
+ 		  svst1_vnum_mf8_x2 (pn8, x0, x1, z0),
+ 		  svst1_vnum (pn8, x0, x1, z0))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/st1_mf8_x4.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/st1_mf8_x4.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/st1_mf8_x4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/st1_mf8_x4.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,354 ----
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" { target { ! ilp32 } } } } */
+ 
+ #include "test_sme2_acle.h"
+ 
+ /*
+ ** st1_mf8_base:
+ **	st1b	{z0\.b - z3\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (st1_mf8_base, svmfloat8x4_t, mfloat8_t,
+ 		  svst1_mf8_x4 (pn8, x0, z0),
+ 		  svst1 (pn8, x0, z0))
+ 
+ /*
+ ** st1_mf8_index:
+ **	st1b	{z0\.b - z3\.b}, pn8, \[x0, x1\]
+ **	ret
+ */
+ TEST_STORE_COUNT (st1_mf8_index, svmfloat8x4_t, mfloat8_t,
+ 		  svst1_mf8_x4 (pn8, x0 + x1, z0),
+ 		  svst1 (pn8, x0 + x1, z0))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** st1_mf8_1:
+ **	incb	x0
+ **	st1b	{z0\.b - z3\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (st1_mf8_1, svmfloat8x4_t, mfloat8_t,
+ 		  svst1_mf8_x4 (pn8, x0 + svcntb (), z0),
+ 		  svst1 (pn8, x0 + svcntb (), z0))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** st1_mf8_2:
+ **	incb	x0, all, mul #2
+ **	st1b	{z0\.b - z3\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (st1_mf8_2, svmfloat8x4_t, mfloat8_t,
+ 		  svst1_mf8_x4 (pn8, x0 + svcntb () * 2, z0),
+ 		  svst1 (pn8, x0 + svcntb () * 2, z0))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** st1_mf8_3:
+ **	incb	x0, all, mul #3
+ **	st1b	{z0\.b - z3\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (st1_mf8_3, svmfloat8x4_t, mfloat8_t,
+ 		  svst1_mf8_x4 (pn8, x0 + svcntb () * 3, z0),
+ 		  svst1 (pn8, x0 + svcntb () * 3, z0))
+ 
+ /*
+ ** st1_mf8_4:
+ **	st1b	{z0\.b - z3\.b}, pn8, \[x0, #4, mul vl\]
+ **	ret
+ */
+ TEST_STORE_COUNT (st1_mf8_4, svmfloat8x4_t, mfloat8_t,
+ 		  svst1_mf8_x4 (pn8, x0 + svcntb () * 4, z0),
+ 		  svst1 (pn8, x0 + svcntb () * 4, z0))
+ 
+ /*
+ ** st1_mf8_28:
+ **	st1b	{z0\.b - z3\.b}, pn8, \[x0, #28, mul vl\]
+ **	ret
+ */
+ TEST_STORE_COUNT (st1_mf8_28, svmfloat8x4_t, mfloat8_t,
+ 		  svst1_mf8_x4 (pn8, x0 + svcntb () * 28, z0),
+ 		  svst1 (pn8, x0 + svcntb () * 28, z0))
+ 
+ /*
+ ** st1_mf8_32:
+ **	[^{]*
+ **	st1b	{z0\.b - z3\.b}, pn8, \[x0, x[0-9]+\]
+ **	ret
+ */
+ TEST_STORE_COUNT (st1_mf8_32, svmfloat8x4_t, mfloat8_t,
+ 		  svst1_mf8_x4 (pn8, x0 + svcntb () * 32, z0),
+ 		  svst1 (pn8, x0 + svcntb () * 32, z0))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** st1_mf8_m1:
+ **	decb	x0
+ **	st1b	{z0\.b - z3\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (st1_mf8_m1, svmfloat8x4_t, mfloat8_t,
+ 		  svst1_mf8_x4 (pn8, x0 - svcntb (), z0),
+ 		  svst1 (pn8, x0 - svcntb (), z0))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** st1_mf8_m2:
+ **	decb	x0, all, mul #2
+ **	st1b	{z0\.b - z3\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (st1_mf8_m2, svmfloat8x4_t, mfloat8_t,
+ 		  svst1_mf8_x4 (pn8, x0 - svcntb () * 2, z0),
+ 		  svst1 (pn8, x0 - svcntb () * 2, z0))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** st1_mf8_m3:
+ **	decb	x0, all, mul #3
+ **	st1b	{z0\.b - z3\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (st1_mf8_m3, svmfloat8x4_t, mfloat8_t,
+ 		  svst1_mf8_x4 (pn8, x0 - svcntb () * 3, z0),
+ 		  svst1 (pn8, x0 - svcntb () * 3, z0))
+ 
+ /*
+ ** st1_mf8_m4:
+ **	st1b	{z0\.b - z3\.b}, pn8, \[x0, #-4, mul vl\]
+ **	ret
+ */
+ TEST_STORE_COUNT (st1_mf8_m4, svmfloat8x4_t, mfloat8_t,
+ 		  svst1_mf8_x4 (pn8, x0 - svcntb () * 4, z0),
+ 		  svst1 (pn8, x0 - svcntb () * 4, z0))
+ 
+ /*
+ ** st1_mf8_m32:
+ **	st1b	{z0\.b - z3\.b}, pn8, \[x0, #-32, mul vl\]
+ **	ret
+ */
+ TEST_STORE_COUNT (st1_mf8_m32, svmfloat8x4_t, mfloat8_t,
+ 		  svst1_mf8_x4 (pn8, x0 - svcntb () * 32, z0),
+ 		  svst1 (pn8, x0 - svcntb () * 32, z0))
+ 
+ /*
+ ** st1_mf8_m36:
+ **	[^{]*
+ **	st1b	{z0\.b - z3\.b}, pn8, \[x0, x[0-9]+\]
+ **	ret
+ */
+ TEST_STORE_COUNT (st1_mf8_m36, svmfloat8x4_t, mfloat8_t,
+ 		  svst1_mf8_x4 (pn8, x0 - svcntb () * 36, z0),
+ 		  svst1 (pn8, x0 - svcntb () * 36, z0))
+ 
+ /*
+ ** st1_mf8_z17:
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	st1b	{z[^\n]+}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (st1_mf8_z17, svmfloat8x4_t, mfloat8_t,
+ 		  svst1_mf8_x4 (pn8, x0, z17),
+ 		  svst1 (pn8, x0, z17))
+ 
+ /*
+ ** st1_mf8_z22:
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	st1b	{z[^\n]+}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (st1_mf8_z22, svmfloat8x4_t, mfloat8_t,
+ 		  svst1_mf8_x4 (pn8, x0, z22),
+ 		  svst1 (pn8, x0, z22))
+ 
+ /*
+ ** st1_mf8_z28:
+ **	st1b	{z28\.b - z31\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (st1_mf8_z28, svmfloat8x4_t, mfloat8_t,
+ 		  svst1_mf8_x4 (pn8, x0, z28),
+ 		  svst1 (pn8, x0, z28))
+ 
+ /*
+ ** st1_mf8_pn0:
+ **	mov	p([89]|1[0-5])\.b, p0\.b
+ **	st1b	{z0\.b - z3\.b}, pn\1, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (st1_mf8_pn0, svmfloat8x4_t, mfloat8_t,
+ 		  svst1_mf8_x4 (pn0, x0, z0),
+ 		  svst1 (pn0, x0, z0))
+ 
+ /*
+ ** st1_mf8_pn7:
+ **	mov	p([89]|1[0-5])\.b, p7\.b
+ **	st1b	{z0\.b - z3\.b}, pn\1, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (st1_mf8_pn7, svmfloat8x4_t, mfloat8_t,
+ 		  svst1_mf8_x4 (pn7, x0, z0),
+ 		  svst1 (pn7, x0, z0))
+ 
+ /*
+ ** st1_mf8_pn15:
+ **	st1b	{z0\.b - z3\.b}, pn15, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (st1_mf8_pn15, svmfloat8x4_t, mfloat8_t,
+ 		  svst1_mf8_x4 (pn15, x0, z0),
+ 		  svst1 (pn15, x0, z0))
+ 
+ /*
+ ** st1_vnum_mf8_0:
+ **	st1b	{z0\.b - z3\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (st1_vnum_mf8_0, svmfloat8x4_t, mfloat8_t,
+ 		  svst1_vnum_mf8_x4 (pn8, x0, 0, z0),
+ 		  svst1_vnum (pn8, x0, 0, z0))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** st1_vnum_mf8_1:
+ **	incb	x0
+ **	st1b	{z0\.b - z3\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (st1_vnum_mf8_1, svmfloat8x4_t, mfloat8_t,
+ 		  svst1_vnum_mf8_x4 (pn8, x0, 1, z0),
+ 		  svst1_vnum (pn8, x0, 1, z0))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** st1_vnum_mf8_2:
+ **	incb	x0, all, mul #2
+ **	st1b	{z0\.b - z3\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (st1_vnum_mf8_2, svmfloat8x4_t, mfloat8_t,
+ 		  svst1_vnum_mf8_x4 (pn8, x0, 2, z0),
+ 		  svst1_vnum (pn8, x0, 2, z0))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** st1_vnum_mf8_3:
+ **	incb	x0, all, mul #3
+ **	st1b	{z0\.b - z3\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (st1_vnum_mf8_3, svmfloat8x4_t, mfloat8_t,
+ 		  svst1_vnum_mf8_x4 (pn8, x0, 3, z0),
+ 		  svst1_vnum (pn8, x0, 3, z0))
+ 
+ /*
+ ** st1_vnum_mf8_4:
+ **	st1b	{z0\.b - z3\.b}, pn8, \[x0, #4, mul vl\]
+ **	ret
+ */
+ TEST_STORE_COUNT (st1_vnum_mf8_4, svmfloat8x4_t, mfloat8_t,
+ 		  svst1_vnum_mf8_x4 (pn8, x0, 4, z0),
+ 		  svst1_vnum (pn8, x0, 4, z0))
+ 
+ /*
+ ** st1_vnum_mf8_28:
+ **	st1b	{z0\.b - z3\.b}, pn8, \[x0, #28, mul vl\]
+ **	ret
+ */
+ TEST_STORE_COUNT (st1_vnum_mf8_28, svmfloat8x4_t, mfloat8_t,
+ 		  svst1_vnum_mf8_x4 (pn8, x0, 28, z0),
+ 		  svst1_vnum (pn8, x0, 28, z0))
+ 
+ /*
+ ** st1_vnum_mf8_32:
+ **	[^{]*
+ **	st1b	{z0\.b - z3\.b}, pn8, \[x0, x[0-9]+\]
+ **	ret
+ */
+ TEST_STORE_COUNT (st1_vnum_mf8_32, svmfloat8x4_t, mfloat8_t,
+ 		  svst1_vnum_mf8_x4 (pn8, x0, 32, z0),
+ 		  svst1_vnum (pn8, x0, 32, z0))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** st1_vnum_mf8_m1:
+ **	decb	x0
+ **	st1b	{z0\.b - z3\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (st1_vnum_mf8_m1, svmfloat8x4_t, mfloat8_t,
+ 		  svst1_vnum_mf8_x4 (pn8, x0, -1, z0),
+ 		  svst1_vnum (pn8, x0, -1, z0))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** st1_vnum_mf8_m2:
+ **	decb	x0, all, mul #2
+ **	st1b	{z0\.b - z3\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (st1_vnum_mf8_m2, svmfloat8x4_t, mfloat8_t,
+ 		  svst1_vnum_mf8_x4 (pn8, x0, -2, z0),
+ 		  svst1_vnum (pn8, x0, -2, z0))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** st1_vnum_mf8_m3:
+ **	decb	x0, all, mul #3
+ **	st1b	{z0\.b - z3\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (st1_vnum_mf8_m3, svmfloat8x4_t, mfloat8_t,
+ 		  svst1_vnum_mf8_x4 (pn8, x0, -3, z0),
+ 		  svst1_vnum (pn8, x0, -3, z0))
+ 
+ /*
+ ** st1_vnum_mf8_m4:
+ **	st1b	{z0\.b - z3\.b}, pn8, \[x0, #-4, mul vl\]
+ **	ret
+ */
+ TEST_STORE_COUNT (st1_vnum_mf8_m4, svmfloat8x4_t, mfloat8_t,
+ 		  svst1_vnum_mf8_x4 (pn8, x0, -4, z0),
+ 		  svst1_vnum (pn8, x0, -4, z0))
+ 
+ /*
+ ** st1_vnum_mf8_m32:
+ **	st1b	{z0\.b - z3\.b}, pn8, \[x0, #-32, mul vl\]
+ **	ret
+ */
+ TEST_STORE_COUNT (st1_vnum_mf8_m32, svmfloat8x4_t, mfloat8_t,
+ 		  svst1_vnum_mf8_x4 (pn8, x0, -32, z0),
+ 		  svst1_vnum (pn8, x0, -32, z0))
+ 
+ /*
+ ** st1_vnum_mf8_m36:
+ **	[^{]*
+ **	st1b	{z0\.b - z3\.b}, pn8, \[x0, x[0-9]+\]
+ **	ret
+ */
+ TEST_STORE_COUNT (st1_vnum_mf8_m36, svmfloat8x4_t, mfloat8_t,
+ 		  svst1_vnum_mf8_x4 (pn8, x0, -36, z0),
+ 		  svst1_vnum (pn8, x0, -36, z0))
+ 
+ /*
+ ** st1_vnum_mf8_x1:
+ **	cntb	(x[0-9]+)
+ ** (
+ **	madd	(x[0-9]+), (?:x1, \1|\1, x1), x0
+ **	st1b	{z0\.b - z3\.b}, pn8, \[\2\]
+ ** |
+ **	mul	(x[0-9]+), (?:x1, \1|\1, x1)
+ **	st1b	{z0\.b - z3\.b}, pn8, \[x0, \3\]
+ ** )
+ **	ret
+ */
+ TEST_STORE_COUNT (st1_vnum_mf8_x1, svmfloat8x4_t, mfloat8_t,
+ 		  svst1_vnum_mf8_x4 (pn8, x0, x1, z0),
+ 		  svst1_vnum (pn8, x0, x1, z0))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/stnt1_mf8_x2.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/stnt1_mf8_x2.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/stnt1_mf8_x2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/stnt1_mf8_x2.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,262 ----
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" { target { ! ilp32 } } } } */
+ 
+ #include "test_sme2_acle.h"
+ 
+ /*
+ ** stnt1_mf8_base:
+ **	stnt1b	{z0\.b(?: - |, )z1\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_base, svmfloat8x2_t, mfloat8_t,
+ 		  svstnt1_mf8_x2 (pn8, x0, z0),
+ 		  svstnt1 (pn8, x0, z0))
+ 
+ /*
+ ** stnt1_mf8_index:
+ **	stnt1b	{z0\.b(?: - |, )z1\.b}, pn8, \[x0, x1\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_index, svmfloat8x2_t, mfloat8_t,
+ 		  svstnt1_mf8_x2 (pn8, x0 + x1, z0),
+ 		  svstnt1 (pn8, x0 + x1, z0))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** stnt1_mf8_1:
+ **	incb	x0
+ **	stnt1b	{z0\.b(?: - |, )z1\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_1, svmfloat8x2_t, mfloat8_t,
+ 		  svstnt1_mf8_x2 (pn8, x0 + svcntb (), z0),
+ 		  svstnt1 (pn8, x0 + svcntb (), z0))
+ 
+ /*
+ ** stnt1_mf8_2:
+ **	stnt1b	{z0\.b(?: - |, )z1\.b}, pn8, \[x0, #2, mul vl\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_2, svmfloat8x2_t, mfloat8_t,
+ 		  svstnt1_mf8_x2 (pn8, x0 + svcntb () * 2, z0),
+ 		  svstnt1 (pn8, x0 + svcntb () * 2, z0))
+ 
+ /*
+ ** stnt1_mf8_14:
+ **	stnt1b	{z0\.b(?: - |, )z1\.b}, pn8, \[x0, #14, mul vl\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_14, svmfloat8x2_t, mfloat8_t,
+ 		  svstnt1_mf8_x2 (pn8, x0 + svcntb () * 14, z0),
+ 		  svstnt1 (pn8, x0 + svcntb () * 14, z0))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** stnt1_mf8_16:
+ **	incb	x0, all, mul #16
+ **	stnt1b	{z0\.b(?: - |, )z1\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_16, svmfloat8x2_t, mfloat8_t,
+ 		  svstnt1_mf8_x2 (pn8, x0 + svcntb () * 16, z0),
+ 		  svstnt1 (pn8, x0 + svcntb () * 16, z0))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** stnt1_mf8_m1:
+ **	decb	x0
+ **	stnt1b	{z0\.b(?: - |, )z1\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_m1, svmfloat8x2_t, mfloat8_t,
+ 		  svstnt1_mf8_x2 (pn8, x0 - svcntb (), z0),
+ 		  svstnt1 (pn8, x0 - svcntb (), z0))
+ 
+ /*
+ ** stnt1_mf8_m2:
+ **	stnt1b	{z0\.b(?: - |, )z1\.b}, pn8, \[x0, #-2, mul vl\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_m2, svmfloat8x2_t, mfloat8_t,
+ 		  svstnt1_mf8_x2 (pn8, x0 - svcntb () * 2, z0),
+ 		  svstnt1 (pn8, x0 - svcntb () * 2, z0))
+ 
+ /*
+ ** stnt1_mf8_m16:
+ **	stnt1b	{z0\.b(?: - |, )z1\.b}, pn8, \[x0, #-16, mul vl\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_m16, svmfloat8x2_t, mfloat8_t,
+ 		  svstnt1_mf8_x2 (pn8, x0 - svcntb () * 16, z0),
+ 		  svstnt1 (pn8, x0 - svcntb () * 16, z0))
+ 
+ /*
+ ** stnt1_mf8_m18:
+ **	addvl	(x[0-9]+), x0, #-18
+ **	stnt1b	{z0\.b(?: - |, )z1\.b}, pn8, \[\1\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_m18, svmfloat8x2_t, mfloat8_t,
+ 		  svstnt1_mf8_x2 (pn8, x0 - svcntb () * 18, z0),
+ 		  svstnt1 (pn8, x0 - svcntb () * 18, z0))
+ 
+ /*
+ ** stnt1_mf8_z17:
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	stnt1b	{z[^\n]+}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_z17, svmfloat8x2_t, mfloat8_t,
+ 		  svstnt1_mf8_x2 (pn8, x0, z17),
+ 		  svstnt1 (pn8, x0, z17))
+ 
+ /*
+ ** stnt1_mf8_z22:
+ **	stnt1b	{z22\.b(?: - |, )z23\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_z22, svmfloat8x2_t, mfloat8_t,
+ 		  svstnt1_mf8_x2 (pn8, x0, z22),
+ 		  svstnt1 (pn8, x0, z22))
+ 
+ /*
+ ** stnt1_mf8_z28:
+ **	stnt1b	{z28\.b(?: - |, )z29\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_z28, svmfloat8x2_t, mfloat8_t,
+ 		  svstnt1_mf8_x2 (pn8, x0, z28),
+ 		  svstnt1 (pn8, x0, z28))
+ 
+ /*
+ ** stnt1_mf8_pn0:
+ **	mov	p([89]|1[0-5])\.b, p0\.b
+ **	stnt1b	{z0\.b(?: - |, )z1\.b}, pn\1, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_pn0, svmfloat8x2_t, mfloat8_t,
+ 		  svstnt1_mf8_x2 (pn0, x0, z0),
+ 		  svstnt1 (pn0, x0, z0))
+ 
+ /*
+ ** stnt1_mf8_pn7:
+ **	mov	p([89]|1[0-5])\.b, p7\.b
+ **	stnt1b	{z0\.b(?: - |, )z1\.b}, pn\1, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_pn7, svmfloat8x2_t, mfloat8_t,
+ 		  svstnt1_mf8_x2 (pn7, x0, z0),
+ 		  svstnt1 (pn7, x0, z0))
+ 
+ /*
+ ** stnt1_mf8_pn15:
+ **	stnt1b	{z0\.b(?: - |, )z1\.b}, pn15, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_pn15, svmfloat8x2_t, mfloat8_t,
+ 		  svstnt1_mf8_x2 (pn15, x0, z0),
+ 		  svstnt1 (pn15, x0, z0))
+ 
+ /*
+ ** stnt1_vnum_mf8_0:
+ **	stnt1b	{z0\.b(?: - |, )z1\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_vnum_mf8_0, svmfloat8x2_t, mfloat8_t,
+ 		  svstnt1_vnum_mf8_x2 (pn8, x0, 0, z0),
+ 		  svstnt1_vnum (pn8, x0, 0, z0))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** stnt1_vnum_mf8_1:
+ **	incb	x0
+ **	stnt1b	{z0\.b(?: - |, )z1\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_vnum_mf8_1, svmfloat8x2_t, mfloat8_t,
+ 		  svstnt1_vnum_mf8_x2 (pn8, x0, 1, z0),
+ 		  svstnt1_vnum (pn8, x0, 1, z0))
+ 
+ /*
+ ** stnt1_vnum_mf8_2:
+ **	stnt1b	{z0\.b(?: - |, )z1\.b}, pn8, \[x0, #2, mul vl\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_vnum_mf8_2, svmfloat8x2_t, mfloat8_t,
+ 		  svstnt1_vnum_mf8_x2 (pn8, x0, 2, z0),
+ 		  svstnt1_vnum (pn8, x0, 2, z0))
+ 
+ /*
+ ** stnt1_vnum_mf8_14:
+ **	stnt1b	{z0\.b(?: - |, )z1\.b}, pn8, \[x0, #14, mul vl\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_vnum_mf8_14, svmfloat8x2_t, mfloat8_t,
+ 		  svstnt1_vnum_mf8_x2 (pn8, x0, 14, z0),
+ 		  svstnt1_vnum (pn8, x0, 14, z0))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** stnt1_vnum_mf8_16:
+ **	incb	x0, all, mul #16
+ **	stnt1b	{z0\.b(?: - |, )z1\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_vnum_mf8_16, svmfloat8x2_t, mfloat8_t,
+ 		  svstnt1_vnum_mf8_x2 (pn8, x0, 16, z0),
+ 		  svstnt1_vnum (pn8, x0, 16, z0))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** stnt1_vnum_mf8_m1:
+ **	decb	x0
+ **	stnt1b	{z0\.b(?: - |, )z1\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_vnum_mf8_m1, svmfloat8x2_t, mfloat8_t,
+ 		  svstnt1_vnum_mf8_x2 (pn8, x0, -1, z0),
+ 		  svstnt1_vnum (pn8, x0, -1, z0))
+ 
+ /*
+ ** stnt1_vnum_mf8_m2:
+ **	stnt1b	{z0\.b(?: - |, )z1\.b}, pn8, \[x0, #-2, mul vl\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_vnum_mf8_m2, svmfloat8x2_t, mfloat8_t,
+ 		  svstnt1_vnum_mf8_x2 (pn8, x0, -2, z0),
+ 		  svstnt1_vnum (pn8, x0, -2, z0))
+ 
+ /*
+ ** stnt1_vnum_mf8_m16:
+ **	stnt1b	{z0\.b(?: - |, )z1\.b}, pn8, \[x0, #-16, mul vl\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_vnum_mf8_m16, svmfloat8x2_t, mfloat8_t,
+ 		  svstnt1_vnum_mf8_x2 (pn8, x0, -16, z0),
+ 		  svstnt1_vnum (pn8, x0, -16, z0))
+ 
+ /*
+ ** stnt1_vnum_mf8_m18:
+ **	addvl	(x[0-9]+), x0, #-18
+ **	stnt1b	{z0\.b(?: - |, )z1\.b}, pn8, \[\1\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_vnum_mf8_m18, svmfloat8x2_t, mfloat8_t,
+ 		  svstnt1_vnum_mf8_x2 (pn8, x0, -18, z0),
+ 		  svstnt1_vnum (pn8, x0, -18, z0))
+ 
+ /*
+ ** stnt1_vnum_mf8_x1:
+ **	cntb	(x[0-9]+)
+ ** (
+ **	madd	(x[0-9]+), (?:x1, \1|\1, x1), x0
+ **	stnt1b	{z0\.b(?: - |, )z1\.b}, pn8, \[\2\]
+ ** |
+ **	mul	(x[0-9]+), (?:x1, \1|\1, x1)
+ **	stnt1b	{z0\.b(?: - |, )z1\.b}, pn8, \[x0, \3\]
+ ** )
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_vnum_mf8_x1, svmfloat8x2_t, mfloat8_t,
+ 		  svstnt1_vnum_mf8_x2 (pn8, x0, x1, z0),
+ 		  svstnt1_vnum (pn8, x0, x1, z0))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/stnt1_mf8_x4.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/stnt1_mf8_x4.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/stnt1_mf8_x4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/stnt1_mf8_x4.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,354 ----
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" { target { ! ilp32 } } } } */
+ 
+ #include "test_sme2_acle.h"
+ 
+ /*
+ ** stnt1_mf8_base:
+ **	stnt1b	{z0\.b - z3\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_base, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_mf8_x4 (pn8, x0, z0),
+ 		  svstnt1 (pn8, x0, z0))
+ 
+ /*
+ ** stnt1_mf8_index:
+ **	stnt1b	{z0\.b - z3\.b}, pn8, \[x0, x1\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_index, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_mf8_x4 (pn8, x0 + x1, z0),
+ 		  svstnt1 (pn8, x0 + x1, z0))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** stnt1_mf8_1:
+ **	incb	x0
+ **	stnt1b	{z0\.b - z3\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_1, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_mf8_x4 (pn8, x0 + svcntb (), z0),
+ 		  svstnt1 (pn8, x0 + svcntb (), z0))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** stnt1_mf8_2:
+ **	incb	x0, all, mul #2
+ **	stnt1b	{z0\.b - z3\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_2, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_mf8_x4 (pn8, x0 + svcntb () * 2, z0),
+ 		  svstnt1 (pn8, x0 + svcntb () * 2, z0))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** stnt1_mf8_3:
+ **	incb	x0, all, mul #3
+ **	stnt1b	{z0\.b - z3\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_3, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_mf8_x4 (pn8, x0 + svcntb () * 3, z0),
+ 		  svstnt1 (pn8, x0 + svcntb () * 3, z0))
+ 
+ /*
+ ** stnt1_mf8_4:
+ **	stnt1b	{z0\.b - z3\.b}, pn8, \[x0, #4, mul vl\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_4, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_mf8_x4 (pn8, x0 + svcntb () * 4, z0),
+ 		  svstnt1 (pn8, x0 + svcntb () * 4, z0))
+ 
+ /*
+ ** stnt1_mf8_28:
+ **	stnt1b	{z0\.b - z3\.b}, pn8, \[x0, #28, mul vl\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_28, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_mf8_x4 (pn8, x0 + svcntb () * 28, z0),
+ 		  svstnt1 (pn8, x0 + svcntb () * 28, z0))
+ 
+ /*
+ ** stnt1_mf8_32:
+ **	[^{]*
+ **	stnt1b	{z0\.b - z3\.b}, pn8, \[x0, x[0-9]+\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_32, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_mf8_x4 (pn8, x0 + svcntb () * 32, z0),
+ 		  svstnt1 (pn8, x0 + svcntb () * 32, z0))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** stnt1_mf8_m1:
+ **	decb	x0
+ **	stnt1b	{z0\.b - z3\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_m1, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_mf8_x4 (pn8, x0 - svcntb (), z0),
+ 		  svstnt1 (pn8, x0 - svcntb (), z0))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** stnt1_mf8_m2:
+ **	decb	x0, all, mul #2
+ **	stnt1b	{z0\.b - z3\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_m2, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_mf8_x4 (pn8, x0 - svcntb () * 2, z0),
+ 		  svstnt1 (pn8, x0 - svcntb () * 2, z0))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** stnt1_mf8_m3:
+ **	decb	x0, all, mul #3
+ **	stnt1b	{z0\.b - z3\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_m3, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_mf8_x4 (pn8, x0 - svcntb () * 3, z0),
+ 		  svstnt1 (pn8, x0 - svcntb () * 3, z0))
+ 
+ /*
+ ** stnt1_mf8_m4:
+ **	stnt1b	{z0\.b - z3\.b}, pn8, \[x0, #-4, mul vl\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_m4, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_mf8_x4 (pn8, x0 - svcntb () * 4, z0),
+ 		  svstnt1 (pn8, x0 - svcntb () * 4, z0))
+ 
+ /*
+ ** stnt1_mf8_m32:
+ **	stnt1b	{z0\.b - z3\.b}, pn8, \[x0, #-32, mul vl\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_m32, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_mf8_x4 (pn8, x0 - svcntb () * 32, z0),
+ 		  svstnt1 (pn8, x0 - svcntb () * 32, z0))
+ 
+ /*
+ ** stnt1_mf8_m36:
+ **	[^{]*
+ **	stnt1b	{z0\.b - z3\.b}, pn8, \[x0, x[0-9]+\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_m36, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_mf8_x4 (pn8, x0 - svcntb () * 36, z0),
+ 		  svstnt1 (pn8, x0 - svcntb () * 36, z0))
+ 
+ /*
+ ** stnt1_mf8_z17:
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	stnt1b	{z[^\n]+}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_z17, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_mf8_x4 (pn8, x0, z17),
+ 		  svstnt1 (pn8, x0, z17))
+ 
+ /*
+ ** stnt1_mf8_z22:
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	stnt1b	{z[^\n]+}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_z22, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_mf8_x4 (pn8, x0, z22),
+ 		  svstnt1 (pn8, x0, z22))
+ 
+ /*
+ ** stnt1_mf8_z28:
+ **	stnt1b	{z28\.b - z31\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_z28, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_mf8_x4 (pn8, x0, z28),
+ 		  svstnt1 (pn8, x0, z28))
+ 
+ /*
+ ** stnt1_mf8_pn0:
+ **	mov	p([89]|1[0-5])\.b, p0\.b
+ **	stnt1b	{z0\.b - z3\.b}, pn\1, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_pn0, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_mf8_x4 (pn0, x0, z0),
+ 		  svstnt1 (pn0, x0, z0))
+ 
+ /*
+ ** stnt1_mf8_pn7:
+ **	mov	p([89]|1[0-5])\.b, p7\.b
+ **	stnt1b	{z0\.b - z3\.b}, pn\1, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_pn7, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_mf8_x4 (pn7, x0, z0),
+ 		  svstnt1 (pn7, x0, z0))
+ 
+ /*
+ ** stnt1_mf8_pn15:
+ **	stnt1b	{z0\.b - z3\.b}, pn15, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_pn15, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_mf8_x4 (pn15, x0, z0),
+ 		  svstnt1 (pn15, x0, z0))
+ 
+ /*
+ ** stnt1_vnum_mf8_0:
+ **	stnt1b	{z0\.b - z3\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_vnum_mf8_0, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_vnum_mf8_x4 (pn8, x0, 0, z0),
+ 		  svstnt1_vnum (pn8, x0, 0, z0))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** stnt1_vnum_mf8_1:
+ **	incb	x0
+ **	stnt1b	{z0\.b - z3\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_vnum_mf8_1, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_vnum_mf8_x4 (pn8, x0, 1, z0),
+ 		  svstnt1_vnum (pn8, x0, 1, z0))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** stnt1_vnum_mf8_2:
+ **	incb	x0, all, mul #2
+ **	stnt1b	{z0\.b - z3\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_vnum_mf8_2, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_vnum_mf8_x4 (pn8, x0, 2, z0),
+ 		  svstnt1_vnum (pn8, x0, 2, z0))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** stnt1_vnum_mf8_3:
+ **	incb	x0, all, mul #3
+ **	stnt1b	{z0\.b - z3\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_vnum_mf8_3, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_vnum_mf8_x4 (pn8, x0, 3, z0),
+ 		  svstnt1_vnum (pn8, x0, 3, z0))
+ 
+ /*
+ ** stnt1_vnum_mf8_4:
+ **	stnt1b	{z0\.b - z3\.b}, pn8, \[x0, #4, mul vl\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_vnum_mf8_4, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_vnum_mf8_x4 (pn8, x0, 4, z0),
+ 		  svstnt1_vnum (pn8, x0, 4, z0))
+ 
+ /*
+ ** stnt1_vnum_mf8_28:
+ **	stnt1b	{z0\.b - z3\.b}, pn8, \[x0, #28, mul vl\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_vnum_mf8_28, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_vnum_mf8_x4 (pn8, x0, 28, z0),
+ 		  svstnt1_vnum (pn8, x0, 28, z0))
+ 
+ /*
+ ** stnt1_vnum_mf8_32:
+ **	[^{]*
+ **	stnt1b	{z0\.b - z3\.b}, pn8, \[x0, x[0-9]+\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_vnum_mf8_32, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_vnum_mf8_x4 (pn8, x0, 32, z0),
+ 		  svstnt1_vnum (pn8, x0, 32, z0))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** stnt1_vnum_mf8_m1:
+ **	decb	x0
+ **	stnt1b	{z0\.b - z3\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_vnum_mf8_m1, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_vnum_mf8_x4 (pn8, x0, -1, z0),
+ 		  svstnt1_vnum (pn8, x0, -1, z0))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** stnt1_vnum_mf8_m2:
+ **	decb	x0, all, mul #2
+ **	stnt1b	{z0\.b - z3\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_vnum_mf8_m2, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_vnum_mf8_x4 (pn8, x0, -2, z0),
+ 		  svstnt1_vnum (pn8, x0, -2, z0))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** stnt1_vnum_mf8_m3:
+ **	decb	x0, all, mul #3
+ **	stnt1b	{z0\.b - z3\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_vnum_mf8_m3, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_vnum_mf8_x4 (pn8, x0, -3, z0),
+ 		  svstnt1_vnum (pn8, x0, -3, z0))
+ 
+ /*
+ ** stnt1_vnum_mf8_m4:
+ **	stnt1b	{z0\.b - z3\.b}, pn8, \[x0, #-4, mul vl\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_vnum_mf8_m4, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_vnum_mf8_x4 (pn8, x0, -4, z0),
+ 		  svstnt1_vnum (pn8, x0, -4, z0))
+ 
+ /*
+ ** stnt1_vnum_mf8_m32:
+ **	stnt1b	{z0\.b - z3\.b}, pn8, \[x0, #-32, mul vl\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_vnum_mf8_m32, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_vnum_mf8_x4 (pn8, x0, -32, z0),
+ 		  svstnt1_vnum (pn8, x0, -32, z0))
+ 
+ /*
+ ** stnt1_vnum_mf8_m36:
+ **	[^{]*
+ **	stnt1b	{z0\.b - z3\.b}, pn8, \[x0, x[0-9]+\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_vnum_mf8_m36, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_vnum_mf8_x4 (pn8, x0, -36, z0),
+ 		  svstnt1_vnum (pn8, x0, -36, z0))
+ 
+ /*
+ ** stnt1_vnum_mf8_x1:
+ **	cntb	(x[0-9]+)
+ ** (
+ **	madd	(x[0-9]+), (?:x1, \1|\1, x1), x0
+ **	stnt1b	{z0\.b - z3\.b}, pn8, \[\2\]
+ ** |
+ **	mul	(x[0-9]+), (?:x1, \1|\1, x1)
+ **	stnt1b	{z0\.b - z3\.b}, pn8, \[x0, \3\]
+ ** )
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_vnum_mf8_x1, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_vnum_mf8_x4 (pn8, x0, x1, z0),
+ 		  svstnt1_vnum (pn8, x0, x1, z0))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/test_sme2_acle.h gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/test_sme2_acle.h
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/test_sme2_acle.h	Sun Dec 21 22:32:11 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/test_sme2_acle.h	Sun Dec 28 22:32:13 2025
***************
*** 4,10 ****
  #include "../../sme/acle-asm/test_sme_acle.h"
  
  #define TEST_ZA_X1(NAME, ZTYPE, CODE1, CODE2)			\
!   PROTO (NAME, void, (int w0))					\
    {								\
      register int w7 __asm ("w7");				\
      register int w8 __asm ("w8");				\
--- 4,10 ----
  #include "../../sme/acle-asm/test_sme_acle.h"
  
  #define TEST_ZA_X1(NAME, ZTYPE, CODE1, CODE2)			\
!   PROTO (NAME, void, (int w0, fpm_t fpm0))			\
    {								\
      register int w7 __asm ("w7");				\
      register int w8 __asm ("w8");				\
***************
*** 26,32 ****
    }
  
  #define TEST_ZA_XN(NAME, TTYPE, CODE1, CODE2)			\
!   PROTO (NAME, void, (int w0))					\
    {								\
      register int w7 __asm ("w7");				\
      register int w8 __asm ("w8");				\
--- 26,32 ----
    }
  
  #define TEST_ZA_XN(NAME, TTYPE, CODE1, CODE2)			\
!   PROTO (NAME, void, (int w0, fpm_t fpm0))			\
    {								\
      register int w7 __asm ("w7");				\
      register int w8 __asm ("w8");				\
***************
*** 68,74 ****
    }
  
  #define TEST_ZA_SINGLE(NAME, TTYPE, ZTYPE, CODE1, CODE2)	\
!   PROTO (NAME, void, (int w0))					\
    {								\
      register int w8 __asm ("w8");				\
      register int w11 __asm ("w11");				\
--- 68,74 ----
    }
  
  #define TEST_ZA_SINGLE(NAME, TTYPE, ZTYPE, CODE1, CODE2)	\
!   PROTO (NAME, void, (int w0, fpm_t fpm0))			\
    {								\
      register int w8 __asm ("w8");				\
      register int w11 __asm ("w11");				\
***************
*** 84,90 ****
    }
  
  #define TEST_ZA_SINGLE_Z15(NAME, TTYPE, ZTYPE, CODE1, CODE2)	\
!   PROTO (NAME, void, (int w0))					\
    {								\
      register int w8 __asm ("w8");				\
      register TTYPE z0 __asm ("z0");				\
--- 84,90 ----
    }
  
  #define TEST_ZA_SINGLE_Z15(NAME, TTYPE, ZTYPE, CODE1, CODE2)	\
!   PROTO (NAME, void, (int w0, fpm_t fpm0))			\
    {								\
      register int w8 __asm ("w8");				\
      register TTYPE z0 __asm ("z0");				\
***************
*** 94,100 ****
    }
  
  #define TEST_ZA_LANE(NAME, TTYPE, ZTYPE, CODE1, CODE2)		\
!   PROTO (NAME, void, (int w0))					\
    {								\
      register int w8 __asm ("w8");				\
      register int w11 __asm ("w11");				\
--- 94,100 ----
    }
  
  #define TEST_ZA_LANE(NAME, TTYPE, ZTYPE, CODE1, CODE2)		\
!   PROTO (NAME, void, (int w0, fpm_t fpm0))			\
    {								\
      register int w8 __asm ("w8");				\
      register int w11 __asm ("w11");				\
***************
*** 112,118 ****
    }
  
  #define TEST_ZA_LANE_Z15(NAME, TTYPE, ZTYPE, CODE1, CODE2)	\
!   PROTO (NAME, void, (int w0))					\
    {								\
      register int w8 __asm ("w8");				\
      register TTYPE z4 __asm ("z4");				\
--- 112,118 ----
    }
  
  #define TEST_ZA_LANE_Z15(NAME, TTYPE, ZTYPE, CODE1, CODE2)	\
!   PROTO (NAME, void, (int w0, fpm_t fpm0))			\
    {								\
      register int w8 __asm ("w8");				\
      register TTYPE z4 __asm ("z4");				\
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/uzp_mf8_x2.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/uzp_mf8_x2.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/uzp_mf8_x2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/uzp_mf8_x2.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,77 ----
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ 
+ /*
+ ** uzp_z0_z0:
+ **	uzp	{z0\.b - z1\.b}, z0\.b, z1\.b
+ **	ret
+ */
+ TEST_XN (uzp_z0_z0, svmfloat8x2_t, z0,
+ 	 svuzp_mf8_x2 (z0),
+ 	 svuzp (z0))
+ 
+ /*
+ ** uzp_z0_z4:
+ **	uzp	{z0\.b - z1\.b}, z4\.b, z5\.b
+ **	ret
+ */
+ TEST_XN (uzp_z0_z4, svmfloat8x2_t, z0,
+ 	 svuzp_mf8_x2 (z4),
+ 	 svuzp (z4))
+ 
+ /*
+ ** uzp_z4_z18:
+ **	uzp	{z4\.b - z5\.b}, z18\.b, z19\.b
+ **	ret
+ */
+ TEST_XN (uzp_z4_z18, svmfloat8x2_t, z4,
+ 	 svuzp_mf8_x2 (z18),
+ 	 svuzp (z18))
+ 
+ /*
+ ** uzp_z18_z23:
+ **	uzp	{z18\.b - z19\.b}, z23\.b, z24\.b
+ **	ret
+ */
+ TEST_XN (uzp_z18_z23, svmfloat8x2_t, z18,
+ 	 svuzp_mf8_x2 (z23),
+ 	 svuzp (z23))
+ 
+ /*
+ ** uzp_z23_z28:
+ **	uzp	[^\n]+, z28\.b, z29\.b
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_XN (uzp_z23_z28, svmfloat8x2_t, z23,
+ 	 svuzp_mf8_x2 (z28),
+ 	 svuzp (z28))
+ 
+ /*
+ ** uzp_z28_z0:
+ **	uzp	{z28\.b - z29\.b}, z0\.b, z1\.b
+ **	ret
+ */
+ TEST_XN (uzp_z28_z0, svmfloat8x2_t, z28,
+ 	 svuzp_mf8_x2 (z0),
+ 	 svuzp (z0))
+ 
+ /*
+ ** uzp_z28_z0_z23:	{ xfail aarch64_big_endian }
+ **	uzp	{z28\.b - z29\.b}, z0\.b, z23\.b
+ **	ret
+ */
+ TEST_XN (uzp_z28_z0_z23, svmfloat8x2_t, z28,
+ 	 svuzp_mf8_x2 (svcreate2 (svget2 (z0, 0), svget2 (z23, 0))),
+ 	 svuzp (svcreate2 (svget2 (z0, 0), svget2 (z23, 0))))
+ 
+ /*
+ ** uzp_z28_z5_z19:
+ **	uzp	{z28\.b - z29\.b}, z5\.b, z19\.b
+ **	ret
+ */
+ TEST_XN (uzp_z28_z5_z19, svmfloat8x2_t, z28,
+ 	 svuzp_mf8_x2 (svcreate2 (svget2 (z4, 1), svget2 (z18, 1))),
+ 	 svuzp (svcreate2 (svget2 (z4, 1), svget2 (z18, 1))))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/uzp_mf8_x4.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/uzp_mf8_x4.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/uzp_mf8_x4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/uzp_mf8_x4.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,73 ----
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ 
+ /*
+ ** uzp_z0_z0:
+ **	uzp	{z0\.b - z3\.b}, {z0\.b - z3\.b}
+ **	ret
+ */
+ TEST_XN (uzp_z0_z0, svmfloat8x4_t, z0,
+ 	 svuzp_mf8_x4 (z0),
+ 	 svuzp (z0))
+ 
+ /*
+ ** uzp_z0_z4:
+ **	uzp	{z0\.b - z3\.b}, {z4\.b - z7\.b}
+ **	ret
+ */
+ TEST_XN (uzp_z0_z4, svmfloat8x4_t, z0,
+ 	 svuzp_mf8_x4 (z4),
+ 	 svuzp (z4))
+ 
+ /*
+ ** uzp_z4_z18:
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	uzp	{z4\.b - z7\.b}, [^\n]+
+ **	ret
+ */
+ TEST_XN (uzp_z4_z18, svmfloat8x4_t, z4,
+ 	 svuzp_mf8_x4 (z18),
+ 	 svuzp (z18))
+ 
+ /*
+ ** uzp_z18_z23:
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	uzp	{z[^\n]+}, {z[^\n]+}
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_XN (uzp_z18_z23, svmfloat8x4_t, z18,
+ 	 svuzp_mf8_x4 (z23),
+ 	 svuzp (z23))
+ 
+ /*
+ ** uzp_z23_z28:
+ **	uzp	[^\n]+, {z28\.b - z31\.b}
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_XN (uzp_z23_z28, svmfloat8x4_t, z23,
+ 	 svuzp_mf8_x4 (z28),
+ 	 svuzp (z28))
+ 
+ /*
+ ** uzp_z28_z0:
+ **	uzp	{z28\.b - z31\.b}, {z0\.b - z3\.b}
+ **	ret
+ */
+ TEST_XN (uzp_z28_z0, svmfloat8x4_t, z28,
+ 	 svuzp_mf8_x4 (z0),
+ 	 svuzp (z0))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/uzpq_mf8_x2.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/uzpq_mf8_x2.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/uzpq_mf8_x2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/uzpq_mf8_x2.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,77 ----
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ 
+ /*
+ ** uzpq_z0_z0:
+ **	uzp	{z0\.q - z1\.q}, z0\.q, z1\.q
+ **	ret
+ */
+ TEST_XN (uzpq_z0_z0, svmfloat8x2_t, z0,
+ 	 svuzpq_mf8_x2 (z0),
+ 	 svuzpq (z0))
+ 
+ /*
+ ** uzpq_z0_z4:
+ **	uzp	{z0\.q - z1\.q}, z4\.q, z5\.q
+ **	ret
+ */
+ TEST_XN (uzpq_z0_z4, svmfloat8x2_t, z0,
+ 	 svuzpq_mf8_x2 (z4),
+ 	 svuzpq (z4))
+ 
+ /*
+ ** uzpq_z4_z18:
+ **	uzp	{z4\.q - z5\.q}, z18\.q, z19\.q
+ **	ret
+ */
+ TEST_XN (uzpq_z4_z18, svmfloat8x2_t, z4,
+ 	 svuzpq_mf8_x2 (z18),
+ 	 svuzpq (z18))
+ 
+ /*
+ ** uzpq_z18_z23:
+ **	uzp	{z18\.q - z19\.q}, z23\.q, z24\.q
+ **	ret
+ */
+ TEST_XN (uzpq_z18_z23, svmfloat8x2_t, z18,
+ 	 svuzpq_mf8_x2 (z23),
+ 	 svuzpq (z23))
+ 
+ /*
+ ** uzpq_z23_z28:
+ **	uzp	[^\n]+, z28\.q, z29\.q
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_XN (uzpq_z23_z28, svmfloat8x2_t, z23,
+ 	 svuzpq_mf8_x2 (z28),
+ 	 svuzpq (z28))
+ 
+ /*
+ ** uzpq_z28_z0:
+ **	uzp	{z28\.q - z29\.q}, z0\.q, z1\.q
+ **	ret
+ */
+ TEST_XN (uzpq_z28_z0, svmfloat8x2_t, z28,
+ 	 svuzpq_mf8_x2 (z0),
+ 	 svuzpq (z0))
+ 
+ /*
+ ** uzpq_z28_z0_z23:	{ xfail aarch64_big_endian }
+ **	uzp	{z28\.q - z29\.q}, z0\.q, z23\.q
+ **	ret
+ */
+ TEST_XN (uzpq_z28_z0_z23, svmfloat8x2_t, z28,
+ 	 svuzpq_mf8_x2 (svcreate2 (svget2 (z0, 0), svget2 (z23, 0))),
+ 	 svuzpq (svcreate2 (svget2 (z0, 0), svget2 (z23, 0))))
+ 
+ /*
+ ** uzpq_z28_z5_z19:
+ **	uzp	{z28\.q - z29\.q}, z5\.q, z19\.q
+ **	ret
+ */
+ TEST_XN (uzpq_z28_z5_z19, svmfloat8x2_t, z28,
+ 	 svuzpq_mf8_x2 (svcreate2 (svget2 (z4, 1), svget2 (z18, 1))),
+ 	 svuzpq (svcreate2 (svget2 (z4, 1), svget2 (z18, 1))))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/uzpq_mf8_x4.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/uzpq_mf8_x4.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/uzpq_mf8_x4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/uzpq_mf8_x4.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,73 ----
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ 
+ /*
+ ** uzpq_z0_z0:
+ **	uzp	{z0\.q - z3\.q}, {z0\.q - z3\.q}
+ **	ret
+ */
+ TEST_XN (uzpq_z0_z0, svmfloat8x4_t, z0,
+ 	 svuzpq_mf8_x4 (z0),
+ 	 svuzpq (z0))
+ 
+ /*
+ ** uzpq_z0_z4:
+ **	uzp	{z0\.q - z3\.q}, {z4\.q - z7\.q}
+ **	ret
+ */
+ TEST_XN (uzpq_z0_z4, svmfloat8x4_t, z0,
+ 	 svuzpq_mf8_x4 (z4),
+ 	 svuzpq (z4))
+ 
+ /*
+ ** uzpq_z4_z18:
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	uzp	{z4\.q - z7\.q}, [^\n]+
+ **	ret
+ */
+ TEST_XN (uzpq_z4_z18, svmfloat8x4_t, z4,
+ 	 svuzpq_mf8_x4 (z18),
+ 	 svuzpq (z18))
+ 
+ /*
+ ** uzpq_z18_z23:
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	uzp	{z[^\n]+}, {z[^\n]+}
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_XN (uzpq_z18_z23, svmfloat8x4_t, z18,
+ 	 svuzpq_mf8_x4 (z23),
+ 	 svuzpq (z23))
+ 
+ /*
+ ** uzpq_z23_z28:
+ **	uzp	[^\n]+, {z28\.q - z31\.q}
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_XN (uzpq_z23_z28, svmfloat8x4_t, z23,
+ 	 svuzpq_mf8_x4 (z28),
+ 	 svuzpq (z28))
+ 
+ /*
+ ** uzpq_z28_z0:
+ **	uzp	{z28\.q - z31\.q}, {z0\.q - z3\.q}
+ **	ret
+ */
+ TEST_XN (uzpq_z28_z0, svmfloat8x4_t, z28,
+ 	 svuzpq_mf8_x4 (z0),
+ 	 svuzpq (z0))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/vdot_lane_za16_mf8_vg1x2.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/vdot_lane_za16_mf8_vg1x2.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/vdot_lane_za16_mf8_vg1x2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/vdot_lane_za16_mf8_vg1x2.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,119 ----
+ /* { dg-do assemble { target { aarch64_asm_sme-f8f16_ok } } } */
+ /* { dg-do compile { target { ! { aarch64_asm_sme-f8f16_ok } } } } */
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ #pragma GCC target "+sve2,+sme-f8f16"
+ 
+ /* Available variants are:
+    _za16 if __ARM_FEATURE_SME_F8F16 != 0
+    void svvdot_lane_za16[_mf8]_vg1x2_fpm (uint32_t slice, svmfloat8x2_t zn, svmfloat8_t zm, uint64_t imm_idx, fpm_t fpm) __arm_streaming __arm_inout("za");  */
+ 
+ /*
+ ** dot_lane_0_z0_z4_0:
+ **	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), #?0
+ **	fvdot	za\.h\[\1, 0, vgx2\], {z0\.b - z1\.b}, z4\.b\[0\]
+ **	ret
+ */
+ TEST_ZA_LANE (dot_lane_0_z0_z4_0, svmfloat8x2_t, svmfloat8_t,
+ 	      svvdot_lane_za16_mf8_vg1x2_fpm (0, z0, z4, 0, fpm0),
+ 	      svvdot_lane_za16_vg1x2_fpm (0, z0, z4, 0, fpm0))
+ 
+ /*
+ ** dot_lane_w0_z0_z7_1:
+ **	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), w0
+ **	fvdot	za\.h\[\1, 0, vgx2\], {z0\.b - z1\.b}, z7\.b\[1\]
+ **	ret
+ */
+ TEST_ZA_LANE (dot_lane_w0_z0_z7_1, svmfloat8x2_t, svmfloat8_t,
+ 	      svvdot_lane_za16_mf8_vg1x2_fpm (w0, z0, z7, 1, fpm0),
+ 	      svvdot_lane_za16_vg1x2_fpm (w0, z0, z7, 1, fpm0))
+ 
+ /*
+ ** dot_lane_w8_z28_z4_2:
+ **	msr	fpmr, x1
+ **	fvdot	za\.h\[w8, 0, vgx2\], {z28\.b - z29\.b}, z4\.b\[2\]
+ **	ret
+ */
+ TEST_ZA_LANE (dot_lane_w8_z28_z4_2, svmfloat8x2_t, svmfloat8_t,
+ 	      svvdot_lane_za16_mf8_vg1x2_fpm (w8, z28, z4, 2, fpm0),
+ 	      svvdot_lane_za16_vg1x2_fpm (w8, z28, z4, 2, fpm0))
+ 
+ /*
+ ** dot_lane_w8p7_z0_z4_3:
+ **	msr	fpmr, x1
+ **	fvdot	za\.h\[w8, 7, vgx2\], {z0\.b - z1\.b}, z4\.b\[3\]
+ **	ret
+ */
+ TEST_ZA_LANE (dot_lane_w8p7_z0_z4_3, svmfloat8x2_t, svmfloat8_t,
+ 	      svvdot_lane_za16_mf8_vg1x2_fpm (w8 + 7, z0, z4, 3, fpm0),
+ 	      svvdot_lane_za16_vg1x2_fpm (w8 + 7, z0, z4, 3, fpm0))
+ 
+ /*
+ ** dot_lane_w8p8_z0_z4_0:
+ **	add	(w8|w9|w10|w11), w8, #?8
+ **	msr	fpmr, x1
+ **	fvdot	za\.h\[\1, 0, vgx2\], {z0\.b - z1\.b}, z4\.b\[0\]
+ **	ret
+ */
+ TEST_ZA_LANE (dot_lane_w8p8_z0_z4_0, svmfloat8x2_t, svmfloat8_t,
+ 	      svvdot_lane_za16_mf8_vg1x2_fpm (w8 + 8, z0, z4, 0, fpm0),
+ 	      svvdot_lane_za16_vg1x2_fpm (w8 + 8, z0, z4, 0, fpm0))
+ 
+ /*
+ ** dot_lane_w0m1_z0_z4_1:
+ **	sub	(w8|w9|w10|w11), w0, #?1
+ **	msr	fpmr, x1
+ **	fvdot	za\.h\[\1, 0, vgx2\], {z0\.b - z1\.b}, z4\.b\[1\]
+ **	ret
+ */
+ TEST_ZA_LANE (dot_lane_w0m1_z0_z4_1, svmfloat8x2_t, svmfloat8_t,
+ 	      svvdot_lane_za16_mf8_vg1x2_fpm (w0 - 1, z0, z4, 1, fpm0),
+ 	      svvdot_lane_za16_vg1x2_fpm (w0 - 1, z0, z4, 1, fpm0))
+ 
+ /*
+ ** dot_lane_w8_z4_z15_2:
+ **	str	d15, \[sp, #?-16\]!
+ **	msr	fpmr, x1
+ **	fvdot	za\.h\[w8, 0, vgx2\], {z4\.b - z5\.b}, z15\.b\[2\]
+ **	ldr	d15, \[sp\], #?16
+ **	ret
+ */
+ TEST_ZA_LANE_Z15 (dot_lane_w8_z4_z15_2, svmfloat8x2_t, svmfloat8_t,
+ 		  svvdot_lane_za16_mf8_vg1x2_fpm (w8, z4, z15, 2, fpm0),
+ 		  svvdot_lane_za16_vg1x2_fpm (w8, z4, z15, 2, fpm0))
+ 
+ /*
+ ** dot_lane_w8_z28_z16_3:
+ **	msr	fpmr, x1
+ **	mov	(z[0-7]).d, z16.d
+ **	fvdot	za\.h\[w8, 0, vgx2\], {z28\.b - z29\.b}, \1\.b\[3\]
+ **	ret
+ */
+ TEST_ZA_LANE (dot_lane_w8_z28_z16_3, svmfloat8x2_t, svmfloat8_t,
+ 	      svvdot_lane_za16_mf8_vg1x2_fpm (w8, z28, z16, 3, fpm0),
+ 	      svvdot_lane_za16_vg1x2_fpm (w8, z28, z16, 3, fpm0))
+ 
+ /*
+ ** dot_lane_w8_z17_z7_0:
+ **	msr	fpmr, x1
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	fvdot	za\.h\[w8, 0, vgx2\], [^\n]+, z7\.b\[0\]
+ **	ret
+ */
+ TEST_ZA_LANE (dot_lane_w8_z17_z7_0, svmfloat8x2_t, svmfloat8_t,
+ 	      svvdot_lane_za16_mf8_vg1x2_fpm (w8, z17, z7, 0, fpm0),
+ 	      svvdot_lane_za16_vg1x2_fpm (w8, z17, z7, 0, fpm0))
+ 
+ /*
+ ** dot_lane_w8_z22_z4_1:
+ **	msr	fpmr, x1
+ **	fvdot	za\.h\[w8, 0, vgx2\], {z22\.b - z23\.b}, z4\.b\[1\]
+ **	ret
+ */
+ TEST_ZA_LANE (dot_lane_w8_z22_z4_1, svmfloat8x2_t, svmfloat8_t,
+ 	      svvdot_lane_za16_mf8_vg1x2_fpm (w8, z22, z4, 1, fpm0),
+ 	      svvdot_lane_za16_vg1x2_fpm (w8, z22, z4, 1, fpm0))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/vdotb_lane_za32_mf8_vg1x4.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/vdotb_lane_za32_mf8_vg1x4.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/vdotb_lane_za32_mf8_vg1x4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/vdotb_lane_za32_mf8_vg1x4.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,119 ----
+ /* { dg-do assemble { target { aarch64_asm_sme-f8f32_ok } } } */
+ /* { dg-do compile { target { ! { aarch64_asm_sme-f8f32_ok } } } } */
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ #pragma GCC target "+sve2,+sme-f8f32"
+ 
+ /* Available variants are:
+    _za32 if __ARM_FEATURE_SME_F8F32 != 0
+    void svvdotb_lane_za32[_mf8]_vg1x4_fpm (uint32_t slice, svmfloat8x2_t zn, svmfloat8_t zm, uint64_t imm_idx, fpm_t fpm) __arm_streaming __arm_inout("za");  */
+ 
+ /*
+ ** dotb_lane_0_z0_z4_0:
+ **	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), #?0
+ **	fvdotb	za\.s\[\1, 0, vgx4\], {z0\.b - z1\.b}, z4\.b\[0\]
+ **	ret
+ */
+ TEST_ZA_LANE (dotb_lane_0_z0_z4_0, svmfloat8x2_t, svmfloat8_t,
+ 	      svvdotb_lane_za32_mf8_vg1x4_fpm (0, z0, z4, 0, fpm0),
+ 	      svvdotb_lane_za32_vg1x4_fpm (0, z0, z4, 0, fpm0))
+ 
+ /*
+ ** dotb_lane_w0_z0_z7_1:
+ **	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), w0
+ **	fvdotb	za\.s\[\1, 0, vgx4\], {z0\.b - z1\.b}, z7\.b\[1\]
+ **	ret
+ */
+ TEST_ZA_LANE (dotb_lane_w0_z0_z7_1, svmfloat8x2_t, svmfloat8_t,
+ 	      svvdotb_lane_za32_mf8_vg1x4_fpm (w0, z0, z7, 1, fpm0),
+ 	      svvdotb_lane_za32_vg1x4_fpm (w0, z0, z7, 1, fpm0))
+ 
+ /*
+ ** dotb_lane_w8_z28_z4_2:
+ **	msr	fpmr, x1
+ **	fvdotb	za\.s\[w8, 0, vgx4\], {z28\.b - z29\.b}, z4\.b\[2\]
+ **	ret
+ */
+ TEST_ZA_LANE (dotb_lane_w8_z28_z4_2, svmfloat8x2_t, svmfloat8_t,
+ 	      svvdotb_lane_za32_mf8_vg1x4_fpm (w8, z28, z4, 2, fpm0),
+ 	      svvdotb_lane_za32_vg1x4_fpm (w8, z28, z4, 2, fpm0))
+ 
+ /*
+ ** dotb_lane_w8p7_z0_z4_3:
+ **	msr	fpmr, x1
+ **	fvdotb	za\.s\[w8, 7, vgx4\], {z0\.b - z1\.b}, z4\.b\[3\]
+ **	ret
+ */
+ TEST_ZA_LANE (dotb_lane_w8p7_z0_z4_3, svmfloat8x2_t, svmfloat8_t,
+ 	      svvdotb_lane_za32_mf8_vg1x4_fpm (w8 + 7, z0, z4, 3, fpm0),
+ 	      svvdotb_lane_za32_vg1x4_fpm (w8 + 7, z0, z4, 3, fpm0))
+ 
+ /*
+ ** dotb_lane_w8p8_z0_z4_0:
+ **	add	(w8|w9|w10|w11), w8, #?8
+ **	msr	fpmr, x1
+ **	fvdotb	za\.s\[\1, 0, vgx4\], {z0\.b - z1\.b}, z4\.b\[0\]
+ **	ret
+ */
+ TEST_ZA_LANE (dotb_lane_w8p8_z0_z4_0, svmfloat8x2_t, svmfloat8_t,
+ 	      svvdotb_lane_za32_mf8_vg1x4_fpm (w8 + 8, z0, z4, 0, fpm0),
+ 	      svvdotb_lane_za32_vg1x4_fpm (w8 + 8, z0, z4, 0, fpm0))
+ 
+ /*
+ ** dotb_lane_w0m1_z0_z4_1:
+ **	sub	(w8|w9|w10|w11), w0, #?1
+ **	msr	fpmr, x1
+ **	fvdotb	za\.s\[\1, 0, vgx4\], {z0\.b - z1\.b}, z4\.b\[1\]
+ **	ret
+ */
+ TEST_ZA_LANE (dotb_lane_w0m1_z0_z4_1, svmfloat8x2_t, svmfloat8_t,
+ 	      svvdotb_lane_za32_mf8_vg1x4_fpm (w0 - 1, z0, z4, 1, fpm0),
+ 	      svvdotb_lane_za32_vg1x4_fpm (w0 - 1, z0, z4, 1, fpm0))
+ 
+ /*
+ ** dotb_lane_w8_z4_z15_2:
+ **	str	d15, \[sp, #?-16\]!
+ **	msr	fpmr, x1
+ **	fvdotb	za\.s\[w8, 0, vgx4\], {z4\.b - z5\.b}, z15\.b\[2\]
+ **	ldr	d15, \[sp\], #?16
+ **	ret
+ */
+ TEST_ZA_LANE_Z15 (dotb_lane_w8_z4_z15_2, svmfloat8x2_t, svmfloat8_t,
+ 		  svvdotb_lane_za32_mf8_vg1x4_fpm (w8, z4, z15, 2, fpm0),
+ 		  svvdotb_lane_za32_vg1x4_fpm (w8, z4, z15, 2, fpm0))
+ 
+ /*
+ ** dotb_lane_w8_z28_z16_3:
+ **	msr	fpmr, x1
+ **	mov	(z[0-7]).d, z16.d
+ **	fvdotb	za\.s\[w8, 0, vgx4\], {z28\.b - z29\.b}, \1\.b\[3\]
+ **	ret
+ */
+ TEST_ZA_LANE (dotb_lane_w8_z28_z16_3, svmfloat8x2_t, svmfloat8_t,
+ 	      svvdotb_lane_za32_mf8_vg1x4_fpm (w8, z28, z16, 3, fpm0),
+ 	      svvdotb_lane_za32_vg1x4_fpm (w8, z28, z16, 3, fpm0))
+ 
+ /*
+ ** dotb_lane_w8_z17_z7_0:
+ **	msr	fpmr, x1
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	fvdotb	za\.s\[w8, 0, vgx4\], [^\n]+, z7\.b\[0\]
+ **	ret
+ */
+ TEST_ZA_LANE (dotb_lane_w8_z17_z7_0, svmfloat8x2_t, svmfloat8_t,
+ 	      svvdotb_lane_za32_mf8_vg1x4_fpm (w8, z17, z7, 0, fpm0),
+ 	      svvdotb_lane_za32_vg1x4_fpm (w8, z17, z7, 0, fpm0))
+ 
+ /*
+ ** dotb_lane_w8_z22_z4_1:
+ **	msr	fpmr, x1
+ **	fvdotb	za\.s\[w8, 0, vgx4\], {z22\.b - z23\.b}, z4\.b\[1\]
+ **	ret
+ */
+ TEST_ZA_LANE (dotb_lane_w8_z22_z4_1, svmfloat8x2_t, svmfloat8_t,
+ 	      svvdotb_lane_za32_mf8_vg1x4_fpm (w8, z22, z4, 1, fpm0),
+ 	      svvdotb_lane_za32_vg1x4_fpm (w8, z22, z4, 1, fpm0))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/vdott_lane_za32_mf8_vg1x4.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/vdott_lane_za32_mf8_vg1x4.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/vdott_lane_za32_mf8_vg1x4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/vdott_lane_za32_mf8_vg1x4.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,119 ----
+ /* { dg-do assemble { target { aarch64_asm_sme-f8f32_ok } } } */
+ /* { dg-do compile { target { ! { aarch64_asm_sme-f8f32_ok } } } } */
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ #pragma GCC target "+sve2,+sme-f8f32"
+ 
+ /* Available variants are:
+    _za32 if __ARM_FEATURE_SME_F8F32 != 0
+    void svvdott_lane_za32[_mf8]_vg1x4_fpm (uint32_t slice, svmfloat8x2_t zn, svmfloat8_t zm, uint64_t imm_idx, fpm_t fpm) __arm_streaming __arm_inout("za");  */
+ 
+ /*
+ ** dott_lane_0_z0_z4_0:
+ **	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), #?0
+ **	fvdott	za\.s\[\1, 0, vgx4\], {z0\.b - z1\.b}, z4\.b\[0\]
+ **	ret
+ */
+ TEST_ZA_LANE (dott_lane_0_z0_z4_0, svmfloat8x2_t, svmfloat8_t,
+ 	      svvdott_lane_za32_mf8_vg1x4_fpm (0, z0, z4, 0, fpm0),
+ 	      svvdott_lane_za32_vg1x4_fpm (0, z0, z4, 0, fpm0))
+ 
+ /*
+ ** dott_lane_w0_z0_z7_1:
+ **	msr	fpmr, x1
+ **	mov	(w8|w9|w10|w11), w0
+ **	fvdott	za\.s\[\1, 0, vgx4\], {z0\.b - z1\.b}, z7\.b\[1\]
+ **	ret
+ */
+ TEST_ZA_LANE (dott_lane_w0_z0_z7_1, svmfloat8x2_t, svmfloat8_t,
+ 	      svvdott_lane_za32_mf8_vg1x4_fpm (w0, z0, z7, 1, fpm0),
+ 	      svvdott_lane_za32_vg1x4_fpm (w0, z0, z7, 1, fpm0))
+ 
+ /*
+ ** dott_lane_w8_z28_z4_2:
+ **	msr	fpmr, x1
+ **	fvdott	za\.s\[w8, 0, vgx4\], {z28\.b - z29\.b}, z4\.b\[2\]
+ **	ret
+ */
+ TEST_ZA_LANE (dott_lane_w8_z28_z4_2, svmfloat8x2_t, svmfloat8_t,
+ 	      svvdott_lane_za32_mf8_vg1x4_fpm (w8, z28, z4, 2, fpm0),
+ 	      svvdott_lane_za32_vg1x4_fpm (w8, z28, z4, 2, fpm0))
+ 
+ /*
+ ** dott_lane_w8p7_z0_z4_3:
+ **	msr	fpmr, x1
+ **	fvdott	za\.s\[w8, 7, vgx4\], {z0\.b - z1\.b}, z4\.b\[3\]
+ **	ret
+ */
+ TEST_ZA_LANE (dott_lane_w8p7_z0_z4_3, svmfloat8x2_t, svmfloat8_t,
+ 	      svvdott_lane_za32_mf8_vg1x4_fpm (w8 + 7, z0, z4, 3, fpm0),
+ 	      svvdott_lane_za32_vg1x4_fpm (w8 + 7, z0, z4, 3, fpm0))
+ 
+ /*
+ ** dott_lane_w8p8_z0_z4_0:
+ **	add	(w8|w9|w10|w11), w8, #?8
+ **	msr	fpmr, x1
+ **	fvdott	za\.s\[\1, 0, vgx4\], {z0\.b - z1\.b}, z4\.b\[0\]
+ **	ret
+ */
+ TEST_ZA_LANE (dott_lane_w8p8_z0_z4_0, svmfloat8x2_t, svmfloat8_t,
+ 	      svvdott_lane_za32_mf8_vg1x4_fpm (w8 + 8, z0, z4, 0, fpm0),
+ 	      svvdott_lane_za32_vg1x4_fpm (w8 + 8, z0, z4, 0, fpm0))
+ 
+ /*
+ ** dott_lane_w0m1_z0_z4_1:
+ **	sub	(w8|w9|w10|w11), w0, #?1
+ **	msr	fpmr, x1
+ **	fvdott	za\.s\[\1, 0, vgx4\], {z0\.b - z1\.b}, z4\.b\[1\]
+ **	ret
+ */
+ TEST_ZA_LANE (dott_lane_w0m1_z0_z4_1, svmfloat8x2_t, svmfloat8_t,
+ 	      svvdott_lane_za32_mf8_vg1x4_fpm (w0 - 1, z0, z4, 1, fpm0),
+ 	      svvdott_lane_za32_vg1x4_fpm (w0 - 1, z0, z4, 1, fpm0))
+ 
+ /*
+ ** dott_lane_w8_z4_z15_2:
+ **	str	d15, \[sp, #?-16\]!
+ **	msr	fpmr, x1
+ **	fvdott	za\.s\[w8, 0, vgx4\], {z4\.b - z5\.b}, z15\.b\[2\]
+ **	ldr	d15, \[sp\], #?16
+ **	ret
+ */
+ TEST_ZA_LANE_Z15 (dott_lane_w8_z4_z15_2, svmfloat8x2_t, svmfloat8_t,
+ 		  svvdott_lane_za32_mf8_vg1x4_fpm (w8, z4, z15, 2, fpm0),
+ 		  svvdott_lane_za32_vg1x4_fpm (w8, z4, z15, 2, fpm0))
+ 
+ /*
+ ** dott_lane_w8_z28_z16_3:
+ **	msr	fpmr, x1
+ **	mov	(z[0-7]).d, z16.d
+ **	fvdott	za\.s\[w8, 0, vgx4\], {z28\.b - z29\.b}, \1\.b\[3\]
+ **	ret
+ */
+ TEST_ZA_LANE (dott_lane_w8_z28_z16_3, svmfloat8x2_t, svmfloat8_t,
+ 	      svvdott_lane_za32_mf8_vg1x4_fpm (w8, z28, z16, 3, fpm0),
+ 	      svvdott_lane_za32_vg1x4_fpm (w8, z28, z16, 3, fpm0))
+ 
+ /*
+ ** dott_lane_w8_z17_z7_0:
+ **	msr	fpmr, x1
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	fvdott	za\.s\[w8, 0, vgx4\], [^\n]+, z7\.b\[0\]
+ **	ret
+ */
+ TEST_ZA_LANE (dott_lane_w8_z17_z7_0, svmfloat8x2_t, svmfloat8_t,
+ 	      svvdott_lane_za32_mf8_vg1x4_fpm (w8, z17, z7, 0, fpm0),
+ 	      svvdott_lane_za32_vg1x4_fpm (w8, z17, z7, 0, fpm0))
+ 
+ /*
+ ** dott_lane_w8_z22_z4_1:
+ **	msr	fpmr, x1
+ **	fvdott	za\.s\[w8, 0, vgx4\], {z22\.b - z23\.b}, z4\.b\[1\]
+ **	ret
+ */
+ TEST_ZA_LANE (dott_lane_w8_z22_z4_1, svmfloat8x2_t, svmfloat8_t,
+ 	      svvdott_lane_za32_mf8_vg1x4_fpm (w8, z22, z4, 1, fpm0),
+ 	      svvdott_lane_za32_vg1x4_fpm (w8, z22, z4, 1, fpm0))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_hor_za8_vg2.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_hor_za8_vg2.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_hor_za8_vg2.c	Sun Dec 21 22:32:11 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_hor_za8_vg2.c	Sun Dec 28 22:32:13 2025
*************** TEST_ZA_XN (write_za8_u8_z4_0_1, svuint8
*** 23,28 ****
--- 23,38 ----
  	    svwrite_hor_za8_u8_vg2 (0, 1, z4))
  
  /*
+ ** write_za8_mf8_z4_0_1:
+ **	mov	(w1[2-5]), #?1
+ **	mova	za0h\.b\[\1, 0:1\], {z4\.b - z5\.b}
+ **	ret
+ */
+ TEST_ZA_XN (write_za8_mf8_z4_0_1, svmfloat8x2_t,
+ 	    svwrite_hor_za8_mf8_vg2 (0, 1, z4),
+ 	    svwrite_hor_za8_mf8_vg2 (0, 1, z4))
+ 
+ /*
  ** write_za8_s8_z28_0_w11:
  **	mov	(w1[2-5]), w11
  **	mova	za0h\.b\[\1, 0:1\], {z28\.b - z29\.b}
*************** TEST_ZA_XN (write_za8_u8_z18_0_w15, svui
*** 51,56 ****
--- 61,75 ----
  	    svwrite_hor_za8_u8_vg2 (0, w15, z18))
  
  /*
+ ** write_za8_mf8_z18_0_w15:
+ **	mova	za0h\.b\[w15, 0:1\], {z18\.b - z19\.b}
+ **	ret
+ */
+ TEST_ZA_XN (write_za8_mf8_z18_0_w15, svmfloat8x2_t,
+ 	    svwrite_hor_za8_mf8_vg2 (0, w15, z18),
+ 	    svwrite_hor_za8_mf8_vg2 (0, w15, z18))
+ 
+ /*
  ** write_za8_s8_z23_0_w12p14:
  **	mov	[^\n]+
  **	mov	[^\n]+
*************** TEST_ZA_XN (write_za8_u8_z4_0_w12p1, svu
*** 72,77 ****
--- 91,106 ----
  	    svwrite_hor_za8_u8_vg2 (0, w12 + 1, z4))
  
  /*
+ ** write_za8_mf8_z4_0_w12p1:
+ **	add	(w[0-9]+), w12, #?1
+ **	mova	za0h\.b\[\1, 0:1\], {z4\.b - z5\.b}
+ **	ret
+ */
+ TEST_ZA_XN (write_za8_mf8_z4_0_w12p1, svmfloat8x2_t,
+ 	    svwrite_hor_za8_mf8_vg2 (0, w12 + 1, z4),
+ 	    svwrite_hor_za8_mf8_vg2 (0, w12 + 1, z4))
+ 
+ /*
  ** write_za8_s8_z28_0_w12p2:
  **	mova	za0h\.b\[w12, 2:3\], {z28\.b - z29\.b}
  **	ret
*************** TEST_ZA_XN (write_za8_u8_z0_0_w15p3, svu
*** 91,96 ****
--- 120,135 ----
  	    svwrite_hor_za8_u8_vg2 (0, w15 + 3, z0))
  
  /*
+ ** write_za8_mf8_z0_0_w15p3:
+ **	add	(w[0-9]+), w15, #?3
+ **	mova	za0h\.b\[\1, 0:1\], {z0\.b - z1\.b}
+ **	ret
+ */
+ TEST_ZA_XN (write_za8_mf8_z0_0_w15p3, svmfloat8x2_t,
+ 	    svwrite_hor_za8_mf8_vg2 (0, w15 + 3, z0),
+ 	    svwrite_hor_za8_mf8_vg2 (0, w15 + 3, z0))
+ 
+ /*
  ** write_za8_u8_z4_0_w15p12:
  **	mova	za0h\.b\[w15, 12:13\], {z4\.b - z5\.b}
  **	ret
*************** TEST_ZA_XN (write_za8_u8_z4_0_w15p12, sv
*** 100,105 ****
--- 139,153 ----
  	    svwrite_hor_za8_u8_vg2 (0, w15 + 12, z4))
  
  /*
+ ** write_za8_mf8_z4_0_w15p12:
+ **	mova	za0h\.b\[w15, 12:13\], {z4\.b - z5\.b}
+ **	ret
+ */
+ TEST_ZA_XN (write_za8_mf8_z4_0_w15p12, svmfloat8x2_t,
+ 	    svwrite_hor_za8_mf8_vg2 (0, w15 + 12, z4),
+ 	    svwrite_hor_za8_mf8_vg2 (0, w15 + 12, z4))
+ 
+ /*
  ** write_za8_u8_z28_0_w12p15:
  **	add	(w[0-9]+), w12, #?15
  **	mova	za0h\.b\[\1, 0:1\], {z28\.b - z29\.b}
*************** TEST_ZA_XN (write_za8_u8_z28_0_w12p15, s
*** 110,115 ****
--- 158,173 ----
  	    svwrite_hor_za8_u8_vg2 (0, w12 + 15, z28))
  
  /*
+ ** write_za8_mf8_z28_0_w12p15:
+ **	add	(w[0-9]+), w12, #?15
+ **	mova	za0h\.b\[\1, 0:1\], {z28\.b - z29\.b}
+ **	ret
+ */
+ TEST_ZA_XN (write_za8_mf8_z28_0_w12p15, svmfloat8x2_t,
+ 	    svwrite_hor_za8_mf8_vg2 (0, w12 + 15, z28),
+ 	    svwrite_hor_za8_mf8_vg2 (0, w12 + 15, z28))
+ 
+ /*
  ** write_za8_s8_z0_0_w15p16:
  **	add	(w[0-9]+), w15, #?16
  **	mova	za0h\.b\[\1, 0:1\], {z0\.b - z1\.b}
*************** TEST_ZA_XN (write_za8_u8_z4_0_w12m1, svu
*** 130,135 ****
--- 188,203 ----
  	    svwrite_hor_za8_u8_vg2 (0, w12 - 1, z4))
  
  /*
+ ** write_za8_mf8_z4_0_w12m1:
+ **	sub	(w[0-9]+), w12, #?1
+ **	mova	za0h\.b\[\1, 0:1\], {z4\.b - z5\.b}
+ **	ret
+ */
+ TEST_ZA_XN (write_za8_mf8_z4_0_w12m1, svmfloat8x2_t,
+ 	    svwrite_hor_za8_mf8_vg2 (0, w12 - 1, z4),
+ 	    svwrite_hor_za8_mf8_vg2 (0, w12 - 1, z4))
+ 
+ /*
  ** write_za8_u8_z18_0_w16:
  **	mov	(w1[2-5]), w16
  **	mova	za0h\.b\[\1, 0:1\], {z18\.b - z19\.b}
*************** TEST_ZA_XN (write_za8_u8_z4_0_w12m1, svu
*** 138,140 ****
--- 206,218 ----
  TEST_ZA_XN (write_za8_u8_z18_0_w16, svuint8x2_t,
  	    svwrite_hor_za8_u8_vg2 (0, w16, z18),
  	    svwrite_hor_za8_u8_vg2 (0, w16, z18))
+ 
+ /*
+ ** write_za8_mf8_z18_0_w16:
+ **	mov	(w1[2-5]), w16
+ **	mova	za0h\.b\[\1, 0:1\], {z18\.b - z19\.b}
+ **	ret
+ */
+ TEST_ZA_XN (write_za8_mf8_z18_0_w16, svmfloat8x2_t,
+ 	    svwrite_hor_za8_mf8_vg2 (0, w16, z18),
+ 	    svwrite_hor_za8_mf8_vg2 (0, w16, z18))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_hor_za8_vg4.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_hor_za8_vg4.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_hor_za8_vg4.c	Sun Dec 21 22:32:11 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_hor_za8_vg4.c	Sun Dec 28 22:32:13 2025
*************** TEST_ZA_XN (write_za8_u8_z4_0_1, svuint8
*** 23,28 ****
--- 23,38 ----
  	    svwrite_hor_za8_u8_vg4 (0, 1, z4))
  
  /*
+ ** write_za8_mf8_z4_0_1:
+ **	mov	(w1[2-5]), #?1
+ **	mova	za0h\.b\[\1, 0:3\], {z4\.b - z7\.b}
+ **	ret
+ */
+ TEST_ZA_XN (write_za8_mf8_z4_0_1, svmfloat8x4_t,
+ 	    svwrite_hor_za8_mf8_vg4 (0, 1, z4),
+ 	    svwrite_hor_za8_mf8_vg4 (0, 1, z4))
+ 
+ /*
  ** write_za8_s8_z28_0_w11:
  **	mov	(w1[2-5]), w11
  **	mova	za0h\.b\[\1, 0:3\], {z28\.b - z31\.b}
*************** TEST_ZA_XN (write_za8_u8_z18_0_w15, svui
*** 55,60 ****
--- 65,83 ----
  	    svwrite_hor_za8_u8_vg4 (0, w15, z18))
  
  /*
+ ** write_za8_mf8_z18_0_w15:
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mova	za0h\.b\[w15, 0:3\], {[^\n]+}
+ **	ret
+ */
+ TEST_ZA_XN (write_za8_mf8_z18_0_w15, svmfloat8x4_t,
+ 	    svwrite_hor_za8_mf8_vg4 (0, w15, z18),
+ 	    svwrite_hor_za8_mf8_vg4 (0, w15, z18))
+ 
+ /*
  ** write_za8_s8_z23_0_w12p12:
  **	mov	[^\n]+
  **	mov	[^\n]+
*************** TEST_ZA_XN (write_za8_u8_z4_0_w12p1, svu
*** 78,83 ****
--- 101,116 ----
  	    svwrite_hor_za8_u8_vg4 (0, w12 + 1, z4))
  
  /*
+ ** write_za8_mf8_z4_0_w12p1:
+ **	add	(w[0-9]+), w12, #?1
+ **	mova	za0h\.b\[\1, 0:3\], {z4\.b - z7\.b}
+ **	ret
+ */
+ TEST_ZA_XN (write_za8_mf8_z4_0_w12p1, svmfloat8x4_t,
+ 	    svwrite_hor_za8_mf8_vg4 (0, w12 + 1, z4),
+ 	    svwrite_hor_za8_mf8_vg4 (0, w12 + 1, z4))
+ 
+ /*
  ** write_za8_s8_z28_0_w12p2:
  **	add	(w[0-9]+), w12, #?2
  **	mova	za0h\.b\[\1, 0:3\], {z28\.b - z31\.b}
*************** TEST_ZA_XN (write_za8_u8_z0_0_w15p3, svu
*** 98,103 ****
--- 131,146 ----
  	    svwrite_hor_za8_u8_vg4 (0, w15 + 3, z0))
  
  /*
+ ** write_za8_mf8_z0_0_w15p3:
+ **	add	(w[0-9]+), w15, #?3
+ **	mova	za0h\.b\[\1, 0:3\], {z0\.b - z3\.b}
+ **	ret
+ */
+ TEST_ZA_XN (write_za8_mf8_z0_0_w15p3, svmfloat8x4_t,
+ 	    svwrite_hor_za8_mf8_vg4 (0, w15 + 3, z0),
+ 	    svwrite_hor_za8_mf8_vg4 (0, w15 + 3, z0))
+ 
+ /*
  ** write_za8_u8_z0_0_w12p4:
  **	mova	za0h\.b\[w12, 4:7\], {z0\.b - z3\.b}
  **	ret
*************** TEST_ZA_XN (write_za8_u8_z0_0_w12p4, svu
*** 107,112 ****
--- 150,164 ----
  	    svwrite_hor_za8_u8_vg4 (0, w12 + 4, z0))
  
  /*
+ ** write_za8_mf8_z0_0_w12p4:
+ **	mova	za0h\.b\[w12, 4:7\], {z0\.b - z3\.b}
+ **	ret
+ */
+ TEST_ZA_XN (write_za8_mf8_z0_0_w12p4, svmfloat8x4_t,
+ 	    svwrite_hor_za8_mf8_vg4 (0, w12 + 4, z0),
+ 	    svwrite_hor_za8_mf8_vg4 (0, w12 + 4, z0))
+ 
+ /*
  ** write_za8_u8_z4_0_w15p12:
  **	mova	za0h\.b\[w15, 12:15\], {z4\.b - z7\.b}
  **	ret
*************** TEST_ZA_XN (write_za8_u8_z4_0_w15p12, sv
*** 116,121 ****
--- 168,182 ----
  	    svwrite_hor_za8_u8_vg4 (0, w15 + 12, z4))
  
  /*
+ ** write_za8_mf8_z4_0_w15p12:
+ **	mova	za0h\.b\[w15, 12:15\], {z4\.b - z7\.b}
+ **	ret
+ */
+ TEST_ZA_XN (write_za8_mf8_z4_0_w15p12, svmfloat8x4_t,
+ 	    svwrite_hor_za8_mf8_vg4 (0, w15 + 12, z4),
+ 	    svwrite_hor_za8_mf8_vg4 (0, w15 + 12, z4))
+ 
+ /*
  ** write_za8_u8_z28_0_w12p14:
  **	add	(w[0-9]+), w12, #?14
  **	mova	za0h\.b\[\1, 0:3\], {z28\.b - z31\.b}
*************** TEST_ZA_XN (write_za8_u8_z28_0_w12p14, s
*** 126,131 ****
--- 187,202 ----
  	    svwrite_hor_za8_u8_vg4 (0, w12 + 14, z28))
  
  /*
+ ** write_za8_mf8_z28_0_w12p14:
+ **	add	(w[0-9]+), w12, #?14
+ **	mova	za0h\.b\[\1, 0:3\], {z28\.b - z31\.b}
+ **	ret
+ */
+ TEST_ZA_XN (write_za8_mf8_z28_0_w12p14, svmfloat8x4_t,
+ 	    svwrite_hor_za8_mf8_vg4 (0, w12 + 14, z28),
+ 	    svwrite_hor_za8_mf8_vg4 (0, w12 + 14, z28))
+ 
+ /*
  ** write_za8_s8_z0_0_w15p16:
  **	add	(w[0-9]+), w15, #?16
  **	mova	za0h\.b\[\1, 0:3\], {z0\.b - z3\.b}
*************** TEST_ZA_XN (write_za8_u8_z4_0_w12m1, svu
*** 146,151 ****
--- 217,232 ----
  	    svwrite_hor_za8_u8_vg4 (0, w12 - 1, z4))
  
  /*
+ ** write_za8_mf8_z4_0_w12m1:
+ **	sub	(w[0-9]+), w12, #?1
+ **	mova	za0h\.b\[\1, 0:3\], {z4\.b - z7\.b}
+ **	ret
+ */
+ TEST_ZA_XN (write_za8_mf8_z4_0_w12m1, svmfloat8x4_t,
+ 	    svwrite_hor_za8_mf8_vg4 (0, w12 - 1, z4),
+ 	    svwrite_hor_za8_mf8_vg4 (0, w12 - 1, z4))
+ 
+ /*
  ** write_za8_u8_z28_0_w16:
  **	mov	(w1[2-5]), w16
  **	mova	za0h\.b\[\1, 0:3\], {z28\.b - z31\.b}
*************** TEST_ZA_XN (write_za8_u8_z4_0_w12m1, svu
*** 154,156 ****
--- 235,247 ----
  TEST_ZA_XN (write_za8_u8_z28_0_w16, svuint8x4_t,
  	    svwrite_hor_za8_u8_vg4 (0, w16, z28),
  	    svwrite_hor_za8_u8_vg4 (0, w16, z28))
+ 
+ /*
+ ** write_za8_mf8_z28_0_w16:
+ **	mov	(w1[2-5]), w16
+ **	mova	za0h\.b\[\1, 0:3\], {z28\.b - z31\.b}
+ **	ret
+ */
+ TEST_ZA_XN (write_za8_mf8_z28_0_w16, svmfloat8x4_t,
+ 	    svwrite_hor_za8_mf8_vg4 (0, w16, z28),
+ 	    svwrite_hor_za8_mf8_vg4 (0, w16, z28))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_ver_za8_vg2.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_ver_za8_vg2.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_ver_za8_vg2.c	Sun Dec 21 22:32:11 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_ver_za8_vg2.c	Sun Dec 28 22:32:13 2025
*************** TEST_ZA_XN (write_za8_u8_z4_0_1, svuint8
*** 23,28 ****
--- 23,38 ----
  	    svwrite_ver_za8_u8_vg2 (0, 1, z4))
  
  /*
+ ** write_za8_mf8_z4_0_1:
+ **	mov	(w1[2-5]), #?1
+ **	mova	za0v\.b\[\1, 0:1\], {z4\.b - z5\.b}
+ **	ret
+ */
+ TEST_ZA_XN (write_za8_mf8_z4_0_1, svmfloat8x2_t,
+ 	    svwrite_ver_za8_mf8_vg2 (0, 1, z4),
+ 	    svwrite_ver_za8_mf8_vg2 (0, 1, z4))
+ 
+ /*
  ** write_za8_s8_z28_0_w11:
  **	mov	(w1[2-5]), w11
  **	mova	za0v\.b\[\1, 0:1\], {z28\.b - z29\.b}
*************** TEST_ZA_XN (write_za8_u8_z18_0_w15, svui
*** 51,56 ****
--- 61,75 ----
  	    svwrite_ver_za8_u8_vg2 (0, w15, z18))
  
  /*
+ ** write_za8_mf8_z18_0_w15:
+ **	mova	za0v\.b\[w15, 0:1\], {z18\.b - z19\.b}
+ **	ret
+ */
+ TEST_ZA_XN (write_za8_mf8_z18_0_w15, svmfloat8x2_t,
+ 	    svwrite_ver_za8_mf8_vg2 (0, w15, z18),
+ 	    svwrite_ver_za8_mf8_vg2 (0, w15, z18))
+ 
+ /*
  ** write_za8_s8_z23_0_w12p14:
  **	mov	[^\n]+
  **	mov	[^\n]+
*************** TEST_ZA_XN (write_za8_u8_z4_0_w12p1, svu
*** 72,77 ****
--- 91,106 ----
  	    svwrite_ver_za8_u8_vg2 (0, w12 + 1, z4))
  
  /*
+ ** write_za8_mf8_z4_0_w12p1:
+ **	add	(w[0-9]+), w12, #?1
+ **	mova	za0v\.b\[\1, 0:1\], {z4\.b - z5\.b}
+ **	ret
+ */
+ TEST_ZA_XN (write_za8_mf8_z4_0_w12p1, svmfloat8x2_t,
+ 	    svwrite_ver_za8_mf8_vg2 (0, w12 + 1, z4),
+ 	    svwrite_ver_za8_mf8_vg2 (0, w12 + 1, z4))
+ 
+ /*
  ** write_za8_s8_z28_0_w12p2:
  **	mova	za0v\.b\[w12, 2:3\], {z28\.b - z29\.b}
  **	ret
*************** TEST_ZA_XN (write_za8_u8_z0_0_w15p3, svu
*** 91,96 ****
--- 120,135 ----
  	    svwrite_ver_za8_u8_vg2 (0, w15 + 3, z0))
  
  /*
+ ** write_za8_mf8_z0_0_w15p3:
+ **	add	(w[0-9]+), w15, #?3
+ **	mova	za0v\.b\[\1, 0:1\], {z0\.b - z1\.b}
+ **	ret
+ */
+ TEST_ZA_XN (write_za8_mf8_z0_0_w15p3, svmfloat8x2_t,
+ 	    svwrite_ver_za8_mf8_vg2 (0, w15 + 3, z0),
+ 	    svwrite_ver_za8_mf8_vg2 (0, w15 + 3, z0))
+ 
+ /*
  ** write_za8_u8_z4_0_w15p12:
  **	mova	za0v\.b\[w15, 12:13\], {z4\.b - z5\.b}
  **	ret
*************** TEST_ZA_XN (write_za8_u8_z4_0_w15p12, sv
*** 100,105 ****
--- 139,153 ----
  	    svwrite_ver_za8_u8_vg2 (0, w15 + 12, z4))
  
  /*
+ ** write_za8_mf8_z4_0_w15p12:
+ **	mova	za0v\.b\[w15, 12:13\], {z4\.b - z5\.b}
+ **	ret
+ */
+ TEST_ZA_XN (write_za8_mf8_z4_0_w15p12, svmfloat8x2_t,
+ 	    svwrite_ver_za8_mf8_vg2 (0, w15 + 12, z4),
+ 	    svwrite_ver_za8_mf8_vg2 (0, w15 + 12, z4))
+ 
+ /*
  ** write_za8_u8_z28_0_w12p15:
  **	add	(w[0-9]+), w12, #?15
  **	mova	za0v\.b\[\1, 0:1\], {z28\.b - z29\.b}
*************** TEST_ZA_XN (write_za8_u8_z28_0_w12p15, s
*** 110,115 ****
--- 158,173 ----
  	    svwrite_ver_za8_u8_vg2 (0, w12 + 15, z28))
  
  /*
+ ** write_za8_mf8_z28_0_w12p15:
+ **	add	(w[0-9]+), w12, #?15
+ **	mova	za0v\.b\[\1, 0:1\], {z28\.b - z29\.b}
+ **	ret
+ */
+ TEST_ZA_XN (write_za8_mf8_z28_0_w12p15, svmfloat8x2_t,
+ 	    svwrite_ver_za8_mf8_vg2 (0, w12 + 15, z28),
+ 	    svwrite_ver_za8_mf8_vg2 (0, w12 + 15, z28))
+ 
+ /*
  ** write_za8_s8_z0_0_w15p16:
  **	add	(w[0-9]+), w15, #?16
  **	mova	za0v\.b\[\1, 0:1\], {z0\.b - z1\.b}
*************** TEST_ZA_XN (write_za8_u8_z4_0_w12m1, svu
*** 130,135 ****
--- 188,203 ----
  	    svwrite_ver_za8_u8_vg2 (0, w12 - 1, z4))
  
  /*
+ ** write_za8_mf8_z4_0_w12m1:
+ **	sub	(w[0-9]+), w12, #?1
+ **	mova	za0v\.b\[\1, 0:1\], {z4\.b - z5\.b}
+ **	ret
+ */
+ TEST_ZA_XN (write_za8_mf8_z4_0_w12m1, svmfloat8x2_t,
+ 	    svwrite_ver_za8_mf8_vg2 (0, w12 - 1, z4),
+ 	    svwrite_ver_za8_mf8_vg2 (0, w12 - 1, z4))
+ 
+ /*
  ** write_za8_u8_z18_0_w16:
  **	mov	(w1[2-5]), w16
  **	mova	za0v\.b\[\1, 0:1\], {z18\.b - z19\.b}
*************** TEST_ZA_XN (write_za8_u8_z4_0_w12m1, svu
*** 138,140 ****
--- 206,218 ----
  TEST_ZA_XN (write_za8_u8_z18_0_w16, svuint8x2_t,
  	    svwrite_ver_za8_u8_vg2 (0, w16, z18),
  	    svwrite_ver_za8_u8_vg2 (0, w16, z18))
+ 
+ /*
+ ** write_za8_mf8_z18_0_w16:
+ **	mov	(w1[2-5]), w16
+ **	mova	za0v\.b\[\1, 0:1\], {z18\.b - z19\.b}
+ **	ret
+ */
+ TEST_ZA_XN (write_za8_mf8_z18_0_w16, svmfloat8x2_t,
+ 	    svwrite_ver_za8_mf8_vg2 (0, w16, z18),
+ 	    svwrite_ver_za8_mf8_vg2 (0, w16, z18))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_ver_za8_vg4.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_ver_za8_vg4.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_ver_za8_vg4.c	Sun Dec 21 22:32:11 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_ver_za8_vg4.c	Sun Dec 28 22:32:13 2025
*************** TEST_ZA_XN (write_za8_u8_z4_0_1, svuint8
*** 23,28 ****
--- 23,38 ----
  	    svwrite_ver_za8_u8_vg4 (0, 1, z4))
  
  /*
+ ** write_za8_mf8_z4_0_1:
+ **	mov	(w1[2-5]), #?1
+ **	mova	za0v\.b\[\1, 0:3\], {z4\.b - z7\.b}
+ **	ret
+ */
+ TEST_ZA_XN (write_za8_mf8_z4_0_1, svmfloat8x4_t,
+ 	    svwrite_ver_za8_mf8_vg4 (0, 1, z4),
+ 	    svwrite_ver_za8_mf8_vg4 (0, 1, z4))
+ 
+ /*
  ** write_za8_s8_z28_0_w11:
  **	mov	(w1[2-5]), w11
  **	mova	za0v\.b\[\1, 0:3\], {z28\.b - z31\.b}
*************** TEST_ZA_XN (write_za8_u8_z18_0_w15, svui
*** 55,60 ****
--- 65,83 ----
  	    svwrite_ver_za8_u8_vg4 (0, w15, z18))
  
  /*
+ ** write_za8_mf8_z18_0_w15:
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mova	za0v\.b\[w15, 0:3\], {[^\n]+}
+ **	ret
+ */
+ TEST_ZA_XN (write_za8_mf8_z18_0_w15, svmfloat8x4_t,
+ 	    svwrite_ver_za8_mf8_vg4 (0, w15, z18),
+ 	    svwrite_ver_za8_mf8_vg4 (0, w15, z18))
+ 
+ /*
  ** write_za8_s8_z23_0_w12p12:
  **	mov	[^\n]+
  **	mov	[^\n]+
*************** TEST_ZA_XN (write_za8_u8_z4_0_w12p1, svu
*** 78,83 ****
--- 101,116 ----
  	    svwrite_ver_za8_u8_vg4 (0, w12 + 1, z4))
  
  /*
+ ** write_za8_mf8_z4_0_w12p1:
+ **	add	(w[0-9]+), w12, #?1
+ **	mova	za0v\.b\[\1, 0:3\], {z4\.b - z7\.b}
+ **	ret
+ */
+ TEST_ZA_XN (write_za8_mf8_z4_0_w12p1, svmfloat8x4_t,
+ 	    svwrite_ver_za8_mf8_vg4 (0, w12 + 1, z4),
+ 	    svwrite_ver_za8_mf8_vg4 (0, w12 + 1, z4))
+ 
+ /*
  ** write_za8_s8_z28_0_w12p2:
  **	add	(w[0-9]+), w12, #?2
  **	mova	za0v\.b\[\1, 0:3\], {z28\.b - z31\.b}
*************** TEST_ZA_XN (write_za8_u8_z0_0_w15p3, svu
*** 98,103 ****
--- 131,146 ----
  	    svwrite_ver_za8_u8_vg4 (0, w15 + 3, z0))
  
  /*
+ ** write_za8_mf8_z0_0_w15p3:
+ **	add	(w[0-9]+), w15, #?3
+ **	mova	za0v\.b\[\1, 0:3\], {z0\.b - z3\.b}
+ **	ret
+ */
+ TEST_ZA_XN (write_za8_mf8_z0_0_w15p3, svmfloat8x4_t,
+ 	    svwrite_ver_za8_mf8_vg4 (0, w15 + 3, z0),
+ 	    svwrite_ver_za8_mf8_vg4 (0, w15 + 3, z0))
+ 
+ /*
  ** write_za8_u8_z0_0_w12p4:
  **	mova	za0v\.b\[w12, 4:7\], {z0\.b - z3\.b}
  **	ret
*************** TEST_ZA_XN (write_za8_u8_z0_0_w12p4, svu
*** 107,112 ****
--- 150,164 ----
  	    svwrite_ver_za8_u8_vg4 (0, w12 + 4, z0))
  
  /*
+ ** write_za8_mf8_z0_0_w12p4:
+ **	mova	za0v\.b\[w12, 4:7\], {z0\.b - z3\.b}
+ **	ret
+ */
+ TEST_ZA_XN (write_za8_mf8_z0_0_w12p4, svmfloat8x4_t,
+ 	    svwrite_ver_za8_mf8_vg4 (0, w12 + 4, z0),
+ 	    svwrite_ver_za8_mf8_vg4 (0, w12 + 4, z0))
+ 
+ /*
  ** write_za8_u8_z4_0_w15p12:
  **	mova	za0v\.b\[w15, 12:15\], {z4\.b - z7\.b}
  **	ret
*************** TEST_ZA_XN (write_za8_u8_z4_0_w15p12, sv
*** 116,121 ****
--- 168,182 ----
  	    svwrite_ver_za8_u8_vg4 (0, w15 + 12, z4))
  
  /*
+ ** write_za8_mf8_z4_0_w15p12:
+ **	mova	za0v\.b\[w15, 12:15\], {z4\.b - z7\.b}
+ **	ret
+ */
+ TEST_ZA_XN (write_za8_mf8_z4_0_w15p12, svmfloat8x4_t,
+ 	    svwrite_ver_za8_mf8_vg4 (0, w15 + 12, z4),
+ 	    svwrite_ver_za8_mf8_vg4 (0, w15 + 12, z4))
+ 
+ /*
  ** write_za8_u8_z28_0_w12p14:
  **	add	(w[0-9]+), w12, #?14
  **	mova	za0v\.b\[\1, 0:3\], {z28\.b - z31\.b}
*************** TEST_ZA_XN (write_za8_u8_z28_0_w12p14, s
*** 126,131 ****
--- 187,202 ----
  	    svwrite_ver_za8_u8_vg4 (0, w12 + 14, z28))
  
  /*
+ ** write_za8_mf8_z28_0_w12p14:
+ **	add	(w[0-9]+), w12, #?14
+ **	mova	za0v\.b\[\1, 0:3\], {z28\.b - z31\.b}
+ **	ret
+ */
+ TEST_ZA_XN (write_za8_mf8_z28_0_w12p14, svmfloat8x4_t,
+ 	    svwrite_ver_za8_mf8_vg4 (0, w12 + 14, z28),
+ 	    svwrite_ver_za8_mf8_vg4 (0, w12 + 14, z28))
+ 
+ /*
  ** write_za8_s8_z0_0_w15p16:
  **	add	(w[0-9]+), w15, #?16
  **	mova	za0v\.b\[\1, 0:3\], {z0\.b - z3\.b}
*************** TEST_ZA_XN (write_za8_u8_z4_0_w12m1, svu
*** 146,151 ****
--- 217,232 ----
  	    svwrite_ver_za8_u8_vg4 (0, w12 - 1, z4))
  
  /*
+ ** write_za8_mf8_z4_0_w12m1:
+ **	sub	(w[0-9]+), w12, #?1
+ **	mova	za0v\.b\[\1, 0:3\], {z4\.b - z7\.b}
+ **	ret
+ */
+ TEST_ZA_XN (write_za8_mf8_z4_0_w12m1, svmfloat8x4_t,
+ 	    svwrite_ver_za8_mf8_vg4 (0, w12 - 1, z4),
+ 	    svwrite_ver_za8_mf8_vg4 (0, w12 - 1, z4))
+ 
+ /*
  ** write_za8_u8_z28_0_w16:
  **	mov	(w1[2-5]), w16
  **	mova	za0v\.b\[\1, 0:3\], {z28\.b - z31\.b}
*************** TEST_ZA_XN (write_za8_u8_z4_0_w12m1, svu
*** 154,156 ****
--- 235,247 ----
  TEST_ZA_XN (write_za8_u8_z28_0_w16, svuint8x4_t,
  	    svwrite_ver_za8_u8_vg4 (0, w16, z28),
  	    svwrite_ver_za8_u8_vg4 (0, w16, z28))
+ 
+ /*
+ ** write_za8_mf8_z28_0_w16:
+ **	mov	(w1[2-5]), w16
+ **	mova	za0v\.b\[\1, 0:3\], {z28\.b - z31\.b}
+ **	ret
+ */
+ TEST_ZA_XN (write_za8_mf8_z28_0_w16, svmfloat8x4_t,
+ 	    svwrite_ver_za8_mf8_vg4 (0, w16, z28),
+ 	    svwrite_ver_za8_mf8_vg4 (0, w16, z28))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_za8_vg1x2.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_za8_vg1x2.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_za8_vg1x2.c	Sun Dec 21 22:32:11 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_za8_vg1x2.c	Sun Dec 28 22:32:13 2025
*************** TEST_ZA_XN (write_w7_z0, svuint8x2_t,
*** 33,38 ****
--- 33,48 ----
  	    svwrite_za8_vg1x2 (w7, z0))
  
  /*
+ ** write_mf8_w7_z0:
+ **	mov	(w8|w9|w10|w11), w7
+ **	mova	za\.d\[\1, 0, vgx2\], {z0\.d - z1\.d}
+ **	ret
+ */
+ TEST_ZA_XN (write_mf8_w7_z0, svmfloat8x2_t,
+ 	    svwrite_za8_mf8_vg1x2 (w7, z0),
+ 	    svwrite_za8_vg1x2 (w7, z0))
+ 
+ /*
  ** write_w8_z0:
  **	mova	za\.d\[w8, 0, vgx2\], {z0\.d - z1\.d}
  **	ret
*************** TEST_ZA_XN (write_w12_z0, svuint8x2_t,
*** 62,67 ****
--- 72,87 ----
  	    svwrite_za8_vg1x2 (w12, z0))
  
  /*
+ ** write_mf8_w12_z0:
+ **	mov	(w8|w9|w10|w11), w12
+ **	mova	za\.d\[\1, 0, vgx2\], {z0\.d - z1\.d}
+ **	ret
+ */
+ TEST_ZA_XN (write_mf8_w12_z0, svmfloat8x2_t,
+ 	    svwrite_za8_mf8_vg1x2 (w12, z0),
+ 	    svwrite_za8_vg1x2 (w12, z0))
+ 
+ /*
  ** write_w8p7_z0:
  **	mova	za\.d\[w8, 7, vgx2\], {z0\.d - z1\.d}
  **	ret
*************** TEST_ZA_XN (write_w8m1_z0, svuint8x2_t,
*** 91,96 ****
--- 111,126 ----
  	    svwrite_za8_vg1x2 (w8 - 1, z0))
  
  /*
+ ** write_mf8_w8m1_z0:
+ **	sub	(w8|w9|w10|w11), w8, #?1
+ **	mova	za\.d\[\1, 0, vgx2\], {z0\.d - z1\.d}
+ **	ret
+ */
+ TEST_ZA_XN (write_mf8_w8m1_z0, svmfloat8x2_t,
+ 	    svwrite_za8_mf8_vg1x2 (w8 - 1, z0),
+ 	    svwrite_za8_vg1x2 (w8 - 1, z0))
+ 
+ /*
  ** write_w8_z18:
  **	mova	za\.d\[w8, 0, vgx2\], {z18\.d - z19\.d}
  **	ret
*************** TEST_ZA_XN (write_w8_z18, svuint8x2_t,
*** 99,104 ****
--- 129,143 ----
  	    svwrite_za8_u8_vg1x2 (w8, z18),
  	    svwrite_za8_vg1x2 (w8, z18))
  
+ /*
+ ** write_mf8_w8_z18:
+ **	mova	za\.d\[w8, 0, vgx2\], {z18\.d - z19\.d}
+ **	ret
+ */
+ TEST_ZA_XN (write_mf8_w8_z18, svmfloat8x2_t,
+ 	    svwrite_za8_mf8_vg1x2 (w8, z18),
+ 	    svwrite_za8_vg1x2 (w8, z18))
+ 
  /* Leave the assembler to check for correctness for misaligned registers.  */
  
  /*
*************** TEST_ZA_XN (write_w8_z23, svint8x2_t,
*** 120,122 ****
--- 159,170 ----
  TEST_ZA_XN (write_w8_z28, svuint8x2_t,
  	    svwrite_za8_u8_vg1x2 (w8, z28),
  	    svwrite_za8_vg1x2 (w8, z28))
+ 
+ /*
+ ** write_mf8_w8_z28:
+ **	mova	za\.d\[w8, 0, vgx2\], {z28\.d - z29\.d}
+ **	ret
+ */
+ TEST_ZA_XN (write_mf8_w8_z28, svmfloat8x2_t,
+ 	    svwrite_za8_mf8_vg1x2 (w8, z28),
+ 	    svwrite_za8_vg1x2 (w8, z28))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_za8_vg1x4.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_za8_vg1x4.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_za8_vg1x4.c	Sun Dec 21 22:32:11 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/write_za8_vg1x4.c	Sun Dec 28 22:32:13 2025
*************** TEST_ZA_XN (write_w0_z0, svuint8x4_t,
*** 23,28 ****
--- 23,38 ----
  	    svwrite_za8_vg1x4 (w0, z0))
  
  /*
+ ** write_mf8_w0_z0:
+ **	mov	(w8|w9|w10|w11), w0
+ **	mova	za\.d\[\1, 0, vgx4\], {z0\.d - z3\.d}
+ **	ret
+ */
+ TEST_ZA_XN (write_mf8_w0_z0, svmfloat8x4_t,
+ 	    svwrite_za8_mf8_vg1x4 (w0, z0),
+ 	    svwrite_za8_vg1x4 (w0, z0))
+ 
+ /*
  ** write_w7_z0:
  **	mov	(w8|w9|w10|w11), w7
  **	mova	za\.d\[\1, 0, vgx4\], {z0\.d - z3\.d}
*************** TEST_ZA_XN (write_w11_z0, svuint8x4_t,
*** 50,55 ****
--- 60,73 ----
  	    svwrite_za8_u8_vg1x4 (w11, z0),
  	    svwrite_za8_vg1x4 (w11, z0))
  
+ /*
+ ** write_mf8_w11_z0:
+ **	mova	za\.d\[w11, 0, vgx4\], {z0\.d - z3\.d}
+ **	ret
+ */
+ TEST_ZA_XN (write_mf8_w11_z0, svmfloat8x4_t,
+ 	    svwrite_za8_mf8_vg1x4 (w11, z0),
+ 	    svwrite_za8_vg1x4 (w11, z0))
  
  /*
  ** write_w12_z0:
*************** TEST_ZA_XN (write_w8p8_z0, svuint8x4_t,
*** 81,86 ****
--- 99,114 ----
  	    svwrite_za8_vg1x4 (w8 + 8, z0))
  
  /*
+ ** write_mf8_w8p8_z0:
+ **	add	(w8|w9|w10|w11), w8, #?8
+ **	mova	za\.d\[\1, 0, vgx4\], {z0\.d - z3\.d}
+ **	ret
+ */
+ TEST_ZA_XN (write_mf8_w8p8_z0, svmfloat8x4_t,
+ 	    svwrite_za8_mf8_vg1x4 (w8 + 8, z0),
+ 	    svwrite_za8_vg1x4 (w8 + 8, z0))
+ 
+ /*
  ** write_w8m1_z0:
  **	sub	(w8|w9|w10|w11), w8, #?1
  **	mova	za\.d\[\1, 0, vgx4\], {z0\.d - z3\.d}
*************** TEST_ZA_XN (write_w8_z18, svuint8x4_t,
*** 115,120 ****
--- 143,161 ----
  	    svwrite_za8_vg1x4 (w8, z18))
  
  /*
+ ** write_mf8_w8_z18:
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mova	za\.d\[w8, 0, vgx4\], [^\n]+
+ **	ret
+ */
+ TEST_ZA_XN (write_mf8_w8_z18, svmfloat8x4_t,
+ 	    svwrite_za8_mf8_vg1x4 (w8, z18),
+ 	    svwrite_za8_vg1x4 (w8, z18))
+ 
+ /*
  ** write_w8_z23:
  **	mov	[^\n]+
  **	mov	[^\n]+
*************** TEST_ZA_XN (write_w8_z23, svuint8x4_t,
*** 128,133 ****
--- 169,187 ----
  	    svwrite_za8_vg1x4 (w8, z23))
  
  /*
+ ** write_mf8_w8_z23:
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mova	za\.d\[w8, 0, vgx4\], [^\n]+
+ **	ret
+ */
+ TEST_ZA_XN (write_mf8_w8_z23, svmfloat8x4_t,
+ 	    svwrite_za8_mf8_vg1x4 (w8, z23),
+ 	    svwrite_za8_vg1x4 (w8, z23))
+ 
+ /*
  ** write_w8_z28:
  **	mova	za\.d\[w8, 0, vgx4\], {z28\.d - z31\.d}
  **	ret
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/zip_mf8_x2.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/zip_mf8_x2.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/zip_mf8_x2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/zip_mf8_x2.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,77 ----
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ 
+ /*
+ ** zip_z0_z0:
+ **	zip	{z0\.b - z1\.b}, z0\.b, z1\.b
+ **	ret
+ */
+ TEST_XN (zip_z0_z0, svmfloat8x2_t, z0,
+ 	 svzip_mf8_x2 (z0),
+ 	 svzip (z0))
+ 
+ /*
+ ** zip_z0_z4:
+ **	zip	{z0\.b - z1\.b}, z4\.b, z5\.b
+ **	ret
+ */
+ TEST_XN (zip_z0_z4, svmfloat8x2_t, z0,
+ 	 svzip_mf8_x2 (z4),
+ 	 svzip (z4))
+ 
+ /*
+ ** zip_z4_z18:
+ **	zip	{z4\.b - z5\.b}, z18\.b, z19\.b
+ **	ret
+ */
+ TEST_XN (zip_z4_z18, svmfloat8x2_t, z4,
+ 	 svzip_mf8_x2 (z18),
+ 	 svzip (z18))
+ 
+ /*
+ ** zip_z18_z23:
+ **	zip	{z18\.b - z19\.b}, z23\.b, z24\.b
+ **	ret
+ */
+ TEST_XN (zip_z18_z23, svmfloat8x2_t, z18,
+ 	 svzip_mf8_x2 (z23),
+ 	 svzip (z23))
+ 
+ /*
+ ** zip_z23_z28:
+ **	zip	[^\n]+, z28\.b, z29\.b
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_XN (zip_z23_z28, svmfloat8x2_t, z23,
+ 	 svzip_mf8_x2 (z28),
+ 	 svzip (z28))
+ 
+ /*
+ ** zip_z28_z0:
+ **	zip	{z28\.b - z29\.b}, z0\.b, z1\.b
+ **	ret
+ */
+ TEST_XN (zip_z28_z0, svmfloat8x2_t, z28,
+ 	 svzip_mf8_x2 (z0),
+ 	 svzip (z0))
+ 
+ /*
+ ** zip_z28_z0_z23:	{ xfail aarch64_big_endian }
+ **	zip	{z28\.b - z29\.b}, z0\.b, z23\.b
+ **	ret
+ */
+ TEST_XN (zip_z28_z0_z23, svmfloat8x2_t, z28,
+ 	 svzip_mf8_x2 (svcreate2 (svget2 (z0, 0), svget2 (z23, 0))),
+ 	 svzip (svcreate2 (svget2 (z0, 0), svget2 (z23, 0))))
+ 
+ /*
+ ** zip_z28_z5_z19:
+ **	zip	{z28\.b - z29\.b}, z5\.b, z19\.b
+ **	ret
+ */
+ TEST_XN (zip_z28_z5_z19, svmfloat8x2_t, z28,
+ 	 svzip_mf8_x2 (svcreate2 (svget2 (z4, 1), svget2 (z18, 1))),
+ 	 svzip (svcreate2 (svget2 (z4, 1), svget2 (z18, 1))))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/zip_mf8_x4.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/zip_mf8_x4.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/zip_mf8_x4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/zip_mf8_x4.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,73 ----
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ 
+ /*
+ ** zip_z0_z0:
+ **	zip	{z0\.b - z3\.b}, {z0\.b - z3\.b}
+ **	ret
+ */
+ TEST_XN (zip_z0_z0, svmfloat8x4_t, z0,
+ 	 svzip_mf8_x4 (z0),
+ 	 svzip (z0))
+ 
+ /*
+ ** zip_z0_z4:
+ **	zip	{z0\.b - z3\.b}, {z4\.b - z7\.b}
+ **	ret
+ */
+ TEST_XN (zip_z0_z4, svmfloat8x4_t, z0,
+ 	 svzip_mf8_x4 (z4),
+ 	 svzip (z4))
+ 
+ /*
+ ** zip_z4_z18:
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	zip	{z4\.b - z7\.b}, [^\n]+
+ **	ret
+ */
+ TEST_XN (zip_z4_z18, svmfloat8x4_t, z4,
+ 	 svzip_mf8_x4 (z18),
+ 	 svzip (z18))
+ 
+ /*
+ ** zip_z18_z23:
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	zip	{z[^\n]+}, {z[^\n]+}
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_XN (zip_z18_z23, svmfloat8x4_t, z18,
+ 	 svzip_mf8_x4 (z23),
+ 	 svzip (z23))
+ 
+ /*
+ ** zip_z23_z28:
+ **	zip	[^\n]+, {z28\.b - z31\.b}
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_XN (zip_z23_z28, svmfloat8x4_t, z23,
+ 	 svzip_mf8_x4 (z28),
+ 	 svzip (z28))
+ 
+ /*
+ ** zip_z28_z0:
+ **	zip	{z28\.b - z31\.b}, {z0\.b - z3\.b}
+ **	ret
+ */
+ TEST_XN (zip_z28_z0, svmfloat8x4_t, z28,
+ 	 svzip_mf8_x4 (z0),
+ 	 svzip (z0))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/zipq_mf8_x2.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/zipq_mf8_x2.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/zipq_mf8_x2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/zipq_mf8_x2.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,77 ----
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ 
+ /*
+ ** zipq_z0_z0:
+ **	zip	{z0\.q - z1\.q}, z0\.q, z1\.q
+ **	ret
+ */
+ TEST_XN (zipq_z0_z0, svmfloat8x2_t, z0,
+ 	 svzipq_mf8_x2 (z0),
+ 	 svzipq (z0))
+ 
+ /*
+ ** zipq_z0_z4:
+ **	zip	{z0\.q - z1\.q}, z4\.q, z5\.q
+ **	ret
+ */
+ TEST_XN (zipq_z0_z4, svmfloat8x2_t, z0,
+ 	 svzipq_mf8_x2 (z4),
+ 	 svzipq (z4))
+ 
+ /*
+ ** zipq_z4_z18:
+ **	zip	{z4\.q - z5\.q}, z18\.q, z19\.q
+ **	ret
+ */
+ TEST_XN (zipq_z4_z18, svmfloat8x2_t, z4,
+ 	 svzipq_mf8_x2 (z18),
+ 	 svzipq (z18))
+ 
+ /*
+ ** zipq_z18_z23:
+ **	zip	{z18\.q - z19\.q}, z23\.q, z24\.q
+ **	ret
+ */
+ TEST_XN (zipq_z18_z23, svmfloat8x2_t, z18,
+ 	 svzipq_mf8_x2 (z23),
+ 	 svzipq (z23))
+ 
+ /*
+ ** zipq_z23_z28:
+ **	zip	[^\n]+, z28\.q, z29\.q
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_XN (zipq_z23_z28, svmfloat8x2_t, z23,
+ 	 svzipq_mf8_x2 (z28),
+ 	 svzipq (z28))
+ 
+ /*
+ ** zipq_z28_z0:
+ **	zip	{z28\.q - z29\.q}, z0\.q, z1\.q
+ **	ret
+ */
+ TEST_XN (zipq_z28_z0, svmfloat8x2_t, z28,
+ 	 svzipq_mf8_x2 (z0),
+ 	 svzipq (z0))
+ 
+ /*
+ ** zipq_z28_z0_z23:	{ xfail aarch64_big_endian }
+ **	zip	{z28\.q - z29\.q}, z0\.q, z23\.q
+ **	ret
+ */
+ TEST_XN (zipq_z28_z0_z23, svmfloat8x2_t, z28,
+ 	 svzipq_mf8_x2 (svcreate2 (svget2 (z0, 0), svget2 (z23, 0))),
+ 	 svzipq (svcreate2 (svget2 (z0, 0), svget2 (z23, 0))))
+ 
+ /*
+ ** zipq_z28_z5_z19:
+ **	zip	{z28\.q - z29\.q}, z5\.q, z19\.q
+ **	ret
+ */
+ TEST_XN (zipq_z28_z5_z19, svmfloat8x2_t, z28,
+ 	 svzipq_mf8_x2 (svcreate2 (svget2 (z4, 1), svget2 (z18, 1))),
+ 	 svzipq (svcreate2 (svget2 (z4, 1), svget2 (z18, 1))))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/zipq_mf8_x4.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/zipq_mf8_x4.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/zipq_mf8_x4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/zipq_mf8_x4.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,73 ----
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sme2_acle.h"
+ 
+ /*
+ ** zipq_z0_z0:
+ **	zip	{z0\.q - z3\.q}, {z0\.q - z3\.q}
+ **	ret
+ */
+ TEST_XN (zipq_z0_z0, svmfloat8x4_t, z0,
+ 	 svzipq_mf8_x4 (z0),
+ 	 svzipq (z0))
+ 
+ /*
+ ** zipq_z0_z4:
+ **	zip	{z0\.q - z3\.q}, {z4\.q - z7\.q}
+ **	ret
+ */
+ TEST_XN (zipq_z0_z4, svmfloat8x4_t, z0,
+ 	 svzipq_mf8_x4 (z4),
+ 	 svzipq (z4))
+ 
+ /*
+ ** zipq_z4_z18:
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	zip	{z4\.q - z7\.q}, [^\n]+
+ **	ret
+ */
+ TEST_XN (zipq_z4_z18, svmfloat8x4_t, z4,
+ 	 svzipq_mf8_x4 (z18),
+ 	 svzipq (z18))
+ 
+ /*
+ ** zipq_z18_z23:
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	zip	{z[^\n]+}, {z[^\n]+}
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_XN (zipq_z18_z23, svmfloat8x4_t, z18,
+ 	 svzipq_mf8_x4 (z23),
+ 	 svzipq (z23))
+ 
+ /*
+ ** zipq_z23_z28:
+ **	zip	[^\n]+, {z28\.q - z31\.q}
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_XN (zipq_z23_z28, svmfloat8x4_t, z23,
+ 	 svzipq_mf8_x4 (z28),
+ 	 svzipq (z28))
+ 
+ /*
+ ** zipq_z28_z0:
+ **	zip	{z28\.q - z31\.q}, {z0\.q - z3\.q}
+ **	ret
+ */
+ TEST_XN (zipq_z28_z0, svmfloat8x4_t, z28,
+ 	 svzipq_mf8_x4 (z0),
+ 	 svzipq (z0))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sve/acle/asm/test_sve_acle.h gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sve/acle/asm/test_sve_acle.h
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sve/acle/asm/test_sve_acle.h	Sun Dec 21 22:32:11 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sve/acle/asm/test_sve_acle.h	Sun Dec 28 22:32:13 2025
***************
*** 733,738 ****
--- 733,739 ----
  #define TEST_X2_NARROW(NAME, TTYPE, ZTYPE, CODE1, CODE2)	\
    PROTO (NAME, void, ())					\
    {								\
+     register fpm_t fpm0 __asm ("x0");				\
      register TTYPE z0 __asm ("z0");				\
      register ZTYPE z5 __asm ("z5");				\
      register TTYPE z6 __asm ("z6");				\
***************
*** 749,754 ****
--- 750,756 ----
  #define TEST_X4_NARROW(NAME, TTYPE, ZTYPE, CODE1, CODE2)	\
    PROTO (NAME, void, ())					\
    {								\
+     register fpm_t fpm0 __asm ("x0");				\
      register TTYPE z0 __asm ("z0");				\
      register TTYPE z4 __asm ("z4");				\
      register TTYPE z16 __asm ("z16");				\
***************
*** 767,772 ****
--- 769,775 ----
  #define TEST_X2_WIDE(NAME, TTYPE, ZTYPE, CODE1, CODE2)		\
    PROTO (NAME, void, ())					\
    {								\
+     register fpm_t fpm0 __asm ("x0");				\
      register ZTYPE z0 __asm ("z0");				\
      register ZTYPE z5 __asm ("z5");				\
      register TTYPE z6 __asm ("z6");				\
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_za_m_1.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_za_m_1.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_za_m_1.c	Sun Dec 21 22:32:11 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_za_m_1.c	Sun Dec 28 22:32:13 2025
*************** f4 (svbool_t pg, svint16_t s16) __arm_st
*** 46,48 ****
--- 46,62 ----
    svmopa_za64_m (-1, pg, pg, s16, s16); /* { dg-error {passing -1 to argument 1 of 'svmopa_za64_m', which expects a value in the range \[0, 7\]} } */
    svmopa_za64_m (8, pg, pg, s16, s16); /* { dg-error {passing 8 to argument 1 of 'svmopa_za64_m', which expects a value in the range \[0, 7\]} } */
  }
+ 
+ #pragma GCC target ("arch=armv9-a+sme-f8f16+sme-f8f32")
+ 
+ void
+ f5 (svbool_t pg, svmfloat8_t mf8, fpm_t fpm) __arm_streaming __arm_inout("za")
+ {
+   svmopa_za16_mf8_m_fpm(0, pg, pg, mf8, mf8); /* { dg-error {too few arguments to function 'svmopa_za16_mf8_m_fpm'} } */
+   svmopa_za16_mf8_m_fpm(0, pg, pg, mf8, mf8, fpm);
+   svmopa_za16_mf8_m_fpm(0, pg, pg, mf8, mf8, fpm, fpm); /* { dg-error {too many arguments to function 'svmopa_za16_mf8_m_fpm'; expected 6, have 7} } */
+ 
+   svmopa_za16_mf8_m_fpm(-1, pg, pg, mf8, mf8, fpm); /* { dg-error {passing -1 to argument 1 of 'svmopa_za16_mf8_m_fpm', which expects a value in the range \[0, 1\]} } */
+   svmopa_za16_mf8_m_fpm(2, pg, pg, mf8, mf8, fpm); /* { dg-error {passing 2 to argument 1 of 'svmopa_za16_mf8_m_fpm', which expects a value in the range \[0, 1\]} } */
+   svmopa_za32_mf8_m_fpm(4, pg, pg, mf8, mf8, fpm); /* { dg-error {passing 4 to argument 1 of 'svmopa_za32_mf8_m_fpm', which expects a value in the range \[0, 3\]} } */
+ }
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_za_slice_lane_1.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_za_slice_lane_1.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_za_slice_lane_1.c	Sun Dec 21 22:32:11 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_za_slice_lane_1.c	Sun Dec 28 22:32:13 2025
*************** f4 (svint16_t s16, svuint16_t u16,
*** 71,73 ****
--- 71,87 ----
    svmla_lane_za64_vg4x1 (0, s64, s64, 0); /* { dg-error {'svmla_lane_za64_vg4x1' has no form that takes 'svint64_t' arguments} } */
    svmla_lane_za64_vg4x1 (0, u64, u64, 0); /* { dg-error {'svmla_lane_za64_vg4x1' has no form that takes 'svuint64_t' arguments} } */
  }
+ 
+ #pragma GCC target ("+sme-f8f32")
+ 
+ f5 (svmfloat8_t mf8,
+     svmfloat8x2_t mf8x2,
+     double d, fpm_t fpm)
+   __arm_streaming __arm_inout("za")
+ {
+   svmla_lane_za32_vg4x1_fpm (d, mf8, mf8, 0); /* { dg-error {too few arguments to function 'svmla_lane_za32_vg4x1_fpm'} } */
+   svmla_lane_za32_vg4x1_fpm (d, mf8, mf8, 0, 0, fpm); /* { dg-error {too many arguments to function 'svmla_lane_za32_vg4x1_fpm'} } */
+   svmla_lane_za32_vg4x1_fpm (d, mf8, mf8, 0, fpm);
+   svmla_lane_za32_vg4x1_fpm (d, mf8, mf8, -1, fpm); /* { dg-error {passing -1 to argument 4 of 'svmla_lane_za32_vg4x1_fpm', which expects a value in the range \[0, 15\]} } */
+   svmla_lane_za32_vg4x1_fpm (d, mf8, mf8, 16, fpm); /* { dg-error {passing 16 to argument 4 of 'svmla_lane_za32_vg4x1_fpm', which expects a value in the range \[0, 15\]} } */
+ }
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_za_slice_opt_single_1.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_za_slice_opt_single_1.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_za_slice_opt_single_1.c	Sun Dec 21 22:32:11 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_za_slice_opt_single_1.c	Sun Dec 28 22:32:13 2025
*************** f4 (svint32x2_t s32x2, svuint32x2_t u32x
*** 74,76 ****
--- 74,92 ----
    svadd_write_za64_vg1x2 (1, s64x2, s64x2);
    svadd_write_za64_vg1x2 (1, u64x2, u64x2);
  }
+ 
+ #pragma GCC target ("+sme-f8f16")
+ 
+ void
+ f5 (svmfloat8x2_t mf8x2, svmfloat8_t mf8,
+     svfloat16x2_t f16x2, svfloat16_t f16,
+     fpm_t fpm)
+   __arm_streaming __arm_inout("za")
+ {
+   svmla_single_za16_mf8_vg2x2_fpm (1, mf8x2, mf8); /* { dg-error {too few arguments to function 'svmla_single_za16_mf8_vg2x2_fpm'} } */
+   svmla_single_za16_mf8_vg2x2_fpm (1, mf8x2, mf8, fpm);
+   svmla_single_za16_mf8_vg2x2_fpm (1, mf8x2, mf8, fpm, fpm); /* { dg-error {too many arguments to function 'svmla_single_za16_mf8_vg2x2_fpm'} } */
+   svmla_single_za16_mf8_vg2x2_fpm (1, mf8x2, f16, fpm);  /* { dg-error {incompatible type for argument 3 of 'svmla_single_za16_mf8_vg2x2_fpm'} } */
+   svmla_single_za16_mf8_vg2x2_fpm (1, f16x2, mf8, fpm);  /* { dg-error {incompatible type for argument 2 of 'svmla_single_za16_mf8_vg2x2_fpm'} } */
+   svmla_single_za16_mf8_vg2x2_fpm (1, mf8x2, f16, fpm);  /* { dg-error {incompatible type for argument 3 of 'svmla_single_za16_mf8_vg2x2_fpm'} } */
+ }
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/dot_half_za_slice_lane_fpm.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/dot_half_za_slice_lane_fpm.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/dot_half_za_slice_lane_fpm.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/dot_half_za_slice_lane_fpm.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,106 ----
+ // { dg-options "-std=c23 -fsyntax-only" }
+ // { dg-do compile }
+ 
+ #pragma GCC target "+sve2,+sme-f8f32"
+ static_assert (__ARM_FEATURE_SME_F8F32 == 1);
+ #include <arm_sme.h>
+ 
+ /* Available variants are:
+    _za32 if __ARM_FEATURE_SME_F8F32 != 0
+    void svvdotb_lane_za32[_mf8]_vg1x4_fpm(uint32_t slice, svmfloat8x2_t zn, svmfloat8_t zm, uint64_t imm_idx, fpm_t fpm) __arm_streaming __arm_inout("za");
+    void svvdott_lane_za32[_mf8]_vg1x4_fpm(uint32_t slice, svmfloat8x2_t zn, svmfloat8_t zm, uint64_t imm_idx, fpm_t fpm) __arm_streaming __arm_inout("za");  */
+ 
+ void
+ svvdotb_lane_ok (uint32_t slice, svmfloat8x2_t zn_f8x2, svmfloat8_t zm_f8,
+ 		 fpm_t fpm) __arm_streaming __arm_inout ("za")
+ {
+   svvdotb_lane_za32_mf8_vg1x4_fpm (slice, zn_f8x2, zm_f8, 0, fpm);
+   svvdotb_lane_za32_vg1x4_fpm     (slice, zn_f8x2, zm_f8, 0, fpm);
+ }
+ 
+ void
+ svvdotb_lane_error_not_streaming (uint32_t slice, svmfloat8x2_t zn_f8x2,
+ 				  svmfloat8_t zm_f8,
+ 				  fpm_t fpm) __arm_inout ("za")
+ {
+   svvdotb_lane_za32_mf8_vg1x4_fpm (slice, zn_f8x2, zm_f8, 0, fpm); // { dg-error {ACLE function 'svvdotb_lane_za32_mf8_vg1x4_fpm' can only be called when SME streaming mode is enabled} }
+   svvdotb_lane_za32_vg1x4_fpm     (slice, zn_f8x2, zm_f8, 0, fpm); // { dg-error {ACLE function 'svvdotb_lane_za32_mf8_vg1x4_fpm' can only be called when SME streaming mode is enabled} }
+ }
+ 
+ void
+ svvdotb_lane_error_streaming_compatible (uint32_t slice, svmfloat8x2_t zn_f8x2,
+ 					 svmfloat8_t zm_f8,
+ 					 fpm_t fpm) __arm_streaming_compatible
+ {
+   svvdotb_lane_za32_mf8_vg1x4_fpm (slice, zn_f8x2, zm_f8, 0, fpm); // { dg-error {ACLE function 'svvdotb_lane_za32_mf8_vg1x4_fpm' can only be called when SME streaming mode is enabled} }
+   svvdotb_lane_za32_vg1x4_fpm     (slice, zn_f8x2, zm_f8, 0, fpm); // { dg-error {ACLE function 'svvdotb_lane_za32_mf8_vg1x4_fpm' can only be called when SME streaming mode is enabled} }
+ }
+ 
+ void
+ svvdotb_lane_error_not_inout (uint32_t slice, svmfloat8x2_t zn_f8x2,
+ 			      svmfloat8_t zm_f8, fpm_t fpm) __arm_streaming
+ {
+   svvdotb_lane_za32_mf8_vg1x4_fpm (slice, zn_f8x2, zm_f8, 0, fpm); // { dg-error {ACLE function 'svvdotb_lane_za32_mf8_vg1x4_fpm' can only be called from a function that has 'za' state} }
+   svvdotb_lane_za32_vg1x4_fpm     (slice, zn_f8x2, zm_f8, 0, fpm); // { dg-error {ACLE function 'svvdotb_lane_za32_mf8_vg1x4_fpm' can only be called from a function that has 'za' state} }
+ }
+ 
+ void
+ svvdotb_lane_error_arg_count_mismatch (
+   uint32_t slice, svmfloat8x2_t zn_f8x2, svmfloat8_t zm_f8,
+   fpm_t fpm) __arm_streaming __arm_inout ("za")
+ {
+   svvdotb_lane_za32_mf8_vg1x4_fpm (); // { dg-error {too few arguments to function 'svvdotb_lane_za32_mf8_vg1x4_fpm'; expected 5, have 0} }
+   svvdotb_lane_za32_vg1x4_fpm     (); // { dg-error {too few arguments to function 'svvdotb_lane_za32_vg1x4_fpm'} }
+ 
+   svvdotb_lane_za32_mf8_vg1x4_fpm (slice, zn_f8x2, zm_f8, 0, fpm, 0); // { dg-error {too many arguments to function 'svvdotb_lane_za32_mf8_vg1x4_fpm'; expected 5, have 6} }
+   svvdotb_lane_za32_vg1x4_fpm     (slice, zn_f8x2, zm_f8, 0, fpm, 0); // { dg-error {too many arguments to function 'svvdotb_lane_za32_vg1x4_fpm'} }
+ }
+ 
+ void
+ svvdotb_lane_error_arg_type_mismatch (
+   uint32_t slice, svmfloat8x2_t zn_f8x2, svmfloat8x4_t zn_f8x4,
+   svmfloat8_t zm_f8, fpm_t fpm) __arm_streaming __arm_inout ("za")
+ {
+   svvdotb_lane_za32_mf8_vg1x4_fpm (zm_f8, zn_f8x2, zm_f8, 0, fpm); // { dg-error {incompatible type for argument 1 of 'svvdotb_lane_za32_mf8_vg1x4_fpm'} }
+   svvdotb_lane_za32_vg1x4_fpm     (zm_f8, zn_f8x2, zm_f8, 0, fpm); // { dg-error {passing 'svmfloat8_t' to argument 1 of 'svvdotb_lane_za32_vg1x4_fpm', which expects 'uint32_t'} }
+ 
+   svvdotb_lane_za32_mf8_vg1x4_fpm (slice, zn_f8x4, zm_f8, 0, fpm); // { dg-error {incompatible type for argument 2 of 'svvdotb_lane_za32_mf8_vg1x4_fpm'} }
+   svvdotb_lane_za32_vg1x4_fpm     (slice, zn_f8x4, zm_f8, 0, fpm); // { dg-error {passing 'svmfloat8x4_t' to argument 2 of 'svvdotb_lane_za32_vg1x4_fpm', which expects a tuple of 2 vectors} }
+ 
+   svvdotb_lane_za32_mf8_vg1x4_fpm (slice, zn_f8x2, zn_f8x2, 0, fpm); // { dg-error {incompatible type for argument 3 of 'svvdotb_lane_za32_mf8_vg1x4_fpm'} }
+   svvdotb_lane_za32_vg1x4_fpm     (slice, zn_f8x2, zn_f8x2, 0, fpm); // { dg-error {passing 'svmfloat8x2_t' to argument 3 of 'svvdotb_lane_za32_vg1x4_fpm', which expects 'svmfloat8_t'} }
+ 
+   svvdotb_lane_za32_mf8_vg1x4_fpm (slice, zn_f8x2, zm_f8, zm_f8, fpm); // { dg-error {incompatible type for argument 4 of 'svvdotb_lane_za32_mf8_vg1x4_fpm'} }
+   svvdotb_lane_za32_vg1x4_fpm     (slice, zn_f8x2, zm_f8, zm_f8, fpm); // { dg-error {argument 4 of 'svvdotb_lane_za32_vg1x4_fpm' must be an integer constant expression} }
+ 
+   svvdotb_lane_za32_mf8_vg1x4_fpm (slice, zn_f8x2, zm_f8, 0, zm_f8); // { dg-error {incompatible type for argument 5 of 'svvdotb_lane_za32_mf8_vg1x4_fpm'} }
+   svvdotb_lane_za32_vg1x4_fpm     (slice, zn_f8x2, zm_f8, 0, zm_f8); // { dg-error {incompatible type for argument 5 of 'svvdotb_lane_za32_mf8_vg1x4_fpm'} }
+ }
+ 
+ void
+ svvdotb_lane_error_imm_idx_not_immediate (
+   uint32_t slice, svmfloat8x2_t zn_f8x2, svmfloat8_t zm_f8, uint64_t imm_idx,
+   fpm_t fpm) __arm_streaming __arm_in ("zt0")
+ {
+   svvdotb_lane_za32_mf8_vg1x4_fpm (slice, zn_f8x2, zm_f8, imm_idx, fpm); // { dg-error {argument 4 of 'svvdotb_lane_za32_mf8_vg1x4_fpm' must be an integer constant expression} }
+   svvdotb_lane_za32_vg1x4_fpm     (slice, zn_f8x2, zm_f8, imm_idx, fpm); // { dg-error {argument 4 of 'svvdotb_lane_za32_vg1x4_fpm' must be an integer constant expression} }
+ }
+ 
+ void
+ svvdotb_lane_error_imm_idx_not_in_range (
+   uint32_t slice, svmfloat8x2_t zn_f8x2, svmfloat8_t zm_f8,
+   fpm_t fpm) __arm_streaming __arm_in ("zt0")
+ {
+   svvdotb_lane_za32_mf8_vg1x4_fpm (slice, zn_f8x2, zm_f8, -1, fpm); // { dg-error {passing -1 to argument 4 of 'svvdotb_lane_za32_mf8_vg1x4_fpm', which expects a value in the range \[0, 3\]} }
+   svvdotb_lane_za32_vg1x4_fpm     (slice, zn_f8x2, zm_f8, -1, fpm); // { dg-error {passing -1 to argument 4 of 'svvdotb_lane_za32_vg1x4_fpm', which expects a value in the range \[0, 3\]} }
+ }
+ 
+ #pragma GCC reset_options
+ #pragma GCC target("+sve2,+sme2")
+ void
+ svvdotb_lane_feature_not_enabled (uint32_t slice, svmfloat8x2_t zn_f8x2,
+ 				 svmfloat8_t zm_f8,
+ 				 fpm_t fpm) __arm_streaming __arm_inout ("za")
+ {
+   svvdotb_lane_za32_mf8_vg1x4_fpm (slice, zn_f8x2, zm_f8, 0, fpm); // { dg-error {ACLE function 'svvdotb_lane_za32_mf8_vg1x4_fpm' requires ISA extension 'sme-f8f32'} }
+ }
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ld1_mf8_x2.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ld1_mf8_x2.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ld1_mf8_x2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ld1_mf8_x2.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,269 ----
+ /* { dg-do assemble { target aarch64_asm_sve2p1_ok } } */
+ /* { dg-do compile { target { ! aarch64_asm_sve2p1_ok } } } */
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" { target { ! ilp32 } } } } */
+ 
+ #include "test_sve_acle.h"
+ 
+ #pragma GCC target "+sve2p1"
+ #ifdef STREAMING_COMPATIBLE
+ #pragma GCC target "+sme2"
+ #endif
+ 
+ /*
+ ** ld1_mf8_base:
+ **	ld1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_base, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svld1_mf8_x2 (pn8, x0),
+ 		 z0 = svld1_x2 (pn8, x0))
+ 
+ /*
+ ** ld1_mf8_index:
+ **	ld1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0, x1\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_index, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svld1_mf8_x2 (pn8, x0 + x1),
+ 		 z0 = svld1_x2 (pn8, x0 + x1))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ld1_mf8_1:
+ **	incb	x0
+ **	ld1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_1, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svld1_mf8_x2 (pn8, x0 + svcntb ()),
+ 		 z0 = svld1_x2 (pn8, x0 + svcntb ()))
+ 
+ /*
+ ** ld1_mf8_2:
+ **	ld1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0, #2, mul vl\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_2, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svld1_mf8_x2 (pn8, x0 + svcntb () * 2),
+ 		 z0 = svld1_x2 (pn8, x0 + svcntb () * 2))
+ 
+ /*
+ ** ld1_mf8_14:
+ **	ld1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0, #14, mul vl\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_14, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svld1_mf8_x2 (pn8, x0 + svcntb () * 14),
+ 		 z0 = svld1_x2 (pn8, x0 + svcntb () * 14))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ld1_mf8_16:
+ **	incb	x0, all, mul #16
+ **	ld1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_16, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svld1_mf8_x2 (pn8, x0 + svcntb () * 16),
+ 		 z0 = svld1_x2 (pn8, x0 + svcntb () * 16))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ld1_mf8_m1:
+ **	decb	x0
+ **	ld1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_m1, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svld1_mf8_x2 (pn8, x0 - svcntb ()),
+ 		 z0 = svld1_x2 (pn8, x0 - svcntb ()))
+ 
+ /*
+ ** ld1_mf8_m2:
+ **	ld1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0, #-2, mul vl\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_m2, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svld1_mf8_x2 (pn8, x0 - svcntb () * 2),
+ 		 z0 = svld1_x2 (pn8, x0 - svcntb () * 2))
+ 
+ /*
+ ** ld1_mf8_m16:
+ **	ld1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0, #-16, mul vl\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_m16, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svld1_mf8_x2 (pn8, x0 - svcntb () * 16),
+ 		 z0 = svld1_x2 (pn8, x0 - svcntb () * 16))
+ 
+ /*
+ ** ld1_mf8_m18:
+ **	addvl	(x[0-9]+), x0, #-18
+ **	ld1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[\1\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_m18, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svld1_mf8_x2 (pn8, x0 - svcntb () * 18),
+ 		 z0 = svld1_x2 (pn8, x0 - svcntb () * 18))
+ 
+ /*
+ ** ld1_mf8_z17:
+ **	ld1b	{z[^\n]+}, pn8/z, \[x0\]
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_z17, svmfloat8x2_t, mfloat8_t,
+ 		 z17 = svld1_mf8_x2 (pn8, x0),
+ 		 z17 = svld1_x2 (pn8, x0))
+ 
+ /*
+ ** ld1_mf8_z22:
+ **	ld1b	{z22\.b(?: - |, )z23\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_z22, svmfloat8x2_t, mfloat8_t,
+ 		 z22 = svld1_mf8_x2 (pn8, x0),
+ 		 z22 = svld1_x2 (pn8, x0))
+ 
+ /*
+ ** ld1_mf8_z28:
+ **	ld1b	{z28\.b(?: - |, )z29\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_z28, svmfloat8x2_t, mfloat8_t,
+ 		 z28 = svld1_mf8_x2 (pn8, x0),
+ 		 z28 = svld1_x2 (pn8, x0))
+ 
+ /*
+ ** ld1_mf8_pn0:
+ **	mov	p([89]|1[0-5])\.b, p0\.b
+ **	ld1b	{z0\.b(?: - |, )z1\.b}, pn\1/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_pn0, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svld1_mf8_x2 (pn0, x0),
+ 		 z0 = svld1_x2 (pn0, x0))
+ 
+ /*
+ ** ld1_mf8_pn7:
+ **	mov	p([89]|1[0-5])\.b, p7\.b
+ **	ld1b	{z0\.b(?: - |, )z1\.b}, pn\1/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_pn7, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svld1_mf8_x2 (pn7, x0),
+ 		 z0 = svld1_x2 (pn7, x0))
+ 
+ /*
+ ** ld1_mf8_pn15:
+ **	ld1b	{z0\.b(?: - |, )z1\.b}, pn15/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_pn15, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svld1_mf8_x2 (pn15, x0),
+ 		 z0 = svld1_x2 (pn15, x0))
+ 
+ /*
+ ** ld1_vnum_mf8_0:
+ **	ld1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_vnum_mf8_0, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svld1_vnum_mf8_x2 (pn8, x0, 0),
+ 		 z0 = svld1_vnum_x2 (pn8, x0, 0))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ld1_vnum_mf8_1:
+ **	incb	x0
+ **	ld1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_vnum_mf8_1, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svld1_vnum_mf8_x2 (pn8, x0, 1),
+ 		 z0 = svld1_vnum_x2 (pn8, x0, 1))
+ 
+ /*
+ ** ld1_vnum_mf8_2:
+ **	ld1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0, #2, mul vl\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_vnum_mf8_2, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svld1_vnum_mf8_x2 (pn8, x0, 2),
+ 		 z0 = svld1_vnum_x2 (pn8, x0, 2))
+ 
+ /*
+ ** ld1_vnum_mf8_14:
+ **	ld1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0, #14, mul vl\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_vnum_mf8_14, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svld1_vnum_mf8_x2 (pn8, x0, 14),
+ 		 z0 = svld1_vnum_x2 (pn8, x0, 14))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ld1_vnum_mf8_16:
+ **	incb	x0, all, mul #16
+ **	ld1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_vnum_mf8_16, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svld1_vnum_mf8_x2 (pn8, x0, 16),
+ 		 z0 = svld1_vnum_x2 (pn8, x0, 16))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ld1_vnum_mf8_m1:
+ **	decb	x0
+ **	ld1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_vnum_mf8_m1, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svld1_vnum_mf8_x2 (pn8, x0, -1),
+ 		 z0 = svld1_vnum_x2 (pn8, x0, -1))
+ 
+ /*
+ ** ld1_vnum_mf8_m2:
+ **	ld1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0, #-2, mul vl\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_vnum_mf8_m2, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svld1_vnum_mf8_x2 (pn8, x0, -2),
+ 		 z0 = svld1_vnum_x2 (pn8, x0, -2))
+ 
+ /*
+ ** ld1_vnum_mf8_m16:
+ **	ld1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0, #-16, mul vl\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_vnum_mf8_m16, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svld1_vnum_mf8_x2 (pn8, x0, -16),
+ 		 z0 = svld1_vnum_x2 (pn8, x0, -16))
+ 
+ /*
+ ** ld1_vnum_mf8_m18:
+ **	addvl	(x[0-9]+), x0, #-18
+ **	ld1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[\1\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_vnum_mf8_m18, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svld1_vnum_mf8_x2 (pn8, x0, -18),
+ 		 z0 = svld1_vnum_x2 (pn8, x0, -18))
+ 
+ /*
+ ** ld1_vnum_mf8_x1:
+ **	cntb	(x[0-9]+)
+ ** (
+ **	madd	(x[0-9]+), (?:x1, \1|\1, x1), x0
+ **	ld1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[\2\]
+ ** |
+ **	mul	(x[0-9]+), (?:x1, \1|\1, x1)
+ **	ld1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0, \3\]
+ ** )
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_vnum_mf8_x1, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svld1_vnum_mf8_x2 (pn8, x0, x1),
+ 		 z0 = svld1_vnum_x2 (pn8, x0, x1))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ld1_mf8_x4.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ld1_mf8_x4.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ld1_mf8_x4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ld1_mf8_x4.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,361 ----
+ /* { dg-do assemble { target aarch64_asm_sve2p1_ok } } */
+ /* { dg-do compile { target { ! aarch64_asm_sve2p1_ok } } } */
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" { target { ! ilp32 } } } } */
+ 
+ #include "test_sve_acle.h"
+ 
+ #pragma GCC target "+sve2p1"
+ #ifdef STREAMING_COMPATIBLE
+ #pragma GCC target "+sme2"
+ #endif
+ 
+ /*
+ ** ld1_mf8_base:
+ **	ld1b	{z0\.b - z3\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_base, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svld1_mf8_x4 (pn8, x0),
+ 		 z0 = svld1_x4 (pn8, x0))
+ 
+ /*
+ ** ld1_mf8_index:
+ **	ld1b	{z0\.b - z3\.b}, pn8/z, \[x0, x1\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_index, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svld1_mf8_x4 (pn8, x0 + x1),
+ 		 z0 = svld1_x4 (pn8, x0 + x1))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ld1_mf8_1:
+ **	incb	x0
+ **	ld1b	{z0\.b - z3\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_1, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svld1_mf8_x4 (pn8, x0 + svcntb ()),
+ 		 z0 = svld1_x4 (pn8, x0 + svcntb ()))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ld1_mf8_2:
+ **	incb	x0, all, mul #2
+ **	ld1b	{z0\.b - z3\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_2, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svld1_mf8_x4 (pn8, x0 + svcntb () * 2),
+ 		 z0 = svld1_x4 (pn8, x0 + svcntb () * 2))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ld1_mf8_3:
+ **	incb	x0, all, mul #3
+ **	ld1b	{z0\.b - z3\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_3, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svld1_mf8_x4 (pn8, x0 + svcntb () * 3),
+ 		 z0 = svld1_x4 (pn8, x0 + svcntb () * 3))
+ 
+ /*
+ ** ld1_mf8_4:
+ **	ld1b	{z0\.b - z3\.b}, pn8/z, \[x0, #4, mul vl\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_4, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svld1_mf8_x4 (pn8, x0 + svcntb () * 4),
+ 		 z0 = svld1_x4 (pn8, x0 + svcntb () * 4))
+ 
+ /*
+ ** ld1_mf8_28:
+ **	ld1b	{z0\.b - z3\.b}, pn8/z, \[x0, #28, mul vl\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_28, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svld1_mf8_x4 (pn8, x0 + svcntb () * 28),
+ 		 z0 = svld1_x4 (pn8, x0 + svcntb () * 28))
+ 
+ /*
+ ** ld1_mf8_32:
+ **	[^{]*
+ **	ld1b	{z0\.b - z3\.b}, pn8/z, \[x0, x[0-9]+\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_32, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svld1_mf8_x4 (pn8, x0 + svcntb () * 32),
+ 		 z0 = svld1_x4 (pn8, x0 + svcntb () * 32))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ld1_mf8_m1:
+ **	decb	x0
+ **	ld1b	{z0\.b - z3\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_m1, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svld1_mf8_x4 (pn8, x0 - svcntb ()),
+ 		 z0 = svld1_x4 (pn8, x0 - svcntb ()))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ld1_mf8_m2:
+ **	decb	x0, all, mul #2
+ **	ld1b	{z0\.b - z3\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_m2, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svld1_mf8_x4 (pn8, x0 - svcntb () * 2),
+ 		 z0 = svld1_x4 (pn8, x0 - svcntb () * 2))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ld1_mf8_m3:
+ **	decb	x0, all, mul #3
+ **	ld1b	{z0\.b - z3\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_m3, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svld1_mf8_x4 (pn8, x0 - svcntb () * 3),
+ 		 z0 = svld1_x4 (pn8, x0 - svcntb () * 3))
+ 
+ /*
+ ** ld1_mf8_m4:
+ **	ld1b	{z0\.b - z3\.b}, pn8/z, \[x0, #-4, mul vl\]
+ **	ret
+ */
+   TEST_LOAD_COUNT (ld1_mf8_m4, svmfloat8x4_t, mfloat8_t,
+ 		   z0 = svld1_mf8_x4 (pn8, x0 - svcntb () * 4),
+ 		   z0 = svld1_x4 (pn8, x0 - svcntb () * 4))
+ 
+ /*
+ ** ld1_mf8_m32:
+ **	ld1b	{z0\.b - z3\.b}, pn8/z, \[x0, #-32, mul vl\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_m32, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svld1_mf8_x4 (pn8, x0 - svcntb () * 32),
+ 		 z0 = svld1_x4 (pn8, x0 - svcntb () * 32))
+ 
+ /*
+ ** ld1_mf8_m36:
+ **	[^{]*
+ **	ld1b	{z0\.b - z3\.b}, pn8/z, \[x0, x[0-9]+\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_m36, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svld1_mf8_x4 (pn8, x0 - svcntb () * 36),
+ 		 z0 = svld1_x4 (pn8, x0 - svcntb () * 36))
+ 
+ /*
+ ** ld1_mf8_z17:
+ **	ld1b	{z[^\n]+}, pn8/z, \[x0\]
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_z17, svmfloat8x4_t, mfloat8_t,
+ 		 z17 = svld1_mf8_x4 (pn8, x0),
+ 		 z17 = svld1_x4 (pn8, x0))
+ 
+ /*
+ ** ld1_mf8_z22:
+ **	ld1b	{z[^\n]+}, pn8/z, \[x0\]
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_z22, svmfloat8x4_t, mfloat8_t,
+ 		 z22 = svld1_mf8_x4 (pn8, x0),
+ 		 z22 = svld1_x4 (pn8, x0))
+ 
+ /*
+ ** ld1_mf8_z28:
+ **	ld1b	{z28\.b(?: - |, )z31\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_z28, svmfloat8x4_t, mfloat8_t,
+ 		 z28 = svld1_mf8_x4 (pn8, x0),
+ 		 z28 = svld1_x4 (pn8, x0))
+ 
+ /*
+ ** ld1_mf8_pn0:
+ **	mov	p([89]|1[0-5])\.b, p0\.b
+ **	ld1b	{z0\.b(?: - |, )z3\.b}, pn\1/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_pn0, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svld1_mf8_x4 (pn0, x0),
+ 		 z0 = svld1_x4 (pn0, x0))
+ 
+ /*
+ ** ld1_mf8_pn7:
+ **	mov	p([89]|1[0-5])\.b, p7\.b
+ **	ld1b	{z0\.b(?: - |, )z3\.b}, pn\1/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_pn7, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svld1_mf8_x4 (pn7, x0),
+ 		 z0 = svld1_x4 (pn7, x0))
+ 
+ /*
+ ** ld1_mf8_pn15:
+ **	ld1b	{z0\.b(?: - |, )z3\.b}, pn15/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_mf8_pn15, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svld1_mf8_x4 (pn15, x0),
+ 		 z0 = svld1_x4 (pn15, x0))
+ 
+ /*
+ ** ld1_vnum_mf8_0:
+ **	ld1b	{z0\.b - z3\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_vnum_mf8_0, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svld1_vnum_mf8_x4 (pn8, x0, 0),
+ 		 z0 = svld1_vnum_x4 (pn8, x0, 0))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ld1_vnum_mf8_1:
+ **	incb	x0
+ **	ld1b	{z0\.b - z3\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_vnum_mf8_1, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svld1_vnum_mf8_x4 (pn8, x0, 1),
+ 		 z0 = svld1_vnum_x4 (pn8, x0, 1))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ld1_vnum_mf8_2:
+ **	incb	x0, all, mul #2
+ **	ld1b	{z0\.b - z3\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_vnum_mf8_2, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svld1_vnum_mf8_x4 (pn8, x0, 2),
+ 		 z0 = svld1_vnum_x4 (pn8, x0, 2))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ld1_vnum_mf8_3:
+ **	incb	x0, all, mul #3
+ **	ld1b	{z0\.b - z3\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_vnum_mf8_3, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svld1_vnum_mf8_x4 (pn8, x0, 3),
+ 		 z0 = svld1_vnum_x4 (pn8, x0, 3))
+ 
+ /*
+ ** ld1_vnum_mf8_4:
+ **	ld1b	{z0\.b - z3\.b}, pn8/z, \[x0, #4, mul vl\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_vnum_mf8_4, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svld1_vnum_mf8_x4 (pn8, x0, 4),
+ 		 z0 = svld1_vnum_x4 (pn8, x0, 4))
+ 
+ /*
+ ** ld1_vnum_mf8_28:
+ **	ld1b	{z0\.b - z3\.b}, pn8/z, \[x0, #28, mul vl\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_vnum_mf8_28, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svld1_vnum_mf8_x4 (pn8, x0, 28),
+ 		 z0 = svld1_vnum_x4 (pn8, x0, 28))
+ 
+ /*
+ ** ld1_vnum_mf8_32:
+ **	[^{]*
+ **	ld1b	{z0\.b - z3\.b}, pn8/z, \[x0, x[0-9]+\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_vnum_mf8_32, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svld1_vnum_mf8_x4 (pn8, x0, 32),
+ 		 z0 = svld1_vnum_x4 (pn8, x0, 32))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ld1_vnum_mf8_m1:
+ **	decb	x0
+ **	ld1b	{z0\.b - z3\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_vnum_mf8_m1, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svld1_vnum_mf8_x4 (pn8, x0, -1),
+ 		 z0 = svld1_vnum_x4 (pn8, x0, -1))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ld1_vnum_mf8_m2:
+ **	decb	x0, all, mul #2
+ **	ld1b	{z0\.b - z3\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_vnum_mf8_m2, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svld1_vnum_mf8_x4 (pn8, x0, -2),
+ 		 z0 = svld1_vnum_x4 (pn8, x0, -2))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ld1_vnum_mf8_m3:
+ **	decb	x0, all, mul #3
+ **	ld1b	{z0\.b - z3\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_vnum_mf8_m3, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svld1_vnum_mf8_x4 (pn8, x0, -3),
+ 		 z0 = svld1_vnum_x4 (pn8, x0, -3))
+ 
+ /*
+ ** ld1_vnum_mf8_m4:
+ **	ld1b	{z0\.b - z3\.b}, pn8/z, \[x0, #-4, mul vl\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_vnum_mf8_m4, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svld1_vnum_mf8_x4 (pn8, x0, -4),
+ 		 z0 = svld1_vnum_x4 (pn8, x0, -4))
+ 
+ /*
+ ** ld1_vnum_mf8_m32:
+ **	ld1b	{z0\.b - z3\.b}, pn8/z, \[x0, #-32, mul vl\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_vnum_mf8_m32, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svld1_vnum_mf8_x4 (pn8, x0, -32),
+ 		 z0 = svld1_vnum_x4 (pn8, x0, -32))
+ 
+ /*
+ ** ld1_vnum_mf8_m36:
+ **	[^{]*
+ **	ld1b	{z0\.b - z3\.b}, pn8/z, \[x0, x[0-9]+\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_vnum_mf8_m36, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svld1_vnum_mf8_x4 (pn8, x0, -36),
+ 		 z0 = svld1_vnum_x4 (pn8, x0, -36))
+ 
+ /*
+ ** ld1_vnum_mf8_x1:
+ **	cntb	(x[0-9]+)
+ ** (
+ **	madd	(x[0-9]+), (?:x1, \1|\1, x1), x0
+ **	ld1b	{z0\.b - z3\.b}, pn8/z, \[\2\]
+ ** |
+ **	mul	(x[0-9]+), (?:x1, \1|\1, x1)
+ **	ld1b	{z0\.b - z3\.b}, pn8/z, \[x0, \3\]
+ ** )
+ **	ret
+ */
+ TEST_LOAD_COUNT (ld1_vnum_mf8_x1, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svld1_vnum_mf8_x4 (pn8, x0, x1),
+ 		 z0 = svld1_vnum_x4 (pn8, x0, x1))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1_mf8_x2.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1_mf8_x2.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1_mf8_x2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1_mf8_x2.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,269 ----
+ /* { dg-do assemble { target aarch64_asm_sve2p1_ok } } */
+ /* { dg-do compile { target { ! aarch64_asm_sve2p1_ok } } } */
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" { target { ! ilp32 } } } } */
+ 
+ #include "test_sve_acle.h"
+ 
+ #pragma GCC target "+sve2p1"
+ #ifdef STREAMING_COMPATIBLE
+ #pragma GCC target "+sme2"
+ #endif
+ 
+ /*
+ ** ldnt1_mf8_base:
+ **	ldnt1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_base, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svldnt1_mf8_x2 (pn8, x0),
+ 		 z0 = svldnt1_x2 (pn8, x0))
+ 
+ /*
+ ** ldnt1_mf8_index:
+ **	ldnt1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0, x1\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_index, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svldnt1_mf8_x2 (pn8, x0 + x1),
+ 		 z0 = svldnt1_x2 (pn8, x0 + x1))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ldnt1_mf8_1:
+ **	incb	x0
+ **	ldnt1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_1, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svldnt1_mf8_x2 (pn8, x0 + svcntb ()),
+ 		 z0 = svldnt1_x2 (pn8, x0 + svcntb ()))
+ 
+ /*
+ ** ldnt1_mf8_2:
+ **	ldnt1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0, #2, mul vl\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_2, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svldnt1_mf8_x2 (pn8, x0 + svcntb () * 2),
+ 		 z0 = svldnt1_x2 (pn8, x0 + svcntb () * 2))
+ 
+ /*
+ ** ldnt1_mf8_14:
+ **	ldnt1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0, #14, mul vl\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_14, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svldnt1_mf8_x2 (pn8, x0 + svcntb () * 14),
+ 		 z0 = svldnt1_x2 (pn8, x0 + svcntb () * 14))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ldnt1_mf8_16:
+ **	incb	x0, all, mul #16
+ **	ldnt1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_16, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svldnt1_mf8_x2 (pn8, x0 + svcntb () * 16),
+ 		 z0 = svldnt1_x2 (pn8, x0 + svcntb () * 16))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ldnt1_mf8_m1:
+ **	decb	x0
+ **	ldnt1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_m1, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svldnt1_mf8_x2 (pn8, x0 - svcntb ()),
+ 		 z0 = svldnt1_x2 (pn8, x0 - svcntb ()))
+ 
+ /*
+ ** ldnt1_mf8_m2:
+ **	ldnt1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0, #-2, mul vl\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_m2, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svldnt1_mf8_x2 (pn8, x0 - svcntb () * 2),
+ 		 z0 = svldnt1_x2 (pn8, x0 - svcntb () * 2))
+ 
+ /*
+ ** ldnt1_mf8_m16:
+ **	ldnt1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0, #-16, mul vl\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_m16, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svldnt1_mf8_x2 (pn8, x0 - svcntb () * 16),
+ 		 z0 = svldnt1_x2 (pn8, x0 - svcntb () * 16))
+ 
+ /*
+ ** ldnt1_mf8_m18:
+ **	addvl	(x[0-9]+), x0, #-18
+ **	ldnt1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[\1\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_m18, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svldnt1_mf8_x2 (pn8, x0 - svcntb () * 18),
+ 		 z0 = svldnt1_x2 (pn8, x0 - svcntb () * 18))
+ 
+ /*
+ ** ldnt1_mf8_z17:
+ **	ldnt1b	{z[^\n]+}, pn8/z, \[x0\]
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_z17, svmfloat8x2_t, mfloat8_t,
+ 		 z17 = svldnt1_mf8_x2 (pn8, x0),
+ 		 z17 = svldnt1_x2 (pn8, x0))
+ 
+ /*
+ ** ldnt1_mf8_z22:
+ **	ldnt1b	{z22\.b(?: - |, )z23\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_z22, svmfloat8x2_t, mfloat8_t,
+ 		 z22 = svldnt1_mf8_x2 (pn8, x0),
+ 		 z22 = svldnt1_x2 (pn8, x0))
+ 
+ /*
+ ** ldnt1_mf8_z28:
+ **	ldnt1b	{z28\.b(?: - |, )z29\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_z28, svmfloat8x2_t, mfloat8_t,
+ 		 z28 = svldnt1_mf8_x2 (pn8, x0),
+ 		 z28 = svldnt1_x2 (pn8, x0))
+ 
+ /*
+ ** ldnt1_mf8_pn0:
+ **	mov	p([89]|1[0-5])\.b, p0\.b
+ **	ldnt1b	{z0\.b(?: - |, )z1\.b}, pn\1/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_pn0, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svldnt1_mf8_x2 (pn0, x0),
+ 		 z0 = svldnt1_x2 (pn0, x0))
+ 
+ /*
+ ** ldnt1_mf8_pn7:
+ **	mov	p([89]|1[0-5])\.b, p7\.b
+ **	ldnt1b	{z0\.b(?: - |, )z1\.b}, pn\1/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_pn7, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svldnt1_mf8_x2 (pn7, x0),
+ 		 z0 = svldnt1_x2 (pn7, x0))
+ 
+ /*
+ ** ldnt1_mf8_pn15:
+ **	ldnt1b	{z0\.b(?: - |, )z1\.b}, pn15/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_pn15, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svldnt1_mf8_x2 (pn15, x0),
+ 		 z0 = svldnt1_x2 (pn15, x0))
+ 
+ /*
+ ** ldnt1_vnum_mf8_0:
+ **	ldnt1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_vnum_mf8_0, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svldnt1_vnum_mf8_x2 (pn8, x0, 0),
+ 		 z0 = svldnt1_vnum_x2 (pn8, x0, 0))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ldnt1_vnum_mf8_1:
+ **	incb	x0
+ **	ldnt1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_vnum_mf8_1, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svldnt1_vnum_mf8_x2 (pn8, x0, 1),
+ 		 z0 = svldnt1_vnum_x2 (pn8, x0, 1))
+ 
+ /*
+ ** ldnt1_vnum_mf8_2:
+ **	ldnt1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0, #2, mul vl\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_vnum_mf8_2, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svldnt1_vnum_mf8_x2 (pn8, x0, 2),
+ 		 z0 = svldnt1_vnum_x2 (pn8, x0, 2))
+ 
+ /*
+ ** ldnt1_vnum_mf8_14:
+ **	ldnt1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0, #14, mul vl\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_vnum_mf8_14, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svldnt1_vnum_mf8_x2 (pn8, x0, 14),
+ 		 z0 = svldnt1_vnum_x2 (pn8, x0, 14))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ldnt1_vnum_mf8_16:
+ **	incb	x0, all, mul #16
+ **	ldnt1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_vnum_mf8_16, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svldnt1_vnum_mf8_x2 (pn8, x0, 16),
+ 		 z0 = svldnt1_vnum_x2 (pn8, x0, 16))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ldnt1_vnum_mf8_m1:
+ **	decb	x0
+ **	ldnt1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_vnum_mf8_m1, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svldnt1_vnum_mf8_x2 (pn8, x0, -1),
+ 		 z0 = svldnt1_vnum_x2 (pn8, x0, -1))
+ 
+ /*
+ ** ldnt1_vnum_mf8_m2:
+ **	ldnt1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0, #-2, mul vl\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_vnum_mf8_m2, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svldnt1_vnum_mf8_x2 (pn8, x0, -2),
+ 		 z0 = svldnt1_vnum_x2 (pn8, x0, -2))
+ 
+ /*
+ ** ldnt1_vnum_mf8_m16:
+ **	ldnt1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0, #-16, mul vl\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_vnum_mf8_m16, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svldnt1_vnum_mf8_x2 (pn8, x0, -16),
+ 		 z0 = svldnt1_vnum_x2 (pn8, x0, -16))
+ 
+ /*
+ ** ldnt1_vnum_mf8_m18:
+ **	addvl	(x[0-9]+), x0, #-18
+ **	ldnt1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[\1\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_vnum_mf8_m18, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svldnt1_vnum_mf8_x2 (pn8, x0, -18),
+ 		 z0 = svldnt1_vnum_x2 (pn8, x0, -18))
+ 
+ /*
+ ** ldnt1_vnum_mf8_x1:
+ **	cntb	(x[0-9]+)
+ ** (
+ **	madd	(x[0-9]+), (?:x1, \1|\1, x1), x0
+ **	ldnt1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[\2\]
+ ** |
+ **	mul	(x[0-9]+), (?:x1, \1|\1, x1)
+ **	ldnt1b	{z0\.b(?: - |, )z1\.b}, pn8/z, \[x0, \3\]
+ ** )
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_vnum_mf8_x1, svmfloat8x2_t, mfloat8_t,
+ 		 z0 = svldnt1_vnum_mf8_x2 (pn8, x0, x1),
+ 		 z0 = svldnt1_vnum_x2 (pn8, x0, x1))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1_mf8_x4.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1_mf8_x4.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1_mf8_x4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1_mf8_x4.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,361 ----
+ /* { dg-do assemble { target aarch64_asm_sve2p1_ok } } */
+ /* { dg-do compile { target { ! aarch64_asm_sve2p1_ok } } } */
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" { target { ! ilp32 } } } } */
+ 
+ #include "test_sve_acle.h"
+ 
+ #pragma GCC target "+sve2p1"
+ #ifdef STREAMING_COMPATIBLE
+ #pragma GCC target "+sme2"
+ #endif
+ 
+ /*
+ ** ldnt1_mf8_base:
+ **	ldnt1b	{z0\.b - z3\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_base, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svldnt1_mf8_x4 (pn8, x0),
+ 		 z0 = svldnt1_x4 (pn8, x0))
+ 
+ /*
+ ** ldnt1_mf8_index:
+ **	ldnt1b	{z0\.b - z3\.b}, pn8/z, \[x0, x1\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_index, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svldnt1_mf8_x4 (pn8, x0 + x1),
+ 		 z0 = svldnt1_x4 (pn8, x0 + x1))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ldnt1_mf8_1:
+ **	incb	x0
+ **	ldnt1b	{z0\.b - z3\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_1, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svldnt1_mf8_x4 (pn8, x0 + svcntb ()),
+ 		 z0 = svldnt1_x4 (pn8, x0 + svcntb ()))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ldnt1_mf8_2:
+ **	incb	x0, all, mul #2
+ **	ldnt1b	{z0\.b - z3\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_2, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svldnt1_mf8_x4 (pn8, x0 + svcntb () * 2),
+ 		 z0 = svldnt1_x4 (pn8, x0 + svcntb () * 2))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ldnt1_mf8_3:
+ **	incb	x0, all, mul #3
+ **	ldnt1b	{z0\.b - z3\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_3, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svldnt1_mf8_x4 (pn8, x0 + svcntb () * 3),
+ 		 z0 = svldnt1_x4 (pn8, x0 + svcntb () * 3))
+ 
+ /*
+ ** ldnt1_mf8_4:
+ **	ldnt1b	{z0\.b - z3\.b}, pn8/z, \[x0, #4, mul vl\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_4, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svldnt1_mf8_x4 (pn8, x0 + svcntb () * 4),
+ 		 z0 = svldnt1_x4 (pn8, x0 + svcntb () * 4))
+ 
+ /*
+ ** ldnt1_mf8_28:
+ **	ldnt1b	{z0\.b - z3\.b}, pn8/z, \[x0, #28, mul vl\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_28, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svldnt1_mf8_x4 (pn8, x0 + svcntb () * 28),
+ 		 z0 = svldnt1_x4 (pn8, x0 + svcntb () * 28))
+ 
+ /*
+ ** ldnt1_mf8_32:
+ **	[^{]*
+ **	ldnt1b	{z0\.b - z3\.b}, pn8/z, \[x0, x[0-9]+\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_32, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svldnt1_mf8_x4 (pn8, x0 + svcntb () * 32),
+ 		 z0 = svldnt1_x4 (pn8, x0 + svcntb () * 32))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ldnt1_mf8_m1:
+ **	decb	x0
+ **	ldnt1b	{z0\.b - z3\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_m1, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svldnt1_mf8_x4 (pn8, x0 - svcntb ()),
+ 		 z0 = svldnt1_x4 (pn8, x0 - svcntb ()))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ldnt1_mf8_m2:
+ **	decb	x0, all, mul #2
+ **	ldnt1b	{z0\.b - z3\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_m2, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svldnt1_mf8_x4 (pn8, x0 - svcntb () * 2),
+ 		 z0 = svldnt1_x4 (pn8, x0 - svcntb () * 2))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ldnt1_mf8_m3:
+ **	decb	x0, all, mul #3
+ **	ldnt1b	{z0\.b - z3\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_m3, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svldnt1_mf8_x4 (pn8, x0 - svcntb () * 3),
+ 		 z0 = svldnt1_x4 (pn8, x0 - svcntb () * 3))
+ 
+ /*
+ ** ldnt1_mf8_m4:
+ **	ldnt1b	{z0\.b - z3\.b}, pn8/z, \[x0, #-4, mul vl\]
+ **	ret
+ */
+   TEST_LOAD_COUNT (ldnt1_mf8_m4, svmfloat8x4_t, mfloat8_t,
+ 		   z0 = svldnt1_mf8_x4 (pn8, x0 - svcntb () * 4),
+ 		   z0 = svldnt1_x4 (pn8, x0 - svcntb () * 4))
+ 
+ /*
+ ** ldnt1_mf8_m32:
+ **	ldnt1b	{z0\.b - z3\.b}, pn8/z, \[x0, #-32, mul vl\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_m32, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svldnt1_mf8_x4 (pn8, x0 - svcntb () * 32),
+ 		 z0 = svldnt1_x4 (pn8, x0 - svcntb () * 32))
+ 
+ /*
+ ** ldnt1_mf8_m36:
+ **	[^{]*
+ **	ldnt1b	{z0\.b - z3\.b}, pn8/z, \[x0, x[0-9]+\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_m36, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svldnt1_mf8_x4 (pn8, x0 - svcntb () * 36),
+ 		 z0 = svldnt1_x4 (pn8, x0 - svcntb () * 36))
+ 
+ /*
+ ** ldnt1_mf8_z17:
+ **	ldnt1b	{z[^\n]+}, pn8/z, \[x0\]
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_z17, svmfloat8x4_t, mfloat8_t,
+ 		 z17 = svldnt1_mf8_x4 (pn8, x0),
+ 		 z17 = svldnt1_x4 (pn8, x0))
+ 
+ /*
+ ** ldnt1_mf8_z22:
+ **	ldnt1b	{z[^\n]+}, pn8/z, \[x0\]
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_z22, svmfloat8x4_t, mfloat8_t,
+ 		 z22 = svldnt1_mf8_x4 (pn8, x0),
+ 		 z22 = svldnt1_x4 (pn8, x0))
+ 
+ /*
+ ** ldnt1_mf8_z28:
+ **	ldnt1b	{z28\.b(?: - |, )z31\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_z28, svmfloat8x4_t, mfloat8_t,
+ 		 z28 = svldnt1_mf8_x4 (pn8, x0),
+ 		 z28 = svldnt1_x4 (pn8, x0))
+ 
+ /*
+ ** ldnt1_mf8_pn0:
+ **	mov	p([89]|1[0-5])\.b, p0\.b
+ **	ldnt1b	{z0\.b(?: - |, )z3\.b}, pn\1/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_pn0, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svldnt1_mf8_x4 (pn0, x0),
+ 		 z0 = svldnt1_x4 (pn0, x0))
+ 
+ /*
+ ** ldnt1_mf8_pn7:
+ **	mov	p([89]|1[0-5])\.b, p7\.b
+ **	ldnt1b	{z0\.b(?: - |, )z3\.b}, pn\1/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_pn7, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svldnt1_mf8_x4 (pn7, x0),
+ 		 z0 = svldnt1_x4 (pn7, x0))
+ 
+ /*
+ ** ldnt1_mf8_pn15:
+ **	ldnt1b	{z0\.b(?: - |, )z3\.b}, pn15/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_mf8_pn15, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svldnt1_mf8_x4 (pn15, x0),
+ 		 z0 = svldnt1_x4 (pn15, x0))
+ 
+ /*
+ ** ldnt1_vnum_mf8_0:
+ **	ldnt1b	{z0\.b - z3\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_vnum_mf8_0, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svldnt1_vnum_mf8_x4 (pn8, x0, 0),
+ 		 z0 = svldnt1_vnum_x4 (pn8, x0, 0))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ldnt1_vnum_mf8_1:
+ **	incb	x0
+ **	ldnt1b	{z0\.b - z3\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_vnum_mf8_1, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svldnt1_vnum_mf8_x4 (pn8, x0, 1),
+ 		 z0 = svldnt1_vnum_x4 (pn8, x0, 1))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ldnt1_vnum_mf8_2:
+ **	incb	x0, all, mul #2
+ **	ldnt1b	{z0\.b - z3\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_vnum_mf8_2, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svldnt1_vnum_mf8_x4 (pn8, x0, 2),
+ 		 z0 = svldnt1_vnum_x4 (pn8, x0, 2))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ldnt1_vnum_mf8_3:
+ **	incb	x0, all, mul #3
+ **	ldnt1b	{z0\.b - z3\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_vnum_mf8_3, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svldnt1_vnum_mf8_x4 (pn8, x0, 3),
+ 		 z0 = svldnt1_vnum_x4 (pn8, x0, 3))
+ 
+ /*
+ ** ldnt1_vnum_mf8_4:
+ **	ldnt1b	{z0\.b - z3\.b}, pn8/z, \[x0, #4, mul vl\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_vnum_mf8_4, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svldnt1_vnum_mf8_x4 (pn8, x0, 4),
+ 		 z0 = svldnt1_vnum_x4 (pn8, x0, 4))
+ 
+ /*
+ ** ldnt1_vnum_mf8_28:
+ **	ldnt1b	{z0\.b - z3\.b}, pn8/z, \[x0, #28, mul vl\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_vnum_mf8_28, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svldnt1_vnum_mf8_x4 (pn8, x0, 28),
+ 		 z0 = svldnt1_vnum_x4 (pn8, x0, 28))
+ 
+ /*
+ ** ldnt1_vnum_mf8_32:
+ **	[^{]*
+ **	ldnt1b	{z0\.b - z3\.b}, pn8/z, \[x0, x[0-9]+\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_vnum_mf8_32, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svldnt1_vnum_mf8_x4 (pn8, x0, 32),
+ 		 z0 = svldnt1_vnum_x4 (pn8, x0, 32))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ldnt1_vnum_mf8_m1:
+ **	decb	x0
+ **	ldnt1b	{z0\.b - z3\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_vnum_mf8_m1, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svldnt1_vnum_mf8_x4 (pn8, x0, -1),
+ 		 z0 = svldnt1_vnum_x4 (pn8, x0, -1))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ldnt1_vnum_mf8_m2:
+ **	decb	x0, all, mul #2
+ **	ldnt1b	{z0\.b - z3\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_vnum_mf8_m2, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svldnt1_vnum_mf8_x4 (pn8, x0, -2),
+ 		 z0 = svldnt1_vnum_x4 (pn8, x0, -2))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** ldnt1_vnum_mf8_m3:
+ **	decb	x0, all, mul #3
+ **	ldnt1b	{z0\.b - z3\.b}, pn8/z, \[x0\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_vnum_mf8_m3, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svldnt1_vnum_mf8_x4 (pn8, x0, -3),
+ 		 z0 = svldnt1_vnum_x4 (pn8, x0, -3))
+ 
+ /*
+ ** ldnt1_vnum_mf8_m4:
+ **	ldnt1b	{z0\.b - z3\.b}, pn8/z, \[x0, #-4, mul vl\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_vnum_mf8_m4, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svldnt1_vnum_mf8_x4 (pn8, x0, -4),
+ 		 z0 = svldnt1_vnum_x4 (pn8, x0, -4))
+ 
+ /*
+ ** ldnt1_vnum_mf8_m32:
+ **	ldnt1b	{z0\.b - z3\.b}, pn8/z, \[x0, #-32, mul vl\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_vnum_mf8_m32, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svldnt1_vnum_mf8_x4 (pn8, x0, -32),
+ 		 z0 = svldnt1_vnum_x4 (pn8, x0, -32))
+ 
+ /*
+ ** ldnt1_vnum_mf8_m36:
+ **	[^{]*
+ **	ldnt1b	{z0\.b - z3\.b}, pn8/z, \[x0, x[0-9]+\]
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_vnum_mf8_m36, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svldnt1_vnum_mf8_x4 (pn8, x0, -36),
+ 		 z0 = svldnt1_vnum_x4 (pn8, x0, -36))
+ 
+ /*
+ ** ldnt1_vnum_mf8_x1:
+ **	cntb	(x[0-9]+)
+ ** (
+ **	madd	(x[0-9]+), (?:x1, \1|\1, x1), x0
+ **	ldnt1b	{z0\.b - z3\.b}, pn8/z, \[\2\]
+ ** |
+ **	mul	(x[0-9]+), (?:x1, \1|\1, x1)
+ **	ldnt1b	{z0\.b - z3\.b}, pn8/z, \[x0, \3\]
+ ** )
+ **	ret
+ */
+ TEST_LOAD_COUNT (ldnt1_vnum_mf8_x1, svmfloat8x4_t, mfloat8_t,
+ 		 z0 = svldnt1_vnum_mf8_x4 (pn8, x0, x1),
+ 		 z0 = svldnt1_vnum_x4 (pn8, x0, x1))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/revd_mf8.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/revd_mf8.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/revd_mf8.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/revd_mf8.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,80 ----
+ /* { dg-do assemble { target aarch64_asm_sve2p1_ok } } */
+ /* { dg-do compile { target { ! aarch64_asm_sve2p1_ok } } } */
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sve_acle.h"
+ 
+ #pragma GCC target "+sve2p1"
+ 
+ /*
+ ** revd_mf8_m_tied12:
+ **	revd	z0\.q, p0/m, z0\.q
+ **	ret
+ */
+ TEST_UNIFORM_Z (revd_mf8_m_tied12, svmfloat8_t,
+ 		z0 = svrevd_mf8_m (z0, p0, z0),
+ 		z0 = svrevd_m (z0, p0, z0))
+ 
+ /*
+ ** revd_mf8_m_tied1:
+ **	revd	z0\.q, p0/m, z1\.q
+ **	ret
+ */
+ TEST_UNIFORM_Z (revd_mf8_m_tied1, svmfloat8_t,
+ 		z0 = svrevd_mf8_m (z0, p0, z1),
+ 		z0 = svrevd_m (z0, p0, z1))
+ 
+ /*
+ ** revd_mf8_m_tied2:
+ **	mov	(z[0-9]+)\.d, z0\.d
+ **	movprfx	z0, z1
+ **	revd	z0\.q, p0/m, \1\.q
+ **	ret
+ */
+ TEST_UNIFORM_Z (revd_mf8_m_tied2, svmfloat8_t,
+ 		z0 = svrevd_mf8_m (z1, p0, z0),
+ 		z0 = svrevd_m (z1, p0, z0))
+ 
+ /*
+ ** revd_mf8_m_untied:
+ **	movprfx	z0, z2
+ **	revd	z0\.q, p0/m, z1\.q
+ **	ret
+ */
+ TEST_UNIFORM_Z (revd_mf8_m_untied, svmfloat8_t,
+ 		z0 = svrevd_mf8_m (z2, p0, z1),
+ 		z0 = svrevd_m (z2, p0, z1))
+ 
+ /* Awkward register allocation.  Don't require specific output.  */
+ TEST_UNIFORM_Z (revd_mf8_z_tied1, svmfloat8_t,
+ 		z0 = svrevd_mf8_z (p0, z0),
+ 		z0 = svrevd_z (p0, z0))
+ 
+ /*
+ ** revd_mf8_z_untied:
+ **	movi?	[vdz]0\.?(?:[0-9]*[bhsd])?, #?0
+ **	revd	z0\.q, p0/m, z1\.q
+ **	ret
+ */
+ TEST_UNIFORM_Z (revd_mf8_z_untied, svmfloat8_t,
+ 		z0 = svrevd_mf8_z (p0, z1),
+ 		z0 = svrevd_z (p0, z1))
+ 
+ /*
+ ** revd_mf8_x_tied1:
+ **	revd	z0\.q, p0/m, z0\.q
+ **	ret
+ */
+ TEST_UNIFORM_Z (revd_mf8_x_tied1, svmfloat8_t,
+ 		z0 = svrevd_mf8_x (p0, z0),
+ 		z0 = svrevd_x (p0, z0))
+ 
+ /*
+ ** revd_mf8_x_untied:
+ **	movprfx	z0, z1
+ **	revd	z0\.q, p0/m, z1\.q
+ **	ret
+ */
+ TEST_UNIFORM_Z (revd_mf8_x_untied, svmfloat8_t,
+ 		z0 = svrevd_mf8_x (p0, z1),
+ 		z0 = svrevd_x (p0, z1))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1_mf8_x2.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1_mf8_x2.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1_mf8_x2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1_mf8_x2.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,269 ----
+ /* { dg-do assemble { target aarch64_asm_sve2p1_ok } } */
+ /* { dg-do compile { target { ! aarch64_asm_sve2p1_ok } } } */
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" { target { ! ilp32 } } } } */
+ 
+ #include "test_sve_acle.h"
+ 
+ #pragma GCC target "+sve2p1"
+ #ifdef STREAMING_COMPATIBLE
+ #pragma GCC target "+sme2"
+ #endif
+ 
+ /*
+ ** stnt1_mf8_base:
+ **	stnt1b	{z0\.b(?: - |, )z1\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_base, svmfloat8x2_t, mfloat8_t,
+ 		  svstnt1_mf8_x2 (pn8, x0, z0),
+ 		  svstnt1 (pn8, x0, z0))
+ 
+ /*
+ ** stnt1_mf8_index:
+ **	stnt1b	{z0\.b(?: - |, )z1\.b}, pn8, \[x0, x1\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_index, svmfloat8x2_t, mfloat8_t,
+ 		  svstnt1_mf8_x2 (pn8, x0 + x1, z0),
+ 		  svstnt1 (pn8, x0 + x1, z0))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** stnt1_mf8_1:
+ **	incb	x0
+ **	stnt1b	{z0\.b(?: - |, )z1\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_1, svmfloat8x2_t, mfloat8_t,
+ 		  svstnt1_mf8_x2 (pn8, x0 + svcntb (), z0),
+ 		  svstnt1 (pn8, x0 + svcntb (), z0))
+ 
+ /*
+ ** stnt1_mf8_2:
+ **	stnt1b	{z0\.b(?: - |, )z1\.b}, pn8, \[x0, #2, mul vl\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_2, svmfloat8x2_t, mfloat8_t,
+ 		  svstnt1_mf8_x2 (pn8, x0 + svcntb () * 2, z0),
+ 		  svstnt1 (pn8, x0 + svcntb () * 2, z0))
+ 
+ /*
+ ** stnt1_mf8_14:
+ **	stnt1b	{z0\.b(?: - |, )z1\.b}, pn8, \[x0, #14, mul vl\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_14, svmfloat8x2_t, mfloat8_t,
+ 		  svstnt1_mf8_x2 (pn8, x0 + svcntb () * 14, z0),
+ 		  svstnt1 (pn8, x0 + svcntb () * 14, z0))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** stnt1_mf8_16:
+ **	incb	x0, all, mul #16
+ **	stnt1b	{z0\.b(?: - |, )z1\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_16, svmfloat8x2_t, mfloat8_t,
+ 		  svstnt1_mf8_x2 (pn8, x0 + svcntb () * 16, z0),
+ 		  svstnt1 (pn8, x0 + svcntb () * 16, z0))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** stnt1_mf8_m1:
+ **	decb	x0
+ **	stnt1b	{z0\.b(?: - |, )z1\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_m1, svmfloat8x2_t, mfloat8_t,
+ 		  svstnt1_mf8_x2 (pn8, x0 - svcntb (), z0),
+ 		  svstnt1 (pn8, x0 - svcntb (), z0))
+ 
+ /*
+ ** stnt1_mf8_m2:
+ **	stnt1b	{z0\.b(?: - |, )z1\.b}, pn8, \[x0, #-2, mul vl\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_m2, svmfloat8x2_t, mfloat8_t,
+ 		  svstnt1_mf8_x2 (pn8, x0 - svcntb () * 2, z0),
+ 		  svstnt1 (pn8, x0 - svcntb () * 2, z0))
+ 
+ /*
+ ** stnt1_mf8_m16:
+ **	stnt1b	{z0\.b(?: - |, )z1\.b}, pn8, \[x0, #-16, mul vl\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_m16, svmfloat8x2_t, mfloat8_t,
+ 		  svstnt1_mf8_x2 (pn8, x0 - svcntb () * 16, z0),
+ 		  svstnt1 (pn8, x0 - svcntb () * 16, z0))
+ 
+ /*
+ ** stnt1_mf8_m18:
+ **	addvl	(x[0-9]+), x0, #-18
+ **	stnt1b	{z0\.b(?: - |, )z1\.b}, pn8, \[\1\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_m18, svmfloat8x2_t, mfloat8_t,
+ 		  svstnt1_mf8_x2 (pn8, x0 - svcntb () * 18, z0),
+ 		  svstnt1 (pn8, x0 - svcntb () * 18, z0))
+ 
+ /*
+ ** stnt1_mf8_z17:
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	stnt1b	{z[^\n]+}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_z17, svmfloat8x2_t, mfloat8_t,
+ 		  svstnt1_mf8_x2 (pn8, x0, z17),
+ 		  svstnt1 (pn8, x0, z17))
+ 
+ /*
+ ** stnt1_mf8_z22:
+ **	stnt1b	{z22\.b(?: - |, )z23\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_z22, svmfloat8x2_t, mfloat8_t,
+ 		  svstnt1_mf8_x2 (pn8, x0, z22),
+ 		  svstnt1 (pn8, x0, z22))
+ 
+ /*
+ ** stnt1_mf8_z28:
+ **	stnt1b	{z28\.b(?: - |, )z29\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_z28, svmfloat8x2_t, mfloat8_t,
+ 		  svstnt1_mf8_x2 (pn8, x0, z28),
+ 		  svstnt1 (pn8, x0, z28))
+ 
+ /*
+ ** stnt1_mf8_pn0:
+ **	mov	p([89]|1[0-5])\.b, p0\.b
+ **	stnt1b	{z0\.b(?: - |, )z1\.b}, pn\1, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_pn0, svmfloat8x2_t, mfloat8_t,
+ 		  svstnt1_mf8_x2 (pn0, x0, z0),
+ 		  svstnt1 (pn0, x0, z0))
+ 
+ /*
+ ** stnt1_mf8_pn7:
+ **	mov	p([89]|1[0-5])\.b, p7\.b
+ **	stnt1b	{z0\.b(?: - |, )z1\.b}, pn\1, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_pn7, svmfloat8x2_t, mfloat8_t,
+ 		  svstnt1_mf8_x2 (pn7, x0, z0),
+ 		  svstnt1 (pn7, x0, z0))
+ 
+ /*
+ ** stnt1_mf8_pn15:
+ **	stnt1b	{z0\.b(?: - |, )z1\.b}, pn15, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_pn15, svmfloat8x2_t, mfloat8_t,
+ 		  svstnt1_mf8_x2 (pn15, x0, z0),
+ 		  svstnt1 (pn15, x0, z0))
+ 
+ /*
+ ** stnt1_vnum_mf8_0:
+ **	stnt1b	{z0\.b(?: - |, )z1\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_vnum_mf8_0, svmfloat8x2_t, mfloat8_t,
+ 		  svstnt1_vnum_mf8_x2 (pn8, x0, 0, z0),
+ 		  svstnt1_vnum (pn8, x0, 0, z0))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** stnt1_vnum_mf8_1:
+ **	incb	x0
+ **	stnt1b	{z0\.b(?: - |, )z1\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_vnum_mf8_1, svmfloat8x2_t, mfloat8_t,
+ 		  svstnt1_vnum_mf8_x2 (pn8, x0, 1, z0),
+ 		  svstnt1_vnum (pn8, x0, 1, z0))
+ 
+ /*
+ ** stnt1_vnum_mf8_2:
+ **	stnt1b	{z0\.b(?: - |, )z1\.b}, pn8, \[x0, #2, mul vl\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_vnum_mf8_2, svmfloat8x2_t, mfloat8_t,
+ 		  svstnt1_vnum_mf8_x2 (pn8, x0, 2, z0),
+ 		  svstnt1_vnum (pn8, x0, 2, z0))
+ 
+ /*
+ ** stnt1_vnum_mf8_14:
+ **	stnt1b	{z0\.b(?: - |, )z1\.b}, pn8, \[x0, #14, mul vl\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_vnum_mf8_14, svmfloat8x2_t, mfloat8_t,
+ 		  svstnt1_vnum_mf8_x2 (pn8, x0, 14, z0),
+ 		  svstnt1_vnum (pn8, x0, 14, z0))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** stnt1_vnum_mf8_16:
+ **	incb	x0, all, mul #16
+ **	stnt1b	{z0\.b(?: - |, )z1\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_vnum_mf8_16, svmfloat8x2_t, mfloat8_t,
+ 		  svstnt1_vnum_mf8_x2 (pn8, x0, 16, z0),
+ 		  svstnt1_vnum (pn8, x0, 16, z0))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** stnt1_vnum_mf8_m1:
+ **	decb	x0
+ **	stnt1b	{z0\.b(?: - |, )z1\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_vnum_mf8_m1, svmfloat8x2_t, mfloat8_t,
+ 		  svstnt1_vnum_mf8_x2 (pn8, x0, -1, z0),
+ 		  svstnt1_vnum (pn8, x0, -1, z0))
+ 
+ /*
+ ** stnt1_vnum_mf8_m2:
+ **	stnt1b	{z0\.b(?: - |, )z1\.b}, pn8, \[x0, #-2, mul vl\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_vnum_mf8_m2, svmfloat8x2_t, mfloat8_t,
+ 		  svstnt1_vnum_mf8_x2 (pn8, x0, -2, z0),
+ 		  svstnt1_vnum (pn8, x0, -2, z0))
+ 
+ /*
+ ** stnt1_vnum_mf8_m16:
+ **	stnt1b	{z0\.b(?: - |, )z1\.b}, pn8, \[x0, #-16, mul vl\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_vnum_mf8_m16, svmfloat8x2_t, mfloat8_t,
+ 		  svstnt1_vnum_mf8_x2 (pn8, x0, -16, z0),
+ 		  svstnt1_vnum (pn8, x0, -16, z0))
+ 
+ /*
+ ** stnt1_vnum_mf8_m18:
+ **	addvl	(x[0-9]+), x0, #-18
+ **	stnt1b	{z0\.b(?: - |, )z1\.b}, pn8, \[\1\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_vnum_mf8_m18, svmfloat8x2_t, mfloat8_t,
+ 		  svstnt1_vnum_mf8_x2 (pn8, x0, -18, z0),
+ 		  svstnt1_vnum (pn8, x0, -18, z0))
+ 
+ /*
+ ** stnt1_vnum_mf8_x1:
+ **	cntb	(x[0-9]+)
+ ** (
+ **	madd	(x[0-9]+), (?:x1, \1|\1, x1), x0
+ **	stnt1b	{z0\.b(?: - |, )z1\.b}, pn8, \[\2\]
+ ** |
+ **	mul	(x[0-9]+), (?:x1, \1|\1, x1)
+ **	stnt1b	{z0\.b(?: - |, )z1\.b}, pn8, \[x0, \3\]
+ ** )
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_vnum_mf8_x1, svmfloat8x2_t, mfloat8_t,
+ 		  svstnt1_vnum_mf8_x2 (pn8, x0, x1, z0),
+ 		  svstnt1_vnum (pn8, x0, x1, z0))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1_mf8_x4.c gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1_mf8_x4.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1_mf8_x4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1_mf8_x4.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,361 ----
+ /* { dg-do assemble { target aarch64_asm_sve2p1_ok } } */
+ /* { dg-do compile { target { ! aarch64_asm_sve2p1_ok } } } */
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" { target { ! ilp32 } } } } */
+ 
+ #include "test_sve_acle.h"
+ 
+ #pragma GCC target "+sve2p1"
+ #ifdef STREAMING_COMPATIBLE
+ #pragma GCC target "+sme2"
+ #endif
+ 
+ /*
+ ** stnt1_mf8_base:
+ **	stnt1b	{z0\.b - z3\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_base, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_mf8_x4 (pn8, x0, z0),
+ 		  svstnt1 (pn8, x0, z0))
+ 
+ /*
+ ** stnt1_mf8_index:
+ **	stnt1b	{z0\.b - z3\.b}, pn8, \[x0, x1\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_index, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_mf8_x4 (pn8, x0 + x1, z0),
+ 		  svstnt1 (pn8, x0 + x1, z0))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** stnt1_mf8_1:
+ **	incb	x0
+ **	stnt1b	{z0\.b - z3\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_1, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_mf8_x4 (pn8, x0 + svcntb (), z0),
+ 		  svstnt1 (pn8, x0 + svcntb (), z0))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** stnt1_mf8_2:
+ **	incb	x0, all, mul #2
+ **	stnt1b	{z0\.b - z3\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_2, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_mf8_x4 (pn8, x0 + svcntb () * 2, z0),
+ 		  svstnt1 (pn8, x0 + svcntb () * 2, z0))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** stnt1_mf8_3:
+ **	incb	x0, all, mul #3
+ **	stnt1b	{z0\.b - z3\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_3, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_mf8_x4 (pn8, x0 + svcntb () * 3, z0),
+ 		  svstnt1 (pn8, x0 + svcntb () * 3, z0))
+ 
+ /*
+ ** stnt1_mf8_4:
+ **	stnt1b	{z0\.b - z3\.b}, pn8, \[x0, #4, mul vl\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_4, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_mf8_x4 (pn8, x0 + svcntb () * 4, z0),
+ 		  svstnt1 (pn8, x0 + svcntb () * 4, z0))
+ 
+ /*
+ ** stnt1_mf8_28:
+ **	stnt1b	{z0\.b - z3\.b}, pn8, \[x0, #28, mul vl\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_28, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_mf8_x4 (pn8, x0 + svcntb () * 28, z0),
+ 		  svstnt1 (pn8, x0 + svcntb () * 28, z0))
+ 
+ /*
+ ** stnt1_mf8_32:
+ **	[^{]*
+ **	stnt1b	{z0\.b - z3\.b}, pn8, \[x0, x[0-9]+\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_32, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_mf8_x4 (pn8, x0 + svcntb () * 32, z0),
+ 		  svstnt1 (pn8, x0 + svcntb () * 32, z0))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** stnt1_mf8_m1:
+ **	decb	x0
+ **	stnt1b	{z0\.b - z3\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_m1, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_mf8_x4 (pn8, x0 - svcntb (), z0),
+ 		  svstnt1 (pn8, x0 - svcntb (), z0))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** stnt1_mf8_m2:
+ **	decb	x0, all, mul #2
+ **	stnt1b	{z0\.b - z3\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_m2, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_mf8_x4 (pn8, x0 - svcntb () * 2, z0),
+ 		  svstnt1 (pn8, x0 - svcntb () * 2, z0))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** stnt1_mf8_m3:
+ **	decb	x0, all, mul #3
+ **	stnt1b	{z0\.b - z3\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_m3, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_mf8_x4 (pn8, x0 - svcntb () * 3, z0),
+ 		  svstnt1 (pn8, x0 - svcntb () * 3, z0))
+ 
+ /*
+ ** stnt1_mf8_m4:
+ **	stnt1b	{z0\.b - z3\.b}, pn8, \[x0, #-4, mul vl\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_m4, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_mf8_x4 (pn8, x0 - svcntb () * 4, z0),
+ 		  svstnt1 (pn8, x0 - svcntb () * 4, z0))
+ 
+ /*
+ ** stnt1_mf8_m32:
+ **	stnt1b	{z0\.b - z3\.b}, pn8, \[x0, #-32, mul vl\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_m32, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_mf8_x4 (pn8, x0 - svcntb () * 32, z0),
+ 		  svstnt1 (pn8, x0 - svcntb () * 32, z0))
+ 
+ /*
+ ** stnt1_mf8_m36:
+ **	[^{]*
+ **	stnt1b	{z0\.b - z3\.b}, pn8, \[x0, x[0-9]+\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_m36, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_mf8_x4 (pn8, x0 - svcntb () * 36, z0),
+ 		  svstnt1 (pn8, x0 - svcntb () * 36, z0))
+ 
+ /*
+ ** stnt1_mf8_z17:
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	stnt1b	{z[^\n]+}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_z17, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_mf8_x4 (pn8, x0, z17),
+ 		  svstnt1 (pn8, x0, z17))
+ 
+ /*
+ ** stnt1_mf8_z22:
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	mov	[^\n]+
+ **	stnt1b	{z[^\n]+}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_z22, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_mf8_x4 (pn8, x0, z22),
+ 		  svstnt1 (pn8, x0, z22))
+ 
+ /*
+ ** stnt1_mf8_z28:
+ **	stnt1b	{z28\.b - z31\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_z28, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_mf8_x4 (pn8, x0, z28),
+ 		  svstnt1 (pn8, x0, z28))
+ 
+ /*
+ ** stnt1_mf8_pn0:
+ **	mov	p([89]|1[0-5])\.b, p0\.b
+ **	stnt1b	{z0\.b - z3\.b}, pn\1, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_pn0, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_mf8_x4 (pn0, x0, z0),
+ 		  svstnt1 (pn0, x0, z0))
+ 
+ /*
+ ** stnt1_mf8_pn7:
+ **	mov	p([89]|1[0-5])\.b, p7\.b
+ **	stnt1b	{z0\.b - z3\.b}, pn\1, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_pn7, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_mf8_x4 (pn7, x0, z0),
+ 		  svstnt1 (pn7, x0, z0))
+ 
+ /*
+ ** stnt1_mf8_pn15:
+ **	stnt1b	{z0\.b - z3\.b}, pn15, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_mf8_pn15, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_mf8_x4 (pn15, x0, z0),
+ 		  svstnt1 (pn15, x0, z0))
+ 
+ /*
+ ** stnt1_vnum_mf8_0:
+ **	stnt1b	{z0\.b - z3\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_vnum_mf8_0, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_vnum_mf8_x4 (pn8, x0, 0, z0),
+ 		  svstnt1_vnum (pn8, x0, 0, z0))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** stnt1_vnum_mf8_1:
+ **	incb	x0
+ **	stnt1b	{z0\.b - z3\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_vnum_mf8_1, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_vnum_mf8_x4 (pn8, x0, 1, z0),
+ 		  svstnt1_vnum (pn8, x0, 1, z0))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** stnt1_vnum_mf8_2:
+ **	incb	x0, all, mul #2
+ **	stnt1b	{z0\.b - z3\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_vnum_mf8_2, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_vnum_mf8_x4 (pn8, x0, 2, z0),
+ 		  svstnt1_vnum (pn8, x0, 2, z0))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** stnt1_vnum_mf8_3:
+ **	incb	x0, all, mul #3
+ **	stnt1b	{z0\.b - z3\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_vnum_mf8_3, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_vnum_mf8_x4 (pn8, x0, 3, z0),
+ 		  svstnt1_vnum (pn8, x0, 3, z0))
+ 
+ /*
+ ** stnt1_vnum_mf8_4:
+ **	stnt1b	{z0\.b - z3\.b}, pn8, \[x0, #4, mul vl\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_vnum_mf8_4, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_vnum_mf8_x4 (pn8, x0, 4, z0),
+ 		  svstnt1_vnum (pn8, x0, 4, z0))
+ 
+ /*
+ ** stnt1_vnum_mf8_28:
+ **	stnt1b	{z0\.b - z3\.b}, pn8, \[x0, #28, mul vl\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_vnum_mf8_28, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_vnum_mf8_x4 (pn8, x0, 28, z0),
+ 		  svstnt1_vnum (pn8, x0, 28, z0))
+ 
+ /*
+ ** stnt1_vnum_mf8_32:
+ **	[^{]*
+ **	stnt1b	{z0\.b - z3\.b}, pn8, \[x0, x[0-9]+\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_vnum_mf8_32, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_vnum_mf8_x4 (pn8, x0, 32, z0),
+ 		  svstnt1_vnum (pn8, x0, 32, z0))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** stnt1_vnum_mf8_m1:
+ **	decb	x0
+ **	stnt1b	{z0\.b - z3\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_vnum_mf8_m1, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_vnum_mf8_x4 (pn8, x0, -1, z0),
+ 		  svstnt1_vnum (pn8, x0, -1, z0))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** stnt1_vnum_mf8_m2:
+ **	decb	x0, all, mul #2
+ **	stnt1b	{z0\.b - z3\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_vnum_mf8_m2, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_vnum_mf8_x4 (pn8, x0, -2, z0),
+ 		  svstnt1_vnum (pn8, x0, -2, z0))
+ 
+ /* Moving the constant into a register would also be OK.  */
+ /*
+ ** stnt1_vnum_mf8_m3:
+ **	decb	x0, all, mul #3
+ **	stnt1b	{z0\.b - z3\.b}, pn8, \[x0\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_vnum_mf8_m3, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_vnum_mf8_x4 (pn8, x0, -3, z0),
+ 		  svstnt1_vnum (pn8, x0, -3, z0))
+ 
+ /*
+ ** stnt1_vnum_mf8_m4:
+ **	stnt1b	{z0\.b - z3\.b}, pn8, \[x0, #-4, mul vl\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_vnum_mf8_m4, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_vnum_mf8_x4 (pn8, x0, -4, z0),
+ 		  svstnt1_vnum (pn8, x0, -4, z0))
+ 
+ /*
+ ** stnt1_vnum_mf8_m32:
+ **	stnt1b	{z0\.b - z3\.b}, pn8, \[x0, #-32, mul vl\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_vnum_mf8_m32, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_vnum_mf8_x4 (pn8, x0, -32, z0),
+ 		  svstnt1_vnum (pn8, x0, -32, z0))
+ 
+ /*
+ ** stnt1_vnum_mf8_m36:
+ **	[^{]*
+ **	stnt1b	{z0\.b - z3\.b}, pn8, \[x0, x[0-9]+\]
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_vnum_mf8_m36, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_vnum_mf8_x4 (pn8, x0, -36, z0),
+ 		  svstnt1_vnum (pn8, x0, -36, z0))
+ 
+ /*
+ ** stnt1_vnum_mf8_x1:
+ **	cntb	(x[0-9]+)
+ ** (
+ **	madd	(x[0-9]+), (?:x1, \1|\1, x1), x0
+ **	stnt1b	{z0\.b - z3\.b}, pn8, \[\2\]
+ ** |
+ **	mul	(x[0-9]+), (?:x1, \1|\1, x1)
+ **	stnt1b	{z0\.b - z3\.b}, pn8, \[x0, \3\]
+ ** )
+ **	ret
+ */
+ TEST_STORE_COUNT (stnt1_vnum_mf8_x1, svmfloat8x4_t, mfloat8_t,
+ 		  svstnt1_vnum_mf8_x4 (pn8, x0, x1, z0),
+ 		  svstnt1_vnum (pn8, x0, x1, z0))
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/gcn/sincos-ice-on-ifn_sin-call-1.c gcc-16-20251228/gcc/testsuite/gcc.target/gcn/sincos-ice-on-ifn_sin-call-1.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/gcn/sincos-ice-on-ifn_sin-call-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/gcn/sincos-ice-on-ifn_sin-call-1.c	Sun Dec 28 22:32:13 2025
***************
*** 0 ****
--- 1,14 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-Ofast" } */
+ #include <math.h>
+ 
+ /* This test is the original, platform-specific, version of
+    gcc.dg/tree-ssa/sincos-ice-on-ifn_sin-call.c. */
+ void
+ foo (float output[1024 * 1024], const float input[1024 * 1024])
+ {
+   int i;
+   for (i = 0; i < 1024 * 1024; i++) {
+     output[i] = __builtin_sinf (input[i]) + __builtin_cosf (input[i]);
+   }
+ }
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/i386/20040112-1.c gcc-16-20251228/gcc/testsuite/gcc.target/i386/20040112-1.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/i386/20040112-1.c	Sun Dec 21 22:32:11 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/i386/20040112-1.c	Sun Dec 28 22:32:13 2025
***************
*** 1,6 ****
--- 1,7 ----
  /* { dg-do compile } */
  /* { dg-options "-O2 -fomit-frame-pointer" } */
  /* { dg-additional-options "-mregparm=1" { target ia32 } } */
+ /* { dg-add-options check_function_bodies } */
  /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
  /* { dg-final { check-function-bodies "**" "" "" { target *-*-* } {^\t?\.} } } */
  
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/i386/pr122343-1a.c gcc-16-20251228/gcc/testsuite/gcc.target/i386/pr122343-1a.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/i386/pr122343-1a.c	Sun Dec 21 22:32:11 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/i386/pr122343-1a.c	Sun Dec 28 22:32:14 2025
***************
*** 1,6 ****
--- 1,7 ----
  /* { dg-do compile } */
  /* { dg-options "-O2 -fomit-frame-pointer" } */
  /* { dg-additional-options "-mregparm=1" { target ia32 } } */
+ /* { dg-add-options check_function_bodies } */
  /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
  /* { dg-final { check-function-bodies "**" "" "" { target *-*-* } {^\t?\.} } } */
  
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/i386/pr122343-1b.c gcc-16-20251228/gcc/testsuite/gcc.target/i386/pr122343-1b.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/i386/pr122343-1b.c	Sun Dec 21 22:32:11 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/i386/pr122343-1b.c	Sun Dec 28 22:32:14 2025
***************
*** 1,6 ****
--- 1,7 ----
  /* { dg-do compile } */
  /* { dg-options "-O2 -fomit-frame-pointer -fno-fuse-ops-with-volatile-access" } */
  /* { dg-additional-options "-mregparm=1" { target ia32 } } */
+ /* { dg-add-options check_function_bodies } */
  /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
  /* { dg-final { check-function-bodies "**" "" "" { target *-*-* } {^\t?\.} } } */
  
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/i386/pr122343-2a.c gcc-16-20251228/gcc/testsuite/gcc.target/i386/pr122343-2a.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/i386/pr122343-2a.c	Sun Dec 21 22:32:11 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/i386/pr122343-2a.c	Sun Dec 28 22:32:14 2025
***************
*** 1,5 ****
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-options "-O2 -fomit-frame-pointer" } */
+ /* { dg-add-options check_function_bodies } */
  /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
  /* { dg-final { check-function-bodies "**" "" "" { target *-*-* } {^\t?\.} } } */
  
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/i386/pr122343-2b.c gcc-16-20251228/gcc/testsuite/gcc.target/i386/pr122343-2b.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/i386/pr122343-2b.c	Sun Dec 21 22:32:11 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/i386/pr122343-2b.c	Sun Dec 28 22:32:14 2025
***************
*** 1,5 ****
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-options "-O2 -fomit-frame-pointer -fno-fuse-ops-with-volatile-access" } */
+ /* { dg-add-options check_function_bodies } */
  /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
  /* { dg-final { check-function-bodies "**" "" "" { target *-*-* } {^\t?\.} } } */
  
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/i386/pr122343-3.c gcc-16-20251228/gcc/testsuite/gcc.target/i386/pr122343-3.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/i386/pr122343-3.c	Sun Dec 21 22:32:11 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/i386/pr122343-3.c	Sun Dec 28 22:32:14 2025
***************
*** 1,5 ****
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-options "-O2 -fomit-frame-pointer" } */
+ /* { dg-add-options check_function_bodies } */
  /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
  /* { dg-final { check-function-bodies "**" "" "" { target *-*-* } {^\t?\.} } } */
  
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/i386/pr122343-4a.c gcc-16-20251228/gcc/testsuite/gcc.target/i386/pr122343-4a.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/i386/pr122343-4a.c	Sun Dec 21 22:32:11 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/i386/pr122343-4a.c	Sun Dec 28 22:32:14 2025
***************
*** 1,5 ****
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-options "-O2 -fomit-frame-pointer" } */
+ /* { dg-add-options check_function_bodies } */
  /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
  /* { dg-final { check-function-bodies "**" "" "" { target *-*-* } {^\t?\.} } } */
  
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/i386/pr122343-4b.c gcc-16-20251228/gcc/testsuite/gcc.target/i386/pr122343-4b.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/i386/pr122343-4b.c	Sun Dec 21 22:32:11 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/i386/pr122343-4b.c	Sun Dec 28 22:32:14 2025
***************
*** 1,5 ****
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-options "-O2 -fomit-frame-pointer -fno-fuse-ops-with-volatile-access" } */
+ /* { dg-add-options check_function_bodies } */
  /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
  /* { dg-final { check-function-bodies "**" "" "" { target *-*-* } {^\t?\.} } } */
  
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/i386/pr122343-5a.c gcc-16-20251228/gcc/testsuite/gcc.target/i386/pr122343-5a.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/i386/pr122343-5a.c	Sun Dec 21 22:32:11 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/i386/pr122343-5a.c	Sun Dec 28 22:32:14 2025
***************
*** 1,6 ****
--- 1,7 ----
  /* { dg-do compile } */
  /* { dg-options "-O2 -fomit-frame-pointer" } */
  /* { dg-additional-options "-mregparm=1" { target ia32 } } */
+ /* { dg-add-options check_function_bodies } */
  /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
  /* { dg-final { check-function-bodies "**" "" "" { target *-*-* } {^\t?\.} } } */
  
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/i386/pr122343-5b.c gcc-16-20251228/gcc/testsuite/gcc.target/i386/pr122343-5b.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/i386/pr122343-5b.c	Sun Dec 21 22:32:11 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/i386/pr122343-5b.c	Sun Dec 28 22:32:14 2025
***************
*** 1,6 ****
--- 1,7 ----
  /* { dg-do compile } */
  /* { dg-options "-O2 -fomit-frame-pointer -fno-fuse-ops-with-volatile-access" } */
  /* { dg-additional-options "-mregparm=1" { target ia32 } } */
+ /* { dg-add-options check_function_bodies } */
  /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
  /* { dg-final { check-function-bodies "**" "" "" { target *-*-* } {^\t?\.} } } */
  
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/i386/pr122343-6a.c gcc-16-20251228/gcc/testsuite/gcc.target/i386/pr122343-6a.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/i386/pr122343-6a.c	Sun Dec 21 22:32:11 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/i386/pr122343-6a.c	Sun Dec 28 22:32:14 2025
***************
*** 1,5 ****
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-options "-O2 -fomit-frame-pointer" } */
+ /* { dg-add-options check_function_bodies } */
  /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
  /* { dg-final { check-function-bodies "**" "" "" { target { *-*-* } } {^\t?\.} } } */
  
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/i386/pr122343-6b.c gcc-16-20251228/gcc/testsuite/gcc.target/i386/pr122343-6b.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/i386/pr122343-6b.c	Sun Dec 21 22:32:11 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/i386/pr122343-6b.c	Sun Dec 28 22:32:14 2025
***************
*** 1,5 ****
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-options "-O2 -fomit-frame-pointer -fno-fuse-ops-with-volatile-access" } */
+ /* { dg-add-options check_function_bodies } */
  /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
  /* { dg-final { check-function-bodies "**" "" "" { target *-*-* } {^\t?\.} } } */
  
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/i386/pr122343-7.c gcc-16-20251228/gcc/testsuite/gcc.target/i386/pr122343-7.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/i386/pr122343-7.c	Sun Dec 21 22:32:11 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/i386/pr122343-7.c	Sun Dec 28 22:32:14 2025
***************
*** 1,5 ****
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-options "-O2 -fomit-frame-pointer" } */
+ /* { dg-add-options check_function_bodies } */
  /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
  /* { dg-final { check-function-bodies "**" "" "" { target *-*-* } {^\t?\.} } } */
  
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/i386/pr122675-1.c gcc-16-20251228/gcc/testsuite/gcc.target/i386/pr122675-1.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/i386/pr122675-1.c	Sun Dec 21 22:32:11 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/i386/pr122675-1.c	Sun Dec 28 22:32:14 2025
***************
*** 1,6 ****
  /* Verify that the most likely BB edges are optimized as fallthroughs.  */
  /* { dg-do compile } */
! /* { dg-options "-O1 -fno-pic -march=x86-64 -mtune=generic -mgeneral-regs-only" } */
  /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
  /* { dg-final { check-function-bodies "**" "" "" { target lp64 } {^\t?\.} } } */
  
--- 1,7 ----
  /* Verify that the most likely BB edges are optimized as fallthroughs.  */
  /* { dg-do compile } */
! /* { dg-options "-O1 -fno-pic -march=x86-64 -mtune=generic -mgeneral-regs-only -fomit-frame-pointer" } */
! /* { dg-add-options check_function_bodies } */
  /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
  /* { dg-final { check-function-bodies "**" "" "" { target lp64 } {^\t?\.} } } */
  
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/riscv/pr122769.c gcc-16-20251228/gcc/testsuite/gcc.target/riscv/pr122769.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/riscv/pr122769.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/riscv/pr122769.c	Sun Dec 28 22:32:14 2025
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=rv64gc_zbs_zicond -mabi=lp64d" { target rv64} } */
+ 
+ /* Elide a short forward branch and generate a czero instead.  */
+ 
+ #include <stdint.h>
+ 
+ uint64_t updateLSB63 (uint64_t val, uint64_t val2, int bits, int n)
+ {
+   if (val & (1ULL << 63))
+     val2 ^= n;
+   return val2;
+ }
+ 
+ /* { dg-final { scan-assembler-times {\tczero} 1 } } */
+ /* { dg-final { scan-assembler-not {\tbge} } } */
+ 
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/riscv/pr123274.c gcc-16-20251228/gcc/testsuite/gcc.target/riscv/pr123274.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/riscv/pr123274.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/riscv/pr123274.c	Sun Dec 28 22:32:14 2025
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=rv64id" { target rv64 } } */
+ /* { dg-options "-O2 -march=rv32id" { target rv32 } } */
+ unsigned a, b;
+ 
+ void
+ foo()
+ {
+   if (__builtin_mul_overflow(a, b, &b))
+     b = 0xffffffff;
+ }
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/riscv/pr123278.c gcc-16-20251228/gcc/testsuite/gcc.target/riscv/pr123278.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/riscv/pr123278.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/riscv/pr123278.c	Sun Dec 28 22:32:14 2025
***************
*** 0 ****
--- 1,9 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mcpu=xt-c910v2 -mtune=andes-n45 -O2" } */
+ _Float16 f;
+ 
+ void
+ foo ()
+ {
+   f *= 10;
+ }
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c gcc-16-20251228/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c	Sun Dec 21 22:32:12 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c	Sun Dec 28 22:32:14 2025
*************** TEST_WIDEN_TERNARY_VX_UNSIGNED(T, NT)
*** 39,41 ****
--- 39,42 ----
  /* { dg-final { scan-assembler-times {vmseq.vx} 1 } } */
  /* { dg-final { scan-assembler-times {vmsne.vx} 1 } } */
  /* { dg-final { scan-assembler-times {vmsltu.vx} 1 } } */
+ /* { dg-final { scan-assembler-times {vmsleu.vx} 1 } } */
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c gcc-16-20251228/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c	Sun Dec 21 22:32:12 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c	Sun Dec 28 22:32:14 2025
*************** TEST_WIDEN_TERNARY_VX_UNSIGNED(T, NT)
*** 42,44 ****
--- 42,45 ----
  /* { dg-final { scan-assembler-times {vmseq.vx} 1 } } */
  /* { dg-final { scan-assembler-times {vmsne.vx} 1 } } */
  /* { dg-final { scan-assembler-times {vmsltu.vx} 1 } } */
+ /* { dg-final { scan-assembler-times {vmsleu.vx} 1 } } */
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u8.c gcc-16-20251228/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u8.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u8.c	Sun Dec 21 22:32:12 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u8.c	Sun Dec 28 22:32:14 2025
*************** TEST_TERNARY_VX_UNSIGNED_0(T)
*** 29,31 ****
--- 29,32 ----
  /* { dg-final { scan-assembler-times {vmseq.vx} 1 } } */
  /* { dg-final { scan-assembler-times {vmsne.vx} 1 } } */
  /* { dg-final { scan-assembler-times {vmsltu.vx} 1 } } */
+ /* { dg-final { scan-assembler-times {vmsleu.vx} 1 } } */
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u16.c gcc-16-20251228/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u16.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u16.c	Sun Dec 21 22:32:12 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u16.c	Sun Dec 28 22:32:14 2025
*************** TEST_WIDEN_TERNARY_VX_UNSIGNED(T, NT)
*** 39,41 ****
--- 39,42 ----
  /* { dg-final { scan-assembler-not {vmseq.vx} } } */
  /* { dg-final { scan-assembler-not {vmsne.vx} } } */
  /* { dg-final { scan-assembler-not {vmsltu.vx} } } */
+ /* { dg-final { scan-assembler-not {vmsleu.vx} } } */
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u32.c gcc-16-20251228/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u32.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u32.c	Sun Dec 21 22:32:12 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u32.c	Sun Dec 28 22:32:14 2025
*************** TEST_WIDEN_TERNARY_VX_UNSIGNED(T, NT)
*** 39,41 ****
--- 39,42 ----
  /* { dg-final { scan-assembler-not {vmseq.vx} } } */
  /* { dg-final { scan-assembler-not {vmsne.vx} } } */
  /* { dg-final { scan-assembler-not {vmsltu.vx} } } */
+ /* { dg-final { scan-assembler-not {vmsleu.vx} } } */
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u64.c gcc-16-20251228/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u64.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u64.c	Sun Dec 21 22:32:12 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u64.c	Sun Dec 28 22:32:14 2025
*************** TEST_WIDEN_TERNARY_VX_UNSIGNED(T, NT)
*** 39,41 ****
--- 39,42 ----
  /* { dg-final { scan-assembler-not {vmseq.vx} } } */
  /* { dg-final { scan-assembler-not {vmsne.vx} } } */
  /* { dg-final { scan-assembler-not {vmsltu.vx} } } */
+ /* { dg-final { scan-assembler-not {vmsleu.vx} } } */
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u8.c gcc-16-20251228/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u8.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u8.c	Sun Dec 21 22:32:12 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u8.c	Sun Dec 28 22:32:14 2025
*************** TEST_TERNARY_VX_UNSIGNED_0(T)
*** 29,31 ****
--- 29,32 ----
  /* { dg-final { scan-assembler-not {vmseq.vx} } } */
  /* { dg-final { scan-assembler-not {vmsne.vx} } } */
  /* { dg-final { scan-assembler-not {vmsltu.vx} } } */
+ /* { dg-final { scan-assembler-not {vmsleu.vx} } } */
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u16.c gcc-16-20251228/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u16.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u16.c	Sun Dec 21 22:32:12 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u16.c	Sun Dec 28 22:32:14 2025
*************** TEST_WIDEN_TERNARY_VX_UNSIGNED(T, NT)
*** 39,41 ****
--- 39,42 ----
  /* { dg-final { scan-assembler-not {vmseq.vx} } } */
  /* { dg-final { scan-assembler-not {vmsne.vx} } } */
  /* { dg-final { scan-assembler-not {vmsltu.vx} } } */
+ /* { dg-final { scan-assembler-not {vmsleu.vx} } } */
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c gcc-16-20251228/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c	Sun Dec 21 22:32:12 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c	Sun Dec 28 22:32:14 2025
*************** TEST_WIDEN_TERNARY_VX_UNSIGNED(T, NT)
*** 39,41 ****
--- 39,42 ----
  /* { dg-final { scan-assembler-not {vmseq.vx} } } */
  /* { dg-final { scan-assembler-not {vmsne.vx} } } */
  /* { dg-final { scan-assembler-not {vmsltu.vx} } } */
+ /* { dg-final { scan-assembler-not {vmsleu.vx} } } */
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c gcc-16-20251228/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c	Sun Dec 21 22:32:12 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c	Sun Dec 28 22:32:14 2025
*************** TEST_WIDEN_TERNARY_VX_UNSIGNED(T, NT)
*** 39,41 ****
--- 39,42 ----
  /* { dg-final { scan-assembler-not {vmseq.vx} } } */
  /* { dg-final { scan-assembler-not {vmsne.vx} } } */
  /* { dg-final { scan-assembler-not {vmsltu.vx} } } */
+ /* { dg-final { scan-assembler-not {vmsleu.vx} } } */
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u8.c gcc-16-20251228/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u8.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u8.c	Sun Dec 21 22:32:12 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u8.c	Sun Dec 28 22:32:14 2025
*************** TEST_TERNARY_VX_UNSIGNED_0(T)
*** 29,31 ****
--- 29,32 ----
  /* { dg-final { scan-assembler-not {vmseq.vx} } } */
  /* { dg-final { scan-assembler-not {vmsne.vx} } } */
  /* { dg-final { scan-assembler-not {vmsltu.vx} } } */
+ /* { dg-final { scan-assembler-not {vmsleu.vx} } } */
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary.h gcc-16-20251228/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary.h
*** gcc-16-20251221/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary.h	Sun Dec 21 22:32:12 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary.h	Sun Dec 28 22:32:14 2025
*************** DEF_AVG_CEIL(int32_t, int64_t)
*** 426,431 ****
--- 426,432 ----
    DEF_VX_BINARY_CASE_0_WRAP(T, ==, eq)                            \
    DEF_VX_BINARY_CASE_0_WRAP(T, !=, ne)                            \
    DEF_VX_BINARY_CASE_0_WRAP(T, <, ltu)                            \
+   DEF_VX_BINARY_CASE_0_WRAP(T, <=, leu)                           \
    DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_0_WARP(T), max)           \
    DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_1_WARP(T), max)           \
    DEF_VX_BINARY_CASE_2_WRAP(T, MIN_FUNC_0_WARP(T), min)           \
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary_data.h gcc-16-20251228/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary_data.h
*** gcc-16-20251221/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary_data.h	Sun Dec 21 22:32:12 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary_data.h	Sun Dec 28 22:32:14 2025
*************** int64_t TEST_BINARY_DATA(int64_t, lt)[][
*** 6702,6705 ****
--- 6702,6841 ----
    },
  };
  
+ uint8_t TEST_BINARY_DATA(uint8_t, leu)[][3][N] =
+ {
+   {
+     { 127 },
+     {
+         0,   0,   0,   0,
+         1,   1,   1,   1,
+       127, 127, 127, 127,
+       128, 128, 128, 128,
+     },
+     {
+         1,   1,   1,   1,
+         1,   1,   1,   1,
+         1,   1,   1,   1,
+         0,   0,   0,   0,
+     },
+   },
+   {
+     { 255 },
+     {
+          0,   0,   0,   0,
+          1,   1,   1,   1,
+          2,   2,   2,   2,
+        255, 255, 255, 255,
+     },
+     {
+          1,   1,   1,   1,
+          1,   1,   1,   1,
+          1,   1,   1,   1,
+          1,   1,   1,   1,
+     },
+   },
+ };
+ 
+ uint16_t TEST_BINARY_DATA(uint16_t, leu)[][3][N] =
+ {
+   {
+     { 32767 },
+     {
+           0,     0,     0,     0,
+           1,     1,     1,     1,
+       32767, 32767, 32767, 32767,
+       32768, 32768, 32768, 32768,
+     },
+     {
+         1,   1,   1,   1,
+         1,   1,   1,   1,
+         1,   1,   1,   1,
+         0,   0,   0,   0,
+     },
+   },
+   {
+     { 65535 },
+     {
+            0,     0,     0,     0,
+            1,     1,     1,     1,
+            2,     2,     2,     2,
+        65535, 65535, 65535, 65535,
+     },
+     {
+          1,   1,   1,   1,
+          1,   1,   1,   1,
+          1,   1,   1,   1,
+          1,   1,   1,   1,
+     },
+   },
+ };
+ 
+ uint32_t TEST_BINARY_DATA(uint32_t, leu)[][3][N] =
+ {
+   {
+     { 2147483647 },
+     {
+                0,          0,          0,          0,
+                1,          1,          1,          1,
+       2147483647, 2147483647, 2147483647, 2147483647,
+       2147483648, 2147483648, 2147483648, 2147483648,
+     },
+     {
+         1,   1,   1,   1,
+         1,   1,   1,   1,
+         1,   1,   1,   1,
+         0,   0,   0,   0,
+     },
+   },
+   {
+     { 4294967295 },
+     {
+                 0,          0,          0,          0,
+                 1,          1,          1,          1,
+                 2,          2,          2,          2,
+        4294967295, 4294967295, 4294967295, 4294967295,
+     },
+     {
+          1,   1,   1,   1,
+          1,   1,   1,   1,
+          1,   1,   1,   1,
+          1,   1,   1,   1,
+     },
+   },
+ };
+ 
+ uint64_t TEST_BINARY_DATA(uint64_t, leu)[][3][N] =
+ {
+   {
+     { 9223372036854775807ull },
+     {
+                            0,                      0,                      0,                      0,
+                            1,                      1,                      1,                      1,
+       9223372036854775807ull, 9223372036854775807ull, 9223372036854775807ull, 9223372036854775807ull,
+       9223372036854775808ull, 9223372036854775808ull, 9223372036854775808ull, 9223372036854775808ull,
+     },
+     {
+         1,   1,   1,   1,
+         1,   1,   1,   1,
+         1,   1,   1,   1,
+         0,   0,   0,   0,
+     },
+   },
+   {
+     { 18446744073709551615ull },
+     {
+                              0,                       0,                       0,                       0,
+                              1,                       1,                       1,                       1,
+                              2,                       2,                       2,                       2,
+        18446744073709551615ull, 18446744073709551615ull, 18446744073709551615ull, 18446744073709551615ull,
+     },
+     {
+          1,   1,   1,   1,
+          1,   1,   1,   1,
+          1,   1,   1,   1,
+          1,   1,   1,   1,
+     },
+   },
+ };
+ 
  #endif
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmsleu-run-1-u16.c gcc-16-20251228/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmsleu-run-1-u16.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmsleu-run-1-u16.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmsleu-run-1-u16.c	Sun Dec 28 22:32:14 2025
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do run { target { riscv_v } } } */
+ /* { dg-additional-options "-std=c99 --param=gpr2vr-cost=0" } */
+ 
+ #include "vx_binary.h"
+ #include "vx_binary_data.h"
+ 
+ #define T    uint16_t
+ #define NAME leu
+ 
+ DEF_VX_BINARY_CASE_0_WRAP(T, <=, NAME)
+ 
+ #define TEST_DATA                        TEST_BINARY_DATA_WRAP(T, NAME)
+ #define TEST_RUN(T, NAME, out, in, x, n) RUN_VX_BINARY_CASE_0_WRAP(T, NAME, out, in, x, n)
+ 
+ #include "vx_binary_run.h"
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmsleu-run-1-u32.c gcc-16-20251228/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmsleu-run-1-u32.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmsleu-run-1-u32.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmsleu-run-1-u32.c	Sun Dec 28 22:32:14 2025
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do run { target { riscv_v } } } */
+ /* { dg-additional-options "-std=c99 --param=gpr2vr-cost=0" } */
+ 
+ #include "vx_binary.h"
+ #include "vx_binary_data.h"
+ 
+ #define T    uint32_t
+ #define NAME leu
+ 
+ DEF_VX_BINARY_CASE_0_WRAP(T, <=, NAME)
+ 
+ #define TEST_DATA                        TEST_BINARY_DATA_WRAP(T, NAME)
+ #define TEST_RUN(T, NAME, out, in, x, n) RUN_VX_BINARY_CASE_0_WRAP(T, NAME, out, in, x, n)
+ 
+ #include "vx_binary_run.h"
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmsleu-run-1-u64.c gcc-16-20251228/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmsleu-run-1-u64.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmsleu-run-1-u64.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmsleu-run-1-u64.c	Sun Dec 28 22:32:14 2025
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do run { target { riscv_v } } } */
+ /* { dg-additional-options "-std=c99 --param=gpr2vr-cost=0" } */
+ 
+ #include "vx_binary.h"
+ #include "vx_binary_data.h"
+ 
+ #define T    uint64_t
+ #define NAME leu
+ 
+ DEF_VX_BINARY_CASE_0_WRAP(T, <=, NAME)
+ 
+ #define TEST_DATA                        TEST_BINARY_DATA_WRAP(T, NAME)
+ #define TEST_RUN(T, NAME, out, in, x, n) RUN_VX_BINARY_CASE_0_WRAP(T, NAME, out, in, x, n)
+ 
+ #include "vx_binary_run.h"
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmsleu-run-1-u8.c gcc-16-20251228/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmsleu-run-1-u8.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmsleu-run-1-u8.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmsleu-run-1-u8.c	Sun Dec 28 22:32:14 2025
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do run { target { riscv_v } } } */
+ /* { dg-additional-options "-std=c99 --param=gpr2vr-cost=0" } */
+ 
+ #include "vx_binary.h"
+ #include "vx_binary_data.h"
+ 
+ #define T    uint8_t
+ #define NAME leu
+ 
+ DEF_VX_BINARY_CASE_0_WRAP(T, <=, NAME)
+ 
+ #define TEST_DATA                        TEST_BINARY_DATA_WRAP(T, NAME)
+ #define TEST_RUN(T, NAME, out, in, x, n) RUN_VX_BINARY_CASE_0_WRAP(T, NAME, out, in, x, n)
+ 
+ #include "vx_binary_run.h"
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/riscv/rvv/base/spill-1.c gcc-16-20251228/gcc/testsuite/gcc.target/riscv/rvv/base/spill-1.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/riscv/rvv/base/spill-1.c	Sun Dec 21 22:32:12 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/riscv/rvv/base/spill-1.c	Sun Dec 28 22:32:14 2025
***************
*** 7,14 ****
  
  /*
  ** spill_1:
! **  csrr\tt0,vlenb
! **  sub\tsp,sp,t0
  **  ...
  **  csrr\t[a-x0-9]+,vlenb
  **  srli\t[a-x0-9]+,[a-x0-9]+,3
--- 7,14 ----
  
  /*
  ** spill_1:
! **  csrr\t[a-x0-9]+,vlenb
! **  sub\tsp,sp,[a-x0-9]+
  **  ...
  **  csrr\t[a-x0-9]+,vlenb
  **  srli\t[a-x0-9]+,[a-x0-9]+,3
***************
*** 24,31 ****
  **  add\t[a-x0-9]+,[a-x0-9]+,sp
  **  vle8.v\tv[0-9]+,0\([a-x0-9]+\)
  **  vse8.v\tv[0-9]+,0\([a-x0-9]+\)
! **  csrr\tt0,vlenb
! **  add\tsp,sp,t0
  **  ...
  **  jr\tra
  */
--- 24,31 ----
  **  add\t[a-x0-9]+,[a-x0-9]+,sp
  **  vle8.v\tv[0-9]+,0\([a-x0-9]+\)
  **  vse8.v\tv[0-9]+,0\([a-x0-9]+\)
! **  csrr\t[a-x0-9]+,vlenb
! **  add\tsp,sp,[a-x0-9]+
  **  ...
  **  jr\tra
  */
*************** spill_1 (int8_t *in, int8_t *out)
*** 39,46 ****
  
  /*
  ** spill_2:
! **  csrr\tt0,vlenb
! **  sub\tsp,sp,t0
  **  vsetvli\ta5,zero,e8,mf4,ta,ma
  **  vle8.v\tv[0-9]+,0\(a0\)
  **  csrr\t[a-x0-9]+,vlenb
--- 39,46 ----
  
  /*
  ** spill_2:
! **  csrr\t[a-x0-9]+,vlenb
! **  sub\tsp,sp,[a-x0-9]+
  **  vsetvli\ta5,zero,e8,mf4,ta,ma
  **  vle8.v\tv[0-9]+,0\(a0\)
  **  csrr\t[a-x0-9]+,vlenb
*************** spill_1 (int8_t *in, int8_t *out)
*** 57,64 ****
  **  add\t[a-x0-9]+,[a-x0-9]+,sp
  **  vle8.v\tv[0-9]+,0\([a-x0-9]+\)
  **  vse8.v\tv[0-9]+,0\([a-x0-9]+\)
! **  csrr\tt0,vlenb
! **  add\tsp,sp,t0
  **  ...
  **  jr\tra
  */
--- 57,64 ----
  **  add\t[a-x0-9]+,[a-x0-9]+,sp
  **  vle8.v\tv[0-9]+,0\([a-x0-9]+\)
  **  vse8.v\tv[0-9]+,0\([a-x0-9]+\)
! **  csrr\t[a-x0-9]+,vlenb
! **  add\tsp,sp,[a-x0-9]+
  **  ...
  **  jr\tra
  */
*************** spill_2 (int8_t *in, int8_t *out)
*** 72,79 ****
  
  /*
  ** spill_3:
! ** csrr\tt0,vlenb
! ** sub\tsp,sp,t0
  ** vsetvli\ta5,zero,e8,mf2,ta,ma
  ** vle8.v\tv[0-9]+,0\(a0\)
  ** csrr\t[a-x0-9]+,vlenb
--- 72,79 ----
  
  /*
  ** spill_3:
! ** csrr\t[a-x0-9]+,vlenb
! ** sub\tsp,sp,[a-x0-9]+
  ** vsetvli\ta5,zero,e8,mf2,ta,ma
  ** vle8.v\tv[0-9]+,0\(a0\)
  ** csrr\t[a-x0-9]+,vlenb
*************** spill_2 (int8_t *in, int8_t *out)
*** 81,93 ****
  ** add\t[a-x0-9]+,[a-x0-9]+,sp
  ** vse8.v\tv[0-9]+,0\([a-x0-9]+\)
  **  ...
- ** csrr\t[a-x0-9]+,vlenb
  ** srli\t[a-x0-9]+,[a-x0-9]+,1
  ** add\t[a-x0-9]+,[a-x0-9]+,sp
  ** vle8.v\tv[0-9]+,0\([a-x0-9]+\)
  ** vse8.v\tv[0-9]+,0\([a-x0-9]+\)
! ** csrr\tt0,vlenb
! ** add\tsp,sp,t0
  **  ...
  **  jr\tra
  */
--- 81,92 ----
  ** add\t[a-x0-9]+,[a-x0-9]+,sp
  ** vse8.v\tv[0-9]+,0\([a-x0-9]+\)
  **  ...
  ** srli\t[a-x0-9]+,[a-x0-9]+,1
  ** add\t[a-x0-9]+,[a-x0-9]+,sp
  ** vle8.v\tv[0-9]+,0\([a-x0-9]+\)
  ** vse8.v\tv[0-9]+,0\([a-x0-9]+\)
! ** csrr\t[a-x0-9]+,vlenb
! ** add\tsp,sp,[a-x0-9]+
  **  ...
  **  jr\tra
  */
*************** spill_3 (int8_t *in, int8_t *out)
*** 101,108 ****
  
  /*
  ** spill_4:
! **  csrr\tt0,vlenb
! **  sub\tsp,sp,t0
  **  ...
  **  vs1r.v\tv[0-9]+,0\(sp\)
  **  ...
--- 100,107 ----
  
  /*
  ** spill_4:
! **  csrr\t[a-x0-9]+,vlenb
! **  sub\tsp,sp,[a-x0-9]+
  **  ...
  **  vs1r.v\tv[0-9]+,0\(sp\)
  **  ...
*************** spill_4 (int8_t *in, int8_t *out)
*** 124,131 ****
  
  /*
  ** spill_5:
! **  csrr\tt0,vlenb
! **  slli\tt1,t0,1
  **  sub\tsp,sp,t1
  **  ...
  **  vs2r.v\tv[0-9]+,0\(sp\)
--- 123,130 ----
  
  /*
  ** spill_5:
! **  csrr\t[a-x0-9]+,vlenb
! **  slli\tt1,[a-x0-9]+,1
  **  sub\tsp,sp,t1
  **  ...
  **  vs2r.v\tv[0-9]+,0\(sp\)
*************** spill_5 (int8_t *in, int8_t *out)
*** 148,155 ****
  
  /*
  ** spill_6:
! **  csrr\tt0,vlenb
! **  slli\tt1,t0,2
  **  sub\tsp,sp,t1
  **  ...
  **  vs4r.v\tv[0-9]+,0\(sp\)
--- 147,154 ----
  
  /*
  ** spill_6:
! **  csrr\t[a-x0-9]+,vlenb
! **  slli\tt1,[a-x0-9]+,2
  **  sub\tsp,sp,t1
  **  ...
  **  vs4r.v\tv[0-9]+,0\(sp\)
*************** spill_6 (int8_t *in, int8_t *out)
*** 172,179 ****
  
  /*
  ** spill_7:
! **  csrr\tt0,vlenb
! **  slli\tt1,t0,3
  **  sub\tsp,sp,t1
  **  ...
  **  vs8r.v\tv[0-9]+,0\(sp\)
--- 171,178 ----
  
  /*
  ** spill_7:
! **  csrr\t[a-x0-9]+,vlenb
! **  slli\tt1,[a-x0-9]+,3
  **  sub\tsp,sp,t1
  **  ...
  **  vs8r.v\tv[0-9]+,0\(sp\)
*************** spill_7 (int8_t *in, int8_t *out)
*** 196,203 ****
  
  /*
  ** spill_8:
! ** csrr\tt0,vlenb
! ** sub\tsp,sp,t0
  ** vsetvli\ta5,zero,e8,mf8,ta,ma
  ** vle8.v\tv[0-9]+,0\(a0\)
  ** csrr\t[a-x0-9]+,vlenb
--- 195,202 ----
  
  /*
  ** spill_8:
! ** csrr\t[a-x0-9]+,vlenb
! ** sub\tsp,sp,[a-x0-9]+
  ** vsetvli\ta5,zero,e8,mf8,ta,ma
  ** vle8.v\tv[0-9]+,0\(a0\)
  ** csrr\t[a-x0-9]+,vlenb
*************** spill_7 (int8_t *in, int8_t *out)
*** 214,221 ****
  **  add\t[a-x0-9]+,[a-x0-9]+,sp
  **  vle8.v\tv[0-9]+,0\([a-x0-9]+\)
  **  vse8.v\tv[0-9]+,0\([a-x0-9]+\)
! **  csrr\tt0,vlenb
! **  add\tsp,sp,t0
  **  ...
  **  jr\tra
  */
--- 213,220 ----
  **  add\t[a-x0-9]+,[a-x0-9]+,sp
  **  vle8.v\tv[0-9]+,0\([a-x0-9]+\)
  **  vse8.v\tv[0-9]+,0\([a-x0-9]+\)
! **  csrr\t[a-x0-9]+,vlenb
! **  add\tsp,sp,[a-x0-9]+
  **  ...
  **  jr\tra
  */
*************** spill_8 (uint8_t *in, uint8_t *out)
*** 229,236 ****
  
  /*
  ** spill_9:
! **  csrr\tt0,vlenb
! **  sub\tsp,sp,t0
  **  vsetvli\ta5,zero,e8,mf4,ta,ma
  **  vle8.v\tv[0-9]+,0\(a0\)
  **  csrr\t[a-x0-9]+,vlenb
--- 228,235 ----
  
  /*
  ** spill_9:
! **  csrr\t[a-x0-9]+,vlenb
! **  sub\tsp,sp,[a-x0-9]+
  **  vsetvli\ta5,zero,e8,mf4,ta,ma
  **  vle8.v\tv[0-9]+,0\(a0\)
  **  csrr\t[a-x0-9]+,vlenb
*************** spill_8 (uint8_t *in, uint8_t *out)
*** 247,254 ****
  **  add\t[a-x0-9]+,[a-x0-9]+,sp
  **  vle8.v\tv[0-9]+,0\([a-x0-9]+\)
  **  vse8.v\tv[0-9]+,0\([a-x0-9]+\)
! **  csrr\tt0,vlenb
! **  add\tsp,sp,t0
  **  ...
  **  jr\tra
  */
--- 246,253 ----
  **  add\t[a-x0-9]+,[a-x0-9]+,sp
  **  vle8.v\tv[0-9]+,0\([a-x0-9]+\)
  **  vse8.v\tv[0-9]+,0\([a-x0-9]+\)
! **  csrr\t[a-x0-9]+,vlenb
! **  add\tsp,sp,[a-x0-9]+
  **  ...
  **  jr\tra
  */
*************** spill_9 (uint8_t *in, uint8_t *out)
*** 262,269 ****
  
  /*
  ** spill_10:
! ** csrr\tt0,vlenb
! ** sub\tsp,sp,t0
  ** vsetvli\ta5,zero,e8,mf2,ta,ma
  ** vle8.v\tv[0-9]+,0\(a0\)
  ** csrr\t[a-x0-9]+,vlenb
--- 261,268 ----
  
  /*
  ** spill_10:
! ** csrr\t[a-x0-9]+,vlenb
! ** sub\tsp,sp,[a-x0-9]+
  ** vsetvli\ta5,zero,e8,mf2,ta,ma
  ** vle8.v\tv[0-9]+,0\(a0\)
  ** csrr\t[a-x0-9]+,vlenb
*************** spill_9 (uint8_t *in, uint8_t *out)
*** 271,283 ****
  ** add\t[a-x0-9]+,[a-x0-9]+,sp
  ** vse8.v\tv[0-9]+,0\([a-x0-9]+\)
  **  ...
- **  csrr\t[a-x0-9]+,vlenb
  **  srli\t[a-x0-9]+,[a-x0-9]+,1
  **  add\t[a-x0-9]+,[a-x0-9]+,sp
  **  vle8.v\tv[0-9]+,0\([a-x0-9]+\)
  **  vse8.v\tv[0-9]+,0\([a-x0-9]+\)
! **  csrr\tt0,vlenb
! **  add\tsp,sp,t0
  **  ...
  **  jr\tra
  */
--- 270,281 ----
  ** add\t[a-x0-9]+,[a-x0-9]+,sp
  ** vse8.v\tv[0-9]+,0\([a-x0-9]+\)
  **  ...
  **  srli\t[a-x0-9]+,[a-x0-9]+,1
  **  add\t[a-x0-9]+,[a-x0-9]+,sp
  **  vle8.v\tv[0-9]+,0\([a-x0-9]+\)
  **  vse8.v\tv[0-9]+,0\([a-x0-9]+\)
! **  csrr\t[a-x0-9]+,vlenb
! **  add\tsp,sp,[a-x0-9]+
  **  ...
  **  jr\tra
  */
*************** spill_10 (uint8_t *in, uint8_t *out)
*** 291,298 ****
  
  /*
  ** spill_11:
! **  csrr\tt0,vlenb
! **  sub\tsp,sp,t0
  **  ...
  **  vs1r.v\tv[0-9]+,0\(sp\)
  **  ...
--- 289,296 ----
  
  /*
  ** spill_11:
! **  csrr\t[a-x0-9]+,vlenb
! **  sub\tsp,sp,[a-x0-9]+
  **  ...
  **  vs1r.v\tv[0-9]+,0\(sp\)
  **  ...
*************** spill_11 (uint8_t *in, uint8_t *out)
*** 314,321 ****
  
  /*
  ** spill_12:
! **  csrr\tt0,vlenb
! **  slli\tt1,t0,1
  **  sub\tsp,sp,t1
  **  ...
  **  vs2r.v\tv[0-9]+,0\(sp\)
--- 312,319 ----
  
  /*
  ** spill_12:
! **  csrr\t[a-x0-9]+,vlenb
! **  slli\tt1,[a-x0-9]+,1
  **  sub\tsp,sp,t1
  **  ...
  **  vs2r.v\tv[0-9]+,0\(sp\)
*************** spill_12 (uint8_t *in, uint8_t *out)
*** 338,345 ****
  
  /*
  ** spill_13:
! **  csrr\tt0,vlenb
! **  slli\tt1,t0,2
  **  sub\tsp,sp,t1
  **  ...
  **  vs4r.v\tv[0-9]+,0\(sp\)
--- 336,343 ----
  
  /*
  ** spill_13:
! **  csrr\t[a-x0-9]+,vlenb
! **  slli\tt1,[a-x0-9]+,2
  **  sub\tsp,sp,t1
  **  ...
  **  vs4r.v\tv[0-9]+,0\(sp\)
*************** spill_13 (uint8_t *in, uint8_t *out)
*** 362,369 ****
  
  /*
  ** spill_14:
! **  csrr\tt0,vlenb
! **  slli\tt1,t0,3
  **  sub\tsp,sp,t1
  **  ...
  **  vs8r.v\tv[0-9]+,0\(sp\)
--- 360,367 ----
  
  /*
  ** spill_14:
! **  csrr\t[a-x0-9]+,vlenb
! **  slli\tt1,[a-x0-9]+,3
  **  sub\tsp,sp,t1
  **  ...
  **  vs8r.v\tv[0-9]+,0\(sp\)
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/riscv/rvv/base/spill-2.c gcc-16-20251228/gcc/testsuite/gcc.target/riscv/rvv/base/spill-2.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/riscv/rvv/base/spill-2.c	Sun Dec 21 22:32:12 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/riscv/rvv/base/spill-2.c	Sun Dec 28 22:32:14 2025
***************
*** 7,14 ****
  
  /*
  ** spill_2:
! **  csrr\tt0,vlenb
! **  sub\tsp,sp,t0
  **  vsetvli\ta5,zero,e16,mf4,ta,ma
  **  vle16.v\tv[0-9]+,0\(a0\)
  **  csrr\t[a-x0-9]+,vlenb
--- 7,14 ----
  
  /*
  ** spill_2:
! **  csrr\t[a-x0-9]+,vlenb
! **  sub\tsp,sp,[a-x0-9]+
  **  vsetvli\ta5,zero,e16,mf4,ta,ma
  **  vle16.v\tv[0-9]+,0\(a0\)
  **  csrr\t[a-x0-9]+,vlenb
***************
*** 25,32 ****
  **  add\t[a-x0-9]+,[a-x0-9]+,sp
  **  vle16.v\tv[0-9]+,0\([a-x0-9]+\)
  **  vse16.v\tv[0-9]+,0\([a-x0-9]+\)
! **  csrr\tt0,vlenb
! **  add\tsp,sp,t0
  **  ...
  **  jr\tra
  */
--- 25,32 ----
  **  add\t[a-x0-9]+,[a-x0-9]+,sp
  **  vle16.v\tv[0-9]+,0\([a-x0-9]+\)
  **  vse16.v\tv[0-9]+,0\([a-x0-9]+\)
! **  csrr\t[a-x0-9]+,vlenb
! **  add\tsp,sp,[a-x0-9]+
  **  ...
  **  jr\tra
  */
*************** spill_2 (int16_t *in, int16_t *out)
*** 40,47 ****
  
  /*
  ** spill_3:
! **  csrr\tt0,vlenb
! **  sub\tsp,sp,t0
  **  vsetvli\ta5,zero,e16,mf2,ta,ma
  **  vle16.v\tv[0-9]+,0\(a0\)
  **  csrr\t[a-x0-9]+,vlenb
--- 40,47 ----
  
  /*
  ** spill_3:
! **  csrr\t[a-x0-9]+,vlenb
! **  sub\tsp,sp,[a-x0-9]+
  **  vsetvli\ta5,zero,e16,mf2,ta,ma
  **  vle16.v\tv[0-9]+,0\(a0\)
  **  csrr\t[a-x0-9]+,vlenb
*************** spill_2 (int16_t *in, int16_t *out)
*** 49,61 ****
  **  add\t[a-x0-9]+,[a-x0-9]+,sp
  **  vse16.v\tv[0-9]+,0\([a-x0-9]+\)
  **  ...
- **  csrr\t[a-x0-9]+,vlenb
  **  srli\t[a-x0-9]+,[a-x0-9]+,1
  **  add\t[a-x0-9]+,[a-x0-9]+,sp
  **  vle16.v\tv[0-9]+,0\([a-x0-9]+\)
  **  vse16.v\tv[0-9]+,0\([a-x0-9]+\)
! **  csrr\tt0,vlenb
! **  add\tsp,sp,t0
  **  ...
  **  jr\tra
  */
--- 49,60 ----
  **  add\t[a-x0-9]+,[a-x0-9]+,sp
  **  vse16.v\tv[0-9]+,0\([a-x0-9]+\)
  **  ...
  **  srli\t[a-x0-9]+,[a-x0-9]+,1
  **  add\t[a-x0-9]+,[a-x0-9]+,sp
  **  vle16.v\tv[0-9]+,0\([a-x0-9]+\)
  **  vse16.v\tv[0-9]+,0\([a-x0-9]+\)
! **  csrr\t[a-x0-9]+,vlenb
! **  add\tsp,sp,[a-x0-9]+
  **  ...
  **  jr\tra
  */
*************** spill_3 (int16_t *in, int16_t *out)
*** 69,76 ****
  
  /*
  ** spill_4:
! **  csrr\tt0,vlenb
! **  sub\tsp,sp,t0
  **  ...
  **  vs1r.v\tv[0-9]+,0\(sp\)
  **  ...
--- 68,75 ----
  
  /*
  ** spill_4:
! **  csrr\t[a-x0-9]+,vlenb
! **  sub\tsp,sp,[a-x0-9]+
  **  ...
  **  vs1r.v\tv[0-9]+,0\(sp\)
  **  ...
*************** spill_4 (int16_t *in, int16_t *out)
*** 92,99 ****
  
  /*
  ** spill_5:
! **  csrr\tt0,vlenb
! **  slli\tt1,t0,1
  **  sub\tsp,sp,t1
  **  ...
  **  vs2r.v\tv[0-9]+,0\(sp\)
--- 91,98 ----
  
  /*
  ** spill_5:
! **  csrr\t[a-x0-9]+,vlenb
! **  slli\tt1,[a-x0-9]+,1
  **  sub\tsp,sp,t1
  **  ...
  **  vs2r.v\tv[0-9]+,0\(sp\)
*************** spill_5 (int16_t *in, int16_t *out)
*** 116,123 ****
  
  /*
  ** spill_6:
! **  csrr\tt0,vlenb
! **  slli\tt1,t0,2
  **  sub\tsp,sp,t1
  **  ...
  **  vs4r.v\tv[0-9]+,0\(sp\)
--- 115,122 ----
  
  /*
  ** spill_6:
! **  csrr\t[a-x0-9]+,vlenb
! **  slli\tt1,[a-x0-9]+,2
  **  sub\tsp,sp,t1
  **  ...
  **  vs4r.v\tv[0-9]+,0\(sp\)
*************** spill_6 (int16_t *in, int16_t *out)
*** 140,147 ****
  
  /*
  ** spill_7:
! **  csrr\tt0,vlenb
! **  slli\tt1,t0,3
  **  sub\tsp,sp,t1
  **  ...
  **  vs8r.v\tv[0-9]+,0\(sp\)
--- 139,146 ----
  
  /*
  ** spill_7:
! **  csrr\t[a-x0-9]+,vlenb
! **  slli\tt1,[a-x0-9]+,3
  **  sub\tsp,sp,t1
  **  ...
  **  vs8r.v\tv[0-9]+,0\(sp\)
*************** spill_7 (int16_t *in, int16_t *out)
*** 164,171 ****
  
  /*
  ** spill_9:
! **  csrr\tt0,vlenb
! **  sub\tsp,sp,t0
  **  vsetvli\ta5,zero,e16,mf4,ta,ma
  **  vle16.v\tv[0-9]+,0\(a0\)
  **  csrr\t[a-x0-9]+,vlenb
--- 163,170 ----
  
  /*
  ** spill_9:
! **  csrr\t[a-x0-9]+,vlenb
! **  sub\tsp,sp,[a-x0-9]+
  **  vsetvli\ta5,zero,e16,mf4,ta,ma
  **  vle16.v\tv[0-9]+,0\(a0\)
  **  csrr\t[a-x0-9]+,vlenb
*************** spill_7 (int16_t *in, int16_t *out)
*** 182,189 ****
  **  add\t[a-x0-9]+,[a-x0-9]+,sp
  **  vle16.v\tv[0-9]+,0\([a-x0-9]+\)
  **  vse16.v\tv[0-9]+,0\([a-x0-9]+\)
! **  csrr\tt0,vlenb
! **  add\tsp,sp,t0
  **  ...
  **  jr\tra
  */
--- 181,188 ----
  **  add\t[a-x0-9]+,[a-x0-9]+,sp
  **  vle16.v\tv[0-9]+,0\([a-x0-9]+\)
  **  vse16.v\tv[0-9]+,0\([a-x0-9]+\)
! **  csrr\t[a-x0-9]+,vlenb
! **  add\tsp,sp,[a-x0-9]+
  **  ...
  **  jr\tra
  */
*************** spill_9 (uint16_t *in, uint16_t *out)
*** 197,204 ****
  
  /*
  ** spill_10:
! **  csrr\tt0,vlenb
! **  sub\tsp,sp,t0
  **  vsetvli\ta5,zero,e16,mf2,ta,ma
  **  vle16.v\tv[0-9]+,0\(a0\)
  **  csrr\t[a-x0-9]+,vlenb
--- 196,203 ----
  
  /*
  ** spill_10:
! **  csrr\t[a-x0-9]+,vlenb
! **  sub\tsp,sp,[a-x0-9]+
  **  vsetvli\ta5,zero,e16,mf2,ta,ma
  **  vle16.v\tv[0-9]+,0\(a0\)
  **  csrr\t[a-x0-9]+,vlenb
*************** spill_9 (uint16_t *in, uint16_t *out)
*** 206,218 ****
  **  add\t[a-x0-9]+,[a-x0-9]+,sp
  **  vse16.v\tv[0-9]+,0\([a-x0-9]+\)
  **  ...
- **  csrr\t[a-x0-9]+,vlenb
  **  srli\t[a-x0-9]+,[a-x0-9]+,1
  **  add\t[a-x0-9]+,[a-x0-9]+,sp
  **  vle16.v\tv[0-9]+,0\([a-x0-9]+\)
  **  vse16.v\tv[0-9]+,0\([a-x0-9]+\)
! **  csrr\tt0,vlenb
! **  add\tsp,sp,t0
  **  ...
  **  jr\tra
  */
--- 205,216 ----
  **  add\t[a-x0-9]+,[a-x0-9]+,sp
  **  vse16.v\tv[0-9]+,0\([a-x0-9]+\)
  **  ...
  **  srli\t[a-x0-9]+,[a-x0-9]+,1
  **  add\t[a-x0-9]+,[a-x0-9]+,sp
  **  vle16.v\tv[0-9]+,0\([a-x0-9]+\)
  **  vse16.v\tv[0-9]+,0\([a-x0-9]+\)
! **  csrr\t[a-x0-9]+,vlenb
! **  add\tsp,sp,[a-x0-9]+
  **  ...
  **  jr\tra
  */
*************** spill_10 (uint16_t *in, uint16_t *out)
*** 226,233 ****
  
  /*
  ** spill_11:
! **  csrr\tt0,vlenb
! **  sub\tsp,sp,t0
  **  ...
  **  vs1r.v\tv[0-9]+,0\(sp\)
  **  ...
--- 224,231 ----
  
  /*
  ** spill_11:
! **  csrr\t[a-x0-9]+,vlenb
! **  sub\tsp,sp,[a-x0-9]+
  **  ...
  **  vs1r.v\tv[0-9]+,0\(sp\)
  **  ...
*************** spill_11 (uint16_t *in, uint16_t *out)
*** 249,256 ****
  
  /*
  ** spill_12:
! **  csrr\tt0,vlenb
! **  slli\tt1,t0,1
  **  sub\tsp,sp,t1
  **  ...
  **  vs2r.v\tv[0-9]+,0\(sp\)
--- 247,254 ----
  
  /*
  ** spill_12:
! **  csrr\t[a-x0-9]+,vlenb
! **  slli\tt1,[a-x0-9]+,1
  **  sub\tsp,sp,t1
  **  ...
  **  vs2r.v\tv[0-9]+,0\(sp\)
*************** spill_12 (uint16_t *in, uint16_t *out)
*** 273,280 ****
  
  /*
  ** spill_13:
! **  csrr\tt0,vlenb
! **  slli\tt1,t0,2
  **  sub\tsp,sp,t1
  **  ...
  **  vs4r.v\tv[0-9]+,0\(sp\)
--- 271,278 ----
  
  /*
  ** spill_13:
! **  csrr\t[a-x0-9]+,vlenb
! **  slli\tt1,[a-x0-9]+,2
  **  sub\tsp,sp,t1
  **  ...
  **  vs4r.v\tv[0-9]+,0\(sp\)
*************** spill_13 (uint16_t *in, uint16_t *out)
*** 297,304 ****
  
  /*
  ** spill_14:
! **  csrr\tt0,vlenb
! **  slli\tt1,t0,3
  **  sub\tsp,sp,t1
  **  ...
  **  vs8r.v\tv[0-9]+,0\(sp\)
--- 295,302 ----
  
  /*
  ** spill_14:
! **  csrr\t[a-x0-9]+,vlenb
! **  slli\tt1,[a-x0-9]+,3
  **  sub\tsp,sp,t1
  **  ...
  **  vs8r.v\tv[0-9]+,0\(sp\)
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/riscv/rvv/base/spill-3.c gcc-16-20251228/gcc/testsuite/gcc.target/riscv/rvv/base/spill-3.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/riscv/rvv/base/spill-3.c	Sun Dec 21 22:32:12 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/riscv/rvv/base/spill-3.c	Sun Dec 28 22:32:14 2025
***************
*** 7,14 ****
  
  /*
  ** spill_3:
! **  csrr\tt0,vlenb
! **  sub\tsp,sp,t0
  **  vsetvli\ta5,zero,e32,mf2,ta,ma
  **  vle32.v\tv[0-9]+,0\(a0\)
  **  csrr\t[a-x0-9]+,vlenb
--- 7,14 ----
  
  /*
  ** spill_3:
! **  csrr\t[a-x0-9]+,vlenb
! **  sub\tsp,sp,[a-x0-9]+
  **  vsetvli\ta5,zero,e32,mf2,ta,ma
  **  vle32.v\tv[0-9]+,0\(a0\)
  **  csrr\t[a-x0-9]+,vlenb
***************
*** 16,28 ****
  **  add\t[a-x0-9]+,[a-x0-9]+,sp
  **  vse32.v\tv[0-9]+,0\([a-x0-9]+\)
  **  ...
- **  csrr\t[a-x0-9]+,vlenb
  **  srli\t[a-x0-9]+,[a-x0-9]+,1
  **  add\t[a-x0-9]+,[a-x0-9]+,sp
  **  vle32.v\tv[0-9]+,0\([a-x0-9]+\)
  **  vse32.v\tv[0-9]+,0\([a-x0-9]+\)
! **  csrr\tt0,vlenb
! **  add\tsp,sp,t0
  **  ...
  **  jr\tra
  */
--- 16,27 ----
  **  add\t[a-x0-9]+,[a-x0-9]+,sp
  **  vse32.v\tv[0-9]+,0\([a-x0-9]+\)
  **  ...
  **  srli\t[a-x0-9]+,[a-x0-9]+,1
  **  add\t[a-x0-9]+,[a-x0-9]+,sp
  **  vle32.v\tv[0-9]+,0\([a-x0-9]+\)
  **  vse32.v\tv[0-9]+,0\([a-x0-9]+\)
! **  csrr\t[a-x0-9]+,vlenb
! **  add\tsp,sp,[a-x0-9]+
  **  ...
  **  jr\tra
  */
*************** spill_3 (int32_t *in, int32_t *out)
*** 36,43 ****
  
  /*
  ** spill_4:
! **  csrr\tt0,vlenb
! **  sub\tsp,sp,t0
  **  ...
  **  vs1r.v\tv[0-9]+,0\(sp\)
  **  ...
--- 35,42 ----
  
  /*
  ** spill_4:
! **  csrr\t[a-x0-9]+,vlenb
! **  sub\tsp,sp,[a-x0-9]+
  **  ...
  **  vs1r.v\tv[0-9]+,0\(sp\)
  **  ...
*************** spill_4 (int32_t *in, int32_t *out)
*** 59,66 ****
  
  /*
  ** spill_5:
! **  csrr\tt0,vlenb
! **  slli\tt1,t0,1
  **  sub\tsp,sp,t1
  **  ...
  **  vs2r.v\tv[0-9]+,0\(sp\)
--- 58,65 ----
  
  /*
  ** spill_5:
! **  csrr\t[a-x0-9]+,vlenb
! **  slli\tt1,[a-x0-9]+,1
  **  sub\tsp,sp,t1
  **  ...
  **  vs2r.v\tv[0-9]+,0\(sp\)
*************** spill_5 (int32_t *in, int32_t *out)
*** 83,90 ****
  
  /*
  ** spill_6:
! **  csrr\tt0,vlenb
! **  slli\tt1,t0,2
  **  sub\tsp,sp,t1
  **  ...
  **  vs4r.v\tv[0-9]+,0\(sp\)
--- 82,89 ----
  
  /*
  ** spill_6:
! **  csrr\t[a-x0-9]+,vlenb
! **  slli\tt1,[a-x0-9]+,2
  **  sub\tsp,sp,t1
  **  ...
  **  vs4r.v\tv[0-9]+,0\(sp\)
*************** spill_6 (int32_t *in, int32_t *out)
*** 107,114 ****
  
  /*
  ** spill_7:
! **  csrr\tt0,vlenb
! **  slli\tt1,t0,3
  **  sub\tsp,sp,t1
  **  ...
  **  vs8r.v\tv[0-9]+,0\(sp\)
--- 106,113 ----
  
  /*
  ** spill_7:
! **  csrr\t[a-x0-9]+,vlenb
! **  slli\tt1,[a-x0-9]+,3
  **  sub\tsp,sp,t1
  **  ...
  **  vs8r.v\tv[0-9]+,0\(sp\)
*************** spill_7 (int32_t *in, int32_t *out)
*** 131,138 ****
  
  /*
  ** spill_10:
! **  csrr\tt0,vlenb
! **  sub\tsp,sp,t0
  **  vsetvli\ta5,zero,e32,mf2,ta,ma
  **  vle32.v\tv[0-9]+,0\(a0\)
  **  csrr\t[a-x0-9]+,vlenb
--- 130,137 ----
  
  /*
  ** spill_10:
! **  csrr\t[a-x0-9]+,vlenb
! **  sub\tsp,sp,[a-x0-9]+
  **  vsetvli\ta5,zero,e32,mf2,ta,ma
  **  vle32.v\tv[0-9]+,0\(a0\)
  **  csrr\t[a-x0-9]+,vlenb
*************** spill_7 (int32_t *in, int32_t *out)
*** 140,152 ****
  **  add\t[a-x0-9]+,[a-x0-9]+,sp
  **  vse32.v\tv[0-9]+,0\([a-x0-9]+\)
  **  ...
- **  csrr\t[a-x0-9]+,vlenb
  **  srli\t[a-x0-9]+,[a-x0-9]+,1
  **  add\t[a-x0-9]+,[a-x0-9]+,sp
  **  vle32.v\tv[0-9]+,0\([a-x0-9]+\)
  **  vse32.v\tv[0-9]+,0\([a-x0-9]+\)
! **  csrr\tt0,vlenb
! **  add\tsp,sp,t0
  **  ...
  **  jr\tra
  */
--- 139,150 ----
  **  add\t[a-x0-9]+,[a-x0-9]+,sp
  **  vse32.v\tv[0-9]+,0\([a-x0-9]+\)
  **  ...
  **  srli\t[a-x0-9]+,[a-x0-9]+,1
  **  add\t[a-x0-9]+,[a-x0-9]+,sp
  **  vle32.v\tv[0-9]+,0\([a-x0-9]+\)
  **  vse32.v\tv[0-9]+,0\([a-x0-9]+\)
! **  csrr\t[a-x0-9]+,vlenb
! **  add\tsp,sp,[a-x0-9]+
  **  ...
  **  jr\tra
  */
*************** spill_10 (uint32_t *in, uint32_t *out)
*** 160,167 ****
  
  /*
  ** spill_11:
! **  csrr\tt0,vlenb
! **  sub\tsp,sp,t0
  **  ...
  **  vs1r.v\tv[0-9]+,0\(sp\)
  **  ...
--- 158,165 ----
  
  /*
  ** spill_11:
! **  csrr\t[a-x0-9]+,vlenb
! **  sub\tsp,sp,[a-x0-9]+
  **  ...
  **  vs1r.v\tv[0-9]+,0\(sp\)
  **  ...
*************** spill_11 (uint32_t *in, uint32_t *out)
*** 183,190 ****
  
  /*
  ** spill_12:
! **  csrr\tt0,vlenb
! **  slli\tt1,t0,1
  **  sub\tsp,sp,t1
  **  ...
  **  vs2r.v\tv[0-9]+,0\(sp\)
--- 181,188 ----
  
  /*
  ** spill_12:
! **  csrr\t[a-x0-9]+,vlenb
! **  slli\tt1,[a-x0-9]+,1
  **  sub\tsp,sp,t1
  **  ...
  **  vs2r.v\tv[0-9]+,0\(sp\)
*************** spill_12 (uint32_t *in, uint32_t *out)
*** 207,214 ****
  
  /*
  ** spill_13:
! **  csrr\tt0,vlenb
! **  slli\tt1,t0,2
  **  sub\tsp,sp,t1
  **  ...
  **  vs4r.v\tv[0-9]+,0\(sp\)
--- 205,212 ----
  
  /*
  ** spill_13:
! **  csrr\t[a-x0-9]+,vlenb
! **  slli\tt1,[a-x0-9]+,2
  **  sub\tsp,sp,t1
  **  ...
  **  vs4r.v\tv[0-9]+,0\(sp\)
*************** spill_13 (uint32_t *in, uint32_t *out)
*** 231,238 ****
  
  /*
  ** spill_14:
! **  csrr\tt0,vlenb
! **  slli\tt1,t0,3
  **  sub\tsp,sp,t1
  **  ...
  **  vs8r.v\tv[0-9]+,0\(sp\)
--- 229,236 ----
  
  /*
  ** spill_14:
! **  csrr\t[a-x0-9]+,vlenb
! **  slli\tt1,[a-x0-9]+,3
  **  sub\tsp,sp,t1
  **  ...
  **  vs8r.v\tv[0-9]+,0\(sp\)
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/riscv/rvv/base/spill-4.c gcc-16-20251228/gcc/testsuite/gcc.target/riscv/rvv/base/spill-4.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/riscv/rvv/base/spill-4.c	Sun Dec 21 22:32:12 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/riscv/rvv/base/spill-4.c	Sun Dec 28 22:32:14 2025
***************
*** 7,14 ****
  
  /*
  ** spill_4:
! **  csrr\tt0,vlenb
! **  sub\tsp,sp,t0
  **  ...
  **  vs1r.v\tv[0-9]+,0\(sp\)
  **  ...
--- 7,14 ----
  
  /*
  ** spill_4:
! **  csrr\t[a-x0-9]+,vlenb
! **  sub\tsp,sp,[a-x0-9]+
  **  ...
  **  vs1r.v\tv[0-9]+,0\(sp\)
  **  ...
*************** spill_4 (int64_t *in, int64_t *out)
*** 30,37 ****
  
  /*
  ** spill_5:
! **  csrr\tt0,vlenb
! **  slli\tt1,t0,1
  **  sub\tsp,sp,t1
  **  ...
  **  vs2r.v\tv[0-9]+,0\(sp\)
--- 30,37 ----
  
  /*
  ** spill_5:
! **  csrr\t[a-x0-9]+,vlenb
! **  slli\tt1,[a-x0-9]+,1
  **  sub\tsp,sp,t1
  **  ...
  **  vs2r.v\tv[0-9]+,0\(sp\)
*************** spill_5 (int64_t *in, int64_t *out)
*** 54,61 ****
  
  /*
  ** spill_6:
! **  csrr\tt0,vlenb
! **  slli\tt1,t0,2
  **  sub\tsp,sp,t1
  **  ...
  **  vs4r.v\tv[0-9]+,0\(sp\)
--- 54,61 ----
  
  /*
  ** spill_6:
! **  csrr\t[a-x0-9]+,vlenb
! **  slli\tt1,[a-x0-9]+,2
  **  sub\tsp,sp,t1
  **  ...
  **  vs4r.v\tv[0-9]+,0\(sp\)
*************** spill_6 (int64_t *in, int64_t *out)
*** 78,85 ****
  
  /*
  ** spill_7:
! **  csrr\tt0,vlenb
! **  slli\tt1,t0,3
  **  sub\tsp,sp,t1
  **  ...
  **  vs8r.v\tv[0-9]+,0\(sp\)
--- 78,85 ----
  
  /*
  ** spill_7:
! **  csrr\t[a-x0-9]+,vlenb
! **  slli\tt1,[a-x0-9]+,3
  **  sub\tsp,sp,t1
  **  ...
  **  vs8r.v\tv[0-9]+,0\(sp\)
*************** spill_7 (int64_t *in, int64_t *out)
*** 102,109 ****
  
  /*
  ** spill_11:
! **  csrr\tt0,vlenb
! **  sub\tsp,sp,t0
  **  ...
  **  vs1r.v\tv[0-9]+,0\(sp\)
  **  ...
--- 102,109 ----
  
  /*
  ** spill_11:
! **  csrr\t[a-x0-9]+,vlenb
! **  sub\tsp,sp,[a-x0-9]+
  **  ...
  **  vs1r.v\tv[0-9]+,0\(sp\)
  **  ...
*************** spill_11 (uint64_t *in, uint64_t *out)
*** 125,132 ****
  
  /*
  ** spill_12:
! **  csrr\tt0,vlenb
! **  slli\tt1,t0,1
  **  sub\tsp,sp,t1
  **  ...
  **  vs2r.v\tv[0-9]+,0\(sp\)
--- 125,132 ----
  
  /*
  ** spill_12:
! **  csrr\t[a-x0-9]+,vlenb
! **  slli\tt1,[a-x0-9]+,1
  **  sub\tsp,sp,t1
  **  ...
  **  vs2r.v\tv[0-9]+,0\(sp\)
*************** spill_12 (uint64_t *in, uint64_t *out)
*** 149,156 ****
  
  /*
  ** spill_13:
! **  csrr\tt0,vlenb
! **  slli\tt1,t0,2
  **  sub\tsp,sp,t1
  **  ...
  **  vs4r.v\tv[0-9]+,0\(sp\)
--- 149,156 ----
  
  /*
  ** spill_13:
! **  csrr\t[a-x0-9]+,vlenb
! **  slli\tt1,[a-x0-9]+,2
  **  sub\tsp,sp,t1
  **  ...
  **  vs4r.v\tv[0-9]+,0\(sp\)
*************** spill_13 (uint64_t *in, uint64_t *out)
*** 173,180 ****
  
  /*
  ** spill_14:
! **  csrr\tt0,vlenb
! **  slli\tt1,t0,3
  **  sub\tsp,sp,t1
  **  ...
  **  vs8r.v\tv[0-9]+,0\(sp\)
--- 173,180 ----
  
  /*
  ** spill_14:
! **  csrr\t[a-x0-9]+,vlenb
! **  slli\tt1,[a-x0-9]+,3
  **  sub\tsp,sp,t1
  **  ...
  **  vs8r.v\tv[0-9]+,0\(sp\)
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/riscv/rvv/base/spill-5.c gcc-16-20251228/gcc/testsuite/gcc.target/riscv/rvv/base/spill-5.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/riscv/rvv/base/spill-5.c	Sun Dec 21 22:32:12 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/riscv/rvv/base/spill-5.c	Sun Dec 28 22:32:14 2025
***************
*** 7,14 ****
  
  /*
  ** spill_3:
! **  csrr\tt0,vlenb
! **  sub\tsp,sp,t0
  **  vsetvli\ta5,zero,e32,mf2,ta,ma
  **  vle32.v\tv[0-9]+,0\(a0\)
  **  csrr\t[a-x0-9]+,vlenb
--- 7,14 ----
  
  /*
  ** spill_3:
! **  csrr\t[a-x0-9]+,vlenb
! **  sub\tsp,sp,[a-x0-9]+
  **  vsetvli\ta5,zero,e32,mf2,ta,ma
  **  vle32.v\tv[0-9]+,0\(a0\)
  **  csrr\t[a-x0-9]+,vlenb
***************
*** 16,28 ****
  **  add\t[a-x0-9]+,[a-x0-9]+,sp
  **  vse32.v\tv[0-9]+,0\([a-x0-9]+\)
  **  ...
- **  csrr\t[a-x0-9]+,vlenb
  **  srli\t[a-x0-9]+,[a-x0-9]+,1
  **  add\t[a-x0-9]+,[a-x0-9]+,sp
  **  vle32.v\tv[0-9]+,0\([a-x0-9]+\)
  **  vse32.v\tv[0-9]+,0\([a-x0-9]+\)
! **  csrr\tt0,vlenb
! **  add\tsp,sp,t0
  **  ...
  **  jr\tra
  */
--- 16,27 ----
  **  add\t[a-x0-9]+,[a-x0-9]+,sp
  **  vse32.v\tv[0-9]+,0\([a-x0-9]+\)
  **  ...
  **  srli\t[a-x0-9]+,[a-x0-9]+,1
  **  add\t[a-x0-9]+,[a-x0-9]+,sp
  **  vle32.v\tv[0-9]+,0\([a-x0-9]+\)
  **  vse32.v\tv[0-9]+,0\([a-x0-9]+\)
! **  csrr\t[a-x0-9]+,vlenb
! **  add\tsp,sp,[a-x0-9]+
  **  ...
  **  jr\tra
  */
*************** spill_3 (float *in, float *out)
*** 36,43 ****
  
  /*
  ** spill_4:
! **  csrr\tt0,vlenb
! **  sub\tsp,sp,t0
  **  ...
  **  vs1r.v\tv[0-9]+,0\(sp\)
  **  ...
--- 35,42 ----
  
  /*
  ** spill_4:
! **  csrr\t[a-x0-9]+,vlenb
! **  sub\tsp,sp,[a-x0-9]+
  **  ...
  **  vs1r.v\tv[0-9]+,0\(sp\)
  **  ...
*************** spill_4 (float *in, float *out)
*** 59,66 ****
  
  /*
  ** spill_5:
! **  csrr\tt0,vlenb
! **  slli\tt1,t0,1
  **  sub\tsp,sp,t1
  **  ...
  **  vs2r.v\tv[0-9]+,0\(sp\)
--- 58,65 ----
  
  /*
  ** spill_5:
! **  csrr\t[a-x0-9]+,vlenb
! **  slli\tt1,[a-x0-9]+,1
  **  sub\tsp,sp,t1
  **  ...
  **  vs2r.v\tv[0-9]+,0\(sp\)
*************** spill_5 (float *in, float *out)
*** 83,90 ****
  
  /*
  ** spill_6:
! **  csrr\tt0,vlenb
! **  slli\tt1,t0,2
  **  sub\tsp,sp,t1
  **  ...
  **  vs4r.v\tv[0-9]+,0\(sp\)
--- 82,89 ----
  
  /*
  ** spill_6:
! **  csrr\t[a-x0-9]+,vlenb
! **  slli\tt1,[a-x0-9]+,2
  **  sub\tsp,sp,t1
  **  ...
  **  vs4r.v\tv[0-9]+,0\(sp\)
*************** spill_6 (float *in, float *out)
*** 107,114 ****
  
  /*
  ** spill_7:
! **  csrr\tt0,vlenb
! **  slli\tt1,t0,3
  **  sub\tsp,sp,t1
  **  ...
  **  vs8r.v\tv[0-9]+,0\(sp\)
--- 106,113 ----
  
  /*
  ** spill_7:
! **  csrr\t[a-x0-9]+,vlenb
! **  slli\tt1,[a-x0-9]+,3
  **  sub\tsp,sp,t1
  **  ...
  **  vs8r.v\tv[0-9]+,0\(sp\)
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/riscv/rvv/base/spill-6.c gcc-16-20251228/gcc/testsuite/gcc.target/riscv/rvv/base/spill-6.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/riscv/rvv/base/spill-6.c	Sun Dec 21 22:32:12 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/riscv/rvv/base/spill-6.c	Sun Dec 28 22:32:14 2025
***************
*** 7,14 ****
  
  /*
  ** spill_4:
! **  csrr\tt0,vlenb
! **  sub\tsp,sp,t0
  **  ...
  **  vs1r.v\tv[0-9]+,0\(sp\)
  **  ...
--- 7,14 ----
  
  /*
  ** spill_4:
! **  csrr\t[a-x0-9]+,vlenb
! **  sub\tsp,sp,[a-x0-9]+
  **  ...
  **  vs1r.v\tv[0-9]+,0\(sp\)
  **  ...
*************** spill_4 (double *in, double *out)
*** 30,37 ****
  
  /*
  ** spill_5:
! **  csrr\tt0,vlenb
! **  slli\tt1,t0,1
  **  sub\tsp,sp,t1
  **  ...
  **  vs2r.v\tv[0-9]+,0\(sp\)
--- 30,37 ----
  
  /*
  ** spill_5:
! **  csrr\t[a-x0-9]+,vlenb
! **  slli\tt1,[a-x0-9]+,1
  **  sub\tsp,sp,t1
  **  ...
  **  vs2r.v\tv[0-9]+,0\(sp\)
*************** spill_5 (double *in, double *out)
*** 54,61 ****
  
  /*
  ** spill_6:
! **  csrr\tt0,vlenb
! **  slli\tt1,t0,2
  **  sub\tsp,sp,t1
  **  ...
  **  vs4r.v\tv[0-9]+,0\(sp\)
--- 54,61 ----
  
  /*
  ** spill_6:
! **  csrr\t[a-x0-9]+,vlenb
! **  slli\tt1,[a-x0-9]+,2
  **  sub\tsp,sp,t1
  **  ...
  **  vs4r.v\tv[0-9]+,0\(sp\)
*************** spill_6 (double *in, double *out)
*** 78,85 ****
  
  /*
  ** spill_7:
! **  csrr\tt0,vlenb
! **  slli\tt1,t0,3
  **  sub\tsp,sp,t1
  **  ...
  **  vs8r.v\tv[0-9]+,0\(sp\)
--- 78,85 ----
  
  /*
  ** spill_7:
! **  csrr\t[a-x0-9]+,vlenb
! **  slli\tt1,[a-x0-9]+,3
  **  sub\tsp,sp,t1
  **  ...
  **  vs8r.v\tv[0-9]+,0\(sp\)
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/riscv/rvv/base/spill-7.c gcc-16-20251228/gcc/testsuite/gcc.target/riscv/rvv/base/spill-7.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/riscv/rvv/base/spill-7.c	Sun Dec 21 22:32:12 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/riscv/rvv/base/spill-7.c	Sun Dec 28 22:32:14 2025
***************
*** 19,49 ****
  **  addi\t[a-x0-9]+,[a-x0-9]+,1
  **  vsetvli\t[a-x0-9]+,zero,e8,mf4,ta,ma
  **  vle8.v\tv[0-9]+,0\([a-x0-9]+\)
- **  csrr\t[a-x0-9]+,vlenb
  **  srli\t[a-x0-9]+,[a-x0-9]+,2
  **  add\t[a-x0-9]+,[a-x0-9]+,[a-x0-9]+
  **  vse8.v\tv[0-9]+,0\([a-x0-9]+\)
  **  addi\t[a-x0-9]+,[a-x0-9]+,2
  **  vsetvli\t[a-x0-9]+,zero,e8,mf2,ta,ma
  **  vle8.v\tv[0-9]+,0\([a-x0-9]+\)
- **  csrr\t[a-x0-9]+,vlenb
  **  srli\t[a-x0-9]+,[a-x0-9]+,1
  **  add\t[a-x0-9]+,[a-x0-9]+,[a-x0-9]+
  **  vse8.v\tv[0-9]+,0\([a-x0-9]+\)
  **  addi\t[a-x0-9]+,[a-x0-9]+,3
  **  vl1re8.v\tv[0-9]+,0\([a-x0-9]+\)
- **  csrr\t[a-x0-9]+,vlenb
  **  add\t[a-x0-9]+,[a-x0-9]+,[a-x0-9]+
  **  vs1r.v\tv[0-9]+,0\([a-x0-9]+\)
  **  addi\t[a-x0-9]+,[a-x0-9]+,4
  **  vl2re8.v\tv[0-9]+,0\([a-x0-9]+\)
- **  csrr\t[a-x0-9]+,vlenb
  **  slli\t[a-x0-9]+,[a-x0-9]+,1
  **  add\t[a-x0-9]+,[a-x0-9]+,[a-x0-9]+
  **  vs2r.v\tv[0-9]+,0\([a-x0-9]+\)
  **  addi\t[a-x0-9]+,[a-x0-9]+,5
  **  vl4re8.v\tv[0-9]+,0\([a-x0-9]+\)
- **  mv\t[a-x0-9]+,[a-x0-9]+
  **  slli\t[a-x0-9]+,[a-x0-9]+,2
  **  add\t[a-x0-9]+,[a-x0-9]+,[a-x0-9]+
  **  vs4r.v\tv[0-9]+,0\([a-x0-9]+\)
--- 19,44 ----
***************
*** 66,73 ****
  **  vle8.v\tv[0-9]+,0\([a-x0-9]+\)
  **  vse8.v\tv[0-9]+,0\([a-x0-9]+\)
  **  addi\t[a-x0-9]+,[a-x0-9]+,2
- **  srli\t[a-x0-9]+,[a-x0-9]+,1
- **  add\t[a-x0-9]+,[a-x0-9]+,[a-x0-9]+
  **  ...
  **  vle8.v\tv[0-9]+,0\([a-x0-9]+\)
  **  vse8.v\tv[0-9]+,0\([a-x0-9]+\)
--- 61,66 ----
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/riscv/zicond_ifcvt_opt.c gcc-16-20251228/gcc/testsuite/gcc.target/riscv/zicond_ifcvt_opt.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/riscv/zicond_ifcvt_opt.c	Sun Dec 21 22:32:12 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/riscv/zicond_ifcvt_opt.c	Sun Dec 28 22:32:15 2025
*************** test_AND_eqz_x_2_reverse_bin_oprands (lo
*** 774,778 ****
      x = z & x;
    return x;
  }
! /* { dg-final { scan-assembler-times {czero\.eqz} 36 } } */
  /* { dg-final { scan-assembler-times {czero\.nez} 36 } } */
--- 774,778 ----
      x = z & x;
    return x;
  }
! /* { dg-final { scan-assembler-times {czero\.eqz} 41 } } */
  /* { dg-final { scan-assembler-times {czero\.nez} 36 } } */
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gcc.target/s390/zvector/vec-addc-u128.c gcc-16-20251228/gcc/testsuite/gcc.target/s390/zvector/vec-addc-u128.c
*** gcc-16-20251221/gcc/testsuite/gcc.target/s390/zvector/vec-addc-u128.c	Sun Dec 21 22:32:12 2025
--- gcc-16-20251228/gcc/testsuite/gcc.target/s390/zvector/vec-addc-u128.c	Sun Dec 28 22:32:15 2025
***************
*** 6,10 ****
  vector unsigned char test(void)
  {
     vector unsigned char a = { 0 };
!    return __builtin_s390_vec_addc_u128 (a, a);
  }
--- 6,10 ----
  vector unsigned char test(void)
  {
     vector unsigned char a = { 0 };
!    return __builtin_s390_vec_addc_u128 (a, a);  /* { dg-warning "is deprecated" } */
  }
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gfortran.dg/associate_76.f90 gcc-16-20251228/gcc/testsuite/gfortran.dg/associate_76.f90
*** gcc-16-20251221/gcc/testsuite/gfortran.dg/associate_76.f90	Sun Dec 21 22:32:13 2025
--- gcc-16-20251228/gcc/testsuite/gfortran.dg/associate_76.f90	Sun Dec 28 22:32:15 2025
*************** contains
*** 22,27 ****
--- 22,35 ----
         var%i = 3
         var%i => NULL()      ! { dg-error "pointer association context" }
      end select
+ 
+     associate (avar => var)
+       select type(avar)     ! { dg-error "variable definition context" }
+       class is(t_b)
+          avar%i = 3
+          avar%i => NULL()   ! { dg-error "variable definition context" }
+       end select
+     end associate
    end subroutine s1
  
    subroutine s1a(var)
*************** contains
*** 31,38 ****
--- 39,65 ----
         tmp%i = 3
         tmp%i => NULL()      ! { dg-error "variable definition context" }
      end select
+ 
+     associate (avar => var)
+       select type(tmp => avar) ! { dg-error "variable definition context" }
+       class is(t_b)
+          tmp%i = 3
+          tmp%i => NULL()       ! { dg-error "variable definition context" }
+       end select
+     end associate
    end subroutine s1a
  
+   subroutine s1b(var)
+     class(t_a), intent(in) :: var
+     associate (avar => var)
+       select type(tmp => avar) ! { dg-error "variable definition context" }
+       class is(t_b)
+          tmp%i = 3
+          tmp%i => NULL()       ! { dg-error "variable definition context" }
+       end select
+     end associate
+   end subroutine s1b
+ 
    subroutine s2(var)
      class(t_b), intent(in) :: var
      var%i = 3
*************** contains
*** 58,67 ****
    subroutine s3(var)
      class(t_a), intent(in) :: var
      integer, pointer :: tmp
!     select type(var); class is(t_b)
         tmp => var%i
         tmp =  3
      end select
    end subroutine s3
  
  end module m
--- 85,103 ----
    subroutine s3(var)
      class(t_a), intent(in) :: var
      integer, pointer :: tmp
!     select type(var)
!     class is(t_b)
         tmp => var%i
         tmp =  3
      end select
+ 
+     associate (avar => var)
+       select type(avar)
+       class is(t_b)
+          tmp => avar%i
+          tmp =  3
+       end select
+     end associate
    end subroutine s3
  
  end module m
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gfortran.dg/associate_77.f90 gcc-16-20251228/gcc/testsuite/gfortran.dg/associate_77.f90
*** gcc-16-20251221/gcc/testsuite/gfortran.dg/associate_77.f90	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gfortran.dg/associate_77.f90	Sun Dec 28 22:32:15 2025
***************
*** 0 ****
--- 1,65 ----
+ ! { dg-do compile }
+ ! PR fortran/123253 - pointer assignment checks in SELECT TYPE
+ !
+ ! Contributed by Jürgen Reuter
+ 
+ module vamp
+   implicit none
+   private
+   type, public :: vamp_data_t
+   end type vamp_data_t
+ end module vamp
+ 
+ module mci_vamp
+   use vamp !NODEP!
+   implicit none
+   private
+ 
+   type, abstract :: mci_sampler_t
+   end type mci_sampler_t
+ 
+   type :: mci_vamp_t
+    contains
+      procedure :: generate_weighted_event => mci_vamp_generate_weighted_event
+   end type mci_vamp_t
+ 
+   type, extends (vamp_data_t) :: mci_workspace_t
+      class(mci_sampler_t), pointer :: sampler => null ()
+      class(mci_vamp_instance_t), pointer :: instance => null ()
+   end type mci_workspace_t
+ 
+   type :: mci_vamp_instance_t
+      type(mci_vamp_t), pointer :: mci => null ()
+   end type mci_vamp_instance_t
+ 
+ contains
+ 
+   subroutine mci_vamp_generate_weighted_event (mci, instance, sampler)
+     class(mci_vamp_t), intent(inout) :: mci
+     class(mci_vamp_instance_t), intent(inout), target :: instance
+     class(mci_sampler_t), intent(inout), target :: sampler
+     class(vamp_data_t), allocatable :: data
+ 
+     select type (instance)
+     type is (mci_vamp_instance_t)
+        allocate (mci_workspace_t :: data)
+        select type (data)
+        type is (mci_workspace_t)
+           data%sampler => sampler
+           data%instance => instance
+        end select
+     end select
+ 
+     select type (foo_instance => instance)
+     type is (mci_vamp_instance_t)
+        allocate (mci_workspace_t :: data)
+        select type (tmp => data)
+        type is (mci_workspace_t)
+           tmp%sampler => sampler
+           tmp%instance => foo_instance
+        end select
+     end select
+ 
+   end subroutine mci_vamp_generate_weighted_event
+ 
+ end module mci_vamp
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gfortran.dg/pr122957.f90 gcc-16-20251228/gcc/testsuite/gfortran.dg/pr122957.f90
*** gcc-16-20251221/gcc/testsuite/gfortran.dg/pr122957.f90	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gfortran.dg/pr122957.f90	Sun Dec 28 22:32:15 2025
***************
*** 0 ****
--- 1,22 ----
+ ! { dg-do compile }
+ ! { dg-options "-fdefault-integer-8" }
+ 
+ module mymod 
+   type :: my_type
+     real :: value 
+   end type 
+ 
+   interface write(formatted) ! { dg-error "is not supported" }
+     module procedure  write_formatted ! { dg-error "a generic module interface" }
+   end interface ! { dg-error "Expecting" }
+ 
+ contains
+   subroutine write_formatted(dtv, unit, iotype, v_list, iostat, iomsg)
+     class(my_type), intent(in) :: dtv
+     integer, intent(in) :: unit
+     character(*), intent(in) :: iotype
+     integer, intent(in) :: v_list(:)
+     integer, intent(out) :: iostat
+     character(*), intent(inout) :: iomsg
+   end subroutine write_formatted
+ end module 
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gnat.dg/aggr34.adb gcc-16-20251228/gcc/testsuite/gnat.dg/aggr34.adb
*** gcc-16-20251221/gcc/testsuite/gnat.dg/aggr34.adb	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gnat.dg/aggr34.adb	Sun Dec 28 22:32:16 2025
***************
*** 0 ****
--- 1,15 ----
+ -- PR ada/123302
+ -- { dg-do link }
+ -- { dg-options "-gnat2022" }
+ 
+ with Aggr34_Pkg3;
+ with Aggr34_Pkg1;
+ 
+ procedure Aggr34 is
+ 
+   package My_Pkg3 is new Aggr34_Pkg3;
+   package My_Pkg1 is new Aggr34_Pkg1 (My_Pkg3);
+ 
+ begin
+   My_Pkg1.Proc;
+ end;
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gnat.dg/aggr34_pkg1.adb gcc-16-20251228/gcc/testsuite/gnat.dg/aggr34_pkg1.adb
*** gcc-16-20251221/gcc/testsuite/gnat.dg/aggr34_pkg1.adb	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gnat.dg/aggr34_pkg1.adb	Sun Dec 28 22:32:16 2025
***************
*** 0 ****
--- 1,6 ----
+ -- { dg-do compile }
+ -- { dg-options "-gnat2022" }
+ 
+ package body Aggr34_Pkg1 is
+    procedure Proc is null;
+ end Aggr34_Pkg1;
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gnat.dg/aggr34_pkg1.ads gcc-16-20251228/gcc/testsuite/gnat.dg/aggr34_pkg1.ads
*** gcc-16-20251221/gcc/testsuite/gnat.dg/aggr34_pkg1.ads	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gnat.dg/aggr34_pkg1.ads	Sun Dec 28 22:32:16 2025
***************
*** 0 ****
--- 1,9 ----
+ with Aggr34_Pkg3;
+ with Aggr34_Pkg2;
+ 
+ generic
+    with package My_Config is new Aggr34_Pkg3;
+ package Aggr34_Pkg1 is
+    package My_Module_Basic_Config is new Aggr34_Pkg2 (My_Config);
+    procedure Proc;
+ end Aggr34_Pkg1;
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gnat.dg/aggr34_pkg2.adb gcc-16-20251228/gcc/testsuite/gnat.dg/aggr34_pkg2.adb
*** gcc-16-20251221/gcc/testsuite/gnat.dg/aggr34_pkg2.adb	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gnat.dg/aggr34_pkg2.adb	Sun Dec 28 22:32:16 2025
***************
*** 0 ****
--- 1,9 ----
+ -- { dg-do compile }
+ -- { dg-options "-gnat2022" }
+ 
+ package body Aggr34_Pkg2 is
+    procedure Disable_Prunt is
+    begin
+       My_Config.Set (["a", "b"]);
+    end Disable_Prunt;
+ end Aggr34_Pkg2;
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gnat.dg/aggr34_pkg2.ads gcc-16-20251228/gcc/testsuite/gnat.dg/aggr34_pkg2.ads
*** gcc-16-20251221/gcc/testsuite/gnat.dg/aggr34_pkg2.ads	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gnat.dg/aggr34_pkg2.ads	Sun Dec 28 22:32:16 2025
***************
*** 0 ****
--- 1,7 ----
+ with Aggr34_Pkg3;
+ 
+ generic
+    with package My_Config is new Aggr34_Pkg3;
+ package Aggr34_Pkg2 is
+    procedure Disable_Prunt;
+ end Aggr34_Pkg2;
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gnat.dg/aggr34_pkg3.ads gcc-16-20251228/gcc/testsuite/gnat.dg/aggr34_pkg3.ads
*** gcc-16-20251221/gcc/testsuite/gnat.dg/aggr34_pkg3.ads	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gnat.dg/aggr34_pkg3.ads	Sun Dec 28 22:32:16 2025
***************
*** 0 ****
--- 1,8 ----
+ with Ada.Containers.Indefinite_Vectors;
+ 
+ generic
+ package Aggr34_Pkg3 is
+    package Config_Data_Paths is new
+      Ada.Containers.Indefinite_Vectors (Positive, String);
+    procedure Set (Path : Config_Data_Paths.Vector) is null;
+ end Aggr34_Pkg3;
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gnat.dg/specs/aggr9.ads gcc-16-20251228/gcc/testsuite/gnat.dg/specs/aggr9.ads
*** gcc-16-20251221/gcc/testsuite/gnat.dg/specs/aggr9.ads	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gnat.dg/specs/aggr9.ads	Sun Dec 28 22:32:16 2025
***************
*** 0 ****
--- 1,26 ----
+ -- PR ada/123289
+ -- { dg-do compile }
+ -- { dg-options "-gnat2022" }
+ 
+ package Aggr9 is
+ 
+    type JSON_Value is tagged null record;
+    type JSON_Object is new JSON_Value with null record
+      with Aggregate => (Empty => Empty, Add_Named => Insert); -- { dg-error "exactly one" }
+    type JSON_Integer is new JSON_Value with null record
+      with Integer_Literal => From_Universal_Image;
+ 
+    function Empty return JSON_Object
+    is (null record);
+ 
+    procedure Insert
+       (O : in out JSON_Object; Key : String; Value : JSON_Integer'Class)
+    is null;
+ 
+    procedure Insert (O : in out JSON_Object; Key : String; Value : String)
+    is null;
+ 
+    function From_Universal_Image (Value : String) return JSON_Integer
+    is (null record);
+ 
+ end Aggr9;
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gnat.dg/specs/class_wide1.ads gcc-16-20251228/gcc/testsuite/gnat.dg/specs/class_wide1.ads
*** gcc-16-20251221/gcc/testsuite/gnat.dg/specs/class_wide1.ads	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gnat.dg/specs/class_wide1.ads	Sun Dec 28 22:32:16 2025
***************
*** 0 ****
--- 1,19 ----
+ -- { dg-do compile }
+ 
+ with Ada.Containers.Indefinite_Vectors;
+ 
+ generic
+ package Class_Wide1 is
+ 
+    type R is tagged record
+       X : Integer;
+    end record;
+ 
+    package V is new Ada.Containers.Indefinite_Vectors (Positive, R);
+    package V_CW is new Ada.Containers.Indefinite_Vectors (Positive, R'Class);
+ 
+    function F1 (VV : V.Vector) return Integer is (VV (1).X);
+    function F2 (VV : V_CW.Vector) return Integer is (VV (1).Element.X);
+    function F3 (VV : V_CW.Vector) return Integer is (VV (1).X);
+ 
+ end Class_Wide1;
diff -Nrcpad gcc-16-20251221/gcc/testsuite/gnat.dg/specs/mutably_tagged1.ads gcc-16-20251228/gcc/testsuite/gnat.dg/specs/mutably_tagged1.ads
*** gcc-16-20251221/gcc/testsuite/gnat.dg/specs/mutably_tagged1.ads	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/gnat.dg/specs/mutably_tagged1.ads	Sun Dec 28 22:32:16 2025
***************
*** 0 ****
--- 1,15 ----
+ -- { dg-do compile }
+ -- { dg-options "-gnatX0" }
+ 
+ package Mutably_Tagged1 is
+ 
+   generic
+     type T is private;
+   package G is
+   end G;
+ 
+   type Rec is tagged null record with Size'Class => 128;
+ 
+   package My_G is new G (Rec'Class);
+ 
+ end Mutably_Tagged1;
diff -Nrcpad gcc-16-20251221/gcc/testsuite/lib/profopt.exp gcc-16-20251228/gcc/testsuite/lib/profopt.exp
*** gcc-16-20251221/gcc/testsuite/lib/profopt.exp	Sun Dec 21 22:32:13 2025
--- gcc-16-20251228/gcc/testsuite/lib/profopt.exp	Sun Dec 28 22:32:16 2025
*************** proc profopt-execute { src } {
*** 452,458 ****
  	    # convert profile
  	    if { $run_autofdo == 1 } {
                  set bprefix "afdo."
! 		set cmd "create_gcov --binary $execname1 --profile=$tmpdir/$base.perf.data -gcov_version=2 --gcov=$tmpdir/$bprefix$base.$ext"
  		verbose "Running $cmd"
  		set id [remote_spawn "" $cmd]
  		if { $id < 0 } {
--- 452,458 ----
  	    # convert profile
  	    if { $run_autofdo == 1 } {
                  set bprefix "afdo."
! 		set cmd "create_gcov --binary $execname1 --profile=$tmpdir/$base.perf.data --gcov_version=3 --gcov=$tmpdir/$bprefix$base.$ext"
  		verbose "Running $cmd"
  		set id [remote_spawn "" $cmd]
  		if { $id < 0 } {
diff -Nrcpad gcc-16-20251221/gcc/testsuite/lib/target-supports.exp gcc-16-20251228/gcc/testsuite/lib/target-supports.exp
*** gcc-16-20251221/gcc/testsuite/lib/target-supports.exp	Sun Dec 21 22:32:13 2025
--- gcc-16-20251228/gcc/testsuite/lib/target-supports.exp	Sun Dec 28 22:32:16 2025
*************** set exts {
*** 12670,12675 ****
--- 12670,12676 ----
  # We don't support SME without SVE2, so we'll use armv9 as the base
  # archiecture for SME and the features that require it.
  set exts_sve2 {
+     "sme-f8f16" "sme-f8f32"
      "sme-b16b16" "sme-f16f16" "sme-i16i64" "sme" "sme2" "sme2p1"
      "ssve-fp8dot2" "ssve-fp8dot4" "ssve-fp8fma"
  }
diff -Nrcpad gcc-16-20251221/gcc/testsuite/rust/compile/issue-3977.rs gcc-16-20251228/gcc/testsuite/rust/compile/issue-3977.rs
*** gcc-16-20251221/gcc/testsuite/rust/compile/issue-3977.rs	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/rust/compile/issue-3977.rs	Sun Dec 28 22:32:16 2025
***************
*** 0 ****
--- 1,65 ----
+ // Test for issue #3977 - ICE with continue/break/return in while condition
+ 
+ fn diverge() -> ! {
+     loop {}
+ }
+ 
+ fn test_continue() {
+     loop {
+         while continue {}
+     }
+ }
+ 
+ fn test_break() {      
+     loop {
+         while break {}
+     }
+ }
+ 
+ fn test_return() {
+     loop {
+         while return {}
+     }
+ }
+ 
+ fn test_labeled_break() {
+     'outer: loop {
+         loop {
+             while break 'outer {}
+         }
+     }
+ }
+ 
+ fn test_labeled_continue() {
+     'outer: loop {
+         loop {
+             while continue 'outer {}
+         }
+     }
+ }
+ 
+ fn test_complex_if_else() {
+     loop {
+         while if true { continue } else { break } {}
+     }
+ }
+ 
+ fn foo() {
+     while diverge() {
+         break
+     }
+     let _x = 5;
+ }
+ 
+ fn main() {
+     // Just reference them so they're "used"
+     if false {
+         test_continue();
+         test_break();
+         test_return();
+         test_labeled_break();
+         test_labeled_continue();
+         test_complex_if_else();
+         foo();
+     }
+ }
\ No newline at end of file
diff -Nrcpad gcc-16-20251221/gcc/testsuite/rust/compile/issue-4148.rs gcc-16-20251228/gcc/testsuite/rust/compile/issue-4148.rs
*** gcc-16-20251221/gcc/testsuite/rust/compile/issue-4148.rs	Sun Dec 21 22:32:13 2025
--- gcc-16-20251228/gcc/testsuite/rust/compile/issue-4148.rs	Sun Dec 28 22:32:16 2025
***************
*** 1,5 ****
- // { dg-excess-errors "warnings" }
- 
  // TODO: all `xfail` conditions should be changed to `target` once the ICE in #4148 is resolved
  
  pub fn ret_parens(x: i32) -> i32 {
--- 1,3 ----
diff -Nrcpad gcc-16-20251221/gcc/testsuite/rust/compile/issue-4245.rs gcc-16-20251228/gcc/testsuite/rust/compile/issue-4245.rs
*** gcc-16-20251221/gcc/testsuite/rust/compile/issue-4245.rs	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/rust/compile/issue-4245.rs	Sun Dec 28 22:32:16 2025
***************
*** 0 ****
--- 1,10 ----
+ #![cfg_attr(not(cg_gcc), feature(intrinsics))]
+ #![feature(lang_items)]
+ 
+ #[lang = "sized"]
+ pub trait Sized {}
+ 
+ #[cfg(not(cg_gcc))]
+ extern "rust-intrinsic" {
+     fn copy_nonoverlapping<T>(src: &T, dst: &mut T, count: usize);
+ }
diff -Nrcpad gcc-16-20251221/gcc/testsuite/rust/compile/issue-4260_0.rs gcc-16-20251228/gcc/testsuite/rust/compile/issue-4260_0.rs
*** gcc-16-20251221/gcc/testsuite/rust/compile/issue-4260_0.rs	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/rust/compile/issue-4260_0.rs	Sun Dec 28 22:32:16 2025
***************
*** 0 ****
--- 1,22 ----
+ // { dg-additional-options "-frust-unused-check-2.0" }
+ pub fn a()->i32 {
+     let mut a = 1;
+     a = 2;
+ // { dg-warning "unused assignment .a." "" { target *-*-* } .-1 }
+     a = 3;
+ // { dg-warning "unused assignment .a." "" { target *-*-* } .-1 }
+     a = 4;
+ // { dg-warning "unused assignment .a." "" { target *-*-* } .-1 }
+     a = 5;
+     let mut b = a;
+     b = 1;
+ // { dg-warning "unused assignment .b." "" { target *-*-* } .-1 }
+     b = 2;
+ // { dg-warning "unused assignment .b." "" { target *-*-* } .-1 }
+     b = 3;
+ // { dg-warning "unused assignment .b." "" { target *-*-* } .-1 }
+     b = 4;
+ // { dg-warning "unused assignment .b." "" { target *-*-* } .-1 }
+     b = 5;
+     return b
+ }
diff -Nrcpad gcc-16-20251221/gcc/testsuite/rust/compile/static_item_0.rs gcc-16-20251228/gcc/testsuite/rust/compile/static_item_0.rs
*** gcc-16-20251221/gcc/testsuite/rust/compile/static_item_0.rs	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/rust/compile/static_item_0.rs	Sun Dec 28 22:32:16 2025
***************
*** 0 ****
--- 1,3 ----
+ // { dg-additional-options "-frust-unused-check-2.0" }
+ static TEST: usize = 1;
+ // { dg-warning "unused variable .TEST." "" { target *-*-* } .-1 }
diff -Nrcpad gcc-16-20251221/gcc/testsuite/rust/compile/template_function_0.rs gcc-16-20251228/gcc/testsuite/rust/compile/template_function_0.rs
*** gcc-16-20251221/gcc/testsuite/rust/compile/template_function_0.rs	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/rust/compile/template_function_0.rs	Sun Dec 28 22:32:16 2025
***************
*** 0 ****
--- 1,8 ----
+ // { dg-additional-options "-frust-unused-check-2.0" }
+ #![feature(lang_items)]
+ #[lang = "sized"]
+ pub trait Sized {}
+ 
+ pub fn test<T> (a: usize) -> () {
+     // { dg-warning "unused variable .a." "" { target *-*-* } .-1 }
+ }
diff -Nrcpad gcc-16-20251221/gcc/testsuite/rust/compile/unused-mut-identifier_0.rs gcc-16-20251228/gcc/testsuite/rust/compile/unused-mut-identifier_0.rs
*** gcc-16-20251221/gcc/testsuite/rust/compile/unused-mut-identifier_0.rs	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/rust/compile/unused-mut-identifier_0.rs	Sun Dec 28 22:32:16 2025
***************
*** 0 ****
--- 1,6 ----
+ // { dg-additional-options "-frust-unused-check-2.0" }
+ pub fn a() ->i32 {
+     let mut x = 2;
+ // { dg-warning "unused mut .x." "" { target *-*-* } .-1 }
+     return x
+ }
diff -Nrcpad gcc-16-20251221/gcc/testsuite/rust/compile/unused-mut-struct-field_0.rs gcc-16-20251228/gcc/testsuite/rust/compile/unused-mut-struct-field_0.rs
*** gcc-16-20251221/gcc/testsuite/rust/compile/unused-mut-struct-field_0.rs	Thu Jan  1 00:00:00 1970
--- gcc-16-20251228/gcc/testsuite/rust/compile/unused-mut-struct-field_0.rs	Sun Dec 28 22:32:16 2025
***************
*** 0 ****
--- 1,17 ----
+ // { dg-additional-options "-frust-unused-check-2.0" }
+ struct Point { x: i32, y: i32 }
+ // { dg-warning "field is never read: .x." "" { target *-*-* } .-1 }
+ // { dg-warning "field is never read: .y." "" { target *-*-* } .-2 }
+ 
+ pub fn main() -> (i32, i32){
+     let p = Point { x: 1, y: 2 };
+ 
+     match p {
+         Point { mut x, mut y } => {
+ // { dg-warning "unused mut .x." "" { target *-*-* } .-1 }
+ // { dg-warning "unused mut .y." "" { target *-*-* } .-2 }
+             return (x,y)
+         }
+     }
+ }
+ 
diff -Nrcpad gcc-16-20251221/gcc/tree-ssa-loop-im.cc gcc-16-20251228/gcc/tree-ssa-loop-im.cc
*** gcc-16-20251221/gcc/tree-ssa-loop-im.cc	Sun Dec 21 22:32:14 2025
--- gcc-16-20251228/gcc/tree-ssa-loop-im.cc	Sun Dec 28 22:32:16 2025
*************** is_self_write (im_mem_ref *load_ref, im_
*** 3174,3180 ****
      return false;
  
    /* Self write: stored value is the loaded value.  */
!   return stored_val == loaded_val;
  }
  
  /* Returns true if REF1 and REF2 are independent.  */
--- 3174,3200 ----
      return false;
  
    /* Self write: stored value is the loaded value.  */
!   if (stored_val != loaded_val)
!     return false;
! 
! 
!   /* TODO: Try to factor this out with mem_ref_hasher::equal
!      into im_compare_access_position_and_size
!      or a similar helper to centralize this delicate handling
!      complete for MEM_REF offsets and base pointer equality.
! 
!      TODO: Also ensure max_size_known_p agrees or resort to
!      alignment considerations to rule out partial overlaps.
! 
!      See:
!      https://gcc.gnu.org/pipermail/gcc-patches/2025-December/704155.html
!      For more context on TODOs above.  */
! 
!   /* They may alias.  Verify exact same location.  */
!   return (operand_equal_p (load_ref->mem.base, store_ref->mem.base, 0)
! 	  && known_eq (load_ref->mem.size, store_ref->mem.size)
! 	  && known_eq (load_ref->mem.offset, store_ref->mem.offset));
! 
  }
  
  /* Returns true if REF1 and REF2 are independent.  */
diff -Nrcpad gcc-16-20251221/gcc/tree-ssa-math-opts.cc gcc-16-20251228/gcc/tree-ssa-math-opts.cc
*** gcc-16-20251221/gcc/tree-ssa-math-opts.cc	Sun Dec 21 22:32:14 2025
--- gcc-16-20251228/gcc/tree-ssa-math-opts.cc	Sun Dec 28 22:32:16 2025
*************** execute_cse_sincos_1 (tree name)
*** 1287,1293 ****
  	  continue;
  	}
  
!       tree t = mathfn_built_in_type (gimple_call_combined_fn (use_stmt));
        if (!type)
  	{
  	  type = t;
--- 1287,1304 ----
  	  continue;
  	}
  
!       auto stmt_cfn = gimple_call_combined_fn (use_stmt);
!       tree t = mathfn_built_in_type (stmt_cfn);
!       if (!t)
! 	{
! 	  /* It is possible to get IFN_{SIN,COS} calls, for which
! 	     mathfn_built_in_type will return NULL.  Those are normally only
! 	     present for vector operations.  We won't be able to CSE those
! 	     at the moment. */
! 	  gcc_checking_assert (internal_fn_p (stmt_cfn));
! 	  return false;
! 	}
! 
        if (!type)
  	{
  	  type = t;
diff -Nrcpad gcc-16-20251221/libga68/ChangeLog gcc-16-20251228/libga68/ChangeLog
*** gcc-16-20251221/libga68/ChangeLog	Sun Dec 21 22:32:14 2025
--- gcc-16-20251228/libga68/ChangeLog	Sun Dec 28 22:32:16 2025
***************
*** 1,3 ****
--- 1,10 ----
+ 2025-12-27  Pietro Monteiro  <pietro@sociotechnical.xyz>
+ 
+ 	* ga68-alloc.c: Include ga68.h before all includes.
+ 	* ga68-error.c: Likewise.
+ 	* ga68-standenv.c: Likewise.
+ 	* ga68-unistr.c:  Likewise.
+ 
  2025-12-16  Pietro Monteiro  <pietro@sociotechnical.xyz>
  
  	* ga68-unistr.c (_libga68_u32_cmp): Add `static' specifier.
diff -Nrcpad gcc-16-20251221/libga68/ga68-alloc.c gcc-16-20251228/libga68/ga68-alloc.c
*** gcc-16-20251221/libga68/ga68-alloc.c	Sun Dec 21 22:32:14 2025
--- gcc-16-20251228/libga68/ga68-alloc.c	Sun Dec 28 22:32:16 2025
***************
*** 20,28 ****
     COPYING3 and COPYING.RUNTIME respectively.  If not, see
     <http://www.gnu.org/licenses/>.  */
  
  #include <stdlib.h>
  
- #include "ga68.h"
  
  /* Heap allocation routines.  */
  
--- 20,29 ----
     COPYING3 and COPYING.RUNTIME respectively.  If not, see
     <http://www.gnu.org/licenses/>.  */
  
+ #include "ga68.h"
+ 
  #include <stdlib.h>
  
  
  /* Heap allocation routines.  */
  
diff -Nrcpad gcc-16-20251221/libga68/ga68-error.c gcc-16-20251228/libga68/ga68-error.c
*** gcc-16-20251221/libga68/ga68-error.c	Sun Dec 21 22:32:14 2025
--- gcc-16-20251228/libga68/ga68-error.c	Sun Dec 28 22:32:16 2025
***************
*** 20,29 ****
     COPYING3 and COPYING.RUNTIME respectively.  If not, see
     <http://www.gnu.org/licenses/>.  */
  
  #include <stdio.h>
  #include <stdlib.h> /* For abort.  */
  
- #include "ga68.h"
  
  /* Run-time error handling.
  
--- 20,30 ----
     COPYING3 and COPYING.RUNTIME respectively.  If not, see
     <http://www.gnu.org/licenses/>.  */
  
+ #include "ga68.h"
+ 
  #include <stdio.h>
  #include <stdlib.h> /* For abort.  */
  
  
  /* Run-time error handling.
  
diff -Nrcpad gcc-16-20251221/libga68/ga68-standenv.c gcc-16-20251228/libga68/ga68-standenv.c
*** gcc-16-20251221/libga68/ga68-standenv.c	Sun Dec 21 22:32:14 2025
--- gcc-16-20251228/libga68/ga68-standenv.c	Sun Dec 28 22:32:16 2025
***************
*** 20,28 ****
     COPYING3 and COPYING.RUNTIME respectively.  If not, see
     <http://www.gnu.org/licenses/>.  */
  
  #include <stdlib.h> /* For rand.  */
  
- #include "ga68.h"
  
  /* Implementation of the standard prelude `random' function.  */
  
--- 20,29 ----
     COPYING3 and COPYING.RUNTIME respectively.  If not, see
     <http://www.gnu.org/licenses/>.  */
  
+ #include "ga68.h"
+ 
  #include <stdlib.h> /* For rand.  */
  
  
  /* Implementation of the standard prelude `random' function.  */
  
diff -Nrcpad gcc-16-20251221/libga68/ga68-unistr.c gcc-16-20251228/libga68/ga68-unistr.c
*** gcc-16-20251221/libga68/ga68-unistr.c	Sun Dec 21 22:32:14 2025
--- gcc-16-20251228/libga68/ga68-unistr.c	Sun Dec 28 22:32:16 2025
***************
*** 23,35 ****
  /* The code in this file has been copied from the unistr gnulib module, written
     by Bruno Haible, and adapted to support strides.  */
  
  #include <stddef.h> /* For ptrdiff_t */
  #include <stdlib.h>
  #include <stdint.h>
  #include <errno.h>
  #include <string.h>
  
- #include "ga68.h"
  
  /* CMP (n1, n2) performs a three-valued comparison on n1 vs. n2, where
     n1 and n2 are expressions without side effects, that evaluate to real
--- 23,36 ----
  /* The code in this file has been copied from the unistr gnulib module, written
     by Bruno Haible, and adapted to support strides.  */
  
+ #include "ga68.h"
+ 
  #include <stddef.h> /* For ptrdiff_t */
  #include <stdlib.h>
  #include <stdint.h>
  #include <errno.h>
  #include <string.h>
  
  
  /* CMP (n1, n2) performs a three-valued comparison on n1 vs. n2, where
     n1 and n2 are expressions without side effects, that evaluate to real
diff -Nrcpad gcc-16-20251221/libgomp/ChangeLog gcc-16-20251228/libgomp/ChangeLog
*** gcc-16-20251221/libgomp/ChangeLog	Sun Dec 21 22:32:15 2025
--- gcc-16-20251228/libgomp/ChangeLog	Sun Dec 28 22:32:17 2025
***************
*** 1,3 ****
--- 1,12 ----
+ 2025-12-24  Thomas Schwinge  <tschwinge@baylibre.com>
+ 
+ 	* testsuite/lib/libgomp.exp (check_effective_target_omp_usm):
+ 	Robustify.
+ 
+ 2025-12-22  Tobias Burnus  <tburnus@baylibre.com>
+ 
+ 	* testsuite/libgomp.fortran/uses_allocators_1.f90: Update dg-error.
+ 
  2025-12-19  Tobias Burnus  <tburnus@baylibre.com>
  
  	* testsuite/libgomp.fortran/uses_allocators-7.f90: Add ';' test.
diff -Nrcpad gcc-16-20251221/libgomp/testsuite/lib/libgomp.exp gcc-16-20251228/libgomp/testsuite/lib/libgomp.exp
*** gcc-16-20251221/libgomp/testsuite/lib/libgomp.exp	Sun Dec 21 22:32:15 2025
--- gcc-16-20251228/libgomp/testsuite/lib/libgomp.exp	Sun Dec 28 22:32:17 2025
*************** int main() {
*** 728,735 ****
  # return 1 if OpenMP Unified Shared Memory is supported by offload devices
  
  proc check_effective_target_omp_usm { } {
!     if { [check_effective_target_offload_device_nvptx] 
!          || [check_effective_target_offload_target_amdgcn] } {
  	if [check_runtime usm_available_ {
  	    #include <omp.h>
  	    #pragma omp requires unified_shared_memory
--- 728,743 ----
  # return 1 if OpenMP Unified Shared Memory is supported by offload devices
  
  proc check_effective_target_omp_usm { } {
!     set flags ""
!     if { [check_effective_target_offload_target_amdgcn] } {
! 	# Specify '-mxnack=any' to inhibit GCN offloading compilation
! 	# 'warning: Unified Shared Memory is required, but XNACK is disabled'.
! 	# This run-time effective-target check shouldn't fail in case there's
! 	# actually no AMD GPU, but there's an USM-capable NVIDIA GPU.
! 	lappend flags "-foffload-options=amdgcn-amdhsa=-mxnack=any"
!     }
!     if { $flags != ""
! 	 || [check_effective_target_offload_device_nvptx] } {
  	if [check_runtime usm_available_ {
  	    #include <omp.h>
  	    #pragma omp requires unified_shared_memory
*************** proc check_effective_target_omp_usm { }
*** 740,746 ****
  		a = omp_is_initial_device ();
  	      return a;
  	    }
! 	} ] {
  	  return 1
  	}
      }
--- 748,754 ----
  		a = omp_is_initial_device ();
  	      return a;
  	    }
! 	} "$flags" ] {
  	  return 1
  	}
      }
diff -Nrcpad gcc-16-20251221/libgomp/testsuite/libgomp.fortran/uses_allocators_1.f90 gcc-16-20251228/libgomp/testsuite/libgomp.fortran/uses_allocators_1.f90
*** gcc-16-20251221/libgomp/testsuite/libgomp.fortran/uses_allocators_1.f90	Sun Dec 21 22:32:15 2025
--- gcc-16-20251228/libgomp/testsuite/libgomp.fortran/uses_allocators_1.f90	Sun Dec 28 22:32:17 2025
*************** subroutine traits_checks
*** 147,155 ****
    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 "Invalid character in name" }
    block; end block
!   !$omp target uses_allocators(a1 ([omp_alloctrait :: ]))  ! { dg-error "Invalid character in name" }
    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'" }
--- 147,155 ----
    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'" }
diff -Nrcpad gcc-16-20251221/libstdc++-v3/ChangeLog gcc-16-20251228/libstdc++-v3/ChangeLog
*** gcc-16-20251221/libstdc++-v3/ChangeLog	Sun Dec 21 22:32:15 2025
--- gcc-16-20251228/libstdc++-v3/ChangeLog	Sun Dec 28 22:32:18 2025
***************
*** 1,3 ****
--- 1,10 ----
+ 2025-12-22  Tomasz Kamiński  <tkaminsk@redhat.com>
+ 
+ 	* doc/html/manual/using_macros.html: Regenerate.
+ 	* doc/xml/manual/using.xml: Add entries for
+ 	_GLIBCXX_USE_OLD_GENERATE_CANONICAL and
+ 	_GLIBCXX_USE_VARIANT_CXX17_OLD_ABI.
+ 
  2025-12-19  Tomasz Kamiński  <tkaminsk@redhat.com>
  
  	PR libstdc++/112591
diff -Nrcpad gcc-16-20251221/libstdc++-v3/doc/html/manual/using_macros.html gcc-16-20251228/libstdc++-v3/doc/html/manual/using_macros.html
*** gcc-16-20251221/libstdc++-v3/doc/html/manual/using_macros.html	Sun Dec 21 22:32:15 2025
--- gcc-16-20251228/libstdc++-v3/doc/html/manual/using_macros.html	Sun Dec 28 22:32:18 2025
***************
*** 137,140 ****
--- 137,150 ----
  	When not defined, durations, time points, and calendar types are
  	available for freestanding, but the standard clocks and the time zone
  	database are not (because they require OS support).
+       </p></dd><dt><span class="term"><code class="code">_GLIBCXX_USE_OLD_GENERATE_CANONICAL</code></span></dt><dd><p>
+ 	Undefined by default. When defined <code class="code">generate_canonical</code>
+ 	reverts to the algorithm used prior to the implementation of
+ 	<a class="link" href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p0952r2.html" target="_top">
+ 	P0952: A new specification for std::generate_canonical</a> in GCC-16.
+       </p></dd><dt><span class="term"><code class="code">_GLIBCXX_USE_VARIANT_CXX17_OLD_ABI</code></span></dt><dd><p>
+ 	Undefined by default. When defined <code class="code">variant</code> in C++17
+ 	mode will revert to the non-conforming implementation used prior to the
+ 	<a class="link" href="https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112591" target="_top">PR112591</a>
+ 	in GCC-16. Has no impact for C++20 or later modes.
        </p></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="using_headers.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="using.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="using_dual_abi.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Headers </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Dual ABI</td></tr></table></div></body></html>
\ No newline at end of file
diff -Nrcpad gcc-16-20251221/libstdc++-v3/doc/xml/manual/using.xml gcc-16-20251228/libstdc++-v3/doc/xml/manual/using.xml
*** gcc-16-20251221/libstdc++-v3/doc/xml/manual/using.xml	Sun Dec 21 22:32:15 2025
--- gcc-16-20251228/libstdc++-v3/doc/xml/manual/using.xml	Sun Dec 28 22:32:18 2025
*************** g++ -Winvalid-pch -I. -include stdc++.h
*** 1343,1348 ****
--- 1343,1368 ----
  	database are not (because they require OS support).
        </para>
      </listitem></varlistentry>
+     <varlistentry><term><code>_GLIBCXX_USE_OLD_GENERATE_CANONICAL</code></term>
+     <listitem>
+       <para>
+ 	Undefined by default. When defined <code>generate_canonical</code>
+ 	reverts to the algorithm used prior to the implementation of
+ 	<link xmlns:xlink="http://www.w3.org/1999/xlink"
+ 	xlink:href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p0952r2.html">
+ 	P0952: A new specification for std::generate_canonical</link> in GCC-16.
+       </para>
+     </listitem></varlistentry>
+     <varlistentry><term><code>_GLIBCXX_USE_VARIANT_CXX17_OLD_ABI</code></term>
+     <listitem>
+       <para>
+ 	Undefined by default. When defined <code>variant</code> in C++17
+ 	mode will revert to the non-conforming implementation used prior to the
+ 	<link xmlns:xlink="http://www.w3.org/1999/xlink"
+ 	xlink:href="https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112591">PR112591</link>
+ 	in GCC-16. Has no impact for C++20 or later modes.
+       </para>
+     </listitem></varlistentry>
      </variablelist>
  
    </section>
diff -Nrcpad gcc-16-20251221/maintainer-scripts/ChangeLog gcc-16-20251228/maintainer-scripts/ChangeLog
*** gcc-16-20251221/maintainer-scripts/ChangeLog	Sun Dec 21 22:32:16 2025
--- gcc-16-20251228/maintainer-scripts/ChangeLog	Sun Dec 28 22:32:19 2025
***************
*** 1,3 ****
--- 1,7 ----
+ 2025-12-21  Gerald Pfeifer  <gerald@pfeifer.com>
+ 
+ 	* update_web_docs_git: Avoid redirects from Sphinx stylesheets.
+ 
  2025-12-16  Pietro Monteiro  <pietro@sociotechnical.xyz>
  
  	* update_web_docs_git (MANUALS): Add ga68 and ga68-internals.
