diff -Nrcpad gcc-17-20260705/.editorconfig gcc-17-20260712/.editorconfig
*** gcc-17-20260705/.editorconfig	Sun Jul  5 22:32:05 2026
--- gcc-17-20260712/.editorconfig	Sun Jul 12 22:32:05 2026
*************** trim_trailing_whitespace = true
*** 155,157 ****
--- 155,163 ----
  indent_style = space
  indent_size = 2
  trim_trailing_whitespace = true
+ 
+ # Yaml
+ [*.y{,a}ml]
+ indent_style = space
+ indent_size = 2
+ trim_trailing_whitespace = true
diff -Nrcpad gcc-17-20260705/ChangeLog gcc-17-20260712/ChangeLog
*** gcc-17-20260705/ChangeLog	Sun Jul  5 22:32:05 2026
--- gcc-17-20260712/ChangeLog	Sun Jul 12 22:32:05 2026
***************
*** 1,3 ****
--- 1,21 ----
+ 2026-07-09  Stefan Schulze Frielinghaus  <stefansf@gcc.gnu.org>
+ 
+ 	* configure: Regenerate.
+ 	* configure.ac: Remove deprecation warning for -m31.
+ 
+ 2026-07-07  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	* MAINTAINERS.yml: New file.
+ 	* MAINTAINERS: Regenerate from MAINTAINERS.yml.
+ 
+ 2026-07-07  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	* .editorconfig (*.yaml/.yml): Add rules.
+ 
+ 2026-07-06  Nina Ranns  <dinka.ranns@gmail.com>
+ 
+ 	* MAINTAINERS (Write After Approval): Add myself.
+ 
  2026-07-02  Eugene Rozenfeld  <erozen@microsoft.com>
  
  	* MAINTAINERS: Update my email address.
diff -Nrcpad gcc-17-20260705/LAST_UPDATED gcc-17-20260712/LAST_UPDATED
*** gcc-17-20260705/LAST_UPDATED	Sun Jul  5 22:32:23 2026
--- gcc-17-20260712/LAST_UPDATED	Sun Jul 12 22:32:24 2026
***************
*** 1 ****
! Obtained from git: master revision 88752b86ff1af4589c61d5bd8592b17e481ab596
--- 1 ----
! Obtained from git: master revision d556f558b9db9a136ac9ec4cc804dd899d2e63cd
diff -Nrcpad gcc-17-20260705/MAINTAINERS gcc-17-20260712/MAINTAINERS
*** gcc-17-20260705/MAINTAINERS	Sun Jul  5 22:32:05 2026
--- gcc-17-20260712/MAINTAINERS	Sun Jul 12 22:32:05 2026
***************
*** 1,6 ****
--- 1,11 ----
  Note
  ====
  
+ This file is autogenerated.  DO NOT EDIT or your changes will be lost.
+ Instead, add your details to contrib/MAINTAINERS.yml and run
+ 
+         contrib/gen-MAINTAINERS.py -o MAINTAINERS MAINTAINERS.yml
+ 
  This file contains information about people who are permitted to make
  changes to various parts of the compiler and associated libraries.
  
*************** Note: when adding someone who has commit
*** 23,31 ****
  please also ensure that there is a corresponding entry in the Write After
  Approval list, since that list contains the gcc.gnu.org account name.
  
- Note: please verify that sorting is correct with:
- ./contrib/check-MAINTAINERS.py MAINTAINERS
- 
  Maintainers
  ===========
  
--- 28,33 ----
*************** jump.cc                 David S. Miller
*** 222,235 ****
  libbacktrace            Ian Lance Taylor        <ian@airs.com>
  libcpp                  Per Bothner             <per@bothner.com>
  libcpp                  David Malcolm           <dmalcolm@redhat.com>
! libcpp                  All C and C++ front end maintainers
  libga68                 Jose E. Marchesi        <jemarch@gnu.org>
  libgcc                  Ian Lance Taylor        <ian@airs.com>
  libgo                   Ian Lance Taylor        <ian@airs.com>
  libgomp                 Tobias Burnus           <tburnus@baylibre.com>
  libgomp                 Jakub Jelinek           <jakub@redhat.com>
  libgomp (OpenACC)       Thomas Schwinge         <tschwinge@baylibre.com>
! libgrust                All Rust front end maintainers
  libiberty               Ian Lance Taylor        <ian@airs.com>
  libitm                  Torvald Riegel          <triegel@redhat.com>
  libobjc                 Nicola Pero             <nicola.pero@meta-innovation.com>
--- 224,240 ----
  libbacktrace            Ian Lance Taylor        <ian@airs.com>
  libcpp                  Per Bothner             <per@bothner.com>
  libcpp                  David Malcolm           <dmalcolm@redhat.com>
! libcpp                  Jason Merrill           <jason@redhat.com>
! libcpp                  Joseph Myers            <josmyers@redhat.com>
! libcpp                  Nathan Sidwell          <nathan@acm.org>
  libga68                 Jose E. Marchesi        <jemarch@gnu.org>
  libgcc                  Ian Lance Taylor        <ian@airs.com>
  libgo                   Ian Lance Taylor        <ian@airs.com>
  libgomp                 Tobias Burnus           <tburnus@baylibre.com>
  libgomp                 Jakub Jelinek           <jakub@redhat.com>
  libgomp (OpenACC)       Thomas Schwinge         <tschwinge@baylibre.com>
! libgrust                Arthur Cohen            <arthur.cohen@embecosm.com>
! libgrust                Philip Herron           <herron.philip@googlemail.com>
  libiberty               Ian Lance Taylor        <ian@airs.com>
  libitm                  Torvald Riegel          <triegel@redhat.com>
  libobjc                 Nicola Pero             <nicola.pero@meta-innovation.com>
*************** from other maintainers or reviewers.
*** 338,350 ****
  
  Name                            BZ account      Email
  
- Soumya AR                       soumyaa         <soumyaa@nvidia.com>
  Spencer Abson                   sabson          <spencer.abson@student.manchester.ac.uk>
  Mark G. Adams                   mgadams         <mark.g.adams@sympatico.ca>
  Ajit Kumar Agarwal              aagarwa         <aagarwa1@linux.ibm.com>
  Pedro Alves                     palves          <palves@redhat.com>
  John David Anglin               danglin         <dave.anglin@bell.net>
  Harald Anlauf                   anlauf          <anlauf@gmx.de>
  Paul-Antoine Arras              parras          <parras@baylibre.com>
  Arsen Arsenović                 arsen           <aarsenovic@baylibre.com>
  Raksit Ashok                    raksit          <raksit@google.com>
--- 343,355 ----
  
  Name                            BZ account      Email
  
  Spencer Abson                   sabson          <spencer.abson@student.manchester.ac.uk>
  Mark G. Adams                   mgadams         <mark.g.adams@sympatico.ca>
  Ajit Kumar Agarwal              aagarwa         <aagarwa1@linux.ibm.com>
  Pedro Alves                     palves          <palves@redhat.com>
  John David Anglin               danglin         <dave.anglin@bell.net>
  Harald Anlauf                   anlauf          <anlauf@gmx.de>
+ Soumya AR                       soumyaa         <soumyaa@nvidia.com>
  Paul-Antoine Arras              parras          <parras@baylibre.com>
  Arsen Arsenović                 arsen           <aarsenovic@baylibre.com>
  Raksit Ashok                    raksit          <raksit@google.com>
*************** Thomas Fitzsimmons              fitzsim
*** 493,498 ****
--- 498,504 ----
  Alexander Fomin                 afomin          <afomin.mailbox@gmail.com>
  Brian Ford                      ford            <ford@vss.fsi.com>
  Matthew Fortune                 mpf             <mfortune@gmail.com>
+ Kael Andrew Franco              kael            <kael@gcc.gnu.org>
  Daniel Franke                   dfranke         <franke.daniel@gmail.com>
  John Freeman                    jfreeman        <jfreeman08@gmail.com>
  Nathan Froyd                    froydnj         <froydnj@gcc.gnu.org>
*************** Prathamesh Kulkarni             prathame
*** 622,631 ****
  Venkataramanan Kumar            vekumar         <venkataramanan.kumar@amd.com>
  Maxim Kuvyrkov                  mkuvyrkov       <maxim.kuvyrkov@linaro.org>
  Doug Kwan                       dougkwan        <dougkwan@google.com>
- Aaron W. LaFramboise            aaronwl         <aaronavay62@aaronwl.com>
  Scott Robert Ladd               srladd          <scott.ladd@coyotegulch.com>
  Razya Ladelsky                  razya           <razya@gcc.gnu.org>
  Thierry Lafage                  tlafage         <thierry.lafage@inria.fr>
  Rask Ingemann Lambertsen        rask            <ccc94453@vip.cybercity.dk>
  Jerome Lambourg                 lambourg        <lambourg@adacore.com>
  Tim Lange                       tlange          <mail@tim-lange.me>
--- 628,637 ----
  Venkataramanan Kumar            vekumar         <venkataramanan.kumar@amd.com>
  Maxim Kuvyrkov                  mkuvyrkov       <maxim.kuvyrkov@linaro.org>
  Doug Kwan                       dougkwan        <dougkwan@google.com>
  Scott Robert Ladd               srladd          <scott.ladd@coyotegulch.com>
  Razya Ladelsky                  razya           <razya@gcc.gnu.org>
  Thierry Lafage                  tlafage         <thierry.lafage@inria.fr>
+ Aaron W. LaFramboise            aaronwl         <aaronavay62@aaronwl.com>
  Rask Ingemann Lambertsen        rask            <ccc94453@vip.cybercity.dk>
  Jerome Lambourg                 lambourg        <lambourg@adacore.com>
  Tim Lange                       tlange          <mail@tim-lange.me>
*************** Renlin Li                       renlin
*** 648,654 ****
  Xinliang David Li               davidxl         <davidxl@google.com>
  Kewen Lin                       linkw           <linkw@gcc.gnu.org>
  Chen Liqin                      liqin           <liqin.gcc@gmail.com>
! Martin Liska                    marxin          <mliska@suse.cz>
  Hao Liu                         hliu            <hliu@os.amperecomputing.com>
  Hongtao Liu                     liuhongt        <hongtao.liu@intel.com>
  Jiangning Liu                   liujiangning    <jiangning.liu@arm.com>
--- 654,660 ----
  Xinliang David Li               davidxl         <davidxl@google.com>
  Kewen Lin                       linkw           <linkw@gcc.gnu.org>
  Chen Liqin                      liqin           <liqin.gcc@gmail.com>
! Martin Liška                    marxin          <mliska@suse.cz>
  Hao Liu                         hliu            <hliu@os.amperecomputing.com>
  Hongtao Liu                     liuhongt        <hongtao.liu@intel.com>
  Jiangning Liu                   liujiangning    <jiangning.liu@arm.com>
*************** Christophe Lyon                 clyon
*** 670,677 ****
  Jin Ma                          majin           <jinma@linux.alibaba.com>
  Jun Ma                          junma           <junma@linux.alibaba.com>
  Yuao Ma                         yuao            <yuao@gcc.gnu.org>
- Andrew MacLeod                  amacleod        <amacleod@redhat.com>
  Luis Machado                    luisgpm         <luis.machado.foss@gmail.com>
  Ziga Mahkovec                   ziga            <ziga.mahkovec@klika.si>
  Vladimir Makarov                vmakarov        <vmakarov@redhat.com>
  David Malcolm                   dmalcolm        <dmalcolm@redhat.com>
--- 676,683 ----
  Jin Ma                          majin           <jinma@linux.alibaba.com>
  Jun Ma                          junma           <junma@linux.alibaba.com>
  Yuao Ma                         yuao            <yuao@gcc.gnu.org>
  Luis Machado                    luisgpm         <luis.machado.foss@gmail.com>
+ Andrew MacLeod                  amacleod        <amacleod@redhat.com>
  Ziga Mahkovec                   ziga            <ziga.mahkovec@klika.si>
  Vladimir Makarov                vmakarov        <vmakarov@redhat.com>
  David Malcolm                   dmalcolm        <dmalcolm@redhat.com>
*************** Thomas Neumann                  tneumann
*** 727,733 ****
  Dan Nicolaescu                  dann            <dann@ics.uci.edu>
  Kelvin Nilsen                   kelvin          <kelvin.nilsen@gmail.com>
  Hans-Peter Nilsson              hp              <hp@axis.com>
! James Norris
  Diego Novillo                   dnovillo        <dnovillo@google.com>
  Dorit Nuzman                    dorit           <dorit@il.ibm.com>
  David O'Brien                   obrien          <obrien@FreeBSD.org>
--- 733,739 ----
  Dan Nicolaescu                  dann            <dann@ics.uci.edu>
  Kelvin Nilsen                   kelvin          <kelvin.nilsen@gmail.com>
  Hans-Peter Nilsson              hp              <hp@axis.com>
! James Norris                    -               <jnorris@codesourcery.com>
  Diego Novillo                   dnovillo        <dnovillo@google.com>
  Dorit Nuzman                    dorit           <dorit@il.ibm.com>
  David O'Brien                   obrien          <obrien@FreeBSD.org>
*************** Navid Rahimi                    navidr
*** 778,783 ****
--- 784,790 ----
  Rishi Raj                       rshraj45035     <rishiraj45035@gmail.com>
  Easwaran Raman                  eraman          <eraman@google.com>
  Joe Ramsay                      joeramsay       <joe.ramsay@arm.com>
+ Nina Ranns                      ninaranns       <dinka.ranns@gmail.com>
  Rolf Rasmussen                  rolfwr          <rolfwr@gcc.gnu.org>
  Fritz Reese                     foreese         <fritzoreese@gmail.com>
  Volker Reichelt                 reichelt        <v.reichelt@netcologne.de>
*************** Giuseppe D'Angelo
*** 979,986 ****
  Robin Dapp                                      <rdapp.gcc@gmail.com>
  Robin Dapp                                      <rdapp@qti.qualcomm.com>
  Robin Dapp                                      <rdapp@ventanamicro.com>
  Prachi Godbole                                  <pgodbole@nvidia.com>
! Naveen Gowda                                    <naveen.siddegowda@oss.qualcomm.com>
  Aldy Hernandez                                  <aldy@quesejoda.com>
  Michal Jires                                    <mjires@suse.cz>
  Matthias Kretz                                  <m.kretz@gsi.de>
--- 986,994 ----
  Robin Dapp                                      <rdapp.gcc@gmail.com>
  Robin Dapp                                      <rdapp@qti.qualcomm.com>
  Robin Dapp                                      <rdapp@ventanamicro.com>
+ Kael Andrew Franco                              <kaelfandrew@gmail.com>
  Prachi Godbole                                  <pgodbole@nvidia.com>
! Naveen H.S                                      <naveen.siddegowda@oss.qualcomm.com>
  Aldy Hernandez                                  <aldy@quesejoda.com>
  Michal Jires                                    <mjires@suse.cz>
  Matthias Kretz                                  <m.kretz@gsi.de>
diff -Nrcpad gcc-17-20260705/MAINTAINERS.yml gcc-17-20260712/MAINTAINERS.yml
*** gcc-17-20260705/MAINTAINERS.yml	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/MAINTAINERS.yml	Sun Jul 12 22:32:05 2026
***************
*** 0 ****
--- 1,6165 ----
+ users:
+ - sn: Abson
+   cn: Spencer Abson
+   email:
+   - spencer.abson@student.manchester.ac.uk
+   - sabson@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: sabson
+ - sn: Adams
+   cn: Mark G. Adams
+   email:
+   - mark.g.adams@sympatico.ca
+   - mgadams@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: mgadams
+   inactive: true
+ - sn: Agarwal
+   cn: Ajit Kumar Agarwal
+   email:
+   - aagarwa1@linux.ibm.com
+   - aagarwa@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: aagarwa
+ - sn: Alves
+   cn: Pedro Alves
+   email:
+   - palves@redhat.com
+   - palves@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: palves
+   inactive: true
+ - sn: Anglin
+   cn: John David Anglin
+   email:
+   - dave.anglin@bell.net
+   - danglin@gcc.gnu.org
+   roles:
+   - Maintainer: hppa port
+   - Maintainer: hpux
+   - WriteAfter
+   account: danglin
+ - sn: Anlauf
+   cn: Harald Anlauf
+   email:
+   - anlauf@gmx.de
+   - anlauf@gcc.gnu.org
+   roles:
+   - Reviewer: Fortran
+   - WriteAfter
+   account: anlauf
+ - sn: AR
+   cn: Soumya AR
+   email:
+   - soumyaa@nvidia.com
+   - soumyaa@gcc.gnu.org
+   roles:
+   - WriteAfter
+   - DCO: soumyaa@nvidia.com
+   account: soumyaa
+ - sn: Arras
+   cn: Paul-Antoine Arras
+   email:
+   - parras@baylibre.com
+   - parras@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: parras
+ - sn: Arsenović
+   cn: Arsen Arsenović
+   email:
+   - aarsenovic@baylibre.com
+   - arsen@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: arsen
+ - sn: Ashok
+   cn: Raksit Ashok
+   email:
+   - raksit@google.com
+   - raksit@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: raksit
+   inactive: true
+ - sn: Augustine
+   cn: Sterling Augustine
+   email:
+   - augustine.sterling@gmail.com
+   - sterling@gcc.gnu.org
+   roles:
+   - Maintainer: xtensa port
+   - WriteAfter
+   account: sterling
+ - sn: Austern
+   cn: Matt Austern
+   email:
+   - austern@google.com
+   - austern@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: austern
+   inactive: true
+ - sn: Ayers
+   cn: David Ayers
+   email:
+   - ayers@fsfe.org
+   - ayers@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: ayers
+   inactive: true
+ - sn: Bahuguna
+   cn: Prakhar Bahuguna
+   email:
+   - prakhar.bahuguna@arm.com
+   - prakhar@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: prakhar
+   inactive: true
+ - sn: Bajo
+   cn: Giovanni Bajo
+   email:
+   - giovannibajo@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: giovannibajo
+   inactive: true
+ - sn: Baldwin
+   cn: Simon Baldwin
+   email:
+   - simonb@google.com
+   - simonb@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: simonb
+   inactive: true
+ - sn: Ball
+   cn: Richard Ball
+   email:
+   - richard.ball@arm.com
+   - ricbal02@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: ricbal02
+ - sn: Bambrough
+   cn: Scott Bambrough
+   email:
+   - scottb@netwinder.org
+   - scottb@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: scottb
+   inactive: true
+ - sn: Bangerth
+   cn: Wolfgang Bangerth
+   email:
+   - bangerth@dealii.org
+   - bangerth@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: bangerth
+   inactive: true
+ - sn: Bantaloukas
+   cn: Claudio Bantaloukas
+   email:
+   - claudio.bantaloukas@arm.com
+   - rdfm@gcc.gnu.org
+   roles:
+   - Maintainer: forge integration
+   - WriteAfter
+   account: rdfm
+ - sn: Barany
+   cn: Gergö Barany
+   email:
+   - gergo@codesourcery.com
+   - gergo@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: gergo
+   inactive: true
+ - sn: Barboza
+   cn: Daniel Barboza
+   email:
+   - daniel.barboza@oss.qualcomm.com
+   - dbarboza@gcc.gnu.org
+   - dbarboza@qti.qualcomm.com
+   - dbarboza@ventanamicro.com
+   roles:
+   - WriteAfter
+   - DCO: dbarboza@qti.qualcomm.com
+   - DCO: dbarboza@ventanamicro.com
+   account: dbarboza
+   aliases:
+   - Daniel Henrique Barboza
+ - sn: Bauermann
+   cn: Thiago Jung Bauermann
+   email:
+   - thiago.bauermann@linaro.org
+   - bauermann@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: bauermann
+ - sn: Baylis
+   cn: Charles Baylis
+   email:
+   - charles.baylis@linaro.org
+   - cbaylis@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: cbaylis
+   inactive: true
+ - sn: Bazley
+   cn: Christopher Bazley
+   email:
+   - chris.bazley@arm.com
+   - chrbaz01@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: chrbaz01
+   aliases:
+   - Chris Bazley
+ - sn: Belagod
+   cn: Tejas Belagod
+   email:
+   - tejas.belagod@arm.com
+   - belagod@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: belagod
+ - sn: Belevantsev
+   cn: Andrey Belevantsev
+   email:
+   - abel@ispras.ru
+   - abel@gcc.gnu.org
+   roles:
+   - Reviewer: selective scheduling
+   - WriteAfter
+   account: abel
+   inactive: true
+ - sn: Beliveau
+   cn: Matthew Beliveau
+   email:
+   - mbelivea@redhat.com
+   - mbelivea@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: mbelivea
+   inactive: true
+ - sn: Belyshev
+   cn: Serge Belyshev
+   email:
+   - belyshev@depni.sinp.msu.ru
+   - ssb@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: ssb
+   inactive: true
+ - sn: Beniston
+   cn: Jon Beniston
+   email:
+   - jon@beniston.com
+   - jbeniston@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: jbeniston
+   inactive: true
+ - sn: Bennett
+   cn: Andrew Bennett
+   email:
+   - andrew.bennett@imgtec.com
+   - abennett@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: abennett
+ - sn: Benson
+   cn: Andrew Benson
+   email:
+   - abensonca@gmail.com
+   - abensonca@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: abensonca
+   inactive: true
+ - sn: Bergner
+   cn: Peter Bergner
+   email:
+   - bergner@tenstorrent.com
+   - bergner@gcc.gnu.org
+   roles:
+   - Reviewer: register allocation
+   - WriteAfter
+   - DCO: bergner@tenstorrent.com
+   account: bergner
+ - sn: Berlin
+   cn: Daniel Berlin
+   email:
+   - dberlin@dberlin.org
+   - dberlin@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: dberlin
+   inactive: true
+ - sn: Bernardi
+   cn: Pat Bernardi
+   email:
+   - bernardi@adacore.com
+   - pbernardi@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: pbernardi
+   inactive: true
+ - sn: Beulich
+   cn: Jan Beulich
+   email:
+   - jbeulich@suse.com
+   - jbeulich@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: jbeulich
+ - sn: Bhagat
+   cn: Indu Bhagat
+   email:
+   - indu.bhagat@oracle.com
+   - ibhagat@gcc.gnu.org
+   roles:
+   - Reviewer: CTF, BTF
+   - WriteAfter
+   account: ibhagat
+ - sn: Biener
+   cn: Richard Biener
+   email:
+   - rguenther@suse.de
+   - rguenth@gcc.gnu.org
+   roles:
+   - Global
+   - Maintainer: middle-end
+   - Maintainer: vectorizer (+ tree-if-conv)
+   - Reviewer: LTO
+   - WriteAfter
+   account: rguenth
+ - sn: Billinghurst
+   cn: David Billinghurst
+   email:
+   - David.Billinghurst@riotinto.com
+   - billingd@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: billingd
+   inactive: true
+ - sn: Bily
+   cn: Tomas Bily
+   email:
+   - tbily@suse.cz
+   - tomby@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: tomby
+   inactive: true
+ - sn: Biveinis
+   cn: Laurynas Biveinis
+   email:
+   - laurynas.biveinis@gmail.com
+   - lauras@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: lauras
+   inactive: true
+ - sn: Bizjak
+   cn: Uros Bizjak
+   email:
+   - ubizjak@gmail.com
+   - uros@gcc.gnu.org
+   roles:
+   - Maintainer: i386 port
+   - WriteAfter
+   account: uros
+ - sn: Blake
+   cn: Eric Blake
+   email:
+   - ericb@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: ericb
+   inactive: true
+ - sn: Blomqvist
+   cn: Janne Blomqvist
+   email:
+   - jb@gcc.gnu.org
+   roles:
+   - Reviewer: Fortran
+   - WriteAfter
+   account: jb
+   inactive: true
+ - sn: Blundell
+   cn: Phil Blundell
+   email:
+   - pb@futuretv.com
+   - pb@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: pb
+   inactive: true
+ - sn: Boehm
+   cn: Hans Boehm
+   email:
+   - hboehm@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: hboehm
+   inactive: true
+ - sn: Boessenkool
+   cn: Segher Boessenkool
+   email:
+   - segher@kernel.crashing.org
+   - segher@gcc.gnu.org
+   roles:
+   - Maintainer: rs6000/powerpc port
+   - Maintainer: instruction combiner
+   - WriteAfter
+   account: segher
+ - sn: Boger
+   cn: Lynn Boger
+   email:
+   - laboger@linux.vnet.ibm.com
+   - boger@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: boger
+   inactive: true
+ - sn: Bolton
+   cn: Ian Bolton
+   email:
+   - ian.bolton@arm.com
+   - ibolton@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: ibolton
+   inactive: true
+ - sn: Bona
+   cn: Andrea Bona
+   email:
+   - andrea.bona@st.com
+   - andreabo@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: andreabo
+   inactive: true
+ - sn: Bonzini
+   cn: Paolo Bonzini
+   email:
+   - bonzini@gnu.org
+   - bonzini@gcc.gnu.org
+   roles:
+   - Maintainer: build machinery (*.in)
+   - Reviewer: dataflow
+   - WriteAfter
+   account: bonzini
+ - sn: Booth
+   cn: Neil Booth
+   email:
+   - neil@daikokuya.co.uk
+   - neil@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: neil
+   inactive: true
+ - sn: Bosscher
+   cn: Steven Bosscher
+   email:
+   - steven@gcc.gnu.org
+   roles:
+   - Reviewer: RTL optimizers
+   - WriteAfter
+   account: steven
+   inactive: true
+ - sn: Botcazou
+   cn: Eric Botcazou
+   email:
+   - ebotcazou@libertysurf.fr
+   - ebotcazou@gcc.gnu.org
+   - ebotcazou@adacore.com
+   roles:
+   - Maintainer: sparc port
+   - Maintainer: visium port
+   - Maintainer: Ada front end
+   - Maintainer: RTL optimizers
+   - WriteAfter
+   account: ebotcazou
+ - sn: Bothner
+   cn: Per Bothner
+   email:
+   - per@bothner.com
+   - bothner@gcc.gnu.org
+   roles:
+   - Maintainer: libcpp
+   - WriteAfter
+   account: bothner
+   inactive: true
+ - sn: Boucher
+   cn: Antoni Boucher
+   email:
+   - bouanto@zoho.com
+   - antoyo@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: antoyo
+ - sn: Bourdeauducq
+   cn: Sebastien Bourdeauducq
+   email:
+   - sebastien@milkymist.org
+   - lekernel@gcc.gnu.org
+   roles:
+   - Maintainer: lm32 port
+   - WriteAfter
+   account: lekernel
+   inactive: true
+ - sn: Bowdidge
+   cn: Robert Bowdidge
+   email:
+   - bowdidge@apple.com
+   - bowdidge@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: bowdidge
+   inactive: true
+ - sn: Bowman
+   cn: James Bowman
+   email:
+   - james.bowman@ftdichip.com
+   - jamesbowman@gcc.gnu.org
+   roles:
+   - Maintainer: ft32 port
+   - WriteAfter
+   account: jamesbowman
+   inactive: true
+ - sn: Brobecker
+   cn: Joel Brobecker
+   email:
+   - brobecker@gnat.com
+   - brobecke@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: brobecke
+   inactive: true
+ - sn: Brolley
+   cn: Dave Brolley
+   email:
+   - brolley@redhat.com
+   - brolley@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: brolley
+   inactive: true
+ - sn: Brown
+   cn: Julian Brown
+   email:
+   - julian@codesourcery.com
+   - jules@gcc.gnu.org
+   roles:
+   - Maintainer: amdgcn port
+   - WriteAfter
+   account: jules
+ - sn: Bruel
+   cn: Christian Bruel
+   email:
+   - christian.bruel@st.com
+   - chrbr@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: chrbr
+   inactive: true
+ - sn: Buclaw
+   cn: Iain Buclaw
+   email:
+   - ibuclaw@gdcproject.org
+   - ibuclaw@gcc.gnu.org
+   roles:
+   - Maintainer: D front end
+   - Maintainer: libphobos
+   - WriteAfter
+   account: ibuclaw
+ - sn: Buettner
+   cn: Kevin Buettner
+   email:
+   - kevinb@redhat.com
+   - kevinb@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: kevinb
+ - sn: Burgess
+   cn: Andrew Burgess
+   email:
+   - aburgess@redhat.com
+   - aburgess@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: aburgess
+ - sn: Burnus
+   cn: Tobias Burnus
+   email:
+   - tburnus@baylibre.com
+   - burnus@gcc.gnu.org
+   roles:
+   - Maintainer: libgomp
+   - Maintainer: libquadmath
+   - Maintainer: OpenACC
+   - Maintainer: OpenMP
+   - Reviewer: Fortran
+   - WriteAfter
+   account: burnus
+ - sn: Butcher
+   cn: Adam Butcher
+   email:
+   - adam@jessamine.co.uk
+   - abutcher@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: abutcher
+   inactive: true
+ - sn: Cagney
+   cn: Andrew Cagney
+   email:
+   - cagney@gnu.org
+   - cagney@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: cagney
+   inactive: true
+ - sn: Carlini
+   cn: Paolo Carlini
+   email:
+   - pcarlini@gmail.com
+   - paolo@gcc.gnu.org
+   roles:
+   - Maintainer: c++ runtime libs
+   - WriteAfter
+   account: paolo
+   inactive: true
+ - sn: Carlotti
+   cn: Alice Carlotti
+   email:
+   - alice.carlotti@arm.com
+   - acarlotti@gcc.gnu.org
+   roles:
+   - Reviewer: aarch64 port
+   - WriteAfter
+   account: acarlotti
+ - sn: Carrera
+   cn: Daniel Carrera
+   email:
+   - dcarrera@gmail.com
+   - dcarrera@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: dcarrera
+   inactive: true
+ - sn: Carrez
+   cn: Stephane Carrez
+   email:
+   - stcarrez@nerim.fr
+   - ciceron@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: ciceron
+   inactive: true
+ - sn: Charette
+   cn: Gabriel Charette
+   email:
+   - gchare@google.com
+   - gchare@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: gchare
+   inactive: true
+ - sn: Charlet
+   cn: Arnaud Charlet
+   email:
+   - charlet@adacore.com
+   - charlet@gcc.gnu.org
+   roles:
+   - Maintainer: Ada front end
+   - WriteAfter
+   account: charlet
+ - sn: Chavva
+   cn: Chandra Chavva
+   email:
+   - cchavva@redhat.com
+   - cchavva@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: cchavva
+   inactive: true
+ - sn: Chawla
+   cn: Dhruv Chawla
+   email:
+   - dhruvc@nvidia.com
+   - dhruvc@gcc.gnu.org
+   roles:
+   - WriteAfter
+   - DCO: dhruvc@nvidia.com
+   account: dhruvc
+ - sn: Chen
+   cn: Dehao Chen
+   email:
+   - dehao@google.com
+   - dehao@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: dehao
+   inactive: true
+ - sn: Chen
+   cn: Zhongyao Chen
+   email:
+   - chenzhongyao.hit@gmail.com
+   - zhongyao@gcc.gnu.org
+   - chen.zhongyao@zte.com.cn
+   roles:
+   - WriteAfter
+   - DCO: chen.zhongyao@zte.com.cn
+   - DCO: chenzhongyao.hit@gmail.com
+   account: zhongyao
+   aliases:
+   - zhongyao
+ - sn: Chêne
+   cn: Fabien Chêne
+   email:
+   - fabien@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: fabien
+   inactive: true
+ - sn: Cheng
+   cn: Bin Cheng
+   email:
+   - bin.cheng@linux.alibaba.com
+   - amker@gcc.gnu.org
+   roles:
+   - Maintainer: loop ivopts
+   - Maintainer: loop optimizer
+   - WriteAfter
+   account: amker
+   inactive: true
+ - sn: Cheng
+   cn: Kito Cheng
+   email:
+   - kito.cheng@gmail.com
+   - kito@gcc.gnu.org
+   - kito.cheng@sifive.com
+   roles:
+   - Maintainer: riscv port
+   - WriteAfter
+   account: kito
+ - sn: Cheng
+   cn: Lulu Cheng
+   email:
+   - chenglulu@loongson.cn
+   - chenglulu@gcc.gnu.org
+   roles:
+   - Maintainer: LoongArch port
+   - WriteAfter
+   account: chenglulu
+   aliases:
+   - ChengLulu
+ - sn: Chertykov
+   cn: Denis Chertykov
+   email:
+   - chertykov@gmail.com
+   - denisc@gcc.gnu.org
+   roles:
+   - Maintainer: avr port
+   - WriteAfter
+   account: denisc
+ - sn: Chiang
+   cn: Monk Chiang
+   email:
+   - monkchiang@gmail.com
+   - monkc@gcc.gnu.org
+   - monk.chiang@sifive.com
+   roles:
+   - WriteAfter
+   account: monkc
+ - sn: Chigot
+   cn: Clément Chigot
+   email:
+   - chigot@adacore.com
+   - helflym@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: helflym
+ - sn: Chopra
+   cn: Harshit Chopra
+   email:
+   - harshit@google.com
+   - harshit@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: harshit
+   inactive: true
+ - sn: Christ
+   cn: Juergen Christ
+   email:
+   - jchrist@linux.ibm.com
+   - jchrist@gcc.gnu.org
+   roles:
+   - WriteAfter
+   - DCO: jchrist@linux.ibm.com
+   account: jchrist
+ - sn: Christina
+   cn: Tamar Christina
+   email:
+   - tamar.christina@arm.com
+   - tnfchris@gcc.gnu.org
+   roles:
+   - Maintainer: aarch64 port
+   - Maintainer: vectorizer (+ tree-if-conv)
+   - WriteAfter
+   account: tnfchris
+ - sn: Christopher
+   cn: Eric Christopher
+   email:
+   - echristo@gmail.com
+   - echristo@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: echristo
+   inactive: true
+ - sn: Clarke
+   cn: Paul Clarke
+   email:
+   - pc@us.ibm.com
+   - pc@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: pc
+   inactive: true
+ - sn: Clifton
+   cn: Nick Clifton
+   email:
+   - nickc@redhat.com
+   - nickc@gcc.gnu.org
+   roles:
+   - Maintainer: arm port
+   - Maintainer: fr30 port
+   - Maintainer: frv port
+   - Maintainer: iq2000 port
+   - Maintainer: m32r port
+   - Maintainer: mcore port
+   - Maintainer: msp430 port
+   - Maintainer: rx port
+   - Maintainer: v850 port
+   - Maintainer: xstormy16 port
+   - WriteAfter
+   account: nickc
+ - sn: Cohen
+   cn: Arthur Cohen
+   email:
+   - arthur.cohen@embecosm.com
+   - cohenarthur@gcc.gnu.org
+   roles:
+   - Maintainer: Rust
+   - Maintainer: libgrust
+   - WriteAfter
+   account: cohenarthur
+ - sn: Cohen
+   cn: William Cohen
+   email:
+   - wcohen@redhat.com
+   - wcohen@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: wcohen
+   inactive: true
+ - sn: Collison
+   cn: Michael Collison
+   email:
+   - michael.collison@arm.com
+   - collison@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: collison
+   inactive: true
+ - sn: Colomar
+   cn: Alejandro Colomar
+   email:
+   - alx@kernel.org
+   - alx@gcc.gnu.org
+   roles:
+   - WriteAfter
+   - DCO: alx@kernel.org
+   account: alx
+ - sn: Conner
+   cn: Josh Conner
+   email:
+   - joshconner@google.com
+   - jconner@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: jconner
+   inactive: true
+ - sn: Cook
+   cn: R. Kelley Cook
+   email:
+   - kcook@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: kcook
+   inactive: true
+ - sn: Coplan
+   cn: Alex Coplan
+   email:
+   - alex.coplan@arm.com
+   - acoplan@gcc.gnu.org
+   roles:
+   - Maintainer: aarch64 ldp/stp
+   - Maintainer: pair fusion
+   - Reviewer: aarch64 port
+   - WriteAfter
+   account: acoplan
+ - sn: Corallo
+   cn: Andrea Corallo
+   email:
+   - andrea.corallo@arm.com
+   - akrl@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: akrl
+ - sn: Cornelssen
+   cn: Christian Cornelssen
+   email:
+   - ccorn@cs.tu-berlin.de
+   - ccorn@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: ccorn
+   inactive: true
+ - sn: Corsepius
+   cn: Ralf Corsepius
+   email:
+   - ralf.corsepius@rtems.org
+   - corsepiu@gcc.gnu.org
+   roles:
+   - Maintainer: RTEMS Ports
+   - WriteAfter
+   account: corsepiu
+   inactive: true
+ - sn: Coudert
+   cn: François-Xavier Coudert
+   email:
+   - fxcoudert@gcc.gnu.org
+   roles:
+   - Reviewer: Fortran
+   - WriteAfter
+   account: fxcoudert
+ - sn: Courtès
+   cn: Ludovic Courtès
+   email:
+   - ludo@gnu.org
+   - ludo@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: ludo
+   inactive: true
+ - sn: Coutant
+   cn: Cary Coutant
+   email:
+   - ccoutant@gmail.com
+   - ccoutant@gcc.gnu.org
+   roles:
+   - Maintainer: dwarf debugging code
+   - Reviewer: LTO plugin
+   - WriteAfter
+   account: ccoutant
+   inactive: true
+ - sn: Crowl
+   cn: Lawrence Crowl
+   email:
+   - crowl@google.com
+   - crowl@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: crowl
+   inactive: true
+ - sn: Cui
+   cn: Lili Cui
+   email:
+   - lili.cui@intel.com
+   - cuilili@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: cuilili
+   aliases:
+   - Cui, Lili
+ - sn: D'Angelo
+   cn: Giuseppe D'Angelo
+   email:
+   - giuseppe.dangelo@kdab.com
+   - peppe@gcc.gnu.org
+   roles:
+   - WriteAfter
+   - DCO: giuseppe.dangelo@kdab.com
+   account: peppe
+ - sn: Dabbelt
+   cn: Palmer Dabbelt
+   email:
+   - palmer@dabbelt.com
+   - palmer@gcc.gnu.org
+   roles:
+   - Maintainer: riscv port
+   - WriteAfter
+   account: palmer
+ - sn: Dall
+   cn: Ian Dall
+   email:
+   - ian@beware.dropbear.id.au
+   - iandall@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: iandall
+   inactive: true
+ - sn: Daney
+   cn: David Daney
+   email:
+   - david.daney@caviumnetworks.com
+   - daney@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: daney
+   inactive: true
+ - sn: Dapp
+   cn: Robin Dapp
+   email:
+   - rdapp.gcc@gmail.com
+   - rdapp@gcc.gnu.org
+   - rdapp@qti.qualcomm.com
+   - rdapp@ventanamicro.com
+   - robin.dapp@oss.qualcomm.com
+   roles:
+   - Maintainer: riscv port
+   - Reviewer: vectorizer (+ tree-if-conv)
+   - WriteAfter
+   - DCO: rdapp.gcc@gmail.com
+   - DCO: rdapp@qti.qualcomm.com
+   - DCO: rdapp@ventanamicro.com
+   account: rdapp
+ - sn: Dardis
+   cn: Simon Dardis
+   email:
+   - simon.dardis@gmail.com
+   - dardiss@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: dardiss
+   inactive: true
+ - sn: Das
+   cn: Sudakshina Das
+   email:
+   - sudi.das@arm.com
+   - sudi@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: sudi
+   inactive: true
+ - sn: Davis
+   cn: Bud Davis
+   email:
+   - jmdavis@link.com
+   - bdavis@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: bdavis
+   inactive: true
+ - sn: DeLisle
+   cn: Jerry DeLisle
+   email:
+   - jvdelisle@gcc.gnu.org
+   roles:
+   - Reviewer: Fortran
+   - WriteAfter
+   account: jvdelisle
+ - sn: Delorie
+   cn: DJ Delorie
+   email:
+   - dj@delorie.com
+   - dj@gcc.gnu.org
+   roles:
+   - Maintainer: DJGPP
+   - WriteAfter
+   account: dj
+   inactive: true
+ - sn: Demetriou
+   cn: Chris Demetriou
+   email:
+   - cgd@google.com
+   - cgd@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: cgd
+   inactive: true
+ - sn: Dennett
+   cn: James Dennett
+   email:
+   - jdennett@acm.org
+   roles:
+   - BZ
+   inactive: true
+ - sn: Deshpande
+   cn: Sameera Deshpande
+   email:
+   - sameera.deshpande@linaro.org
+   - sameerad@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: sameerad
+   inactive: true
+ - sn: Dijkstra
+   cn: Wilco Dijkstra
+   email:
+   - wilco.dijkstra@arm.com
+   - wilco@gcc.gnu.org
+   roles:
+   - Reviewer: aarch64 port
+   - WriteAfter
+   account: wilco
+ - sn: Dimitrov
+   cn: Dimitar Dimitrov
+   email:
+   - dimitar@dinux.eu
+   - dimitar@gcc.gnu.org
+   roles:
+   - Maintainer: pru port
+   - WriteAfter
+   account: dimitar
+ - sn: Dinechin
+   cn: Benoit Dupont de Dinechin
+   email:
+   - benoit.dupont-de-dinechin@st.com
+   - bd3@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: bd3
+   inactive: true
+ - sn: Ding
+   cn: Lehua Ding
+   email:
+   - lehua.ding@rivai.ai
+   - lhtin@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: lhtin
+ - sn: Drepper
+   cn: Ulrich Drepper
+   email:
+   - drepper@gmail.com
+   - drepper@gcc.gnu.org
+   roles:
+   - Maintainer: c++ runtime libs
+   - WriteAfter
+   account: drepper
+ - sn: Dubner
+   cn: Robert Dubner
+   email:
+   - rdubner@symas.com
+   - rdubner@gcc.gnu.org
+   roles:
+   - Maintainer: COBOL front end
+   - WriteAfter
+   account: rdubner
+   aliases:
+   - Bob Dubner
+ - sn: Dumont
+   cn: François Dumont
+   email:
+   - fdumont@gcc.gnu.org
+   - frs.dumont@gmail.com
+   roles:
+   - Maintainer: c++ runtime libs special modes
+   - WriteAfter
+   account: fdumont
+ - sn: Dvorak
+   cn: Zdenek Dvorak
+   email:
+   - ook@ucw.cz
+   - rakdver@gcc.gnu.org
+   roles:
+   - Maintainer: loop infrastructure
+   - Maintainer: vectorizer (+ tree-if-conv)
+   - Reviewer: loop optimizer
+   - WriteAfter
+   account: rakdver
+   inactive: true
+ - sn: Eager
+   cn: Michael Eager
+   email:
+   - eager@eagercon.com
+   - eager@gcc.gnu.org
+   roles:
+   - Maintainer: microblaze
+   - WriteAfter
+   account: eager
+   aliases:
+   - Michael J. Eager
+ - sn: Earnshaw
+   cn: Richard Earnshaw
+   email:
+   - richard.earnshaw@arm.com
+   - rearnsha@gcc.gnu.org
+   - rearnsha@arm.com
+   roles:
+   - Global
+   - Maintainer: aarch64 port
+   - Maintainer: arm port
+   - WriteAfter
+   account: rearnsha
+ - sn: Eckhardt
+   cn: Jason Eckhardt
+   email:
+   - jle@rice.edu
+   - jle@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: jle
+   inactive: true
+ - sn: Edelmann
+   cn: Erik Edelmann
+   email:
+   - erik.edelmann@iki.fi
+   - eedelman@gcc.gnu.org
+   roles:
+   - Reviewer: Fortran
+   - WriteAfter
+   account: eedelman
+   inactive: true
+ - sn: Edelsohn
+   cn: David Edelsohn
+   email:
+   - dje.gcc@gmail.com
+   - dje@gcc.gnu.org
+   roles:
+   - Maintainer: rs6000/powerpc port
+   - Maintainer: aix
+   - WriteAfter
+   account: dje
+ - sn: Edlinger
+   cn: Bernd Edlinger
+   email:
+   - bernd.edlinger@hotmail.de
+   - edlinger@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: edlinger
+ - sn: Edwards
+   cn: Phil Edwards
+   email:
+   - pme@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: pme
+   inactive: true
+ - sn: Eggleston
+   cn: Mark Eggleston
+   email:
+   - mark.eggleston@codethink.co.uk
+   - markeggleston@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: markeggleston
+   inactive: true
+ - sn: Ehrhardt
+   cn: Christian Ehrhardt
+   email:
+   - ehrhardt@mathematik.uni-ulm.de
+   roles:
+   - BZ
+   inactive: true
+ - sn: Ellcey
+   cn: Steve Ellcey
+   email:
+   - sellcey@caviumnetworks.com
+   - sje@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: sje
+   inactive: true
+ - sn: Elliston
+   cn: Ben Elliston
+   email:
+   - config-patches@gnu.org
+   - bje@gcc.gnu.org
+   roles:
+   - Maintainer: config.sub/config.guess
+   - WriteAfter
+   account: bje
+   inactive: true
+ - sn: Embar
+   cn: Mohan Embar
+   email:
+   - gnustuff@thisiscool.com
+   - membar@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: membar
+   inactive: true
+ - sn: Endo
+   cn: Oleg Endo
+   email:
+   - olegendo@gcc.gnu.org
+   roles:
+   - Maintainer: sh port
+   - WriteAfter
+   account: olegendo
+ - sn: Eres
+   cn: Revital Eres
+   email:
+   - eres@il.ibm.com
+   - revitale@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: revitale
+   inactive: true
+ - sn: Espie
+   cn: Marc Espie
+   email:
+   - espie@cvs.openbsd.org
+   - espie@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: espie
+   inactive: true
+ - sn: Esztermann
+   cn: Ansgar Esztermann
+   email:
+   - ansgar@thphy.uni-duesseldorf.de
+   - ansgar@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: ansgar
+   inactive: true
+ - sn: Evans
+   cn: Doug Evans
+   email:
+   - dje@google.com
+   - devans@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: devans
+   inactive: true
+ - sn: Fairles
+   cn: Chris Fairles
+   email:
+   - cfairles@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: cfairles
+   inactive: true
+ - sn: Fanfarillo
+   cn: Alessandro Fanfarillo
+   email:
+   - fanfarillo.gcc@gmail.com
+   - afanfa@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: afanfa
+   inactive: true
+ - sn: Fang
+   cn: Changpeng Fang
+   email:
+   - changpeng.fang@amd.com
+   - cfang@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: cfang
+   inactive: true
+ - sn: Faust
+   cn: David Faust
+   email:
+   - david.faust@oracle.com
+   - dfaust@gcc.gnu.org
+   roles:
+   - Reviewer: CTF, BTF, bpf port
+   - WriteAfter
+   account: dfaust
+ - sn: Feifer
+   cn: Sam Feifer
+   email:
+   - sfeifer@redhat.com
+   - sfeifer@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: sfeifer
+   inactive: true
+ - sn: Feng
+   cn: Eric Feng
+   email:
+   - ef2648@columbia.edu
+   - efric@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: efric
+ - sn: Feng
+   cn: Li Feng
+   email:
+   - nemokingdom@gmail.com
+   - lifeng@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: lifeng
+   inactive: true
+ - sn: Filippov
+   cn: Max Filippov
+   email:
+   - jcmvbkbc@gmail.com
+   - jcmvbkbc@gcc.gnu.org
+   roles:
+   - Maintainer: xtensa port
+   - WriteAfter
+   account: jcmvbkbc
+ - sn: Fitzsimmons
+   cn: Thomas Fitzsimmons
+   email:
+   - fitzsim@redhat.com
+   - fitzsim@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: fitzsim
+   inactive: true
+ - sn: Fomin
+   cn: Alexander Fomin
+   email:
+   - afomin.mailbox@gmail.com
+   - afomin@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: afomin
+   inactive: true
+ - sn: Ford
+   cn: Brian Ford
+   email:
+   - ford@vss.fsi.com
+   - ford@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: ford
+   inactive: true
+ - sn: Fortune
+   cn: Matthew Fortune
+   email:
+   - mfortune@gmail.com
+   - mpf@gcc.gnu.org
+   - matthew.fortune@imgtec.com
+   roles:
+   - WriteAfter
+   account: mpf
+ - sn: Franco
+   cn: Kael Andrew Franco
+   email:
+   - kael@gcc.gnu.org
+   - kaelfandrew@gmail.com
+   roles:
+   - WriteAfter
+   - DCO: kaelfandrew@gmail.com
+   account: kael
+ - sn: Franke
+   cn: Daniel Franke
+   email:
+   - franke.daniel@gmail.com
+   - dfranke@gcc.gnu.org
+   roles:
+   - Reviewer: Fortran
+   - WriteAfter
+   account: dfranke
+   inactive: true
+ - sn: Freeman
+   cn: John Freeman
+   email:
+   - jfreeman08@gmail.com
+   - jfreeman@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: jfreeman
+   inactive: true
+ - sn: Froyd
+   cn: Nathan Froyd
+   email:
+   - froydnj@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: froydnj
+   inactive: true
+ - sn: Fu
+   cn: Chao-ying Fu
+   email:
+   - fu@mips.com
+   - chaoyingfu@gcc.gnu.org
+   - cfu@wavecomp.com
+   roles:
+   - WriteAfter
+   account: chaoyingfu
+ - sn: Funck
+   cn: Gary Funck
+   email:
+   - gary@intrepid.com
+   - gfunck@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: gfunck
+   inactive: true
+ - sn: Gadad
+   cn: Pompapathi V Gadad
+   email:
+   - Pompapathi.V.Gadad@nsc.com
+   - pompa@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: pompa
+   inactive: true
+ - sn: Gallager
+   cn: Eric Gallager
+   email:
+   - egall@gwmail.gwu.edu
+   - egallager@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: egallager
+ - sn: Ganesh
+   cn: Gopalasubramanian Ganesh
+   email:
+   - Ganesh.Gopalasubramanian@amd.com
+   - gganesh@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: gganesh
+   inactive: true
+ - sn: Gao
+   cn: Fei Gao
+   email:
+   - gaofei@eswincomputing.com
+   - feigao@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: feigao
+ - sn: Ghazi
+   cn: Kaveh Ghazi
+   email:
+   - ghazi@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: ghazi
+   inactive: true
+ - sn: Gilmore
+   cn: Doug Gilmore
+   email:
+   - Doug.Gilmore@imgtec.com
+   - dgilmore@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: dgilmore
+   inactive: true
+ - sn: Gingell
+   cn: Matthew Gingell
+   email:
+   - gingell@gnat.com
+   - gingell@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: gingell
+   inactive: true
+ - sn: Gingold
+   cn: Tristan Gingold
+   email:
+   - tgingold@free.fr
+   - gingold@gcc.gnu.org
+   roles:
+   - Maintainer: VMS
+   - WriteAfter
+   account: gingold
+   inactive: true
+ - sn: Glaw
+   cn: Jan-Benedict Glaw
+   email:
+   - jbglaw@lug-owl.de
+   - jbglaw@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: jbglaw
+ - sn: Glisse
+   cn: Marc Glisse
+   email:
+   - marc.glisse@inria.fr
+   - glisse@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: glisse
+ - sn: Godbole
+   cn: Prachi Godbole
+   email:
+   - pgodbole@nvidia.com
+   - pgodbole@gcc.gnu.org
+   roles:
+   - WriteAfter
+   - DCO: pgodbole@nvidia.com
+   account: pgodbole
+ - sn: Granlund
+   cn: Torbjorn Granlund
+   email:
+   - tege@swox.com
+   roles:
+   - WriteAfter
+   inactive: true
+ - sn: Green
+   cn: Anthony Green
+   email:
+   - green@moxielogic.com
+   - green@gcc.gnu.org
+   roles:
+   - Maintainer: moxie port
+   - WriteAfter
+   account: green
+   inactive: true
+ - sn: Greenhalgh
+   cn: James Greenhalgh
+   email:
+   - james.greenhalgh@arm.com
+   - jgreenhalgh@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: jgreenhalgh
+   inactive: true
+ - sn: Gregor
+   cn: Doug Gregor
+   email:
+   - doug.gregor@gmail.com
+   - dgregor@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: dgregor
+   inactive: true
+ - sn: Gretton-Dann
+   cn: Matthew Gretton-Dann
+   email:
+   - matthew.gretton-dann@arm.com
+   - mgretton@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: mgretton
+   inactive: true
+ - sn: Gribov
+   cn: Yury Gribov
+   email:
+   - tetra2005@gmail.com
+   - ygribov@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: ygribov
+   inactive: true
+ - sn: Grimm
+   cn: Jon Grimm
+   email:
+   - jgrimm2@us.ibm.com
+   - jgrimm@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: jgrimm
+   inactive: true
+ - sn: Grosser
+   cn: Tobias Grosser
+   email:
+   - grosser@fim.uni-passau.de
+   - grosser@gcc.gnu.org
+   roles:
+   - Reviewer: Graphite
+   - WriteAfter
+   account: grosser
+   inactive: true
+ - sn: Guerby
+   cn: Laurent Guerby
+   email:
+   - laurent@guerby.net
+   - guerby@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: guerby
+   inactive: true
+ - sn: Gui
+   cn: Haochen Gui
+   email:
+   - guihaoc@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: guihaoc
+   inactive: true
+ - sn: Guo
+   cn: Jiufu Guo
+   email:
+   - guojiufu@linux.ibm.com
+   - guojiufu@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: guojiufu
+ - sn: Guo
+   cn: Xuepeng Guo
+   email:
+   - terry.xpguo@gmail.com
+   - xguo@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: xguo
+   inactive: true
+ - sn: Guozhi
+   cn: Wei Guozhi
+   email:
+   - carrot@google.com
+   - carrot@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: carrot
+   inactive: true
+ - sn: Gupta
+   cn: Vineet Gupta
+   email:
+   - vineet.gupta@linux.dev
+   - vineetg@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: vineetg
+ - sn: H.S
+   cn: Naveen H.S
+   email:
+   - naveen.siddegowda@oss.qualcomm.com
+   - naveenh@gcc.gnu.org
+   roles:
+   - WriteAfter
+   - DCO: naveen.siddegowda@oss.qualcomm.com
+   account: naveenh
+   aliases:
+   - Naveen Gowda
+   - Naveen
+ - sn: Hagog
+   cn: Mostafa Hagog
+   email:
+   - hagog@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: hagog
+   inactive: true
+ - sn: Hainque
+   cn: Olivier Hainque
+   email:
+   - hainque@adacore.com
+   - hainque@gcc.gnu.org
+   roles:
+   - Maintainer: VxWorks ports
+   - WriteAfter
+   account: hainque
+ - sn: Hakobyan
+   cn: Jivan Hakobyan
+   email:
+   - jivanhakobyan9@gmail.com
+   - jivan@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: jivan
+ - sn: Haley
+   cn: Andrew Haley
+   email:
+   - aph@redhat.com
+   - aph@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: aph
+   inactive: true
+ - sn: Han
+   cn: Demin Han
+   email:
+   - demin.han@starfivetech.com
+   - deminhan@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: deminhan
+ - sn: Harmstone
+   cn: Mark Harmstone
+   email:
+   - mark@harmstone.com
+   - maharmstone@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: maharmstone
+ - sn: Harwath
+   cn: Frederik Harwath
+   email:
+   - frederik@harwath.name
+   - frederik@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: frederik
+ - sn: Hastings
+   cn: Stuart Hastings
+   email:
+   - stuart@apple.com
+   - stuart@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: stuart
+   inactive: true
+ - sn: Haubenwallner
+   cn: Michael Haubenwallner
+   email:
+   - michael.haubenwallner@ssi-schaefer.com
+   - haubi@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: haubi
+   inactive: true
+ - sn: Haugen
+   cn: Pat Haugen
+   email:
+   - pthaugen@us.ibm.com
+   - pthaugen@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: pthaugen
+   inactive: true
+ - sn: Hayes
+   cn: Michael Hayes
+   email:
+   - m.hayes@elec.canterbury.ac.nz
+   - m.hayes@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: m.hayes
+   inactive: true
+ - sn: Hayward
+   cn: Alan Hayward
+   email:
+   - alan.hayward@arm.com
+   - alahay01@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: alahay01
+   inactive: true
+ - sn: Hazeghi
+   cn: Dara Hazeghi
+   email:
+   - dhazeghi@yahoo.com
+   roles:
+   - BZ
+   inactive: true
+ - sn: He
+   cn: Li Jia He
+   email:
+   - helijia@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: helijia
+   inactive: true
+ - sn: Heffernan
+   cn: Mark Heffernan
+   email:
+   - meheff@google.com
+   - meheff@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: meheff
+   inactive: true
+ - sn: Helffrich
+   cn: George Helffrich
+   email:
+   - george@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: george
+   inactive: true
+ - sn: Hellstrom
+   cn: Daniel Hellstrom
+   email:
+   - daniel@gaisler.com
+   - danielh@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: danielh
+   inactive: true
+ - sn: Henderson
+   cn: Fergus Henderson
+   email:
+   - fjh@cs.mu.oz.au
+   - fjh@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: fjh
+   inactive: true
+ - sn: Henderson
+   cn: Richard Henderson
+   email:
+   - rth@gcc.gnu.org
+   - richard.henderson@linaro.org
+   roles:
+   - Maintainer: alpha port
+   - WriteAfter
+   account: rth
+ - sn: Henderson
+   cn: Stuart Henderson
+   email:
+   - shenders@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: shenders
+   inactive: true
+ - sn: Hernandez
+   cn: Aldy Hernandez
+   email:
+   - aldy@quesejoda.com
+   - aldyh@gcc.gnu.org
+   roles:
+   - Maintainer: rs6000 vector extns
+   - Maintainer: '*gimpl*'
+   - Maintainer: '*vrp, ranger'
+   - WriteAfter
+   - DCO: aldy@quesejoda.com
+   account: aldyh
+ - sn: Herron
+   cn: Philip Herron
+   email:
+   - herron.philip@googlemail.com
+   - redbrain@gcc.gnu.org
+   roles:
+   - Maintainer: Rust
+   - Maintainer: libgrust
+   - WriteAfter
+   account: redbrain
+ - sn: Hillenbrand
+   cn: Marius Hillenbrand
+   email:
+   - mhillen@linux.ibm.com
+   - mhillen@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: mhillen
+   inactive: true
+ - sn: Hiller
+   cn: Matthew Hiller
+   email:
+   - hiller@redhat.com
+   - hiller@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: hiller
+   inactive: true
+ - sn: Hirata
+   cn: Kazu Hirata
+   email:
+   - kazu@codesourcery.com
+   - kazu@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: kazu
+   inactive: true
+ - sn: Hollstein
+   cn: Manfred Hollstein
+   email:
+   - mh@suse.com
+   - manfred@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: manfred
+   inactive: true
+ - sn: Horne
+   cn: Stafford Horne
+   email:
+   - shorne@gmail.com
+   - shorne@gcc.gnu.org
+   roles:
+   - Maintainer: or1k port
+   - WriteAfter
+   account: shorne
+ - sn: Hou
+   cn: Cong Hou
+   email:
+   - congh@google.com
+   - congh@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: congh
+   inactive: true
+ - sn: Hsu
+   cn: Levy Hsu
+   email:
+   - admin@levyhsu.com
+   - xlwxlw7969@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: xlwxlw7969
+ - sn: Hu
+   cn: Lin Hu
+   email:
+   - lin1.hu@intel.com
+   - hulin@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: hulin
+   aliases:
+   - Hu, Lin1
+ - sn: Huber
+   cn: Sebastian Huber
+   email:
+   - sebastian.huber@embedded-brains.de
+   - sh@gcc.gnu.org
+   roles:
+   - Maintainer: RTEMS Ports
+   - WriteAfter
+   account: sh
+ - sn: Hubicka
+   cn: Jan Hubicka
+   email:
+   - hubicka@ucw.cz
+   - hubicka@gcc.gnu.org
+   roles:
+   - Maintainer: i386 port
+   - Maintainer: x86-64 port
+   - Maintainer: callgraph
+   - Maintainer: gcov
+   - Maintainer: predict.def
+   - Maintainer: profile feedback
+   - WriteAfter
+   account: hubicka
+ - sn: Hueffner
+   cn: Falk Hueffner
+   email:
+   - falk@debian.org
+   - falk@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: falk
+   inactive: true
+ - sn: Hughes
+   cn: Andrew John Hughes
+   email:
+   - gnu_andrew@member.fsf.org
+   - gandalf@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: gandalf
+   inactive: true
+ - sn: Humieres
+   cn: Dominique d'Humieres
+   email:
+   - dhumieres.dominique@free.fr
+   - dominiq@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: dominiq
+   inactive: true
+ - sn: Hutchinson
+   cn: Andy Hutchinson
+   email:
+   - hutchinsonandy@aim.com
+   - hutchinsonandy@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: hutchinsonandy
+   inactive: true
+ - sn: Hutton
+   cn: Joel Hutton
+   email:
+   - joel.hutton@arm.com
+   - joelh@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: joelh
+   inactive: true
+ - sn: Hyatt
+   cn: Lewis Hyatt
+   email:
+   - lhyatt@gmail.com
+   - lhyatt@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: lhyatt
+ - sn: Iannetta
+   cn: Paul Iannetta
+   email:
+   - piannetta@kalrayinc.com
+   - piannetta@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: piannetta
+ - sn: Illig
+   cn: Roland Illig
+   email:
+   - roland.illig@gmx.de
+   - rillig@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: rillig
+   inactive: true
+ - sn: Inge
+   cn: Meador Inge
+   email:
+   - meadori@codesourcery.com
+   - meadori@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: meadori
+   inactive: true
+ - sn: Innocenti
+   cn: Bernardo Innocenti
+   email:
+   - bernie@develer.com
+   - bernie@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: bernie
+   inactive: true
+ - sn: Ionescu
+   cn: Mihail Ionescu
+   email:
+   - mihail.ionescu@arm.com
+   - mionescu@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: mionescu
+   inactive: true
+ - sn: Ivanishin
+   cn: Vladislav Ivanishin
+   email:
+   - vlad@ispras.ru
+   - vlad@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: vlad
+   inactive: true
+ - sn: Ivchenko
+   cn: Alexander Ivchenko
+   email:
+   - aivchenk@gmail.com
+   - aivchenk@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: aivchenk
+   inactive: true
+ - sn: Iyer
+   cn: Balaji V. Iyer
+   email:
+   - bviyer@gmail.com
+   - bviyer@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: bviyer
+   inactive: true
+ - sn: Jääskeläinen
+   cn: Pekka Jääskeläinen
+   email:
+   - pekka.jaaskelainen@parmance.com
+   - visit0r@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: visit0r
+   inactive: true
+ - sn: Jacobowitz
+   cn: Daniel Jacobowitz
+   email:
+   - drow@false.org
+   - drow@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: drow
+   inactive: true
+ - sn: Jaeger
+   cn: Andreas Jaeger
+   email:
+   - aj@suse.de
+   - aj@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: aj
+   inactive: true
+ - sn: Jagasia
+   cn: Harsha Jagasia
+   email:
+   - harsha.jagasia@amd.com
+   - hjagasia@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: hjagasia
+   inactive: true
+ - sn: Jahanian
+   cn: Fariborz Jahanian
+   email:
+   - fjahanian@apple.com
+   - fjahanian@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: fjahanian
+   inactive: true
+ - sn: Jambor
+   cn: Martin Jambor
+   email:
+   - mjambor@suse.cz
+   - jamborm@gcc.gnu.org
+   roles:
+   - Reviewer: callgraph
+   - WriteAfter
+   account: jamborm
+ - sn: James
+   cn: Sam James
+   email:
+   - sam@gentoo.org
+   - sjames@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: sjames
+ - sn: Jangala
+   cn: Surya Kumari Jangala
+   email:
+   - jskumari@linux.ibm.com
+   - jskumari@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: jskumari
+ - sn: Jayakar
+   cn: Avinash Jayakar
+   email:
+   - avinashd@linux.ibm.com
+   - avinashd@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: avinashd
+ - sn: Jelinek
+   cn: Jakub Jelinek
+   email:
+   - jakub@redhat.com
+   - jakub@gcc.gnu.org
+   roles:
+   - Global
+   - Maintainer: '*gimpl*'
+   - Maintainer: libgomp
+   - Maintainer: libquadmath
+   - Maintainer: OpenMP
+   - Reviewer: libsanitizer, asan.cc
+   - WriteAfter
+   account: jakub
+ - sn: Jenner
+   cn: Andrew Jenner
+   email:
+   - andrew@codesourcery.com
+   - andrewjenner@gcc.gnu.org
+   roles:
+   - Maintainer: powerpcspe port
+   - WriteAfter
+   account: andrewjenner
+   inactive: true
+ - sn: Jha
+   cn: Saurabh Jha
+   email:
+   - saurabh.jha@arm.com
+   - saurabhjha@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: saurabhjha
+ - sn: Jiang
+   cn: Haochen Jiang
+   email:
+   - haochen.jiang@intel.com
+   - jianghc@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: jianghc
+ - sn: Jianhua
+   cn: Qian Jianhua
+   email:
+   - qianjh@fujitsu.com
+   - qianjh@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: qianjh
+   inactive: true
+ - sn: Jires
+   cn: Michal Jires
+   email:
+   - mjires@suse.cz
+   - mjires@gcc.gnu.org
+   roles:
+   - WriteAfter
+   - DCO: mjires@suse.cz
+   account: mjires
+ - sn: Johnson
+   cn: Janis Johnson
+   email:
+   - janis.marie.johnson@gmail.com
+   - janis@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: janis
+   inactive: true
+ - sn: Johnson
+   cn: Teresa Johnson
+   email:
+   - tejohnson@google.com
+   - tejohnson@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: tejohnson
+   inactive: true
+ - sn: Johnston
+   cn: Kean Johnston
+   email:
+   - jkj@sco.com
+   - jkj@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: jkj
+   inactive: true
+ - sn: Jordan
+   cn: Phillip Jordan
+   email:
+   - phillip.m.jordan@gmail.com
+   - pmj@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: pmj
+   inactive: true
+ - sn: Josling
+   cn: Tim Josling
+   email:
+   - tej@melbpc.org.au
+   - timjosling@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: timjosling
+   inactive: true
+ - sn: Kamiński
+   cn: Tomasz Kamiński
+   email:
+   - tkaminsk@redhat.com
+   - tkaminsk@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: tkaminsk
+ - sn: Kaplansky
+   cn: Victor Kaplansky
+   email:
+   - victork@il.ibm.com
+   - victork@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: victork
+   inactive: true
+ - sn: Karpov
+   cn: Evgeny Karpov
+   email:
+   - evgeny.karpov@arm.com
+   - eukarpov@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: eukarpov
+ - sn: Kastl
+   cn: Filip Kastl
+   email:
+   - fkastl@suse.cz
+   - pheeck@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: pheeck
+ - sn: Kaushik
+   cn: Abhishek Kaushik
+   email:
+   - abhishek.kaushik@arm.com
+   - abhkau01@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: abhkau01
+ - sn: Keating
+   cn: Geoffrey Keating
+   email:
+   - geoffk@geoffk.org
+   - geoffk@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: geoffk
+   inactive: true
+ - sn: Kehoe
+   cn: Brendan Kehoe
+   email:
+   - brendan@zen.org
+   - brendan@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: brendan
+   inactive: true
+ - sn: Kenner
+   cn: Richard Kenner
+   email:
+   - kenner@nyu.edu
+   - kenner@gcc.gnu.org
+   roles:
+   - Global
+   - WriteAfter
+   account: kenner
+   inactive: true
+ - sn: Khrustalev
+   cn: Yury Khrustalev
+   email:
+   - yury.khrustalev@arm.com
+   - ykhrustalev@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: ykhrustalev
+ - sn: Kleen
+   cn: Andi Kleen
+   email:
+   - andi@firstfloor.org
+   - ak@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: ak
+ - sn: Klose
+   cn: Matthias Klose
+   email:
+   - doko@debian.org
+   - doko@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: doko
+ - sn: Knaggs
+   cn: Jeff Knaggs
+   email:
+   - jknaggs@redhat.com
+   - jknaggs@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: jknaggs
+   inactive: true
+ - sn: Koch
+   cn: Michael Koch
+   email:
+   - konqueror@gmx.de
+   - mkoch@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: mkoch
+   inactive: true
+ - sn: Koenig
+   cn: Nicolas Koenig
+   email:
+   - koenigni@student.ethz.ch
+   - koenigni@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: koenigni
+   inactive: true
+ - sn: Kojima
+   cn: Kaz Kojima
+   email:
+   - kkojima@gcc.gnu.org
+   - kkojima@rr.iij4u.or.jp
+   roles:
+   - Maintainer: sh-linux-gnu
+   - WriteAfter
+   account: kkojima
+ - sn: Kolpackov
+   cn: Boris Kolpackov
+   email:
+   - boris@codesynthesis.com
+   - boris@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: boris
+ - sn: Kong
+   cn: Lingling Kong
+   email:
+   - lingling.kong@intel.com
+   - konglin1@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: konglin1
+ - sn: König
+   cn: Thomas König
+   email:
+   - tkoenig@gcc.gnu.org
+   roles:
+   - Reviewer: Fortran
+   - WriteAfter
+   account: tkoenig
+   aliases:
+   - Thomas Koenig
+ - sn: Koning
+   cn: Paul Koning
+   email:
+   - ni1d@arrl.net
+   - pkoning@gcc.gnu.org
+   roles:
+   - Maintainer: pdp11 port
+   - WriteAfter
+   account: pkoning
+   inactive: true
+ - sn: Korb
+   cn: Bruce Korb
+   email:
+   - bkorb@gnu.org
+   - korbb@gcc.gnu.org
+   roles:
+   - Maintainer: fixincludes
+   - WriteAfter
+   account: korbb
+ - sn: Korn
+   cn: Dave Korn
+   email:
+   - dave.korn.cygwin@gmail.com
+   - davek@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: davek
+   inactive: true
+ - sn: Kosnik
+   cn: Benjamin De Kosnik
+   email:
+   - bkoz@gnu.org
+   - bkoz@gcc.gnu.org
+   roles:
+   - Maintainer: c++ runtime libs
+   - WriteAfter
+   account: bkoz
+   inactive: true
+ - sn: Koval
+   cn: Julia Koval
+   email:
+   - julia.koval@intel.com
+   - jkoval@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: jkoval
+   inactive: true
+ - sn: Kraai
+   cn: Matt Kraai
+   email:
+   - kraai@ftbfs.org
+   - kraai@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: kraai
+   inactive: true
+ - sn: Kraft
+   cn: Daniel Kraft
+   email:
+   - d@domob.eu
+   - domob@gcc.gnu.org
+   roles:
+   - Reviewer: Fortran
+   - WriteAfter
+   account: domob
+   inactive: true
+ - sn: Kratochvil
+   cn: Jan Kratochvil
+   email:
+   - jan.kratochvil@redhat.com
+   - jkratoch@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: jkratoch
+   inactive: true
+ - sn: Krebbel
+   cn: Andreas Krebbel
+   email:
+   - krebbel@linux.ibm.com
+   - krebbel@gcc.gnu.org
+   roles:
+   - Maintainer: s390 port
+   - WriteAfter
+   account: krebbel
+ - sn: Kretz
+   cn: Matthias Kretz
+   email:
+   - m.kretz@gsi.de
+   - mkretz@gcc.gnu.org
+   roles:
+   - WriteAfter
+   - DCO: m.kretz@gsi.de
+   account: mkretz
+ - sn: Krupp
+   cn: Louis Krupp
+   email:
+   - louis.krupp@zoho.com
+   - lkrupp@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: lkrupp
+   inactive: true
+ - sn: Kulkarni
+   cn: Prathamesh Kulkarni
+   email:
+   - prathameshk@nvidia.com
+   - prathamesh3492@gcc.gnu.org
+   roles:
+   - WriteAfter
+   - DCO: prathameshk@nvidia.com
+   account: prathamesh3492
+ - sn: Kumar
+   cn: Venkataramanan Kumar
+   email:
+   - venkataramanan.kumar@amd.com
+   - vekumar@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: vekumar
+   aliases:
+   - vekumar
+ - sn: Kuvyrkov
+   cn: Maxim Kuvyrkov
+   email:
+   - maxim.kuvyrkov@linaro.org
+   - mkuvyrkov@gcc.gnu.org
+   roles:
+   - Maintainer: Android sub-port
+   - WriteAfter
+   account: mkuvyrkov
+ - sn: Kwan
+   cn: Doug Kwan
+   email:
+   - dougkwan@google.com
+   - dougkwan@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: dougkwan
+   inactive: true
+ - sn: Ladd
+   cn: Scott Robert Ladd
+   email:
+   - scott.ladd@coyotegulch.com
+   - srladd@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: srladd
+   inactive: true
+ - sn: Ladelsky
+   cn: Razya Ladelsky
+   email:
+   - razya@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: razya
+   inactive: true
+ - sn: Lafage
+   cn: Thierry Lafage
+   email:
+   - thierry.lafage@inria.fr
+   - tlafage@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: tlafage
+   inactive: true
+ - sn: LaFramboise
+   cn: Aaron W. LaFramboise
+   email:
+   - aaronavay62@aaronwl.com
+   - aaronwl@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: aaronwl
+   inactive: true
+ - sn: Lambertsen
+   cn: Rask Ingemann Lambertsen
+   email:
+   - ccc94453@vip.cybercity.dk
+   - rask@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: rask
+   inactive: true
+ - sn: Lambourg
+   cn: Jerome Lambourg
+   email:
+   - lambourg@adacore.com
+   - lambourg@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: lambourg
+   inactive: true
+ - sn: Lange
+   cn: Tim Lange
+   email:
+   - mail@tim-lange.me
+   - tlange@gcc.gnu.org
+   roles:
+   - WriteAfter
+   - DCO: mail@tim-lange.me
+   account: tlange
+   inactive: true
+ - sn: Langton
+   cn: Asher Langton
+   email:
+   - langton2@llnl.gov
+   - langton@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: langton
+   inactive: true
+ - sn: Lattner
+   cn: Chris Lattner
+   email:
+   - sabre@nondot.org
+   - sabre@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: sabre
+   inactive: true
+ - sn: Laurenzo
+   cn: Terry Laurenzo
+   email:
+   - tlaurenzo@gmail.com
+   - tlaurenzo@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: tlaurenzo
+   inactive: true
+ - sn: Law
+   cn: Jeff Law
+   email:
+   - jeffrey.law@oss.qualcomm.com
+   - jeffreyalaw@gmail.com
+   - law@gcc.gnu.org
+   - jefflaw@qti.qualcomm.com
+   - jlaw@tachyum.com
+   - jlaw@ventanamicro.com
+   roles:
+   - Global
+   - Maintainer: h8 port
+     email: jeffreyalaw@gmail.com
+   - Maintainer: hppa port
+     email: jeffreyalaw@gmail.com
+   - Maintainer: m68k port (?)
+     email: jeffreyalaw@gmail.com
+   - Maintainer: mn10300 port
+     email: jeffreyalaw@gmail.com
+   - Maintainer: caller-save.cc
+     email: jeffreyalaw@gmail.com
+   - Maintainer: gcse.cc
+     email: jeffreyalaw@gmail.com
+   - Maintainer: global opt framework
+     email: jeffreyalaw@gmail.com
+   - Maintainer: middle-end
+     email: jeffreyalaw@gmail.com
+   - Maintainer: reorg
+     email: jeffreyalaw@gmail.com
+   - Maintainer: scheduler (+ haifa)
+     email: jeffreyalaw@gmail.com
+   - WriteAfter: jeffreyalaw@gmail.com
+   - DCO: jefflaw@qti.qualcomm.com
+   - DCO: jeffrey.law@oss.qualcomm.com
+   - DCO: jeffreyalaw@gmail.com
+   - DCO: jlaw@tachyum.com
+   - DCO: jlaw@ventanamicro.com
+   account: law
+   aliases:
+   - jlaw
+ - sn: Lawrence
+   cn: Alan Lawrence
+   email:
+   - alan.lawrence@arm.com
+   - alalaw01@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: alalaw01
+   inactive: true
+ - sn: Lawrynowicz
+   cn: Jozef Lawrynowicz
+   email:
+   - jozef.l@mittosystems.com
+   - jozefl@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: jozefl
+   inactive: true
+ - sn: Lay
+   cn: Georg-Johann Lay
+   email:
+   - avr@gjlay.de
+   - gjl@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: gjl
+ - sn: Lazar
+   cn: Vlad Lazar
+   email:
+   - vlad.lazar@arm.com
+   - vladlazar@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: vladlazar
+   inactive: true
+ - sn: Lehmann
+   cn: Marc Lehmann
+   email:
+   - pcg@goof.com
+   - pcg@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: pcg
+   inactive: true
+ - sn: Lei
+   cn: Bohan Lei
+   email:
+   - garthlei@linux.alibaba.com
+   - garthlei@gcc.gnu.org
+   roles:
+   - WriteAfter
+   - DCO: garthlei@linux.alibaba.com
+   account: garthlei
+ - sn: Lemke
+   cn: James Lemke
+   email:
+   - jim@lemke.org
+   - jwlemke@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: jwlemke
+   inactive: true
+ - sn: Leoshkevich
+   cn: Ilya Leoshkevich
+   email:
+   - iii@linux.ibm.com
+   - iii@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: iii
+ - sn: Lerdsuwanakij
+   cn: Kriang Lerdsuwanakij
+   email:
+   - lerdsuwa@users.sourceforge.net
+   - lerdsuwa@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: lerdsuwa
+   inactive: true
+ - sn: Li
+   cn: Pan Li
+   email:
+   - pan2.li@intel.com
+   - panli@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: panli
+ - sn: Li
+   cn: Pengfei Li
+   email:
+   - pengfei.li2@arm.com
+   - pfustc@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: pfustc
+ - sn: Li
+   cn: Renlin Li
+   email:
+   - renlin.li@arm.com
+   - renlin@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: renlin
+   inactive: true
+ - sn: Li
+   cn: Xinliang David Li
+   email:
+   - davidxl@google.com
+   - davidxl@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: davidxl
+   inactive: true
+ - sn: Lin
+   cn: Kewen Lin
+   email:
+   - linkw@gcc.gnu.org
+   roles:
+   - Maintainer: rs6000/powerpc port
+   - WriteAfter
+   account: linkw
+ - sn: Liqin
+   cn: Chen Liqin
+   email:
+   - liqin.gcc@gmail.com
+   - liqin@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: liqin
+   inactive: true
+ - sn: Liška
+   cn: Martin Liška
+   email:
+   - mliska@suse.cz
+   - marxin@gcc.gnu.org
+   - martin.liska@hey.com
+   roles:
+   - WriteAfter
+   - DCO: martin.liska@hey.com
+   account: marxin
+ - sn: Liu
+   cn: Hao Liu
+   email:
+   - hliu@os.amperecomputing.com
+   - hliu@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: hliu
+ - sn: Liu
+   cn: Hongtao Liu
+   email:
+   - hongtao.liu@intel.com
+   - liuhongt@gcc.gnu.org
+   roles:
+   - Maintainer: i386 vector ISA extns
+   - WriteAfter
+   account: liuhongt
+   aliases:
+   - liuhongt
+   - hongtao.liu
+ - sn: Liu
+   cn: Jiangning Liu
+   email:
+   - jiangning.liu@arm.com
+   - liujiangning@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: liujiangning
+   inactive: true
+ - sn: Liu
+   cn: Sa Liu
+   email:
+   - saliu@de.ibm.com
+   - saliu@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: saliu
+   inactive: true
+ - sn: Loader
+   cn: Ralph Loader
+   email:
+   - rcl@ihug.co.nz
+   - ralph@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: ralph
+   inactive: true
+ - sn: Lobo
+   cn: Sheldon Lobo
+   email:
+   - sheldon.lobo@oracle.com
+   - smlobo@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: smlobo
+   inactive: true
+ - sn: Loki
+   cn: Gabor Loki
+   email:
+   - loki@inf.u-szeged.hu
+   - loki@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: loki
+   inactive: true
+ - sn: Longo
+   cn: Matthieu Longo
+   email:
+   - matthieu.longo@arm.com
+   - mlongo@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: mlongo
+ - sn: Loosemore
+   cn: Sandra Loosemore
+   email:
+   - sloosemore@baylibre.com
+   - sandra@gcc.gnu.org
+   roles:
+   - Maintainer: docs co-maintainer
+   - WriteAfter
+   account: sandra
+ - sn: López-Ibáñez
+   cn: Manuel López-Ibáñez
+   email:
+   - manu@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: manu
+   inactive: true
+ - sn: Love
+   cn: Carl Love
+   email:
+   - cel@linux.ibm.com
+   - carll@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: carll
+ - sn: Lowden
+   cn: James K. Lowden
+   email:
+   - jklowden@cobolworx.com
+   - jklowden@gcc.gnu.org
+   roles:
+   - Maintainer: COBOL front end
+   - WriteAfter
+   account: jklowden
+ - sn: Löwis
+   cn: Martin v. Löwis
+   email:
+   - loewis@informatik.hu-berlin.de
+   - loewis@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: loewis
+   inactive: true
+ - sn: Lu
+   cn: Edwin Lu
+   email:
+   - ewlu@rivosinc.com
+   - ewlu@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: ewlu
+ - sn: Lu
+   cn: H.J. Lu
+   email:
+   - hjl.tools@gmail.com
+   - hjl@gcc.gnu.org
+   roles:
+   - WriteAfter
+   - DCO: hjl.tools@gmail.com
+   account: hjl
+ - sn: Luo
+   cn: Xiong Hu Luo
+   email:
+   - luoxhu@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: luoxhu
+   inactive: true
+ - sn: Lv
+   cn: Bin Bin Lv
+   email:
+   - shlb@linux.ibm.com
+   - shlb@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: shlb
+   inactive: true
+ - sn: Lyon
+   cn: Christophe Lyon
+   email:
+   - christophe.lyon@arm.com
+   - clyon@gcc.gnu.org
+   roles:
+   - Reviewer: arm port (MVE)
+   - WriteAfter
+   account: clyon
+ - sn: Ma
+   cn: Jin Ma
+   email:
+   - jinma@linux.alibaba.com
+   - majin@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: majin
+ - sn: Ma
+   cn: Jun Ma
+   email:
+   - junma@linux.alibaba.com
+   - junma@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: junma
+   inactive: true
+ - sn: Ma
+   cn: Yuao Ma
+   email:
+   - yuao@gcc.gnu.org
+   - c8ef@outlook.com
+   roles:
+   - WriteAfter
+   - DCO: yuao@gcc.gnu.org
+   account: yuao
+ - sn: Machado
+   cn: Luis Machado
+   email:
+   - luis.machado.foss@gmail.com
+   - luisgpm@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: luisgpm
+ - sn: MacLeod
+   cn: Andrew MacLeod
+   email:
+   - amacleod@redhat.com
+   - amacleod@gcc.gnu.org
+   roles:
+   - Maintainer: '*vrp, ranger'
+   - Maintainer: tree-ssa
+   - WriteAfter
+   account: amacleod
+ - sn: Mahkovec
+   cn: Ziga Mahkovec
+   email:
+   - ziga.mahkovec@klika.si
+   - ziga@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: ziga
+   inactive: true
+ - sn: Makarov
+   cn: Vladimir Makarov
+   email:
+   - vmakarov@redhat.com
+   - vmakarov@gcc.gnu.org
+   roles:
+   - Maintainer: register allocation
+   - Maintainer: scheduler (+ haifa)
+   - WriteAfter
+   account: vmakarov
+   aliases:
+   - Vladimir N. Makarov
+ - sn: Malcolm
+   cn: David Malcolm
+   email:
+   - dmalcolm@redhat.com
+   - dmalcolm@gcc.gnu.org
+   roles:
+   - Maintainer: diagnostic messages
+   - Maintainer: gdbhooks.py
+   - Maintainer: jit
+   - Maintainer: libcpp
+   - Maintainer: static analyzer
+   - WriteAfter
+   account: dmalcolm
+ - sn: Malcomson
+   cn: Matthew Malcomson
+   email:
+   - mmalcomson@nvidia.com
+   - matmal01@gcc.gnu.org
+   roles:
+   - WriteAfter
+   - DCO: mmalcomson@nvidia.com
+   account: matmal01
+ - sn: Maltsev
+   cn: Mikhail Maltsev
+   email:
+   - maltsevm@gmail.com
+   - miyuki@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: miyuki
+   inactive: true
+ - sn: Marchesi
+   cn: Jose E. Marchesi
+   email:
+   - jose.marchesi@oracle.com
+   - jemarch@gnu.org
+   - jemarch@gcc.gnu.org
+   roles:
+   - Maintainer: bpf port
+   - Maintainer: Algol 68
+     email: jemarch@gnu.org
+   - Maintainer: libga68
+     email: jemarch@gnu.org
+   - WriteAfter
+   - DCO: jemarch@gnu.org
+   account: jemarch
+ - sn: Markianos-Wright
+   cn: Stamatis Markianos-Wright
+   email:
+   - stam.markianos-wright@arm.com
+   - stammark@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: stammark
+   inactive: true
+ - sn: Marlier
+   cn: Patrick Marlier
+   email:
+   - patrick.marlier@gmail.com
+   - pmarlier@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: pmarlier
+   inactive: true
+ - sn: Martin
+   cn: Simon Martin
+   email:
+   - simartin@users.sourceforge.net
+   - simartin@gcc.gnu.org
+   - simon@nasilyan.com
+   roles:
+   - WriteAfter
+   account: simartin
+ - sn: Martinez
+   cn: Alejandro Martinez
+   email:
+   - alejandro.martinezvicente@arm.com
+   - alejandro@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: alejandro
+   inactive: true
+ - sn: Mathew
+   cn: Ranjit Mathew
+   email:
+   - rmathew@hotmail.com
+   - rmathew@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: rmathew
+   inactive: true
+ - sn: Matos
+   cn: Paulo Matos
+   email:
+   - pmatos@linki.tools
+   - pmatos@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: pmatos
+   inactive: true
+ - sn: Matsui
+   cn: Ken Matsui
+   email:
+   - kmatsui@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: kmatsui
+ - sn: Matz
+   cn: Michael Matz
+   email:
+   - matz@suse.de
+   - matz@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: matz
+ - sn: McGary
+   cn: Greg McGary
+   email:
+   - gkm@gnu.org
+   - gkm@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: gkm
+   inactive: true
+ - sn: McGrath
+   cn: Roland McGrath
+   email:
+   - roland@hack.frob.com
+   - roland@gcc.gnu.org
+   - mcgrathr@google.com
+   roles:
+   - WriteAfter
+   account: roland
+ - sn: McKinlay
+   cn: Bryce McKinlay
+   email:
+   - mckinlay@redhat.com
+   - bryce@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: bryce
+   inactive: true
+ - sn: Meakin
+   cn: Karl Meakin
+   email:
+   - karl.meakin@arm.com
+   - karmea01@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: karmea01
+ - sn: Megacz
+   cn: Adam Megacz
+   email:
+   - adam@xwt.org
+   - megacz@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: megacz
+   inactive: true
+ - sn: Mei
+   cn: Bingfeng Mei
+   email:
+   - bmei@broadcom.com
+   - meibf@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: meibf
+   inactive: true
+ - sn: Meissner
+   cn: Michael Meissner
+   email:
+   - gnu@the-meissners.org
+   - meissner@gcc.gnu.org
+   roles:
+   - Global
+   - Maintainer: scheduler (+ haifa)
+   - WriteAfter
+   account: meissner
+   inactive: true
+ - sn: Melcr
+   cn: Josef Melcr
+   email:
+   - josef.melcr@suse.com
+   - jmelcr@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: jmelcr
+ - sn: Merrill
+   cn: Jason Merrill
+   email:
+   - jason@redhat.com
+   - jason@gcc.gnu.org
+   roles:
+   - Global
+   - Maintainer: c++
+   - Maintainer: libcpp
+   - Maintainer: '*gimpl*'
+   - Maintainer: dwarf debugging code
+   - WriteAfter
+   account: jason
+ - sn: Meyering
+   cn: Jim Meyering
+   email:
+   - jim@meyering.net
+   - meyering@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: meyering
+   inactive: true
+ - sn: Michlmayr
+   cn: Martin Michlmayr
+   email:
+   - tbm@cyrius.com
+   - tbm@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: tbm
+   inactive: true
+ - sn: Miller
+   cn: David S. Miller
+   email:
+   - davem@redhat.com
+   - davem@gcc.gnu.org
+   roles:
+   - Global
+   - Maintainer: sparc port
+   - Maintainer: jump.cc
+   - WriteAfter
+   account: davem
+   inactive: true
+ - sn: Millward
+   cn: Lee Millward
+   email:
+   - lee.millward@gmail.com
+   - lmillward@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: lmillward
+   inactive: true
+ - sn: Mir
+   cn: Immad Mir
+   email:
+   - mir@sourceware.org
+   - mir@gcc.gnu.org
+   roles:
+   - WriteAfter
+   - DCO: mir@sourceware.org
+   account: mir
+   inactive: true
+ - sn: Miranda
+   cn: Cupertino Miranda
+   email:
+   - cupertino.miranda@oracle.com
+   - cupermir@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: cupermir
+ - sn: Mladjenovic
+   cn: Dragan Mladjenovic
+   email:
+   - Dragan.Mladjenovic@syrmia.com
+   - draganm@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: draganm
+   inactive: true
+ - sn: Modra
+   cn: Alan Modra
+   email:
+   - amodra@gmail.com
+   - amodra@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: amodra
+ - sn: Moene
+   cn: Toon Moene
+   email:
+   - toon@moene.org
+   - toon@gcc.gnu.org
+   roles:
+   - Reviewer: Fortran
+   - WriteAfter
+   account: toon
+ - sn: Monakov
+   cn: Alexander Monakov
+   email:
+   - amonakov@ispras.ru
+   - amonakov@gcc.gnu.org
+   roles:
+   - Reviewer: selective scheduling
+   - WriteAfter
+   account: amonakov
+ - sn: Monteiro
+   cn: Pietro Monteiro
+   email:
+   - pietro@sociotechnical.xyz
+   - pietro@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: pietro
+ - sn: Moore
+   cn: Catherine Moore
+   email:
+   - clm@codesourcery.com
+   - clm@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: clm
+   inactive: true
+ - sn: Morin
+   cn: Mikael Morin
+   email:
+   - mikael@gcc.gnu.org
+   roles:
+   - Reviewer: Fortran
+   - WriteAfter
+   account: mikael
+ - sn: Morrison
+   cn: James A. Morrison
+   email:
+   - phython@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: phython
+   inactive: true
+ - sn: Moses
+   cn: Brooks Moses
+   email:
+   - bmoses@google.com
+   - brooks@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: brooks
+   inactive: true
+ - sn: Mueller
+   cn: Dirk Mueller
+   email:
+   - dmueller@suse.de
+   - mueller@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: mueller
+   inactive: true
+ - sn: Muldoon
+   cn: Phil Muldoon
+   email:
+   - pmuldoon@redhat.com
+   - pmuldoon@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: pmuldoon
+   inactive: true
+ - sn: Mulley
+   cn: Gaius Mulley
+   email:
+   - gaiusmod2@gmail.com
+   - gaius@gcc.gnu.org
+   roles:
+   - Maintainer: Modula-2 front end
+   - WriteAfter
+   - DCO: gaiusmod2@gmail.com
+   account: gaius
+ - sn: Müllner
+   cn: Christoph Müllner
+   email:
+   - christoph.muellner@vrull.eu
+   - cmuellner@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: cmuellner
+ - sn: Munnangi
+   cn: Shreya Munnangi
+   email:
+   - smunnang@qti.qualcomm.com
+   - smunnangi1@ventanamicro.com
+   roles:
+   - DCO: smunnang@qti.qualcomm.com
+   - DCO: smunnangi1@ventanamicro.com
+ - sn: Munroe
+   cn: Steven Munroe
+   email:
+   - munroesj52@gmail.com
+   - munroesj@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: munroesj
+ - sn: Muyter
+   cn: Philippe De Muyter
+   email:
+   - phdm@macqel.be
+   - phdm@gcc.gnu.org
+   roles:
+   - Maintainer: m68k-motorola-sysv port
+   - WriteAfter
+   account: phdm
+   inactive: true
+ - sn: Myers
+   cn: Joseph Myers
+   email:
+   - josmyers@redhat.com
+   - jsm28@gcc.gnu.org
+   roles:
+   - Global
+   - Maintainer: C front end/ISO C99
+   - Maintainer: libcpp
+   - Maintainer: docs co-maintainer
+   - Maintainer: docstring relicensing
+   - Maintainer: i18n
+   - Maintainer: option handling
+   - Maintainer: soft-fp
+   - Reviewer: driver
+   - WriteAfter
+   account: jsm28
+ - sn: Myers
+   cn: Nathan Myers
+   email:
+   - ncm@cantrip.org
+   - ncm@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: ncm
+ - sn: Nagy
+   cn: Szabolcs Nagy
+   email:
+   - nsz@gcc.gnu.org
+   roles:
+   - WriteAfter
+   - DCO: nsz@gcc.gnu.org
+   account: nsz
+   inactive: true
+ - sn: Nascimento
+   cn: Victor Do Nascimento
+   email:
+   - victor.donascimento@arm.com
+   - victorldn@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: victorldn
+ - sn: Neill
+   cn: Quentin Neill
+   email:
+   - quentin.neill.gnu@gmail.com
+   - qneill@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: qneill
+   inactive: true
+ - sn: Nemet
+   cn: Adam Nemet
+   email:
+   - adambnemet@gmail.com
+   - nemet@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: nemet
+   inactive: true
+ - sn: Nerode
+   cn: Nathanael Nerode
+   email:
+   - neroden@gcc.gnu.org
+   roles:
+   - Maintainer: build machinery (*.in)
+   - WriteAfter
+   account: neroden
+   inactive: true
+ - sn: Neumann
+   cn: Thomas Neumann
+   email:
+   - tneumann@users.sourceforge.net
+   - tneumann@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: tneumann
+   inactive: true
+ - sn: Nicolaescu
+   cn: Dan Nicolaescu
+   email:
+   - dann@ics.uci.edu
+   - dann@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: dann
+   inactive: true
+ - sn: Nilsen
+   cn: Kelvin Nilsen
+   email:
+   - kelvin.nilsen@gmail.com
+   - kelvin@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: kelvin
+   inactive: true
+ - sn: Nilsson
+   cn: Hans-Peter Nilsson
+   email:
+   - hp@axis.com
+   - hp@bitrange.com
+   - hp@gcc.gnu.org
+   roles:
+   - Maintainer: cris port
+   - Maintainer: mmix port
+     email: hp@bitrange.com
+   - WriteAfter
+   account: hp
+ - sn: Norris
+   cn: James Norris
+   email:
+   - jnorris@codesourcery.com
+   roles:
+   - WriteAfter
+   inactive: true
+ - sn: Novillo
+   cn: Diego Novillo
+   email:
+   - dnovillo@google.com
+   - dnovillo@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: dnovillo
+   inactive: true
+ - sn: Nuzman
+   cn: Dorit Nuzman
+   email:
+   - dorit@il.ibm.com
+   - dorit@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: dorit
+   inactive: true
+ - sn: O'Brien
+   cn: David O'Brien
+   email:
+   - obrien@FreeBSD.org
+   - obrien@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: obrien
+   inactive: true
+ - sn: O'Donell
+   cn: Carlos O'Donell
+   email:
+   - carlos@redhat.com
+   - carlos@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: carlos
+ - sn: O'Gorman
+   cn: Peter O'Gorman
+   email:
+   - pogma@thewrittenword.com
+   - pogma@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: pogma
+   inactive: true
+ - sn: O'Neill
+   cn: Patrick O'Neill
+   email:
+   - patrick@rivosinc.com
+   - poneill@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: poneill
+ - sn: Obrzut
+   cn: Braden Obrzut
+   email:
+   - admin@maniacsvault.net
+   - blzut3@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: blzut3
+   inactive: true
+ - sn: Oi
+   cn: Tsukasa Oi
+   email:
+   - research_trasio@irq.a4lg.com
+   - a4lg@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: a4lg
+ - sn: Oliva
+   cn: Alexandre Oliva
+   email:
+   - aoliva@gcc.gnu.org
+   - oliva@adacore.com
+   roles:
+   - Maintainer: frv port
+   - Maintainer: mn10300 port
+   - Maintainer: sh port
+   - Maintainer: build machinery (*.in)
+   - WriteAfter
+   account: aoliva
+ - sn: Ornstein
+   cn: Andrea Ornstein
+   email:
+   - andrea.ornstein@st.com
+   - andreao@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: andreao
+   inactive: true
+ - sn: Orth
+   cn: Rainer Orth
+   email:
+   - ro@CeBiTec.Uni-Bielefeld.DE
+   - ro@gcc.gnu.org
+   roles:
+   - Maintainer: solaris
+   - Maintainer: testsuite
+   - WriteAfter
+   account: ro
+ - sn: Ostapenko
+   cn: Maxim Ostapenko
+   email:
+   - m.ostapenko@samsung.com
+   - chefmax@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: chefmax
+   inactive: true
+ - sn: Palanisamy
+   cn: Jeevitha Palanisamy
+   email:
+   - jeevitha@linux.ibm.com
+   - jeevitha@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: jeevitha
+   aliases:
+   - Jeevitha
+ - sn: Palka
+   cn: Patrick Palka
+   email:
+   - ppalka@gcc.gnu.org
+   - ppalka@redhat.com
+   roles:
+   - Reviewer: c++
+   - WriteAfter
+   account: ppalka
+ - sn: Park
+   cn: Seongbae Park
+   email:
+   - seongbae.park@gmail.com
+   - spark@gcc.gnu.org
+   roles:
+   - Reviewer: dataflow
+   - Reviewer: register allocation
+   - WriteAfter
+   account: spark
+   inactive: true
+ - sn: Parmar
+   cn: Kishan Parmar
+   email:
+   - kishan@linux.ibm.com
+   - kishan@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: kishan
+ - sn: Parvathaneni
+   cn: Srinath Parvathaneni
+   email:
+   - srinath.parvathaneni@arm.com
+   - sripar01@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: sripar01
+ - sn: Patel
+   cn: Devang Patel
+   email:
+   - dpatel@apple.com
+   - dpatel@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: dpatel
+   inactive: true
+ - sn: Patry
+   cn: Pierre-Emmanuel Patry
+   email:
+   - pierre-emmanuel.patry@embecosm.com
+   - pep@gcc.gnu.org
+   roles:
+   - WriteAfter
+   - DCO: pierre-emmanuel.patry@embecosm.com
+   account: pep
+ - sn: Pavenis
+   cn: Andris Pavenis
+   email:
+   - andris.pavenis@iki.fi
+   - andris@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: andris
+   inactive: true
+ - sn: Pereira
+   cn: Fernando Pereira
+   email:
+   - pronesto@gmail.com
+   - pronesto@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: pronesto
+   inactive: true
+ - sn: Pero
+   cn: Nicola Pero
+   email:
+   - nicola.pero@meta-innovation.com
+   - nicola@gcc.gnu.org
+   roles:
+   - Maintainer: libobjc
+   - WriteAfter
+   account: nicola
+   inactive: true
+ - sn: Perta
+   cn: Sebastian Perta
+   email:
+   - sebastian.perta@renesas.com
+   - sebastianperta@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: sebastianperta
+   inactive: true
+ - sn: Peryt
+   cn: Sebastian Peryt
+   email:
+   - sebastian.peryt@intel.com
+   - speryt@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: speryt
+   inactive: true
+ - sn: Pettersson
+   cn: Mikael Pettersson
+   email:
+   - mikpelinux@gmail.com
+   - mikpe@gcc.gnu.org
+   roles:
+   - WriteAfter
+   - DCO: mikpelinux@gmail.com
+   account: mikpe
+ - sn: Pfau
+   cn: Johannes Pfau
+   email:
+   - johannespfau@gmail.com
+   - jpfau@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: jpfau
+   inactive: true
+ - sn: Pfeifer
+   cn: Gerald Pfeifer
+   email:
+   - gerald@pfeifer.com
+   - gerald@gcc.gnu.org
+   roles:
+   - Maintainer: docs co-maintainer
+   - Maintainer: docstring relicensing
+   - Maintainer: web pages
+   - WriteAfter
+   account: gerald
+ - sn: Phatak
+   cn: Kaushik Phatak
+   email:
+   - kaushik.phatak@kpitcummins.com
+   - kaushikp@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: kaushikp
+   inactive: true
+ - sn: Pinski
+   cn: Andrew Pinski
+   email:
+   - andrew.pinski@oss.qualcomm.com
+   - pinskia@gmail.com
+   - andrew.pinski@qualcomm.com
+   - pinskia@gcc.gnu.org
+   - quic_apinski@quicinc.com
+   roles:
+   - Global
+   - Maintainer: libobjc
+     email: pinskia@gmail.com
+   - Reviewer: aarch64 port
+   - WriteAfter: andrew.pinski@qualcomm.com
+   - DCO: andrew.pinski@oss.qualcomm.com
+   - DCO: quic_apinski@quicinc.com
+   account: pinskia
+ - sn: Pitre
+   cn: Nicolas Pitre
+   email:
+   - nico@cam.org
+   - nico@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: nico
+   inactive: true
+ - sn: Ploujnikov
+   cn: Michael Ploujnikov
+   email:
+   - michael.ploujnikov@oracle.com
+   - plouj@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: plouj
+   inactive: true
+ - sn: Pluzhnikov
+   cn: Paul Pluzhnikov
+   email:
+   - ppluzhnikov@google.com
+   - ppluzhnikov@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: ppluzhnikov
+   inactive: true
+ - sn: Polacek
+   cn: Marek Polacek
+   email:
+   - polacek@redhat.com
+   - mpolacek@gcc.gnu.org
+   roles:
+   - Reviewer: C front end
+   - WriteAfter
+   account: mpolacek
+ - sn: Pop
+   cn: Antoniu Pop
+   email:
+   - antoniu.pop@gmail.com
+   - apop@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: apop
+   inactive: true
+ - sn: Pop
+   cn: Sebastian Pop
+   email:
+   - sebpop@gmail.com
+   - spop@gcc.gnu.org
+   - spop@nvidia.com
+   roles:
+   - Maintainer: scev, data dependence
+   - Maintainer: tree browser/unparser
+   - Reviewer: Graphite
+   - WriteAfter
+   account: spop
+ - sn: Poulhiès
+   cn: Marc Poulhiès
+   email:
+   - poulhies@adacore.com
+   - dkm@gcc.gnu.org
+   roles:
+   - Maintainer: Ada front end
+   - WriteAfter
+   account: dkm
+ - sn: Poyarekar
+   cn: Siddhesh Poyarekar
+   email:
+   - siddhesh@gotplt.org
+   - siddhesh@gcc.gnu.org
+   roles:
+   - WriteAfter
+   - DCO: siddhesh@gotplt.org
+   account: siddhesh
+ - sn: Praveen
+   cn: Vidya Praveen
+   email:
+   - vidyapraveen@arm.com
+   - vp@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: vp
+   inactive: true
+ - sn: Preud'homme
+   cn: Thomas Preud'homme
+   email:
+   - thomas.preudhomme@celest.fr
+   - thopre01@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: thopre01
+   inactive: true
+ - sn: Priour
+   cn: Benjamin Priour
+   email:
+   - priour.be@gmail.com
+   - vultkayn@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: vultkayn
+ - sn: Prus
+   cn: Vladimir Prus
+   email:
+   - vladimir@codesourcery.com
+   - vprus@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: vprus
+   inactive: true
+ - sn: Qadeer
+   cn: Hafiz Abid Qadeer
+   email:
+   - abidh@codesourcery.com
+   - abidh@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: abidh
+ - sn: Qi
+   cn: Yao Qi
+   email:
+   - yao@codesourcery.com
+   - qiyao@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: qiyao
+   inactive: true
+ - sn: Qu
+   cn: Xianmiao Qu
+   email:
+   - cooper.qu@linux.alibaba.com
+   - xianmiao@gcc.gnu.org
+   roles:
+   - Maintainer: c-sky port
+   - WriteAfter
+   account: xianmiao
+ - sn: Quinn
+   cn: Jerry Quinn
+   email:
+   - jlquinn@optonline.net
+   - jlquinn@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: jlquinn
+   inactive: true
+ - sn: Radhakrishnan
+   cn: Ramana Radhakrishnan
+   email:
+   - ramanara@nvidia.com
+   - ramana@gcc.gnu.org
+   roles:
+   - Maintainer: arm port
+   - WriteAfter
+   - DCO: ramanara@nvidia.com
+   account: ramana
+ - sn: Rahimi
+   cn: Navid Rahimi
+   email:
+   - navidr@gcc.gnu.org
+   roles:
+   - WriteAfter
+   - DCO: navidr@gcc.gnu.org
+   account: navidr
+   inactive: true
+ - sn: Raj
+   cn: Rishi Raj
+   email:
+   - rishiraj45035@gmail.com
+   - rshraj45035@gcc.gnu.org
+   roles:
+   - WriteAfter
+   - DCO: rishiraj45035@gmail.com
+   account: rshraj45035
+   inactive: true
+ - sn: Raman
+   cn: Easwaran Raman
+   email:
+   - eraman@google.com
+   - eraman@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: eraman
+   inactive: true
+ - sn: Ramsay
+   cn: Joe Ramsay
+   email:
+   - joe.ramsay@arm.com
+   - joeramsay@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: joeramsay
+ - sn: Ranns
+   cn: Nina Ranns
+   email:
+   - dinka.ranns@gmail.com
+   - ninaranns@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: ninaranns
+ - sn: Rasmussen
+   cn: Rolf Rasmussen
+   email:
+   - rolfwr@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: rolfwr
+   inactive: true
+ - sn: Reese
+   cn: Fritz Reese
+   email:
+   - fritzoreese@gmail.com
+   - foreese@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: foreese
+   inactive: true
+ - sn: Reichelt
+   cn: Volker Reichelt
+   email:
+   - v.reichelt@netcologne.de
+   - reichelt@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: reichelt
+   inactive: true
+ - sn: Rennecke
+   cn: Joern Rennecke
+   email:
+   - gnu@amylaar.uk
+   - amylaar@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: amylaar
+ - sn: Reutner-Fischer
+   cn: Bernhard Reutner-Fischer
+   email:
+   - rep.dot.nop@gmail.com
+   - aldot@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: aldot
+ - sn: Richards
+   cn: Alfie Richards
+   email:
+   - alfie.richards@arm.com
+   - alfierichards@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: alfierichards
+ - sn: Riegel
+   cn: Torvald Riegel
+   email:
+   - triegel@redhat.com
+   - torvald@gcc.gnu.org
+   roles:
+   - Maintainer: libitm
+   - WriteAfter
+   account: torvald
+   inactive: true
+ - sn: Rix
+   cn: Tom Rix
+   email:
+   - trix@redhat.com
+   - trix@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: trix
+   inactive: true
+ - sn: Rodat
+   cn: Pierre-Marie de Rodat
+   email:
+   - derodat@adacore.com
+   - pmderodat@gcc.gnu.org
+   roles:
+   - Maintainer: Ada front end
+   - WriteAfter
+   account: pmderodat
+   aliases:
+   - Pierre Marie de Rodat
+ - sn: Rodgers
+   cn: Thomas Rodgers
+   email:
+   - trodgers@redhat.com
+   - rodgertq@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: rodgertq
+ - sn: Rodrigues
+   cn: Craig Rodrigues
+   email:
+   - rodrigc@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: rodrigc
+   inactive: true
+ - sn: Rohou
+   cn: Erven Rohou
+   email:
+   - erven.rohou@inria.fr
+   - erven@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: erven
+   inactive: true
+ - sn: Rosen
+   cn: Ira Rosen
+   email:
+   - irar@il.ibm.com
+   - irar@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: irar
+   inactive: true
+ - sn: Roux
+   cn: Yvan Roux
+   email:
+   - yvan.roux@linaro.org
+   - yroux@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: yroux
+   inactive: true
+ - sn: Rozenfeld
+   cn: Eugene Rozenfeld
+   email:
+   - erozenfeld.pro@gmail.com
+   - erozen@gcc.gnu.org
+   - erozen@microsoft.com
+   roles:
+   - Maintainer: AutoFDO
+   - WriteAfter
+   account: erozen
+ - sn: Rozycki
+   cn: Maciej W. Rozycki
+   email:
+   - macro@orcam.me.uk
+   - macro@gcc.gnu.org
+   roles:
+   - Maintainer: vax port
+   - WriteAfter
+   account: macro
+ - sn: Rupp
+   cn: Douglas Rupp
+   email:
+   - douglas.b.rupp@gmail.com
+   - rupp@gcc.gnu.org
+   roles:
+   - Maintainer: VMS
+   - WriteAfter
+   account: rupp
+   inactive: true
+ - sn: Rus
+   cn: Silvius Rus
+   email:
+   - rus@google.com
+   - rus@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: rus
+   inactive: true
+ - sn: Sachs
+   cn: Matthew Sachs
+   email:
+   - msachs@apple.com
+   - matthewg@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: matthewg
+   inactive: true
+ - sn: Saini
+   cn: Ankur Saini
+   email:
+   - arsenic@sourceware.org
+   - arsenic@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: arsenic
+   inactive: true
+ - sn: Sandanagobalane
+   cn: Hariharan Sandanagobalane
+   email:
+   - hariharan.gcc@gmail.com
+   - hariharans@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: hariharans
+   inactive: true
+ - sn: Sandiford
+   cn: Richard Sandiford
+   email:
+   - rdsandiford@googlemail.com
+   - rsandifo@gcc.gnu.org
+   roles:
+   - Global
+   - Maintainer: gen* on machine desc
+   - Reviewer: wide-int
+   - WriteAfter
+   account: rsandifo
+ - sn: Sandoe
+   cn: Iain Sandoe
+   email:
+   - iain@sandoe.co.uk
+   - iains@gcc.gnu.org
+   roles:
+   - Maintainer: darwin port
+   - Maintainer: objective-c/c++
+   - WriteAfter
+   account: iains
+ - sn: Sands
+   cn: Duncan Sands
+   email:
+   - baldrick@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: baldrick
+   inactive: true
+ - sn: Saraswati
+   cn: Sujoy Saraswati
+   email:
+   - sujoy.saraswati@hpe.com
+   - ssaraswati@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: ssaraswati
+   inactive: true
+ - sn: Saunders
+   cn: Trevor Saunders
+   email:
+   - tbsaunde+gcc@tbsaunde.org
+   - tbsaunde@gcc.gnu.org
+   roles:
+   - WriteAfter
+   - DCO: tbsaunde+gcc@tbsaunde.org
+   account: tbsaunde
+   inactive: true
+ - sn: Sawdey
+   cn: Aaron Sawdey
+   email:
+   - acsawdey@linux.ibm.com
+   - acsawdey@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: acsawdey
+   inactive: true
+ - sn: Sayle
+   cn: Roger Sayle
+   email:
+   - roger@nextmovesoftware.com
+   - sayle@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: sayle
+ - sn: Schlüter
+   cn: Tobias Schlüter
+   email:
+   - tobias.schlueter@physik.uni-muenchen.de
+   - tobi@gcc.gnu.org
+   roles:
+   - Reviewer: Fortran
+   - WriteAfter
+   account: tobi
+   inactive: true
+ - sn: Schmidt
+   cn: Bernd Schmidt
+   email:
+   - bernds_cb1@t-online.de
+   - bernds@gcc.gnu.org
+   roles:
+   - Global
+   - Maintainer: c6x port
+   - WriteAfter
+   account: bernds
+   inactive: true
+ - sn: Schmidt
+   cn: Bill Schmidt
+   email:
+   - bill.schmidt@fastmail.com
+   roles:
+   - DCO: bill.schmidt@fastmail.com
+   inactive: true
+ - sn: Schmidt
+   cn: Will Schmidt
+   email:
+   - will_schmidt@vnet.ibm.com
+   - willschm@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: willschm
+   inactive: true
+ - sn: Schmitz
+   cn: Jennifer Schmitz
+   email:
+   - jschmitz@mailbox.org
+   - jschmitz@gcc.gnu.org
+   - jschmitz@nvidia.com
+   roles:
+   - WriteAfter
+   account: jschmitz
+ - sn: Schulze Frielinghaus
+   cn: Stefan Schulze Frielinghaus
+   email:
+   - stefansf@linux.ibm.com
+   - stefansf@gcc.gnu.org
+   roles:
+   - Maintainer: s390 port
+   - WriteAfter
+   account: stefansf
+ - sn: Schwab
+   cn: Andreas Schwab
+   email:
+   - schwab@linux-m68k.org
+   - schwab@gcc.gnu.org
+   - schwab@suse.de
+   roles:
+   - Maintainer: m68k port
+   - WriteAfter
+   account: schwab
+ - sn: Schwarz
+   cn: Tilo Schwarz
+   email:
+   - tilo@tilo-schwarz.de
+   - tiloschwarz@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: tiloschwarz
+   inactive: true
+ - sn: Schwinge
+   cn: Thomas Schwinge
+   email:
+   - tschwinge@baylibre.com
+   - thomas@schwinge.name
+   - tschwinge@gcc.gnu.org
+   roles:
+   - Maintainer: nvptx port
+   - Maintainer: GNU/Hurd
+     email: thomas@schwinge.name
+   - Maintainer: libgomp (OpenACC)
+   - Maintainer: OpenACC
+   - WriteAfter: thomas@schwinge.name
+   account: tschwinge
+ - sn: Sebor
+   cn: Martin Sebor
+   email:
+   - msebor@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: msebor
+   inactive: true
+ - sn: Seketeli
+   cn: Dodji Seketeli
+   email:
+   - dodji@redhat.com
+   - dodji@gcc.gnu.org
+   roles:
+   - Maintainer: diagnostic messages
+   - Maintainer: line map
+   - Reviewer: libsanitizer, asan.cc
+   - WriteAfter
+   account: dodji
+   inactive: true
+ - sn: Seldal
+   cn: Svein Seldal
+   email:
+   - svein@dev.seldal.com
+   - sveinse@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: sveinse
+   inactive: true
+ - sn: Selvaraj
+   cn: Senthil Kumar Selvaraj
+   email:
+   - saaadhu@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: saaadhu
+ - sn: Serebryany
+   cn: Kostya Serebryany
+   email:
+   - kcc@google.com
+   - kcc@gcc.gnu.org
+   roles:
+   - Reviewer: libsanitizer, asan.cc
+   - WriteAfter
+   account: kcc
+   inactive: true
+ - sn: Seufer
+   cn: Thiemo Seufer
+   email:
+   - ths@networkno.de
+   - ths@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: ths
+   inactive: true
+ - sn: Seurer
+   cn: Bill Seurer
+   email:
+   - seurer@linux.vnet.ibm.com
+   - seurer@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: seurer
+   inactive: true
+ - sn: Shang
+   cn: Yunhai Shang
+   email:
+   - yunhai@linux.alibaba.com
+   - shangyunhai@gcc.gnu.org
+   roles:
+   - Maintainer: c-sky port
+   - WriteAfter
+   account: shangyunhai
+   inactive: true
+ - sn: Shead
+   cn: Nathaniel Shead
+   email:
+   - nathanieloshead@gmail.com
+   - nshead@gcc.gnu.org
+   - nathanieloshead@gmail.org
+   roles:
+   - WriteAfter
+   - DCO: nathanieloshead@gmail.org
+   account: nshead
+ - sn: Shen
+   cn: Tim Shen
+   email:
+   - timshen@google.com
+   - timshen@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: timshen
+   inactive: true
+ - sn: Sherrill
+   cn: Joel Sherrill
+   email:
+   - joel@oarcorp.com
+   - joel@gcc.gnu.org
+   - joel@rtems.org
+   roles:
+   - Maintainer: RTEMS Ports
+   - WriteAfter
+   account: joel
+ - sn: Sherwood
+   cn: David Sherwood
+   email:
+   - david.sherwood@arm.com
+   - davids@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: davids
+   inactive: true
+ - sn: Sidwell
+   cn: Nathan Sidwell
+   email:
+   - nathan@acm.org
+   - nathan@gcc.gnu.org
+   roles:
+   - Maintainer: c++
+   - Maintainer: libcpp
+   - Maintainer: gcov
+   - WriteAfter
+   - DCO: nathan@acm.org
+   account: nathan
+ - sn: Singhai
+   cn: Sharad Singhai
+   email:
+   - singhai@google.com
+   - singhai@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: singhai
+   inactive: true
+ - sn: Singler
+   cn: Johannes Singler
+   email:
+   - singler@kit.edu
+   - singler@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: singler
+   inactive: true
+ - sn: Sirl
+   cn: Franz Sirl
+   email:
+   - franz.sirl-kernel@lauterbach.com
+   - sirl@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: sirl
+ - sn: Sjodin
+   cn: Jan Sjodin
+   email:
+   - jan.sjodin@amd.com
+   - jsjodin@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: jsjodin
+   inactive: true
+ - sn: Smigiel
+   cn: Trevor Smigiel
+   email:
+   - trevor_smigiel@playstation.sony.com
+   - tsmigiel@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: tsmigiel
+   inactive: true
+ - sn: Smith-Rowland
+   cn: Edward Smith-Rowland
+   email:
+   - esmithrowland@gmail.com
+   - emsr@gcc.gnu.org
+   roles:
+   - WriteAfter
+   - DCO: esmithrowland@gmail.com
+   account: emsr
+   inactive: true
+ - sn: Sokolov
+   cn: Anatoly Sokolov
+   email:
+   - aesok@dol.ru
+   - aesok@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: aesok
+   inactive: true
+ - sn: Sokolov
+   cn: Michael Sokolov
+   email:
+   - msokolov@ivan.Harhan.ORG
+   - msokolov@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: msokolov
+   inactive: true
+ - sn: Sonar
+   cn: Jayant Sonar
+   email:
+   - rsonar.jayant@gmail.com
+   - jayants@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: jayants
+   inactive: true
+ - sn: Song
+   cn: Fangrui Song
+   email:
+   - maskray@gcc.gnu.org
+   roles:
+   - WriteAfter
+   - DCO: maskray@gcc.gnu.org
+   account: maskray
+ - sn: Stallman
+   cn: Richard Stallman
+   email:
+   - rms@gnu.org
+   - rms@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: rms
+   inactive: true
+ - sn: Starynkevitch
+   cn: Basile Starynkevitch
+   email:
+   - basile@starynkevitch.net
+   - bstarynk@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: bstarynk
+ - sn: Staszak
+   cn: Jakub Staszak
+   email:
+   - kuba@et.pl
+   - kuba@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: kuba
+   inactive: true
+ - sn: Stott
+   cn: Graham Stott
+   email:
+   - graham.stott@btinternet.com
+   - grahams@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: grahams
+   inactive: true
+ - sn: Stubbs
+   cn: Andrew Stubbs
+   email:
+   - ams@baylibre.com
+   - ams@gcc.gnu.org
+   roles:
+   - Maintainer: amdgcn port
+   - WriteAfter
+   account: ams
+ - sn: Stump
+   cn: Mike Stump
+   email:
+   - mikestump@comcast.net
+   - mrs@gcc.gnu.org
+   roles:
+   - Maintainer: darwin port
+   - Maintainer: objective-c/c++
+   - Maintainer: testsuite
+   - Reviewer: wide-int
+   - WriteAfter
+   account: mrs
+ - sn: Sturm
+   cn: Jeff Sturm
+   email:
+   - jsturm@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: jsturm
+   inactive: true
+ - sn: Su
+   cn: YunQiang Su
+   email:
+   - syq@gcc.gnu.org
+   - yunqiang@isrc.iscas.ac.cn
+   roles:
+   - Maintainer: mips port
+   - WriteAfter
+   account: syq
+ - sn: Suchanek
+   cn: Robert Suchanek
+   email:
+   - rsuchy84@gmail.com
+   - rts@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: rts
+   inactive: true
+ - sn: Supers1ngular
+   cn: Supers1ngular
+   email:
+   - supers1ngular@baylibre.com
+   - supers1ngular@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: supers1ngular
+ - sn: Sutton
+   cn: Andrew Sutton
+   email:
+   - andrew.n.sutton@gmail.com
+   - asutton@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: asutton
+   inactive: true
+ - sn: Svelto
+   cn: Gabriele Svelto
+   email:
+   - gabriele.svelto@st.com
+   - gsvelto@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: gsvelto
+   inactive: true
+ - sn: Svensson
+   cn: Torbjörn Svensson
+   email:
+   - torbjorn.svensson@foss.st.com
+   - azoff@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: azoff
+ - sn: Tabacu
+   cn: Toma Tabacu
+   email:
+   - toma.tabacu@gmail.com
+   - tomtab@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: tomtab
+   inactive: true
+ - sn: Tahir
+   cn: Omar Tahir
+   email:
+   - omar.tahir@arm.com
+   - omatah@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: omatah
+   inactive: true
+ - sn: Tallam
+   cn: Sriraman Tallam
+   email:
+   - tmsriram@google.com
+   - tmsriram@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: tmsriram
+   inactive: true
+ - sn: Tang
+   cn: Chung-Lin Tang
+   email:
+   - cltang@baylibre.com
+   - cltang@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: cltang
+ - sn: Tardieu
+   cn: Samuel Tardieu
+   email:
+   - sam@rfc1149.net
+   - sam@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: sam
+   inactive: true
+ - sn: Taylor
+   cn: Ian Lance Taylor
+   email:
+   - ian@airs.com
+   - ian@gcc.gnu.org
+   - iant@golang.org
+   roles:
+   - Global
+   - Maintainer: go
+   - Maintainer: fp-bit
+   - Maintainer: libbacktrace
+   - Maintainer: libgcc
+   - Maintainer: libgo
+   - Maintainer: libiberty
+   - Maintainer: middle-end
+   - WriteAfter
+   account: ian
+ - sn: Tebbs
+   cn: Sam Tebbs
+   email:
+   - samuel.tebbs@gmail.com
+   - samtebbs@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: samtebbs
+   inactive: true
+ - sn: Telidevulapalli
+   cn: Vijay Telidevulapalli
+   email:
+   - vijay@linux.ibm.com
+   - vtelidev@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: vtelidev
+   aliases:
+   - Vijay Shankar
+ - sn: Temirbulatov
+   cn: Dinar Temirbulatov
+   email:
+   - dtemirbulatov@gmail.com
+   - dinar@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: dinar
+   inactive: true
+ - sn: Thomas
+   cn: Matt Thomas
+   email:
+   - matt@3am-software.com
+   - matt@gcc.gnu.org
+   roles:
+   - Maintainer: vax port
+   - WriteAfter
+   account: matt
+   inactive: true
+ - sn: Thomas
+   cn: Paul Thomas
+   email:
+   - pault@gcc.gnu.org
+   roles:
+   - Reviewer: Fortran
+   - WriteAfter
+   account: pault
+ - sn: Thomas
+   cn: Philipp Thomas
+   email:
+   - pth@suse.de
+   - pthomas@gcc.gnu.org
+   roles:
+   - Maintainer: i18n
+   - WriteAfter
+   account: pthomas
+   inactive: true
+ - sn: Thorpe
+   cn: Jason Thorpe
+   email:
+   - thorpej@netbsd.org
+   - thorpej@gcc.gnu.org
+   roles:
+   - Maintainer: netbsd
+   - WriteAfter
+   account: thorpej
+   inactive: true
+ - sn: Thorup
+   cn: Kresten Krab Thorup
+   email:
+   - krab@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: krab
+   inactive: true
+ - sn: Tice
+   cn: Caroline Tice
+   email:
+   - cmtice@google.com
+   - ctice@gcc.gnu.org
+   roles:
+   - Maintainer: libvtv
+   - WriteAfter
+   account: ctice
+   inactive: true
+ - sn: Tietz
+   cn: Kai Tietz
+   email:
+   - ktietz70@googlemail.com
+   - ktietz@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: ktietz
+   inactive: true
+ - sn: Tkachov
+   cn: Kyrylo Tkachov
+   email:
+   - ktkachov@nvidia.com
+   - ktkachov@gcc.gnu.org
+   roles:
+   - Maintainer: aarch64 port
+   - WriteAfter
+   - DCO: ktkachov@nvidia.com
+   account: ktkachov
+ - sn: Tobler
+   cn: Andreas Tobler
+   email:
+   - andreast@gcc.gnu.org
+   roles:
+   - Maintainer: freebsd
+   - WriteAfter
+   account: andreast
+   inactive: true
+ - sn: Tocar
+   cn: Ilya Tocar
+   email:
+   - tocarip@gmail.com
+   - tocarip@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: tocarip
+   inactive: true
+ - sn: Tomner
+   cn: Petter Tomner
+   email:
+   - tomner@bahnhof.se
+   - tomner@gcc.gnu.org
+   roles:
+   - WriteAfter
+   - DCO: tomner@bahnhof.se
+   account: tomner
+   inactive: true
+ - sn: Tomsich
+   cn: Philipp Tomsich
+   email:
+   - philipp.tomsich@vrull.eu
+   - ptomsich@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: ptomsich
+ - sn: Towner
+   cn: Daniel Towner
+   email:
+   - dant@picochip.com
+   - dwtowner@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: dwtowner
+   inactive: true
+ - sn: Trifunovic
+   cn: Konrad Trifunovic
+   email:
+   - konrad.trifunovic@inria.fr
+   - trifunovic@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: trifunovic
+   inactive: true
+ - sn: Trippelsdorf
+   cn: Markus Trippelsdorf
+   email:
+   - markus@trippelsdorf.de
+   - trippels@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: trippels
+   inactive: true
+ - sn: Trofimovich
+   cn: Sergei Trofimovich
+   email:
+   - slyfox@gcc.gnu.org
+   - siarheit@google.com
+   roles:
+   - WriteAfter
+   account: slyfox
+ - sn: Tromey
+   cn: Tom Tromey
+   email:
+   - tromey@redhat.com
+   - tromey@gcc.gnu.org
+   - tromey@adacore.com
+   roles:
+   - Reviewer: libcpp
+   - WriteAfter
+   account: tromey
+ - sn: Tsimbalist
+   cn: Igor Tsimbalist
+   email:
+   - igor.v.tsimbalist@intel.com
+   - itsimbal@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: itsimbal
+   inactive: true
+ - sn: Uecker
+   cn: Martin Uecker
+   email:
+   - uecker@gcc.gnu.org
+   - uecker@tugraz.at
+   roles:
+   - WriteAfter
+   - DCO: uecker@gcc.gnu.org
+   account: uecker
+ - sn: Ung
+   cn: David Ung
+   email:
+   - davidu@mips.com
+   - davidu@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: davidu
+   inactive: true
+ - sn: Vachharajani
+   cn: Neil Vachharajani
+   email:
+   - nvachhar@gmail.com
+   - nvachhar@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: nvachhar
+   inactive: true
+ - sn: Van Hees
+   cn: Kris Van Hees
+   email:
+   - kris.van.hees@oracle.com
+   - kvanhees@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: kvanhees
+   inactive: true
+ - sn: VandeVondele
+   cn: Joost VandeVondele
+   email:
+   - joost.vandevondele@mat.ethz.ch
+   - vondele@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: vondele
+   inactive: true
+ - sn: Vehreschild
+   cn: Andre Vehreschild
+   email:
+   - vehre@gmx.de
+   - vehre@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: vehre
+ - sn: Velenko
+   cn: Alex Velenko
+   email:
+   - alex.velenko@arm.com
+   - avelenko@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: avelenko
+   inactive: true
+ - sn: Verbin
+   cn: Ilya Verbin
+   email:
+   - iverbin@gmail.com
+   - iverbin@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: iverbin
+   inactive: true
+ - sn: Vieira
+   cn: Andre Vieira
+   email:
+   - andre.simoesdiasvieira@arm.com
+   - avieira@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: avieira
+   aliases:
+   - Andre Simoes Dias Vieira
+ - sn: Villemoes
+   cn: Rasmus Villemoes
+   email:
+   - rv@rasmusvillemoes.dk
+   - villemoes@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: villemoes
+ - sn: Vivekanandarajah
+   cn: Kugan Vivekanandarajah
+   email:
+   - kvivekananda@nvidia.com
+   - kugan@gcc.gnu.org
+   roles:
+   - WriteAfter
+   - DCO: kvivekananda@nvidia.com
+   account: kugan
+ - sn: Volkov
+   cn: Artemiy Volkov
+   email:
+   - artemiy.volkov@arm.com
+   - artemiyv@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: artemiyv
+ - sn: Vollweiler
+   cn: Marcel Vollweiler
+   email:
+   - marcel@codesourcery.com
+   - marcel@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: marcel
+   inactive: true
+ - sn: Voutilainen
+   cn: Ville Voutilainen
+   email:
+   - ville.voutilainen@gmail.com
+   - ville@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: ville
+ - sn: Vries
+   cn: Tom de Vries
+   email:
+   - tdevries@suse.de
+   - vries@gcc.gnu.org
+   roles:
+   - Maintainer: nvptx port
+   - WriteAfter
+   account: vries
+ - sn: Vukicevic
+   cn: Nenad Vukicevic
+   email:
+   - nenad@intrepid.com
+   - nenadv@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: nenadv
+   inactive: true
+ - sn: Vyukov
+   cn: Dmitry Vyukov
+   email:
+   - dvyukov@google.com
+   - dvyukov@gcc.gnu.org
+   roles:
+   - Reviewer: libsanitizer, asan.cc
+   - WriteAfter
+   account: dvyukov
+   inactive: true
+ - sn: Waffl3x
+   cn: Waffl3x
+   email:
+   - waffl3x@baylibre.com
+   - waffl3x@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: waffl3x
+ - sn: Wakely
+   cn: Jonathan Wakely
+   email:
+   - jwakely@redhat.com
+   - redi@gcc.gnu.org
+   roles:
+   - Maintainer: c++ runtime libs
+   - WriteAfter
+   - DCO: jwakely@redhat.com
+   account: redi
+ - sn: Walfridsson
+   cn: Krister Walfridsson
+   email:
+   - krister.walfridsson@gmail.com
+   - kristerw@gcc.gnu.org
+   roles:
+   - Maintainer: netbsd
+   - WriteAfter
+   account: kristerw
+ - sn: Wang
+   cn: Feng Wang
+   email:
+   - fengwang@nudt.edu.cn
+   - fengwang@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: fengwang
+   inactive: true
+ - sn: Wang
+   cn: Feng Wang
+   email:
+   - wangfeng@eswincomputing.com
+   - fengwang1792@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: fengwang1792
+ - sn: Wang
+   cn: Hongyu Wang
+   email:
+   - hongyu.wang@intel.com
+   - hongyuw@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: hongyuw
+ - sn: Wang
+   cn: Jiong Wang
+   email:
+   - jiong.wang@arm.com
+   - jiwang@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: jiwang
+   inactive: true
+ - sn: Waterman
+   cn: Andrew Waterman
+   email:
+   - andrew@sifive.com
+   - aswaterman@gcc.gnu.org
+   roles:
+   - Maintainer: riscv port
+   - WriteAfter
+   account: aswaterman
+ - sn: Webb
+   cn: Stephen M. Webb
+   email:
+   - stephen.webb@bregmasoft.com
+   - smw@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: smw
+   inactive: true
+ - sn: Wehle
+   cn: John Wehle
+   email:
+   - john@feith.com
+   - wehle@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: wehle
+   inactive: true
+ - sn: Weigand
+   cn: Ulrich Weigand
+   email:
+   - uweigand@de.ibm.com
+   - uweigand@gcc.gnu.org
+   - ulrich.weigand@de.ibm.com
+   roles:
+   - Maintainer: s390 port
+   - Maintainer: reload
+   - WriteAfter
+   account: uweigand
+ - sn: Weil
+   cn: Janus Weil
+   email:
+   - janus@gcc.gnu.org
+   roles:
+   - Reviewer: Fortran
+   - WriteAfter
+   account: janus
+   inactive: true
+ - sn: Weimer
+   cn: Florian Weimer
+   email:
+   - fweimer@redhat.com
+   - fw@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: fw
+ - sn: Weinberg
+   cn: Zack Weinberg
+   email:
+   - zackw@panix.com
+   - zack@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: zack
+   inactive: true
+ - sn: Westbrooks
+   cn: Alexander Westbrooks
+   email:
+   - alexanderw@gcc.gnu.org
+   roles:
+   - WriteAfter
+   - DCO: alexanderw@gcc.gnu.org
+   account: alexanderw
+   inactive: true
+ - sn: Wielaard
+   cn: Mark Wielaard
+   email:
+   - mark@gcc.gnu.org
+   - mark@klomp.org
+   roles:
+   - WriteAfter
+   account: mark
+ - sn: Wienskoski
+   cn: Edmar Wienskoski
+   email:
+   - edmar@freescale.com
+   - edmarwjr@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: edmarwjr
+   inactive: true
+ - sn: Wild
+   cn: Ollie Wild
+   email:
+   - aaw@google.com
+   - aaw@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: aaw
+   inactive: true
+ - sn: Wildenhues
+   cn: Ralf Wildenhues
+   email:
+   - Ralf.Wildenhues@gmx.de
+   - rwild@gcc.gnu.org
+   roles:
+   - Maintainer: build machinery (*.in)
+   - WriteAfter
+   account: rwild
+   inactive: true
+ - sn: Williams
+   cn: Kevin Williams
+   email:
+   - kevin.williams@inria.fr
+   - kwilliam@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: kwilliam
+   inactive: true
+ - sn: Wilson
+   cn: Jim Wilson
+   email:
+   - wilson@tuliptree.org
+   - jim.wilson.gcc@gmail.com
+   - wilson@gcc.gnu.org
+   roles:
+   - Global
+   - Maintainer: riscv port
+     email: jim.wilson.gcc@gmail.com
+   - Maintainer: debugging code
+   - Maintainer: scheduler (+ haifa)
+   - WriteAfter: jim.wilson.gcc@gmail.com
+   account: wilson
+   inactive: true
+ - sn: Wirkus
+   cn: Przemyslaw Wirkus
+   email:
+   - przemyslaw.wirkus@arm.com
+   - wirkus@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: wirkus
+   inactive: true
+ - sn: Wood
+   cn: Carlo Wood
+   email:
+   - carlo@alinoe.com
+   - carlo@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: carlo
+   inactive: true
+ - sn: Woodruff
+   cn: Jackson Woodruff
+   email:
+   - jackson.woodruff@arm.com
+   - jcw@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: jcw
+   inactive: true
+ - sn: Wright
+   cn: Jonathan Wright
+   email:
+   - jonathan.wright@arm.com
+   - jonwri01@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: jonwri01
+   inactive: true
+ - sn: Wu
+   cn: Chung-Ju Wu
+   email:
+   - jasonwucj@gmail.com
+   - jasonwucj@gcc.gnu.org
+   roles:
+   - Maintainer: nds32 port
+   - WriteAfter
+   - DCO: jasonwucj@gmail.com
+   account: jasonwucj
+ - sn: Wu
+   cn: Le-Chun Wu
+   email:
+   - lcwu@google.com
+   - lcwu@gcc.gnu.org
+   roles:
+   - Reviewer: Plugin
+   - WriteAfter
+   account: lcwu
+   inactive: true
+ - sn: Xi
+   cn: Ruoyao Xi
+   email:
+   - xry111@xry111.site
+   - xry111@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: xry111
+   aliases:
+   - Xi Ruoyao
+ - sn: Xing
+   cn: Mingjie Xing
+   email:
+   - mingjie.xing@gmail.com
+   - xmj@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: xmj
+   inactive: true
+ - sn: Xu
+   cn: Chenghua Xu
+   email:
+   - xuchenghua@loongson.cn
+   - paul.hua.gm@gmail.com
+   - paulhua@gcc.gnu.org
+   roles:
+   - Maintainer: LoongArch port
+   - WriteAfter: paul.hua.gm@gmail.com
+   account: paulhua
+ - sn: Xu
+   cn: Li Xu
+   email:
+   - xuli1@eswincomputing.com
+   - xuli@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: xuli
+   aliases:
+   - xuli
+ - sn: Xue
+   cn: Feng Xue
+   email:
+   - fxue@os.amperecomputing.com
+   - fxue@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: fxue
+ - sn: Yang
+   cn: Canqun Yang
+   email:
+   - canqun@nudt.edu.cn
+   - canqun@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: canqun
+   inactive: true
+ - sn: Yang
+   cn: Fei Yang
+   email:
+   - felix.yang@huawei.com
+   - fyang@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: fyang
+   inactive: true
+ - sn: Yasskin
+   cn: Jeffrey Yasskin
+   email:
+   - jyasskin@google.com
+   - jyasskin@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: jyasskin
+   inactive: true
+ - sn: Ye
+   cn: Joey Ye
+   email:
+   - joey.ye@arm.com
+   - jye2@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: jye2
+   inactive: true
+ - sn: Yeung
+   cn: Kwok Cheung Yeung
+   email:
+   - kcyeung@baylibre.com
+   - kcy@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: kcy
+ - sn: Yong
+   cn: Jonathan Yong
+   email:
+   - 10walls@gmail.com
+   - jyong@gcc.gnu.org
+   roles:
+   - Maintainer: cygwin, mingw-w64
+   - WriteAfter
+   account: jyong
+ - sn: Yorsh
+   cn: Greta Yorsh
+   email:
+   - greta.yorsh@arm.com
+   - gretay@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: gretay
+   inactive: true
+ - sn: Yukhin
+   cn: Kirill Yukhin
+   email:
+   - kirill.yukhin@gmail.com
+   - kyukhin@gcc.gnu.org
+   roles:
+   - Maintainer: i386 vector ISA extns
+   - WriteAfter
+   account: kyukhin
+   inactive: true
+ - sn: Yuste
+   cn: David Yuste
+   email:
+   - david.yuste@gmail.com
+   - dyuste@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: dyuste
+   inactive: true
+ - sn: Zadeck
+   cn: Kenneth Zadeck
+   email:
+   - zadeck@naturalbridge.com
+   - zadeck@gcc.gnu.org
+   roles:
+   - Reviewer: dataflow
+   - Reviewer: register allocation
+   - Reviewer: wide-int
+   - WriteAfter
+   account: zadeck
+   inactive: true
+ - sn: Zanella
+   cn: Adhemerval Zanella
+   email:
+   - azanella@linux.vnet.ibm.com
+   - azanella@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: azanella
+   inactive: true
+ - sn: Zeng
+   cn: Xiao Zeng
+   email:
+   - zengxiao@eswincomputing.com
+   - zeng@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: zeng
+ - sn: Zhang
+   cn: Dennis Zhang
+   email:
+   - dennis.zhang@arm.com
+   - xczhang@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: xczhang
+   inactive: true
+ - sn: Zhang
+   cn: Jie Zhang
+   email:
+   - jzhang918@gmail.com
+   - jiez@gcc.gnu.org
+   roles:
+   - Maintainer: bfin port
+   - WriteAfter
+   account: jiez
+   inactive: true
+ - sn: Zhang
+   cn: Yufeng Zhang
+   email:
+   - yufeng.zhang@arm.com
+   - yufeng@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: yufeng
+   inactive: true
+ - sn: Zhao
+   cn: Qing Zhao
+   email:
+   - qing.zhao69@gmail.com
+   - qinzhao@gcc.gnu.org
+   - qing.zhao@oracle.com
+   roles:
+   - WriteAfter
+   account: qinzhao
+ - sn: Zhao
+   cn: Shujing Zhao
+   email:
+   - pearly.zhao@oracle.com
+   - pzhao@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: pzhao
+   inactive: true
+ - sn: Zheng
+   cn: Pengxuan Zheng
+   email:
+   - pengxuan.zheng@oss.qualcomm.com
+   - pzheng@gcc.gnu.org
+   - quic_pzheng@quicinc.com
+   roles:
+   - WriteAfter
+   - DCO: pengxuan.zheng@oss.qualcomm.com
+   - DCO: quic_pzheng@quicinc.com
+   account: pzheng
+ - sn: Zhong
+   cn: Juzhe Zhong
+   email:
+   - juzhe.zhong@rivai.ai
+   - juzhe@gcc.gnu.org
+   roles:
+   - Reviewer: riscv port
+   - WriteAfter
+   account: juzhe
+ - sn: Zhuykov
+   cn: Roman Zhuykov
+   email:
+   - zhroma@ispras.ru
+   - zhroma@gcc.gnu.org
+   roles:
+   - Maintainer: modulo-scheduler
+   - WriteAfter
+   account: zhroma
+   inactive: true
+ - sn: Ziegler
+   cn: Jon Ziegler
+   email:
+   - jonz@apple.com
+   - jonz@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: jonz
+   inactive: true
+ - sn: Zinsly
+   cn: Raphael Zinsly
+   email:
+   - rzinsly@qti.qualcomm.com
+   - rzinsly@gcc.gnu.org
+   - rzinsly@ventanamicro.com
+   - raphael.zinsly@oss.qualcomm.com
+   roles:
+   - WriteAfter
+   - DCO: rzinsly@qti.qualcomm.com
+   - DCO: rzinsly@ventanamicro.com
+   account: rzinsly
+   aliases:
+   - Raphael Moreira Zinsly
+ - sn: Zippel
+   cn: Roman Zippel
+   email:
+   - zippel@linux-m68k.org
+   - zippel@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: zippel
+   inactive: true
+ - sn: Zissulescu
+   cn: Claudiu Zissulescu
+   email:
+   - claziss@gmail.com
+   - claziss@gcc.gnu.org
+   roles:
+   - Maintainer: arc port
+   - WriteAfter
+   account: claziss
+ - sn: Zlomek
+   cn: Josef Zlomek
+   email:
+   - josef.zlomek@email.cz
+   - zlomek@gcc.gnu.org
+   roles:
+   - WriteAfter
+   account: zlomek
+   inactive: true
+ subsystems:
+ - name: '*gimpl*'
+   class: Subsystem
+   labels: []
+ - name: '*vrp, ranger'
+   class: Subsystem
+   labels: []
+ - name: Ada front end
+   class: Lang
+   labels: []
+ - name: Algol 68
+   class: Lang
+   labels: []
+ - name: Android sub-port
+   class: OS
+   labels: []
+ - name: AutoFDO
+   class: Subsystem
+   labels: []
+ - name: C front end
+   labels: []
+ - name: C front end/ISO C99
+   class: Lang
+   labels: []
+ - name: COBOL front end
+   class: Lang
+   labels: []
+ - name: CTF, BTF
+   labels: []
+ - name: CTF, BTF, bpf port
+   labels: []
+ - name: D front end
+   class: Lang
+   labels: []
+ - name: DJGPP
+   class: OS
+   labels: []
+ - name: Fortran
+   labels: []
+ - name: GNU/Hurd
+   class: OS
+   labels: []
+ - name: Graphite
+   labels: []
+ - name: LTO
+   labels: []
+ - name: LTO plugin
+   labels: []
+ - name: LoongArch port
+   class: CPU
+   labels: []
+ - name: Modula-2 front end
+   class: Lang
+   labels: []
+ - name: OpenACC
+   class: Subsystem
+   labels: []
+ - name: OpenMP
+   class: Subsystem
+   labels: []
+ - name: Plugin
+   labels: []
+ - name: RTEMS Ports
+   class: OS
+   labels: []
+ - name: RTL optimizers
+   class: Subsystem
+   labels: []
+ - name: Rust
+   class: Lang
+   labels: []
+ - name: libgrust
+   class: Subsystem
+   labels: []
+ - name: VMS
+   class: OS
+   labels: []
+ - name: VxWorks ports
+   class: OS
+   labels: []
+ - name: aarch64 ldp/stp
+   class: CPU
+   labels: []
+ - name: aarch64 port
+   class: CPU
+   labels: []
+ - name: aix
+   class: OS
+   labels: []
+ - name: alpha port
+   class: CPU
+   labels: []
+ - name: amdgcn port
+   class: CPU
+   labels: []
+ - name: arc port
+   class: CPU
+   labels: []
+ - name: arm port
+   class: CPU
+   labels: []
+ - name: arm port (MVE)
+   labels: []
+ - name: avr port
+   class: CPU
+   labels: []
+ - name: bfin port
+   class: CPU
+   labels: []
+ - name: bpf port
+   class: CPU
+   labels: []
+ - name: build machinery (*.in)
+   class: Subsystem
+   labels: []
+ - name: c++
+   class: Lang
+   labels: []
+ - name: c++ runtime libs
+   class: Subsystem
+   labels: []
+ - name: c++ runtime libs special modes
+   class: Subsystem
+   labels: []
+ - name: c-sky port
+   class: CPU
+   labels: []
+ - name: c6x port
+   class: CPU
+   labels: []
+ - name: caller-save.cc
+   class: Subsystem
+   labels: []
+ - name: callgraph
+   class: Subsystem
+   labels: []
+ - name: config.sub/config.guess
+   class: Subsystem
+   labels: []
+ - name: cris port
+   class: CPU
+   labels: []
+ - name: cygwin, mingw-w64
+   class: OS
+   labels: []
+ - name: darwin port
+   class: OS
+   labels: []
+ - name: dataflow
+   labels: []
+ - name: debugging code
+   class: Subsystem
+   labels: []
+ - name: diagnostic messages
+   class: Subsystem
+   labels: []
+ - name: docs co-maintainer
+   class: Subsystem
+   labels: []
+ - name: docstring relicensing
+   class: Subsystem
+   labels: []
+ - name: driver
+   labels: []
+ - name: dwarf debugging code
+   class: Subsystem
+   labels: []
+ - name: fixincludes
+   class: Subsystem
+   labels: []
+ - name: forge integration
+   class: Subsystem
+   labels: []
+ - name: fp-bit
+   class: Subsystem
+   labels: []
+ - name: fr30 port
+   class: CPU
+   labels: []
+ - name: freebsd
+   class: OS
+   labels: []
+ - name: frv port
+   class: CPU
+   labels: []
+ - name: ft32 port
+   class: CPU
+   labels: []
+ - name: gcov
+   class: Subsystem
+   labels: []
+ - name: gcse.cc
+   class: Subsystem
+   labels: []
+ - name: gdbhooks.py
+   class: Subsystem
+   labels: []
+ - name: gen* on machine desc
+   class: Subsystem
+   labels: []
+ - name: global opt framework
+   class: Subsystem
+   labels: []
+ - name: go
+   class: Lang
+   labels: []
+ - name: h8 port
+   class: CPU
+   labels: []
+ - name: hppa port
+   class: CPU
+   labels: []
+ - name: hpux
+   class: OS
+   labels: []
+ - name: i18n
+   class: Subsystem
+   labels: []
+ - name: i386 port
+   class: CPU
+   labels: []
+ - name: i386 vector ISA extns
+   class: CPU
+   labels: []
+ - name: instruction combiner
+   class: Subsystem
+   labels: []
+ - name: iq2000 port
+   class: CPU
+   labels: []
+ - name: jit
+   class: Subsystem
+   labels: []
+ - name: jump.cc
+   class: Subsystem
+   labels: []
+ - name: libbacktrace
+   class: Subsystem
+   labels: []
+ - name: libcpp
+   class: Subsystem
+   labels: []
+ - name: libga68
+   class: Subsystem
+   labels: []
+ - name: libgcc
+   class: Subsystem
+   labels: []
+ - name: libgo
+   class: Subsystem
+   labels: []
+ - name: libgomp
+   class: Subsystem
+   labels: []
+ - name: libgomp (OpenACC)
+   class: Subsystem
+   labels: []
+ - name: libiberty
+   class: Subsystem
+   labels: []
+ - name: libitm
+   class: Subsystem
+   labels: []
+ - name: libobjc
+   class: Subsystem
+   labels: []
+ - name: libphobos
+   class: Subsystem
+   labels: []
+ - name: libquadmath
+   class: Subsystem
+   labels: []
+ - name: libsanitizer, asan.cc
+   labels: []
+ - name: libvtv
+   class: Subsystem
+   labels: []
+ - name: line map
+   class: Subsystem
+   labels: []
+ - name: lm32 port
+   class: CPU
+   labels: []
+ - name: loop infrastructure
+   class: Subsystem
+   labels: []
+ - name: loop ivopts
+   class: Subsystem
+   labels: []
+ - name: loop optimizer
+   class: Subsystem
+   labels: []
+ - name: m32r port
+   class: CPU
+   labels: []
+ - name: m68k port
+   class: CPU
+   labels: []
+ - name: m68k port (?)
+   class: CPU
+   labels: []
+ - name: m68k-motorola-sysv port
+   class: CPU
+   labels: []
+ - name: mcore port
+   class: CPU
+   labels: []
+ - name: microblaze
+   class: CPU
+   labels: []
+ - name: middle-end
+   class: Subsystem
+   labels: []
+ - name: mips port
+   class: CPU
+   labels: []
+ - name: mmix port
+   class: CPU
+   labels: []
+ - name: mn10300 port
+   class: CPU
+   labels: []
+ - name: modulo-scheduler
+   class: Subsystem
+   labels: []
+ - name: moxie port
+   class: CPU
+   labels: []
+ - name: msp430 port
+   class: CPU
+   labels: []
+ - name: nds32 port
+   class: CPU
+   labels: []
+ - name: netbsd
+   class: OS
+   labels: []
+ - name: nvptx port
+   class: CPU
+   labels: []
+ - name: objective-c/c++
+   class: Lang
+   labels: []
+ - name: option handling
+   class: Subsystem
+   labels: []
+ - name: or1k port
+   class: CPU
+   labels: []
+ - name: pair fusion
+   class: Subsystem
+   labels: []
+ - name: pdp11 port
+   class: CPU
+   labels: []
+ - name: powerpcspe port
+   class: CPU
+   labels: []
+ - name: predict.def
+   class: Subsystem
+   labels: []
+ - name: profile feedback
+   class: Subsystem
+   labels: []
+ - name: pru port
+   class: CPU
+   labels: []
+ - name: register allocation
+   class: Subsystem
+   labels: []
+ - name: reload
+   class: Subsystem
+   labels: []
+ - name: reorg
+   class: Subsystem
+   labels: []
+ - name: riscv port
+   class: CPU
+   labels: []
+ - name: rs6000 vector extns
+   class: CPU
+   labels: []
+ - name: rs6000/powerpc port
+   class: CPU
+   labels: []
+ - name: rx port
+   class: CPU
+   labels: []
+ - name: s390 port
+   class: CPU
+   labels: []
+ - name: scev, data dependence
+   class: Subsystem
+   labels: []
+ - name: scheduler (+ haifa)
+   class: Subsystem
+   labels: []
+ - name: selective scheduling
+   labels: []
+ - name: sh port
+   class: CPU
+   labels: []
+ - name: sh-linux-gnu
+   class: OS
+   labels: []
+ - name: soft-fp
+   class: Subsystem
+   labels: []
+ - name: solaris
+   class: OS
+   labels: []
+ - name: sparc port
+   class: CPU
+   labels: []
+ - name: static analyzer
+   class: Subsystem
+   labels: []
+ - name: testsuite
+   class: Subsystem
+   labels: []
+ - name: tree browser/unparser
+   class: Subsystem
+   labels: []
+ - name: tree-ssa
+   class: Subsystem
+   labels: []
+ - name: v850 port
+   class: CPU
+   labels: []
+ - name: vax port
+   class: CPU
+   labels: []
+ - name: vectorizer (+ tree-if-conv)
+   class: Subsystem
+   labels: []
+ - name: visium port
+   class: CPU
+   labels: []
+ - name: web pages
+   class: Subsystem
+   labels: []
+ - name: wide-int
+   labels: []
+ - name: x86-64 port
+   class: CPU
+   labels: []
+ - name: xstormy16 port
+   class: CPU
+   labels: []
+ - name: xtensa port
+   class: CPU
+   labels: []
diff -Nrcpad gcc-17-20260705/MD5SUMS gcc-17-20260712/MD5SUMS
*** gcc-17-20260705/MD5SUMS	Sun Jul  5 22:32:28 2026
--- gcc-17-20260712/MD5SUMS	Sun Jul 12 22:32:29 2026
***************
*** 1,5 ****
  # This file contains the MD5 checksums of the files in the
! # gcc-17-20260705.tar.xz tarball.
  #
  # Besides verifying that all files in the tarball were correctly expanded,
  # it also can be used to determine if any files have changed since the
--- 1,5 ----
  # This file contains the MD5 checksums of the files in the
! # gcc-17-20260712.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
***************
*** 10,16 ****
  #
  e8eeef33ef071516ce3f689e9c71e0b5  .b4-config
  fd78d02fa55fcdb78ddb2f37a7868dbb  .dir-locals.el
! 36adccc3b45bf15b55eca368b1717231  .editorconfig
  de7dc21e015b0c29001fa7a1e3d4a2ac  .forgejo/CODEOWNERS
  b91d600742b62d1860809cb184055a3d  .forgejo/PULL_REQUEST_TEMPLATE.md
  9a22a68c0484f3f139296a8e26cdf746  .forgejo/workflows/build-containers.yaml
--- 10,16 ----
  #
  e8eeef33ef071516ce3f689e9c71e0b5  .b4-config
  fd78d02fa55fcdb78ddb2f37a7868dbb  .dir-locals.el
! 29ad7205a5129e9815287548cc41e61c  .editorconfig
  de7dc21e015b0c29001fa7a1e3d4a2ac  .forgejo/CODEOWNERS
  b91d600742b62d1860809cb184055a3d  .forgejo/PULL_REQUEST_TEMPLATE.md
  9a22a68c0484f3f139296a8e26cdf746  .forgejo/workflows/build-containers.yaml
*************** ac5a8807f431d3dab46a7425b96379e4  .gitig
*** 25,36 ****
  fe60d87048567d4fe8c8a0ed2448bcc8  COPYING.RUNTIME
  d32239bcb673463ab874e80d47fae504  COPYING3
  6a6a8e020838b23406c81b19c1d46df6  COPYING3.LIB
! 60b4abff2f9d655d6e38e87f6616ad87  ChangeLog
  fd4ecdf5d672efe2b0e409aca9cf9446  ChangeLog.jit
  09538b708302f1735f6fa05b622ecf5e  ChangeLog.tree-ssa
  24ab760126489e69436a43185dc3d202  INSTALL/README
! b6fc1660ec7655660a58aba7e8d65c25  LAST_UPDATED
! e13da154b062316b470a12743d14720d  MAINTAINERS
  f1b0fe5b41f7272f173407bd21947846  Makefile.def
  fbda720c413d124746752b72dbcfff21  Makefile.in
  1c50f15d0e3e9ca32ee2b28db19f45bd  Makefile.tpl
--- 25,37 ----
  fe60d87048567d4fe8c8a0ed2448bcc8  COPYING.RUNTIME
  d32239bcb673463ab874e80d47fae504  COPYING3
  6a6a8e020838b23406c81b19c1d46df6  COPYING3.LIB
! 9d63352e1c60518d578614ba8155cb31  ChangeLog
  fd4ecdf5d672efe2b0e409aca9cf9446  ChangeLog.jit
  09538b708302f1735f6fa05b622ecf5e  ChangeLog.tree-ssa
  24ab760126489e69436a43185dc3d202  INSTALL/README
! 3330a5f6e8e9837b71edeee414c43929  LAST_UPDATED
! 53f28ecf635daa37f40d869d2d81f582  MAINTAINERS
! 14d4f33dde20812b58d25d4315a450f3  MAINTAINERS.yml
  f1b0fe5b41f7272f173407bd21947846  Makefile.def
  fbda720c413d124746752b72dbcfff21  Makefile.in
  1c50f15d0e3e9ca32ee2b28db19f45bd  Makefile.tpl
*************** c64564b7c7563dae5ebe016f340c9cd9  config
*** 52,58 ****
  111d54aa3a3019adbab413c8fb435f22  config.sub
  9c33904ec10298e219df9283f12bd212  config/ChangeLog
  e8365ab73da09dccff77a6e2ad006a68  config/acinclude.m4
! 409d638331fd2685c1b93ba929d09e96  config/acx.m4
  4de461a68cd5bb679a47eb9ad5dbbec2  config/asmcfi.m4
  a6bf9c39c62222092ea6d5d8551c077f  config/ax_check_define.m4
  fa1446baa94824d733d33eb615217d23  config/ax_count_cpus.m4
--- 53,59 ----
  111d54aa3a3019adbab413c8fb435f22  config.sub
  9c33904ec10298e219df9283f12bd212  config/ChangeLog
  e8365ab73da09dccff77a6e2ad006a68  config/acinclude.m4
! b724461247ded067ef9b1723c75e6467  config/acx.m4
  4de461a68cd5bb679a47eb9ad5dbbec2  config/asmcfi.m4
  a6bf9c39c62222092ea6d5d8551c077f  config/ax_check_define.m4
  fa1446baa94824d733d33eb615217d23  config/ax_count_cpus.m4
*************** dd20b4aa952e750070486e3525cba7bd  config
*** 159,169 ****
  7ef51b0adb98e5c5f7aba46d2c7293f1  config/weakref.m4
  0163b672c888aaf1c8ad3e867a0ec9f1  config/zlib.m4
  db74a73c3c9c3cc71edec37c2436e082  config/zstd.m4
! baf6ecfe9b98d4e43bffa20374340f5c  configure
! fadff482b53ef4a2375e66324a9693c0  configure.ac
! 42cad2fc0cfabd1041cab65a7e87a828  contrib/ChangeLog
  5fc435c7928f858246df931ea3f3ece7  contrib/ChangeLog.jit
  7af8d2979bf1a7cfa88e30d05fa22be2  contrib/ChangeLog.tree-ssa
  0928ae42250fbb57246cf6e9bff2276b  contrib/analyze_brprob.py
  fe0f3407e74565a0439ac210148486ca  contrib/analyze_brprob_spec.py
  f32ea8aa594c39765895562afc43e221  contrib/bench-stringop
--- 160,171 ----
  7ef51b0adb98e5c5f7aba46d2c7293f1  config/weakref.m4
  0163b672c888aaf1c8ad3e867a0ec9f1  config/zlib.m4
  db74a73c3c9c3cc71edec37c2436e082  config/zstd.m4
! 5bcd6c5d0e5af28ef977314b079ca150  configure
! 32aa07435dfdbb17b3484dc82ad8e8d4  configure.ac
! f866b3bffeae929055ad39d250512325  contrib/ChangeLog
  5fc435c7928f858246df931ea3f3ece7  contrib/ChangeLog.jit
  7af8d2979bf1a7cfa88e30d05fa22be2  contrib/ChangeLog.tree-ssa
+ 95f2ccad93e447dc3cbd991a1e66fae2  contrib/add-write-after.py
  0928ae42250fbb57246cf6e9bff2276b  contrib/analyze_brprob.py
  fe0f3407e74565a0439ac210148486ca  contrib/analyze_brprob_spec.py
  f32ea8aa594c39765895562afc43e221  contrib/bench-stringop
*************** e476ff9755e2b2f65ff63d32fc2b15e4  contri
*** 176,182 ****
  a58c6d563061b437bb37db944059c591  contrib/bpf-vmtest-tool/tests/test_cli.py
  94c929abb32ebb06e2ada64408955a17  contrib/bpf-vmtest-tool/utils.py
  ee0ae327aa0f1870f7f3769378ffe5f3  contrib/bpf-vmtest-tool/vm.py
- 823971beee3a02aa2cb477ce439fc727  contrib/check-MAINTAINERS.py
  14d637c1673ab29eb925fc542cf5955c  contrib/check-internal-format-escaping.py
  71d1b41247c5c74fb047e13edec7e323  contrib/check-params-in-docs.py
  7718189f09f512492ac48fac60f8ce42  contrib/check_GNU_style.py
--- 178,183 ----
*************** bde8448e2c28f4ec9e2d2c757bd72d3f  contri
*** 189,201 ****
  b86e5225e1674458863dc0b790e46a45  contrib/ci-containers/autoregen/autoregen.py
  68a5e73722e53ec9c89cecbcee45d1f0  contrib/ci-containers/build-image.sh
  fc345f1413e7f99f00e4cb2870f02723  contrib/clang-format
! e00c832fde8864101854ea71ceb1ecaa  contrib/compare-all-tests
  8ae4a4d45e23f2defa74aef0b7cabbeb  contrib/compare-debug
  e1d12a65b82fa451f8d0d4ef0f849895  contrib/compare-lto
  d09c16bcb6b535fb130486ef9ee3beec  contrib/compareSumTests3
  c0b13a476b5e57b6d55b304f67f69581  contrib/compare_tests
  652ed31d99697495ddefe9885ce403da  contrib/compare_two_ftime_report_sets
! c02def56b4e64e30fd41ebe49b32aa93  contrib/config-list.mk
  50d60ebb1e537550506cd7352443d454  contrib/dg-cmp-results.sh
  979a288476a0d77345492450f86966e3  contrib/dg-extract-results.py
  a72cf7608237ddae6dd5fe9bfb266f84  contrib/dg-extract-results.sh
--- 190,202 ----
  b86e5225e1674458863dc0b790e46a45  contrib/ci-containers/autoregen/autoregen.py
  68a5e73722e53ec9c89cecbcee45d1f0  contrib/ci-containers/build-image.sh
  fc345f1413e7f99f00e4cb2870f02723  contrib/clang-format
! 5fef3c724815d1fb87ed122cbb871c21  contrib/compare-all-tests
  8ae4a4d45e23f2defa74aef0b7cabbeb  contrib/compare-debug
  e1d12a65b82fa451f8d0d4ef0f849895  contrib/compare-lto
  d09c16bcb6b535fb130486ef9ee3beec  contrib/compareSumTests3
  c0b13a476b5e57b6d55b304f67f69581  contrib/compare_tests
  652ed31d99697495ddefe9885ce403da  contrib/compare_two_ftime_report_sets
! 9d2667b19e52b2bac8bed043dbb760d4  contrib/config-list.mk
  50d60ebb1e537550506cd7352443d454  contrib/dg-cmp-results.sh
  979a288476a0d77345492450f86966e3  contrib/dg-extract-results.py
  a72cf7608237ddae6dd5fe9bfb266f84  contrib/dg-extract-results.sh
*************** c3217001bd26d7357f97d76467773e6d  contri
*** 206,212 ****
  4e50fd99a99e20a0c72a4074b767438d  contrib/dg-out-generator.pl
  c453348f88ec592d49be554008473ba8  contrib/dglib.pm
  1a43c19edffafd7cca44c23265ada323  contrib/diffsummary.py
! 99fd453a962522445be4c5fabf2540e7  contrib/download_prerequisites
  5c8261e6d09ac7baf6ee12720e265aca  contrib/filter-clang-warnings.py
  332fd0835826d637b5b6cf8db14358a5  contrib/filter_gcc_for_doxygen
  db03e57377f9eb202b7b783eb81fe40d  contrib/filter_knr2ansi.pl
--- 207,213 ----
  4e50fd99a99e20a0c72a4074b767438d  contrib/dg-out-generator.pl
  c453348f88ec592d49be554008473ba8  contrib/dglib.pm
  1a43c19edffafd7cca44c23265ada323  contrib/diffsummary.py
! 15c32326feefaab5618fccfb17ecdf95  contrib/download_prerequisites
  5c8261e6d09ac7baf6ee12720e265aca  contrib/filter-clang-warnings.py
  332fd0835826d637b5b6cf8db14358a5  contrib/filter_gcc_for_doxygen
  db03e57377f9eb202b7b783eb81fe40d  contrib/filter_knr2ansi.pl
*************** c9b38a05e2da6bd427df5301db56e913  contri
*** 223,228 ****
--- 224,230 ----
  66d6d2192bfc73b4021f3d0fbb8ce07a  contrib/gcc.doxy
  0d18acc44d50cab29db7f0b0870a29b3  contrib/gcc_build
  a80a0165b2b8f366a31514e30720bd21  contrib/gcc_update
+ 0089b956203f432d8842c16560373ec1  contrib/gen-MAINTAINERS.py
  9184991d38f8c2ec0fa6b6ab5105664c  contrib/gen_autofdo_event.py
  1cf2a499b4c0a191d6d11a611cc85a66  contrib/gennews
  25491ab6a5a68d252f311f5a9c6f4c8f  contrib/git-add-user-branch.sh
*************** fa945bac89ee68b410027dcfe1312f4b  contri
*** 249,254 ****
--- 251,257 ----
  683b1e9e6343d2a6e1cae194ca512d06  contrib/jit-coverage-report.py
  d029ec51f5de739992e4bd55131d68b6  contrib/legacy/mklog
  2e6880a36fbaf31bc16067c51bdb986b  contrib/legacy/mklog.pl
+ b6f476782b37a89f61beef8d5231472d  contrib/maintainer_utils.py
  43e3d77ae19b5c6304d6d6846792c173  contrib/make-obstacks-texi.pl
  f70a5a540f49df19724d827b2262b9fa  contrib/make_sunver.pl
  5eb1bf9df19e0134a2f87b849d222312  contrib/mark_spam.py
*************** bda0e2d8e6960465c7778fe3856cdacc  contri
*** 273,280 ****
  a25bcbffe52d6e472d66e6e7834d252b  contrib/patch_tester.sh
  6d9479f6df06fd4c77cefc7e2cb6d650  contrib/prepare-commit-msg
  734ef10a9669ed864c19c07ad975d04c  contrib/prepare_patch.sh
! 1e0f018552766cabbeae5f6f182bf99e  contrib/prerequisites.md5
! ace5565a36009a7978462fa9d727bea3  contrib/prerequisites.sha512
  2db061dfbd3c079ada8c4778ec6ad03b  contrib/regenerate-sarif-spec-index.py
  1bfdcf534875228aa24e1d6d8223a406  contrib/reghunt/ChangeLog
  5acf26034631fedb79530cda9b3965c3  contrib/reghunt/bin/gcc-build-full
--- 276,283 ----
  a25bcbffe52d6e472d66e6e7834d252b  contrib/patch_tester.sh
  6d9479f6df06fd4c77cefc7e2cb6d650  contrib/prepare-commit-msg
  734ef10a9669ed864c19c07ad975d04c  contrib/prepare_patch.sh
! f30827a090f8d9be883b571cbfce0174  contrib/prerequisites.md5
! 14c9df8854e1a3916bb08752562d5524  contrib/prerequisites.sha512
  2db061dfbd3c079ada8c4778ec6ad03b  contrib/regenerate-sarif-spec-index.py
  1bfdcf534875228aa24e1d6d8223a406  contrib/reghunt/ChangeLog
  5acf26034631fedb79530cda9b3965c3  contrib/reghunt/bin/gcc-build-full
*************** f15bc3c5de22eac0bdd4f611502139a0  gcc/AB
*** 532,538 ****
  a916467b91076e631dd8edb7424769c7  gcc/COPYING.LIB
  d32239bcb673463ab874e80d47fae504  gcc/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/COPYING3.LIB
! 27bae4ada5c2c6a2640561162cfd3ecd  gcc/ChangeLog
  51281e73aa07fb62394bd72f3c9299ba  gcc/ChangeLog-1997
  f77af8c9ac412064886b00c5506123b5  gcc/ChangeLog-1998
  00a2e4ead1b289bf69bca0196fed6f9f  gcc/ChangeLog-1999
--- 535,541 ----
  a916467b91076e631dd8edb7424769c7  gcc/COPYING.LIB
  d32239bcb673463ab874e80d47fae504  gcc/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/COPYING3.LIB
! 813805ccf496ffe0493eb298bc4a8b8c  gcc/ChangeLog
  51281e73aa07fb62394bd72f3c9299ba  gcc/ChangeLog-1997
  f77af8c9ac412064886b00c5506123b5  gcc/ChangeLog-1998
  00a2e4ead1b289bf69bca0196fed6f9f  gcc/ChangeLog-1999
*************** fb3fadb88e1d2b3b640cfaaa5ff11780  gcc/Ch
*** 570,588 ****
  3eb07e0b2e542409bf73d359f7f65609  gcc/ChangeLog.ptr
  e13638e26743ba41e6011b76cc00d9a9  gcc/ChangeLog.tree-ssa
  739ab47f6425bcea1d05e4fc0542de54  gcc/ChangeLog.tuples
! da1968aef6ba926a5248481ca6bc0675  gcc/DATESTAMP
  deb513e591f23901188e22323bd3b1d4  gcc/DEV-PHASE
  eb92e1ff5e982ca07e173e0eb286d243  gcc/FSFChangeLog
  30e1e33411566388b3164558482dc5e6  gcc/FSFChangeLog.10
  36698274bb69e2ada20f5cc434f3caa5  gcc/FSFChangeLog.11
  a817c5577f2b35f8d2481c787e3ff7e2  gcc/LANGUAGES
! 6ea8b2e47589299bbb0a9f409e465831  gcc/Makefile.in
  ec6799501b2eb2923d5de6a66169dbd2  gcc/ONEWS
  c8c9dd1eaee4ffd4d5d9f3ab70fddd4b  gcc/README.Portability
  a9a7c60459b2407bfdf4e68c0ed4ad0a  gcc/acinclude.m4
  e74733ebf762151e601c9e0aa1461a20  gcc/aclocal.m4
  16a499934b71eb6cf7c0d6899cd6006a  gcc/ada/.gitignore
! 74b34dda4dff8f18012490dca54ae644  gcc/ada/ChangeLog
  c2094c0d3135f9ac89917f162046ee04  gcc/ada/ChangeLog-2001
  fa410b57f5d814d5d3ac3b45f486cdcf  gcc/ada/ChangeLog-2002
  2dbefa7bdc8dc28ec746002028861278  gcc/ada/ChangeLog-2003
--- 573,591 ----
  3eb07e0b2e542409bf73d359f7f65609  gcc/ChangeLog.ptr
  e13638e26743ba41e6011b76cc00d9a9  gcc/ChangeLog.tree-ssa
  739ab47f6425bcea1d05e4fc0542de54  gcc/ChangeLog.tuples
! 5e79a7239bc3812b2aafe4b34538d222  gcc/DATESTAMP
  deb513e591f23901188e22323bd3b1d4  gcc/DEV-PHASE
  eb92e1ff5e982ca07e173e0eb286d243  gcc/FSFChangeLog
  30e1e33411566388b3164558482dc5e6  gcc/FSFChangeLog.10
  36698274bb69e2ada20f5cc434f3caa5  gcc/FSFChangeLog.11
  a817c5577f2b35f8d2481c787e3ff7e2  gcc/LANGUAGES
! 3fcf6f6639cab15f7dc15bafd074b439  gcc/Makefile.in
  ec6799501b2eb2923d5de6a66169dbd2  gcc/ONEWS
  c8c9dd1eaee4ffd4d5d9f3ab70fddd4b  gcc/README.Portability
  a9a7c60459b2407bfdf4e68c0ed4ad0a  gcc/acinclude.m4
  e74733ebf762151e601c9e0aa1461a20  gcc/aclocal.m4
  16a499934b71eb6cf7c0d6899cd6006a  gcc/ada/.gitignore
! 9b4ad1a4ee98f4577d20cf8cb2852041  gcc/ada/ChangeLog
  c2094c0d3135f9ac89917f162046ee04  gcc/ada/ChangeLog-2001
  fa410b57f5d814d5d3ac3b45f486cdcf  gcc/ada/ChangeLog-2002
  2dbefa7bdc8dc28ec746002028861278  gcc/ada/ChangeLog-2003
*************** eed3a19516e7659bde4768b12a9c69e1  gcc/ad
*** 800,806 ****
  8be63e29d5aeaf0a16ff7b4dc746e1a4  gcc/ada/exp_code.ads
  b171d3476227e3dc8a16f195b379b8b8  gcc/ada/exp_dbug.adb
  4aedf059cc4ede0c0c0d01a19e99d07d  gcc/ada/exp_dbug.ads
! f63626f667da542e69736ae15de0ff87  gcc/ada/exp_disp.adb
  4a4f2db1ce2689b32aa03195644a6fd0  gcc/ada/exp_disp.ads
  4a4b9d7a9f03004c8a15a64b412515aa  gcc/ada/exp_dist.adb
  ce990621220fd6489426c319eb93cec4  gcc/ada/exp_dist.ads
--- 803,809 ----
  8be63e29d5aeaf0a16ff7b4dc746e1a4  gcc/ada/exp_code.ads
  b171d3476227e3dc8a16f195b379b8b8  gcc/ada/exp_dbug.adb
  4aedf059cc4ede0c0c0d01a19e99d07d  gcc/ada/exp_dbug.ads
! dc95abd6f63d6c7ae2f87c8f42479edb  gcc/ada/exp_disp.adb
  4a4f2db1ce2689b32aa03195644a6fd0  gcc/ada/exp_disp.ads
  4a4b9d7a9f03004c8a15a64b412515aa  gcc/ada/exp_dist.adb
  ce990621220fd6489426c319eb93cec4  gcc/ada/exp_dist.ads
*************** e4204795e682e9a19f2c26c4b2410fc3  gcc/ad
*** 856,862 ****
  8d951ad5f91f626d3cc7ba6585129d29  gcc/ada/gcc-interface/ada.h
  f3edeff30f2d71e01f705dbeeea40b77  gcc/ada/gcc-interface/config-lang.in
  61292b93aaa82b358b5b4e2310c77d5b  gcc/ada/gcc-interface/cuintp.cc
! 1ab9714b45b08ff958a026efcb04adab  gcc/ada/gcc-interface/decl.cc
  07d1f164dc85932ebe1eab7ad2117218  gcc/ada/gcc-interface/gadaint.h
  0160223b92cc31ddb4ab99b5fd6a6cc8  gcc/ada/gcc-interface/gigi.h
  89108e218f6b9e9f07550c3675c059a7  gcc/ada/gcc-interface/lang-specs.h
--- 859,865 ----
  8d951ad5f91f626d3cc7ba6585129d29  gcc/ada/gcc-interface/ada.h
  f3edeff30f2d71e01f705dbeeea40b77  gcc/ada/gcc-interface/config-lang.in
  61292b93aaa82b358b5b4e2310c77d5b  gcc/ada/gcc-interface/cuintp.cc
! 0a3ceb77ca76a7b486853fe3c010bfd1  gcc/ada/gcc-interface/decl.cc
  07d1f164dc85932ebe1eab7ad2117218  gcc/ada/gcc-interface/gadaint.h
  0160223b92cc31ddb4ab99b5fd6a6cc8  gcc/ada/gcc-interface/gigi.h
  89108e218f6b9e9f07550c3675c059a7  gcc/ada/gcc-interface/lang-specs.h
*************** f3edeff30f2d71e01f705dbeeea40b77  gcc/ad
*** 864,870 ****
  5fa7cac776a0baee0d89a8f1d532117f  gcc/ada/gcc-interface/lang.opt.urls
  f34e54f7542f28025658b9fd6f01d110  gcc/ada/gcc-interface/misc.cc
  ec10f477ad1d3dba6056061ede6ff919  gcc/ada/gcc-interface/system.ads
! 0f5dcb04296023a69000e9b3ab633c7c  gcc/ada/gcc-interface/targtyps.cc
  a266026adaade27edd6505a45abc1e33  gcc/ada/gcc-interface/trans.cc
  9d36d8c03bd0a96c8694e0f4d47adf56  gcc/ada/gcc-interface/utils.cc
  61f921a0b83e0276983ebc2cfb11dc05  gcc/ada/gcc-interface/utils2.cc
--- 867,873 ----
  5fa7cac776a0baee0d89a8f1d532117f  gcc/ada/gcc-interface/lang.opt.urls
  f34e54f7542f28025658b9fd6f01d110  gcc/ada/gcc-interface/misc.cc
  ec10f477ad1d3dba6056061ede6ff919  gcc/ada/gcc-interface/system.ads
! 13235701725140ec1c32175af08c910f  gcc/ada/gcc-interface/targtyps.cc
  a266026adaade27edd6505a45abc1e33  gcc/ada/gcc-interface/trans.cc
  9d36d8c03bd0a96c8694e0f4d47adf56  gcc/ada/gcc-interface/utils.cc
  61f921a0b83e0276983ebc2cfb11dc05  gcc/ada/gcc-interface/utils2.cc
*************** be1bc4b28f76f8d13e979b2ffc3493c1  gcc/ad
*** 904,910 ****
  8642872d20147f700d78ebf52da2a862  gcc/ada/gnathtml.pl
  aab44e4245fc6e446589b950e0de7ca3  gcc/ada/gnatkr.adb
  a89660ee7a9424f52d3d7f2d8c11b7eb  gcc/ada/gnatkr.ads
! d97501798bdbed0da82ee2fa716fcdd3  gcc/ada/gnatlink.adb
  99d2bc4ea423585df117f338ad0f0e29  gcc/ada/gnatlink.ads
  0232cc630eee7dd406affe7030790ea5  gcc/ada/gnatls.adb
  6917057b9212fe217ea3aa113154730c  gcc/ada/gnatls.ads
--- 907,913 ----
  8642872d20147f700d78ebf52da2a862  gcc/ada/gnathtml.pl
  aab44e4245fc6e446589b950e0de7ca3  gcc/ada/gnatkr.adb
  a89660ee7a9424f52d3d7f2d8c11b7eb  gcc/ada/gnatkr.ads
! de3e52e08107a2ba1a1d6159fdae3da8  gcc/ada/gnatlink.adb
  99d2bc4ea423585df117f338ad0f0e29  gcc/ada/gnatlink.ads
  0232cc630eee7dd406affe7030790ea5  gcc/ada/gnatls.adb
  6917057b9212fe217ea3aa113154730c  gcc/ada/gnatls.ads
*************** cc2d4f9d7bc2baffec80291a51b34558  gcc/ad
*** 1989,1995 ****
  3ba8aee14b3a842d671d0c8704ad097d  gcc/ada/libgnat/g-zstspl.ads
  f2ca087cf3056ed2beeaec88c647d8ef  gcc/ada/libgnat/gnat.ads
  48b24f1c60b3a0f5dd3418f99582c1f7  gcc/ada/libgnat/i-c.adb
! 72e9ec2f14ea5a23b1f7e77717b8e8db  gcc/ada/libgnat/i-c.ads
  cb679f6fde155f44837d4552c523664c  gcc/ada/libgnat/i-cexten.ads
  44285f1dad12628b91709ade759bdf95  gcc/ada/libgnat/i-cexten__128.ads
  c7559cd071a167fe296b51c7c9322727  gcc/ada/libgnat/i-cheri-exceptions.ads
--- 1992,1998 ----
  3ba8aee14b3a842d671d0c8704ad097d  gcc/ada/libgnat/g-zstspl.ads
  f2ca087cf3056ed2beeaec88c647d8ef  gcc/ada/libgnat/gnat.ads
  48b24f1c60b3a0f5dd3418f99582c1f7  gcc/ada/libgnat/i-c.adb
! 5be88045aee10e9e5a65a54f5109d829  gcc/ada/libgnat/i-c.ads
  cb679f6fde155f44837d4552c523664c  gcc/ada/libgnat/i-cexten.ads
  44285f1dad12628b91709ade759bdf95  gcc/ada/libgnat/i-cexten__128.ads
  c7559cd071a167fe296b51c7c9322727  gcc/ada/libgnat/i-cheri-exceptions.ads
*************** c7559cd071a167fe296b51c7c9322727  gcc/ad
*** 2002,2008 ****
  622be760aaf70ea510afd064e7cbedbe  gcc/ada/libgnat/i-cstrea.adb
  e2c5debe859801377bb23186f860fbeb  gcc/ada/libgnat/i-cstrea.ads
  5e870ff704b2b2e52624f3392134f692  gcc/ada/libgnat/i-cstrin.adb
! 0b59cd5c6c7e5253154077ce6b850b53  gcc/ada/libgnat/i-cstrin.ads
  e46418cadf9be0c1b609c9c5b237f81b  gcc/ada/libgnat/i-fortra.adb
  fe08792d30f40125dd75d63c7bcd68fe  gcc/ada/libgnat/i-fortra.ads
  67efcdb22a5fa2959df9a76a10f0d58b  gcc/ada/libgnat/i-pacdec.adb
--- 2005,2011 ----
  622be760aaf70ea510afd064e7cbedbe  gcc/ada/libgnat/i-cstrea.adb
  e2c5debe859801377bb23186f860fbeb  gcc/ada/libgnat/i-cstrea.ads
  5e870ff704b2b2e52624f3392134f692  gcc/ada/libgnat/i-cstrin.adb
! 2f0eddb288e73a8fda26af82301dd2ae  gcc/ada/libgnat/i-cstrin.ads
  e46418cadf9be0c1b609c9c5b237f81b  gcc/ada/libgnat/i-fortra.adb
  fe08792d30f40125dd75d63c7bcd68fe  gcc/ada/libgnat/i-fortra.ads
  67efcdb22a5fa2959df9a76a10f0d58b  gcc/ada/libgnat/i-pacdec.adb
*************** abdd68ceb050d215140ce1e1b2b1dedf  gcc/ad
*** 2111,2117 ****
  699212939c8c44c641e8941c835136dd  gcc/ada/libgnat/s-crc32.adb
  56440b16e0fc88b7720eee78a804f4cd  gcc/ada/libgnat/s-crc32.ads
  1358b72f374f5bc84d8510da319678e3  gcc/ada/libgnat/s-crtl.adb
! 086473817cec6a5dc6c43fbf03cb2cfb  gcc/ada/libgnat/s-crtl.ads
  42b19c7f9d5855a2c2993517824fa602  gcc/ada/libgnat/s-crtl__mingw.adb
  84d8cb08eeb0835450c77b0bc30e94fb  gcc/ada/libgnat/s-dfmkio.ads
  cdd460225eb96c9b8a296e9a37d07a01  gcc/ada/libgnat/s-dfmopr.ads
--- 2114,2120 ----
  699212939c8c44c641e8941c835136dd  gcc/ada/libgnat/s-crc32.adb
  56440b16e0fc88b7720eee78a804f4cd  gcc/ada/libgnat/s-crc32.ads
  1358b72f374f5bc84d8510da319678e3  gcc/ada/libgnat/s-crtl.adb
! 9baada25be1c4418ff38026fade5f772  gcc/ada/libgnat/s-crtl.ads
  42b19c7f9d5855a2c2993517824fa602  gcc/ada/libgnat/s-crtl__mingw.adb
  84d8cb08eeb0835450c77b0bc30e94fb  gcc/ada/libgnat/s-dfmkio.ads
  cdd460225eb96c9b8a296e9a37d07a01  gcc/ada/libgnat/s-dfmopr.ads
*************** ad137af20edc506a8485eff2994837ee  gcc/ad
*** 2563,2575 ****
  b63e4e3a64b55c0bc18cab6b0ae38a28  gcc/ada/libgnat/s-pack99.adb
  19e8e19386ed6c99785d38197fa5867f  gcc/ada/libgnat/s-pack99.ads
  2b53beb8330b1e241fb7342455eff5c7  gcc/ada/libgnat/s-parame.adb
! f8b0af3f069fa1afc6cb494707aa01bc  gcc/ada/libgnat/s-parame.ads
  6c90b516e91707e5a42faee6abea07e0  gcc/ada/libgnat/s-parame__aarch64-linux.adb
! a6819d1f5218269d58d4e0c163c9ccfe  gcc/ada/libgnat/s-parame__hpux.ads
  8ba4d8d2d7910f3a768a3bb149369bba  gcc/ada/libgnat/s-parame__qnx.adb
  2c4660409a1c14007e012cd49d491538  gcc/ada/libgnat/s-parame__rtems.adb
  259d8377e8f19b3b63016567a5c9915e  gcc/ada/libgnat/s-parame__vxworks.adb
! d9e6bb0a317997898545a1ab7a626fbd  gcc/ada/libgnat/s-parame__vxworks.ads
  bbe5cedc525206cecd8b81632f76dc9a  gcc/ada/libgnat/s-parint.adb
  7ee2487ac127388f2acbe1d9c862ec7a  gcc/ada/libgnat/s-parint.ads
  28208509486242e448ee2da92580ebed  gcc/ada/libgnat/s-pehage.adb
--- 2566,2578 ----
  b63e4e3a64b55c0bc18cab6b0ae38a28  gcc/ada/libgnat/s-pack99.adb
  19e8e19386ed6c99785d38197fa5867f  gcc/ada/libgnat/s-pack99.ads
  2b53beb8330b1e241fb7342455eff5c7  gcc/ada/libgnat/s-parame.adb
! 342bf971054de27c63087cc0b76eb7cb  gcc/ada/libgnat/s-parame.ads
  6c90b516e91707e5a42faee6abea07e0  gcc/ada/libgnat/s-parame__aarch64-linux.adb
! 25847c96f250e464a33771618f8ab566  gcc/ada/libgnat/s-parame__hpux.ads
  8ba4d8d2d7910f3a768a3bb149369bba  gcc/ada/libgnat/s-parame__qnx.adb
  2c4660409a1c14007e012cd49d491538  gcc/ada/libgnat/s-parame__rtems.adb
  259d8377e8f19b3b63016567a5c9915e  gcc/ada/libgnat/s-parame__vxworks.adb
! 806a7aebb6e78ad22e18b65c4d7dcdf8  gcc/ada/libgnat/s-parame__vxworks.ads
  bbe5cedc525206cecd8b81632f76dc9a  gcc/ada/libgnat/s-parint.adb
  7ee2487ac127388f2acbe1d9c862ec7a  gcc/ada/libgnat/s-parint.ads
  28208509486242e448ee2da92580ebed  gcc/ada/libgnat/s-pehage.adb
*************** d22c314f3748309f812d78f5217dda61  gcc/ad
*** 3075,3081 ****
  06b46bffb1b84e16a6f48b29177f42c4  gcc/ada/xutil.ads
  faeebcb240c1559aceb7d9c18c8e6b89  gcc/addresses.h
  ebd823843d8793364a7f82ee9f833c88  gcc/adjust-alignment.cc
! 5327c7f6f5e9e863c570286847e757c2  gcc/algol68/ChangeLog
  66ab60a51bd61854d9b2898856651b15  gcc/algol68/Make-lang.in
  b2f984d7f0c7122003e5ce03b3e8724e  gcc/algol68/README
  43ae40e82c1a7a144e905d40b101214e  gcc/algol68/a68-diagnostics.cc
--- 3078,3084 ----
  06b46bffb1b84e16a6f48b29177f42c4  gcc/ada/xutil.ads
  faeebcb240c1559aceb7d9c18c8e6b89  gcc/addresses.h
  ebd823843d8793364a7f82ee9f833c88  gcc/adjust-alignment.cc
! 9d01866b2954ab7919653d092725c83f  gcc/algol68/ChangeLog
  66ab60a51bd61854d9b2898856651b15  gcc/algol68/Make-lang.in
  b2f984d7f0c7122003e5ce03b3e8724e  gcc/algol68/README
  43ae40e82c1a7a144e905d40b101214e  gcc/algol68/a68-diagnostics.cc
*************** f150e2c760036b980e94ec7bb14e1172  gcc/al
*** 3148,3155 ****
  0a91d85c360d5ee3eb6258aecdab4636  gcc/algol68/lang-specs.h
  55e32b4ac4d7a159a683785bd5ee4c7a  gcc/algol68/lang.opt
  411f26970a0d93b07c697a1bcfeda50c  gcc/algol68/lang.opt.urls
! 3b5e368fd2fda9509e35b29b5077a00c  gcc/alias.cc
! b7dd8bd2dd68f81643704bf0b73553a1  gcc/alias.h
  71901705cb0e11732bae53ff9de25faf  gcc/align.h
  f2345b2fdc9d2d5a75fe90d30444a114  gcc/alloc-pool.cc
  853103d2bbe4a7888b35cf87d2bbe436  gcc/alloc-pool.h
--- 3151,3158 ----
  0a91d85c360d5ee3eb6258aecdab4636  gcc/algol68/lang-specs.h
  55e32b4ac4d7a159a683785bd5ee4c7a  gcc/algol68/lang.opt
  411f26970a0d93b07c697a1bcfeda50c  gcc/algol68/lang.opt.urls
! 8758ec6e04573ea8e7650b26a35dd470  gcc/alias.cc
! 44d9376fc7a405850e98a6848f493a81  gcc/alias.h
  71901705cb0e11732bae53ff9de25faf  gcc/align.h
  f2345b2fdc9d2d5a75fe90d30444a114  gcc/alloc-pool.cc
  853103d2bbe4a7888b35cf87d2bbe436  gcc/alloc-pool.h
*************** c277cfbf6dc22b5e43687f22a6ef9adb  gcc/bb
*** 3292,3312 ****
  20c432f7895f0ceadeae7cb99fd92b35  gcc/bb-reorder.h
  82d5ae44d2148a11f1d8dd207970ce4e  gcc/bbitmap.h
  1ec51392e386df3a784016fd915692de  gcc/bitmap.cc
! 8bcfe8e53c7811d339aa0efc4671eca1  gcc/bitmap.h
  8ba8cc55d4c38f126d32b3291cec4312  gcc/btfout.cc
  6da486aac72d8ac53fc6618dea4dcf2e  gcc/builtin-attrs.def
! fea6b5b48893aa4b0ce22c46ca96691b  gcc/builtin-types.def
  8925a4aab21fe60c0eff69d3baa0ab63  gcc/builtins.cc
  c69491e1e06e8252126bfd579bd74d4d  gcc/builtins.def
  4f577c1f20985f1ba3c1672476f1a2da  gcc/builtins.h
! 64896a1193baf9f1fbdb77fe523041c8  gcc/c-family/ChangeLog
  ea3fa1f4d7390a105fa3caab4f79aaf7  gcc/c-family/ChangeLog.gimple-classes
  aaea141fd41a559841cb76e33800c289  gcc/c-family/c-ada-spec.cc
  f60a13b470e8e51db83383bf9f9f921e  gcc/c-family/c-ada-spec.h
! fba23d68ba623c33aef279b93a24ee01  gcc/c-family/c-attribs.cc
! abc75c3bf4cdfc2d9a6bb6075cf16204  gcc/c-family/c-common.cc
  6522339cd83ff225a1ff9e0eab971eab  gcc/c-family/c-common.def
! d8d1b26fe0f361bd790e9276ab8e5ae9  gcc/c-family/c-common.h
  5043f17c7fa7d40c7d1e5eb057228547  gcc/c-family/c-cppbuiltin.cc
  0b9194e38297d00cf3fac80365cc07af  gcc/c-family/c-dump.cc
  785b5f9c39e1d26ec0e4f70880e6202a  gcc/c-family/c-format.cc
--- 3295,3315 ----
  20c432f7895f0ceadeae7cb99fd92b35  gcc/bb-reorder.h
  82d5ae44d2148a11f1d8dd207970ce4e  gcc/bbitmap.h
  1ec51392e386df3a784016fd915692de  gcc/bitmap.cc
! 0a656b07247b6d2bb8103f4808e3b277  gcc/bitmap.h
  8ba8cc55d4c38f126d32b3291cec4312  gcc/btfout.cc
  6da486aac72d8ac53fc6618dea4dcf2e  gcc/builtin-attrs.def
! 466410326d0beabc9343d7f8e561f590  gcc/builtin-types.def
  8925a4aab21fe60c0eff69d3baa0ab63  gcc/builtins.cc
  c69491e1e06e8252126bfd579bd74d4d  gcc/builtins.def
  4f577c1f20985f1ba3c1672476f1a2da  gcc/builtins.h
! c3a891b111e3a9ed57026bf2e5d01670  gcc/c-family/ChangeLog
  ea3fa1f4d7390a105fa3caab4f79aaf7  gcc/c-family/ChangeLog.gimple-classes
  aaea141fd41a559841cb76e33800c289  gcc/c-family/c-ada-spec.cc
  f60a13b470e8e51db83383bf9f9f921e  gcc/c-family/c-ada-spec.h
! 8e05ebe71045ceff352cfa20a4a2bd1f  gcc/c-family/c-attribs.cc
! 46b2c8c5ffc2578c0ae1cfbe65e97c47  gcc/c-family/c-common.cc
  6522339cd83ff225a1ff9e0eab971eab  gcc/c-family/c-common.def
! efe9d47d8c9df8f32a8fdabf7a4c4dda  gcc/c-family/c-common.h
  5043f17c7fa7d40c7d1e5eb057228547  gcc/c-family/c-cppbuiltin.cc
  0b9194e38297d00cf3fac80365cc07af  gcc/c-family/c-dump.cc
  785b5f9c39e1d26ec0e4f70880e6202a  gcc/c-family/c-format.cc
*************** d8d1b26fe0f361bd790e9276ab8e5ae9  gcc/c-
*** 3314,3320 ****
  4179a97862f28535be92ef4cab16246e  gcc/c-family/c-gimplify.cc
  50e638257386d3df7bdf25108fdeb5d1  gcc/c-family/c-indentation.cc
  382fde18b48d137c66c91e21de978037  gcc/c-family/c-indentation.h
! 4893d50b962d5e680a44bb72d2097469  gcc/c-family/c-lex.cc
  eb6a10cfada98679dc204a82e929e9e3  gcc/c-family/c-objc.h
  5edfc0bf13f4daff32a1653000781001  gcc/c-family/c-omp.cc
  ad14806f3955cf38561572129b17ecab  gcc/c-family/c-opts.cc
--- 3317,3323 ----
  4179a97862f28535be92ef4cab16246e  gcc/c-family/c-gimplify.cc
  50e638257386d3df7bdf25108fdeb5d1  gcc/c-family/c-indentation.cc
  382fde18b48d137c66c91e21de978037  gcc/c-family/c-indentation.h
! b3d2381e6bf6df725f5906b6b8f6643d  gcc/c-family/c-lex.cc
  eb6a10cfada98679dc204a82e929e9e3  gcc/c-family/c-objc.h
  5edfc0bf13f4daff32a1653000781001  gcc/c-family/c-omp.cc
  ad14806f3955cf38561572129b17ecab  gcc/c-family/c-opts.cc
*************** bbfcfbcc99a479fc2ae2a14b2cc35697  gcc/c-
*** 3342,3352 ****
  377686cbbf62a7d61d251d3f74cddb5b  gcc/c-family/known-headers.h
  431045382c41554804be1959c1596be4  gcc/c-family/name-hint.h
  3bae9e281cc87b35f63e906373f3b446  gcc/c-family/stub-objc.cc
! 991286d54e2438c422945b426834e504  gcc/c/ChangeLog
  cbffb341640e7c4b16792e0951fffeca  gcc/c/Make-lang.in
  3920e3ee16f5b5955d40584fea53c441  gcc/c/c-aux-info.cc
  cd5bab8a4deeaa0369ae59b9403d06a2  gcc/c/c-convert.cc
! 376136c6838c9c6574ee40da09f65c76  gcc/c/c-decl.cc
  92707173973fa48fbb8dda88f5af625a  gcc/c/c-errors.cc
  fb28bfedbe8c8f41f339af7936b3b22f  gcc/c/c-fold.cc
  9087221c62ac81d002665b0e3ae2c55f  gcc/c/c-lang.cc
--- 3345,3355 ----
  377686cbbf62a7d61d251d3f74cddb5b  gcc/c-family/known-headers.h
  431045382c41554804be1959c1596be4  gcc/c-family/name-hint.h
  3bae9e281cc87b35f63e906373f3b446  gcc/c-family/stub-objc.cc
! 8a34185b938a70eea3339f0c53d8b4e4  gcc/c/ChangeLog
  cbffb341640e7c4b16792e0951fffeca  gcc/c/Make-lang.in
  3920e3ee16f5b5955d40584fea53c441  gcc/c/c-aux-info.cc
  cd5bab8a4deeaa0369ae59b9403d06a2  gcc/c/c-convert.cc
! b7fd04981ce00d4d0163466fd110f918  gcc/c/c-decl.cc
  92707173973fa48fbb8dda88f5af625a  gcc/c/c-errors.cc
  fb28bfedbe8c8f41f339af7936b3b22f  gcc/c/c-fold.cc
  9087221c62ac81d002665b0e3ae2c55f  gcc/c/c-lang.cc
*************** cbfdd140f14c43c01a6bdf8b1c24b317  gcc/c/
*** 3356,3363 ****
  f324d0b84a110790909734ef326e960a  gcc/c/c-parser.cc
  f6b634d7c0204c419cf4fb7b48193fad  gcc/c/c-parser.h
  4db955734effe2d0c9aac0379d2e6a8c  gcc/c/c-tree.def
! b0201ab49a706ee18aa68d28efef4030  gcc/c/c-tree.h
! dc649166cca516c59c1a184e7e551f81  gcc/c/c-typeck.cc
  5804f7ee3eccdfb7c9a64e40b20ccc79  gcc/c/config-lang.in
  58370619d5c4739b7d81d5f899913a0c  gcc/c/gccspec.cc
  3006cd4ab743e1a8087fc267168774ce  gcc/c/gimple-parser.cc
--- 3359,3366 ----
  f324d0b84a110790909734ef326e960a  gcc/c/c-parser.cc
  f6b634d7c0204c419cf4fb7b48193fad  gcc/c/c-parser.h
  4db955734effe2d0c9aac0379d2e6a8c  gcc/c/c-tree.def
! ac5e93c0be8f41b552524ee15ee00d2f  gcc/c/c-tree.h
! 07360851bba403fd0f1243cf1910bb1a  gcc/c/c-typeck.cc
  5804f7ee3eccdfb7c9a64e40b20ccc79  gcc/c/config-lang.in
  58370619d5c4739b7d81d5f899913a0c  gcc/c/gccspec.cc
  3006cd4ab743e1a8087fc267168774ce  gcc/c/gimple-parser.cc
*************** b50dcacbe77c96809023aa599a556717  gcc/cg
*** 3394,3452 ****
  a9229e8ac3f0d366e296e57756becd23  gcc/cgraphunit.cc
  45b21ab7ea818c3a3ce60bf8d3cbd252  gcc/channels.h
  f2981f79a749a2269d7ea349ab37ca3e  gcc/cif-code.def
! 66e38d3716b7b64e73cc14563a460419  gcc/cobol/ChangeLog
! 7e9a5134b9a255eadbcb53d2153defa2  gcc/cobol/Make-lang.in
  0a84e784d2bc4066654d2377fc6a2930  gcc/cobol/TODO
! de7a1dd71b6ec640080ccccde82e384c  gcc/cobol/cbldiag.h
! 5fdc70643a73d31fa87ca25eb9bca477  gcc/cobol/cdf-copy.cc
  9f1414cfb23d8d1b5874202bda6a3a97  gcc/cobol/cdf.y
  314ba2fe46efd7508b3cd6ef99aa964f  gcc/cobol/cdfval.h
  39a7cc8aae37a642491e77796d652ebe  gcc/cobol/cobol-system.h
! a800f30431cfe90b668018187bd2c2db  gcc/cobol/cobol1.cc
! 92177669b306d7d54e7931f18dc097be  gcc/cobol/compare.cc
  30fe1e768a76bb15b7d6d2d12bb53a3a  gcc/cobol/compare.h
  8b7f26d4855e5bb69a66eecc586d9742  gcc/cobol/config-lang.in
  7e43ef597462b3ceabf3c197b4017e7c  gcc/cobol/convert.cc
! 4be634bc3fbc0547c40c33fc31a8492e  gcc/cobol/copybook.h
  d5c6387d56f84eecf1320e4209ae02fe  gcc/cobol/dts.h
  79fd5c6d108a5a1af2ebda2296d91440  gcc/cobol/except.cc
  5faeacdf9fba68f3991fa3a6f65be405  gcc/cobol/exceptg.h
  b14c53972a7aa91a15097c505f00473b  gcc/cobol/gcobc
! 5fd8a970faa5c6919d491732f242c58c  gcc/cobol/gcobol.1
  7a73ffe93cdd304879a42f225aa554ee  gcc/cobol/gcobol.3
  21b840090e9923bdd5cb47e4468e3fd9  gcc/cobol/gcobolspec.cc
! 015903a9ad1927b4460141260a91eca6  gcc/cobol/genapi.cc
! 67a6e015d14ac5703597d5816867c493  gcc/cobol/genapi.h
  926207c629ee8f5d569aaa7d746dfc2f  gcc/cobol/gengen.cc
  8d0ab0fc1957927b07dd60145858e817  gcc/cobol/gengen.h
! 01a4b10321e6de7af3668e2ad39dd21a  gcc/cobol/genmath.cc
  78d263e35c67698f367e118c95157cb4  gcc/cobol/genmath.h
! 7a9944037fe4c2afffd612d070c94309  gcc/cobol/genutil.cc
! 08e0c2c2ce1cdf0c25cc8ce8bddf99f0  gcc/cobol/genutil.h
  7b9c1ead6f9d3661133f7f732811719c  gcc/cobol/help.gen
  0c56a591cf166a8d83553c2afd4b3ce3  gcc/cobol/inspect.h
! 3d9b3d19800f5ee15910accfc528aeb8  gcc/cobol/lang-specs.h
! 3ce266c05077f5e07b2412270ff3f424  gcc/cobol/lang.opt
  fd4809576031a8df82aa91899e5e6a5f  gcc/cobol/lang.opt.urls
! 9fe73b216b79989a974880ca437017bc  gcc/cobol/lexio.cc
! c4e48ed28c747d296af503552da42055  gcc/cobol/lexio.h
! bd59aa9de483021d005bb9faa15e3f1f  gcc/cobol/messages.cc
! 648fc64113e7fcef513d17bdf576cab3  gcc/cobol/move.cc
! 55901576fdebcc5b08ee6d67ae555da9  gcc/cobol/parse.y
! f3f9686494906e8f608a241fc83a8599  gcc/cobol/parse_ante.h
! 658e59750efa818db284c44387330580  gcc/cobol/parse_util.h
! 43faec6ac9c62d787bdfae40292930d3  gcc/cobol/scan.l
  ff991b8a3eac20d9e6a54b25c2137986  gcc/cobol/scan_ante.h
  0e56ecd630e8eb4c45ccc8b2af09fc4a  gcc/cobol/scan_post.h
  ee67526be0e3a05e98aa61ae737142ab  gcc/cobol/show_parse.h
  8a8a8f6e836dff7e452f9cd030542599  gcc/cobol/structs.cc
  015fac4a42a4bf03d101922bc6f68781  gcc/cobol/structs.h
! 8adbe13738cf3039ac90116ebe6696c6  gcc/cobol/symbols.cc
! 4adbb76938ce7cc9078da06487249df9  gcc/cobol/symbols.h
! 2052d3215a215928b26c5296b9e2eea1  gcc/cobol/symfind.cc
  e46c348276950beff20df278e4e041c8  gcc/cobol/token_names.h
  434f4899280e27d0717b2e56d5bf12f2  gcc/cobol/udf/stored-char-length.cbl
! 1ffa101d977efa2e5166a7255ffb31e7  gcc/cobol/util.cc
  395c97f0b12382690815b0e1c1702ec4  gcc/cobol/util.h
  8eceaeb8e762ac925b791d2a5d2a6e16  gcc/collect-utils.cc
  ac937838bf0c954b723fba6b6a088b4c  gcc/collect-utils.h
--- 3397,3455 ----
  a9229e8ac3f0d366e296e57756becd23  gcc/cgraphunit.cc
  45b21ab7ea818c3a3ce60bf8d3cbd252  gcc/channels.h
  f2981f79a749a2269d7ea349ab37ca3e  gcc/cif-code.def
! f48a6b278d4ee00df8d0ee93b1cdf221  gcc/cobol/ChangeLog
! fcb021496628ea0c70ca22a6f8b75eb5  gcc/cobol/Make-lang.in
  0a84e784d2bc4066654d2377fc6a2930  gcc/cobol/TODO
! c1bd54bc8dcdf9e203926eab8cef9381  gcc/cobol/cbldiag.h
! 13d5fede5e62ab7cd058d6a31bd68bc5  gcc/cobol/cdf-copy.cc
  9f1414cfb23d8d1b5874202bda6a3a97  gcc/cobol/cdf.y
  314ba2fe46efd7508b3cd6ef99aa964f  gcc/cobol/cdfval.h
  39a7cc8aae37a642491e77796d652ebe  gcc/cobol/cobol-system.h
! b57b16ba2efc277622e35164741c3e0a  gcc/cobol/cobol1.cc
! 6fdae0ff20003c3455a73ac1cc921fe8  gcc/cobol/compare.cc
  30fe1e768a76bb15b7d6d2d12bb53a3a  gcc/cobol/compare.h
  8b7f26d4855e5bb69a66eecc586d9742  gcc/cobol/config-lang.in
  7e43ef597462b3ceabf3c197b4017e7c  gcc/cobol/convert.cc
! 4638d143b5638f95fc7d135c6f95e06f  gcc/cobol/copybook.h
  d5c6387d56f84eecf1320e4209ae02fe  gcc/cobol/dts.h
  79fd5c6d108a5a1af2ebda2296d91440  gcc/cobol/except.cc
  5faeacdf9fba68f3991fa3a6f65be405  gcc/cobol/exceptg.h
  b14c53972a7aa91a15097c505f00473b  gcc/cobol/gcobc
! d16ac4d27bb383d645623fd9ea460719  gcc/cobol/gcobol.1
  7a73ffe93cdd304879a42f225aa554ee  gcc/cobol/gcobol.3
  21b840090e9923bdd5cb47e4468e3fd9  gcc/cobol/gcobolspec.cc
! ef111de68203320179fca2818f66fa9a  gcc/cobol/genapi.cc
! d4418c45a23e1f08496a7559c6cdbb27  gcc/cobol/genapi.h
  926207c629ee8f5d569aaa7d746dfc2f  gcc/cobol/gengen.cc
  8d0ab0fc1957927b07dd60145858e817  gcc/cobol/gengen.h
! a89ae19c1e81dcbb7086fd601f1b74af  gcc/cobol/genmath.cc
  78d263e35c67698f367e118c95157cb4  gcc/cobol/genmath.h
! 36450d83280e05d6479aaf8b21e6a852  gcc/cobol/genutil.cc
! 23aaa1c20d8500fa883d701b040f766e  gcc/cobol/genutil.h
  7b9c1ead6f9d3661133f7f732811719c  gcc/cobol/help.gen
  0c56a591cf166a8d83553c2afd4b3ce3  gcc/cobol/inspect.h
! 594ce60dfca5c575c5573fb4e1db794d  gcc/cobol/lang-specs.h
! 158e28d660a0db1859408e62eabf98fe  gcc/cobol/lang.opt
  fd4809576031a8df82aa91899e5e6a5f  gcc/cobol/lang.opt.urls
! f31aff6048506a0a8bc29ddc67fc63e9  gcc/cobol/lexio.cc
! fd643b906a5a73de5b01896de3eeaad2  gcc/cobol/lexio.h
! fa4e5ef82dfcd5ab2a6fb5207600ffee  gcc/cobol/messages.cc
! 986f8a5bca4bde21fecacb6a43e02160  gcc/cobol/move.cc
! 90ee1a76a2826d8e1c83c74cca7c13d9  gcc/cobol/parse.y
! 8cbc52e2b546aa34f1c9f78bcefcf500  gcc/cobol/parse_ante.h
! 07e2f8ea22b70968a03d9ddf07a64315  gcc/cobol/parse_util.h
! 4301054332396f794db543f5b6bc5195  gcc/cobol/scan.l
  ff991b8a3eac20d9e6a54b25c2137986  gcc/cobol/scan_ante.h
  0e56ecd630e8eb4c45ccc8b2af09fc4a  gcc/cobol/scan_post.h
  ee67526be0e3a05e98aa61ae737142ab  gcc/cobol/show_parse.h
  8a8a8f6e836dff7e452f9cd030542599  gcc/cobol/structs.cc
  015fac4a42a4bf03d101922bc6f68781  gcc/cobol/structs.h
! bb535488460777ab2e76e75b0e926004  gcc/cobol/symbols.cc
! 7271b8584341b45cda4c15f129556cbf  gcc/cobol/symbols.h
! 9ae3a8594298e2cfc01f86deb9e13a99  gcc/cobol/symfind.cc
  e46c348276950beff20df278e4e041c8  gcc/cobol/token_names.h
  434f4899280e27d0717b2e56d5bf12f2  gcc/cobol/udf/stored-char-length.cbl
! 45a35241b90d6ef27cbf55089aef89ce  gcc/cobol/util.cc
  395c97f0b12382690815b0e1c1702ec4  gcc/cobol/util.h
  8eceaeb8e762ac925b791d2a5d2a6e16  gcc/collect-utils.cc
  ac937838bf0c954b723fba6b6a088b4c  gcc/collect-utils.h
*************** d48c86bc52a7b8ee38281d6069d3eb6a  gcc/co
*** 3458,3465 ****
  903401554d90de06743fb9a836e6a45b  gcc/combine-stack-adj.cc
  8b3e9ec255e00dd68f29f98fc66e092b  gcc/combine.cc
  9f2835a8fa18cfce2249127014eb7edd  gcc/common.md
! 76ac3f1825a415d9de15ced4c35fb1bb  gcc/common.opt
! 0b6694826773455ec174f3dc52a1a3a1  gcc/common.opt.urls
  d3b28fb0d49a8d683dde6011400fd7e7  gcc/common/common-target-def.h
  93cf11d6a27d42f73799ae012d2f876e  gcc/common/common-target.def
  d8f7142c05c4102806a8b26817df17a6  gcc/common/common-target.h
--- 3461,3468 ----
  903401554d90de06743fb9a836e6a45b  gcc/combine-stack-adj.cc
  8b3e9ec255e00dd68f29f98fc66e092b  gcc/combine.cc
  9f2835a8fa18cfce2249127014eb7edd  gcc/common.md
! e0d78d8c58e48ddbf9bdc2d363485bf5  gcc/common.opt
! 5f891fd92b2d5a16202d826d2511e3d1  gcc/common.opt.urls
  d3b28fb0d49a8d683dde6011400fd7e7  gcc/common/common-target-def.h
  93cf11d6a27d42f73799ae012d2f876e  gcc/common/common-target.def
  d8f7142c05c4102806a8b26817df17a6  gcc/common/common-target.h
*************** b1b166d42b0cd3e8a21a0ad1a418bab7  gcc/co
*** 3505,3511 ****
  67a4e50b29a50485cecd1c144965e97d  gcc/common/config/pa/pa-common.cc
  500435c25f1e8769a7838c3e187195c1  gcc/common/config/pdp11/pdp11-common.cc
  3fe10d934c16b0a06d492096be6d8ee1  gcc/common/config/pru/pru-common.cc
! aef7b3012673cbdd0ed03149a9855d06  gcc/common/config/riscv/riscv-common.cc
  d0f5525bd704195674a68288e7443aad  gcc/common/config/riscv/riscv-ext-bitmask.def
  c5805e3cf6610b64324ce388e3f5f855  gcc/common/config/rs6000/rs6000-common.cc
  b6c011cb2596e87fbedc97081867b691  gcc/common/config/rx/rx-common.cc
--- 3508,3514 ----
  67a4e50b29a50485cecd1c144965e97d  gcc/common/config/pa/pa-common.cc
  500435c25f1e8769a7838c3e187195c1  gcc/common/config/pdp11/pdp11-common.cc
  3fe10d934c16b0a06d492096be6d8ee1  gcc/common/config/pru/pru-common.cc
! 7c802d317ab2b360d483c5500ae6e85a  gcc/common/config/riscv/riscv-common.cc
  d0f5525bd704195674a68288e7443aad  gcc/common/config/riscv/riscv-ext-bitmask.def
  c5805e3cf6610b64324ce388e3f5f855  gcc/common/config/rs6000/rs6000-common.cc
  b6c011cb2596e87fbedc97081867b691  gcc/common/config/rx/rx-common.cc
*************** d3b8ce30c6110489fd0b57d6792f3f29  gcc/co
*** 3520,3541 ****
  88eac990ca6879dcd747cf5113888b1e  gcc/compare-elim.cc
  6137f3da8f70ec4262acab21bb549148  gcc/conditions.h
  4250c8b8d57bf1315174cf436a74a88b  gcc/config.build
! aa874308fd041bda98aae42db75b1b17  gcc/config.gcc
! d8b0b26795a60b3a991dfbdafe4cd756  gcc/config.host
  4db5553c6a48dc11760752ed1aba0b68  gcc/config.in
  8e697813dc96ca90f5d0f4c196efe2cc  gcc/config/README
  09ab460c021260083d94d95ece3cdb5d  gcc/config/aarch64/aarch64-abi-ms-protos.h
  c47b4191f7bac0196ab63ca2c66bfa98  gcc/config/aarch64/aarch64-abi-ms.cc
  148fedc3acd410f7a82133d0e78b02df  gcc/config/aarch64/aarch64-abi-ms.h
! ae85513692d361bba19f28a2148fcad2  gcc/config/aarch64/aarch64-acle-builtins.cc
  9e84c6833cdbd017472f9daa9ead80f6  gcc/config/aarch64/aarch64-acle-builtins.h
  9b6ffa67b7e7f7cc2348fa0dc728072e  gcc/config/aarch64/aarch64-arches.def
  c8a924cfcb693679febdcde3a0cc0809  gcc/config/aarch64/aarch64-builtin-pairs.def
! 795a4867ad981ac883b2ec51b7194208  gcc/config/aarch64/aarch64-builtins.cc
  a3507dcb83cc22f280935ae25197c481  gcc/config/aarch64/aarch64-builtins.h
  36db7b8469a291518753fb98894a6b15  gcc/config/aarch64/aarch64-c.cc
  5f567f76d6adf2e43af2f3a4704e87d6  gcc/config/aarch64/aarch64-coff.h
! a1f52502a32d1ceb3b7cf34c2a6c3e05  gcc/config/aarch64/aarch64-cores.def
  cd1537928dd0fadfa53b88b278af0ed2  gcc/config/aarch64/aarch64-cost-tables.h
  5d9722001af118d5011d62beba0e3879  gcc/config/aarch64/aarch64-d.cc
  3d35dd7bbc8358248117e8edb6f6895f  gcc/config/aarch64/aarch64-d.h
--- 3523,3544 ----
  88eac990ca6879dcd747cf5113888b1e  gcc/compare-elim.cc
  6137f3da8f70ec4262acab21bb549148  gcc/conditions.h
  4250c8b8d57bf1315174cf436a74a88b  gcc/config.build
! 19b1fb98ddb84475fa8b4e81dc0dd894  gcc/config.gcc
! 33cf4c148287e74c9983b38524ffbc88  gcc/config.host
  4db5553c6a48dc11760752ed1aba0b68  gcc/config.in
  8e697813dc96ca90f5d0f4c196efe2cc  gcc/config/README
  09ab460c021260083d94d95ece3cdb5d  gcc/config/aarch64/aarch64-abi-ms-protos.h
  c47b4191f7bac0196ab63ca2c66bfa98  gcc/config/aarch64/aarch64-abi-ms.cc
  148fedc3acd410f7a82133d0e78b02df  gcc/config/aarch64/aarch64-abi-ms.h
! cc9e36047186f00a7f53705410412d69  gcc/config/aarch64/aarch64-acle-builtins.cc
  9e84c6833cdbd017472f9daa9ead80f6  gcc/config/aarch64/aarch64-acle-builtins.h
  9b6ffa67b7e7f7cc2348fa0dc728072e  gcc/config/aarch64/aarch64-arches.def
  c8a924cfcb693679febdcde3a0cc0809  gcc/config/aarch64/aarch64-builtin-pairs.def
! 4f65922e65d2e9a72b48707c6547c15b  gcc/config/aarch64/aarch64-builtins.cc
  a3507dcb83cc22f280935ae25197c481  gcc/config/aarch64/aarch64-builtins.h
  36db7b8469a291518753fb98894a6b15  gcc/config/aarch64/aarch64-c.cc
  5f567f76d6adf2e43af2f3a4704e87d6  gcc/config/aarch64/aarch64-coff.h
! b63633b6fb7a5d491fa65687788a4128  gcc/config/aarch64/aarch64-cores.def
  cd1537928dd0fadfa53b88b278af0ed2  gcc/config/aarch64/aarch64-cost-tables.h
  5d9722001af118d5011d62beba0e3879  gcc/config/aarch64/aarch64-d.cc
  3d35dd7bbc8358248117e8edb6f6895f  gcc/config/aarch64/aarch64-d.h
*************** b548be6514d75d13c2d0e251911b4c80  gcc/co
*** 3572,3611 ****
  ded6adcc93742ca7fba0c4cffeaeabab  gcc/config/aarch64/aarch64-neon-builtins.def
  c058178535c874c3d9f517b5db804691  gcc/config/aarch64/aarch64-neon-sve-bridge-builtins.def
  99262ad964faab9a1090f68a8b3d6d7a  gcc/config/aarch64/aarch64-netbsd.h
! 4ac96a19bb5198741503893e13567775  gcc/config/aarch64/aarch64-option-extensions.def
  1fcf15030f24490613d6a45d6b439e61  gcc/config/aarch64/aarch64-opts.h
  c58a041b3d1a2f2c6c49f13e8ad85fdc  gcc/config/aarch64/aarch64-passes.def
! b9b87da6467199531b0bc9f5936f39ec  gcc/config/aarch64/aarch64-protos.h
  7beff4ec013b184132d7c933faa51208  gcc/config/aarch64/aarch64-sched-dispatch.cc
  b824341b8f6fdb8eb1667425adf63db8  gcc/config/aarch64/aarch64-sched-dispatch.h
  da15606bcbef7961db958c042bf81c05  gcc/config/aarch64/aarch64-simd-builtin-types.def
  07b97d98992798466794748f4e1f2889  gcc/config/aarch64/aarch64-simd-builtins.def
  2fae3501b318ccd9be92a4b49710913e  gcc/config/aarch64/aarch64-simd-pragma-builtins.def
! 30e9efc832cfd407768379ffec0f579e  gcc/config/aarch64/aarch64-simd.md
  f27b31555e077ce25b7e0120a532cfdf  gcc/config/aarch64/aarch64-sme.md
  49d4ace4311e9b1d77ff31b3b8883769  gcc/config/aarch64/aarch64-speculation.cc
! a465f53092443637560aace59c14d816  gcc/config/aarch64/aarch64-sve-builtins-base.cc
  8b08d9a2c35427a6672b61f1b4dcb6ee  gcc/config/aarch64/aarch64-sve-builtins-base.def
  c21ba709d29fe9718239fabf22dcb9a9  gcc/config/aarch64/aarch64-sve-builtins-base.h
! e07dc533e5b0e4dc3b449e4c1adc288d  gcc/config/aarch64/aarch64-sve-builtins-functions.h
! 3363d50ec0697a876f95e9b1db7e856f  gcc/config/aarch64/aarch64-sve-builtins-shapes.cc
  3e5ae654cf6c44284fe17547c40d20de  gcc/config/aarch64/aarch64-sve-builtins-shapes.h
! 7244f40a3d5184cd02fb8e2f1975d890  gcc/config/aarch64/aarch64-sve-builtins-sme.cc
  b7970cc46633371d0ac4e877297d804a  gcc/config/aarch64/aarch64-sve-builtins-sme.def
  1cb175058a4da1ec265f07a8c37df781  gcc/config/aarch64/aarch64-sve-builtins-sme.h
! c5ef020286a62b05a3dc6492b4ce7a5c  gcc/config/aarch64/aarch64-sve-builtins-sve2.cc
  a5319d4e7a44a8b96aeb7f8a96f660d6  gcc/config/aarch64/aarch64-sve-builtins-sve2.def
  977f50faf21613363e643a782cf84ca3  gcc/config/aarch64/aarch64-sve-builtins-sve2.h
  9422a2eaa20d292eff64b10bcee8d4f0  gcc/config/aarch64/aarch64-sve-builtins.def
  90d3781359296ff521d1617a69ed7eea  gcc/config/aarch64/aarch64-sve.md
  2c33bf2afcc6c1e99efec231b38841d5  gcc/config/aarch64/aarch64-sve2.md
! ce756734c2d086ac2b6f48267acb68ea  gcc/config/aarch64/aarch64-sys-regs.def
! e101bed95b5d0264c364d8bcf1a7705f  gcc/config/aarch64/aarch64-tune.md
  dec4c8fd03ac5636ba08d9523bee06be  gcc/config/aarch64/aarch64-tuning-enums.def
! 95775c91d04e9c5cacdd63e6802ca879  gcc/config/aarch64/aarch64-tuning-flags.def
  0eec0dd3dbc5fa83349625d27ac091df  gcc/config/aarch64/aarch64-vxworks.h
! a35fba3cd730a702aa6179b6bb53f8af  gcc/config/aarch64/aarch64.cc
! 060d5024adb45145fa0728ad37082b45  gcc/config/aarch64/aarch64.h
  148e9de02cbf0ec4e00830cbddf4d3e9  gcc/config/aarch64/aarch64.md
  dabea943ce1adc1cd1db5e4de971fbeb  gcc/config/aarch64/aarch64.opt
  5bc2d62d910e1c00bd6eed6ffaa5a18d  gcc/config/aarch64/aarch64.opt.urls
--- 3575,3614 ----
  ded6adcc93742ca7fba0c4cffeaeabab  gcc/config/aarch64/aarch64-neon-builtins.def
  c058178535c874c3d9f517b5db804691  gcc/config/aarch64/aarch64-neon-sve-bridge-builtins.def
  99262ad964faab9a1090f68a8b3d6d7a  gcc/config/aarch64/aarch64-netbsd.h
! 7f0d9c465225bebd81ffece3f482224c  gcc/config/aarch64/aarch64-option-extensions.def
  1fcf15030f24490613d6a45d6b439e61  gcc/config/aarch64/aarch64-opts.h
  c58a041b3d1a2f2c6c49f13e8ad85fdc  gcc/config/aarch64/aarch64-passes.def
! 6df7089d08b323550ce1a54f53394a6a  gcc/config/aarch64/aarch64-protos.h
  7beff4ec013b184132d7c933faa51208  gcc/config/aarch64/aarch64-sched-dispatch.cc
  b824341b8f6fdb8eb1667425adf63db8  gcc/config/aarch64/aarch64-sched-dispatch.h
  da15606bcbef7961db958c042bf81c05  gcc/config/aarch64/aarch64-simd-builtin-types.def
  07b97d98992798466794748f4e1f2889  gcc/config/aarch64/aarch64-simd-builtins.def
  2fae3501b318ccd9be92a4b49710913e  gcc/config/aarch64/aarch64-simd-pragma-builtins.def
! 3611d70350c5edc3bd92dbd196a594fd  gcc/config/aarch64/aarch64-simd.md
  f27b31555e077ce25b7e0120a532cfdf  gcc/config/aarch64/aarch64-sme.md
  49d4ace4311e9b1d77ff31b3b8883769  gcc/config/aarch64/aarch64-speculation.cc
! c09e875ec76470d14ced515628164d82  gcc/config/aarch64/aarch64-sve-builtins-base.cc
  8b08d9a2c35427a6672b61f1b4dcb6ee  gcc/config/aarch64/aarch64-sve-builtins-base.def
  c21ba709d29fe9718239fabf22dcb9a9  gcc/config/aarch64/aarch64-sve-builtins-base.h
! 34de40a8478ea797a87ce39e044629ec  gcc/config/aarch64/aarch64-sve-builtins-functions.h
! e506265179e1134aaa915d797e47e5fa  gcc/config/aarch64/aarch64-sve-builtins-shapes.cc
  3e5ae654cf6c44284fe17547c40d20de  gcc/config/aarch64/aarch64-sve-builtins-shapes.h
! 4bba4ad014d76418a4dffcac45802402  gcc/config/aarch64/aarch64-sve-builtins-sme.cc
  b7970cc46633371d0ac4e877297d804a  gcc/config/aarch64/aarch64-sve-builtins-sme.def
  1cb175058a4da1ec265f07a8c37df781  gcc/config/aarch64/aarch64-sve-builtins-sme.h
! 18ce861f96ea06337217cdb5fbf6cb64  gcc/config/aarch64/aarch64-sve-builtins-sve2.cc
  a5319d4e7a44a8b96aeb7f8a96f660d6  gcc/config/aarch64/aarch64-sve-builtins-sve2.def
  977f50faf21613363e643a782cf84ca3  gcc/config/aarch64/aarch64-sve-builtins-sve2.h
  9422a2eaa20d292eff64b10bcee8d4f0  gcc/config/aarch64/aarch64-sve-builtins.def
  90d3781359296ff521d1617a69ed7eea  gcc/config/aarch64/aarch64-sve.md
  2c33bf2afcc6c1e99efec231b38841d5  gcc/config/aarch64/aarch64-sve2.md
! 9482a051d967c399dfed0923c294de3f  gcc/config/aarch64/aarch64-sys-regs.def
! 4d85753c314f127c5c701c3fc4c29ae5  gcc/config/aarch64/aarch64-tune.md
  dec4c8fd03ac5636ba08d9523bee06be  gcc/config/aarch64/aarch64-tuning-enums.def
! 3e678460d03287c5817595f99c59d4c5  gcc/config/aarch64/aarch64-tuning-flags.def
  0eec0dd3dbc5fa83349625d27ac091df  gcc/config/aarch64/aarch64-vxworks.h
! 77c46189114d99190105bb4cda0eec55  gcc/config/aarch64/aarch64.cc
! 24361ad83b473030c9f81712a515898e  gcc/config/aarch64/aarch64.h
  148e9de02cbf0ec4e00830cbddf4d3e9  gcc/config/aarch64/aarch64.md
  dabea943ce1adc1cd1db5e4de971fbeb  gcc/config/aarch64/aarch64.opt
  5bc2d62d910e1c00bd6eed6ffaa5a18d  gcc/config/aarch64/aarch64.opt.urls
*************** eb03dfcd266d8fc8f127a62e436447db  gcc/co
*** 3625,3631 ****
  4a5b21c6d45c2fcbdb27f8cc37811d0b  gcc/config/aarch64/constraints.md
  36793d3c45f01e48f803e37494b108f0  gcc/config/aarch64/cortex-a57-fma-steering.cc
  dc252994bb63e3b3bb9aa44e233b100d  gcc/config/aarch64/cygming.h
! 483b45a54151291d986c42addcb125d1  gcc/config/aarch64/driver-aarch64.cc
  f16190eb3167c87740aaff80ebc646b5  gcc/config/aarch64/fractional-cost.h
  651bbb7890869a090e394b18403b9f44  gcc/config/aarch64/gcc-auto-profile
  190b8ad2102cd90ce935883b736ff024  gcc/config/aarch64/geniterators.sh
--- 3628,3634 ----
  4a5b21c6d45c2fcbdb27f8cc37811d0b  gcc/config/aarch64/constraints.md
  36793d3c45f01e48f803e37494b108f0  gcc/config/aarch64/cortex-a57-fma-steering.cc
  dc252994bb63e3b3bb9aa44e233b100d  gcc/config/aarch64/cygming.h
! 1869071c19d7792acb8ce41bba26eb30  gcc/config/aarch64/driver-aarch64.cc
  f16190eb3167c87740aaff80ebc646b5  gcc/config/aarch64/fractional-cost.h
  651bbb7890869a090e394b18403b9f44  gcc/config/aarch64/gcc-auto-profile
  190b8ad2102cd90ce935883b736ff024  gcc/config/aarch64/geniterators.sh
*************** b4fea9bc9192136140380d88dce79fa9  gcc/co
*** 3648,3656 ****
  dedb6623cd3073a98711776bb3e1d95e  gcc/config/aarch64/thunderx3t110.md
  e05dc280f1503a1c41082725d94d62d7  gcc/config/aarch64/tsv110.md
  90072f357d3de33ba9390e2634c9d11b  gcc/config/aarch64/tuning_models/a64fx.h
! 670f913d53c6a1f880244576faf330b4  gcc/config/aarch64/tuning_models/ampere1.h
  1b294abeb6683126122fb9d9c174d207  gcc/config/aarch64/tuning_models/ampere1a.h
! 96fd0c691708d6dda8214b42d8daff63  gcc/config/aarch64/tuning_models/ampere1b.h
  1af7c24f82d2f9a2ca364a311e89e214  gcc/config/aarch64/tuning_models/cortexa320.h
  2aa659f1b5858858deea7c18974bb04a  gcc/config/aarch64/tuning_models/cortexa35.h
  b09a8fa2b31a86ae520f3c4566d11302  gcc/config/aarch64/tuning_models/cortexa53.h
--- 3651,3659 ----
  dedb6623cd3073a98711776bb3e1d95e  gcc/config/aarch64/thunderx3t110.md
  e05dc280f1503a1c41082725d94d62d7  gcc/config/aarch64/tsv110.md
  90072f357d3de33ba9390e2634c9d11b  gcc/config/aarch64/tuning_models/a64fx.h
! f3276f7c212786377a675e6dcb33033f  gcc/config/aarch64/tuning_models/ampere1.h
  1b294abeb6683126122fb9d9c174d207  gcc/config/aarch64/tuning_models/ampere1a.h
! 4ef885aa977ffba67ab267578e7a52ed  gcc/config/aarch64/tuning_models/ampere1b.h
  1af7c24f82d2f9a2ca364a311e89e214  gcc/config/aarch64/tuning_models/cortexa320.h
  2aa659f1b5858858deea7c18974bb04a  gcc/config/aarch64/tuning_models/cortexa35.h
  b09a8fa2b31a86ae520f3c4566d11302  gcc/config/aarch64/tuning_models/cortexa53.h
*************** a07ee362a4961e9d41cb0ab83553de74  gcc/co
*** 3688,3694 ****
  b4eac8c564e104cf3cc48269868be196  gcc/config/alpha/alpha-passes.def
  3fde351a6bc8386bb57921a1e5589ffa  gcc/config/alpha/alpha-protos.h
  47882084eaa3c7296c579a554ef122c4  gcc/config/alpha/alpha.cc
! d9ed1faf0e8c75d119c4c2bd11d0f7a8  gcc/config/alpha/alpha.h
  785f504d1be6413dec066cb278f0c8ec  gcc/config/alpha/alpha.md
  9d7aba6e4e2821c0d801e5c6cba73763  gcc/config/alpha/alpha.opt
  16f67dabdc3240d89a6b1f0993fcc29a  gcc/config/alpha/alpha.opt.urls
--- 3691,3697 ----
  b4eac8c564e104cf3cc48269868be196  gcc/config/alpha/alpha-passes.def
  3fde351a6bc8386bb57921a1e5589ffa  gcc/config/alpha/alpha-protos.h
  47882084eaa3c7296c579a554ef122c4  gcc/config/alpha/alpha.cc
! 97ead278f191dc858083549f1b19f490  gcc/config/alpha/alpha.h
  785f504d1be6413dec066cb278f0c8ec  gcc/config/alpha/alpha.md
  9d7aba6e4e2821c0d801e5c6cba73763  gcc/config/alpha/alpha.opt
  16f67dabdc3240d89a6b1f0993fcc29a  gcc/config/alpha/alpha.opt.urls
*************** d58398b8674211171ea210f8d3f3883b  gcc/co
*** 3769,3781 ****
  357d99c16ccb55530e3c4bc802988cde  gcc/config/arm/arm-ldmstm.ml
  7550204b1316d145890d079b35b59fbd  gcc/config/arm/arm-mlib.h
  ffdbb4e18653cbb05435d74f1b237c9e  gcc/config/arm/arm-modes.def
! c598d61cb4c62a43ca9f95d622837449  gcc/config/arm/arm-mve-builtins-base.cc
  dd68b000194684be096bab7e439eae6d  gcc/config/arm/arm-mve-builtins-base.def
  b89eb2d819ab7b39687f97a2e620112b  gcc/config/arm/arm-mve-builtins-base.h
! 76c9ba52f5b1e8b2d2fe7e3750adbcbb  gcc/config/arm/arm-mve-builtins-functions.h
! ea72aee467f7e86d31310bb4332ccec2  gcc/config/arm/arm-mve-builtins-shapes.cc
  157421ab7aefe277d0d18d38ea429fdd  gcc/config/arm/arm-mve-builtins-shapes.h
! cbc9ce794eac388614494b30973bd668  gcc/config/arm/arm-mve-builtins.cc
  e0fbe1dcad67c21113339fdfd76d1a7d  gcc/config/arm/arm-mve-builtins.def
  dc420141faed0de4906a02cbbd953f18  gcc/config/arm/arm-mve-builtins.h
  b65c3665748e7d55a7c42645ff190690  gcc/config/arm/arm-opts.h
--- 3772,3784 ----
  357d99c16ccb55530e3c4bc802988cde  gcc/config/arm/arm-ldmstm.ml
  7550204b1316d145890d079b35b59fbd  gcc/config/arm/arm-mlib.h
  ffdbb4e18653cbb05435d74f1b237c9e  gcc/config/arm/arm-modes.def
! cc834f8de36aaf8f6f0a31a5296d81ad  gcc/config/arm/arm-mve-builtins-base.cc
  dd68b000194684be096bab7e439eae6d  gcc/config/arm/arm-mve-builtins-base.def
  b89eb2d819ab7b39687f97a2e620112b  gcc/config/arm/arm-mve-builtins-base.h
! bed7e55d193193e04bd0f172e0d6f28b  gcc/config/arm/arm-mve-builtins-functions.h
! 4d28c1975adc58ab0cbc18847b50f90e  gcc/config/arm/arm-mve-builtins-shapes.cc
  157421ab7aefe277d0d18d38ea429fdd  gcc/config/arm/arm-mve-builtins-shapes.h
! aa2852bd05716074203e1b49c40f7e8c  gcc/config/arm/arm-mve-builtins.cc
  e0fbe1dcad67c21113339fdfd76d1a7d  gcc/config/arm/arm-mve-builtins.def
  dc420141faed0de4906a02cbbd953f18  gcc/config/arm/arm-mve-builtins.h
  b65c3665748e7d55a7c42645ff190690  gcc/config/arm/arm-opts.h
*************** eb0b0296efa6a142ee4ee7b4cf09c756  gcc/co
*** 4121,4127 ****
  3d14b349b4f1885e26b37bfd8ce688a3  gcc/config/gcn/gcn-tables.opt
  ca8c1935ac88d760dc3a5b7e97558f28  gcc/config/gcn/gcn-tables.opt.urls
  613817ee55713099d08c4eb310ec3de7  gcc/config/gcn/gcn-tree.cc
! 5cb7b740e8523be8f70427a45d6a7d83  gcc/config/gcn/gcn-valu.md
  67f9685f47f627440161ee40c397d2da  gcc/config/gcn/gcn.cc
  55244ab071b3b4cf8c0e2f783c4773ec  gcc/config/gcn/gcn.h
  94f21cc801fd72f666892531d5f883e4  gcc/config/gcn/gcn.md
--- 4124,4130 ----
  3d14b349b4f1885e26b37bfd8ce688a3  gcc/config/gcn/gcn-tables.opt
  ca8c1935ac88d760dc3a5b7e97558f28  gcc/config/gcn/gcn-tables.opt.urls
  613817ee55713099d08c4eb310ec3de7  gcc/config/gcn/gcn-tree.cc
! 18b005097a7ae73c34c65902ba5586af  gcc/config/gcn/gcn-valu.md
  67f9685f47f627440161ee40c397d2da  gcc/config/gcn/gcn.cc
  55244ab071b3b4cf8c0e2f783c4773ec  gcc/config/gcn/gcn.h
  94f21cc801fd72f666892531d5f883e4  gcc/config/gcn/gcn.md
*************** d081ffdb5e6fda6471818cb2912ae68a  gcc/co
*** 4174,4180 ****
  ea7d0f3fec8f9d7d0c263808b5e56f11  gcc/config/host-darwin.h
  bb74991f4617b918293845016b78bd3a  gcc/config/host-freebsd.cc
  7ad6be638eba111b2e8fc1eddf7835c1  gcc/config/host-hpux.cc
! be95fbbee07cf09eb6a8fb9ce86af55a  gcc/config/host-linux.cc
  5d43584d85ba4cc7620a53ed7bb40e7a  gcc/config/host-netbsd.cc
  e0cfa2d30528afe7d96718b2c0d2f042  gcc/config/host-openbsd.cc
  7b5daafe15fce1b864492af648812dc4  gcc/config/host-solaris.cc
--- 4177,4183 ----
  ea7d0f3fec8f9d7d0c263808b5e56f11  gcc/config/host-darwin.h
  bb74991f4617b918293845016b78bd3a  gcc/config/host-freebsd.cc
  7ad6be638eba111b2e8fc1eddf7835c1  gcc/config/host-hpux.cc
! 794c245efe4371070840d35bd9b46903  gcc/config/host-linux.cc
  5d43584d85ba4cc7620a53ed7bb40e7a  gcc/config/host-netbsd.cc
  e0cfa2d30528afe7d96718b2c0d2f042  gcc/config/host-openbsd.cc
  7b5daafe15fce1b864492af648812dc4  gcc/config/host-solaris.cc
*************** e31d20e57fcc6b9a15aa65c66ea05643  gcc/co
*** 4264,4270 ****
  9d5a9c0371e33928eb2afe6005bb2137  gcc/config/i386/cpuid.h
  b7a784ebc5b7a408ce934c4c77d2f0df  gcc/config/i386/cross-stdarg.h
  eea748dea33c931f2a0211ffd279bd9d  gcc/config/i386/crtdll.h
! 49eeb60bb4a4e67c0ca57b4e85355822  gcc/config/i386/cygming.h
  2769aec1ba034a4aeb65b6a57299886f  gcc/config/i386/cygwin-stdint.h
  7a00aae17af7149d2d3b820963bc170f  gcc/config/i386/cygwin-w64.h
  78fef08ce34bfd3a40c628948e8cd0c4  gcc/config/i386/cygwin.h
--- 4267,4273 ----
  9d5a9c0371e33928eb2afe6005bb2137  gcc/config/i386/cpuid.h
  b7a784ebc5b7a408ce934c4c77d2f0df  gcc/config/i386/cross-stdarg.h
  eea748dea33c931f2a0211ffd279bd9d  gcc/config/i386/crtdll.h
! ec9ea5650606b68388cd5a99c6f7d4a4  gcc/config/i386/cygming.h
  2769aec1ba034a4aeb65b6a57299886f  gcc/config/i386/cygwin-stdint.h
  7a00aae17af7149d2d3b820963bc170f  gcc/config/i386/cygwin-w64.h
  78fef08ce34bfd3a40c628948e8cd0c4  gcc/config/i386/cygwin.h
*************** be7f06e3ea032dfb39fcda012c812683  gcc/co
*** 4314,4340 ****
  3ca3efd35f47efb8789dc330b5b92a4f  gcc/config/i386/i386-c.cc
  a0261d6cc006fb86b99f338bdc94ae04  gcc/config/i386/i386-d.cc
  e9c7eebd4e344796f248c93990aa5166  gcc/config/i386/i386-d.h
! 3f09d8a195a87cf9f9e90fda4a3beca0  gcc/config/i386/i386-expand.cc
  386e1be7f608621b79970d4d036694f8  gcc/config/i386/i386-expand.h
! 36650a3206163cca372ce170228e3884  gcc/config/i386/i386-features.cc
  52056c666db06e99d6978e69f82ed68d  gcc/config/i386/i386-features.h
  a36300f5b0bbacff82dff3d8f9bb59ce  gcc/config/i386/i386-isa.def
  848d1b1aa8faaad07d31b78764004e7f  gcc/config/i386/i386-jit.cc
  d743703707286fafa2ce425b1d062ee0  gcc/config/i386/i386-jit.h
  31871dc86b95e35e45aee6cbaaddb18d  gcc/config/i386/i386-modes.def
! abc6148a96c8a75b93a7d239d900a31b  gcc/config/i386/i386-options.cc
  106bb7043496820d393f0522178e1287  gcc/config/i386/i386-options.h
  2db6ec1e569468279f31d11379fe9d8f  gcc/config/i386/i386-opts.h
  9a75f0c116528508f4f48d128eceac38  gcc/config/i386/i386-passes.def
! b27f555de50f373127abeb8bcafb02cc  gcc/config/i386/i386-protos.h
  5b778b3296ea91dab0ca82338ca6828d  gcc/config/i386/i386-rust-and-jit.inc
  91b8b50cba997aef17a61929b5b55a87  gcc/config/i386/i386-rust.cc
  25b3947a11eb9ca52892133ddb36f3f2  gcc/config/i386/i386-rust.h
! 6305d3cfd8b5da3eb16e826eb4f88db6  gcc/config/i386/i386.cc
! 32ac32e8b15c1eb1d7bbf3e1e0ffd3fe  gcc/config/i386/i386.h
! 171d6e69d8e98fffcf5ee96e842d8332  gcc/config/i386/i386.md
  28453dc70fa94816b467e1fff313e0cc  gcc/config/i386/i386.opt
! bf46bd00d604a9ea87a3339520bfdb81  gcc/config/i386/i386.opt.urls
  ec8782b40feb0fc958bf2d6974c70f12  gcc/config/i386/i386elf.h
  e91dbbea4abdb9b61d892b20c00503a9  gcc/config/i386/ia32intrin.h
  045de1254b57ade50e2bc57081860a9b  gcc/config/i386/iamcu.h
--- 4317,4343 ----
  3ca3efd35f47efb8789dc330b5b92a4f  gcc/config/i386/i386-c.cc
  a0261d6cc006fb86b99f338bdc94ae04  gcc/config/i386/i386-d.cc
  e9c7eebd4e344796f248c93990aa5166  gcc/config/i386/i386-d.h
! f603734f2788289d4295b88415952675  gcc/config/i386/i386-expand.cc
  386e1be7f608621b79970d4d036694f8  gcc/config/i386/i386-expand.h
! 86a817ac900b29dc9a74d5dc0f8dd8c9  gcc/config/i386/i386-features.cc
  52056c666db06e99d6978e69f82ed68d  gcc/config/i386/i386-features.h
  a36300f5b0bbacff82dff3d8f9bb59ce  gcc/config/i386/i386-isa.def
  848d1b1aa8faaad07d31b78764004e7f  gcc/config/i386/i386-jit.cc
  d743703707286fafa2ce425b1d062ee0  gcc/config/i386/i386-jit.h
  31871dc86b95e35e45aee6cbaaddb18d  gcc/config/i386/i386-modes.def
! cac2321ed2cc84062b566bd4fafb56f8  gcc/config/i386/i386-options.cc
  106bb7043496820d393f0522178e1287  gcc/config/i386/i386-options.h
  2db6ec1e569468279f31d11379fe9d8f  gcc/config/i386/i386-opts.h
  9a75f0c116528508f4f48d128eceac38  gcc/config/i386/i386-passes.def
! 4f2145b62b0465868e9bacb4334f0cf4  gcc/config/i386/i386-protos.h
  5b778b3296ea91dab0ca82338ca6828d  gcc/config/i386/i386-rust-and-jit.inc
  91b8b50cba997aef17a61929b5b55a87  gcc/config/i386/i386-rust.cc
  25b3947a11eb9ca52892133ddb36f3f2  gcc/config/i386/i386-rust.h
! a955385bdf1330d8d931bc63fa40f6de  gcc/config/i386/i386.cc
! 1cefac8b69ef88fdbd08891bdbd8e5fd  gcc/config/i386/i386.h
! c456681f4cdf9ca59fccca34af297000  gcc/config/i386/i386.md
  28453dc70fa94816b467e1fff313e0cc  gcc/config/i386/i386.opt
! a0b0d520aa60f8de67fdc462456c6510  gcc/config/i386/i386.opt.urls
  ec8782b40feb0fc958bf2d6974c70f12  gcc/config/i386/i386elf.h
  e91dbbea4abdb9b61d892b20c00503a9  gcc/config/i386/ia32intrin.h
  045de1254b57ade50e2bc57081860a9b  gcc/config/i386/iamcu.h
*************** db114ac74c87743a142214fddaad2687  gcc/co
*** 4394,4400 ****
  92210572b9f9f6481e4649a42d9ac3b0  gcc/config/i386/sm4intrin.h
  5298b8261e081859bbf068b710158e8f  gcc/config/i386/smmintrin.h
  592f748733487ebc51326f6cbf8f1f54  gcc/config/i386/sol2.h
! bb911ba78cc14203852d42d56b356602  gcc/config/i386/sse.md
  52e0114cb9ab8d55aac3c17d06657d71  gcc/config/i386/ssemath.h
  8a6ab9e02097018bc9f1c2b347d29cfa  gcc/config/i386/stringop.def
  a626b4e6cd3e15f4e9d5c769b6391243  gcc/config/i386/subst.md
--- 4397,4403 ----
  92210572b9f9f6481e4649a42d9ac3b0  gcc/config/i386/sm4intrin.h
  5298b8261e081859bbf068b710158e8f  gcc/config/i386/smmintrin.h
  592f748733487ebc51326f6cbf8f1f54  gcc/config/i386/sol2.h
! 6943c43e3488475c14c00d6c91b46922  gcc/config/i386/sse.md
  52e0114cb9ab8d55aac3c17d06657d71  gcc/config/i386/ssemath.h
  8a6ab9e02097018bc9f1c2b347d29cfa  gcc/config/i386/stringop.def
  a626b4e6cd3e15f4e9d5c769b6391243  gcc/config/i386/subst.md
*************** d4688047da16af7de59257cb0bb813fa  gcc/co
*** 4490,4496 ****
  c1a6efd9f47d6a97dfbe22655f9936d0  gcc/config/ia64/t-ia64
  67736f64800d10923b58be4e448620d6  gcc/config/ia64/t-linux
  873d9c3d981da08b9fd7e77a9daaa606  gcc/config/ia64/vect.md
! e054a1f6e2233a410c614556bf4c3b89  gcc/config/ia64/vms.h
  d00776bfff53c1a623cca10de9a5ff4a  gcc/config/ia64/vms.opt
  58c641df71a1f8993f6e5e1bfaac466d  gcc/config/ia64/vms.opt.urls
  d53f734e252d4bb64f63a771c7f82799  gcc/config/initfini-array.h
--- 4493,4499 ----
  c1a6efd9f47d6a97dfbe22655f9936d0  gcc/config/ia64/t-ia64
  67736f64800d10923b58be4e448620d6  gcc/config/ia64/t-linux
  873d9c3d981da08b9fd7e77a9daaa606  gcc/config/ia64/vect.md
! e8bcf6ada923cb488d306051180da7a7  gcc/config/ia64/vms.h
  d00776bfff53c1a623cca10de9a5ff4a  gcc/config/ia64/vms.opt
  58c641df71a1f8993f6e5e1bfaac466d  gcc/config/ia64/vms.opt.urls
  d53f734e252d4bb64f63a771c7f82799  gcc/config/initfini-array.h
*************** ab248989539b9f02a45e3469f383916f  gcc/co
*** 4611,4618 ****
  9972407ba6ffc9db617e82974a48919a  gcc/config/m68k/m68k-tables.opt
  76abf9d767893fa61fddacca5cea079e  gcc/config/m68k/m68k-tables.opt.urls
  a728f6086aef9aee88b1b427422b6371  gcc/config/m68k/m68k.cc
! 95d044e825b6ba7ecb45780c16f3b95e  gcc/config/m68k/m68k.h
! edc70cbcb720ae52dc5bccfc9d859e6a  gcc/config/m68k/m68k.md
  adf00f43fe711efc8a91288493587387  gcc/config/m68k/m68k.opt
  4ac9d1a63efa1a545d2c87edae0b90cc  gcc/config/m68k/m68k.opt.urls
  80346c30ce18e48e0a57b061db01dbfb  gcc/config/m68k/m68kelf.h
--- 4614,4621 ----
  9972407ba6ffc9db617e82974a48919a  gcc/config/m68k/m68k-tables.opt
  76abf9d767893fa61fddacca5cea079e  gcc/config/m68k/m68k-tables.opt.urls
  a728f6086aef9aee88b1b427422b6371  gcc/config/m68k/m68k.cc
! e6c98af7ed50ebd7223d69112a0faf71  gcc/config/m68k/m68k.h
! 7602d051c35461b8705aea99f95d079f  gcc/config/m68k/m68k.md
  adf00f43fe711efc8a91288493587387  gcc/config/m68k/m68k.opt
  4ac9d1a63efa1a545d2c87edae0b90cc  gcc/config/m68k/m68k.opt.urls
  80346c30ce18e48e0a57b061db01dbfb  gcc/config/m68k/m68kelf.h
*************** b85e0e83df79d2f49435f8e4a8992866  gcc/co
*** 4677,4684 ****
  3c3dc8be46b778f5ae37e34d464e3671  gcc/config/mingw/winnt-dll.cc
  8d146495102e58eb8547fbe9ddbe3244  gcc/config/mingw/winnt-dll.h
  6c4d1792e7729f1a305e9f345c12693f  gcc/config/mingw/winnt-stubs.cc
! 6fa861f48d6ecdd155488fb6c02c98d7  gcc/config/mingw/winnt.cc
! d3366b857e20f558be77198d166b068f  gcc/config/mingw/winnt.h
  d67c65c648990c8cc128e82dcf27ee3e  gcc/config/mips/10000.md
  438f714e597ac4900ae547323e93a15b  gcc/config/mips/20kc.md
  24238b483ec9d4bc01f3bc198c83585d  gcc/config/mips/24k.md
--- 4680,4687 ----
  3c3dc8be46b778f5ae37e34d464e3671  gcc/config/mingw/winnt-dll.cc
  8d146495102e58eb8547fbe9ddbe3244  gcc/config/mingw/winnt-dll.h
  6c4d1792e7729f1a305e9f345c12693f  gcc/config/mingw/winnt-stubs.cc
! 150e87ac12c987f980c059c36c4d35a2  gcc/config/mingw/winnt.cc
! 9384088f9bd2af277b7ce9621fc7a101  gcc/config/mingw/winnt.h
  d67c65c648990c8cc128e82dcf27ee3e  gcc/config/mips/10000.md
  438f714e597ac4900ae547323e93a15b  gcc/config/mips/20kc.md
  24238b483ec9d4bc01f3bc198c83585d  gcc/config/mips/24k.md
*************** bbb2a2cf5c79743f967571a1b148fa76  gcc/co
*** 4906,4912 ****
  93a447d34921667614245e6a67c3de17  gcc/config/nvptx/nvptx-opts.h
  5ffc066c68d4afbfd07cc9455e6c32f8  gcc/config/nvptx/nvptx-protos.h
  fbb7de1e9945c721671a67496fd85db0  gcc/config/nvptx/nvptx-sm.def
! b71ce5a615149b6287ceee7848b8c5d6  gcc/config/nvptx/nvptx.cc
  c299717550e64c9e645078aab7fba1ed  gcc/config/nvptx/nvptx.h
  e15f6451f0dfff24af4b5ecafe6050ce  gcc/config/nvptx/nvptx.md
  7ef196e33d0fcc3be452238c20b9841d  gcc/config/nvptx/nvptx.opt
--- 4909,4915 ----
  93a447d34921667614245e6a67c3de17  gcc/config/nvptx/nvptx-opts.h
  5ffc066c68d4afbfd07cc9455e6c32f8  gcc/config/nvptx/nvptx-protos.h
  fbb7de1e9945c721671a67496fd85db0  gcc/config/nvptx/nvptx-sm.def
! d473eba5e8ad5048fa8c890e6c8f4d5f  gcc/config/nvptx/nvptx.cc
  c299717550e64c9e645078aab7fba1ed  gcc/config/nvptx/nvptx.h
  e15f6451f0dfff24af4b5ecafe6050ce  gcc/config/nvptx/nvptx.md
  7ef196e33d0fcc3be452238c20b9841d  gcc/config/nvptx/nvptx.opt
*************** ea47b9aaff57a2a9d2393ed60a70f379  gcc/co
*** 4928,4934 ****
  0800c027b50e3ddb0bdb4cedbcf57204  gcc/config/or1k/linux.h
  8c4edc2eb61a43fb9f67ceb977f850e1  gcc/config/or1k/or1k-opts.h
  0dc32c21bc6353a22cc723aa5e94e7c4  gcc/config/or1k/or1k-protos.h
! 9021e16d01097a6b5ac74895c9a3ff2c  gcc/config/or1k/or1k.cc
  f8a5d88356a5ff970c4d25b031bbb42f  gcc/config/or1k/or1k.h
  83d5452e2dc479dd20981e7807861cbc  gcc/config/or1k/or1k.md
  db353534acb45de5e73096b05454650a  gcc/config/or1k/or1k.opt
--- 4931,4937 ----
  0800c027b50e3ddb0bdb4cedbcf57204  gcc/config/or1k/linux.h
  8c4edc2eb61a43fb9f67ceb977f850e1  gcc/config/or1k/or1k-opts.h
  0dc32c21bc6353a22cc723aa5e94e7c4  gcc/config/or1k/or1k-protos.h
! 60d49db6c65bccd947965cf746dbee2c  gcc/config/or1k/or1k.cc
  f8a5d88356a5ff970c4d25b031bbb42f  gcc/config/or1k/or1k.h
  83d5452e2dc479dd20981e7807861cbc  gcc/config/or1k/or1k.md
  db353534acb45de5e73096b05454650a  gcc/config/or1k/or1k.opt
*************** ed3f5ce2f7305137cb7981e5492f421d  gcc/co
*** 4962,4968 ****
  799a8f38f756018d977260ec4dd15af3  gcc/config/pa/pa-opts.h
  8476a9a8e5e9e1c37d95d447ec828c0d  gcc/config/pa/pa-protos.h
  9a6a5d9223dab90a5c05779cb300f814  gcc/config/pa/pa.cc
! 48ed3369bdda761db5670fecc39f87bc  gcc/config/pa/pa.h
  8e56a443cd5f22e6953f138a5f200b2c  gcc/config/pa/pa.md
  cb75df3acdd704487025273adaa58c9f  gcc/config/pa/pa.opt
  051ba40c6ad77aa43300a9282939c6ae  gcc/config/pa/pa.opt.urls
--- 4965,4971 ----
  799a8f38f756018d977260ec4dd15af3  gcc/config/pa/pa-opts.h
  8476a9a8e5e9e1c37d95d447ec828c0d  gcc/config/pa/pa-protos.h
  9a6a5d9223dab90a5c05779cb300f814  gcc/config/pa/pa.cc
! b0b8d604d500af6a07e0ed739a282701  gcc/config/pa/pa.h
  8e56a443cd5f22e6953f138a5f200b2c  gcc/config/pa/pa.md
  cb75df3acdd704487025273adaa58c9f  gcc/config/pa/pa.opt
  051ba40c6ad77aa43300a9282939c6ae  gcc/config/pa/pa.opt.urls
*************** d14e87abdaf32035777f39d2369df790  gcc/co
*** 5013,5019 ****
  24fcf4723ce4bbe23722598936ad33e9  gcc/config/riscv/andes-23-series.md
  6a8d6503ff6d371819fb57211bcaa34b  gcc/config/riscv/andes-25-series.md
  118aa466f059a6dece7669f13f281b25  gcc/config/riscv/andes-45-series.md
! fe7787cb1ccac5b6c4c75d7da3aef619  gcc/config/riscv/andes-vector-builtins-bases.cc
  30b1cd3f2169a2b09667ad9a57817b33  gcc/config/riscv/andes-vector-builtins-bases.h
  f913aafadf901518cfbd1709bf303845  gcc/config/riscv/andes-vector-builtins-functions.def
  66ab8d65f2dba7e08954bcbbba736f90  gcc/config/riscv/andes-vector.md
--- 5016,5022 ----
  24fcf4723ce4bbe23722598936ad33e9  gcc/config/riscv/andes-23-series.md
  6a8d6503ff6d371819fb57211bcaa34b  gcc/config/riscv/andes-25-series.md
  118aa466f059a6dece7669f13f281b25  gcc/config/riscv/andes-45-series.md
! 36ff3edd2d9bd222a7e9e6f11882917b  gcc/config/riscv/andes-vector-builtins-bases.cc
  30b1cd3f2169a2b09667ad9a57817b33  gcc/config/riscv/andes-vector-builtins-bases.h
  f913aafadf901518cfbd1709bf303845  gcc/config/riscv/andes-vector-builtins-functions.def
  66ab8d65f2dba7e08954bcbbba736f90  gcc/config/riscv/andes-vector.md
*************** b7544a05ff53accc3d2defcb758626a9  gcc/co
*** 5026,5032 ****
  67bbc5a81e29ba7c346e27e6a7782608  gcc/config/riscv/autovec-opt.md
  edf41a22232744259fbf44f2ae96a8a6  gcc/config/riscv/autovec.md
  8c6fab8cc48abd58cbae573be6c52639  gcc/config/riscv/bitmanip.md
! 79dfcd2a0bedb02de4194552f2712fe0  gcc/config/riscv/constraints.md
  cea5b702841429deff64e2e6fd0b626f  gcc/config/riscv/corev.def
  3541ce4817aa1b4ca8a8e3799ba716d8  gcc/config/riscv/corev.md
  e2422c2fce6d2a652b60158b9d2bad0e  gcc/config/riscv/crypto.md
--- 5029,5035 ----
  67bbc5a81e29ba7c346e27e6a7782608  gcc/config/riscv/autovec-opt.md
  edf41a22232744259fbf44f2ae96a8a6  gcc/config/riscv/autovec.md
  8c6fab8cc48abd58cbae573be6c52639  gcc/config/riscv/bitmanip.md
! 8b17d303a796d2c497cc28d6b1fb5a12  gcc/config/riscv/constraints.md
  cea5b702841429deff64e2e6fd0b626f  gcc/config/riscv/corev.def
  3541ce4817aa1b4ca8a8e3799ba716d8  gcc/config/riscv/corev.md
  e2422c2fce6d2a652b60158b9d2bad0e  gcc/config/riscv/crypto.md
*************** bcda2f5a4a2728d5f6bc53cbbd26f90c  gcc/co
*** 5055,5061 ****
  5108deda32a010f8df8d518a2417ba81  gcc/config/riscv/riscv-builtins.cc
  5cb39713c38f481ef65328ccacfc067e  gcc/config/riscv/riscv-c.cc
  33dd09c63fb051a37d26d97469c451d9  gcc/config/riscv/riscv-cmo.def
! 0ea6a5e2d81d28c0c554961f3ae68c3a  gcc/config/riscv/riscv-cores.def
  165a5d0020971e2616fa7c9198c56338  gcc/config/riscv/riscv-d.cc
  c5d537324bd78e2ade1cf59d04fc1f54  gcc/config/riscv/riscv-d.h
  289aa3beac20448eac0ca053c2652b37  gcc/config/riscv/riscv-ext-andes.def
--- 5058,5064 ----
  5108deda32a010f8df8d518a2417ba81  gcc/config/riscv/riscv-builtins.cc
  5cb39713c38f481ef65328ccacfc067e  gcc/config/riscv/riscv-c.cc
  33dd09c63fb051a37d26d97469c451d9  gcc/config/riscv/riscv-cmo.def
! 570f69cae95afa159f918a800e704f0a  gcc/config/riscv/riscv-cores.def
  165a5d0020971e2616fa7c9198c56338  gcc/config/riscv/riscv-d.cc
  c5d537324bd78e2ade1cf59d04fc1f54  gcc/config/riscv/riscv-d.h
  289aa3beac20448eac0ca053c2652b37  gcc/config/riscv/riscv-ext-andes.def
*************** f345cbe9d8c50068508e75fe59e6b4a6  gcc/co
*** 5076,5112 ****
  7580ff2b6ee1a7e6e08368bacae2ac95  gcc/config/riscv/riscv-opts.h
  b8f6d36a9d7d3ef28a80c20bec990411  gcc/config/riscv/riscv-passes.def
  e1ac1647825642c1e551b9a174630bd6  gcc/config/riscv/riscv-profiles.def
! 86e2659771fdfcf539c99063fee6a21a  gcc/config/riscv/riscv-protos.h
  2b6774d7dd7980d9eb3f4f24ed1b3e45  gcc/config/riscv/riscv-scalar-crypto.def
  01798b6988317cc1d7a76908a68f458a  gcc/config/riscv/riscv-selftests.cc
  41d585e61cee0deacc33bd07c93e79e2  gcc/config/riscv/riscv-shorten-memrefs.cc
  1ebe40e418ab6054a3ea000381c1c959  gcc/config/riscv/riscv-sr.cc
! 01ec38533cb246430551648ac4c8e8ce  gcc/config/riscv/riscv-string.cc
  5f2c2bf7c94b8cb13fc50b55194c991e  gcc/config/riscv/riscv-subset.h
  1058561a06280d28aa26974102f3b818  gcc/config/riscv/riscv-target-attr.cc
! 4a647945b27a008db34047cdc0d19fe2  gcc/config/riscv/riscv-v.cc
  34f62419062663f91765f9f50c8f0b62  gcc/config/riscv/riscv-v.h
  9eb2acff4a0e6907ab4fe749d3b1fc7f  gcc/config/riscv/riscv-vect-permconst.cc
! 9f834de2c20e638923d3b5c429353434  gcc/config/riscv/riscv-vector-builtins-bases.cc
  7fc09f50e292c52420537953650fa0de  gcc/config/riscv/riscv-vector-builtins-bases.h
  24999355f5fe486aee79b1d89fbc5d24  gcc/config/riscv/riscv-vector-builtins-functions.def
! b6f59a4e6889b8fdd3423f853347dc12  gcc/config/riscv/riscv-vector-builtins-shapes.cc
  2a2b16ff55b4e9c8265561eb12d0aa49  gcc/config/riscv/riscv-vector-builtins-shapes.h
  2291ef015c10e52be5b7e887d0ea1219  gcc/config/riscv/riscv-vector-builtins-types.def
! 74e512db1b8e8d95d27837dfb557cc9c  gcc/config/riscv/riscv-vector-builtins.cc
  0ec9d6c2ca784cba000c21a33c87787d  gcc/config/riscv/riscv-vector-builtins.def
! 2abaee36aff67cee1ed97448897614d8  gcc/config/riscv/riscv-vector-builtins.h
  ee8122b7c30f11ad5dc682dad7cf7f55  gcc/config/riscv/riscv-vector-costs.cc
  4d1160c11520af439eb0e5dc6073e77b  gcc/config/riscv/riscv-vector-costs.h
  4dd506c7e0c9b67fb2b6c5acdf4f44b7  gcc/config/riscv/riscv-vector-switch.def
  3205f1e7859c9ef2f9de42d862780b0a  gcc/config/riscv/riscv-vsetvl.cc
  142fb9988d1433586e8fa0e3b072f655  gcc/config/riscv/riscv-vsetvl.def
  d87a1f40dfc9d93ed1ee9eb9243e12e3  gcc/config/riscv/riscv-zicfilp.cc
! 608ca849e2f08f9c6c723724a35d92b4  gcc/config/riscv/riscv.cc
! 0b4d02debcffa4764cfdba37ddd0f549  gcc/config/riscv/riscv.h
! b3dc3caafb5f777606faf403f7929c33  gcc/config/riscv/riscv.md
! 889bc6068f70f03b008968821d92ad40  gcc/config/riscv/riscv.opt
! 712042d47c904acf7307129ab3a48df3  gcc/config/riscv/riscv.opt.urls
  68c8996d7ac73df46c6c1d49d8839ee0  gcc/config/riscv/riscv_bitmanip.h
  99deccc8c27a840823251f8715c89d95  gcc/config/riscv/riscv_crypto.h
  919b77d98a332a298929861b56886aaa  gcc/config/riscv/riscv_th_vector.h
--- 5079,5115 ----
  7580ff2b6ee1a7e6e08368bacae2ac95  gcc/config/riscv/riscv-opts.h
  b8f6d36a9d7d3ef28a80c20bec990411  gcc/config/riscv/riscv-passes.def
  e1ac1647825642c1e551b9a174630bd6  gcc/config/riscv/riscv-profiles.def
! 25eea0c9160bfc045c58575a0d439b91  gcc/config/riscv/riscv-protos.h
  2b6774d7dd7980d9eb3f4f24ed1b3e45  gcc/config/riscv/riscv-scalar-crypto.def
  01798b6988317cc1d7a76908a68f458a  gcc/config/riscv/riscv-selftests.cc
  41d585e61cee0deacc33bd07c93e79e2  gcc/config/riscv/riscv-shorten-memrefs.cc
  1ebe40e418ab6054a3ea000381c1c959  gcc/config/riscv/riscv-sr.cc
! 0289d9345d2dc3266b3b689ac0528963  gcc/config/riscv/riscv-string.cc
  5f2c2bf7c94b8cb13fc50b55194c991e  gcc/config/riscv/riscv-subset.h
  1058561a06280d28aa26974102f3b818  gcc/config/riscv/riscv-target-attr.cc
! 0610980060d5d53133c6118454b75be5  gcc/config/riscv/riscv-v.cc
  34f62419062663f91765f9f50c8f0b62  gcc/config/riscv/riscv-v.h
  9eb2acff4a0e6907ab4fe749d3b1fc7f  gcc/config/riscv/riscv-vect-permconst.cc
! c8ccbe47a6b27471eac8f1f4fcd0d335  gcc/config/riscv/riscv-vector-builtins-bases.cc
  7fc09f50e292c52420537953650fa0de  gcc/config/riscv/riscv-vector-builtins-bases.h
  24999355f5fe486aee79b1d89fbc5d24  gcc/config/riscv/riscv-vector-builtins-functions.def
! d351dde999076e0dcf4095d5c7838526  gcc/config/riscv/riscv-vector-builtins-shapes.cc
  2a2b16ff55b4e9c8265561eb12d0aa49  gcc/config/riscv/riscv-vector-builtins-shapes.h
  2291ef015c10e52be5b7e887d0ea1219  gcc/config/riscv/riscv-vector-builtins-types.def
! a6aa9a2e1d394ffb7d4a4a2928b682fb  gcc/config/riscv/riscv-vector-builtins.cc
  0ec9d6c2ca784cba000c21a33c87787d  gcc/config/riscv/riscv-vector-builtins.def
! 19a43fb4b1a740e74dbaae36a1a3bea4  gcc/config/riscv/riscv-vector-builtins.h
  ee8122b7c30f11ad5dc682dad7cf7f55  gcc/config/riscv/riscv-vector-costs.cc
  4d1160c11520af439eb0e5dc6073e77b  gcc/config/riscv/riscv-vector-costs.h
  4dd506c7e0c9b67fb2b6c5acdf4f44b7  gcc/config/riscv/riscv-vector-switch.def
  3205f1e7859c9ef2f9de42d862780b0a  gcc/config/riscv/riscv-vsetvl.cc
  142fb9988d1433586e8fa0e3b072f655  gcc/config/riscv/riscv-vsetvl.def
  d87a1f40dfc9d93ed1ee9eb9243e12e3  gcc/config/riscv/riscv-zicfilp.cc
! b5971928eebdc13bab03f56188957d3c  gcc/config/riscv/riscv.cc
! 7f80fe51de5bc9c7d40b9e74f686c18c  gcc/config/riscv/riscv.h
! 9e0ab67b984fa29ecc58f66fef197269  gcc/config/riscv/riscv.md
! c5d85fc587ed7ba9d844efc0c8436373  gcc/config/riscv/riscv.opt
! 07987470dd445a1552645f6c12c92c20  gcc/config/riscv/riscv.opt.urls
  68c8996d7ac73df46c6c1d49d8839ee0  gcc/config/riscv/riscv_bitmanip.h
  99deccc8c27a840823251f8715c89d95  gcc/config/riscv/riscv_crypto.h
  919b77d98a332a298929861b56886aaa  gcc/config/riscv/riscv_th_vector.h
*************** e7f78ee77ae8bd53e7956fe2fcc08ea3  gcc/co
*** 5116,5134 ****
  3dea079d2e88cc2b3fcf9e1456670b86  gcc/config/riscv/sifive-7.md
  ef8111b151f28f36d377df7b23b6b46f  gcc/config/riscv/sifive-p400.md
  2c11e3c37dd3e9b1a8f83c4920720c32  gcc/config/riscv/sifive-p600.md
! 8e357e68d22c0bf2e5463793d9c5d617  gcc/config/riscv/sifive-vector-builtins-bases.cc
  5ff33a97f2dbb8ace0988a9736c5c046  gcc/config/riscv/sifive-vector-builtins-bases.h
  3a280f2ee35611d19732e2fe055f2229  gcc/config/riscv/sifive-vector-builtins-functions.def
  656879fa6da6ce5e2212ef2a731ee479  gcc/config/riscv/sifive-vector.md
  0cbf9696a67d53bd260c9499b21f694e  gcc/config/riscv/sifive_vector.h
! fb9e0d5d8cce3f32dca3b7de2b8768ca  gcc/config/riscv/spacemit-x60.md
  04446d488a74103d7cec83deb91efa77  gcc/config/riscv/sync-rvwmo.md
  07faacfd587344c258efbfaffd38f39d  gcc/config/riscv/sync-ztso.md
  70f0d56dc35f6dd500d4da2b49c2e6ae  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
! d9f43506ab431aed5fe503336cb406f0  gcc/config/riscv/t-riscv
  fe202105dd9e81b9ce8fdcc11d52c294  gcc/config/riscv/t-rtems
  97a182737ed075d29be4ab1e848de420  gcc/config/riscv/t-withmultilib
  0478f4e79601d91fb8ad8f210b304a7b  gcc/config/riscv/t-withmultilib-generator
--- 5119,5137 ----
  3dea079d2e88cc2b3fcf9e1456670b86  gcc/config/riscv/sifive-7.md
  ef8111b151f28f36d377df7b23b6b46f  gcc/config/riscv/sifive-p400.md
  2c11e3c37dd3e9b1a8f83c4920720c32  gcc/config/riscv/sifive-p600.md
! 65ee2618a913f63cec2026443d624b46  gcc/config/riscv/sifive-vector-builtins-bases.cc
  5ff33a97f2dbb8ace0988a9736c5c046  gcc/config/riscv/sifive-vector-builtins-bases.h
  3a280f2ee35611d19732e2fe055f2229  gcc/config/riscv/sifive-vector-builtins-functions.def
  656879fa6da6ce5e2212ef2a731ee479  gcc/config/riscv/sifive-vector.md
  0cbf9696a67d53bd260c9499b21f694e  gcc/config/riscv/sifive_vector.h
! 5b11483d4943d4cc563901edd41b3649  gcc/config/riscv/spacemit-x60.md
  04446d488a74103d7cec83deb91efa77  gcc/config/riscv/sync-rvwmo.md
  07faacfd587344c258efbfaffd38f39d  gcc/config/riscv/sync-ztso.md
  70f0d56dc35f6dd500d4da2b49c2e6ae  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
! 76d971253a9376eb2ef2189bb98f21ec  gcc/config/riscv/t-riscv
  fe202105dd9e81b9ce8fdcc11d52c294  gcc/config/riscv/t-rtems
  97a182737ed075d29be4ab1e848de420  gcc/config/riscv/t-withmultilib
  0478f4e79601d91fb8ad8f210b304a7b  gcc/config/riscv/t-withmultilib-generator
*************** fe202105dd9e81b9ce8fdcc11d52c294  gcc/co
*** 5141,5147 ****
  dcbac9d3c6831ff1cd18effca9c7bb28  gcc/config/riscv/vector-bfloat16.md
  d321bd9f102b0926d5d2c56c36ad6853  gcc/config/riscv/vector-crypto.md
  eeff11b93491fb7c669f458a75ceb193  gcc/config/riscv/vector-iterators.md
! 0f5f9fb340863eb99ecbd71b0aeb2843  gcc/config/riscv/vector.md
  18d213c106fe52eebc74017d5ff892ce  gcc/config/riscv/xiangshan.md
  a398dfa970d2d1459a986ec657c751a3  gcc/config/riscv/xt-c908.md
  39ba96197510d4ac114a827d7ffbf806  gcc/config/riscv/zc.md
--- 5144,5150 ----
  dcbac9d3c6831ff1cd18effca9c7bb28  gcc/config/riscv/vector-bfloat16.md
  d321bd9f102b0926d5d2c56c36ad6853  gcc/config/riscv/vector-crypto.md
  eeff11b93491fb7c669f458a75ceb193  gcc/config/riscv/vector-iterators.md
! 9fcbe0829c24d246bfe02092aa89c3d4  gcc/config/riscv/vector.md
  18d213c106fe52eebc74017d5ff892ce  gcc/config/riscv/xiangshan.md
  a398dfa970d2d1459a986ec657c751a3  gcc/config/riscv/xt-c908.md
  39ba96197510d4ac114a827d7ffbf806  gcc/config/riscv/zc.md
*************** d70f08b893e019d12b16dc9a70754ef9  gcc/co
*** 5183,5189 ****
  efc4d9cc6fcf24af7ea6e89c0c82127f  gcc/config/rs6000/aix72.h
  1d313bdc511e984bdf559d61807bde14  gcc/config/rs6000/aix73.h
  ae4bd752599ffdd2833c6e78d03d39f0  gcc/config/rs6000/altivec.h
! 419efb9e6b152f546f921bc6bd175c11  gcc/config/rs6000/altivec.md
  505a3f0e71f54fbea2fbd87b1c032185  gcc/config/rs6000/amo.h
  2b409a82a1747675112a04705e01d157  gcc/config/rs6000/biarch64.h
  f83fd3bf0d9fbc30c9401eec549fdc2c  gcc/config/rs6000/bmi2intrin.h
--- 5186,5192 ----
  efc4d9cc6fcf24af7ea6e89c0c82127f  gcc/config/rs6000/aix72.h
  1d313bdc511e984bdf559d61807bde14  gcc/config/rs6000/aix73.h
  ae4bd752599ffdd2833c6e78d03d39f0  gcc/config/rs6000/altivec.h
! 8d7851c19d5176d1f96873218732d892  gcc/config/rs6000/altivec.md
  505a3f0e71f54fbea2fbd87b1c032185  gcc/config/rs6000/amo.h
  2b409a82a1747675112a04705e01d157  gcc/config/rs6000/biarch64.h
  f83fd3bf0d9fbc30c9401eec549fdc2c  gcc/config/rs6000/bmi2intrin.h
*************** db237fc1717a4075e7b9480205a32fd5  gcc/co
*** 5251,5260 ****
  63ccc96ff2cef948c080eac4455d02b1  gcc/config/rs6000/rbtree.cc
  8ece9ca8167f5056fa411488a97c6131  gcc/config/rs6000/rbtree.h
  5a8a620d69be5ade28e15be87ec36b9a  gcc/config/rs6000/rs6000-builtin.cc
! 332f4f91cdf9a382701e5c41dfd1dc7e  gcc/config/rs6000/rs6000-builtins.def
  bb710aa9f6e98d46357a2a10104dda23  gcc/config/rs6000/rs6000-c.cc
  f9e94bf7a9305993de9ddd700311aaaa  gcc/config/rs6000/rs6000-call.cc
! 4579aba833c122ad0e6a91b573653e2c  gcc/config/rs6000/rs6000-cpus.def
  7b860836fdc33cdfdd29f6348a553096  gcc/config/rs6000/rs6000-d.cc
  1ac6ae1e7d6d83d76667769f7166b9a7  gcc/config/rs6000/rs6000-d.h
  b1bbe3e57fef362260e8c8ccae80c4ba  gcc/config/rs6000/rs6000-gen-builtins.cc
--- 5254,5263 ----
  63ccc96ff2cef948c080eac4455d02b1  gcc/config/rs6000/rbtree.cc
  8ece9ca8167f5056fa411488a97c6131  gcc/config/rs6000/rbtree.h
  5a8a620d69be5ade28e15be87ec36b9a  gcc/config/rs6000/rs6000-builtin.cc
! 54b2f5abbb368e1596fd95a26bf043da  gcc/config/rs6000/rs6000-builtins.def
  bb710aa9f6e98d46357a2a10104dda23  gcc/config/rs6000/rs6000-c.cc
  f9e94bf7a9305993de9ddd700311aaaa  gcc/config/rs6000/rs6000-call.cc
! 52e2359f2b2a12d4d3f78e6f22da4e2c  gcc/config/rs6000/rs6000-cpus.def
  7b860836fdc33cdfdd29f6348a553096  gcc/config/rs6000/rs6000-d.cc
  1ac6ae1e7d6d83d76667769f7166b9a7  gcc/config/rs6000/rs6000-d.h
  b1bbe3e57fef362260e8c8ccae80c4ba  gcc/config/rs6000/rs6000-gen-builtins.cc
*************** c5022a5818a013ca208704a71fbd6d48  gcc/co
*** 5263,5269 ****
  cd5e92a42bcde77a84b9fbe9e0a3238b  gcc/config/rs6000/rs6000-logue.cc
  108998dcf0201ccd3e147d71251ca9f6  gcc/config/rs6000/rs6000-modes.def
  e6f2820356a7ee18c353376ab3490fb6  gcc/config/rs6000/rs6000-opts.h
! 6022d8f1134bcaa87e5c625e70285a24  gcc/config/rs6000/rs6000-overload.def
  857d6101dc080e798b79af7bdbacfa9d  gcc/config/rs6000/rs6000-p8swap.cc
  ed259dbc10dcc21110d2d0d8ddde7497  gcc/config/rs6000/rs6000-passes.def
  384645a6c72587ac7501915a0c737e64  gcc/config/rs6000/rs6000-pcrel-opt.cc
--- 5266,5272 ----
  cd5e92a42bcde77a84b9fbe9e0a3238b  gcc/config/rs6000/rs6000-logue.cc
  108998dcf0201ccd3e147d71251ca9f6  gcc/config/rs6000/rs6000-modes.def
  e6f2820356a7ee18c353376ab3490fb6  gcc/config/rs6000/rs6000-opts.h
! 59e66713bc58dd30d84f7e1a407c892b  gcc/config/rs6000/rs6000-overload.def
  857d6101dc080e798b79af7bdbacfa9d  gcc/config/rs6000/rs6000-p8swap.cc
  ed259dbc10dcc21110d2d0d8ddde7497  gcc/config/rs6000/rs6000-passes.def
  384645a6c72587ac7501915a0c737e64  gcc/config/rs6000/rs6000-pcrel-opt.cc
*************** ed259dbc10dcc21110d2d0d8ddde7497  gcc/co
*** 5271,5281 ****
  e6d989b64b588e3c16ea579031fed5ab  gcc/config/rs6000/rs6000-string.cc
  835f22c956cc4deb83970ee9a9b5b79b  gcc/config/rs6000/rs6000-tables.opt
  ce8de9a27f36b759a69194616c02eb38  gcc/config/rs6000/rs6000-tables.opt.urls
! 280c604aea23cb28dc9418288135b892  gcc/config/rs6000/rs6000.cc
! 4517b5e939c3d673f16baceb4e1a371a  gcc/config/rs6000/rs6000.h
  8fab818cce107dc89e5776dc2ba74949  gcc/config/rs6000/rs6000.md
! e407423336f12658b509205c3e8f7130  gcc/config/rs6000/rs6000.opt
! 80708ca71755b0d8d354f113f0617617  gcc/config/rs6000/rs6000.opt.urls
  89d4cadf8216efa86b72204e660cc4b0  gcc/config/rs6000/rs64.md
  d57d0eb0a8e2193f5cef2aaf1ad6d722  gcc/config/rs6000/rtems.h
  35eccfb56f965c2de296ac00355253e0  gcc/config/rs6000/secureplt.h
--- 5274,5284 ----
  e6d989b64b588e3c16ea579031fed5ab  gcc/config/rs6000/rs6000-string.cc
  835f22c956cc4deb83970ee9a9b5b79b  gcc/config/rs6000/rs6000-tables.opt
  ce8de9a27f36b759a69194616c02eb38  gcc/config/rs6000/rs6000-tables.opt.urls
! c5cc8df4b322cb11842689a577b1d092  gcc/config/rs6000/rs6000.cc
! a4bc5213cd13087b56018fecabf1d735  gcc/config/rs6000/rs6000.h
  8fab818cce107dc89e5776dc2ba74949  gcc/config/rs6000/rs6000.md
! e9eda0c22b5fe43eacbc84048e8c92b0  gcc/config/rs6000/rs6000.opt
! ffc3950548b9645aae429cfff87c63f8  gcc/config/rs6000/rs6000.opt.urls
  89d4cadf8216efa86b72204e660cc4b0  gcc/config/rs6000/rs64.md
  d57d0eb0a8e2193f5cef2aaf1ad6d722  gcc/config/rs6000/rtems.h
  35eccfb56f965c2de296ac00355253e0  gcc/config/rs6000/secureplt.h
*************** c7cc18c3c6e80f769c4e27296c120108  gcc/co
*** 5348,5392 ****
  93969dae64b2f8ab18f3516a4bd24df2  gcc/config/s390/2084.md
  d1ec3fe7ea1ffbba709fcaf32aea2477  gcc/config/s390/2097.md
  6bf6a0c01abab02e1cb9cc0da48375ba  gcc/config/s390/2817.md
! 5c0ff3e449c0e7dc3fb3feb5f9dcd1ae  gcc/config/s390/2827.md
! 321c92d5ec0a46cb781faef7e80e1990  gcc/config/s390/2964.md
! 438db9bfd571192a5960c88986d469d6  gcc/config/s390/3906.md
! 4af2cdfb4d840e6ab6d623421de4bc22  gcc/config/s390/3931.md
! c4c00856a08c0d60f2bc37a7e8131d16  gcc/config/s390/8561.md
! 6c30e97f8b0b77c0e104670b81d73aa6  gcc/config/s390/9175.md
! f1d87cfca879544bdb5765380479af90  gcc/config/s390/constraints.md
! a4408e7d5170553dc429758d86c1d771  gcc/config/s390/driver-native.cc
  82325d9b30c7bd62ba24065c4795d4e5  gcc/config/s390/htmintrin.h
! 281c1f3b75b0ccba5ed2e9e47c6bb328  gcc/config/s390/htmxlintrin.h
! b70b8b7baff6c1f7de2c41aea73084dc  gcc/config/s390/linux.h
! 035edaac81716ee8e29b1f33196c2ac8  gcc/config/s390/predicates.md
  c5b1f29cc81c356a956641b682c1de68  gcc/config/s390/s390-builtin-types.def
! af439abfd32411e9b66d4252868c7293  gcc/config/s390/s390-builtins.def
  420cb76d14f417d20e52b06bd071723e  gcc/config/s390/s390-builtins.h
! 697142a02e00f34468d3a5efd3212b93  gcc/config/s390/s390-c.cc
! 2bc894ab0e0a48302ed8c86a0121ce7e  gcc/config/s390/s390-d.cc
  018d83fc197f2be8955c0b9c85f604d3  gcc/config/s390/s390-d.h
  ea440bcad8a276afecfcff0ce6aae6fe  gcc/config/s390/s390-modes.def
  14c40f85d99aad740c052f55703baf70  gcc/config/s390/s390-opts.h
  aa396b24681954cbcd0cd64bf19d469c  gcc/config/s390/s390-passes.def
  4a9d0190b77f29fbb14fa9706732f297  gcc/config/s390/s390-protos.h
! 29c1637ea8d0fc1f3065a75262ec1eac  gcc/config/s390/s390.cc
! ae1d48d5851707124525babf8404d97f  gcc/config/s390/s390.h
! 6a3bb969660b1bffc823ebb0a006fb8d  gcc/config/s390/s390.md
! ae1754efd7785ad08c6cc930dd08c7ae  gcc/config/s390/s390.opt
! 90a97a731513f3119bb12e022497e9ab  gcc/config/s390/s390.opt.urls
  07efe01a921b4fb261d6e59abf21a268  gcc/config/s390/s390intrin.h
- aa64c0eb4310add8b8e0d1bba0537540  gcc/config/s390/s390x.h
  8e01d4569b0bce9d89ed5f77e09f07f4  gcc/config/s390/subst.md
! 551847ee4c38fa1a7e95fd93cdb32f17  gcc/config/s390/t-linux64
  16ce1fc97d4445d3e77bc0f8be121c6a  gcc/config/s390/t-s390
! 1a98dd23822e07fe6f355626f930b7c3  gcc/config/s390/tpf.h
  3c4521f48b40967fc37e74e960257cb8  gcc/config/s390/tpf.md
  f5e56d5ff903f46152f37df8bef42eb8  gcc/config/s390/tpf.opt
  7f0f09b66533c13922e5fc6da2950d60  gcc/config/s390/tpf.opt.urls
  6e57eb27fae922ae85136ef1822dd1c6  gcc/config/s390/vecintrin.h
! ac2fbb945245925177ec51f89c3b712c  gcc/config/s390/vector.md
! 751941c51673f19ecce32d1d460e0161  gcc/config/s390/vx-builtins.md
  7813da5eac25ac16f589b0319ad43386  gcc/config/s390/x-native
  2a15b2cbd3c0499a0d44908df3debdd6  gcc/config/sh/constraints.md
  376ad2c04eae328088f98c29c146e5a1  gcc/config/sh/divcost-analysis
--- 5351,5394 ----
  93969dae64b2f8ab18f3516a4bd24df2  gcc/config/s390/2084.md
  d1ec3fe7ea1ffbba709fcaf32aea2477  gcc/config/s390/2097.md
  6bf6a0c01abab02e1cb9cc0da48375ba  gcc/config/s390/2817.md
! 665b0d630bc6928bbbade89a3fcf69e4  gcc/config/s390/2827.md
! 691ae39e37cafc7cf903acd493ac6b00  gcc/config/s390/2964.md
! 8c8ba7cdb3ae873076863999cac07e5b  gcc/config/s390/3906.md
! 2b52ced3bf9bf5a68c3fc963fb25e3b0  gcc/config/s390/3931.md
! 0a1378600d656f0826742be98ff022af  gcc/config/s390/8561.md
! dfe9c3a25373c32a4a7298bc4bb5b315  gcc/config/s390/9175.md
! 8c76b092b2ba34a0e01a6b15440ac2b9  gcc/config/s390/constraints.md
! b88693242a20e2c9b57bbc9515f88cc6  gcc/config/s390/driver-native.cc
  82325d9b30c7bd62ba24065c4795d4e5  gcc/config/s390/htmintrin.h
! 8489eb7af070e936e55eec7abb57b36c  gcc/config/s390/htmxlintrin.h
! d85404b620912d3c93438aeed79a0ba5  gcc/config/s390/linux.h
! f66b1c56dde70972b0b65cda4f538fc9  gcc/config/s390/predicates.md
  c5b1f29cc81c356a956641b682c1de68  gcc/config/s390/s390-builtin-types.def
! d23c34b7a0648c30916cb9a7a38de9c1  gcc/config/s390/s390-builtins.def
  420cb76d14f417d20e52b06bd071723e  gcc/config/s390/s390-builtins.h
! 9f30a32271e18d259b17251f9a698b17  gcc/config/s390/s390-c.cc
! 04f7cf87c56b132d26a3f6d3b81e8f56  gcc/config/s390/s390-d.cc
  018d83fc197f2be8955c0b9c85f604d3  gcc/config/s390/s390-d.h
  ea440bcad8a276afecfcff0ce6aae6fe  gcc/config/s390/s390-modes.def
  14c40f85d99aad740c052f55703baf70  gcc/config/s390/s390-opts.h
  aa396b24681954cbcd0cd64bf19d469c  gcc/config/s390/s390-passes.def
  4a9d0190b77f29fbb14fa9706732f297  gcc/config/s390/s390-protos.h
! defeb18fa9c7b3abed372a659ad09383  gcc/config/s390/s390.cc
! f508d5a165d6ee82cceb4134e86ec04d  gcc/config/s390/s390.h
! 45ce8b5d3f3cf2253762868a5fced640  gcc/config/s390/s390.md
! d9a39d0121b211e4c06d67f829e1280a  gcc/config/s390/s390.opt
! d666710167ed4cebc6dc7b6cb8ee33b4  gcc/config/s390/s390.opt.urls
  07efe01a921b4fb261d6e59abf21a268  gcc/config/s390/s390intrin.h
  8e01d4569b0bce9d89ed5f77e09f07f4  gcc/config/s390/subst.md
! 88ce950c1e2781497caec024ca5b587e  gcc/config/s390/t-linux64
  16ce1fc97d4445d3e77bc0f8be121c6a  gcc/config/s390/t-s390
! 3dd108f93ead383c355c3418b6c4d318  gcc/config/s390/tpf.h
  3c4521f48b40967fc37e74e960257cb8  gcc/config/s390/tpf.md
  f5e56d5ff903f46152f37df8bef42eb8  gcc/config/s390/tpf.opt
  7f0f09b66533c13922e5fc6da2950d60  gcc/config/s390/tpf.opt.urls
  6e57eb27fae922ae85136ef1822dd1c6  gcc/config/s390/vecintrin.h
! ac5fd9f8eb879d7580b66288b7d530b7  gcc/config/s390/vector.md
! 05c9ccf5936a2e88d2448d6b343a09f3  gcc/config/s390/vx-builtins.md
  7813da5eac25ac16f589b0319ad43386  gcc/config/s390/x-native
  2a15b2cbd3c0499a0d44908df3debdd6  gcc/config/sh/constraints.md
  376ad2c04eae328088f98c29c146e5a1  gcc/config/sh/divcost-analysis
*************** c08812561648d9be8b2c465101f02f55  gcc/co
*** 5471,5477 ****
  710bcf4b6ac9924f665a6ed578c037f2  gcc/config/sparc/sparc-passes.def
  24d69dfb87c13754d1f394397cf82632  gcc/config/sparc/sparc-protos.h
  7ed22cc6ae023ee2be061ca296b615c6  gcc/config/sparc/sparc.cc
! baabc77cf540cfecc78f116e0b744ebb  gcc/config/sparc/sparc.h
  baa4d437af36181c641fd909d270531a  gcc/config/sparc/sparc.md
  d35b9f07de59a46cdbdd2bfb5aefaa3e  gcc/config/sparc/sparc.opt
  7989b30c48125e3c3acf6b37e76bd44f  gcc/config/sparc/sparc.opt.urls
--- 5473,5479 ----
  710bcf4b6ac9924f665a6ed578c037f2  gcc/config/sparc/sparc-passes.def
  24d69dfb87c13754d1f394397cf82632  gcc/config/sparc/sparc-protos.h
  7ed22cc6ae023ee2be061ca296b615c6  gcc/config/sparc/sparc.cc
! 24aa1fc935c7db9e2b56c45a55fe530d  gcc/config/sparc/sparc.h
  baa4d437af36181c641fd909d270531a  gcc/config/sparc/sparc.md
  d35b9f07de59a46cdbdd2bfb5aefaa3e  gcc/config/sparc/sparc.opt
  7989b30c48125e3c3acf6b37e76bd44f  gcc/config/sparc/sparc.opt.urls
*************** bd2dbcd29207d6720a2bf7fefa19a120  gcc/co
*** 5567,5573 ****
  d6cdac7858d08b8cead2d28a66661275  gcc/config/visium/visium-passes.def
  f8a0009eac88f5ab515601ae54b55cb1  gcc/config/visium/visium-protos.h
  822831e7b5f292deaee34d44008ce23a  gcc/config/visium/visium.cc
! 87d260282d4260cca7578d8c2db8a946  gcc/config/visium/visium.h
  104eb550ddf9cc976851bd4d1e3e9d7d  gcc/config/visium/visium.md
  3cff36cc3705e28c0fe358569d10ed56  gcc/config/visium/visium.opt
  d308974ee76c98f9c1e01fa5de9567c8  gcc/config/visium/visium.opt.urls
--- 5569,5575 ----
  d6cdac7858d08b8cead2d28a66661275  gcc/config/visium/visium-passes.def
  f8a0009eac88f5ab515601ae54b55cb1  gcc/config/visium/visium-protos.h
  822831e7b5f292deaee34d44008ce23a  gcc/config/visium/visium.cc
! 437ad9adefa9dee1ea7af3a861ef7777  gcc/config/visium/visium.h
  104eb550ddf9cc976851bd4d1e3e9d7d  gcc/config/visium/visium.md
  3cff36cc3705e28c0fe358569d10ed56  gcc/config/visium/visium.opt
  d308974ee76c98f9c1e01fa5de9567c8  gcc/config/visium/visium.opt.urls
*************** f5b80feecd86600afb44a66247dd6fae  gcc/co
*** 5583,5589 ****
  e98fe0b0d84ec790b9f655d1674e58dc  gcc/config/vms/vms-protos.h
  f2caf80293ce10d06176ef71e44c8b0c  gcc/config/vms/vms-stdint.h
  bcd52e0cbdc007d5c9bb4c5cd003d199  gcc/config/vms/vms.cc
! 76eb950dc973b4807d828a286ecab3ea  gcc/config/vms/vms.h
  14a81459406b3ea6d3e25c68905a2295  gcc/config/vms/vms.opt
  4cc4a480573474816840755220793eea  gcc/config/vms/vms.opt.urls
  0131ec30118dce0e850f95bd56d74733  gcc/config/vms/x-vms
--- 5585,5591 ----
  e98fe0b0d84ec790b9f655d1674e58dc  gcc/config/vms/vms-protos.h
  f2caf80293ce10d06176ef71e44c8b0c  gcc/config/vms/vms-stdint.h
  bcd52e0cbdc007d5c9bb4c5cd003d199  gcc/config/vms/vms.cc
! 623b6ddd4c9ee244ae9eda0585e8e9bf  gcc/config/vms/vms.h
  14a81459406b3ea6d3e25c68905a2295  gcc/config/vms/vms.opt
  4cc4a480573474816840755220793eea  gcc/config/vms/vms.opt.urls
  0131ec30118dce0e850f95bd56d74733  gcc/config/vms/x-vms
*************** eabefa7848e30cb14ae3473ccb4f1c5e  gcc/co
*** 5639,5646 ****
  ab92d7ead48857ad8dfb2fbadb7845ab  gcc/config/xtensa/xtensa.md
  411cab921f0a965cbb5411dc8b28fc82  gcc/config/xtensa/xtensa.opt
  107b37908c9eb8a26c5b7a6074ccb338  gcc/config/xtensa/xtensa.opt.urls
! a500b52250eb387411316eb7131089fe  gcc/configure
! 9e8e50ccb30791032c6f1ed3e6ffecce  gcc/configure.ac
  a2bfe87830136c2d55b591b943cecd3f  gcc/configure.tgt
  8a46839a73059f70ef105be9706c2554  gcc/context.cc
  08023c1005def168a8b675813b95d9f4  gcc/context.h
--- 5641,5648 ----
  ab92d7ead48857ad8dfb2fbadb7845ab  gcc/config/xtensa/xtensa.md
  411cab921f0a965cbb5411dc8b28fc82  gcc/config/xtensa/xtensa.opt
  107b37908c9eb8a26c5b7a6074ccb338  gcc/config/xtensa/xtensa.opt.urls
! 96fe59b1bc0876facfd88b2245228623  gcc/configure
! c0c8a12aa61a22c96dd082eaffc3144e  gcc/configure.ac
  a2bfe87830136c2d55b591b943cecd3f  gcc/configure.tgt
  8a46839a73059f70ef105be9706c2554  gcc/context.cc
  08023c1005def168a8b675813b95d9f4  gcc/context.h
*************** c5ad0142a191862e3e81ecd3573754b3  gcc/co
*** 5651,5657 ****
  a424415c72a544d25e6518e1cf699300  gcc/coroutine-passes.cc
  11fc0e33834de003c7fdd80427589041  gcc/coverage.cc
  d27317cee558d7c78afbdb6529e36649  gcc/coverage.h
! 9adb883765e03f1f78c573c2a32bb897  gcc/cp/ChangeLog
  70c059f2b75a2fc1bb95a526b21b8cd7  gcc/cp/ChangeLog-1993
  7cbd106e10a0ba7c052bee3fe20671c2  gcc/cp/ChangeLog-1994
  3b1e3ed23ad4363f75e6fd2fbb583dee  gcc/cp/ChangeLog-1995
--- 5653,5659 ----
  a424415c72a544d25e6518e1cf699300  gcc/coroutine-passes.cc
  11fc0e33834de003c7fdd80427589041  gcc/coverage.cc
  d27317cee558d7c78afbdb6529e36649  gcc/coverage.h
! 2ad492f22f05c20f03f596d65a433e60  gcc/cp/ChangeLog
  70c059f2b75a2fc1bb95a526b21b8cd7  gcc/cp/ChangeLog-1993
  7cbd106e10a0ba7c052bee3fe20671c2  gcc/cp/ChangeLog-1994
  3b1e3ed23ad4363f75e6fd2fbb583dee  gcc/cp/ChangeLog-1995
*************** eba8d8a1725223519fba5d4d69afd5c9  gcc/cp
*** 5706,5723 ****
  a2555a7340b152d673783c07a3d102bb  gcc/cp/cp-objcp-common.h
  ffdd05782c93c0567486bb7ed7eee65a  gcc/cp/cp-trait.def
  461c8f732438052ea1ab7eabb72f0604  gcc/cp/cp-tree.def
! cdf476ca9d7dcc9c6f4e9e46f415a4ae  gcc/cp/cp-tree.h
  13d136a72a2aff80be380103d1c27ed5  gcc/cp/cp-ubsan.cc
  9f3892d82a5fde05b0ab9fd164ad7177  gcc/cp/cvt.cc
  f067718cf3d629084d8347c4e017afd4  gcc/cp/cxx-pretty-print.cc
  1d04eec9859d91686ca501e9221f30ac  gcc/cp/cxx-pretty-print.h
  82a41d873e1c90067158c89e6c1bd4bb  gcc/cp/cxxapi-data.csv
! 4fe65e80a8e5c10399796813507c6c00  gcc/cp/decl.cc
  6b0c9433f7d3f129a44b59d54babb4eb  gcc/cp/decl.h
  f7fd6f8b2943baf2a508fd07e569c802  gcc/cp/decl2.cc
  12ccd5244973d74a0536adf58261b416  gcc/cp/dump.cc
  e5cd674ba89cede50da369b84db82527  gcc/cp/error.cc
! 59d3d272a504a462c1f7081637e7f3e5  gcc/cp/except.cc
  f4c33376dcbcbb2b49c9a11ec2911ad9  gcc/cp/expr.cc
  447ddbe59eba62b9a389b9ba11701cfc  gcc/cp/friend.cc
  312df0090f34c36193263da66b5ecbd7  gcc/cp/g++spec.cc
--- 5708,5725 ----
  a2555a7340b152d673783c07a3d102bb  gcc/cp/cp-objcp-common.h
  ffdd05782c93c0567486bb7ed7eee65a  gcc/cp/cp-trait.def
  461c8f732438052ea1ab7eabb72f0604  gcc/cp/cp-tree.def
! 49fcc9a279c443bdea0cd801e96ca7bd  gcc/cp/cp-tree.h
  13d136a72a2aff80be380103d1c27ed5  gcc/cp/cp-ubsan.cc
  9f3892d82a5fde05b0ab9fd164ad7177  gcc/cp/cvt.cc
  f067718cf3d629084d8347c4e017afd4  gcc/cp/cxx-pretty-print.cc
  1d04eec9859d91686ca501e9221f30ac  gcc/cp/cxx-pretty-print.h
  82a41d873e1c90067158c89e6c1bd4bb  gcc/cp/cxxapi-data.csv
! eaf6a199c4c228700e3fb0575e87019b  gcc/cp/decl.cc
  6b0c9433f7d3f129a44b59d54babb4eb  gcc/cp/decl.h
  f7fd6f8b2943baf2a508fd07e569c802  gcc/cp/decl2.cc
  12ccd5244973d74a0536adf58261b416  gcc/cp/dump.cc
  e5cd674ba89cede50da369b84db82527  gcc/cp/error.cc
! 1e7989dfae00ab31c61944201f5e19c7  gcc/cp/except.cc
  f4c33376dcbcbb2b49c9a11ec2911ad9  gcc/cp/expr.cc
  447ddbe59eba62b9a389b9ba11701cfc  gcc/cp/friend.cc
  312df0090f34c36193263da66b5ecbd7  gcc/cp/g++spec.cc
*************** e4ccdd9cbe95dde4cce27394a7613dd9  gcc/cp
*** 5734,5752 ****
  54609938d396496c7c5bf3f4cbfddaec  gcc/cp/metafns.gperf
  04fe5bec0bf79fcb3680aec9913ebc29  gcc/cp/metafns.h
  0ca1fb4de15164af98fd16eefefa86de  gcc/cp/method.cc
! 0ec0e2eb8b9559fc2042971a8083931b  gcc/cp/module.cc
  36a03818ce45c595866cc280493ac112  gcc/cp/name-lookup.cc
  8448a5bd06f68228b8367e5fcdf57f98  gcc/cp/name-lookup.h
  54cd670407c3fc4f1778f1561e89ae99  gcc/cp/operators.def
  9efebf39da56d681d4405dfb9e55e3f5  gcc/cp/optimize.cc
! 63b3fc2981b655a151a01f7e210e1f67  gcc/cp/parser.cc
  fbc41b26ea2a336d3636c9d9c565d845  gcc/cp/parser.h
! 5728ff8cec6ace01ab00875ddc896986  gcc/cp/pt.cc
  25322928eaff39cf167372554c639e02  gcc/cp/ptree.cc
! 9dc0572dc85db1afeac7e0a8b58130d3  gcc/cp/reflect.cc
! 6ae3f1ff3ba804579da14445501f9181  gcc/cp/rtti.cc
  e6a800b8f2f93cd8ed05ee026f824eca  gcc/cp/search.cc
! 964718bf537b7b8307674808f38409ce  gcc/cp/semantics.cc
  64c36b2ea66c9f8f477b19d24e06a2cb  gcc/cp/std-name-hint.gperf
  15cc409f13a8952feb90e94d99ecefa2  gcc/cp/std-name-hint.h
  025b52f0214eacf0af0a8e82fdd29349  gcc/cp/tree.cc
--- 5736,5754 ----
  54609938d396496c7c5bf3f4cbfddaec  gcc/cp/metafns.gperf
  04fe5bec0bf79fcb3680aec9913ebc29  gcc/cp/metafns.h
  0ca1fb4de15164af98fd16eefefa86de  gcc/cp/method.cc
! b0a7ffd10e472403f69ba8cfcc548b3a  gcc/cp/module.cc
  36a03818ce45c595866cc280493ac112  gcc/cp/name-lookup.cc
  8448a5bd06f68228b8367e5fcdf57f98  gcc/cp/name-lookup.h
  54cd670407c3fc4f1778f1561e89ae99  gcc/cp/operators.def
  9efebf39da56d681d4405dfb9e55e3f5  gcc/cp/optimize.cc
! 6a1279fbf114de35c674ab4991264397  gcc/cp/parser.cc
  fbc41b26ea2a336d3636c9d9c565d845  gcc/cp/parser.h
! 36e162ab0a1ef1908cbd8ca613b41e2a  gcc/cp/pt.cc
  25322928eaff39cf167372554c639e02  gcc/cp/ptree.cc
! 814a85a75acd58625e24f47397fd0add  gcc/cp/reflect.cc
! dca106058e0bd214fb0efec9d4916ee7  gcc/cp/rtti.cc
  e6a800b8f2f93cd8ed05ee026f824eca  gcc/cp/search.cc
! 917004c32b3fee2af144e3dc23e14396  gcc/cp/semantics.cc
  64c36b2ea66c9f8f477b19d24e06a2cb  gcc/cp/std-name-hint.gperf
  15cc409f13a8952feb90e94d99ecefa2  gcc/cp/std-name-hint.h
  025b52f0214eacf0af0a8e82fdd29349  gcc/cp/tree.cc
*************** f8acce2d62b5de5f6c73b511ce3dcf6e  gcc/cp
*** 5762,5769 ****
  bb146ea57855f57a97f23f7c748b05ed  gcc/crc-verification.cc
  b7bf54d1a28938f620902d5d360e7000  gcc/crc-verification.h
  103047164a990d0d268652883bb9732c  gcc/cse.cc
! e22531d9f1edf671feb39e14295a0074  gcc/cselib.cc
! a992c36510202d05f89b17b2c68d4694  gcc/cselib.h
  1ded054093de910d9786c62bc4fe8cc6  gcc/cstamp-h.in
  01d72dc5de712693e920328b1ea99442  gcc/ctfc.cc
  c5ba51b73741e927bf80e7539e3338e0  gcc/ctfc.h
--- 5764,5771 ----
  bb146ea57855f57a97f23f7c748b05ed  gcc/crc-verification.cc
  b7bf54d1a28938f620902d5d360e7000  gcc/crc-verification.h
  103047164a990d0d268652883bb9732c  gcc/cse.cc
! d5f0bd4db30aeac6cae9b4ccf96fe181  gcc/cselib.cc
! 2bf8056615c55c725c85f6c4b734b401  gcc/cselib.h
  1ded054093de910d9786c62bc4fe8cc6  gcc/cstamp-h.in
  01d72dc5de712693e920328b1ea99442  gcc/ctfc.cc
  c5ba51b73741e927bf80e7539e3338e0  gcc/ctfc.h
*************** ee65c9e3e7c3fb1fd0128c23f4130e51  gcc/do
*** 6136,6142 ****
  301ed7e567732d1f0d5899a624068bdd  gcc/doc/cppinternals.texi
  421cc3b7d98386e0eb0abba4242dd54a  gcc/doc/cppopts.texi
  d8b2becdc7d9c570f256e19e1b1ac4f1  gcc/doc/cppwarnopts.texi
! 2aa9ce456b80b6cabb901f9d93b3e786  gcc/doc/extend.texi
  d4f889c42d5400f1d26328f8b49db9ba  gcc/doc/fragments.texi
  7fb1e4199b2e70228fda69b8065d83c4  gcc/doc/frontends.texi
  f0e190ef0119097dac4c73c2f9e34d9e  gcc/doc/gcc.texi
--- 6138,6144 ----
  301ed7e567732d1f0d5899a624068bdd  gcc/doc/cppinternals.texi
  421cc3b7d98386e0eb0abba4242dd54a  gcc/doc/cppopts.texi
  d8b2becdc7d9c570f256e19e1b1ac4f1  gcc/doc/cppwarnopts.texi
! 1bc02fc872a3bf03a9de46d76f8b7951  gcc/doc/extend.texi
  d4f889c42d5400f1d26328f8b49db9ba  gcc/doc/fragments.texi
  7fb1e4199b2e70228fda69b8065d83c4  gcc/doc/frontends.texi
  f0e190ef0119097dac4c73c2f9e34d9e  gcc/doc/gcc.texi
*************** c84639641b29cd79e61a0fe226b0bca7  gcc/do
*** 6159,6167 ****
  37d898a82683588b62cca104098ad182  gcc/doc/include/gcc-common.texi
  95c90bf85d3eab67f348ee3ce0bf4050  gcc/doc/include/gpl_v3.texi
  e9b8122841fbfbbc30fee8ed6613c399  gcc/doc/include/texinfo.tex
! b451bba01f9542a2041f2f54117bad61  gcc/doc/install.texi
  30a2209eee0a2bed76e2d9ff3bd646f2  gcc/doc/install.texi2html
! c1c201014bf6d5a218ddc2c60c25e86b  gcc/doc/invoke.texi
  dd9d4097ebfa9e936c41913343807268  gcc/doc/languages.texi
  46d2bbbd37002bb71569d0b1f27d7a5a  gcc/doc/libgcc.texi
  ef4f00c423089323edef1d3cff31a4a2  gcc/doc/libgdiagnostics/Makefile
--- 6161,6169 ----
  37d898a82683588b62cca104098ad182  gcc/doc/include/gcc-common.texi
  95c90bf85d3eab67f348ee3ce0bf4050  gcc/doc/include/gpl_v3.texi
  e9b8122841fbfbbc30fee8ed6613c399  gcc/doc/include/texinfo.tex
! b9c448ca1e683bd1266ff1f8ce25c0d7  gcc/doc/install.texi
  30a2209eee0a2bed76e2d9ff3bd646f2  gcc/doc/install.texi2html
! 4bb0d7daed811a7f109623e1030c106c  gcc/doc/invoke.texi
  dd9d4097ebfa9e936c41913343807268  gcc/doc/languages.texi
  46d2bbbd37002bb71569d0b1f27d7a5a  gcc/doc/libgcc.texi
  ef4f00c423089323edef1d3cff31a4a2  gcc/doc/libgdiagnostics/Makefile
*************** a0300f293e1294f68bbf43478b2f7e96  gcc/do
*** 6203,6209 ****
  ea1e82bfc6105050a63b50c8e40571c0  gcc/doc/objc.texi
  8b826afc7f71e67445cf33bbcd457ab5  gcc/doc/optinfo.texi
  3abb75ff788f5434702f351bf7a279c9  gcc/doc/options.texi
! a7f516c3979d392e9372c2369c2b589a  gcc/doc/params.texi
  fdecd23a17ae3f56f5e4f046f0bb157b  gcc/doc/passes.texi
  e54937e427a2584ac4045286c725fab1  gcc/doc/plugins.texi
  55ca097cff451ddbce4b20cdcbb9273e  gcc/doc/poly-int.texi
--- 6205,6211 ----
  ea1e82bfc6105050a63b50c8e40571c0  gcc/doc/objc.texi
  8b826afc7f71e67445cf33bbcd457ab5  gcc/doc/optinfo.texi
  3abb75ff788f5434702f351bf7a279c9  gcc/doc/options.texi
! 730a4646fd34bff5a31307c3490cd0c0  gcc/doc/params.texi
  fdecd23a17ae3f56f5e4f046f0bb157b  gcc/doc/passes.texi
  e54937e427a2584ac4045286c725fab1  gcc/doc/plugins.texi
  55ca097cff451ddbce4b20cdcbb9273e  gcc/doc/poly-int.texi
*************** b12261ad56bcabd07b4a1b739f271527  gcc/do
*** 6216,6223 ****
  cfaead4d134e741f630ea0e3726b6ac1  gcc/doc/sourcebuild.texi
  9b58fbc10917d12008925e09d91cab55  gcc/doc/specs.texi
  d2b53a62ec4e23a8e4cbe16d2843c100  gcc/doc/standards.texi
! e9ef6a5d84982e29281c8fc2332a7afd  gcc/doc/tm.texi
! c02e71a71ecbd22eefc762acaabfe590  gcc/doc/tm.texi.in
  8c9d03a450c358d77823a84f9c62ba4d  gcc/doc/tree-ssa.texi
  2d263928ebdba30d4e096adf01758e79  gcc/doc/trouble.texi
  83ea8ece47a3447f8da5fddd982c9d29  gcc/doc/ux.texi
--- 6218,6225 ----
  cfaead4d134e741f630ea0e3726b6ac1  gcc/doc/sourcebuild.texi
  9b58fbc10917d12008925e09d91cab55  gcc/doc/specs.texi
  d2b53a62ec4e23a8e4cbe16d2843c100  gcc/doc/standards.texi
! 921b2d264ab6d8ca790732e4bec7f807  gcc/doc/tm.texi
! 66b2d9c7b6b6961daa95e84be011fe20  gcc/doc/tm.texi.in
  8c9d03a450c358d77823a84f9c62ba4d  gcc/doc/tree-ssa.texi
  2d263928ebdba30d4e096adf01758e79  gcc/doc/trouble.texi
  83ea8ece47a3447f8da5fddd982c9d29  gcc/doc/ux.texi
*************** c84360f0ac80eeea4d03d024a7641faf  gcc/do
*** 6229,6235 ****
  4e9a3ec0c984881f528142b8fc15c6f0  gcc/domwalk.h
  9e99a04f5cafee5d7670e43868de46be  gcc/double-int.cc
  f5408da3ae295306d302b711e20589dd  gcc/double-int.h
! 3e504c158ca95274231f719168303b88  gcc/dse.cc
  2d5aa8f576bf21bd67a37a9ad393918e  gcc/dump-context.h
  5bd0366d25235123df3e7bf87b005dfc  gcc/dumpfile.cc
  92a769cfebe5826f371d353067aa45fa  gcc/dumpfile.h
--- 6231,6237 ----
  4e9a3ec0c984881f528142b8fc15c6f0  gcc/domwalk.h
  9e99a04f5cafee5d7670e43868de46be  gcc/double-int.cc
  f5408da3ae295306d302b711e20589dd  gcc/double-int.h
! 98cb313308f17d6986d66935fa485fbb  gcc/dse.cc
  2d5aa8f576bf21bd67a37a9ad393918e  gcc/dump-context.h
  5bd0366d25235123df3e7bf87b005dfc  gcc/dumpfile.cc
  92a769cfebe5826f371d353067aa45fa  gcc/dumpfile.h
*************** d61f76c4b55102abe0d6908ab60489e7  gcc/ex
*** 6255,6263 ****
  2af24b814afb179d911a33733d593eba  gcc/exec-tool.in
  218b6e1049518cb5651dfbf9f18e27a8  gcc/explow.cc
  e0ebf672695dc08e5686ca42b54e3a46  gcc/explow.h
! 0e0b224e5ea82e4e2f9c34acdb018201  gcc/expmed.cc
  2431f17e1f416ef0b9c38b1b975942a4  gcc/expmed.h
! c0cd01c88379d9eb383d2155f82a2017  gcc/expr.cc
  ca4a759ee689223d3551cae34e997224  gcc/expr.h
  4b31ce401d814250b89eb315bb94bdd1  gcc/ext-dce.cc
  8ca3dbbcb4ffeb7bd2c8f46140869732  gcc/fibonacci_heap.cc
--- 6257,6265 ----
  2af24b814afb179d911a33733d593eba  gcc/exec-tool.in
  218b6e1049518cb5651dfbf9f18e27a8  gcc/explow.cc
  e0ebf672695dc08e5686ca42b54e3a46  gcc/explow.h
! 3f7f03e64862e525df5c51b4e410284a  gcc/expmed.cc
  2431f17e1f416ef0b9c38b1b975942a4  gcc/expmed.h
! f224c00734129edae6b6277bd961c755  gcc/expr.cc
  ca4a759ee689223d3551cae34e997224  gcc/expr.h
  4b31ce401d814250b89eb315bb94bdd1  gcc/ext-dce.cc
  8ca3dbbcb4ffeb7bd2c8f46140869732  gcc/fibonacci_heap.cc
*************** b4a18c8d0dacb99b95b772e94f976754  gcc/fi
*** 6273,6282 ****
  edda8d107262aa360baaeafc0bd0d4a1  gcc/flags.h
  f8396c35f56710f2dd577b8f6644d380  gcc/fold-const-call.cc
  0b4405bca4b699887c6a47e1d25b216c  gcc/fold-const-call.h
! 9a9b729b3a636e9299c4b91999f48ca0  gcc/fold-const.cc
! f1299c5a4233c844c86d68eb57ccc636  gcc/fold-const.h
! 503251519661f1768b70d9b424bdc12b  gcc/fold-mem-offsets.cc
! 891e7615626d63e9937d2c585655c526  gcc/fortran/ChangeLog
  083c53fadafdcf3be46713838a51e36c  gcc/fortran/ChangeLog-2002
  2a4ca18d211fb2603139354fd16398ed  gcc/fortran/ChangeLog-2003
  e7462609ebd0dd7c874e0fc00e2833aa  gcc/fortran/ChangeLog-2004
--- 6275,6284 ----
  edda8d107262aa360baaeafc0bd0d4a1  gcc/flags.h
  f8396c35f56710f2dd577b8f6644d380  gcc/fold-const-call.cc
  0b4405bca4b699887c6a47e1d25b216c  gcc/fold-const-call.h
! c8bf9fa83c6b8a1d3792c1a6cf73dba1  gcc/fold-const.cc
! 1c4ecad775c097fbffaf36b9320cf1db  gcc/fold-const.h
! 87bf3dcaf0fa670e88b5693e7ece16d6  gcc/fold-mem-offsets.cc
! ee96aee1b916e8073ce04a13e1511278  gcc/fortran/ChangeLog
  083c53fadafdcf3be46713838a51e36c  gcc/fortran/ChangeLog-2002
  2a4ca18d211fb2603139354fd16398ed  gcc/fortran/ChangeLog-2003
  e7462609ebd0dd7c874e0fc00e2833aa  gcc/fortran/ChangeLog-2004
*************** bcb129d4d143e6ec42b4ddec1fea30b8  gcc/fo
*** 6308,6314 ****
  dd3d4373e33e0a14abdf26814a44662b  gcc/fortran/array.cc
  bc40e87bca719f86583a020eff2d6a73  gcc/fortran/bbt.cc
  fc47d1d04a5d9c431ab592e145ac3a00  gcc/fortran/check.cc
! 6b442bef9d26ed0d7bcf02b1ab728f8e  gcc/fortran/class.cc
  298c8e9139027305d0c5530e148f0c82  gcc/fortran/coarray.cc
  ee80d28f835ba80db395760139037e11  gcc/fortran/config-lang.in
  8a0026117bea2831adebb2edc422fb55  gcc/fortran/constructor.cc
--- 6310,6316 ----
  dd3d4373e33e0a14abdf26814a44662b  gcc/fortran/array.cc
  bc40e87bca719f86583a020eff2d6a73  gcc/fortran/bbt.cc
  fc47d1d04a5d9c431ab592e145ac3a00  gcc/fortran/check.cc
! 8b07ee9457ddf40d43a1fc7d91b21e68  gcc/fortran/class.cc
  298c8e9139027305d0c5530e148f0c82  gcc/fortran/coarray.cc
  ee80d28f835ba80db395760139037e11  gcc/fortran/config-lang.in
  8a0026117bea2831adebb2edc422fb55  gcc/fortran/constructor.cc
*************** ac7321680382b23989a6637e02dfb80e  gcc/fo
*** 6323,6329 ****
  b66b99368e3cd17573ae64a38e36c1de  gcc/fortran/dependency.h
  5fc94c471cdb783f08d648c823689b18  gcc/fortran/dump-parse-tree.cc
  65aa25da09bdeee948cdad39cfc4d960  gcc/fortran/error.cc
! 40d808f8a28c16bfb9ab2aaa5d36b72d  gcc/fortran/expr.cc
  c0284e23f561f80398df460d7c477675  gcc/fortran/f95-lang.cc
  aabeb93bbe7fb46864a337bef3c2ade5  gcc/fortran/frontend-passes.cc
  c85c9309a4274609c6ff6466621c90f6  gcc/fortran/gfc-diagnostic.def
--- 6325,6331 ----
  b66b99368e3cd17573ae64a38e36c1de  gcc/fortran/dependency.h
  5fc94c471cdb783f08d648c823689b18  gcc/fortran/dump-parse-tree.cc
  65aa25da09bdeee948cdad39cfc4d960  gcc/fortran/error.cc
! 7b1375ead84a436fc2b86395e1dfc0c9  gcc/fortran/expr.cc
  c0284e23f561f80398df460d7c477675  gcc/fortran/f95-lang.cc
  aabeb93bbe7fb46864a337bef3c2ade5  gcc/fortran/frontend-passes.cc
  c85c9309a4274609c6ff6466621c90f6  gcc/fortran/gfc-diagnostic.def
*************** afb07146daad7f36a59c52e053f6772f  gcc/fo
*** 6331,6361 ****
  1bd3a35eb1aaecbe34644ef712b04dd7  gcc/fortran/gfortran.h
  13d7dc211e7c02525ba3c435e6ea201b  gcc/fortran/gfortran.texi
  11194f3565a8c394b76bd5117830b0ae  gcc/fortran/gfortranspec.cc
! f7e292210a78addc2aa6af8409ece064  gcc/fortran/interface.cc
  170e16c1bee9d328fc1e32760604b336  gcc/fortran/intrinsic.cc
  d7ffa84de49936bfc22cdb2a7ef87800  gcc/fortran/intrinsic.h
! 5c41fec8827bcc0e1e524b99ce4bfd71  gcc/fortran/intrinsic.texi
  d1270efc97a26916a776b4a7c77118e7  gcc/fortran/invoke.texi
  939e229d42387144bbb73627a845a594  gcc/fortran/io.cc
  02af2e093ad4f92649a6370fa6dc3215  gcc/fortran/ioparm.def
! 1e9a62cdd76fcac49d91728090a8b2f6  gcc/fortran/iresolve.cc
  4983e51f5909bf7627062a5e3ace5455  gcc/fortran/iso-c-binding.def
  e5c0565c05cf7375c9978273f2e553e7  gcc/fortran/iso-fortran-env.def
  20a111338bfdbe210a5826e590844f81  gcc/fortran/lang-specs.h
  ab51c8a2ae0733888b4a71d477aa98a9  gcc/fortran/lang.opt
  54208069c9076f94d4a14191605630c0  gcc/fortran/lang.opt.urls
  c35102e7caaf40998fe2ead86d2716da  gcc/fortran/libgfortran.h
! e81a2e9754a8805bac11a3ecb1c666b5  gcc/fortran/match.cc
  0971e0098b3cb0240602494090ed164b  gcc/fortran/match.h
  bf54232c4c950ed772f4964c4f79629e  gcc/fortran/matchexp.cc
  915f6b30a8c22a5fea18690269a5a4a4  gcc/fortran/mathbuiltins.def
  9687294592a5ccef5d0b8254ab33816b  gcc/fortran/misc.cc
! ba4a819765499ce29e3070e1ff83ed7b  gcc/fortran/module.cc
  b98195ee75bf7d3e1ac8e01f6e4a6b51  gcc/fortran/openmp.cc
  7baca4fc0a6fcd712dcbccab22987c74  gcc/fortran/options.cc
  f96b91fecd5db62c95bc50a661965b6d  gcc/fortran/parse.cc
  c97a1f016de974126c688bb9c805f323  gcc/fortran/parse.h
! d8018f6b8422ec272ff0ef8a7bd1d39d  gcc/fortran/primary.cc
  689150cd7685ddf0cae6105fdac93f30  gcc/fortran/resolve.cc
  e23f6eefa51bb3b4caa3d75c0409cfcd  gcc/fortran/scanner.cc
  18963b3f6aacca960fd6aa72b429a9d2  gcc/fortran/scanner.h
--- 6333,6363 ----
  1bd3a35eb1aaecbe34644ef712b04dd7  gcc/fortran/gfortran.h
  13d7dc211e7c02525ba3c435e6ea201b  gcc/fortran/gfortran.texi
  11194f3565a8c394b76bd5117830b0ae  gcc/fortran/gfortranspec.cc
! c0f91b659da0dae8c527a63b19f8da14  gcc/fortran/interface.cc
  170e16c1bee9d328fc1e32760604b336  gcc/fortran/intrinsic.cc
  d7ffa84de49936bfc22cdb2a7ef87800  gcc/fortran/intrinsic.h
! 1a62f222e673a1f61193a0a19935b32f  gcc/fortran/intrinsic.texi
  d1270efc97a26916a776b4a7c77118e7  gcc/fortran/invoke.texi
  939e229d42387144bbb73627a845a594  gcc/fortran/io.cc
  02af2e093ad4f92649a6370fa6dc3215  gcc/fortran/ioparm.def
! b85c5c1f73d24c8492963a229c649c86  gcc/fortran/iresolve.cc
  4983e51f5909bf7627062a5e3ace5455  gcc/fortran/iso-c-binding.def
  e5c0565c05cf7375c9978273f2e553e7  gcc/fortran/iso-fortran-env.def
  20a111338bfdbe210a5826e590844f81  gcc/fortran/lang-specs.h
  ab51c8a2ae0733888b4a71d477aa98a9  gcc/fortran/lang.opt
  54208069c9076f94d4a14191605630c0  gcc/fortran/lang.opt.urls
  c35102e7caaf40998fe2ead86d2716da  gcc/fortran/libgfortran.h
! acdd137682996055ccebf55905f943f1  gcc/fortran/match.cc
  0971e0098b3cb0240602494090ed164b  gcc/fortran/match.h
  bf54232c4c950ed772f4964c4f79629e  gcc/fortran/matchexp.cc
  915f6b30a8c22a5fea18690269a5a4a4  gcc/fortran/mathbuiltins.def
  9687294592a5ccef5d0b8254ab33816b  gcc/fortran/misc.cc
! 8a51e738d75691ffd85751ee78595ffb  gcc/fortran/module.cc
  b98195ee75bf7d3e1ac8e01f6e4a6b51  gcc/fortran/openmp.cc
  7baca4fc0a6fcd712dcbccab22987c74  gcc/fortran/options.cc
  f96b91fecd5db62c95bc50a661965b6d  gcc/fortran/parse.cc
  c97a1f016de974126c688bb9c805f323  gcc/fortran/parse.h
! 652dece8c45124ac6ad49d39f2b67df1  gcc/fortran/primary.cc
  689150cd7685ddf0cae6105fdac93f30  gcc/fortran/resolve.cc
  e23f6eefa51bb3b4caa3d75c0409cfcd  gcc/fortran/scanner.cc
  18963b3f6aacca960fd6aa72b429a9d2  gcc/fortran/scanner.h
*************** e23f6eefa51bb3b4caa3d75c0409cfcd  gcc/fo
*** 6364,6394 ****
  7c0ce786abb30fa1b3dfd2c619faf5c3  gcc/fortran/symbol.cc
  4fa06f769be3f1b439a574ee842c82ca  gcc/fortran/target-memory.cc
  ea8837444e2a08a95a3ea747c94b8106  gcc/fortran/target-memory.h
! 7630b9b4f4c012b16fe9d6a393d38cde  gcc/fortran/trans-array.cc
  579b2b79e8e64c99cf7a8101c42ba519  gcc/fortran/trans-array.h
  5c567026f9fbc4fea9b59c22743687c4  gcc/fortran/trans-common.cc
! 98960d7450a15e1ecc9789bd0bde16a7  gcc/fortran/trans-const.cc
! 0d5cf4117521dba2aea9c8fd7ac67888  gcc/fortran/trans-const.h
! 8782ee1d8818c7d41be4239346279912  gcc/fortran/trans-decl.cc
! 5f0963ac6011b620478aae7c2bee3d40  gcc/fortran/trans-descriptor.cc
  e4ae8da739e5243d01975094cbbe90a3  gcc/fortran/trans-descriptor.h
! 053b944c43b565c99b13f13fdec75224  gcc/fortran/trans-expr.cc
! 18dc449da2051bb0564304caddebfcd9  gcc/fortran/trans-intrinsic.cc
  98da4f32a07d6a9049d5ebdb3a59119a  gcc/fortran/trans-io.cc
! 584d9b28ed9be158fb7f7c0dccbccd21  gcc/fortran/trans-openmp.cc
! f6f5d710c05836740d72e04e86c64838  gcc/fortran/trans-stmt.cc
  6fbc90714f9730e84515bbaadff313f9  gcc/fortran/trans-stmt.h
! 7ec4d9b209753a4deafc42c6c0424b71  gcc/fortran/trans-types.cc
! 6b00c9b76b80a96feb87d86b4b06102b  gcc/fortran/trans-types.h
  277d8774a336ae86806485275e4a700a  gcc/fortran/trans.cc
  2d3f54b9ed7f3bbec54c23afc6cab082  gcc/fortran/trans.h
  95f35aeb3293f3036414b45c9c749d61  gcc/fortran/trigd_fe.inc
! 928644592ed66fda7ace0b92b9d1d378  gcc/fortran/types.def
  2512380133ab0852be268312deda8663  gcc/fp-test.cc
  ffcd589d92263dca99a67b1a9fb561b8  gcc/function-abi.cc
  fe144e1c2a0da30ffc9946e5adab7e6f  gcc/function-abi.h
  45679bb0d98b3e87046958f7576b3770  gcc/function-tests.cc
! fac5129cb8c291cebcc1e4d9b031560e  gcc/function.cc
  797473d7b92327caaa0bc2b71c14bc0d  gcc/function.h
  96e0cc03035051e1904d130ab24fdfb4  gcc/fwprop.cc
  32954fca43f23e905ac77e9879653355  gcc/gcc-ar.cc
--- 6366,6396 ----
  7c0ce786abb30fa1b3dfd2c619faf5c3  gcc/fortran/symbol.cc
  4fa06f769be3f1b439a574ee842c82ca  gcc/fortran/target-memory.cc
  ea8837444e2a08a95a3ea747c94b8106  gcc/fortran/target-memory.h
! d332a7ca62d08210f0ff7f4210fe6cbf  gcc/fortran/trans-array.cc
  579b2b79e8e64c99cf7a8101c42ba519  gcc/fortran/trans-array.h
  5c567026f9fbc4fea9b59c22743687c4  gcc/fortran/trans-common.cc
! 0051b874f3dfe1b38ec77d5f181b3425  gcc/fortran/trans-const.cc
! f98aef4a99a3ee3d3100e827120be5ca  gcc/fortran/trans-const.h
! 5ef1c9d566df03f31c8a9bb8bd92bcab  gcc/fortran/trans-decl.cc
! a41d1dc94d696142974c7430ab7664e9  gcc/fortran/trans-descriptor.cc
  e4ae8da739e5243d01975094cbbe90a3  gcc/fortran/trans-descriptor.h
! 3fe0fe431b17bd137ad776f0eff013ae  gcc/fortran/trans-expr.cc
! 0fe9bdd8deb5edd387c769d8c1f67c40  gcc/fortran/trans-intrinsic.cc
  98da4f32a07d6a9049d5ebdb3a59119a  gcc/fortran/trans-io.cc
! a0381cd67c808e37693945b35c17c0fa  gcc/fortran/trans-openmp.cc
! 0bce127aec5623186ba7c355e92b66c4  gcc/fortran/trans-stmt.cc
  6fbc90714f9730e84515bbaadff313f9  gcc/fortran/trans-stmt.h
! 2080e7fe1dede580efeb6d90a49f88ce  gcc/fortran/trans-types.cc
! d2e2d3b54c5e07c2ef96e16dfafb0a5d  gcc/fortran/trans-types.h
  277d8774a336ae86806485275e4a700a  gcc/fortran/trans.cc
  2d3f54b9ed7f3bbec54c23afc6cab082  gcc/fortran/trans.h
  95f35aeb3293f3036414b45c9c749d61  gcc/fortran/trigd_fe.inc
! 25694e844e6e9bf7c96a78df293d2155  gcc/fortran/types.def
  2512380133ab0852be268312deda8663  gcc/fp-test.cc
  ffcd589d92263dca99a67b1a9fb561b8  gcc/function-abi.cc
  fe144e1c2a0da30ffc9946e5adab7e6f  gcc/function-abi.h
  45679bb0d98b3e87046958f7576b3770  gcc/function-tests.cc
! 43aa863d2c991e6f15da6396fb2a0a75  gcc/function.cc
  797473d7b92327caaa0bc2b71c14bc0d  gcc/function.h
  96e0cc03035051e1904d130ab24fdfb4  gcc/fwprop.cc
  32954fca43f23e905ac77e9879653355  gcc/gcc-ar.cc
*************** dd67ca2e05cdfe59a549e49eb485455e  gcc/gi
*** 6494,6500 ****
  47be556d1ffdffe8df16fdea25e9fe0e  gcc/gimple-predict.h
  507f851a06264c7415919c28e6afa3da  gcc/gimple-pretty-print.cc
  188a3366d8d8b4ba413f704fa241a1e2  gcc/gimple-pretty-print.h
! a4a39597524e3ba00876d10fd6c041e6  gcc/gimple-range-cache.cc
  fed39c5b7ccbe9fef78cb20fe5a094d8  gcc/gimple-range-cache.h
  d69dec8fe89be66b09721beced1a6f07  gcc/gimple-range-edge.cc
  1001ed4a3c498c8d659f609b65b1b127  gcc/gimple-range-edge.h
--- 6496,6502 ----
  47be556d1ffdffe8df16fdea25e9fe0e  gcc/gimple-predict.h
  507f851a06264c7415919c28e6afa3da  gcc/gimple-pretty-print.cc
  188a3366d8d8b4ba413f704fa241a1e2  gcc/gimple-pretty-print.h
! 406badf56b2d3dc86e19d4359d018dfa  gcc/gimple-range-cache.cc
  fed39c5b7ccbe9fef78cb20fe5a094d8  gcc/gimple-range-cache.h
  d69dec8fe89be66b09721beced1a6f07  gcc/gimple-range-edge.cc
  1001ed4a3c498c8d659f609b65b1b127  gcc/gimple-range-edge.h
*************** cb618963a83cd7f24a75236850e20a99  gcc/gi
*** 6513,6527 ****
  a4932ff9aca9b1faf77d94e18d1a98dd  gcc/gimple-range-tests.cc
  6aea6dbdcfdbb9cc7eaba0885ef8339c  gcc/gimple-range-trace.cc
  e45cb6aa50c3ff1d1592d7f2758cb778  gcc/gimple-range-trace.h
! baf8e85d0ec70ba9cc33aef997ee26e6  gcc/gimple-range.cc
! b284f979b1dc05312e57543e7aa4d6c4  gcc/gimple-range.h
  d1e29051831e84cf3322e13073e6e37c  gcc/gimple-ssa-backprop.cc
  de05af775384560b7d73a320ca04b716  gcc/gimple-ssa-isolate-paths.cc
  841e25177d0ec3b994aade444aaf7d1f  gcc/gimple-ssa-nonnull-compare.cc
! 05e242e061e93b618f52622b10b4e2e8  gcc/gimple-ssa-pta-constraints.cc
  1a13540b90afbe02c088650d3cd0b617  gcc/gimple-ssa-pta-constraints.h
  358c52f644d9a63e34d38841245cbaae  gcc/gimple-ssa-sccopy.cc
- ed229440036ea7e3f4f024ff36345e2e  gcc/gimple-ssa-split-paths.cc
  a707182c5c79c8694b0faeca12bcdba0  gcc/gimple-ssa-sprintf.cc
  93223fccf371c4d63f17138772b09ed9  gcc/gimple-ssa-store-merging.cc
  80c188723b9e2d5da42c41d22ce38e94  gcc/gimple-ssa-strength-reduction.cc
--- 6515,6528 ----
  a4932ff9aca9b1faf77d94e18d1a98dd  gcc/gimple-range-tests.cc
  6aea6dbdcfdbb9cc7eaba0885ef8339c  gcc/gimple-range-trace.cc
  e45cb6aa50c3ff1d1592d7f2758cb778  gcc/gimple-range-trace.h
! 515ea2c7af7c5649195752667817c280  gcc/gimple-range.cc
! 98db3cdd3969635051b42f3414a99713  gcc/gimple-range.h
  d1e29051831e84cf3322e13073e6e37c  gcc/gimple-ssa-backprop.cc
  de05af775384560b7d73a320ca04b716  gcc/gimple-ssa-isolate-paths.cc
  841e25177d0ec3b994aade444aaf7d1f  gcc/gimple-ssa-nonnull-compare.cc
! 96e1661908e516aa0851c0c0445a7ad1  gcc/gimple-ssa-pta-constraints.cc
  1a13540b90afbe02c088650d3cd0b617  gcc/gimple-ssa-pta-constraints.h
  358c52f644d9a63e34d38841245cbaae  gcc/gimple-ssa-sccopy.cc
  a707182c5c79c8694b0faeca12bcdba0  gcc/gimple-ssa-sprintf.cc
  93223fccf371c4d63f17138772b09ed9  gcc/gimple-ssa-store-merging.cc
  80c188723b9e2d5da42c41d22ce38e94  gcc/gimple-ssa-strength-reduction.cc
*************** f5de8589d497c4d607cadff1ce88dd5c  gcc/hw
*** 6668,6674 ****
  665c1d736f4909ccb17f662f7f060fd7  gcc/hw-doloop.h
  e5e51e93d7d72e1822440531e4d79d1d  gcc/hwint.cc
  b6b1b7e364f00e9287ee1f56254b9be1  gcc/hwint.h
! 7742136cb948b184339798a4556c981b  gcc/ifcvt.cc
  e2229f9ecac43014084b083ddf2d4637  gcc/ifcvt.h
  370b4a8b9decbb822392c32f5fb92a72  gcc/inchash.cc
  bad6404ce4e7f42ff46ce6ae70c77e99  gcc/inchash.h
--- 6669,6675 ----
  665c1d736f4909ccb17f662f7f060fd7  gcc/hw-doloop.h
  e5e51e93d7d72e1822440531e4d79d1d  gcc/hwint.cc
  b6b1b7e364f00e9287ee1f56254b9be1  gcc/hwint.h
! 4004cad6f16fc2d942c2d9af777cd538  gcc/ifcvt.cc
  e2229f9ecac43014084b083ddf2d4637  gcc/ifcvt.h
  370b4a8b9decbb822392c32f5fb92a72  gcc/inchash.cc
  bad6404ce4e7f42ff46ce6ae70c77e99  gcc/inchash.h
*************** c6ca4c904385311cad5f96a840b597c6  gcc/in
*** 6686,6692 ****
  8a34b6abb2591b8c30c7fb4187261ee3  gcc/intl.cc
  22c5866f6858fea288e5e2f1adc96e40  gcc/intl.h
  a7d9dfb72122a917ffa9ee90152b059e  gcc/ipa-comdats.cc
! 4383811dbb3eb6c93fc3153f23df988d  gcc/ipa-cp.cc
  bff71bc7b721a547da3a7ddc6b208fb9  gcc/ipa-cp.h
  0951d893930a76f52aa7e3f0fbd7201e  gcc/ipa-devirt.cc
  069cadb11f88729832aa5e2667ac73b8  gcc/ipa-fnsummary.cc
--- 6687,6693 ----
  8a34b6abb2591b8c30c7fb4187261ee3  gcc/intl.cc
  22c5866f6858fea288e5e2f1adc96e40  gcc/intl.h
  a7d9dfb72122a917ffa9ee90152b059e  gcc/ipa-comdats.cc
! a8b8c59815b1eef0ad3eb725e64f5646  gcc/ipa-cp.cc
  bff71bc7b721a547da3a7ddc6b208fb9  gcc/ipa-cp.h
  0951d893930a76f52aa7e3f0fbd7201e  gcc/ipa-devirt.cc
  069cadb11f88729832aa5e2667ac73b8  gcc/ipa-fnsummary.cc
*************** e0d99466f393722c3e10caf535614ff7  gcc/lt
*** 6916,6922 ****
  351e06833ea0ad58238533d76ea0c2cf  gcc/m2/COPYING.RUNTIME
  8f0e2cd40e05189ec81232da84bd6e1a  gcc/m2/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/m2/COPYING3.LIB
! 6ec8cb1a8346fcc63f87b31796d7d3ba  gcc/m2/ChangeLog
  6c64ada2deff17585163556dd3634dc4  gcc/m2/Make-lang.in
  ed6143d60ab8fbfb423b65ba791d1faf  gcc/m2/Make-maintainer.in
  6a74129fda00ca52ba9f953538250c45  gcc/m2/NEWS
--- 6917,6923 ----
  351e06833ea0ad58238533d76ea0c2cf  gcc/m2/COPYING.RUNTIME
  8f0e2cd40e05189ec81232da84bd6e1a  gcc/m2/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/m2/COPYING3.LIB
! de736ac4655253925a730e6cb6c6d454  gcc/m2/ChangeLog
  6c64ada2deff17585163556dd3634dc4  gcc/m2/Make-lang.in
  ed6143d60ab8fbfb423b65ba791d1faf  gcc/m2/Make-maintainer.in
  6a74129fda00ca52ba9f953538250c45  gcc/m2/NEWS
*************** d9ccc0b9d1bda18c349707147d9c0b35  gcc/m2
*** 7870,7876 ****
  6552ab047eb9d3a49e2ed9208645bde8  gcc/m2/pge-boot/main.cc
  e10b70517655c69087dac9bb43dcb8d2  gcc/m2/pge-boot/network.cc
  18840892def349c0982fbe40111d6a91  gcc/m2/plugin/README
! d80f042c602991f5440839dc664757ec  gcc/m2/plugin/m2rte.cc
  0660bb99723628b350ba665f6a743603  gcc/m2/target-independent/m2/Builtins.texi
  8007d011990ec6a27344c59375b632b5  gcc/m2/target-independent/m2/SYSTEM-iso.texi
  af715e0938ee1e3521e0d6aeb1546db9  gcc/m2/target-independent/m2/SYSTEM-pim.texi
--- 7871,7877 ----
  6552ab047eb9d3a49e2ed9208645bde8  gcc/m2/pge-boot/main.cc
  e10b70517655c69087dac9bb43dcb8d2  gcc/m2/pge-boot/network.cc
  18840892def349c0982fbe40111d6a91  gcc/m2/plugin/README
! 7ca4876ac8261b49503bd523f5d56635  gcc/m2/plugin/m2rte.cc
  0660bb99723628b350ba665f6a743603  gcc/m2/target-independent/m2/Builtins.texi
  8007d011990ec6a27344c59375b632b5  gcc/m2/target-independent/m2/SYSTEM-iso.texi
  af715e0938ee1e3521e0d6aeb1546db9  gcc/m2/target-independent/m2/SYSTEM-pim.texi
*************** cd3e00ace6dd26c0315ec6c474d5b5c6  gcc/m2
*** 7889,7898 ****
  5291f32526adc61f22c26f6aeadba4a2  gcc/m2/tools-src/tidydates.py
  f9608e9005487c369e6c38949ab36fa1  gcc/m2/version.c
  2a18164ee5f162ac117e6fedb58158a2  gcc/machmode.def
! 89d79df4a8d2185bb8557998f075e087  gcc/machmode.h
  197298337dae14fdd7ab928a1f03bec6  gcc/main.cc
  11dfd6679ddc945a2c284204df360007  gcc/match-sat-alu.pd
! 985eee81b3c94b23c95a53dbcb5c5462  gcc/match.pd
  b106a08a1793a5495dd87c412456484b  gcc/mcf.cc
  897c541ca992e145ad451c98941c7647  gcc/mem-stats-traits.h
  14700e76d554c9699481337fa9886be6  gcc/mem-stats.h
--- 7890,7899 ----
  5291f32526adc61f22c26f6aeadba4a2  gcc/m2/tools-src/tidydates.py
  f9608e9005487c369e6c38949ab36fa1  gcc/m2/version.c
  2a18164ee5f162ac117e6fedb58158a2  gcc/machmode.def
! a19f34a937ad29bda64c2e81d6433940  gcc/machmode.h
  197298337dae14fdd7ab928a1f03bec6  gcc/main.cc
  11dfd6679ddc945a2c284204df360007  gcc/match-sat-alu.pd
! c5ddc436c7fc7d969ac0c0d3a00fad52  gcc/match.pd
  b106a08a1793a5495dd87c412456484b  gcc/mcf.cc
  897c541ca992e145ad451c98941c7647  gcc/mem-stats-traits.h
  14700e76d554c9699481337fa9886be6  gcc/mem-stats.h
*************** b106a08a1793a5495dd87c412456484b  gcc/mc
*** 7905,7911 ****
  b651f65860de6833efe242939d7edf33  gcc/modulo-sched.cc
  ab360f5772fb7a87b6119cf198a8246f  gcc/multiple_target.cc
  f98f5be75203b0e833e7bcf563eecf14  gcc/mux-utils.h
! 5b68d648496571ca055c60d57d6abd62  gcc/objc/ChangeLog
  e00206160b117e3384f6e554cb06b174  gcc/objc/Make-lang.in
  f3dbb06248bf04272bf34751540a8844  gcc/objc/config-lang.in
  296b176173a1ff046cbb5bb721d9f576  gcc/objc/lang-specs.h
--- 7906,7912 ----
  b651f65860de6833efe242939d7edf33  gcc/modulo-sched.cc
  ab360f5772fb7a87b6119cf198a8246f  gcc/multiple_target.cc
  f98f5be75203b0e833e7bcf563eecf14  gcc/mux-utils.h
! 505007bd98eaa6dc54b30f30a1bfa0a0  gcc/objc/ChangeLog
  e00206160b117e3384f6e554cb06b174  gcc/objc/Make-lang.in
  f3dbb06248bf04272bf34751540a8844  gcc/objc/config-lang.in
  296b176173a1ff046cbb5bb721d9f576  gcc/objc/lang-specs.h
*************** d716426f842510f560782580a02b87e8  gcc/ob
*** 7924,7930 ****
  59ebaddcdcfea87fd921164743acd4a4  gcc/objc/objc-runtime-shared-support.cc
  00ae454319f2de26c30fc263347b00e9  gcc/objc/objc-runtime-shared-support.h
  8a1060d8fadfe53ae2651c9f887142ef  gcc/objc/objc-tree.def
! c16eb18f00ae43b938286041a894539f  gcc/objcp/ChangeLog
  e38dd8b647ce35d00c6eff3980d2e270  gcc/objcp/Make-lang.in
  cd3aac34657824ccc664d7185e6737d4  gcc/objcp/config-lang.in
  e3efef0a89306a90708239222db79f43  gcc/objcp/lang-specs.h
--- 7925,7931 ----
  59ebaddcdcfea87fd921164743acd4a4  gcc/objc/objc-runtime-shared-support.cc
  00ae454319f2de26c30fc263347b00e9  gcc/objc/objc-runtime-shared-support.h
  8a1060d8fadfe53ae2651c9f887142ef  gcc/objc/objc-tree.def
! 8e66e15017643b8283af1f29d49b275a  gcc/objcp/ChangeLog
  e38dd8b647ce35d00c6eff3980d2e270  gcc/objcp/Make-lang.in
  cd3aac34657824ccc664d7185e6737d4  gcc/objcp/config-lang.in
  e3efef0a89306a90708239222db79f43  gcc/objcp/lang-specs.h
*************** e3efef0a89306a90708239222db79f43  gcc/ob
*** 7933,7944 ****
  97d04fb525d43f26efcc1c10bb62a70e  gcc/objcp/objcp-lang.cc
  ac6f2a373c263368c4451f24860f50d6  gcc/obstack-utils.h
  b53e19ed2e5aad878bc3422b5ed77de8  gcc/omp-api.h
! 6b45a913fbc83b8bd944b062986484b9  gcc/omp-builtins.def
! 706aa5e3dc52870088426971d489b766  gcc/omp-expand.cc
  2f6456a4cc816c9b75844b1625b26349  gcc/omp-expand.h
  188173a8efb4e631ba04f95371cb8804  gcc/omp-general.cc
  adfc442def98eba84925b435cfc8716a  gcc/omp-general.h
! d3cbb0f00a7ddd459da543d6fa42bbee  gcc/omp-low.cc
  1c84cef0613c186032b0fc0682b72ab8  gcc/omp-low.h
  e15278003e18a529caf759e00fbb8140  gcc/omp-oacc-kernels-decompose.cc
  e46559b06f0c63bac8a2626dcddfb876  gcc/omp-oacc-neuter-broadcast.cc
--- 7934,7945 ----
  97d04fb525d43f26efcc1c10bb62a70e  gcc/objcp/objcp-lang.cc
  ac6f2a373c263368c4451f24860f50d6  gcc/obstack-utils.h
  b53e19ed2e5aad878bc3422b5ed77de8  gcc/omp-api.h
! 82179b538f6732452aa493fb2faf3ea1  gcc/omp-builtins.def
! 7184b223edbc35f5c3fc2db65ec29f7e  gcc/omp-expand.cc
  2f6456a4cc816c9b75844b1625b26349  gcc/omp-expand.h
  188173a8efb4e631ba04f95371cb8804  gcc/omp-general.cc
  adfc442def98eba84925b435cfc8716a  gcc/omp-general.h
! 8275ec97ff7c25ff1348bf8b2e0e0af5  gcc/omp-low.cc
  1c84cef0613c186032b0fc0682b72ab8  gcc/omp-low.h
  e15278003e18a529caf759e00fbb8140  gcc/omp-oacc-kernels-decompose.cc
  e46559b06f0c63bac8a2626dcddfb876  gcc/omp-oacc-neuter-broadcast.cc
*************** c9b2e818258f43e0a779e4c3caa8801d  gcc/op
*** 7977,7994 ****
  59b44247c12669685779dfba9d301863  gcc/opts-diagnostic.h
  dc202dff2d7d4cb632307dc4915602b0  gcc/opts-global.cc
  f55f0f0a86a11d13824924aac8c98a68  gcc/opts-jobserver.h
! c46fad7af98411314518d8c1c272f98d  gcc/opts.cc
  e2419fa789f8684ce04c4df7343b759d  gcc/opts.h
  413859dddc66f1f7d8ea8078e096c288  gcc/ordered-hash-map-tests.cc
  fef443de1557117f8c2847206a2ea8f5  gcc/ordered-hash-map.h
  7c8d7dc194f39f5b8c69d7f0d05bc335  gcc/output.h
  7aaac9b28a6df485fbbf75d4ed3086b8  gcc/pair-fusion.cc
  d9e22e28b3080527b0c29e8bc4e38c95  gcc/pair-fusion.h
! 6c13607270a8afe1edb03d80a657a846  gcc/params.opt
  2cc794e23d80a8c9f057a7e402c65fb8  gcc/params.opt.urls
  ce920ed7f2cc74b4a9bc390c39f4cbee  gcc/pass_manager.h
  c1386b247569007de9fda83d55b1aebf  gcc/passes.cc
! 66766a0d387afe2dad352418a01420e9  gcc/passes.def
  0355d2054ba5f7935e870d42ea044cbf  gcc/path-coverage.cc
  a804a634cdc9dbcb92434c9e03799a1e  gcc/pex.cc
  b2f9b18f946c2e60e4f6cba0ab2df54e  gcc/pex.h
--- 7978,7995 ----
  59b44247c12669685779dfba9d301863  gcc/opts-diagnostic.h
  dc202dff2d7d4cb632307dc4915602b0  gcc/opts-global.cc
  f55f0f0a86a11d13824924aac8c98a68  gcc/opts-jobserver.h
! aa4ebd1be168456b318078b0fa097bad  gcc/opts.cc
  e2419fa789f8684ce04c4df7343b759d  gcc/opts.h
  413859dddc66f1f7d8ea8078e096c288  gcc/ordered-hash-map-tests.cc
  fef443de1557117f8c2847206a2ea8f5  gcc/ordered-hash-map.h
  7c8d7dc194f39f5b8c69d7f0d05bc335  gcc/output.h
  7aaac9b28a6df485fbbf75d4ed3086b8  gcc/pair-fusion.cc
  d9e22e28b3080527b0c29e8bc4e38c95  gcc/pair-fusion.h
! 701a1d8df83dce8a1404287980162e40  gcc/params.opt
  2cc794e23d80a8c9f057a7e402c65fb8  gcc/params.opt.urls
  ce920ed7f2cc74b4a9bc390c39f4cbee  gcc/pass_manager.h
  c1386b247569007de9fda83d55b1aebf  gcc/passes.cc
! a3e14ca56a69a9d7eba5fccdc026d90f  gcc/passes.def
  0355d2054ba5f7935e870d42ea044cbf  gcc/path-coverage.cc
  a804a634cdc9dbcb92434c9e03799a1e  gcc/pex.cc
  b2f9b18f946c2e60e4f6cba0ab2df54e  gcc/pex.h
*************** b1408122718335443829fcfe2d5dbcf3  gcc/pr
*** 8040,8046 ****
  70a9d1a2afc62db998ad0103753f2508  gcc/pretty-print.h
  6980e1765b2d7f75c604d4e11294a1fa  gcc/prime-paths.cc
  4791763965e448615fab35a2eda1f6bd  gcc/print-rtl-function.cc
! 119caf0b6c96668ad2576ff0943e1c7a  gcc/print-rtl.cc
  2cd52b1a67b570ee31c684eb846def0f  gcc/print-rtl.h
  f26f8ff623fefa8bdfe18ead347e914f  gcc/print-tree.cc
  db24d9f938cefb2027e91a5068f5f1d0  gcc/print-tree.h
--- 8041,8047 ----
  70a9d1a2afc62db998ad0103753f2508  gcc/pretty-print.h
  6980e1765b2d7f75c604d4e11294a1fa  gcc/prime-paths.cc
  4791763965e448615fab35a2eda1f6bd  gcc/print-rtl-function.cc
! 5557c6bafa1eddb9cf62172b684aa3be  gcc/print-rtl.cc
  2cd52b1a67b570ee31c684eb846def0f  gcc/print-rtl.h
  f26f8ff623fefa8bdfe18ead347e914f  gcc/print-tree.cc
  db24d9f938cefb2027e91a5068f5f1d0  gcc/print-tree.h
*************** eab7365dceccf86b8e9a8ccbb365afc3  gcc/rt
*** 8116,8122 ****
  24f0dd01b35b9a9b7f5bf7db574be3ec  gcc/rtl-tests.cc
  27956813d0124f5b5ec60d5a48840a34  gcc/rtl.cc
  d5fa22d4e702847e6ca00581513834fe  gcc/rtl.def
! 99fe063ed00930c8cefd14605bf76c9d  gcc/rtl.h
  78a6761be9094aabb776bbba41b1906f  gcc/rtlanal.cc
  57073d447ccb92aa7b0276e4471824df  gcc/rtlanal.h
  9a5e61517f096479200fef046f8b2d35  gcc/rtlhash.cc
--- 8117,8123 ----
  24f0dd01b35b9a9b7f5bf7db574be3ec  gcc/rtl-tests.cc
  27956813d0124f5b5ec60d5a48840a34  gcc/rtl.cc
  d5fa22d4e702847e6ca00581513834fe  gcc/rtl.def
! 8226fa11daaabe9e11d323031a928fa9  gcc/rtl.h
  78a6761be9094aabb776bbba41b1906f  gcc/rtlanal.cc
  57073d447ccb92aa7b0276e4471824df  gcc/rtlanal.h
  9a5e61517f096479200fef046f8b2d35  gcc/rtlhash.cc
*************** ff662645190de703b9423727e52d659c  gcc/rt
*** 8128,8139 ****
  92e356710b1aae5aaabc8f47d6977fff  gcc/run-rtl-passes.cc
  f4eae48a3e90b34e88b5789e54f5f29a  gcc/run-rtl-passes.h
  add9bd82fcec23469a4d0f7df03d9589  gcc/rust/CONTRIBUTING.md
! f58b487d46918839d77052142877ca78  gcc/rust/ChangeLog
! 668da3fc21da447732bf5b1b7a4589fb  gcc/rust/Make-lang.in
  f3527e161e6e2827d299c1a928ebe1c6  gcc/rust/README.md
  fbd9e5dbbbf2e1a3e28d730525b8eb78  gcc/rust/ast/rust-ast-builder.cc
  c08e21c65a155ba30f72631681911034  gcc/rust/ast/rust-ast-builder.h
! aa84fe05b38e2bb5a557da41197c2b73  gcc/rust/ast/rust-ast-collector.cc
  a777fb86e5d41d829721554ee8a81ca7  gcc/rust/ast/rust-ast-collector.h
  98b8c7bc7c7460959df0b63f43d595ee  gcc/rust/ast/rust-ast-dump.cc
  a3c39938de79362236289dd94cc979bb  gcc/rust/ast/rust-ast-dump.h
--- 8129,8140 ----
  92e356710b1aae5aaabc8f47d6977fff  gcc/run-rtl-passes.cc
  f4eae48a3e90b34e88b5789e54f5f29a  gcc/run-rtl-passes.h
  add9bd82fcec23469a4d0f7df03d9589  gcc/rust/CONTRIBUTING.md
! e96575f095113e7d87e76389b4fbeeb6  gcc/rust/ChangeLog
! 745c134c407226eb496ee165ab36fbb3  gcc/rust/Make-lang.in
  f3527e161e6e2827d299c1a928ebe1c6  gcc/rust/README.md
  fbd9e5dbbbf2e1a3e28d730525b8eb78  gcc/rust/ast/rust-ast-builder.cc
  c08e21c65a155ba30f72631681911034  gcc/rust/ast/rust-ast-builder.h
! de83e20462874a01010fc7e0bb0ea4ae  gcc/rust/ast/rust-ast-collector.cc
  a777fb86e5d41d829721554ee8a81ca7  gcc/rust/ast/rust-ast-collector.h
  98b8c7bc7c7460959df0b63f43d595ee  gcc/rust/ast/rust-ast-dump.cc
  a3c39938de79362236289dd94cc979bb  gcc/rust/ast/rust-ast-dump.h
*************** ce8b5c065e370de22a7a9314f5030d5a  gcc/ru
*** 8147,8154 ****
  3de874b956fb474770d98a83e420396b  gcc/rust/ast/rust-ast-pointer-visitor.h
  003c050ae97bad63ac141ffd1ac16840  gcc/rust/ast/rust-ast-visitor.cc
  ff1c55d74fc098d6e8a6a5ac297498e8  gcc/rust/ast/rust-ast-visitor.h
! a211319b221cec4d5a279caca4fd40ea  gcc/rust/ast/rust-ast.cc
! ca66d862961538c388fe021adcf03774  gcc/rust/ast/rust-ast.h
  15a29678516152e3a7190d2b2a01a7e5  gcc/rust/ast/rust-builtin-ast-nodes.h
  a80235d705e48446e91e5fc731dbcfff  gcc/rust/ast/rust-collect-lang-items.cc
  577a3197010f4f13c724c6aee258c07f  gcc/rust/ast/rust-collect-lang-items.h
--- 8148,8155 ----
  3de874b956fb474770d98a83e420396b  gcc/rust/ast/rust-ast-pointer-visitor.h
  003c050ae97bad63ac141ffd1ac16840  gcc/rust/ast/rust-ast-visitor.cc
  ff1c55d74fc098d6e8a6a5ac297498e8  gcc/rust/ast/rust-ast-visitor.h
! 483ce86c36f8548e852a9bc575833eeb  gcc/rust/ast/rust-ast.cc
! b913fdbc2c0933d34a8f9cd5d8da7498  gcc/rust/ast/rust-ast.h
  15a29678516152e3a7190d2b2a01a7e5  gcc/rust/ast/rust-builtin-ast-nodes.h
  a80235d705e48446e91e5fc731dbcfff  gcc/rust/ast/rust-collect-lang-items.cc
  577a3197010f4f13c724c6aee258c07f  gcc/rust/ast/rust-collect-lang-items.h
*************** e6c47c7d5c58b601dbebb5a0bd1b263a  gcc/ru
*** 8163,8169 ****
  dcbe24ad7f60ad58e14a2b40bb7b7580  gcc/rust/ast/rust-desugar-try-block.h
  3e3e3c4baf7a69aefb9fd989d8b7b491  gcc/rust/ast/rust-desugar-while-let.cc
  0a24ad8baedd9b3f104f4ba1efceab02  gcc/rust/ast/rust-desugar-while-let.h
! 548ed3dbb162bd62a7eddaa8e44d9235  gcc/rust/ast/rust-expr.h
  0746b32151c484e3ff44eef8e94d2f1a  gcc/rust/ast/rust-expression-yeast.cc
  626bbb6526780507e2d8c0727b9ddef9  gcc/rust/ast/rust-expression-yeast.h
  e10c652a02b59d0bbfc3ed60e3ba6a67  gcc/rust/ast/rust-fmt.cc
--- 8164,8170 ----
  dcbe24ad7f60ad58e14a2b40bb7b7580  gcc/rust/ast/rust-desugar-try-block.h
  3e3e3c4baf7a69aefb9fd989d8b7b491  gcc/rust/ast/rust-desugar-while-let.cc
  0a24ad8baedd9b3f104f4ba1efceab02  gcc/rust/ast/rust-desugar-while-let.h
! 686e46b250db1e64bf0684cf63580ea3  gcc/rust/ast/rust-expr.h
  0746b32151c484e3ff44eef8e94d2f1a  gcc/rust/ast/rust-expression-yeast.cc
  626bbb6526780507e2d8c0727b9ddef9  gcc/rust/ast/rust-expression-yeast.h
  e10c652a02b59d0bbfc3ed60e3ba6a67  gcc/rust/ast/rust-fmt.cc
*************** e84ec0880b45e2e86d61f0d36c314317  gcc/ru
*** 8180,8228 ****
  4d12359a7a47b6d290998ff743d3b250  gcc/rust/backend/rust-builtins.h
  841c4de1fb9c8ae4e98cfaf77ce23ebc  gcc/rust/backend/rust-compile-asm.cc
  f2a74dec153c7d458110255bddcd7c47  gcc/rust/backend/rust-compile-asm.h
! 5004c72d4563fd35d1d00833630ea9fd  gcc/rust/backend/rust-compile-base.cc
  4979b0b05a4f52a947b2ab69e9624bca  gcc/rust/backend/rust-compile-base.h
! ba780dc243a21d2e7aba2d2d75ee92b5  gcc/rust/backend/rust-compile-block.cc
! f6ccf3e6550e5f3d1e7f0903fad16e00  gcc/rust/backend/rust-compile-block.h
  84d2efe344d04876bdef59c09e170495  gcc/rust/backend/rust-compile-context.cc
! af2a17fba167e251d1430d6472a53988  gcc/rust/backend/rust-compile-context.h
  62a9ccf3c82ae92a0fd4347720d4a2fc  gcc/rust/backend/rust-compile-drop-candidate.h
! 9391bdf86429fe8c58ab1b57812079f9  gcc/rust/backend/rust-compile-drop.cc
! 77dbd66486ded182adb98d19f354d08b  gcc/rust/backend/rust-compile-drop.h
! cb652c0f630ad72280c120b8fbd76461  gcc/rust/backend/rust-compile-expr.cc
! a1ca2dd4d8de654e157d8d1d57c51f14  gcc/rust/backend/rust-compile-expr.h
! d2787752d55665c5f6a670bcb3949817  gcc/rust/backend/rust-compile-extern.h
  154038c60400f9e4a8ead9dcc5ea2388  gcc/rust/backend/rust-compile-fnparam.cc
  8c98ceabcde4b8a1cc6e31c5186c9656  gcc/rust/backend/rust-compile-fnparam.h
  6384f7fc7653808c81d624cb42ee26b0  gcc/rust/backend/rust-compile-implitem.cc
  be9ce3db6b795d9db2585b15e17f476d  gcc/rust/backend/rust-compile-implitem.h
! 3c55544b37d3793fa18ed67563e11497  gcc/rust/backend/rust-compile-intrinsic.cc
! a1fb8689400958af8126ae9c477c873e  gcc/rust/backend/rust-compile-intrinsic.h
! debf9a3a5e287832fa8aa1e9b9563612  gcc/rust/backend/rust-compile-item.cc
  4faa4d3dc0f5fd3cfd2981a8f06308e4  gcc/rust/backend/rust-compile-item.h
! dc87e1445c1d9a5d8ae94e6899ec4f62  gcc/rust/backend/rust-compile-pattern.cc
  bedf30a4724e428664f2f471edda5d23  gcc/rust/backend/rust-compile-pattern.h
  cd711182d62e81ac9cb36e89d0ab5062  gcc/rust/backend/rust-compile-proc-macro.cc
! 7d71806a89ed74aeb05a272362a51c5a  gcc/rust/backend/rust-compile-resolve-path.cc
  21dfb54bc738ea2ee1acadbdc70dda9b  gcc/rust/backend/rust-compile-resolve-path.h
  e75e1fda31ea166fc6ce912b0452b80b  gcc/rust/backend/rust-compile-stmt.cc
  0616707ec19e6af74a2368c47facedc8  gcc/rust/backend/rust-compile-stmt.h
  74ff88ecb580496d0348fd985d94f78e  gcc/rust/backend/rust-compile-struct-field-expr.cc
  45319a8743880ce8e94f692e7fa2a68c  gcc/rust/backend/rust-compile-struct-field-expr.h
! 6ac3d881d80a8fc5025850fbe68b83d5  gcc/rust/backend/rust-compile-type.cc
  99a4de0c5be47e5399e6c849136344c7  gcc/rust/backend/rust-compile-type.h
  e1ac8f89451615ed406d5080754c925f  gcc/rust/backend/rust-compile-var-decl.h
! ce6124f6342485eba9fc0c1525c93d1a  gcc/rust/backend/rust-compile.cc
  a9a83e514f16f22fdc6e72fcb2e37a14  gcc/rust/backend/rust-compile.h
  53b4d6a019435dade0320636db64f287  gcc/rust/backend/rust-constexpr.cc
  8b7d1489d3387b799f0272f52df62581  gcc/rust/backend/rust-constexpr.h
! 26866b78d6223f1fb6142fc1878bcad0  gcc/rust/backend/rust-intrinsic-handlers.cc
! f4a269e1f4298aa2f5875e118b15253d  gcc/rust/backend/rust-intrinsic-handlers.h
  fe6f5539b06a5b2b5c8179da42f9cd0d  gcc/rust/backend/rust-mangle-legacy.cc
  3ff8e3c97c56af610fb789104c385560  gcc/rust/backend/rust-mangle-v0.cc
  3f96bdbc9eba300857511ae861409693  gcc/rust/backend/rust-mangle.cc
  dcbba0779b1eca1b210c23b8ef3dcc5d  gcc/rust/backend/rust-mangle.h
! 65b098b3400d3263f18f7a28ccec2289  gcc/rust/backend/rust-tree.cc
  e01764aa48003b47d2549ebf88f9c579  gcc/rust/backend/rust-tree.h
  675e019161664f914b95bbc7799e517c  gcc/rust/checks/errors/borrowck/bir-design-notes.md
  eee383c6d924f06fa96c8f58f21fc6af  gcc/rust/checks/errors/borrowck/dev-notes.md
--- 8181,8231 ----
  4d12359a7a47b6d290998ff743d3b250  gcc/rust/backend/rust-builtins.h
  841c4de1fb9c8ae4e98cfaf77ce23ebc  gcc/rust/backend/rust-compile-asm.cc
  f2a74dec153c7d458110255bddcd7c47  gcc/rust/backend/rust-compile-asm.h
! 22ce30eba6b7461082d1c1ef926b78c7  gcc/rust/backend/rust-compile-base.cc
  4979b0b05a4f52a947b2ab69e9624bca  gcc/rust/backend/rust-compile-base.h
! e829d131016e3225952ba9f80adf6f9b  gcc/rust/backend/rust-compile-block.cc
! cfa83a08783b532ed0ba8a8b8fe97faa  gcc/rust/backend/rust-compile-block.h
  84d2efe344d04876bdef59c09e170495  gcc/rust/backend/rust-compile-context.cc
! b5bf991d2623a596aaf515d55b34d48b  gcc/rust/backend/rust-compile-context.h
! e832397afd55d416af017d78e91608a3  gcc/rust/backend/rust-compile-drop-builder.cc
! e33585c5360198e48511044dc8608d5b  gcc/rust/backend/rust-compile-drop-builder.h
  62a9ccf3c82ae92a0fd4347720d4a2fc  gcc/rust/backend/rust-compile-drop-candidate.h
! 6d96780e22dbb1f728c47363b5b88735  gcc/rust/backend/rust-compile-drop.cc
! 245085e7eed0b7fa2a22e53d453e5f13  gcc/rust/backend/rust-compile-drop.h
! ee03809aa8423f8deeaac3dfe9669761  gcc/rust/backend/rust-compile-expr.cc
! ec6d558cb527a6bfba512bfca75a7ca3  gcc/rust/backend/rust-compile-expr.h
! 7d5d9c0c63cb47b8b3ff3763c87a8b0f  gcc/rust/backend/rust-compile-extern.h
  154038c60400f9e4a8ead9dcc5ea2388  gcc/rust/backend/rust-compile-fnparam.cc
  8c98ceabcde4b8a1cc6e31c5186c9656  gcc/rust/backend/rust-compile-fnparam.h
  6384f7fc7653808c81d624cb42ee26b0  gcc/rust/backend/rust-compile-implitem.cc
  be9ce3db6b795d9db2585b15e17f476d  gcc/rust/backend/rust-compile-implitem.h
! c8a3a28d2d2b1069daffe5fdf1f09cf8  gcc/rust/backend/rust-compile-intrinsic.cc
! 699e550002f03e5a87cc8cdb24ef7362  gcc/rust/backend/rust-compile-intrinsic.h
! 336485c15c848f982546c64bfdf7c1fd  gcc/rust/backend/rust-compile-item.cc
  4faa4d3dc0f5fd3cfd2981a8f06308e4  gcc/rust/backend/rust-compile-item.h
! 41d842fd0673561cc5b7c3d641c5af27  gcc/rust/backend/rust-compile-pattern.cc
  bedf30a4724e428664f2f471edda5d23  gcc/rust/backend/rust-compile-pattern.h
  cd711182d62e81ac9cb36e89d0ab5062  gcc/rust/backend/rust-compile-proc-macro.cc
! 76732fa350181aaeab08214071cfaa3f  gcc/rust/backend/rust-compile-resolve-path.cc
  21dfb54bc738ea2ee1acadbdc70dda9b  gcc/rust/backend/rust-compile-resolve-path.h
  e75e1fda31ea166fc6ce912b0452b80b  gcc/rust/backend/rust-compile-stmt.cc
  0616707ec19e6af74a2368c47facedc8  gcc/rust/backend/rust-compile-stmt.h
  74ff88ecb580496d0348fd985d94f78e  gcc/rust/backend/rust-compile-struct-field-expr.cc
  45319a8743880ce8e94f692e7fa2a68c  gcc/rust/backend/rust-compile-struct-field-expr.h
! d9fc4e70dda1cedcc42bf6ac6dc260dd  gcc/rust/backend/rust-compile-type.cc
  99a4de0c5be47e5399e6c849136344c7  gcc/rust/backend/rust-compile-type.h
  e1ac8f89451615ed406d5080754c925f  gcc/rust/backend/rust-compile-var-decl.h
! 5a3df2f5a332071e9a55e884184133a2  gcc/rust/backend/rust-compile.cc
  a9a83e514f16f22fdc6e72fcb2e37a14  gcc/rust/backend/rust-compile.h
  53b4d6a019435dade0320636db64f287  gcc/rust/backend/rust-constexpr.cc
  8b7d1489d3387b799f0272f52df62581  gcc/rust/backend/rust-constexpr.h
! 303f22306639faed2dd38d54c0697ee3  gcc/rust/backend/rust-intrinsic-handlers.cc
! fa5ae863fb28a9dfff3d17e8df10d9f2  gcc/rust/backend/rust-intrinsic-handlers.h
  fe6f5539b06a5b2b5c8179da42f9cd0d  gcc/rust/backend/rust-mangle-legacy.cc
  3ff8e3c97c56af610fb789104c385560  gcc/rust/backend/rust-mangle-v0.cc
  3f96bdbc9eba300857511ae861409693  gcc/rust/backend/rust-mangle.cc
  dcbba0779b1eca1b210c23b8ef3dcc5d  gcc/rust/backend/rust-mangle.h
! 0b7ad14b1a701019727229c0612377fa  gcc/rust/backend/rust-tree.cc
  e01764aa48003b47d2549ebf88f9c579  gcc/rust/backend/rust-tree.h
  675e019161664f914b95bbc7799e517c  gcc/rust/checks/errors/borrowck/bir-design-notes.md
  eee383c6d924f06fa96c8f58f21fc6af  gcc/rust/checks/errors/borrowck/dev-notes.md
*************** bca09e7439e4187f0ea4c60c867580fc  gcc/ru
*** 8283,8295 ****
  aa313bed142588fabe7a75b55aab6132  gcc/rust/checks/errors/borrowck/polonius/rust-polonius-ffi.h
  5777cde9ed88b0db69ac5918583ad9ef  gcc/rust/checks/errors/borrowck/polonius/rust-polonius.cc
  112a36e7d30b9b0f77222e93c2670c15  gcc/rust/checks/errors/borrowck/polonius/rust-polonius.h
! ec15191f2ba147daa1084d57531231bf  gcc/rust/checks/errors/borrowck/rust-bir-builder-expr-stmt.cc
! 57ac49cc8e37282bf94bba113bb7f244  gcc/rust/checks/errors/borrowck/rust-bir-builder-expr-stmt.h
  31551ce94e855502d4d2f493c87629aa  gcc/rust/checks/errors/borrowck/rust-bir-builder-internal.h
! 445c13c9a9a98e8720d4322713af57d5  gcc/rust/checks/errors/borrowck/rust-bir-builder-lazyboolexpr.h
  6305f4d04481595395e6628d3dda2a6f  gcc/rust/checks/errors/borrowck/rust-bir-builder-pattern.cc
  e617b37b26e3ada0560acee515888e90  gcc/rust/checks/errors/borrowck/rust-bir-builder-pattern.h
! 7e40113f634abfe1d225ba87d926e598  gcc/rust/checks/errors/borrowck/rust-bir-builder-struct.h
  708cc3717f52a4d1b9cfaeabd3fcbd20  gcc/rust/checks/errors/borrowck/rust-bir-builder.h
  0247f69ebd2b667d80bd9a03a5d8b2d0  gcc/rust/checks/errors/borrowck/rust-bir-dump.cc
  19a7621e50d1ae9649388af0bbb33cc1  gcc/rust/checks/errors/borrowck/rust-bir-dump.h
--- 8286,8298 ----
  aa313bed142588fabe7a75b55aab6132  gcc/rust/checks/errors/borrowck/polonius/rust-polonius-ffi.h
  5777cde9ed88b0db69ac5918583ad9ef  gcc/rust/checks/errors/borrowck/polonius/rust-polonius.cc
  112a36e7d30b9b0f77222e93c2670c15  gcc/rust/checks/errors/borrowck/polonius/rust-polonius.h
! 0941aeb8d57f18a2ddf99efc4febd9b7  gcc/rust/checks/errors/borrowck/rust-bir-builder-expr-stmt.cc
! dd8c828264c6cc88b0853d491072bd62  gcc/rust/checks/errors/borrowck/rust-bir-builder-expr-stmt.h
  31551ce94e855502d4d2f493c87629aa  gcc/rust/checks/errors/borrowck/rust-bir-builder-internal.h
! 3f161f17587ea93a955116164d4f1a3d  gcc/rust/checks/errors/borrowck/rust-bir-builder-lazyboolexpr.h
  6305f4d04481595395e6628d3dda2a6f  gcc/rust/checks/errors/borrowck/rust-bir-builder-pattern.cc
  e617b37b26e3ada0560acee515888e90  gcc/rust/checks/errors/borrowck/rust-bir-builder-pattern.h
! ce2dfa53129687553c1a83f557f9ab29  gcc/rust/checks/errors/borrowck/rust-bir-builder-struct.h
  708cc3717f52a4d1b9cfaeabd3fcbd20  gcc/rust/checks/errors/borrowck/rust-bir-builder.h
  0247f69ebd2b667d80bd9a03a5d8b2d0  gcc/rust/checks/errors/borrowck/rust-bir-dump.cc
  19a7621e50d1ae9649388af0bbb33cc1  gcc/rust/checks/errors/borrowck/rust-bir-dump.h
*************** f27a457ad0e87ad8a80bd6ff3013db81  gcc/ru
*** 8302,8308 ****
  df7d91be1b422b96bf594b0d17010985  gcc/rust/checks/errors/borrowck/rust-borrow-checker-diagnostics.h
  b8caf4770c8130c1b5af70e873f0fb35  gcc/rust/checks/errors/borrowck/rust-borrow-checker.cc
  6156d10aa29ff8bb0094447a03e07631  gcc/rust/checks/errors/borrowck/rust-borrow-checker.h
! a014a6064257ab9fbde59b5445c6c81d  gcc/rust/checks/errors/borrowck/rust-function-collector.h
  48961f264cd3fbeeb72a6691fc80d102  gcc/rust/checks/errors/feature/contrib/.gitignore
  8f285501a6ae2de4a79d5ce3e32c0c8f  gcc/rust/checks/errors/feature/contrib/Makefile
  49ef343f479413ef88d9bc815792aac3  gcc/rust/checks/errors/feature/contrib/README
--- 8305,8311 ----
  df7d91be1b422b96bf594b0d17010985  gcc/rust/checks/errors/borrowck/rust-borrow-checker-diagnostics.h
  b8caf4770c8130c1b5af70e873f0fb35  gcc/rust/checks/errors/borrowck/rust-borrow-checker.cc
  6156d10aa29ff8bb0094447a03e07631  gcc/rust/checks/errors/borrowck/rust-borrow-checker.h
! 027c91afdfc5dec60fb6529618edae83  gcc/rust/checks/errors/borrowck/rust-function-collector.h
  48961f264cd3fbeeb72a6691fc80d102  gcc/rust/checks/errors/feature/contrib/.gitignore
  8f285501a6ae2de4a79d5ce3e32c0c8f  gcc/rust/checks/errors/feature/contrib/Makefile
  49ef343f479413ef88d9bc815792aac3  gcc/rust/checks/errors/feature/contrib/README
*************** e227787587d4567c45f9966f8b82db7b  gcc/ru
*** 8326,8333 ****
  19e8562ee6c9ded3899f6d0f02aea8b8  gcc/rust/checks/errors/privacy/rust-privacy-common.h
  141f1f2147a5be923ccc9ea923ba2885  gcc/rust/checks/errors/privacy/rust-privacy-ctx.cc
  59191eca50e396dc546b86ea28234673  gcc/rust/checks/errors/privacy/rust-privacy-ctx.h
! e8c2f34d3e2c10f31172d0edc8102821  gcc/rust/checks/errors/privacy/rust-privacy-reporter.cc
! c2b8436a900cde7c9e66fcfbcc78fc4a  gcc/rust/checks/errors/privacy/rust-privacy-reporter.h
  ae661cfd7b4e13f7428e1fc2568db32c  gcc/rust/checks/errors/privacy/rust-pub-restricted-visitor.cc
  05be35df2802adddd997ce762a360cfb  gcc/rust/checks/errors/privacy/rust-pub-restricted-visitor.h
  2efbc6d644df7e2d6be35d17360c147d  gcc/rust/checks/errors/privacy/rust-reachability.cc
--- 8329,8336 ----
  19e8562ee6c9ded3899f6d0f02aea8b8  gcc/rust/checks/errors/privacy/rust-privacy-common.h
  141f1f2147a5be923ccc9ea923ba2885  gcc/rust/checks/errors/privacy/rust-privacy-ctx.cc
  59191eca50e396dc546b86ea28234673  gcc/rust/checks/errors/privacy/rust-privacy-ctx.h
! 55f43b3946085ec4674a3db6ce2b3b01  gcc/rust/checks/errors/privacy/rust-privacy-reporter.cc
! 2f26e4e391cefe8345a7676333c03631  gcc/rust/checks/errors/privacy/rust-privacy-reporter.h
  ae661cfd7b4e13f7428e1fc2568db32c  gcc/rust/checks/errors/privacy/rust-pub-restricted-visitor.cc
  05be35df2802adddd997ce762a360cfb  gcc/rust/checks/errors/privacy/rust-pub-restricted-visitor.h
  2efbc6d644df7e2d6be35d17360c147d  gcc/rust/checks/errors/privacy/rust-reachability.cc
*************** b3e7ff4d569e53dc66140eb20a1eb0e1  gcc/ru
*** 8340,8361 ****
  83f6652638adfd9f110381c863d0fb64  gcc/rust/checks/errors/rust-attribute-checker.h
  990c2a7d8936f755b25111a32df261e0  gcc/rust/checks/errors/rust-builtin-attribute-checker.cc
  e6c34d2279cd39fe13d7dc443e01bda3  gcc/rust/checks/errors/rust-builtin-attribute-checker.h
! 3f6f9e0eb49bc81771bafe50d3fd6c68  gcc/rust/checks/errors/rust-const-checker.cc
! 67e10a7c267b7d76beee87e476a5b6e6  gcc/rust/checks/errors/rust-const-checker.h
! 531fbb1b52b115cebe9d12ba0d55f7ec  gcc/rust/checks/errors/rust-hir-pattern-analysis.cc
! 8ea473ceaab7b848fe509e2125e96bb3  gcc/rust/checks/errors/rust-hir-pattern-analysis.h
  e88240ad73316a7217ec73e9c56af09a  gcc/rust/checks/errors/rust-readonly-check.cc
  7853e036ce1dfe09f579bf6a04994461  gcc/rust/checks/errors/rust-readonly-check.h
! a4e912195a730fe8b3411c33a2a6ffee  gcc/rust/checks/errors/rust-unsafe-checker.cc
! 6d7868ec58fd91b7104061e53e64fa81  gcc/rust/checks/errors/rust-unsafe-checker.h
  45e1e285d36467b08cc19201db4f6644  gcc/rust/checks/lints/rust-lint-marklive-base.h
! cfbb4195232c2014f1cf01e998173d5f  gcc/rust/checks/lints/rust-lint-marklive.cc
! 041e939a099e77167cef5c1c59451b57  gcc/rust/checks/lints/rust-lint-marklive.h
  39d2087b62541ef24b107e4edf79b300  gcc/rust/checks/lints/rust-lint-scan-deadcode.h
  d03052efded34394a85b3e891c267781  gcc/rust/checks/lints/rust-lint-unused-var.cc
  56160d4d1424a0469b62ce3dc9ef7886  gcc/rust/checks/lints/rust-lint-unused-var.h
! e66624ecbe01db8c56e5d44886001b6b  gcc/rust/checks/lints/unused/rust-unused-checker.cc
! 40a5da9a12efc26d12a3ee1d442e23d6  gcc/rust/checks/lints/unused/rust-unused-checker.h
  2acd4930a58466cf0221890b55f59e9f  gcc/rust/checks/lints/unused/rust-unused-collector.cc
  2f5987313b59ad90258eb2dde2f52fc8  gcc/rust/checks/lints/unused/rust-unused-collector.h
  747ddc08d2d075789af43eefe97866a1  gcc/rust/checks/lints/unused/rust-unused-context.cc
--- 8343,8364 ----
  83f6652638adfd9f110381c863d0fb64  gcc/rust/checks/errors/rust-attribute-checker.h
  990c2a7d8936f755b25111a32df261e0  gcc/rust/checks/errors/rust-builtin-attribute-checker.cc
  e6c34d2279cd39fe13d7dc443e01bda3  gcc/rust/checks/errors/rust-builtin-attribute-checker.h
! 97d3ea8b895423074d2ef15af48851cb  gcc/rust/checks/errors/rust-const-checker.cc
! 8b18a6bfddc25e81c8577936f303775b  gcc/rust/checks/errors/rust-const-checker.h
! f97fe28e9fe2f6697a757fb40641c639  gcc/rust/checks/errors/rust-hir-pattern-analysis.cc
! 70b33bf7ec039407f3d9816a163e46c6  gcc/rust/checks/errors/rust-hir-pattern-analysis.h
  e88240ad73316a7217ec73e9c56af09a  gcc/rust/checks/errors/rust-readonly-check.cc
  7853e036ce1dfe09f579bf6a04994461  gcc/rust/checks/errors/rust-readonly-check.h
! 548d2d877dc0385e32a84d8c44b16543  gcc/rust/checks/errors/rust-unsafe-checker.cc
! d231eb1a5247eb8f7331f4c793653739  gcc/rust/checks/errors/rust-unsafe-checker.h
  45e1e285d36467b08cc19201db4f6644  gcc/rust/checks/lints/rust-lint-marklive-base.h
! e99374757403f79aae5231fc0d87b635  gcc/rust/checks/lints/rust-lint-marklive.cc
! 9283bb219338fbb91d4a869971fb3b66  gcc/rust/checks/lints/rust-lint-marklive.h
  39d2087b62541ef24b107e4edf79b300  gcc/rust/checks/lints/rust-lint-scan-deadcode.h
  d03052efded34394a85b3e891c267781  gcc/rust/checks/lints/rust-lint-unused-var.cc
  56160d4d1424a0469b62ce3dc9ef7886  gcc/rust/checks/lints/rust-lint-unused-var.h
! d9ba42811edc4b0bb65f998512da84a2  gcc/rust/checks/lints/unused/rust-unused-checker.cc
! 8049d0480e30f3245e07e3c70e06e951  gcc/rust/checks/lints/unused/rust-unused-checker.h
  2acd4930a58466cf0221890b55f59e9f  gcc/rust/checks/lints/unused/rust-unused-collector.cc
  2f5987313b59ad90258eb2dde2f52fc8  gcc/rust/checks/lints/unused/rust-unused-collector.h
  747ddc08d2d075789af43eefe97866a1  gcc/rust/checks/lints/unused/rust-unused-context.cc
*************** bc1e13e9ae89f76aed9dae3ec38022a3  gcc/ru
*** 8396,8409 ****
  26c45cd5c08834c9402a74d292e4f355  gcc/rust/expand/rust-macro-builtins-helpers.h
  e78b00ce2aed15088c09bf10baaf4265  gcc/rust/expand/rust-macro-builtins-include.cc
  0abb5be76faa5a6027272206e2b99af8  gcc/rust/expand/rust-macro-builtins-location.cc
! fce01472b700f45117d7e279a8b7e817  gcc/rust/expand/rust-macro-builtins-log-debug.cc
  3056a545c61cc2eac5db256ee4360c75  gcc/rust/expand/rust-macro-builtins-offset-of.cc
  501956889da485e4cfda285aef1c1db5  gcc/rust/expand/rust-macro-builtins-test-bench.cc
  501956889da485e4cfda285aef1c1db5  gcc/rust/expand/rust-macro-builtins-trait.cc
  907f65abd4676d9291ef7277bcf5425a  gcc/rust/expand/rust-macro-builtins-utility.cc
  7c2ef170018db6c9883bce9f1dfa3277  gcc/rust/expand/rust-macro-builtins.cc
  6d3373d4b93bdf7e0fd90d0eec8de32e  gcc/rust/expand/rust-macro-builtins.h
! c13540dd0e96136221c06fdfad5fa580  gcc/rust/expand/rust-macro-expand.cc
  35cdae960da84ca7c1a9fe07fe04f854  gcc/rust/expand/rust-macro-expand.h
  6d4d133a734277207ddac6f68b43278f  gcc/rust/expand/rust-macro-invoc-lexer.cc
  c521d329f546dc2c3bda3e9182abc6fe  gcc/rust/expand/rust-macro-invoc-lexer.h
--- 8399,8412 ----
  26c45cd5c08834c9402a74d292e4f355  gcc/rust/expand/rust-macro-builtins-helpers.h
  e78b00ce2aed15088c09bf10baaf4265  gcc/rust/expand/rust-macro-builtins-include.cc
  0abb5be76faa5a6027272206e2b99af8  gcc/rust/expand/rust-macro-builtins-location.cc
! 8ad51a7a569ccf96c22bc1637a6f78e6  gcc/rust/expand/rust-macro-builtins-log-debug.cc
  3056a545c61cc2eac5db256ee4360c75  gcc/rust/expand/rust-macro-builtins-offset-of.cc
  501956889da485e4cfda285aef1c1db5  gcc/rust/expand/rust-macro-builtins-test-bench.cc
  501956889da485e4cfda285aef1c1db5  gcc/rust/expand/rust-macro-builtins-trait.cc
  907f65abd4676d9291ef7277bcf5425a  gcc/rust/expand/rust-macro-builtins-utility.cc
  7c2ef170018db6c9883bce9f1dfa3277  gcc/rust/expand/rust-macro-builtins.cc
  6d3373d4b93bdf7e0fd90d0eec8de32e  gcc/rust/expand/rust-macro-builtins.h
! 9313203fd2abd115c0612d597bdd5164  gcc/rust/expand/rust-macro-expand.cc
  35cdae960da84ca7c1a9fe07fe04f854  gcc/rust/expand/rust-macro-expand.h
  6d4d133a734277207ddac6f68b43278f  gcc/rust/expand/rust-macro-invoc-lexer.cc
  c521d329f546dc2c3bda3e9182abc6fe  gcc/rust/expand/rust-macro-invoc-lexer.h
*************** c043b006c21e87f8b82ba1334addb1af  gcc/ru
*** 8413,8423 ****
  9568c3923de491cd646cd621c423458a  gcc/rust/expand/rust-proc-macro.h
  fc268c6c7778ed7ae6989f7f0d879bdc  gcc/rust/expand/rust-token-tree-desugar.cc
  7320c7b564a470f189050f3109db3d38  gcc/rust/expand/rust-token-tree-desugar.h
! 9686a496a6b9df4da71cd91a9a596a96  gcc/rust/hir/rust-ast-lower-base.cc
  d2f3d1afd55e7cc89809f8d005d159cc  gcc/rust/hir/rust-ast-lower-base.h
  388369f5656aba1972999bdfa496f3b0  gcc/rust/hir/rust-ast-lower-block.h
  054c79e824e2ba6f9c8c4337571f8654  gcc/rust/hir/rust-ast-lower-enumitem.h
! 288088a4374abaea8149e6c3d116b2e4  gcc/rust/hir/rust-ast-lower-expr.cc
  26ed1e5107bba0bda3e49e0747aad013  gcc/rust/hir/rust-ast-lower-expr.h
  0a8a648826ab2d693d37d1ef6db621ac  gcc/rust/hir/rust-ast-lower-extern.h
  af24f6b3af1cef0fedb4b6e50d0859db  gcc/rust/hir/rust-ast-lower-format-args.cc
--- 8416,8426 ----
  9568c3923de491cd646cd621c423458a  gcc/rust/expand/rust-proc-macro.h
  fc268c6c7778ed7ae6989f7f0d879bdc  gcc/rust/expand/rust-token-tree-desugar.cc
  7320c7b564a470f189050f3109db3d38  gcc/rust/expand/rust-token-tree-desugar.h
! 299985d482a454def2078094552f7519  gcc/rust/hir/rust-ast-lower-base.cc
  d2f3d1afd55e7cc89809f8d005d159cc  gcc/rust/hir/rust-ast-lower-base.h
  388369f5656aba1972999bdfa496f3b0  gcc/rust/hir/rust-ast-lower-block.h
  054c79e824e2ba6f9c8c4337571f8654  gcc/rust/hir/rust-ast-lower-enumitem.h
! 99d3a85cf33d8b82085ad46ecc8232a2  gcc/rust/hir/rust-ast-lower-expr.cc
  26ed1e5107bba0bda3e49e0747aad013  gcc/rust/hir/rust-ast-lower-expr.h
  0a8a648826ab2d693d37d1ef6db621ac  gcc/rust/hir/rust-ast-lower-extern.h
  af24f6b3af1cef0fedb4b6e50d0859db  gcc/rust/hir/rust-ast-lower-format-args.cc
*************** edace426f0e4e28c4397a27133ae4cdd  gcc/ru
*** 8435,8455 ****
  117bb38f7e034f149d3f509bf5a3e24b  gcc/rust/hir/rust-ast-lower-type.h
  716ebfa87380ead8a45f8b513f494183  gcc/rust/hir/rust-ast-lower.cc
  c1ece1677d7766c75e292c36ec7d4d74  gcc/rust/hir/rust-ast-lower.h
! b3f934462bc485ce6a92229957587b2d  gcc/rust/hir/rust-hir-dump.cc
! 0e7e3cab911dea4b76dcbb3b282da69d  gcc/rust/hir/rust-hir-dump.h
  ad963c766284e28d038c5e5060f161f4  gcc/rust/hir/tree/rust-hir-attrs.h
  8875627643bf7c32d8c894b557d7b80e  gcc/rust/hir/tree/rust-hir-bound-abstract.h
  bb82f5f58359c8b7381de361d22141dd  gcc/rust/hir/tree/rust-hir-bound.h
! e8f36ea5922fc0698c18a2e7c67757db  gcc/rust/hir/tree/rust-hir-expr-abstract.h
! a853cdc6069a599fed623d914c219216  gcc/rust/hir/tree/rust-hir-expr.cc
! d69ed1dc862f9b0191138c8e62a6fb8e  gcc/rust/hir/tree/rust-hir-expr.h
! 0c65bbe0083a42d47006a772a150f2af  gcc/rust/hir/tree/rust-hir-full-decls.h
  c614345abe86d83c7906a4aacb42e8c8  gcc/rust/hir/tree/rust-hir-full.h
  2db585f68d3310e8eb15a16de2b77777  gcc/rust/hir/tree/rust-hir-generic-param.cc
  684c0083d527a7a3e995d31f50b66857  gcc/rust/hir/tree/rust-hir-generic-param.h
! 6bc83f0cace7c156c2ab5cde3e202ada  gcc/rust/hir/tree/rust-hir-item.cc
! 2d082f479d7e581cc2da342e572de33d  gcc/rust/hir/tree/rust-hir-item.h
! c8961f38906a566e92932d33a5fa86b0  gcc/rust/hir/tree/rust-hir-literal.h
  e4feee22ce999059cfd7e5e796d909ca  gcc/rust/hir/tree/rust-hir-node.h
  c20a4e6cca61f3ba191bcb83bc3687cb  gcc/rust/hir/tree/rust-hir-path.cc
  1d025ce94f68ea557cfdcee34cc65aed  gcc/rust/hir/tree/rust-hir-path.h
--- 8438,8458 ----
  117bb38f7e034f149d3f509bf5a3e24b  gcc/rust/hir/rust-ast-lower-type.h
  716ebfa87380ead8a45f8b513f494183  gcc/rust/hir/rust-ast-lower.cc
  c1ece1677d7766c75e292c36ec7d4d74  gcc/rust/hir/rust-ast-lower.h
! 703b3ea445876ff69e12d03bf1647b18  gcc/rust/hir/rust-hir-dump.cc
! 27f251b6e911eb08ee29af37e7a99fa2  gcc/rust/hir/rust-hir-dump.h
  ad963c766284e28d038c5e5060f161f4  gcc/rust/hir/tree/rust-hir-attrs.h
  8875627643bf7c32d8c894b557d7b80e  gcc/rust/hir/tree/rust-hir-bound-abstract.h
  bb82f5f58359c8b7381de361d22141dd  gcc/rust/hir/tree/rust-hir-bound.h
! ff9ccec7e68c1c74f91672448ae08f00  gcc/rust/hir/tree/rust-hir-expr-abstract.h
! 8fb701b9e291881b3db6eeffc1abc36e  gcc/rust/hir/tree/rust-hir-expr.cc
! 6084d72a97114cb1704cb1ac2c227425  gcc/rust/hir/tree/rust-hir-expr.h
! 57d3d67f6e89e64a268855dd5d38384f  gcc/rust/hir/tree/rust-hir-full-decls.h
  c614345abe86d83c7906a4aacb42e8c8  gcc/rust/hir/tree/rust-hir-full.h
  2db585f68d3310e8eb15a16de2b77777  gcc/rust/hir/tree/rust-hir-generic-param.cc
  684c0083d527a7a3e995d31f50b66857  gcc/rust/hir/tree/rust-hir-generic-param.h
! b59bd5346489dcfd719a4dfb457f2a04  gcc/rust/hir/tree/rust-hir-item.cc
! 5c8b74c05cafe7b24ab5fb8195d17f85  gcc/rust/hir/tree/rust-hir-item.h
! a218b47c37f64fd1a77af54fb98872be  gcc/rust/hir/tree/rust-hir-literal.h
  e4feee22ce999059cfd7e5e796d909ca  gcc/rust/hir/tree/rust-hir-node.h
  c20a4e6cca61f3ba191bcb83bc3687cb  gcc/rust/hir/tree/rust-hir-path.cc
  1d025ce94f68ea557cfdcee34cc65aed  gcc/rust/hir/tree/rust-hir-path.h
*************** fe7399a4085a4706a055e17069f80d80  gcc/ru
*** 8466,8483 ****
  ec54250775efe40c60973c75aa15aa8c  gcc/rust/hir/tree/rust-hir-type.h
  bba7760438da8adce1386d3e1176abd0  gcc/rust/hir/tree/rust-hir-visibility.h
  06acb5efb0cabb2e97bc67d95da8073e  gcc/rust/hir/tree/rust-hir-visitable.h
! 014ac187cd84944fce4caa0e1d257b34  gcc/rust/hir/tree/rust-hir-visitor.cc
! 2f5012f50779b2cc8f0110750a33b31d  gcc/rust/hir/tree/rust-hir-visitor.h
! 1fc2b5173d2337dfa63aa720ae2ca534  gcc/rust/hir/tree/rust-hir.cc
  740a251c7a11b6b3d56b5a01f9912174  gcc/rust/hir/tree/rust-hir.h
  f357dcf5713381e22c7036dfc40716f1  gcc/rust/lang-specs.h
! 3b09f754b9f5e335e0b3f68b8506fa4e  gcc/rust/lang.opt
  a11b51758cadbfbc20e4c2969af1aa85  gcc/rust/lang.opt.urls
  37d2c9999aa0dbb0df068a1ae29137fa  gcc/rust/lex/rust-input-source.h
! 2c49f1c9edc6d94f88f130e496ffca74  gcc/rust/lex/rust-lex.cc
! 419d2d90639924f8f79b1f4adae847d4  gcc/rust/lex/rust-lex.h
  30de1c873c0ade752ea45e73f5ea3b17  gcc/rust/lex/rust-token.cc
! 9409a794ae512a78c67b5d860d9ce516  gcc/rust/lex/rust-token.h
  fe40f8618a9f5a5f007bc1a81fe45d3a  gcc/rust/logo.png
  9d4ee6cff80ef10324f5e37df8012c86  gcc/rust/metadata/rust-export-metadata.cc
  305d124c003086dce48df448a934cc9a  gcc/rust/metadata/rust-export-metadata.h
--- 8469,8486 ----
  ec54250775efe40c60973c75aa15aa8c  gcc/rust/hir/tree/rust-hir-type.h
  bba7760438da8adce1386d3e1176abd0  gcc/rust/hir/tree/rust-hir-visibility.h
  06acb5efb0cabb2e97bc67d95da8073e  gcc/rust/hir/tree/rust-hir-visitable.h
! f3c80bf7aba0d97f5f4c90bd0c1142b0  gcc/rust/hir/tree/rust-hir-visitor.cc
! 5e125e89bcdf0da0ce072b944a341959  gcc/rust/hir/tree/rust-hir-visitor.h
! 64a8f70452d8b31ac2f2951137dbfc94  gcc/rust/hir/tree/rust-hir.cc
  740a251c7a11b6b3d56b5a01f9912174  gcc/rust/hir/tree/rust-hir.h
  f357dcf5713381e22c7036dfc40716f1  gcc/rust/lang-specs.h
! b14b6a7234ec547ec2b2d58157bbdf63  gcc/rust/lang.opt
  a11b51758cadbfbc20e4c2969af1aa85  gcc/rust/lang.opt.urls
  37d2c9999aa0dbb0df068a1ae29137fa  gcc/rust/lex/rust-input-source.h
! d47a2c7fab483484669b4700500d56ac  gcc/rust/lex/rust-lex.cc
! 476220dc3b895ea47aef1f6ef274138b  gcc/rust/lex/rust-lex.h
  30de1c873c0ade752ea45e73f5ea3b17  gcc/rust/lex/rust-token.cc
! 3c9bdf402ee62e4b19f6138aca32e5ef  gcc/rust/lex/rust-token.h
  fe40f8618a9f5a5f007bc1a81fe45d3a  gcc/rust/logo.png
  9d4ee6cff80ef10324f5e37df8012c86  gcc/rust/metadata/rust-export-metadata.cc
  305d124c003086dce48df448a934cc9a  gcc/rust/metadata/rust-export-metadata.h
*************** fe40f8618a9f5a5f007bc1a81fe45d3a  gcc/ru
*** 8488,8496 ****
  659356fda258855d3d26c1eff1e24215  gcc/rust/metadata/rust-imports.h
  28dcb6b3b1ae5727b2fc184e9b1b6af1  gcc/rust/parse/rust-cfg-parser.cc
  dcbc600defe89f418c72fb56de980c97  gcc/rust/parse/rust-cfg-parser.h
! 3883e0105a1a6129a0f9c6847420944c  gcc/rust/parse/rust-parse-error.h
! a150e926bd6e3d95e1006ef83ba5bc58  gcc/rust/parse/rust-parse-impl-attribute.hxx
! 8321cad7f1855724ca628a7f22b412e0  gcc/rust/parse/rust-parse-impl-expr.hxx
  7cd5687bb8dc329dfcb8bfbc99b456e1  gcc/rust/parse/rust-parse-impl-lexer.cc
  123b237f788df6a919268f90d2188425  gcc/rust/parse/rust-parse-impl-macro.cc
  9b0425456c50b968cfb7e36b64f0f362  gcc/rust/parse/rust-parse-impl-macro.hxx
--- 8491,8499 ----
  659356fda258855d3d26c1eff1e24215  gcc/rust/metadata/rust-imports.h
  28dcb6b3b1ae5727b2fc184e9b1b6af1  gcc/rust/parse/rust-cfg-parser.cc
  dcbc600defe89f418c72fb56de980c97  gcc/rust/parse/rust-cfg-parser.h
! b96c2416a684910ba3379e2ad432eab9  gcc/rust/parse/rust-parse-error.h
! 6ff36b289de3ac543ce413203993b31b  gcc/rust/parse/rust-parse-impl-attribute.hxx
! 254768f74f79e07a1ad4241c4ae44bbe  gcc/rust/parse/rust-parse-impl-expr.hxx
  7cd5687bb8dc329dfcb8bfbc99b456e1  gcc/rust/parse/rust-parse-impl-lexer.cc
  123b237f788df6a919268f90d2188425  gcc/rust/parse/rust-parse-impl-macro.cc
  9b0425456c50b968cfb7e36b64f0f362  gcc/rust/parse/rust-parse-impl-macro.hxx
*************** c29fa936687b478a9889f3380ee0df68  gcc/ru
*** 8501,8507 ****
  7ca01d6458538cc61e9d20571398e4a4  gcc/rust/parse/rust-parse-impl.hxx
  8188f5994da36c8911bcd5425a5ff10d  gcc/rust/parse/rust-parse-utils.h
  f1176cd92a1865135dd9db86c6251440  gcc/rust/parse/rust-parse.cc
! b9df75ef20fae98d8d709a88c2fb324b  gcc/rust/parse/rust-parse.h
  2f3ffa4e5b28a059fadd881c085fd620  gcc/rust/resolve/rust-ast-resolve.h
  277d79e5cb4a83612cd678de4bf79b72  gcc/rust/resolve/rust-default-resolver.cc
  c1e8fa39b2f3aa3b67138b3b8e820f81  gcc/rust/resolve/rust-default-resolver.h
--- 8504,8510 ----
  7ca01d6458538cc61e9d20571398e4a4  gcc/rust/parse/rust-parse-impl.hxx
  8188f5994da36c8911bcd5425a5ff10d  gcc/rust/parse/rust-parse-utils.h
  f1176cd92a1865135dd9db86c6251440  gcc/rust/parse/rust-parse.cc
! 82ff76987cc4d9e07837b7297e7fc2d8  gcc/rust/parse/rust-parse.h
  2f3ffa4e5b28a059fadd881c085fd620  gcc/rust/resolve/rust-ast-resolve.h
  277d79e5cb4a83612cd678de4bf79b72  gcc/rust/resolve/rust-default-resolver.cc
  c1e8fa39b2f3aa3b67138b3b8e820f81  gcc/rust/resolve/rust-default-resolver.h
*************** f1b5a4dd8502cad9b868c27742da2158  gcc/ru
*** 8537,8543 ****
  62c087c1db091a2df864b1a43c5fd9e6  gcc/rust/rust-diagnostics.cc
  dea40ce7b58a49100e39505b88e263f3  gcc/rust/rust-diagnostics.h
  8d2200eb879c079a79e9f591ca35a0fd  gcc/rust/rust-error-codes.def
! 034dcc2c4a9a5399e81c68e9d81ff1f5  gcc/rust/rust-gcc.cc
  c12b204f1861d78fad8a5d5a25dcdf02  gcc/rust/rust-gcc.h
  98868ac688f022d1ffa0454e4938afa8  gcc/rust/rust-lang.cc
  4aea929c2962c713b9ea3fbf167ddd43  gcc/rust/rust-linemap.cc
--- 8540,8546 ----
  62c087c1db091a2df864b1a43c5fd9e6  gcc/rust/rust-diagnostics.cc
  dea40ce7b58a49100e39505b88e263f3  gcc/rust/rust-diagnostics.h
  8d2200eb879c079a79e9f591ca35a0fd  gcc/rust/rust-error-codes.def
! e79dda671c8846d6e4ee47779c2abb48  gcc/rust/rust-gcc.cc
  c12b204f1861d78fad8a5d5a25dcdf02  gcc/rust/rust-gcc.h
  98868ac688f022d1ffa0454e4938afa8  gcc/rust/rust-lang.cc
  4aea929c2962c713b9ea3fbf167ddd43  gcc/rust/rust-linemap.cc
*************** f966663b99fc02f105b4754f595d32e7  gcc/ru
*** 8552,8558 ****
  9feaaf76d12ee651cd59309787cbd52f  gcc/rust/rust-target.def
  3f4bb199e04d4f4b918382ee52934a16  gcc/rust/rust-target.h
  30aa09a6d209964c42b611aec3579544  gcc/rust/rustspec.cc
! 316f2b3a6f984fc9e152a7ae3774018e  gcc/rust/typecheck/rust-autoderef.cc
  738b0583f504d6af621b4056e7a6cf46  gcc/rust/typecheck/rust-autoderef.h
  2d3ab1cc99132c30627dc3737d8e9617  gcc/rust/typecheck/rust-casts.cc
  2fe93d2ac0138bd6dff415c994bbecae  gcc/rust/typecheck/rust-casts.h
--- 8555,8561 ----
  9feaaf76d12ee651cd59309787cbd52f  gcc/rust/rust-target.def
  3f4bb199e04d4f4b918382ee52934a16  gcc/rust/rust-target.h
  30aa09a6d209964c42b611aec3579544  gcc/rust/rustspec.cc
! f30e6d5b3771d86519d21710271f9490  gcc/rust/typecheck/rust-autoderef.cc
  738b0583f504d6af621b4056e7a6cf46  gcc/rust/typecheck/rust-autoderef.h
  2d3ab1cc99132c30627dc3737d8e9617  gcc/rust/typecheck/rust-casts.cc
  2fe93d2ac0138bd6dff415c994bbecae  gcc/rust/typecheck/rust-casts.h
*************** e708bf40880717f48b423b3f44b0b50c  gcc/ru
*** 8560,8616 ****
  b617bf72ee9b08e950bc9e56934c85a0  gcc/rust/typecheck/rust-coercion.h
  a3cb470d289c68f292561181664234a6  gcc/rust/typecheck/rust-hir-dot-operator.cc
  4f31afb82fbc178266d06c01865240a5  gcc/rust/typecheck/rust-hir-dot-operator.h
  09005fc89e7dd8eaec69b873d7ae7644  gcc/rust/typecheck/rust-hir-inherent-impl-overlap.h
  16d217168d8b879a4d8618185810e28d  gcc/rust/typecheck/rust-hir-path-probe.cc
  6b760eef27171ffd12ad1f648c2b3c12  gcc/rust/typecheck/rust-hir-path-probe.h
! f9d17454f9a3f63a28b2f424a4b54cc0  gcc/rust/typecheck/rust-hir-trait-reference.cc
! 79b925c800d1503093e9a2c69c3637eb  gcc/rust/typecheck/rust-hir-trait-reference.h
! 4b0e55796567c44eda3ed1d107c754fa  gcc/rust/typecheck/rust-hir-trait-resolve.cc
  6b3c965d8fd17b77ca417b28093ea6e9  gcc/rust/typecheck/rust-hir-trait-resolve.h
  42513214f5c095b438bb64d1bd3abbce  gcc/rust/typecheck/rust-hir-type-bounds.h
! b747048be4fe6c22589cf2721606db7b  gcc/rust/typecheck/rust-hir-type-check-base.cc
! 0f4ab4291d61b503e020bfb9289414b9  gcc/rust/typecheck/rust-hir-type-check-base.h
  20b2a3219deccbf248614febf0b203b2  gcc/rust/typecheck/rust-hir-type-check-enumitem.cc
  f4277ce8c7f84fcad6d767403000509d  gcc/rust/typecheck/rust-hir-type-check-enumitem.h
! 4bc245105dcce921357b5ed74b75f06f  gcc/rust/typecheck/rust-hir-type-check-expr.cc
! 86eebb1a9fdc10e3b3db716be9495378  gcc/rust/typecheck/rust-hir-type-check-expr.h
! 39cfcc2c869492d61c7c298d5ad8d403  gcc/rust/typecheck/rust-hir-type-check-implitem.cc
  b5767f59e24736d3d41a91868444e0cc  gcc/rust/typecheck/rust-hir-type-check-implitem.h
! 23d9b140ae1b66aafbfbbca863e8da3a  gcc/rust/typecheck/rust-hir-type-check-intrinsic.cc
  813303c48158907defbfe6376dc10ea8  gcc/rust/typecheck/rust-hir-type-check-intrinsic.h
! 2b2f42e4a646f8fdacae31dd08690426  gcc/rust/typecheck/rust-hir-type-check-item.cc
! e1aa66b1024a0faf4498dfa85056d3b4  gcc/rust/typecheck/rust-hir-type-check-item.h
! b2325163791daf13aabdd314a3f52d43  gcc/rust/typecheck/rust-hir-type-check-path.cc
  4cf4ae988e8dfbd242bf7215e15c5b5f  gcc/rust/typecheck/rust-hir-type-check-pattern.cc
  bffd233b66e2222e22ce2d280c8d9f77  gcc/rust/typecheck/rust-hir-type-check-pattern.h
! 7e9f5a81fd8ee84014b141f4e73e1ae2  gcc/rust/typecheck/rust-hir-type-check-stmt.cc
  e51af9ea81d7c3d89682ee2c51ebaf03  gcc/rust/typecheck/rust-hir-type-check-stmt.h
  1ef7426e8ca96c599e36d794e6ab461c  gcc/rust/typecheck/rust-hir-type-check-struct-field.h
  6a9823eb94374a0ddaea576a26d1e899  gcc/rust/typecheck/rust-hir-type-check-struct.cc
! 7dc2d7c0251234467a82bc43546e6c26  gcc/rust/typecheck/rust-hir-type-check-type.cc
  6b42e54540f28a6b6cd0ffce4b704239  gcc/rust/typecheck/rust-hir-type-check-type.h
  37925f1522f5003083be6eafe53a56df  gcc/rust/typecheck/rust-hir-type-check.cc
! 961b7fe1e412ab3adf5c0d0944b2fd71  gcc/rust/typecheck/rust-hir-type-check.h
  134cb0bded72dc6de4562859c151a599  gcc/rust/typecheck/rust-substitution-mapper.cc
  60c4588af4ad75caffaf89afd32d15ec  gcc/rust/typecheck/rust-substitution-mapper.h
! 75b625fc99412f1c9a1e2d697562d7a3  gcc/rust/typecheck/rust-type-util.cc
! aab7e220ef86bcffdc6058162319300b  gcc/rust/typecheck/rust-type-util.h
! 1e48a43b6afcfbe467c649ac2f0a3624  gcc/rust/typecheck/rust-typecheck-context.cc
! 6776739078e81af1138b656938baf87f  gcc/rust/typecheck/rust-tyty-bounds.cc
! b605c99b67db44ca465e912ba50bd365  gcc/rust/typecheck/rust-tyty-call.cc
  b22bf0c3a5ffe96637f444175ee29bf7  gcc/rust/typecheck/rust-tyty-call.h
  a38838838003c6551067e8b34f582208  gcc/rust/typecheck/rust-tyty-region.h
! 5a37c2ea7b3b5d3cb6f68c0dcf5a02b4  gcc/rust/typecheck/rust-tyty-subst.cc
! bdc8e07793071547a189f536cd2df063  gcc/rust/typecheck/rust-tyty-subst.h
  7aa4e70b6d2bdeed13bff6274143e305  gcc/rust/typecheck/rust-tyty-util.cc
  6bb134414950f951dd57b91746458ca5  gcc/rust/typecheck/rust-tyty-util.h
  fcb02130c7b685b134f835bf25092f50  gcc/rust/typecheck/rust-tyty-variance-analysis-private.h
  c2f1571113d7181e240b84cfea3bdab5  gcc/rust/typecheck/rust-tyty-variance-analysis.cc
  d745c17e84fc1621534e477f38dac840  gcc/rust/typecheck/rust-tyty-variance-analysis.h
  ec0d5651a6bc455064668a10e90fd80d  gcc/rust/typecheck/rust-tyty-visitor.h
! faa8dbaa0da343990a1d17ccda0cc030  gcc/rust/typecheck/rust-tyty.cc
! 96b6883f3d84306d7899a211ae0b100a  gcc/rust/typecheck/rust-tyty.h
! aacae8d8512a124e932526c2a1030503  gcc/rust/typecheck/rust-unify.cc
  b9ed06a06760418d2aa26129aee56348  gcc/rust/typecheck/rust-unify.h
  b0eb9e41992d92a94e7be714ee66f9bc  gcc/rust/util/bi-map.h
  2293b9580441efb8471b45881435c279  gcc/rust/util/expected.h
--- 8563,8620 ----
  b617bf72ee9b08e950bc9e56934c85a0  gcc/rust/typecheck/rust-coercion.h
  a3cb470d289c68f292561181664234a6  gcc/rust/typecheck/rust-hir-dot-operator.cc
  4f31afb82fbc178266d06c01865240a5  gcc/rust/typecheck/rust-hir-dot-operator.h
+ aa119d61874dc231de66e857fe6c239e  gcc/rust/typecheck/rust-hir-impl-trait-context.h
  09005fc89e7dd8eaec69b873d7ae7644  gcc/rust/typecheck/rust-hir-inherent-impl-overlap.h
  16d217168d8b879a4d8618185810e28d  gcc/rust/typecheck/rust-hir-path-probe.cc
  6b760eef27171ffd12ad1f648c2b3c12  gcc/rust/typecheck/rust-hir-path-probe.h
! fbfc2299337e04f17543f919bc0e9434  gcc/rust/typecheck/rust-hir-trait-reference.cc
! b9bd70150f5d348cdb1af5ad907314db  gcc/rust/typecheck/rust-hir-trait-reference.h
! f7f3f11a2c10ba370d7e1f269eddfe36  gcc/rust/typecheck/rust-hir-trait-resolve.cc
  6b3c965d8fd17b77ca417b28093ea6e9  gcc/rust/typecheck/rust-hir-trait-resolve.h
  42513214f5c095b438bb64d1bd3abbce  gcc/rust/typecheck/rust-hir-type-bounds.h
! 87f256d7e50c75bb0de84c3327a5abe8  gcc/rust/typecheck/rust-hir-type-check-base.cc
! af5558d26879391d9f13e58a847d806a  gcc/rust/typecheck/rust-hir-type-check-base.h
  20b2a3219deccbf248614febf0b203b2  gcc/rust/typecheck/rust-hir-type-check-enumitem.cc
  f4277ce8c7f84fcad6d767403000509d  gcc/rust/typecheck/rust-hir-type-check-enumitem.h
! e003d680716fc098140d0d8e0c60d4a1  gcc/rust/typecheck/rust-hir-type-check-expr.cc
! 057259a6bc60e36e778d6d813927b949  gcc/rust/typecheck/rust-hir-type-check-expr.h
! bbae563742a278c894d5ece9c443b8e4  gcc/rust/typecheck/rust-hir-type-check-implitem.cc
  b5767f59e24736d3d41a91868444e0cc  gcc/rust/typecheck/rust-hir-type-check-implitem.h
! a8de42bbd0025b0c37a001ad69d0ab58  gcc/rust/typecheck/rust-hir-type-check-intrinsic.cc
  813303c48158907defbfe6376dc10ea8  gcc/rust/typecheck/rust-hir-type-check-intrinsic.h
! 570675f67045de09c04827d610261847  gcc/rust/typecheck/rust-hir-type-check-item.cc
! 49556d7c31cfc955ac43eae1b3d28843  gcc/rust/typecheck/rust-hir-type-check-item.h
! 3910d764dc745ee29661227cfdd80a75  gcc/rust/typecheck/rust-hir-type-check-path.cc
  4cf4ae988e8dfbd242bf7215e15c5b5f  gcc/rust/typecheck/rust-hir-type-check-pattern.cc
  bffd233b66e2222e22ce2d280c8d9f77  gcc/rust/typecheck/rust-hir-type-check-pattern.h
! c1827a379e879e48178846daa24ae4a0  gcc/rust/typecheck/rust-hir-type-check-stmt.cc
  e51af9ea81d7c3d89682ee2c51ebaf03  gcc/rust/typecheck/rust-hir-type-check-stmt.h
  1ef7426e8ca96c599e36d794e6ab461c  gcc/rust/typecheck/rust-hir-type-check-struct-field.h
  6a9823eb94374a0ddaea576a26d1e899  gcc/rust/typecheck/rust-hir-type-check-struct.cc
! 31ac12781de549e2286c7e9c4dae1f1d  gcc/rust/typecheck/rust-hir-type-check-type.cc
  6b42e54540f28a6b6cd0ffce4b704239  gcc/rust/typecheck/rust-hir-type-check-type.h
  37925f1522f5003083be6eafe53a56df  gcc/rust/typecheck/rust-hir-type-check.cc
! 4fc347a09001c225846af86aee3cd572  gcc/rust/typecheck/rust-hir-type-check.h
  134cb0bded72dc6de4562859c151a599  gcc/rust/typecheck/rust-substitution-mapper.cc
  60c4588af4ad75caffaf89afd32d15ec  gcc/rust/typecheck/rust-substitution-mapper.h
! fb5b3fb82aee8f0f6d0f11efb34678ce  gcc/rust/typecheck/rust-type-util.cc
! acd5e64d69c300fdbb9bd0c82db0b81d  gcc/rust/typecheck/rust-type-util.h
! 29c396b347c3fb26a2b47f9c0dd08bf8  gcc/rust/typecheck/rust-typecheck-context.cc
! 893161edaa32aeed6cc8970e99bff971  gcc/rust/typecheck/rust-tyty-bounds.cc
! 643d68e4e00b77fecc887fccd3723661  gcc/rust/typecheck/rust-tyty-call.cc
  b22bf0c3a5ffe96637f444175ee29bf7  gcc/rust/typecheck/rust-tyty-call.h
  a38838838003c6551067e8b34f582208  gcc/rust/typecheck/rust-tyty-region.h
! cbe24c53c93e7aceea31a2868c4b9d62  gcc/rust/typecheck/rust-tyty-subst.cc
! de9317db794d3bcb6fe1f525feff91ee  gcc/rust/typecheck/rust-tyty-subst.h
  7aa4e70b6d2bdeed13bff6274143e305  gcc/rust/typecheck/rust-tyty-util.cc
  6bb134414950f951dd57b91746458ca5  gcc/rust/typecheck/rust-tyty-util.h
  fcb02130c7b685b134f835bf25092f50  gcc/rust/typecheck/rust-tyty-variance-analysis-private.h
  c2f1571113d7181e240b84cfea3bdab5  gcc/rust/typecheck/rust-tyty-variance-analysis.cc
  d745c17e84fc1621534e477f38dac840  gcc/rust/typecheck/rust-tyty-variance-analysis.h
  ec0d5651a6bc455064668a10e90fd80d  gcc/rust/typecheck/rust-tyty-visitor.h
! 0328e588deb71638d14ab4b5b0a33d7f  gcc/rust/typecheck/rust-tyty.cc
! 6c23ab723455d72b9b4667124bcee587  gcc/rust/typecheck/rust-tyty.h
! 1127f52da389ce438f8840801a5f73fd  gcc/rust/typecheck/rust-unify.cc
  b9ed06a06760418d2aa26129aee56348  gcc/rust/typecheck/rust-unify.h
  b0eb9e41992d92a94e7be714ee66f9bc  gcc/rust/util/bi-map.h
  2293b9580441efb8471b45881435c279  gcc/rust/util/expected.h
*************** d87ca49f50adda86e874b992b90d3a0e  gcc/ru
*** 8640,8650 ****
  ec9022f2009acbe16b5fe13f505c50ca  gcc/rust/util/rust-hir-map.h
  2bf44e898c6773e49f63aa99ea22f2aa  gcc/rust/util/rust-identifier.h
  9da3d0bbd1f3b83f29287582aaadf7fd  gcc/rust/util/rust-inline-visitor.h
! b8d060da12f3aa72ca10666d27a2388d  gcc/rust/util/rust-intrinsic-values.h
  fcb0ef58bd45344a4c08af0945cd41b9  gcc/rust/util/rust-keyword-values.cc
  3c394a316c15589123f05ad6573d7e91  gcc/rust/util/rust-keyword-values.h
! f36834540fb05090a2c12fffeeb7861d  gcc/rust/util/rust-lang-item.cc
! 5e4a9fc2495ef469623dc0bb8734706a  gcc/rust/util/rust-lang-item.h
  8ce3ff7da4a1241c73c997a055b4b790  gcc/rust/util/rust-mapping-common.h
  25026158bc1a032172cd56fdc7d1a314  gcc/rust/util/rust-operators.h
  bdaeeceba08beadb8340194c926569d7  gcc/rust/util/rust-punycode.cc
--- 8644,8654 ----
  ec9022f2009acbe16b5fe13f505c50ca  gcc/rust/util/rust-hir-map.h
  2bf44e898c6773e49f63aa99ea22f2aa  gcc/rust/util/rust-identifier.h
  9da3d0bbd1f3b83f29287582aaadf7fd  gcc/rust/util/rust-inline-visitor.h
! 8d086304e2f2b5093885dc447148e628  gcc/rust/util/rust-intrinsic-values.h
  fcb0ef58bd45344a4c08af0945cd41b9  gcc/rust/util/rust-keyword-values.cc
  3c394a316c15589123f05ad6573d7e91  gcc/rust/util/rust-keyword-values.h
! 655d041c45e424ebd6bade565d31722a  gcc/rust/util/rust-lang-item.cc
! c2b1194a08616739cf69ac9571225e1c  gcc/rust/util/rust-lang-item.h
  8ce3ff7da4a1241c73c997a055b4b790  gcc/rust/util/rust-mapping-common.h
  25026158bc1a032172cd56fdc7d1a314  gcc/rust/util/rust-operators.h
  bdaeeceba08beadb8340194c926569d7  gcc/rust/util/rust-punycode.cc
*************** a92419791c8e8d842c6ef029d4537463  gcc/sa
*** 8670,8676 ****
  017ab43b4cc0ef03de29f6129f0423e0  gcc/sched-rgn.cc
  ebd9e973e52eba392362d3f86683d9fc  gcc/sel-sched-dump.cc
  3b84f3b6b449c883935ef347892e770c  gcc/sel-sched-dump.h
! 14833ad25c22e7c51f5cb3c7b81f5d8f  gcc/sel-sched-ir.cc
  baa6f0b7fef121981bc56afcedfd3650  gcc/sel-sched-ir.h
  76a5b95f63d4aa91c53a57798b0ed1da  gcc/sel-sched.cc
  c8e14bcadd8fd37034a186ff2eed497c  gcc/sel-sched.h
--- 8674,8680 ----
  017ab43b4cc0ef03de29f6129f0423e0  gcc/sched-rgn.cc
  ebd9e973e52eba392362d3f86683d9fc  gcc/sel-sched-dump.cc
  3b84f3b6b449c883935ef347892e770c  gcc/sel-sched-dump.h
! 8d7914fa69ec766d9aef5bead60d6624  gcc/sel-sched-ir.cc
  baa6f0b7fef121981bc56afcedfd3650  gcc/sel-sched-ir.h
  76a5b95f63d4aa91c53a57798b0ed1da  gcc/sel-sched.cc
  c8e14bcadd8fd37034a186ff2eed497c  gcc/sel-sched.h
*************** e1899978827cfd0d1570e61a7c30d94a  gcc/sy
*** 8734,8740 ****
  9f6e7e9cd1feccb68765288812751504  gcc/symtab-thunks.h
  5fbb8f16cb7ed8911c95fa1f5b8139ea  gcc/symtab.cc
  aa4c1d56c6974e4059ea89c2e315974f  gcc/sync-builtins.def
! cffe3ad55affa7644cec5f531914557b  gcc/system.h
  53f5e973b2158c80ba4a144b03350c73  gcc/target-def.h
  d294651bcc46af1abb89e48cd851fd40  gcc/target-globals.cc
  fe7cc01d7dd25103bc61ab1a33dd54dc  gcc/target-globals.h
--- 8738,8744 ----
  9f6e7e9cd1feccb68765288812751504  gcc/symtab-thunks.h
  5fbb8f16cb7ed8911c95fa1f5b8139ea  gcc/symtab.cc
  aa4c1d56c6974e4059ea89c2e315974f  gcc/sync-builtins.def
! adfefb6eb57cecbd7b50c2fcfc72426a  gcc/system.h
  53f5e973b2158c80ba4a144b03350c73  gcc/target-def.h
  d294651bcc46af1abb89e48cd851fd40  gcc/target-globals.cc
  fe7cc01d7dd25103bc61ab1a33dd54dc  gcc/target-globals.h
*************** f24751f278bee1ac8dc861467d9f96a3  gcc/ta
*** 8745,8751 ****
  8dfc7c2c4f5fcc8bae4e56f4908de008  gcc/targhooks.cc
  dcedef5930550e30cc9ea611bbffde5b  gcc/targhooks.h
  f39fcaa8197187283ccfed40107b426d  gcc/testsuite/.gitattributes
! d0c569babef18a8cd56d6284416c62fa  gcc/testsuite/ChangeLog
  47e8e29b649ead73b8a1e4797da470ed  gcc/testsuite/ChangeLog-1993-2007
  35198a9e4fd31b935de8789faabf3351  gcc/testsuite/ChangeLog-2008
  0f19934540750356d1b91595cebfd9a8  gcc/testsuite/ChangeLog-2009
--- 8749,8755 ----
  8dfc7c2c4f5fcc8bae4e56f4908de008  gcc/targhooks.cc
  dcedef5930550e30cc9ea611bbffde5b  gcc/targhooks.h
  f39fcaa8197187283ccfed40107b426d  gcc/testsuite/.gitattributes
! b3334b03cd548059f0f9f80742bab54a  gcc/testsuite/ChangeLog
  47e8e29b649ead73b8a1e4797da470ed  gcc/testsuite/ChangeLog-1993-2007
  35198a9e4fd31b935de8789faabf3351  gcc/testsuite/ChangeLog-2008
  0f19934540750356d1b91595cebfd9a8  gcc/testsuite/ChangeLog-2009
*************** b057ecd7a4beaa9561fa8fa6d3f3128f  gcc/te
*** 19810,19816 ****
  ad68611dd933bed25a8c937612a58830  gcc/testsuite/c-c++-common/gomp/for-5.c
  950c6183fde386cc5d3fa35c2805eeb0  gcc/testsuite/c-c++-common/gomp/for-6.c
  b9f70a44108d3410396c88c5623b3919  gcc/testsuite/c-c++-common/gomp/for-7.c
! d402544a65b18439a406977ce1ca1a9b  gcc/testsuite/c-c++-common/gomp/for-8.c
  65d6afb7dedb6ef49728ff7a0f9fe0b5  gcc/testsuite/c-c++-common/gomp/groupprivate-1.c
  1216c6524ff3a9bfcf178bb37b9b3961  gcc/testsuite/c-c++-common/gomp/has-include-1.c
  23583f36afaee374633de54a6b57a3e6  gcc/testsuite/c-c++-common/gomp/if-1.c
--- 19814,19823 ----
  ad68611dd933bed25a8c937612a58830  gcc/testsuite/c-c++-common/gomp/for-5.c
  950c6183fde386cc5d3fa35c2805eeb0  gcc/testsuite/c-c++-common/gomp/for-6.c
  b9f70a44108d3410396c88c5623b3919  gcc/testsuite/c-c++-common/gomp/for-7.c
! bf86d08ac1f862841d6ee39b4493443c  gcc/testsuite/c-c++-common/gomp/for-static-1.c
! d0a4060dbc0ed126c6e86ea5d4bcf6ff  gcc/testsuite/c-c++-common/gomp/for-static-2.c
! 08af212451cb918f9b4df2f1205a2462  gcc/testsuite/c-c++-common/gomp/for-static-3.c
! 775485bf3a472f203814fe0952fc690f  gcc/testsuite/c-c++-common/gomp/for-static.h
  65d6afb7dedb6ef49728ff7a0f9fe0b5  gcc/testsuite/c-c++-common/gomp/groupprivate-1.c
  1216c6524ff3a9bfcf178bb37b9b3961  gcc/testsuite/c-c++-common/gomp/has-include-1.c
  23583f36afaee374633de54a6b57a3e6  gcc/testsuite/c-c++-common/gomp/if-1.c
*************** d95e5beb9a42582e039445cc2f91e1c7  gcc/te
*** 19870,19877 ****
  69ff77fd1a974b1db18e0d998cb08b86  gcc/testsuite/c-c++-common/gomp/map-incomplete-type.c
  5b565c65a09b9269ab6bc6f30d6b419a  gcc/testsuite/c-c++-common/gomp/map-multi-1.c
  e14d7592233bc253d3d0251ac861eb79  gcc/testsuite/c-c++-common/gomp/map-multi-2.c
! 7db789f1af5210656280ac2426ac10bd  gcc/testsuite/c-c++-common/gomp/masked-1.c
  c8a1a97bda2a787e6f55c68563e256b6  gcc/testsuite/c-c++-common/gomp/masked-2.c
  cfaa12085558b78e5edbdb4a338479d2  gcc/testsuite/c-c++-common/gomp/masked-combined-1.c
  6e3cc2570637ae982148840ff511645f  gcc/testsuite/c-c++-common/gomp/masked-combined-2.c
  33991433a8d5fe2997502d08681126b9  gcc/testsuite/c-c++-common/gomp/master-combined-1.c
--- 19877,19885 ----
  69ff77fd1a974b1db18e0d998cb08b86  gcc/testsuite/c-c++-common/gomp/map-incomplete-type.c
  5b565c65a09b9269ab6bc6f30d6b419a  gcc/testsuite/c-c++-common/gomp/map-multi-1.c
  e14d7592233bc253d3d0251ac861eb79  gcc/testsuite/c-c++-common/gomp/map-multi-2.c
! 6d78e699a93d27aa0ffb93ff6eee5598  gcc/testsuite/c-c++-common/gomp/masked-1.c
  c8a1a97bda2a787e6f55c68563e256b6  gcc/testsuite/c-c++-common/gomp/masked-2.c
+ c9e2879a03888141786275a8f7c0fa18  gcc/testsuite/c-c++-common/gomp/masked-3.c
  cfaa12085558b78e5edbdb4a338479d2  gcc/testsuite/c-c++-common/gomp/masked-combined-1.c
  6e3cc2570637ae982148840ff511645f  gcc/testsuite/c-c++-common/gomp/masked-combined-2.c
  33991433a8d5fe2997502d08681126b9  gcc/testsuite/c-c++-common/gomp/master-combined-1.c
*************** a8cae7afccfdaf5c55701d1fd623cbae  gcc/te
*** 19906,19911 ****
--- 19914,19921 ----
  835e56c803ebf6e088e108546f2f4ccf  gcc/testsuite/c-c++-common/gomp/omp_get_num_devices_initial_device.c
  6edff4d259a25d0cbbd6bd788efd47b2  gcc/testsuite/c-c++-common/gomp/ompx-1.c
  a53bfb3d3f3e9c540d6b019fcc527fa4  gcc/testsuite/c-c++-common/gomp/ompx-2.c
+ f6c6b11558601b1982886ec59c949a8a  gcc/testsuite/c-c++-common/gomp/openmp-ompt-1.c
+ 70414c0284deff03ad4abf54074f19c2  gcc/testsuite/c-c++-common/gomp/openmp-ompt-2.c
  a5b411651a6f93c5cf3ce9b7c306c2e4  gcc/testsuite/c-c++-common/gomp/order-1.c
  dde98055342a9a3a28134ae4aa3487f1  gcc/testsuite/c-c++-common/gomp/order-2.c
  db900e16f622568df37b1e202fd25b9f  gcc/testsuite/c-c++-common/gomp/order-3.c
*************** dee5af747bd0ddc9371dcb5f4acebedc  gcc/te
*** 20082,20087 ****
--- 20092,20098 ----
  46e92b35d2398a842688290ab9b4d326  gcc/testsuite/c-c++-common/gomp/simd7.c
  cbcc4bef361026a7cc530337842d4576  gcc/testsuite/c-c++-common/gomp/simd8.c
  4763c84e6c50d72fa161297e3be84c0c  gcc/testsuite/c-c++-common/gomp/single1.c
+ eb8749ae34c7b073185cb9fdc4e9943f  gcc/testsuite/c-c++-common/gomp/single2.c
  522837eb6e38eb50d487b2abe0b24c55  gcc/testsuite/c-c++-common/gomp/sink-1.c
  e38699fc95591670923b1df8841251b7  gcc/testsuite/c-c++-common/gomp/sink-2.c
  7aac68734460bf454d498a860bb03ca9  gcc/testsuite/c-c++-common/gomp/sink-3.c
*************** c7d2dcdde3dbe4940d1c087ffdb32959  gcc/te
*** 20437,20446 ****
--- 20448,20462 ----
  a83a3dfeb8c2e989fe3570117b3eacd4  gcc/testsuite/c-c++-common/pr56566.c
  e257567d3e45108aa92c38c2756f8082  gcc/testsuite/c-c++-common/pr56607.c
  93039c44a01737b0dc6ca34eeea375fc  gcc/testsuite/c-c++-common/pr57371-1.c
+ 2ab461c6f19d451ddb351e598dc132b7  gcc/testsuite/c-c++-common/pr57371-10.c
  88910d91b58adeb8bf74efa42b6a6a9d  gcc/testsuite/c-c++-common/pr57371-2.c
  d7d4bbcfc6cb3a970e0d8d14ece542b8  gcc/testsuite/c-c++-common/pr57371-3.c
  225cae5a5327ca74e9c6367b5c8566ce  gcc/testsuite/c-c++-common/pr57371-4.c
  6b5850b1e3f24754eb733f4abecc5761  gcc/testsuite/c-c++-common/pr57371-5.c
+ fc1bfbbd6c2c1675aab8f6e91796cb80  gcc/testsuite/c-c++-common/pr57371-6.c
+ c12f66aa6e2070d1ef92e4543db1396a  gcc/testsuite/c-c++-common/pr57371-7.c
+ bda1a6a5bbfacc1748e40e98e79b2b1d  gcc/testsuite/c-c++-common/pr57371-8.c
+ 545409123bb75786effb1fed18471927  gcc/testsuite/c-c++-common/pr57371-9.c
  d38efef14d0ab2c49efc359e81d86d1c  gcc/testsuite/c-c++-common/pr57653-2.c
  68b329da9893e34099c7d8ad5cb9c940  gcc/testsuite/c-c++-common/pr57653-2.h
  96f621870e8a9d49a5339944dcf7beca  gcc/testsuite/c-c++-common/pr57653.c
*************** f93a38458ffd080de21f521e1faae4f3  gcc/te
*** 21320,21329 ****
  f8d2ab98ca2b042e089c9758ae3a2b30  gcc/testsuite/cobol.dg/group2/Alphanumeric_MOVE_with_truncation.cob
  ce7bdbfa73ff92ed34eac3534df66e86  gcc/testsuite/cobol.dg/group2/Alphanumeric_MOVE_with_truncation.out
  c7cf12c0e90e1d426210bb32a56623a3  gcc/testsuite/cobol.dg/group2/Alphanumeric_and_binary_numeric.cob
! 5a8fd329eb7fcb844e4e4e7969944359  gcc/testsuite/cobol.dg/group2/Assorted_SPECIAL-NAMES_CLASS.cob
  38ee927ae48950a5b4e104d641a25073  gcc/testsuite/cobol.dg/group2/Assorted_SPECIAL-NAMES_CLASS.out
! d531c8871c5b790a55a152c695a84c64  gcc/testsuite/cobol.dg/group2/BINARY_and_COMP-5.cob
! 02a724680157560a26914ad3e85206a0  gcc/testsuite/cobol.dg/group2/BINARY_and_COMP-5.out
  738b5e86f6b162a7f4b44d0ecfedf06b  gcc/testsuite/cobol.dg/group2/BLANK_WHEN_ZERO.cob
  b13823e6ef73b208ab307bb3612a5ce8  gcc/testsuite/cobol.dg/group2/BLANK_WHEN_ZERO.out
  a4281300968e70731988a9ad41094250  gcc/testsuite/cobol.dg/group2/CALL_with_OCCURS_DEPENDING_ON.cob
--- 21336,21345 ----
  f8d2ab98ca2b042e089c9758ae3a2b30  gcc/testsuite/cobol.dg/group2/Alphanumeric_MOVE_with_truncation.cob
  ce7bdbfa73ff92ed34eac3534df66e86  gcc/testsuite/cobol.dg/group2/Alphanumeric_MOVE_with_truncation.out
  c7cf12c0e90e1d426210bb32a56623a3  gcc/testsuite/cobol.dg/group2/Alphanumeric_and_binary_numeric.cob
! d3a2d64ea7cf7c20ebce56ae49bc8a0e  gcc/testsuite/cobol.dg/group2/Assorted_SPECIAL-NAMES_CLASS.cob
  38ee927ae48950a5b4e104d641a25073  gcc/testsuite/cobol.dg/group2/Assorted_SPECIAL-NAMES_CLASS.out
! c1b0e0d013761e13d45012b5b09a2b40  gcc/testsuite/cobol.dg/group2/BINARY_and_COMP-5__little-endian_.cob
! 02a724680157560a26914ad3e85206a0  gcc/testsuite/cobol.dg/group2/BINARY_and_COMP-5__little-endian_.out
  738b5e86f6b162a7f4b44d0ecfedf06b  gcc/testsuite/cobol.dg/group2/BLANK_WHEN_ZERO.cob
  b13823e6ef73b208ab307bb3612a5ce8  gcc/testsuite/cobol.dg/group2/BLANK_WHEN_ZERO.out
  a4281300968e70731988a9ad41094250  gcc/testsuite/cobol.dg/group2/CALL_with_OCCURS_DEPENDING_ON.cob
*************** c04168a2acd1bc44234f01ab517cfb97  gcc/te
*** 21389,21394 ****
--- 21405,21412 ----
  c5cf04eb9938774927bb9fc355958f13  gcc/testsuite/cobol.dg/group2/CURRENCY_SIGN_WITH_PICTURE_SYMBOL.cob
  40ee71e6000b91748c4cd8f864a83cd2  gcc/testsuite/cobol.dg/group2/CURRENCY_SIGN_WITH_PICTURE_SYMBOL.out
  c82d0437d4c0c081e1f9b6f140c959ab  gcc/testsuite/cobol.dg/group2/Check_for_equality_of_COMP-1___COMP-2.cob
+ ea69084895ac0dffcd63d66c4bffb8a2  gcc/testsuite/cobol.dg/group2/Checking_IS_NUMERIC.cob
+ b313fa1d4d9634a6bf60b8e865ae818a  gcc/testsuite/cobol.dg/group2/Checking_IS_NUMERIC.out
  e3cc25d3e34c98b2bc1d9014612f3464  gcc/testsuite/cobol.dg/group2/Class_check_with_reference_modification.cob
  1069d190f99cdcf2c1d30611324cfd7e  gcc/testsuite/cobol.dg/group2/Clear_negative_zero_after_truncated_MOVE.cob
  e065da0e830e96a810ac77c8b9ede312  gcc/testsuite/cobol.dg/group2/Clear_negative_zero_after_truncated_MOVE.out
*************** f7e4a3f2c5c85ddeb645aecc5792a186  gcc/te
*** 21399,21406 ****
  33011658a399a6a9be5c37899eb4a306  gcc/testsuite/cobol.dg/group2/Complex_EVALUATE__2_.out
  4885ad79dbcacea5aefc7b3c06a2e6a6  gcc/testsuite/cobol.dg/group2/Complex_HEX__VALUE_and_MOVE_-_ASCII_EBCDIC.cob
  bc9c3feaf3b8988ac971cb14aa62f9b4  gcc/testsuite/cobol.dg/group2/Complex_HEX__VALUE_and_MOVE_-_ASCII_EBCDIC.out
- 6312604cdb1d5dce073186bdfd23ba0e  gcc/testsuite/cobol.dg/group2/Complex_HEX__VALUE_and_MOVE_-_UTF-16.cob
- bc9c3feaf3b8988ac971cb14aa62f9b4  gcc/testsuite/cobol.dg/group2/Complex_HEX__VALUE_and_MOVE_-_UTF-16.out
  0343efd58f9da12b239e6d571691602b  gcc/testsuite/cobol.dg/group2/Complex_IF.cob
  441e3a4f6a2da5b2f89b7f633fa3ad23  gcc/testsuite/cobol.dg/group2/Complex_IF.out
  af1c1b610f0cfd57ea5f2dac953cf214  gcc/testsuite/cobol.dg/group2/Complex_INITIALIZE_with_nested_tables__1_.cob
--- 21417,21422 ----
*************** fd9430749a440e568057ebda5d8b3a14  gcc/te
*** 21442,21449 ****
  20c0a856e7157356b21d2254ce9c991d  gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__5_.out
  940e9b1d2bcfa23e1d9f1ac45358b063  gcc/testsuite/cobol.dg/group2/DISPLAY_IBM-formatted_COMP-1_and_COMP-2.cob
  036488394c4c2eeadebd0be4e1710aae  gcc/testsuite/cobol.dg/group2/DISPLAY_IBM-formatted_COMP-1_and_COMP-2.out
- ddb89e1453f5f25f7689e6e79e35cfc2  gcc/testsuite/cobol.dg/group2/DISPLAY__Sign_ASCII.cob
- a291b1d076aedcf6c1d91ee357c265bc  gcc/testsuite/cobol.dg/group2/DISPLAY__Sign_ASCII.out
  2b8c1c147780c9004f2db3e97f269683  gcc/testsuite/cobol.dg/group2/DISPLAY__Sign_ASCII__2_.cob
  bed9d76ec2e8c2e7c89c91c0ce83ccdd  gcc/testsuite/cobol.dg/group2/DISPLAY__Sign_ASCII__2_.out
  04241cac92aea6609cadd8cd6985a09a  gcc/testsuite/cobol.dg/group2/DISPLAY_and_assignment_NumericDisplay.cob
--- 21458,21463 ----
*************** d2d4e47ab4b15463020b17f88d268eca  gcc/te
*** 21634,21640 ****
  7f4b9d2fe08f4f6a1753e62ce1e991b3  gcc/testsuite/cobol.dg/group2/FUNCTION_TEST-NUMVAL.cob
  8184043b22e82ab95d6fa5814d9f6358  gcc/testsuite/cobol.dg/group2/FUNCTION_TRIM.cob
  0d1ed3ff5755c0ce7a5b5d081463c10f  gcc/testsuite/cobol.dg/group2/FUNCTION_TRIM.out
! 490d9d7ce2642968f4f81a80a710f879  gcc/testsuite/cobol.dg/group2/FUNCTION_TRIM_with_NATIONAL_characters.cob
  9801747a0c4835b6dd61b6a9197476f8  gcc/testsuite/cobol.dg/group2/FUNCTION_TRIM_with_NATIONAL_characters.out
  8cbdab29ce68580752d6208cf6c591f8  gcc/testsuite/cobol.dg/group2/FUNCTION_TRIM_with_extra_characters.cob
  c99535d636ed164a9033829911fee4b1  gcc/testsuite/cobol.dg/group2/FUNCTION_TRIM_with_extra_characters.out
--- 21648,21654 ----
  7f4b9d2fe08f4f6a1753e62ce1e991b3  gcc/testsuite/cobol.dg/group2/FUNCTION_TEST-NUMVAL.cob
  8184043b22e82ab95d6fa5814d9f6358  gcc/testsuite/cobol.dg/group2/FUNCTION_TRIM.cob
  0d1ed3ff5755c0ce7a5b5d081463c10f  gcc/testsuite/cobol.dg/group2/FUNCTION_TRIM.out
! fa438b01c0c1a9575c39e0ffa9589ef4  gcc/testsuite/cobol.dg/group2/FUNCTION_TRIM_with_NATIONAL_characters.cob
  9801747a0c4835b6dd61b6a9197476f8  gcc/testsuite/cobol.dg/group2/FUNCTION_TRIM_with_NATIONAL_characters.out
  8cbdab29ce68580752d6208cf6c591f8  gcc/testsuite/cobol.dg/group2/FUNCTION_TRIM_with_extra_characters.cob
  c99535d636ed164a9033829911fee4b1  gcc/testsuite/cobol.dg/group2/FUNCTION_TRIM_with_extra_characters.out
*************** ed915c803fb3c38dcccb14bab74114d6  gcc/te
*** 21670,21676 ****
  5dad2cfa3d0898b583ca8152caae19ec  gcc/testsuite/cobol.dg/group2/GLOBAL_at_lower_level.out
  8c4d9fb8e8480e8eab3c85a8913fbdd2  gcc/testsuite/cobol.dg/group2/GLOBAL_at_same_level.cob
  e067afbb5887269d86386f7435562a4c  gcc/testsuite/cobol.dg/group2/GLOBAL_at_same_level.out
! 51de84c35bfcd3ed9f8da573360da157  gcc/testsuite/cobol.dg/group2/Hexadecimal_literal.cob
  b481bb58b296a62d744d3006d0156f61  gcc/testsuite/cobol.dg/group2/Hexadecimal_literal.out
  ff665234d4e228729254d9f9088ddf64  gcc/testsuite/cobol.dg/group2/IBM_dialect_COMP_redefined_by_POINTER_as_64-bit.cob
  6edee3c216c6b5bc598396e40997f632  gcc/testsuite/cobol.dg/group2/IBM_dialect_COMP_redefined_by_POINTER_as_64-bit.out
--- 21684,21690 ----
  5dad2cfa3d0898b583ca8152caae19ec  gcc/testsuite/cobol.dg/group2/GLOBAL_at_lower_level.out
  8c4d9fb8e8480e8eab3c85a8913fbdd2  gcc/testsuite/cobol.dg/group2/GLOBAL_at_same_level.cob
  e067afbb5887269d86386f7435562a4c  gcc/testsuite/cobol.dg/group2/GLOBAL_at_same_level.out
! a33fb70b2a85cb6777510beae8280ea0  gcc/testsuite/cobol.dg/group2/Hexadecimal_literal.cob
  b481bb58b296a62d744d3006d0156f61  gcc/testsuite/cobol.dg/group2/Hexadecimal_literal.out
  ff665234d4e228729254d9f9088ddf64  gcc/testsuite/cobol.dg/group2/IBM_dialect_COMP_redefined_by_POINTER_as_64-bit.cob
  6edee3c216c6b5bc598396e40997f632  gcc/testsuite/cobol.dg/group2/IBM_dialect_COMP_redefined_by_POINTER_as_64-bit.out
*************** e2ca5a51832b2c1ebc365309aad634be  gcc/te
*** 21797,21807 ****
  4138538135757cec647177acf7df8383  gcc/testsuite/cobol.dg/group2/Named_conditionals_-_fixed__float__and_alphabetic.out
  f34c9056a1d17e04c048e0d33e3693a8  gcc/testsuite/cobol.dg/group2/Nested_PERFORM.cob
  1ab98bfe6cbef69dac2f301c94c9c93b  gcc/testsuite/cobol.dg/group2/Nested_PERFORM.out
! 74218fe0c6b8b43e4de4bc3003808fd7  gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__1_.cob
! 1ca492b7a58e4937f96a4f5658dd5109  gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__1_.out
! 740fb7081d5c02c36fa612769882980d  gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__2_.cob
! 1ca492b7a58e4937f96a4f5658dd5109  gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__2_.out
  12c0eded4796b227fdba9f06f2750ed7  gcc/testsuite/cobol.dg/group2/Non-overflow_after_overflow.cob
  5161d2856532911f6000decbf4a94043  gcc/testsuite/cobol.dg/group2/Numeric_operations__1_.cob
  98fd8157724545e43c15a0a98294b8af  gcc/testsuite/cobol.dg/group2/Numeric_operations__2_.cob
  28a8c6a41a47ecd245f6d919206e8f3c  gcc/testsuite/cobol.dg/group2/Numeric_operations__3_.cob
--- 21811,21825 ----
  4138538135757cec647177acf7df8383  gcc/testsuite/cobol.dg/group2/Named_conditionals_-_fixed__float__and_alphabetic.out
  f34c9056a1d17e04c048e0d33e3693a8  gcc/testsuite/cobol.dg/group2/Nested_PERFORM.cob
  1ab98bfe6cbef69dac2f301c94c9c93b  gcc/testsuite/cobol.dg/group2/Nested_PERFORM.out
! 56379eab8403d9f47ee5f2947aa88b44  gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric-display__1_.cob
! 1ca492b7a58e4937f96a4f5658dd5109  gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric-display__1_.out
! 84a5fcef2430fb39d33173ad3cc13163  gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_packed_decimal.cob
! 37160c00bd052eae417949ffa92a5e46  gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_packed_decimal.out
  12c0eded4796b227fdba9f06f2750ed7  gcc/testsuite/cobol.dg/group2/Non-overflow_after_overflow.cob
+ 83c142517af8195a9905769f2db20393  gcc/testsuite/cobol.dg/group2/Numeric-display_sign_encoding__2_.cob
+ 4157abccda024c5a03781e916a6aa138  gcc/testsuite/cobol.dg/group2/Numeric-display_sign_encoding__2_.out
+ 3a1196d642d197f7bd827f8a4083e01f  gcc/testsuite/cobol.dg/group2/Numeric-display_sign_encoding_sanity_check.cob
+ 03f8bca238c36ea8d70117b0b19bf038  gcc/testsuite/cobol.dg/group2/Numeric-display_sign_encoding_sanity_check.out
  5161d2856532911f6000decbf4a94043  gcc/testsuite/cobol.dg/group2/Numeric_operations__1_.cob
  98fd8157724545e43c15a0a98294b8af  gcc/testsuite/cobol.dg/group2/Numeric_operations__2_.cob
  28a8c6a41a47ecd245f6d919206e8f3c  gcc/testsuite/cobol.dg/group2/Numeric_operations__3_.cob
*************** e01cd9a3d1291517c38ded7e69c286db  gcc/te
*** 21826,21833 ****
  619cf3092002e36ac56fc9b86c476063  gcc/testsuite/cobol.dg/group2/PACKED-DECIMAL_arithmetic.out
  6dd4161b6a5683af405667780e77b3b8  gcc/testsuite/cobol.dg/group2/PACKED-DECIMAL_basic_comp-3_comp-6__1_.cob
  f0b59ebd7115e16585fd20bed1238194  gcc/testsuite/cobol.dg/group2/PACKED-DECIMAL_basic_comp-3_comp-6__1_.out
! e8e23746616e9c6098faa4d4421e7100  gcc/testsuite/cobol.dg/group2/PACKED-DECIMAL_basic_comp-3_comp-6__2_.cob
! 9c5b0e9f36688602ff89d0a162d80974  gcc/testsuite/cobol.dg/group2/PACKED-DECIMAL_basic_comp-3_comp-6__2_.out
  699740efcf32d9659c54172778331a54  gcc/testsuite/cobol.dg/group2/PACKED-DECIMAL_dump.cob
  813bb23347d95c7139ed2d94a3998f0b  gcc/testsuite/cobol.dg/group2/PACKED-DECIMAL_dump.out
  83cc429e231a71bd1dc2602afd5105cc  gcc/testsuite/cobol.dg/group2/PACKED-DECIMAL_numeric_test__1_.cob
--- 21844,21851 ----
  619cf3092002e36ac56fc9b86c476063  gcc/testsuite/cobol.dg/group2/PACKED-DECIMAL_arithmetic.out
  6dd4161b6a5683af405667780e77b3b8  gcc/testsuite/cobol.dg/group2/PACKED-DECIMAL_basic_comp-3_comp-6__1_.cob
  f0b59ebd7115e16585fd20bed1238194  gcc/testsuite/cobol.dg/group2/PACKED-DECIMAL_basic_comp-3_comp-6__1_.out
! 6e9a20aadb624b69574f2802ed2a469e  gcc/testsuite/cobol.dg/group2/PACKED-DECIMAL_basic_comp-3_comp-6__2_.cob
! 3f261680b5cafe0faa4ab9a9e2563e64  gcc/testsuite/cobol.dg/group2/PACKED-DECIMAL_basic_comp-3_comp-6__2_.out
  699740efcf32d9659c54172778331a54  gcc/testsuite/cobol.dg/group2/PACKED-DECIMAL_dump.cob
  813bb23347d95c7139ed2d94a3998f0b  gcc/testsuite/cobol.dg/group2/PACKED-DECIMAL_dump.out
  83cc429e231a71bd1dc2602afd5105cc  gcc/testsuite/cobol.dg/group2/PACKED-DECIMAL_numeric_test__1_.cob
*************** a3a031c83f7e6f75afedffdeac38a3ee  gcc/te
*** 21852,21857 ****
--- 21870,21876 ----
  f81e4d1631666dc73cab672753a19f96  gcc/testsuite/cobol.dg/group2/POINTER__display.cob
  1a03d00f7a2dbbf286fe10017695b9e0  gcc/testsuite/cobol.dg/group2/POINTER__display.out
  b39809d1c9370158865c2c0b5beb66d1  gcc/testsuite/cobol.dg/group2/PR39_RT3573_-_Parser_issue_w_concat._source_lines.cob
+ 0268a79c82d44b8c4f76a35e748e11f9  gcc/testsuite/cobol.dg/group2/PR59_RT3586_-_Code_format_heuristic_fails.cob
  9ed4dcbed0b57b655196739e4413e78a  gcc/testsuite/cobol.dg/group2/Preserve_collation_past_a_CALL.cob
  d2af8b51d78e3dbc2989b52264f76455  gcc/testsuite/cobol.dg/group2/Preserve_collation_past_a_CALL.out
  b998cc667e7bffb26d211ded81f2ea9a  gcc/testsuite/cobol.dg/group2/Program-to-program_parameters_and_retvals.cob
*************** dc147fd7a0a3e750a028e4cc6772dfc7  gcc/te
*** 21886,21891 ****
--- 21905,21911 ----
  912e77fc81a18dc6a7f5b8332a5f5533  gcc/testsuite/cobol.dg/group2/ROUNDING_omnibus_Floating-Point_from_COMPUTE.out
  de18d438e9f2018ba6c22153beb87973  gcc/testsuite/cobol.dg/group2/ROUNDING_omnibus_NumericDisplay_from_COMPUTE.cob
  dc1dafad7c3c0c3499ca87dd61a0cb48  gcc/testsuite/cobol.dg/group2/ROUNDING_omnibus_NumericDisplay_from_COMPUTE.out
+ 780870b8d2a4044bdb63bfa3905ff81b  gcc/testsuite/cobol.dg/group2/RT3609_Unexpected_PROCESS.cob
  e38fa87f68f46664a4a725247faeaab1  gcc/testsuite/cobol.dg/group2/Recursive_FUNCTION_with_local-storage.cob
  0bba0c9388bb78c11a2533fbadc2974e  gcc/testsuite/cobol.dg/group2/Recursive_FUNCTION_with_local-storage.out
  c63f4ece442994445b3b97fe2a8108dd  gcc/testsuite/cobol.dg/group2/Recursive_PERFORM_paragraph.cob
*************** fbbad213aa004e2ac9524af74c84a427  gcc/te
*** 22022,22028 ****
  fb787429ca42cb8685738ef89bcd4f2c  gcc/testsuite/cobol.dg/group2/compare_alpha_to_all__literal_.out
  2d9b86b23649fefd0577c6ae484f454a  gcc/testsuite/cobol.dg/group2/compare_float_to_other_types.cob
  6054cf48384d0a04d5ff8e583ef0ff76  gcc/testsuite/cobol.dg/group2/compare_float_to_other_types.out
! d98c1bb944cb4b9820f2e8c5d1d93d11  gcc/testsuite/cobol.dg/group2/compare_national_to_display.cob
  8cae6e5de9d4512dfc0233e08100d8c7  gcc/testsuite/cobol.dg/group2/compare_national_to_display.out
  0c924369f1912ecd33f99190da468623  gcc/testsuite/cobol.dg/group2/comprensive_compare_comp-1_comp-5.cob
  271a68f8b1f2b07b63849c6abeb23b13  gcc/testsuite/cobol.dg/group2/comprensive_compare_comp-1_comp-5.out
--- 22042,22048 ----
  fb787429ca42cb8685738ef89bcd4f2c  gcc/testsuite/cobol.dg/group2/compare_alpha_to_all__literal_.out
  2d9b86b23649fefd0577c6ae484f454a  gcc/testsuite/cobol.dg/group2/compare_float_to_other_types.cob
  6054cf48384d0a04d5ff8e583ef0ff76  gcc/testsuite/cobol.dg/group2/compare_float_to_other_types.out
! 4ec8f2891f1965cb3e21b096b6a4eab2  gcc/testsuite/cobol.dg/group2/compare_national_to_display.cob
  8cae6e5de9d4512dfc0233e08100d8c7  gcc/testsuite/cobol.dg/group2/compare_national_to_display.out
  0c924369f1912ecd33f99190da468623  gcc/testsuite/cobol.dg/group2/comprensive_compare_comp-1_comp-5.cob
  271a68f8b1f2b07b63849c6abeb23b13  gcc/testsuite/cobol.dg/group2/comprensive_compare_comp-1_comp-5.out
*************** bdd30a73b1365621820d564740c53d71  gcc/te
*** 23530,23536 ****
  5e7bca6d14a61fe329d1a4e54dd0d041  gcc/testsuite/g++.dg/coroutines/torture/special-termination-00-sync-completion.C
  729d7261244a4b93f8caf0dadbea7c82  gcc/testsuite/g++.dg/coroutines/torture/special-termination-01-self-destruct.C
  08f9ad809a64e21f1f5f5369134ce944  gcc/testsuite/g++.dg/coroutines/torture/tuple-decomp-pr124584.C
! d571703303e59ab43d8a90e6e4926187  gcc/testsuite/g++.dg/coroutines/unevaluated.C
  074cd02b7474e8119248041c10f08ad3  gcc/testsuite/g++.dg/cpp/_Pragma1.C
  8ce78309bd631829da82f2798d24d628  gcc/testsuite/g++.dg/cpp/c++98-pedantic.C
  731959b0908b124d4eee4dab104d68bb  gcc/testsuite/g++.dg/cpp/c++98.C
--- 23550,23556 ----
  5e7bca6d14a61fe329d1a4e54dd0d041  gcc/testsuite/g++.dg/coroutines/torture/special-termination-00-sync-completion.C
  729d7261244a4b93f8caf0dadbea7c82  gcc/testsuite/g++.dg/coroutines/torture/special-termination-01-self-destruct.C
  08f9ad809a64e21f1f5f5369134ce944  gcc/testsuite/g++.dg/coroutines/torture/tuple-decomp-pr124584.C
! 21833a37fb871f39a96332a3e6d06f34  gcc/testsuite/g++.dg/coroutines/unevaluated.C
  074cd02b7474e8119248041c10f08ad3  gcc/testsuite/g++.dg/cpp/_Pragma1.C
  8ce78309bd631829da82f2798d24d628  gcc/testsuite/g++.dg/cpp/c++98-pedantic.C
  731959b0908b124d4eee4dab104d68bb  gcc/testsuite/g++.dg/cpp/c++98.C
*************** ed0097e779e9a72a31133b42bb0cd827  gcc/te
*** 23848,23853 ****
--- 23868,23874 ----
  155683cde6d929791b366a47597a4025  gcc/testsuite/g++.dg/cpp0x/attr-trivial_abi5.C
  0a413d43b7fd738c324c26137447ebc5  gcc/testsuite/g++.dg/cpp0x/attr-trivial_abi6.C
  f5124facc2b563a303edb72de7f48d13  gcc/testsuite/g++.dg/cpp0x/attr-trivial_abi7.C
+ 3ece1de8376a063b605714bac592f9c6  gcc/testsuite/g++.dg/cpp0x/attr-trivial_abi8.C
  e37ce6b95eeaac98d87f9fdc32c84968  gcc/testsuite/g++.dg/cpp0x/attr-trivial_abi_syntax.C
  f10d6ce6082c1600b5f039e4611a6f02  gcc/testsuite/g++.dg/cpp0x/attr-unlikely1.C
  2dd5002330171bc4d37d9ba0cc381c6a  gcc/testsuite/g++.dg/cpp0x/attrib54.C
*************** b2f7d7cab4ef6e12f25f82545d59869a  gcc/te
*** 25796,25801 ****
--- 25817,25823 ----
  9683c3ac21cac97aa0b1ce1d46d85320  gcc/testsuite/g++.dg/cpp0x/pr124173.C
  823666b75dc5cb540393daba4df2d5df  gcc/testsuite/g++.dg/cpp0x/pr124489.C
  e9b2f79897e6f763134d4ec57a8eb3b7  gcc/testsuite/g++.dg/cpp0x/pr124531.C
+ db3c45e556050cd08408ea433b7509b2  gcc/testsuite/g++.dg/cpp0x/pr125886.C
  26dea799d49ce223a0c4130a3c955271  gcc/testsuite/g++.dg/cpp0x/pr31431-2.C
  4d1da29b669bf3178b3987abce4d58b1  gcc/testsuite/g++.dg/cpp0x/pr31431.C
  d65e06a3830e2b511cc25692b94615a1  gcc/testsuite/g++.dg/cpp0x/pr31432.C
*************** c951a3e5bb4bc2d67ee9dcf55822ab1e  gcc/te
*** 29862,29867 ****
--- 29884,29890 ----
  dc5fdccda9bb74a8259751885239a45b  gcc/testsuite/g++.dg/cpp2a/srcloc8.C
  3cf98e82d56549304f8eada21a181a96  gcc/testsuite/g++.dg/cpp2a/srcloc9.C
  84804685f4de259de28700f0e1eed24c  gcc/testsuite/g++.dg/cpp2a/typedef1.C
+ d80f1739867f4f309f1e8556290d280d  gcc/testsuite/g++.dg/cpp2a/typedef2.C
  5de890e01a292e99b75abedf4b2aa561  gcc/testsuite/g++.dg/cpp2a/typename1.C
  da817b2e1901bc27f9d38ebf5e51459b  gcc/testsuite/g++.dg/cpp2a/typename10.C
  736ca6dbc6d6e66b218a41d3aaeec22a  gcc/testsuite/g++.dg/cpp2a/typename11.C
*************** d600e61118e165a8544e4a21e24396b0  gcc/te
*** 30409,30414 ****
--- 30432,30438 ----
  62b9f590aabc4fc47b26566d9bf73c5f  gcc/testsuite/g++.dg/eh/builtin7.C
  7e4b9e4543f0a98b8d1468a4cb10b99d  gcc/testsuite/g++.dg/eh/builtin8.C
  c7516fc5e474bba92314482deee8a4b9  gcc/testsuite/g++.dg/eh/builtin9.C
+ 5677ea3c850936b492e35fdf7b59d51a  gcc/testsuite/g++.dg/eh/can-convert-nullptr.C
  98cf19968cec5fc832747640edb98eee  gcc/testsuite/g++.dg/eh/cast1.C
  396745d0c48e93d18fd067292d72181d  gcc/testsuite/g++.dg/eh/catch1.C
  a8749c98147fe230e16618ed168a7ffd  gcc/testsuite/g++.dg/eh/catch2.C
*************** e6de60b5642934aef50f416afd0dfef5  gcc/te
*** 37464,37469 ****
--- 37488,37494 ----
  97fa47fc1ee58971cfae4f9fdffd0b3f  gcc/testsuite/g++.dg/pr125642.C
  c981f50108f29e9500f3baf51746f6a5  gcc/testsuite/g++.dg/pr125854.C
  160c570bd57dcd8aec2341fe9a4d7d20  gcc/testsuite/g++.dg/pr125977.C
+ 1e9b44fcafec24dfe9c3653aa87cf81c  gcc/testsuite/g++.dg/pr126150.C
  2ac64817a39fe1a5c2dc328f4233cda1  gcc/testsuite/g++.dg/pr37742.C
  32b2fbda29ffd2ac2181c43c971f3a7d  gcc/testsuite/g++.dg/pr44328.C
  e43b4ea2d038b181b57782d5d56d22ba  gcc/testsuite/g++.dg/pr44486.C
*************** a66e1dc9964c7702e9ecdb5be8553fb5  gcc/te
*** 38286,38291 ****
--- 38311,38319 ----
  485cae337b48a98f34af212dc8b5ceb5  gcc/testsuite/g++.dg/reflect/type_trait13.C
  bc0bf40e9258e25c6c46ff13963f154e  gcc/testsuite/g++.dg/reflect/type_trait14.C
  a83cc3892e30ad8d151bdc1664d00e8a  gcc/testsuite/g++.dg/reflect/type_trait15.C
+ 3c4ce9c12aad934ef58167b14a09fdbf  gcc/testsuite/g++.dg/reflect/type_trait16.C
+ 1355703bbad45eb1e5752093965f07b1  gcc/testsuite/g++.dg/reflect/type_trait17.C
+ 62651ac149dfe8423fe4586793e7377a  gcc/testsuite/g++.dg/reflect/type_trait18.C
  06a1343d9aeb1caa65048fdecda31245  gcc/testsuite/g++.dg/reflect/type_trait2.C
  c957460ae45089ece9b5352a7de1f5fc  gcc/testsuite/g++.dg/reflect/type_trait3.C
  6a48574284311a70358d27e1b45595b3  gcc/testsuite/g++.dg/reflect/type_trait4.C
*************** a4ca49fa3677bf87a27b0e961eab1cee  gcc/te
*** 38340,38345 ****
--- 38368,38375 ----
  abb0a844b41427d721a0b921b5335b24  gcc/testsuite/g++.dg/rtti/typeid11.C
  cd6d28f14e82cd6834a0a7c95a1ef1ee  gcc/testsuite/g++.dg/rtti/typeid12.C
  0a59597df37c7c17707fce47de09aef7  gcc/testsuite/g++.dg/rtti/typeid13.C
+ 89576abbb6e30af9180085959220fd62  gcc/testsuite/g++.dg/rtti/typeid14.C
+ f3109325626005dbbef7e98fde6e006c  gcc/testsuite/g++.dg/rtti/typeid15.C
  f03a5377eca516c74e77fcf76b40f948  gcc/testsuite/g++.dg/rtti/typeid2.C
  3e23755748cd7e94d3bc13c5d2f78cc9  gcc/testsuite/g++.dg/rtti/typeid3.C
  834ce48627988fb72d9a138ddedfdee8  gcc/testsuite/g++.dg/rtti/typeid4.C
*************** d1b878a0538cc40530c3ecf9a0d7407f  gcc/te
*** 40714,40719 ****
--- 40744,40750 ----
  a014b3fd5fa24febe9c7ec72a11db609  gcc/testsuite/g++.dg/torture/pr87997.C
  152891f73ca5338367c7fe59b2825056  gcc/testsuite/g++.dg/torture/pr88130.C
  dbe58e15424b476b932c58cb5bc16046  gcc/testsuite/g++.dg/torture/pr88149.C
+ fcfe29a7251e8cf4df75edf75cfc0dcc  gcc/testsuite/g++.dg/torture/pr88797.C
  663e2233e0848f2299ed87a276fc8d21  gcc/testsuite/g++.dg/torture/pr88861.C
  28251f0199f94a1606cac696e1db484b  gcc/testsuite/g++.dg/torture/pr89303.C
  6295f2521ee059610fe7d8e12800e20b  gcc/testsuite/g++.dg/torture/pr89698.C
*************** d6a9a88244e600744ad0a540928c9a69  gcc/te
*** 40819,40825 ****
  8b1a6218138e41949b91924376f8fa41  gcc/testsuite/g++.dg/tree-prof/pr35545.C
  fd7ad532aa964f03e3200e1b66c1da4e  gcc/testsuite/g++.dg/tree-prof/pr51719.C
  6619c40836c140325a5ea9b8f43ee291  gcc/testsuite/g++.dg/tree-prof/pr53460.C
! 19dffb17ec610bfd82d46c3bc9fdd3a2  gcc/testsuite/g++.dg/tree-prof/pr57451.C
  1d863d8c64becb2dc8eb4dd2b1bc2227  gcc/testsuite/g++.dg/tree-prof/pr59255.C
  f3b48aeb86621caf4df1f285501e7a5e  gcc/testsuite/g++.dg/tree-prof/pr63581.C
  e5c358735afed9e9c54950b2b1516563  gcc/testsuite/g++.dg/tree-prof/pr79259.C
--- 40850,40856 ----
  8b1a6218138e41949b91924376f8fa41  gcc/testsuite/g++.dg/tree-prof/pr35545.C
  fd7ad532aa964f03e3200e1b66c1da4e  gcc/testsuite/g++.dg/tree-prof/pr51719.C
  6619c40836c140325a5ea9b8f43ee291  gcc/testsuite/g++.dg/tree-prof/pr53460.C
! b14493976cc9ec2072d4b4083229c10e  gcc/testsuite/g++.dg/tree-prof/pr57451.C
  1d863d8c64becb2dc8eb4dd2b1bc2227  gcc/testsuite/g++.dg/tree-prof/pr59255.C
  f3b48aeb86621caf4df1f285501e7a5e  gcc/testsuite/g++.dg/tree-prof/pr63581.C
  e5c358735afed9e9c54950b2b1516563  gcc/testsuite/g++.dg/tree-prof/pr79259.C
*************** ea4e143932bfcde8a35c6a9f47ca6cde  gcc/te
*** 41090,41096 ****
  3994473d87cf2cf8e4060f87f4631734  gcc/testsuite/g++.dg/tree-ssa/pr8781.C
  34be04a2a8ccec91647967353a92f38e  gcc/testsuite/g++.dg/tree-ssa/pr88152-1.C
  17e69860f1e7b4c26b8a5dbaecf9adb8  gcc/testsuite/g++.dg/tree-ssa/pr88152-2.C
- 93d2a012638c4d5b84e6335531052403  gcc/testsuite/g++.dg/tree-ssa/pr88797.C
  2650e6ee3cdee1000d24ba2bb4b5fc07  gcc/testsuite/g++.dg/tree-ssa/pr89698.C
  1f998bcf66238aaf5155a2aca15ee3b0  gcc/testsuite/g++.dg/tree-ssa/pr89802.C
  b866758c2fd516b4dacfd775ceebf59a  gcc/testsuite/g++.dg/tree-ssa/pr90078.C
--- 41121,41126 ----
*************** b76f4161df54c8629782ef9e0d754bca  gcc/te
*** 45695,45700 ****
--- 45725,45731 ----
  38703815c1796540f8aecfaf1bc2cf26  gcc/testsuite/g++.target/aarch64/fmv-selection5.C
  5aaa612386dce37ca3d7571d955a991d  gcc/testsuite/g++.target/aarch64/fmv-selection6.C
  6c415ea98a837545a1d7268521c43f72  gcc/testsuite/g++.target/aarch64/fmv-selection7.C
+ ee05a108e434682688068bd241dc41e1  gcc/testsuite/g++.target/aarch64/fold-mem-offsets.C
  8d30bac01e24683c2d4e58c15ccb4a99  gcc/testsuite/g++.target/aarch64/fp8_mangling.C
  e488781ad97c2cdafc1c66ede7aa1e0f  gcc/testsuite/g++.target/aarch64/fp8_scalar_typecheck_2.C
  4320de0414b96b162e7734443992dd38  gcc/testsuite/g++.target/aarch64/interference.C
*************** bc300789922253790e22ba0017277d65  gcc/te
*** 46043,46048 ****
--- 46074,46081 ----
  4ed896188ea2bea98c965e7e41f3d3d7  gcc/testsuite/g++.target/i386/memset-pr118276-1a.C
  a467604d2accb345c20c003f878494e4  gcc/testsuite/g++.target/i386/memset-pr118276-1b.C
  ac490f4c7437432cf3c76a1c44c29a8f  gcc/testsuite/g++.target/i386/memset-pr118276-1c.C
+ fd03c8a8617ba3ce875005d2dc979f4e  gcc/testsuite/g++.target/i386/mul-overflow-widen-1.C
+ b27507a3ca68d1a21ed6fcbc34a19861  gcc/testsuite/g++.target/i386/mul-overflow-widen-2.C
  d1b609c14400a770816be904e2e0cee2  gcc/testsuite/g++.target/i386/mv-symbols1.C
  c0b24207688618b815731387510d9bed  gcc/testsuite/g++.target/i386/mv-symbols2.C
  b621d2ff4930c57a97eff571164cd394  gcc/testsuite/g++.target/i386/mv-symbols3.C
*************** d000551f0144506c6c541d980aa84d65  gcc/te
*** 46242,46249 ****
  afb8b6ab7d54fa8eab8865a52a46caa4  gcc/testsuite/g++.target/i386/pr98335.C
  12b9e7025b922a770edbd85b09d3b099  gcc/testsuite/g++.target/i386/pr98847.C
  eafc363e633aef7542e621d7ecaa914e  gcc/testsuite/g++.target/i386/pr99108.C
! 3660db29974db1f63f1a1f458c8894db  gcc/testsuite/g++.target/i386/pr99679-1.C
! b3fdfe2866e1905292894d815f1fa291  gcc/testsuite/g++.target/i386/pr99679-2.C
  55f97129aefe6b10946f6b5fff1a3391  gcc/testsuite/g++.target/i386/seh-sysvabi-wrap1.C
  34f905a0359d6dd61671b90ee3d5a45a  gcc/testsuite/g++.target/i386/shrink_wrap_separate.C
  a621b799eff193996043d9d5462e5c27  gcc/testsuite/g++.target/i386/sse4_1-check.h
--- 46275,46282 ----
  afb8b6ab7d54fa8eab8865a52a46caa4  gcc/testsuite/g++.target/i386/pr98335.C
  12b9e7025b922a770edbd85b09d3b099  gcc/testsuite/g++.target/i386/pr98847.C
  eafc363e633aef7542e621d7ecaa914e  gcc/testsuite/g++.target/i386/pr99108.C
! 2ccbf2231006e7f2b4f200776a7ef9aa  gcc/testsuite/g++.target/i386/pr99679-1.C
! da994b005a9230d37b81d4af67eb1819  gcc/testsuite/g++.target/i386/pr99679-2.C
  55f97129aefe6b10946f6b5fff1a3391  gcc/testsuite/g++.target/i386/seh-sysvabi-wrap1.C
  34f905a0359d6dd61671b90ee3d5a45a  gcc/testsuite/g++.target/i386/shrink_wrap_separate.C
  a621b799eff193996043d9d5462e5c27  gcc/testsuite/g++.target/i386/sse4_1-check.h
*************** d8ba8c12676113bab781623c9b4c8a1f  gcc/te
*** 46437,46443 ****
  a8a857220d4221ed70fa20fdbdf0cfca  gcc/testsuite/g++.target/riscv/pr122692-run-1.C
  605f86e49704fde491263d58c2ccade7  gcc/testsuite/g++.target/riscv/pr122692-run-2.C
  4c45e102d6dd19ee08a476904b64542d  gcc/testsuite/g++.target/riscv/pr96759.C
! ac37e529bda1269045c3681cc4b425dd  gcc/testsuite/g++.target/riscv/pr97682.C
  daceaf1f0da7e5c955e4b13180536bca  gcc/testsuite/g++.target/riscv/redundant-andi.C
  6e6f612caa7b4f4e5eea9cd6bba4227b  gcc/testsuite/g++.target/riscv/redundant-bitmap-1.C
  7079827a2e9106d7dd26baf0312903e6  gcc/testsuite/g++.target/riscv/redundant-bitmap-2.C
--- 46470,46476 ----
  a8a857220d4221ed70fa20fdbdf0cfca  gcc/testsuite/g++.target/riscv/pr122692-run-1.C
  605f86e49704fde491263d58c2ccade7  gcc/testsuite/g++.target/riscv/pr122692-run-2.C
  4c45e102d6dd19ee08a476904b64542d  gcc/testsuite/g++.target/riscv/pr96759.C
! d0ea33de01bf1584f5a6a7044ec98f71  gcc/testsuite/g++.target/riscv/pr97682.C
  daceaf1f0da7e5c955e4b13180536bca  gcc/testsuite/g++.target/riscv/redundant-andi.C
  6e6f612caa7b4f4e5eea9cd6bba4227b  gcc/testsuite/g++.target/riscv/redundant-bitmap-1.C
  7079827a2e9106d7dd26baf0312903e6  gcc/testsuite/g++.target/riscv/redundant-bitmap-2.C
*************** a7b981b91e5818cfe4dbb369534c5a5f  gcc/te
*** 48224,48229 ****
--- 48257,48263 ----
  5d9f66c8337a4fa0990c8981956bce46  gcc/testsuite/gcc.c-torture/compile/pr69161.c
  b54d61a6ac4bef42a43e0e33e781210f  gcc/testsuite/gcc.c-torture/compile/pr69209.c
  aac9fa1e0a8f32d26d0b91a6ce4f86c0  gcc/testsuite/gcc.c-torture/compile/pr69214.c
+ 5396ad5875043c576f4f0efa7f0e3bd2  gcc/testsuite/gcc.c-torture/compile/pr69270.c
  8df2bff1915397748d00a5dd9853c094  gcc/testsuite/gcc.c-torture/compile/pr69740-1.c
  0f1752ec18e285b3a837b906629e80f2  gcc/testsuite/gcc.c-torture/compile/pr69740-2.c
  579adea75f6aa056952979b5e14a9b09  gcc/testsuite/gcc.c-torture/compile/pr69989-2.c
*************** c21ecf8b47191ba2e8fcee4713f5c247  gcc/te
*** 48449,48454 ****
--- 48483,48500 ----
  0c780380805f0eeafd3a3c4da38a12dd  gcc/testsuite/gcc.c-torture/compile/sound.c
  c408e165548dec88f27bc53b27bf4995  gcc/testsuite/gcc.c-torture/compile/sparcbug.c
  042e0dce252efd06f606963190e73ff7  gcc/testsuite/gcc.c-torture/compile/speed.c
+ 324184872e3443073b143b39d91e68b1  gcc/testsuite/gcc.c-torture/compile/split-path-10.c
+ 4cae2afb3a2b3b02564a14b2a1bebbdc  gcc/testsuite/gcc.c-torture/compile/split-path-11.c
+ 4de2ae466148f9f6d5c9060d358b1e80  gcc/testsuite/gcc.c-torture/compile/split-path-12.c
+ 8146962418b163df1f2e32fae5d5965c  gcc/testsuite/gcc.c-torture/compile/split-path-13.c
+ d95aeede1380d3b06d115439e8640b49  gcc/testsuite/gcc.c-torture/compile/split-path-2.c
+ 69e1dec10b930e127fcb277976983ea2  gcc/testsuite/gcc.c-torture/compile/split-path-3.c
+ 8bfdee512284cf7101bcf6578f598463  gcc/testsuite/gcc.c-torture/compile/split-path-4.c
+ 99ee5a7963862ded1aabb4e44e0ce741  gcc/testsuite/gcc.c-torture/compile/split-path-5.c
+ 7441cb1c83d84fbb637fd67e242df4eb  gcc/testsuite/gcc.c-torture/compile/split-path-6.c
+ 846c8c0d569a1244995aad09a980ed32  gcc/testsuite/gcc.c-torture/compile/split-path-7.c
+ e8185783387bd9cd31c5603c05cbbdd8  gcc/testsuite/gcc.c-torture/compile/split-path-8.c
+ bcb9b0e895c3a3fcd6558235cfd7c785  gcc/testsuite/gcc.c-torture/compile/split-path-9.c
  68c4756a5e6657f7df9a8a02d6dda55e  gcc/testsuite/gcc.c-torture/compile/sra-1.c
  1fb17fb58efa11a8c2d892a6946321bc  gcc/testsuite/gcc.c-torture/compile/ssa-pre-1.c
  4244c9cfe127bb336d948adca93fc3fc  gcc/testsuite/gcc.c-torture/compile/ssa-unused-1.c
*************** d876c893743520747d7bc1e97368379c  gcc/te
*** 50389,50394 ****
--- 50435,50441 ----
  de58fe3bfae9a8cf38a31a1ffbd13ca2  gcc/testsuite/gcc.c-torture/execute/simd-4.c
  bea3db90a3a93e45f595dd3e8d4a3547  gcc/testsuite/gcc.c-torture/execute/simd-5.c
  c5ba016a76f2a079ff6974d341c9ec69  gcc/testsuite/gcc.c-torture/execute/simd-6.c
+ 9a1f6fdfa66505a18f6b9af6d23ece08  gcc/testsuite/gcc.c-torture/execute/split-path-1.c
  472d8b1743262cc175eb69eeafbb2444  gcc/testsuite/gcc.c-torture/execute/ssad-run.c
  cad28b37258cc811253fb37f3c3885e9  gcc/testsuite/gcc.c-torture/execute/stdarg-1.c
  3d1125f58e8c27f919200718165b5244  gcc/testsuite/gcc.c-torture/execute/stdarg-2.c
*************** cc74ad07bc21697eab1ac4bdbb25f0f5  gcc/te
*** 51992,51998 ****
  ab980f0237f5796fbeebe76bc741601c  gcc/testsuite/gcc.dg/asm-hard-reg-9.c
  b8c52e60689e1b1842e4e05f9f0a21fb  gcc/testsuite/gcc.dg/asm-hard-reg-error-1.c
  9db82ff602331dd327582c106428d7c7  gcc/testsuite/gcc.dg/asm-hard-reg-error-2.c
! b7d7ad2352b64cd5b5f59527de4a95d9  gcc/testsuite/gcc.dg/asm-hard-reg-error-3.c
  524d418a9c4592d83ab9f5d9048f817c  gcc/testsuite/gcc.dg/asm-hard-reg-error-4.c
  a4862e2e0b5c04818a6438ae16091cec  gcc/testsuite/gcc.dg/asm-hard-reg-error-5.c
  1ec5c1bd0d09a10946894557c718d3e9  gcc/testsuite/gcc.dg/asm-hard-reg-error-6.c
--- 52039,52045 ----
  ab980f0237f5796fbeebe76bc741601c  gcc/testsuite/gcc.dg/asm-hard-reg-9.c
  b8c52e60689e1b1842e4e05f9f0a21fb  gcc/testsuite/gcc.dg/asm-hard-reg-error-1.c
  9db82ff602331dd327582c106428d7c7  gcc/testsuite/gcc.dg/asm-hard-reg-error-2.c
! 734a98df7e361e9806c24d3bc7e1ebd2  gcc/testsuite/gcc.dg/asm-hard-reg-error-3.c
  524d418a9c4592d83ab9f5d9048f817c  gcc/testsuite/gcc.dg/asm-hard-reg-error-4.c
  a4862e2e0b5c04818a6438ae16091cec  gcc/testsuite/gcc.dg/asm-hard-reg-error-5.c
  1ec5c1bd0d09a10946894557c718d3e9  gcc/testsuite/gcc.dg/asm-hard-reg-error-6.c
*************** e726e37e1e11c8196b19d2e74be26ceb  gcc/te
*** 52575,52581 ****
  ecffd294105471e159e662a7ea58716e  gcc/testsuite/gcc.dg/builtin-bswap-6a.c
  a13510f16ad9b40d3bed7d9e1467102f  gcc/testsuite/gcc.dg/builtin-bswap-7.c
  39a589bed3922c20ecddc1b22c5dd0be  gcc/testsuite/gcc.dg/builtin-bswap-7a.c
! dee8624db42c149e727e832415aa5090  gcc/testsuite/gcc.dg/builtin-bswap-8.c
  547dc816e801f8746cd259482702fa77  gcc/testsuite/gcc.dg/builtin-bswap-9.c
  73b68c9a7f69fdea77cc80ea090d9d16  gcc/testsuite/gcc.dg/builtin-call-info-1.c
  9236f11c439d7cad0d6a79030d55aa13  gcc/testsuite/gcc.dg/builtin-call-info-2.c
--- 52622,52628 ----
  ecffd294105471e159e662a7ea58716e  gcc/testsuite/gcc.dg/builtin-bswap-6a.c
  a13510f16ad9b40d3bed7d9e1467102f  gcc/testsuite/gcc.dg/builtin-bswap-7.c
  39a589bed3922c20ecddc1b22c5dd0be  gcc/testsuite/gcc.dg/builtin-bswap-7a.c
! d74dba2156dbebab38d363bee61ee208  gcc/testsuite/gcc.dg/builtin-bswap-8.c
  547dc816e801f8746cd259482702fa77  gcc/testsuite/gcc.dg/builtin-bswap-9.c
  73b68c9a7f69fdea77cc80ea090d9d16  gcc/testsuite/gcc.dg/builtin-call-info-1.c
  9236f11c439d7cad0d6a79030d55aa13  gcc/testsuite/gcc.dg/builtin-call-info-2.c
*************** e402946ef4c438476731cd807abb0d0b  gcc/te
*** 55538,55543 ****
--- 55585,55591 ----
  ab16f59df61d1fa7462735be7c89e03e  gcc/testsuite/gcc.dg/fold-stringops-3.c
  4f2210865daf0cf05e105331c6f9aa8b  gcc/testsuite/gcc.dg/fold-sub.c
  66e88c7ea501b2ebc7bffa9b4d386d9c  gcc/testsuite/gcc.dg/fold-vecperm-1.c
+ 8443f5f700c8a0efb3d97466acd22540  gcc/testsuite/gcc.dg/fold-vecperm-insert-1.c
  c90dbb8934ec1b212a0e4ecc9b3ca3d5  gcc/testsuite/gcc.dg/fold-xor-1.c
  7d493f5554d1ace59edbb4ff7c5827d9  gcc/testsuite/gcc.dg/fold-xor-2.c
  df2f1c4756e53a97a67a96197444b1c1  gcc/testsuite/gcc.dg/fold-xor-3.c
*************** f46dce055fca6bcb88a60d11a0bb710b  gcc/te
*** 56807,56813 ****
  3fcd24000493dccbffcab8d7f571db16  gcc/testsuite/gcc.dg/ifcvt-1.c
  788cdc139607df186471194c57393d9b  gcc/testsuite/gcc.dg/ifcvt-2.c
  1406d8ef80fc3e9a51abb05637775214  gcc/testsuite/gcc.dg/ifcvt-3.c
! be46d80022e13a076753467f8f1afcb4  gcc/testsuite/gcc.dg/ifcvt-4.c
  851af7bdf70bdcebc1bbfe12c989a445  gcc/testsuite/gcc.dg/ifcvt-5.c
  18c54e879b05c8aed2d3ad8ec198fe6d  gcc/testsuite/gcc.dg/ifcvt-fabs-1.c
  9311fcd9326988cb15b467fa70d1a0de  gcc/testsuite/gcc.dg/ifelse-1.c
--- 56855,56861 ----
  3fcd24000493dccbffcab8d7f571db16  gcc/testsuite/gcc.dg/ifcvt-1.c
  788cdc139607df186471194c57393d9b  gcc/testsuite/gcc.dg/ifcvt-2.c
  1406d8ef80fc3e9a51abb05637775214  gcc/testsuite/gcc.dg/ifcvt-3.c
! ea969f6e50373bb912d97069b8b9b9d0  gcc/testsuite/gcc.dg/ifcvt-4.c
  851af7bdf70bdcebc1bbfe12c989a445  gcc/testsuite/gcc.dg/ifcvt-5.c
  18c54e879b05c8aed2d3ad8ec198fe6d  gcc/testsuite/gcc.dg/ifcvt-fabs-1.c
  9311fcd9326988cb15b467fa70d1a0de  gcc/testsuite/gcc.dg/ifelse-1.c
*************** def7e11a18eea4df779bd2605c1a040e  gcc/te
*** 57010,57015 ****
--- 57058,57064 ----
  241e4142635d64eed70e6c902853f3da  gcc/testsuite/gcc.dg/ipa/ipa-pta-18.c
  b18b72303bf1ea7390dd15ee7f35f66c  gcc/testsuite/gcc.dg/ipa/ipa-pta-19.c
  1438127d87f33ded77db93c52113196c  gcc/testsuite/gcc.dg/ipa/ipa-pta-2.c
+ 053dd66825382fff2c652e1247db4ede  gcc/testsuite/gcc.dg/ipa/ipa-pta-20.c
  f18e2b83422d97d0681e4e9f878b894f  gcc/testsuite/gcc.dg/ipa/ipa-pta-3.c
  428646087bfd39084e49404521aed98b  gcc/testsuite/gcc.dg/ipa/ipa-pta-4.c
  83ef249e1667b483a0b6f39d04927ba0  gcc/testsuite/gcc.dg/ipa/ipa-pta-5.c
*************** fc7c9c751d59b444d0ab30c4d9029491  gcc/te
*** 57130,57135 ****
--- 57179,57185 ----
  187b807400791bf18a7a1f9f9ce8a4a7  gcc/testsuite/gcc.dg/ipa/pr123543.c
  1ad60a396b302c2970c25767a4f919eb  gcc/testsuite/gcc.dg/ipa/pr124128.c
  72900ba4925dafc06ee62e16c28d6287  gcc/testsuite/gcc.dg/ipa/pr124777.c
+ 442d3342ae09d928fe69299aeb5701ea  gcc/testsuite/gcc.dg/ipa/pr125207.c
  c8295ff7fd7e271d17e7609620f5dfcb  gcc/testsuite/gcc.dg/ipa/pr42706.c
  e4887053c792f4f78b03804c148839ce  gcc/testsuite/gcc.dg/ipa/pr45644.c
  6e1b4f2c5d0c0d768778da8e3b7df828  gcc/testsuite/gcc.dg/ipa/pr48195.c
*************** ef1884748c78b6ae1f9bd8ce831596f1  gcc/te
*** 57961,57974 ****
  1dadc95df2cfcfe39615669d181980e7  gcc/testsuite/gcc.dg/optimize-bswapdi-1.c
  404ca003e7761822ce477a10495ab916  gcc/testsuite/gcc.dg/optimize-bswapdi-2.c
  2411cd50c6b3a2f2c92ef4ec97287013  gcc/testsuite/gcc.dg/optimize-bswapdi-3.c
! 603c26003fdd00b0d80f72bbdc678b81  gcc/testsuite/gcc.dg/optimize-bswaphi-1.c
  6d24510e55a8e45939dcdefb58abed12  gcc/testsuite/gcc.dg/optimize-bswapsi-1.c
  d1c5f8043ad0d459a3903165dca712b5  gcc/testsuite/gcc.dg/optimize-bswapsi-2.c
! 3e2af2f78fbd024fa7ef3cadf042e4a5  gcc/testsuite/gcc.dg/optimize-bswapsi-3.c
! bd8139d78717b2c59fb034414884e732  gcc/testsuite/gcc.dg/optimize-bswapsi-4.c
! 31c22741d2efc49130ed805245ca2eef  gcc/testsuite/gcc.dg/optimize-bswapsi-5.c
! 264d209c57cc45ef9e3d126da7533b59  gcc/testsuite/gcc.dg/optimize-bswapsi-6.c
! 83a0ff009417660c84e29c7126de74fa  gcc/testsuite/gcc.dg/optimize-bswapsi-7.c
  a7c81d8a6b901cb118283ac3a10f5593  gcc/testsuite/gcc.dg/opts-1.c
  4d9c904a82fe597f0cd8af7c5de6e850  gcc/testsuite/gcc.dg/opts-2.c
  38a8c929ac7b34d42957355372ae18f5  gcc/testsuite/gcc.dg/opts-3.c
--- 58011,58024 ----
  1dadc95df2cfcfe39615669d181980e7  gcc/testsuite/gcc.dg/optimize-bswapdi-1.c
  404ca003e7761822ce477a10495ab916  gcc/testsuite/gcc.dg/optimize-bswapdi-2.c
  2411cd50c6b3a2f2c92ef4ec97287013  gcc/testsuite/gcc.dg/optimize-bswapdi-3.c
! fa68afa14052a8292bc29d975269309f  gcc/testsuite/gcc.dg/optimize-bswaphi-1.c
  6d24510e55a8e45939dcdefb58abed12  gcc/testsuite/gcc.dg/optimize-bswapsi-1.c
  d1c5f8043ad0d459a3903165dca712b5  gcc/testsuite/gcc.dg/optimize-bswapsi-2.c
! 12b92005cda64a8e15556bc3201de69c  gcc/testsuite/gcc.dg/optimize-bswapsi-3.c
! 74a5cb844210185a097441b45cf4df00  gcc/testsuite/gcc.dg/optimize-bswapsi-4.c
! fa519f779b6e8d6016bec589e23a9bc6  gcc/testsuite/gcc.dg/optimize-bswapsi-5.c
! f5592c4b6e2bbb07f8d2560555c08a91  gcc/testsuite/gcc.dg/optimize-bswapsi-6.c
! d21bd56f88e4420820263ccae947f78f  gcc/testsuite/gcc.dg/optimize-bswapsi-7.c
  a7c81d8a6b901cb118283ac3a10f5593  gcc/testsuite/gcc.dg/opts-1.c
  4d9c904a82fe597f0cd8af7c5de6e850  gcc/testsuite/gcc.dg/opts-2.c
  38a8c929ac7b34d42957355372ae18f5  gcc/testsuite/gcc.dg/opts-3.c
*************** be9ddb035cc83ea1227c7930f1a36f1b  gcc/te
*** 58463,58468 ****
--- 58513,58520 ----
  c26b978b685e1bfcc17c466b966d4919  gcc/testsuite/gcc.dg/pr102141.c
  5cf412326dc16b1707feb9f8a8d1aa05  gcc/testsuite/gcc.dg/pr102152.c
  554c46cecadf4553bfa81025a9c21fa0  gcc/testsuite/gcc.dg/pr102202-1.c
+ 64865b08b053d1973dbaba56c8fa7218  gcc/testsuite/gcc.dg/pr102202-3.c
+ 849a0ca2b29eb1349147108d9c260f75  gcc/testsuite/gcc.dg/pr102202-4.c
  b9876d5b85d2c1e5c59ed27639781eb6  gcc/testsuite/gcc.dg/pr102202.c
  81b5db555bf4e99998ce86d5d737b15e  gcc/testsuite/gcc.dg/pr102207.c
  afb36cfd0415d59db229d4058c30853f  gcc/testsuite/gcc.dg/pr102224.c
*************** fa5bb8fde0acecb33a479faffc86bd94  gcc/te
*** 59011,59017 ****
  00ae80f6bc28b04e42c74bc9c2084c39  gcc/testsuite/gcc.dg/pr120447.c
  9444444b4f048eadd4b6a2d7592f5fca  gcc/testsuite/gcc.dg/pr120480.c
  17a1e237b6ae68e2d4122d0a05fef1df  gcc/testsuite/gcc.dg/pr120510.c
! 7e5ecdaab28f17bb60a37435dfa95af7  gcc/testsuite/gcc.dg/pr120525.c
  fb8a0a60fb2754e29f845aad904922d4  gcc/testsuite/gcc.dg/pr120560.c
  529713b98b912597ae0fe979488eb31a  gcc/testsuite/gcc.dg/pr120630.c
  4a9d9632d82cf6c4f4f4acbad8ab018d  gcc/testsuite/gcc.dg/pr120638.c
--- 59063,59069 ----
  00ae80f6bc28b04e42c74bc9c2084c39  gcc/testsuite/gcc.dg/pr120447.c
  9444444b4f048eadd4b6a2d7592f5fca  gcc/testsuite/gcc.dg/pr120480.c
  17a1e237b6ae68e2d4122d0a05fef1df  gcc/testsuite/gcc.dg/pr120510.c
! 70508a33aa0192aa12075f55cf8c488b  gcc/testsuite/gcc.dg/pr120525.c
  fb8a0a60fb2754e29f845aad904922d4  gcc/testsuite/gcc.dg/pr120560.c
  529713b98b912597ae0fe979488eb31a  gcc/testsuite/gcc.dg/pr120630.c
  4a9d9632d82cf6c4f4f4acbad8ab018d  gcc/testsuite/gcc.dg/pr120638.c
*************** f402be89e4891c76c691c8144fe168f7  gcc/te
*** 59089,59095 ****
  02130fab8e808e36f5a9d44f4ed8fccc  gcc/testsuite/gcc.dg/pr124303.c
  5bc3929959db4e7efdda8bc02c4c7e26  gcc/testsuite/gcc.dg/pr124454-1.c
  f733cdb22a88b058648393623d505a3f  gcc/testsuite/gcc.dg/pr124476.c
! c3ef6cbbb169643be381d5f93db83a88  gcc/testsuite/gcc.dg/pr124545-2.c
  36ee7eea41c31945982771e0ffcb01dc  gcc/testsuite/gcc.dg/pr124545.c
  579ed8ebf6c470274c30ac557f9672d2  gcc/testsuite/gcc.dg/pr124576.c
  a0af6600ae1ec0429d2ce13c4ccc8a92  gcc/testsuite/gcc.dg/pr124630.c
--- 59141,59147 ----
  02130fab8e808e36f5a9d44f4ed8fccc  gcc/testsuite/gcc.dg/pr124303.c
  5bc3929959db4e7efdda8bc02c4c7e26  gcc/testsuite/gcc.dg/pr124454-1.c
  f733cdb22a88b058648393623d505a3f  gcc/testsuite/gcc.dg/pr124476.c
! 0a528d1a520aeb7f2f06f4c696c6f365  gcc/testsuite/gcc.dg/pr124545-2.c
  36ee7eea41c31945982771e0ffcb01dc  gcc/testsuite/gcc.dg/pr124545.c
  579ed8ebf6c470274c30ac557f9672d2  gcc/testsuite/gcc.dg/pr124576.c
  a0af6600ae1ec0429d2ce13c4ccc8a92  gcc/testsuite/gcc.dg/pr124630.c
*************** cb2af6eb124c1d269b7aedc04681b314  gcc/te
*** 59119,59130 ****
--- 59171,59184 ----
  5ab2cc7a06b876199ce2f02e0dd9b79b  gcc/testsuite/gcc.dg/pr125707.c
  f774e49194db2a0fbdafbddfc0c79487  gcc/testsuite/gcc.dg/pr125737-1.c
  3adc221d0f1677213f1661f06776191c  gcc/testsuite/gcc.dg/pr125737-2.c
+ 1a7347f36a45a46372b63b2ba4352b85  gcc/testsuite/gcc.dg/pr125738.c
  8e990bb878c93bf33f60e5d7ebfcf826  gcc/testsuite/gcc.dg/pr125749.c
  780a210a91e38b3b391cc7a869bbcfc8  gcc/testsuite/gcc.dg/pr125756.c
  729e9d2c572b5740d1cb9d00d90885e9  gcc/testsuite/gcc.dg/pr125790-1.c
  6a322f305e51f6120590c1de3c37495b  gcc/testsuite/gcc.dg/pr125857-1.c
  4adc52a90c4c4ca34102d4c6e968411d  gcc/testsuite/gcc.dg/pr125910.c
  bc5ddfbbc46f4e0cce1629d1b58d3090  gcc/testsuite/gcc.dg/pr12603.c
+ 50cf168532ea674e4fa64a2c3d3a55da  gcc/testsuite/gcc.dg/pr126169.c
  72a2fca76cb69617ae36bab93c7ec0d7  gcc/testsuite/gcc.dg/pr12625-1.c
  6f0ef61e5a12db5f11da839b2988c5e1  gcc/testsuite/gcc.dg/pr13519-1.c
  86dc5cfaafafc79e11d0559d71baea6b  gcc/testsuite/gcc.dg/pr13804-1.c
*************** f56a66971ef2360d1150ae851eb9f24c  gcc/te
*** 63026,63031 ****
--- 63080,63087 ----
  33bce38bed8b70a3409f3aecbf20655f  gcc/testsuite/gcc.dg/torture/pr125923-1.c
  d37f980a2ba8a3f7fef2d2c9a4f2a81d  gcc/testsuite/gcc.dg/torture/pr125953.c
  14be17fc44652a0c0f9e613a6f758c8a  gcc/testsuite/gcc.dg/torture/pr126008.c
+ 88f559ffc5e83c1bb94493a45386dc31  gcc/testsuite/gcc.dg/torture/pr126121.c
+ 2d67796768f1ca0a13a58ab00f4f8433  gcc/testsuite/gcc.dg/torture/pr126136.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
*************** b069caf152c3eca0e024d32d14335580  gcc/te
*** 64799,64805 ****
--- 64855,64863 ----
  4e6f4cc80516aaa46808c1dea7a621da  gcc/testsuite/gcc.dg/tree-ssa/float-conv-1.c
  228dfa7248ebf7ccfcdb0ecfb5d30bf6  gcc/testsuite/gcc.dg/tree-ssa/fnsplit-1.c
  e5035d32dc605a277b663840398291b0  gcc/testsuite/gcc.dg/tree-ssa/fnsplit-2.c
+ 51cc9ce25e0c4c4a03158cbfd171d52c  gcc/testsuite/gcc.dg/tree-ssa/fold-xor-and-or-1.c
  eb594c305f37e716ed58ed83ebdb28df  gcc/testsuite/gcc.dg/tree-ssa/fold-xor-and-or.c
+ cb7af21d1d3a961511e464439c204e0f  gcc/testsuite/gcc.dg/tree-ssa/fold-xor-or-1.c
  96793db1db9e22964fa7aedc04c2220f  gcc/testsuite/gcc.dg/tree-ssa/fold-xor-or.c
  55eb8b4695bc9df408b84073a57d4125  gcc/testsuite/gcc.dg/tree-ssa/foldaddr-1.c
  1ace6320b3c64ddcefd35277803fef7b  gcc/testsuite/gcc.dg/tree-ssa/foldcast-1.c
*************** bfddd90a833039e0cdb4656f4c8f81a1  gcc/te
*** 65038,65044 ****
  e202cf21911171e72b195a3e8e0283ca  gcc/testsuite/gcc.dg/tree-ssa/local-pure-const.c
  340c2058146022e09de1bde5ca123c2b  gcc/testsuite/gcc.dg/tree-ssa/log_exp.c
  6252934461c491785724c885b20e8430  gcc/testsuite/gcc.dg/tree-ssa/log_ident.c
! adc02f2c3aa6daeb6b2b4075d6ad9544  gcc/testsuite/gcc.dg/tree-ssa/loop-1.c
  d5c0a0cafa8f17e9848f07635e0627a4  gcc/testsuite/gcc.dg/tree-ssa/loop-10.c
  7b136dc13a3af93299281a6cc8908cb9  gcc/testsuite/gcc.dg/tree-ssa/loop-11.c
  14f9f2d5bc49080ad8ddf44cdfa1744b  gcc/testsuite/gcc.dg/tree-ssa/loop-14.c
--- 65096,65102 ----
  e202cf21911171e72b195a3e8e0283ca  gcc/testsuite/gcc.dg/tree-ssa/local-pure-const.c
  340c2058146022e09de1bde5ca123c2b  gcc/testsuite/gcc.dg/tree-ssa/log_exp.c
  6252934461c491785724c885b20e8430  gcc/testsuite/gcc.dg/tree-ssa/log_ident.c
! 9589d28892bb4a038f3506f09d2a906e  gcc/testsuite/gcc.dg/tree-ssa/loop-1.c
  d5c0a0cafa8f17e9848f07635e0627a4  gcc/testsuite/gcc.dg/tree-ssa/loop-10.c
  7b136dc13a3af93299281a6cc8908cb9  gcc/testsuite/gcc.dg/tree-ssa/loop-11.c
  14f9f2d5bc49080ad8ddf44cdfa1744b  gcc/testsuite/gcc.dg/tree-ssa/loop-14.c
*************** fbf563a2f70a70fc731349015147afea  gcc/te
*** 65315,65321 ****
  c712f0d46a07e2bcebd2d44e2db4d929  gcc/testsuite/gcc.dg/tree-ssa/pr102705-1.c
  4024edc4ed6c55e2e45c414b1490a757  gcc/testsuite/gcc.dg/tree-ssa/pr102705-2.c
  07cbfe319374507b0bd58c75bf83d9e2  gcc/testsuite/gcc.dg/tree-ssa/pr102736.c
! 49686816129d3ce2767f2feb0480d7fc  gcc/testsuite/gcc.dg/tree-ssa/pr102793-1.c
  4ea7cf42666868b19306d82b01e1c82e  gcc/testsuite/gcc.dg/tree-ssa/pr102793-2.c
  335850968e8422bffc030a8ed0663409  gcc/testsuite/gcc.dg/tree-ssa/pr102880.c
  dfb016d569355b28ba6779d09c046dc0  gcc/testsuite/gcc.dg/tree-ssa/pr102906.c
--- 65373,65379 ----
  c712f0d46a07e2bcebd2d44e2db4d929  gcc/testsuite/gcc.dg/tree-ssa/pr102705-1.c
  4024edc4ed6c55e2e45c414b1490a757  gcc/testsuite/gcc.dg/tree-ssa/pr102705-2.c
  07cbfe319374507b0bd58c75bf83d9e2  gcc/testsuite/gcc.dg/tree-ssa/pr102736.c
! c6b1aac8a5db6933773b6d06b1ef909d  gcc/testsuite/gcc.dg/tree-ssa/pr102793-1.c
  4ea7cf42666868b19306d82b01e1c82e  gcc/testsuite/gcc.dg/tree-ssa/pr102793-2.c
  335850968e8422bffc030a8ed0663409  gcc/testsuite/gcc.dg/tree-ssa/pr102880.c
  dfb016d569355b28ba6779d09c046dc0  gcc/testsuite/gcc.dg/tree-ssa/pr102906.c
*************** eed236f4c0a3dab3cadb4c5cbce403da  gcc/te
*** 65422,65427 ****
--- 65480,65486 ----
  30191e7f04d08f0b42092e36965a3c63  gcc/testsuite/gcc.dg/tree-ssa/pr111967.c
  f5a620ca99a1fc9e267beab2ad387ade  gcc/testsuite/gcc.dg/tree-ssa/pr111972-1.c
  c146f88113f10fde3201b81b2eeb30fb  gcc/testsuite/gcc.dg/tree-ssa/pr112095.c
+ cd63f33aaeb05b828b8758f281d7fd7a  gcc/testsuite/gcc.dg/tree-ssa/pr112472.c
  beccfabbbe0e25820c8a0bf1789cad24  gcc/testsuite/gcc.dg/tree-ssa/pr112706.c
  19ee66e2ab8d0fdea9f3e335e4a8fa86  gcc/testsuite/gcc.dg/tree-ssa/pr112721.c
  4eb8c3fc22eb21c2ea6d58e0ea78f8fc  gcc/testsuite/gcc.dg/tree-ssa/pr112767.c
*************** f0d353ee8a84646d78fc80b6dd84a990  gcc/te
*** 65451,65457 ****
  ec2377e16f3af2ba261ea020faa3f718  gcc/testsuite/gcc.dg/tree-ssa/pr117692.c
  e91a50025559d9a809c8a2fcfde46c2e  gcc/testsuite/gcc.dg/tree-ssa/pr117892.c
  3097c3d4bb30c35ef14a5afc79ceb420  gcc/testsuite/gcc.dg/tree-ssa/pr117927.c
! 9cf6e14694f99ea2a43997566d8e274e  gcc/testsuite/gcc.dg/tree-ssa/pr117973-1.c
  a5bb2e2effb49c640583e2c1fc01b347  gcc/testsuite/gcc.dg/tree-ssa/pr118149-2.c
  fcc375285c0e2875c134cbbe20ee9b01  gcc/testsuite/gcc.dg/tree-ssa/pr118149.c
  53e0d16c15ff199c6402af888fa36de4  gcc/testsuite/gcc.dg/tree-ssa/pr118483-1.c
--- 65510,65516 ----
  ec2377e16f3af2ba261ea020faa3f718  gcc/testsuite/gcc.dg/tree-ssa/pr117692.c
  e91a50025559d9a809c8a2fcfde46c2e  gcc/testsuite/gcc.dg/tree-ssa/pr117892.c
  3097c3d4bb30c35ef14a5afc79ceb420  gcc/testsuite/gcc.dg/tree-ssa/pr117927.c
! b74527570a5aa4b655466f3ea977ca5b  gcc/testsuite/gcc.dg/tree-ssa/pr117973-1.c
  a5bb2e2effb49c640583e2c1fc01b347  gcc/testsuite/gcc.dg/tree-ssa/pr118149-2.c
  fcc375285c0e2875c134cbbe20ee9b01  gcc/testsuite/gcc.dg/tree-ssa/pr118149.c
  53e0d16c15ff199c6402af888fa36de4  gcc/testsuite/gcc.dg/tree-ssa/pr118483-1.c
*************** d87a1ad6187c06f07e6ee3b7c6352e9e  gcc/te
*** 65495,65500 ****
--- 65554,65561 ----
  8c0f48a2620b004e459ec5ecf6149add  gcc/testsuite/gcc.dg/tree-ssa/pr124405.c
  5283f91d0eefda6d127eab3dcbb26458  gcc/testsuite/gcc.dg/tree-ssa/pr124560.c
  0054e44a9d7f98f16363e68bc8142e0f  gcc/testsuite/gcc.dg/tree-ssa/pr124746-1.c
+ 1afde515a61b4beaaf5bcb9824f3ba80  gcc/testsuite/gcc.dg/tree-ssa/pr124808-2.c
+ b40c4e796a04809272d5f575f612ec0c  gcc/testsuite/gcc.dg/tree-ssa/pr124808.c
  f5cfea6a1b6fc4b038b869d0d5b623f1  gcc/testsuite/gcc.dg/tree-ssa/pr124886.c
  f129dd468dfe8a551c430253beea7ece  gcc/testsuite/gcc.dg/tree-ssa/pr125104.c
  20283de4958877c9f56821eb4c2d19cd  gcc/testsuite/gcc.dg/tree-ssa/pr125214.c
*************** fdf71b131cfffb1acfa1864e8be83ea3  gcc/te
*** 65735,65741 ****
  28fc1a0b84d44cad29c7e6681e432132  gcc/testsuite/gcc.dg/tree-ssa/pr62112-2.c
  e6986386d8ec85afd7b821cc2f311d1c  gcc/testsuite/gcc.dg/tree-ssa/pr63586-2.c
  7cb0ed762682bb1350e760c82051ad0c  gcc/testsuite/gcc.dg/tree-ssa/pr63586.c
! 83f806144c4d28ee655a0a4ed7c67b69  gcc/testsuite/gcc.dg/tree-ssa/pr64130.c
  7f34c9c0ef0ca4e4b8f8e09ebbb76c98  gcc/testsuite/gcc.dg/tree-ssa/pr64183.c
  7bad4c2e6ae30c72c6cca2eb11f05b5e  gcc/testsuite/gcc.dg/tree-ssa/pr64567-2.c
  50f28ebc86f8ce4669f698753fe1e974  gcc/testsuite/gcc.dg/tree-ssa/pr64567.c
--- 65796,65802 ----
  28fc1a0b84d44cad29c7e6681e432132  gcc/testsuite/gcc.dg/tree-ssa/pr62112-2.c
  e6986386d8ec85afd7b821cc2f311d1c  gcc/testsuite/gcc.dg/tree-ssa/pr63586-2.c
  7cb0ed762682bb1350e760c82051ad0c  gcc/testsuite/gcc.dg/tree-ssa/pr63586.c
! 4253418179e312b658c898e080aad985  gcc/testsuite/gcc.dg/tree-ssa/pr64130.c
  7f34c9c0ef0ca4e4b8f8e09ebbb76c98  gcc/testsuite/gcc.dg/tree-ssa/pr64183.c
  7bad4c2e6ae30c72c6cca2eb11f05b5e  gcc/testsuite/gcc.dg/tree-ssa/pr64567-2.c
  50f28ebc86f8ce4669f698753fe1e974  gcc/testsuite/gcc.dg/tree-ssa/pr64567.c
*************** e8527fc0af4d4530b771535a495cee62  gcc/te
*** 65772,65778 ****
  0c78d91dfdb52bc5a13e535cc2b4ec36  gcc/testsuite/gcc.dg/tree-ssa/pr69196-1.c
  de88dc62a5d0e18cadd56d11d2dc6239  gcc/testsuite/gcc.dg/tree-ssa/pr69270-2.c
  389896057add755a9a99bd844a3c0cf6  gcc/testsuite/gcc.dg/tree-ssa/pr69270-3.c
- f95a7a27ecfcac20891a4a024d1f82cb  gcc/testsuite/gcc.dg/tree-ssa/pr69270.c
  4c8881edc71005a1d85370d1a8358a54  gcc/testsuite/gcc.dg/tree-ssa/pr69355.c
  5b019fa45c335f7fb5befbed76021ee5  gcc/testsuite/gcc.dg/tree-ssa/pr69615.c
  764cbe25d58fd6bd4ed1fbd6b8b08d02  gcc/testsuite/gcc.dg/tree-ssa/pr69666.c
--- 65833,65838 ----
*************** c9d54e802a416f03458eaee182da0547  gcc/te
*** 66270,66288 ****
  47f4aa00fc6ef30ae0f1b03e5733a572  gcc/testsuite/gcc.dg/tree-ssa/slsr-7.c
  dfe8d5ab532409e84d48b549d54eaf25  gcc/testsuite/gcc.dg/tree-ssa/slsr-8.c
  a033da229d97e775dc989a1095ff34b8  gcc/testsuite/gcc.dg/tree-ssa/slsr-9.c
- 42cfda00a4e3f590579d9164da8db652  gcc/testsuite/gcc.dg/tree-ssa/split-path-1.c
- 374f7d1e0bcd74c6255d65e104a73dbf  gcc/testsuite/gcc.dg/tree-ssa/split-path-10.c
- 4f74ab053fb15d2aae883b3d30d3d4b2  gcc/testsuite/gcc.dg/tree-ssa/split-path-11.c
- 84aa833acb5b0b615f7f68aa3b7e2469  gcc/testsuite/gcc.dg/tree-ssa/split-path-12.c
- 6e73a8d607b554d156c4bb4d6b18de63  gcc/testsuite/gcc.dg/tree-ssa/split-path-13.c
- 4ed8bda954bf8d5f0f9cec4c89152dc7  gcc/testsuite/gcc.dg/tree-ssa/split-path-2.c
- df2fef34213133c5afed537f489aca64  gcc/testsuite/gcc.dg/tree-ssa/split-path-3.c
- d992ba599bfc7773921562d11d02f7da  gcc/testsuite/gcc.dg/tree-ssa/split-path-4.c
- 8532e7dedadcd4286f689f12209bd1bf  gcc/testsuite/gcc.dg/tree-ssa/split-path-5.c
- 7306543330c7415c1a56433c3640a1da  gcc/testsuite/gcc.dg/tree-ssa/split-path-6.c
- 46474197a5896cf18dd8ec96929014da  gcc/testsuite/gcc.dg/tree-ssa/split-path-7.c
- cc58f2bbf63f20c83f4c8c0d2d1348d8  gcc/testsuite/gcc.dg/tree-ssa/split-path-8.c
- 44357fdb9d6f097cddb4a49dbb427a27  gcc/testsuite/gcc.dg/tree-ssa/split-path-9.c
  de57f508f4b87a87da92299513721028  gcc/testsuite/gcc.dg/tree-ssa/sqrt_div.c
  5497d0691f379f1d688647db6c95cc34  gcc/testsuite/gcc.dg/tree-ssa/sra-1.c
  7558d785a363f3e5cfc302af96043d93  gcc/testsuite/gcc.dg/tree-ssa/sra-10.c
--- 66330,66335 ----
*************** e813e63c9825a3377b02a74e8f241dd3  gcc/te
*** 68733,68738 ****
--- 68780,68786 ----
  43a8b08c21b4c30238fa6b3584f6413a  gcc/testsuite/gcc.dg/vect/vect-109.c
  cecf449db3f22da39ab90eeff38bebab  gcc/testsuite/gcc.dg/vect/vect-11.c
  5c83586feeb0aef6cc19d7b1c180109d  gcc/testsuite/gcc.dg/vect/vect-110.c
+ 2401299ff7203dd42d89ece83d6bda3b  gcc/testsuite/gcc.dg/vect/vect-111.c
  9f6f5ba2cca56fa1d63b4419baf2e827  gcc/testsuite/gcc.dg/vect/vect-112-big-array.c
  be2e215b655b0a093c94c71e21c70495  gcc/testsuite/gcc.dg/vect/vect-112.c
  af93831b3e1a88e0486b5577563b435c  gcc/testsuite/gcc.dg/vect/vect-113.c
*************** b1cc384f47b89880332e2ada90b5a27c  gcc/te
*** 68867,68873 ****
  2a3e312bd7e5ab5df45fd26be16729e2  gcc/testsuite/gcc.dg/vect/vect-alias-check-2.c
  4b1c70d74fd73297c4cea65a983aaa98  gcc/testsuite/gcc.dg/vect/vect-alias-check-20.c
  70f35d6235f257d8a748a4c306ed92cd  gcc/testsuite/gcc.dg/vect/vect-alias-check-3.c
! e91e50f7ac96bf4c7f84c3910d7a8ffd  gcc/testsuite/gcc.dg/vect/vect-alias-check-4.c
  3c03b4406103dc9957e802641a4d4b36  gcc/testsuite/gcc.dg/vect/vect-alias-check-5.c
  ff089a27e850ec5cc9c4418ac3d53928  gcc/testsuite/gcc.dg/vect/vect-alias-check-6.c
  849eee1578d80f374003ab06c8c9881d  gcc/testsuite/gcc.dg/vect/vect-alias-check-7.c
--- 68915,68921 ----
  2a3e312bd7e5ab5df45fd26be16729e2  gcc/testsuite/gcc.dg/vect/vect-alias-check-2.c
  4b1c70d74fd73297c4cea65a983aaa98  gcc/testsuite/gcc.dg/vect/vect-alias-check-20.c
  70f35d6235f257d8a748a4c306ed92cd  gcc/testsuite/gcc.dg/vect/vect-alias-check-3.c
! cef855bdf98883384d8b60c61d297e87  gcc/testsuite/gcc.dg/vect/vect-alias-check-4.c
  3c03b4406103dc9957e802641a4d4b36  gcc/testsuite/gcc.dg/vect/vect-alias-check-5.c
  ff089a27e850ec5cc9c4418ac3d53928  gcc/testsuite/gcc.dg/vect/vect-alias-check-6.c
  849eee1578d80f374003ab06c8c9881d  gcc/testsuite/gcc.dg/vect/vect-alias-check-7.c
*************** da9eedb2c6a365008d958ef7f394e8c4  gcc/te
*** 69206,69211 ****
--- 69254,69264 ----
  6587a33138b55d2611b8a08a33765246  gcc/testsuite/gcc.dg/vect/vect-gather-6.c
  b57bff07bf75c647567f17c15d11e41a  gcc/testsuite/gcc.dg/vect/vect-ifcvt-10.c
  7ff6a1677653178105297386e07866a3  gcc/testsuite/gcc.dg/vect/vect-ifcvt-11.c
+ 56586c8f68f589a09124770825212e39  gcc/testsuite/gcc.dg/vect/vect-ifcvt-11a.c
+ 1862394be35dd6e71859a84db97b930d  gcc/testsuite/gcc.dg/vect/vect-ifcvt-12.c
+ 95b09544d5432e9c773c28e143a8f763  gcc/testsuite/gcc.dg/vect/vect-ifcvt-13.c
+ 95b09544d5432e9c773c28e143a8f763  gcc/testsuite/gcc.dg/vect/vect-ifcvt-14.c
+ 50e618b85b3962ced2d9a400c29965bf  gcc/testsuite/gcc.dg/vect/vect-ifcvt-15.c
  4a2948c935a39269be9a9b98aaa705de  gcc/testsuite/gcc.dg/vect/vect-ifcvt-16.c
  7327c28f8d2805ac1f7243e0f8c06f88  gcc/testsuite/gcc.dg/vect/vect-ifcvt-17.c
  3350dbf218125eaf60c5b0bca364ecf2  gcc/testsuite/gcc.dg/vect/vect-ifcvt-18.c
*************** bcf507d9ada85546ab41fae1d6c34c2c  gcc/te
*** 69412,69417 ****
--- 69465,69472 ----
  da160a8349fe2e0daa932c3bd967f635  gcc/testsuite/gcc.dg/vect/vect-pr124677.c
  260ab9d6cedafb5f4f528e8d6bc65324  gcc/testsuite/gcc.dg/vect/vect-pr124743.c
  09beadb34e2b0bfa6179ef89f2e6d9f7  gcc/testsuite/gcc.dg/vect/vect-pr124802.c
+ 35ab3c217a19586ac0d452e88ef57bb3  gcc/testsuite/gcc.dg/vect/vect-pr126159-1.c
+ 090aafcb956b616f328a80c7570602a2  gcc/testsuite/gcc.dg/vect/vect-pr126159-2.c
  464c872c62ad2fc5d241ed918e0cf5de  gcc/testsuite/gcc.dg/vect/vect-pr61247.c
  4d57df9e3b3522c9f1a6707c05f1da45  gcc/testsuite/gcc.dg/vect/vect-pr69848.c
  3a3a316ff2f2496494ecb0bd77d61aad  gcc/testsuite/gcc.dg/vect/vect-pre-interact.c
*************** cef7070b381518da6b1a5af1d304f9f6  gcc/te
*** 69739,69745 ****
  65032f980ed26d35986016868f58f5fb  gcc/testsuite/gcc.dg/visibility-b.c
  3914edf5bc61ae4a7f8bfe7daf7a917f  gcc/testsuite/gcc.dg/visibility-c.c
  86ff2e0220006b62079262b0a60c8325  gcc/testsuite/gcc.dg/visibility-d.c
! 638ef227084d279899d96b2a58a191b5  gcc/testsuite/gcc.dg/vla-1.c
  3a3971b57d9b9c24f86e7ec58832e1cc  gcc/testsuite/gcc.dg/vla-10.c
  156d8c0cb6e36f02ea60ab74130dbbb3  gcc/testsuite/gcc.dg/vla-11.c
  6279bb892b45c144be8f0f592f512f57  gcc/testsuite/gcc.dg/vla-12.c
--- 69794,69800 ----
  65032f980ed26d35986016868f58f5fb  gcc/testsuite/gcc.dg/visibility-b.c
  3914edf5bc61ae4a7f8bfe7daf7a917f  gcc/testsuite/gcc.dg/visibility-c.c
  86ff2e0220006b62079262b0a60c8325  gcc/testsuite/gcc.dg/visibility-d.c
! b1f2cdc3f374c828d97a971eb0c37f7b  gcc/testsuite/gcc.dg/vla-1.c
  3a3971b57d9b9c24f86e7ec58832e1cc  gcc/testsuite/gcc.dg/vla-10.c
  156d8c0cb6e36f02ea60ab74130dbbb3  gcc/testsuite/gcc.dg/vla-11.c
  6279bb892b45c144be8f0f592f512f57  gcc/testsuite/gcc.dg/vla-12.c
*************** bfd2eae1e2b6b0aa804a7e33580dc190  gcc/te
*** 70089,70095 ****
  ac95267ce6379b7f5d302257c14033ea  gcc/testsuite/gcc.misc-tests/i386-prefetch.exp
  51bca646196e93b1c8a68319441e0595  gcc/testsuite/gcc.misc-tests/linkage-x.c
  c8d7a18c46af7540c2434614324e7daf  gcc/testsuite/gcc.misc-tests/linkage-y.c
! 24e3d0a031b7852355511d1ae61cccd6  gcc/testsuite/gcc.misc-tests/linkage.exp
  1d8fa0a1210ed4c4bf0ff4dfa959f060  gcc/testsuite/gcc.misc-tests/matrix1.c
  2401a49a4631fb737e9a10d01b09502e  gcc/testsuite/gcc.misc-tests/matrix1.exp
  b45579fdac6008721502ddecb5df29d8  gcc/testsuite/gcc.misc-tests/mg-2.c
--- 70144,70150 ----
  ac95267ce6379b7f5d302257c14033ea  gcc/testsuite/gcc.misc-tests/i386-prefetch.exp
  51bca646196e93b1c8a68319441e0595  gcc/testsuite/gcc.misc-tests/linkage-x.c
  c8d7a18c46af7540c2434614324e7daf  gcc/testsuite/gcc.misc-tests/linkage-y.c
! 0ea43705b101a8b0ca48ac661963fa65  gcc/testsuite/gcc.misc-tests/linkage.exp
  1d8fa0a1210ed4c4bf0ff4dfa959f060  gcc/testsuite/gcc.misc-tests/matrix1.c
  2401a49a4631fb737e9a10d01b09502e  gcc/testsuite/gcc.misc-tests/matrix1.exp
  b45579fdac6008721502ddecb5df29d8  gcc/testsuite/gcc.misc-tests/mg-2.c
*************** b656d217b1ddc88a7c1749790cc1eeba  gcc/te
*** 70107,70113 ****
  8b124ef23e45ad61bc2c14ba0e1096cc  gcc/testsuite/gcc.misc-tests/sieve.exp
  f0e0d52dbb689249f8d057f00e4c65e9  gcc/testsuite/gcc.misc-tests/sort2.c
  8826d63f165d86f2dbd4e777a2dae9df  gcc/testsuite/gcc.misc-tests/sort2.exp
! 96673a4bb8bf18ac0be598567bad1cdc  gcc/testsuite/gcc.src/maintainers.exp
  8031dd3c171877e36f7163b73fe68210  gcc/testsuite/gcc.target/aarch64/121127.c
  512f8592397ac26799ee85d9c29339ec  gcc/testsuite/gcc.target/aarch64/_Float16_1.c
  6bead3d18e15a037cfb743e33e7712a5  gcc/testsuite/gcc.target/aarch64/_Float16_2.c
--- 70162,70168 ----
  8b124ef23e45ad61bc2c14ba0e1096cc  gcc/testsuite/gcc.misc-tests/sieve.exp
  f0e0d52dbb689249f8d057f00e4c65e9  gcc/testsuite/gcc.misc-tests/sort2.c
  8826d63f165d86f2dbd4e777a2dae9df  gcc/testsuite/gcc.misc-tests/sort2.exp
! 2bdef08e906e8d4bd9c8fa846a12b729  gcc/testsuite/gcc.src/maintainers.exp
  8031dd3c171877e36f7163b73fe68210  gcc/testsuite/gcc.target/aarch64/121127.c
  512f8592397ac26799ee85d9c29339ec  gcc/testsuite/gcc.target/aarch64/_Float16_1.c
  6bead3d18e15a037cfb743e33e7712a5  gcc/testsuite/gcc.target/aarch64/_Float16_2.c
*************** f67a4b5e44d64eb195dea3cc6d237bba  gcc/te
*** 70399,70404 ****
--- 70454,70460 ----
  ab48b114d61d03d84807a12fe0ebf312  gcc/testsuite/gcc.target/aarch64/acle/vmmlaq_f32_mf8.c
  3956a5fd71df11f14c94ff428d8264a6  gcc/testsuite/gcc.target/aarch64/adc-1.c
  d20a3c5925eb2e8c28249b5e4eb57a97  gcc/testsuite/gcc.target/aarch64/adc-2.c
+ 54df42702a1bc763cecfe486deebf7b5  gcc/testsuite/gcc.target/aarch64/add_abs.c
  e2b1388fba47b95c8b27a3e1a29953ff  gcc/testsuite/gcc.target/aarch64/adds.c
  976de79b2dc577315029cceb938ef26e  gcc/testsuite/gcc.target/aarch64/adds1.c
  caf80fb3defd2872fa7d7dc3fa721878  gcc/testsuite/gcc.target/aarch64/adds2.c
*************** adafad2cd221edb3fb3e0a7b52bc165c  gcc/te
*** 70503,70509 ****
  d54fffef4035aec24f0845fd1b80faa1  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vclz.c
  441c03ab2d4d17821e738deab650d8ee  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcnt.c
  e47e2f34dfaf286e766b12c74044f2b8  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcombine.c
! 6a67021ba2af3142fbe475866c33c7e5  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcopy_lane_indices.c
  71b3d6a7c07889cb589339c39d6478e3  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcreate.c
  02605c3ddba5557ff20275a979b9a402  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcvt.c
  7239a07f803b77f6138600000612801b  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcvtX.inc
--- 70559,70565 ----
  d54fffef4035aec24f0845fd1b80faa1  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vclz.c
  441c03ab2d4d17821e738deab650d8ee  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcnt.c
  e47e2f34dfaf286e766b12c74044f2b8  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcombine.c
! c571a6482d8ba2e3a9246b769de7c1af  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcopy_lane_indices.c
  71b3d6a7c07889cb589339c39d6478e3  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcreate.c
  02605c3ddba5557ff20275a979b9a402  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcvt.c
  7239a07f803b77f6138600000612801b  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcvtX.inc
*************** ba8b0dfe81019139ed5b239fb9d22ae0  gcc/te
*** 70981,70986 ****
--- 71037,71043 ----
  f73e7d4ce7c3e327e953b946f2617247  gcc/testsuite/gcc.target/aarch64/aes_1.c
  d1d74e6c3fd8740a204f8a685d723756  gcc/testsuite/gcc.target/aarch64/aes_2.c
  ae9d490ad1228549fa8e44e7c17ec959  gcc/testsuite/gcc.target/aarch64/aes_xor_combine.c
+ 26b34a8e35402ae2f3715254a8afbe9e  gcc/testsuite/gcc.target/aarch64/ampere1-reduction-unroll-1.c
  ac955eae2263ff93e35a9a51ab29008a  gcc/testsuite/gcc.target/aarch64/and-be.c
  df8491d7fa143b8700a96bb39ecfea17  gcc/testsuite/gcc.target/aarch64/and-le.c
  b144bbaff9193d702e5e6e91e1c21a7a  gcc/testsuite/gcc.target/aarch64/and_const.c
*************** b22aa9cc27c6d5f12963d16ea8b99803  gcc/te
*** 71452,71457 ****
--- 71509,71515 ----
  b59ae0640b0fcb8cb2b558fc7fa92aac  gcc/testsuite/gcc.target/aarch64/fnmul-2.c
  a1212235242dd12baac6ac6d3f0f04ad  gcc/testsuite/gcc.target/aarch64/fnmul-3.c
  37fb660ad953888e296980c0d2b85a7c  gcc/testsuite/gcc.target/aarch64/fnmul-4.c
+ a3831f17abe6ad2974666761fa83eb7a  gcc/testsuite/gcc.target/aarch64/fold-mem-offsets.c
  a9470d48ec15369aea11218770e41e89  gcc/testsuite/gcc.target/aarch64/fp16/f16_convs_1.c
  1a65d9a8643a40367284cf31d1d3b963  gcc/testsuite/gcc.target/aarch64/fp16/f16_convs_2.c
  19359feeb3591f95935a28b09ce711e5  gcc/testsuite/gcc.target/aarch64/fp16/fp16.exp
*************** def5c2749854b129e22c1e5c9a817159  gcc/te
*** 72108,72113 ****
--- 72166,72175 ----
  b3ab989c7fd4a3722c72edff57ac7f9d  gcc/testsuite/gcc.target/aarch64/pr123791.c
  0fb432038c1a084913bbbe8d8d8b8bd8  gcc/testsuite/gcc.target/aarch64/pr123792.c
  a588c84982135f60225d2a017f7b53df  gcc/testsuite/gcc.target/aarch64/pr124078-1.c
+ 0c167430405c5368bac9f780a05e0e84  gcc/testsuite/gcc.target/aarch64/pr124146-2.c
+ f8db7945a9f18ef51b52ba97904b7739  gcc/testsuite/gcc.target/aarch64/pr124146-3.c
+ c7a7f42c20bf44d05fcef4047e2c48a4  gcc/testsuite/gcc.target/aarch64/pr124146-4.c
+ d7a71dc62df6f9ab1e9d87f1ec376d4c  gcc/testsuite/gcc.target/aarch64/pr124146.c
  3416e11e7fd77f36803f713303e6145a  gcc/testsuite/gcc.target/aarch64/pr124167.c
  092b09603aba6f2d4c58084993c984b1  gcc/testsuite/gcc.target/aarch64/pr124572.c
  96507a42a05f136a062f99a03b8ba35f  gcc/testsuite/gcc.target/aarch64/pr124713.c
*************** ecc86ca70d9873931d62c47481e3089d  gcc/te
*** 77225,77230 ****
--- 77287,77293 ----
  82cc68a63e644509dc4ffa773504d753  gcc/testsuite/gcc.target/aarch64/sve/rsqrt_1.c
  f9d2dfb3403e355b20f0e438b79b899c  gcc/testsuite/gcc.target/aarch64/sve/rsqrt_1_run.c
  62403b5248ada1c1a275c784875bfe24  gcc/testsuite/gcc.target/aarch64/sve/sad_1.c
+ d7f0522d33002827b658ef3245e7081f  gcc/testsuite/gcc.target/aarch64/sve/sad_2.c
  cc9438c73e84764e938abe1a30ceff39  gcc/testsuite/gcc.target/aarch64/sve/satd-hadamard.c
  432cf44e65a61ac1eb74935a6b59c83c  gcc/testsuite/gcc.target/aarch64/sve/saturating_arithmetic.inc
  1dfd73f5584b66374b6b6c6ed9869eba  gcc/testsuite/gcc.target/aarch64/sve/saturating_arithmetic_1.c
*************** ed20d570634618501c755bc7964b8a4a  gcc/te
*** 77594,77599 ****
--- 77657,77663 ----
  c8d457152145e3626a04326e99c314fb  gcc/testsuite/gcc.target/aarch64/sve/vect-early-break-cbranch_14.c
  efeda3733bd034f4969bc699d7a22419  gcc/testsuite/gcc.target/aarch64/sve/vect-early-break-cbranch_15.c
  b6518dc2fb6c56524ef170f253a178a5  gcc/testsuite/gcc.target/aarch64/sve/vect-early-break-cbranch_16.c
+ 9678b6db180070547f5de9665b1f214b  gcc/testsuite/gcc.target/aarch64/sve/vect-early-break-cbranch_18.c
  e229b8062c7895178d143eef74353349  gcc/testsuite/gcc.target/aarch64/sve/vect-early-break-cbranch_2.c
  d783b1ea4a1a9759701a47ae8033f16c  gcc/testsuite/gcc.target/aarch64/sve/vect-early-break-cbranch_3.c
  97bd72765a04b95d67aa58c153bb1038  gcc/testsuite/gcc.target/aarch64/sve/vect-early-break-cbranch_4.c
*************** bdc07c3b7e37cb1f5eca49bd24a3eebb  gcc/te
*** 79673,79678 ****
--- 79737,79745 ----
  1ef0402656b46734e00d7687ac6cc01a  gcc/testsuite/gcc.target/aarch64/vzip_2.c
  4e42015e5b212d79928e26058b1ce6b5  gcc/testsuite/gcc.target/aarch64/vzip_3.c
  192bda73349636748ab7015216c8874c  gcc/testsuite/gcc.target/aarch64/vzip_4.c
+ f193284d6bf4dd24926f949135f005ab  gcc/testsuite/gcc.target/aarch64/widening-mul-defer-fma-1.c
+ ad9ce6798bbcb26a5a5ba64fe87ac448  gcc/testsuite/gcc.target/aarch64/widening-mul-defer-fma-2.c
+ 6ee602316033955cd747fb08263da76c  gcc/testsuite/gcc.target/aarch64/widening-mul-defer-fma-3.c
  e916fcf0c3130fc5102d03f2d729ff64  gcc/testsuite/gcc.target/aarch64/with-tune-config.c
  4683d4cffa583230e66ffd80229a9ff7  gcc/testsuite/gcc.target/aarch64/with-tune-march.c
  244ffe859281a44df2fa3ac62341bd75  gcc/testsuite/gcc.target/aarch64/with-tune-mcpu.c
*************** e94286eccc733d11a63447fdd9bada99  gcc/te
*** 83782,83788 ****
  3a8f07748adbffc9bb3f16173e9a3fd9  gcc/testsuite/gcc.target/arm/thumb2-slow-flash-data-4.c
  74dfb9efd2ea82e303d28ac1d2ec908b  gcc/testsuite/gcc.target/arm/thumb2-slow-flash-data-5.c
  91b223ff92af83526eb2bf8c06358638  gcc/testsuite/gcc.target/arm/thumb2-switchstatement.c
! 661cd52deb4f860aae4c6c1b1e062e57  gcc/testsuite/gcc.target/arm/tls-disable-literal-pool.c
  b5cb0cc39d4570e0da1e85821a82e816  gcc/testsuite/gcc.target/arm/tlscall.c
  bbfeab1d19ae8a86996efa5896bc515a  gcc/testsuite/gcc.target/arm/unaligned-argument-1.c
  07b58b9d3cae47b57b137b31a0ea472c  gcc/testsuite/gcc.target/arm/unaligned-argument-2.c
--- 83849,83855 ----
  3a8f07748adbffc9bb3f16173e9a3fd9  gcc/testsuite/gcc.target/arm/thumb2-slow-flash-data-4.c
  74dfb9efd2ea82e303d28ac1d2ec908b  gcc/testsuite/gcc.target/arm/thumb2-slow-flash-data-5.c
  91b223ff92af83526eb2bf8c06358638  gcc/testsuite/gcc.target/arm/thumb2-switchstatement.c
! fd1c37fe38d5528dd562aa4b0d4ee01c  gcc/testsuite/gcc.target/arm/tls-disable-literal-pool.c
  b5cb0cc39d4570e0da1e85821a82e816  gcc/testsuite/gcc.target/arm/tlscall.c
  bbfeab1d19ae8a86996efa5896bc515a  gcc/testsuite/gcc.target/arm/unaligned-argument-1.c
  07b58b9d3cae47b57b137b31a0ea472c  gcc/testsuite/gcc.target/arm/unaligned-argument-2.c
*************** da2c45d7d0822fa8b3874402bb73965a  gcc/te
*** 84722,84730 ****
  2511ca08a6587c62a068468e93afc652  gcc/testsuite/gcc.target/gcn/cond_fmaxnm_1_run.c
  33c36eccd5c31f1673fb9645d1cbbb6d  gcc/testsuite/gcc.target/gcn/cond_fmaxnm_2.c
  eb8696a455fd16137fbe536d0c09c64f  gcc/testsuite/gcc.target/gcn/cond_fmaxnm_2_run.c
! b944d26de901092c3b2ac680330dec44  gcc/testsuite/gcc.target/gcn/cond_fmaxnm_3.c
  1116a722095cd29029e1ed1b0f42f342  gcc/testsuite/gcc.target/gcn/cond_fmaxnm_3_run.c
! 8875a0da1c7c25eef7a3843794bad578  gcc/testsuite/gcc.target/gcn/cond_fmaxnm_4.c
  10f7ee57055ca921a3fc2baa780f7a02  gcc/testsuite/gcc.target/gcn/cond_fmaxnm_4_run.c
  6c4a4102129414af13d6a9dbe41e2659  gcc/testsuite/gcc.target/gcn/cond_fmaxnm_5.c
  22598d4094703254571d1c1c38bf9114  gcc/testsuite/gcc.target/gcn/cond_fmaxnm_5_run.c
--- 84789,84797 ----
  2511ca08a6587c62a068468e93afc652  gcc/testsuite/gcc.target/gcn/cond_fmaxnm_1_run.c
  33c36eccd5c31f1673fb9645d1cbbb6d  gcc/testsuite/gcc.target/gcn/cond_fmaxnm_2.c
  eb8696a455fd16137fbe536d0c09c64f  gcc/testsuite/gcc.target/gcn/cond_fmaxnm_2_run.c
! 88335bc642e93a9ec712f384fc23d932  gcc/testsuite/gcc.target/gcn/cond_fmaxnm_3.c
  1116a722095cd29029e1ed1b0f42f342  gcc/testsuite/gcc.target/gcn/cond_fmaxnm_3_run.c
! 5b14b8e04b4bc1501cb2c7bade0406fd  gcc/testsuite/gcc.target/gcn/cond_fmaxnm_4.c
  10f7ee57055ca921a3fc2baa780f7a02  gcc/testsuite/gcc.target/gcn/cond_fmaxnm_4_run.c
  6c4a4102129414af13d6a9dbe41e2659  gcc/testsuite/gcc.target/gcn/cond_fmaxnm_5.c
  22598d4094703254571d1c1c38bf9114  gcc/testsuite/gcc.target/gcn/cond_fmaxnm_5_run.c
*************** f10c8486c2d1b83804c7a5660577c681  gcc/te
*** 84738,84746 ****
  6ba7a458125ab63cef5a955eb3f679dc  gcc/testsuite/gcc.target/gcn/cond_fminnm_1_run.c
  77f5aee594f64e389afe27ac55fda217  gcc/testsuite/gcc.target/gcn/cond_fminnm_2.c
  9ab15d59c2a1ef7550302595b78e4c77  gcc/testsuite/gcc.target/gcn/cond_fminnm_2_run.c
! 336372f84f4ee400d15cf7c508060840  gcc/testsuite/gcc.target/gcn/cond_fminnm_3.c
  4cd45f5a7694799cc968464eb3bba148  gcc/testsuite/gcc.target/gcn/cond_fminnm_3_run.c
! 02e33e9d1891c326bf44f1faffcd6d06  gcc/testsuite/gcc.target/gcn/cond_fminnm_4.c
  d366633ce5e932318194971afdf7f7a2  gcc/testsuite/gcc.target/gcn/cond_fminnm_4_run.c
  1ad8af1e1bc5d9c669eb29f2c97d395f  gcc/testsuite/gcc.target/gcn/cond_fminnm_5.c
  b58ba4d23a4f05a63892c26fc6320b36  gcc/testsuite/gcc.target/gcn/cond_fminnm_5_run.c
--- 84805,84813 ----
  6ba7a458125ab63cef5a955eb3f679dc  gcc/testsuite/gcc.target/gcn/cond_fminnm_1_run.c
  77f5aee594f64e389afe27ac55fda217  gcc/testsuite/gcc.target/gcn/cond_fminnm_2.c
  9ab15d59c2a1ef7550302595b78e4c77  gcc/testsuite/gcc.target/gcn/cond_fminnm_2_run.c
! a52f0ec0e1ea0bcbbb2aff744ea51ad9  gcc/testsuite/gcc.target/gcn/cond_fminnm_3.c
  4cd45f5a7694799cc968464eb3bba148  gcc/testsuite/gcc.target/gcn/cond_fminnm_3_run.c
! 5dd5392bffa20a968d56d14eb9bdf21a  gcc/testsuite/gcc.target/gcn/cond_fminnm_4.c
  d366633ce5e932318194971afdf7f7a2  gcc/testsuite/gcc.target/gcn/cond_fminnm_4_run.c
  1ad8af1e1bc5d9c669eb29f2c97d395f  gcc/testsuite/gcc.target/gcn/cond_fminnm_5.c
  b58ba4d23a4f05a63892c26fc6320b36  gcc/testsuite/gcc.target/gcn/cond_fminnm_5_run.c
*************** ed39fac01137b1fe7fa6aa0aed6f57d9  gcc/te
*** 84988,84993 ****
--- 85055,85062 ----
  79a49b8c13cb7ee745254fc8de7ae899  gcc/testsuite/gcc.target/i386/991230-1.c
  f735456052a700dd38243bb3e18ed960  gcc/testsuite/gcc.target/i386/abi-1.c
  d1f50582e0aff656e8d04fa44820aada  gcc/testsuite/gcc.target/i386/abi-2.c
+ ee4708424aefdffd40679896b5d93aea  gcc/testsuite/gcc.target/i386/abi-mix-1.c
+ aaf36a000abd8aded2fe5ce3b23592b3  gcc/testsuite/gcc.target/i386/abi-mix-2.c
  fc0f5bb1d300de76b812a0ae5b8bd01c  gcc/testsuite/gcc.target/i386/addr-sel-1.c
  a7bd988811ab95583c012c435a897182  gcc/testsuite/gcc.target/i386/addr-space-1.c
  f3b1566c7c98d2f59922637c82963457  gcc/testsuite/gcc.target/i386/addr-space-2.c
*************** d3a83e902d535bfb6c532e16d5b3622e  gcc/te
*** 89354,89359 ****
--- 89423,89429 ----
  abb025375057fca2257ef280333b1bc3  gcc/testsuite/gcc.target/i386/bmi2-bzhi64-1.c
  5721976eaa792ce05fbaeb5ab9b2db4c  gcc/testsuite/gcc.target/i386/bmi2-bzhi64-1a.c
  826e88b635597298eb11da113d70a12b  gcc/testsuite/gcc.target/i386/bmi2-check.h
+ 1352b9cf37ba3653665b78f38febc363  gcc/testsuite/gcc.target/i386/bmi2-mulx-highpart-1.c
  433d1b6fa6face73e6695b6d632786a2  gcc/testsuite/gcc.target/i386/bmi2-mulx32-1.c
  f8784bf576dfa8df4a3ba072a7d09abf  gcc/testsuite/gcc.target/i386/bmi2-mulx32-1a.c
  e3b178e2b7128baeddd8c5bd2a5fb17f  gcc/testsuite/gcc.target/i386/bmi2-mulx32-2.c
*************** c6304e928bcf1393de99639a142057ad  gcc/te
*** 90314,90319 ****
--- 90384,90390 ----
  2376b08fdef000cf037280264f5437fb  gcc/testsuite/gcc.target/i386/mpx.c
  05b06b2c30d6910a0afec51d588f2c21  gcc/testsuite/gcc.target/i386/ms_hook_prologue.c
  0e6e9e397831921b702df0167f01b9d2  gcc/testsuite/gcc.target/i386/mul.c
+ 9cc56783ceeb2f065e06500f347c85ad  gcc/testsuite/gcc.target/i386/mulq-highpart.c
  3f03c366747891821238a2834cb47c5d  gcc/testsuite/gcc.target/i386/mult-highpart.c
  6214909c5cebe3099403b30910bbf1f6  gcc/testsuite/gcc.target/i386/mvc1.c
  98fd97ce23f7773af3c39c137882bd08  gcc/testsuite/gcc.target/i386/mvc10.c
*************** ce847ee191adcc1a562b86eae8463fe1  gcc/te
*** 90349,90368 ****
  28070df22cbeb8bdda40326e1f3db379  gcc/testsuite/gcc.target/i386/no-callee-saved-15.c
  9204056c1841f39e08a93f36fd4f926c  gcc/testsuite/gcc.target/i386/no-callee-saved-16.c
  603a6e01b2f7a9cfee08f9a76db61c4a  gcc/testsuite/gcc.target/i386/no-callee-saved-17.c
! aab3453cf3c5253a20cbcf5fb2b738c5  gcc/testsuite/gcc.target/i386/no-callee-saved-18.c
  a6f5ac6b7558804a95dea96184f06f84  gcc/testsuite/gcc.target/i386/no-callee-saved-19a.c
! ca984eb5a4172e6503f1c7a2e6bbc687  gcc/testsuite/gcc.target/i386/no-callee-saved-19b.c
  c5ee5e55b45788755521be86a2c5fc93  gcc/testsuite/gcc.target/i386/no-callee-saved-19c.c
! 21b12be45c4ce2ede3553313b2400cbd  gcc/testsuite/gcc.target/i386/no-callee-saved-19d.c
! 77b3f3d78832f0b1c64e5b05b673aa9d  gcc/testsuite/gcc.target/i386/no-callee-saved-19e.c
! a14afc4545978be3365714810486fa76  gcc/testsuite/gcc.target/i386/no-callee-saved-2.c
  1706fd64433a7760cdc1f03b531cc111  gcc/testsuite/gcc.target/i386/no-callee-saved-3.c
  7c0013e877ad677f03dc9f16afde12ee  gcc/testsuite/gcc.target/i386/no-callee-saved-4.c
  3945dff670a00bd729c9d700c0e429d3  gcc/testsuite/gcc.target/i386/no-callee-saved-5.c
  b72976450abb440a20ee8bbbcbe9d3da  gcc/testsuite/gcc.target/i386/no-callee-saved-6.c
  91ce8e7334f6685e1162fd58720224ea  gcc/testsuite/gcc.target/i386/no-callee-saved-7.c
! d3aa3fdd97d8af1545b4ad8a07d4d869  gcc/testsuite/gcc.target/i386/no-callee-saved-8.c
! adb9a921b0738fbc19853dbc3cfe9bf3  gcc/testsuite/gcc.target/i386/no-callee-saved-9.c
  5ddb42184fe06678b1e6b2401e6afbdf  gcc/testsuite/gcc.target/i386/nop-mcount-m16.c
  92d9fb2d7f42096be9b83ca172427c12  gcc/testsuite/gcc.target/i386/nop-mcount.c
  7554f6e1a30e3cc93f33dbad79fc2a68  gcc/testsuite/gcc.target/i386/noplt-1.c
--- 90420,90453 ----
  28070df22cbeb8bdda40326e1f3db379  gcc/testsuite/gcc.target/i386/no-callee-saved-15.c
  9204056c1841f39e08a93f36fd4f926c  gcc/testsuite/gcc.target/i386/no-callee-saved-16.c
  603a6e01b2f7a9cfee08f9a76db61c4a  gcc/testsuite/gcc.target/i386/no-callee-saved-17.c
! ca239e587e0aa89d75a7253cb23488fd  gcc/testsuite/gcc.target/i386/no-callee-saved-18.c
  a6f5ac6b7558804a95dea96184f06f84  gcc/testsuite/gcc.target/i386/no-callee-saved-19a.c
! df011526ce5698b73f27696bbd94aa81  gcc/testsuite/gcc.target/i386/no-callee-saved-19b.c
  c5ee5e55b45788755521be86a2c5fc93  gcc/testsuite/gcc.target/i386/no-callee-saved-19c.c
! b7ab7bf0fe55114ea06b046940b3c9ba  gcc/testsuite/gcc.target/i386/no-callee-saved-19d.c
! 99c668f73a6b26c1b62f9c322b6f0a18  gcc/testsuite/gcc.target/i386/no-callee-saved-19e.c
! ea4ec5e64ebf5e669bb6033246f4a53c  gcc/testsuite/gcc.target/i386/no-callee-saved-2.c
! 2bcf022bbcb99d2e858b71524196bf73  gcc/testsuite/gcc.target/i386/no-callee-saved-20.c
  1706fd64433a7760cdc1f03b531cc111  gcc/testsuite/gcc.target/i386/no-callee-saved-3.c
  7c0013e877ad677f03dc9f16afde12ee  gcc/testsuite/gcc.target/i386/no-callee-saved-4.c
  3945dff670a00bd729c9d700c0e429d3  gcc/testsuite/gcc.target/i386/no-callee-saved-5.c
  b72976450abb440a20ee8bbbcbe9d3da  gcc/testsuite/gcc.target/i386/no-callee-saved-6.c
  91ce8e7334f6685e1162fd58720224ea  gcc/testsuite/gcc.target/i386/no-callee-saved-7.c
! 985af4594ff650e6f82cf98012c9dd06  gcc/testsuite/gcc.target/i386/no-callee-saved-8.c
! 54e2d3c2198ef95820d710f53a6ed14b  gcc/testsuite/gcc.target/i386/no-callee-saved-9.c
! 4ea94cd18729eb5cc0e58212c005a427  gcc/testsuite/gcc.target/i386/no-caller-saved-1-ms.c
! 1f97d84f6cecd68356ce065ca8ea0607  gcc/testsuite/gcc.target/i386/no-caller-saved-1-sysv.c
! edb3741446765936aab2843091af98a4  gcc/testsuite/gcc.target/i386/no-caller-saved-1.c
! c1c7edb7d6e2363fec3639b1ec3c2d05  gcc/testsuite/gcc.target/i386/no-caller-saved-10.c
! 21f8f09855d4378a12e3f4d2e6ebf610  gcc/testsuite/gcc.target/i386/no-caller-saved-11.c
! ccd271c9652062dfb435c9763416b84e  gcc/testsuite/gcc.target/i386/no-caller-saved-2.c
! e4cc7f98e3ebdcfb92a6e17b185ba49f  gcc/testsuite/gcc.target/i386/no-caller-saved-3.c
! 5fa7445693cfe841451b4c660de0d84e  gcc/testsuite/gcc.target/i386/no-caller-saved-4.c
! a9c7588498da8a74dfe42d6fa7ff5f5f  gcc/testsuite/gcc.target/i386/no-caller-saved-5.c
! 6abd9891bda027bb9e588f4d7e87ff4c  gcc/testsuite/gcc.target/i386/no-caller-saved-6.c
! 4c7e51bf44b0fd785680c3211a05e863  gcc/testsuite/gcc.target/i386/no-caller-saved-7.c
! c540fab18b82c65a1fc7e011f235a1ca  gcc/testsuite/gcc.target/i386/no-caller-saved-8.c
! 06b7675b17d0a7937a52c120619e31b0  gcc/testsuite/gcc.target/i386/no-caller-saved-9.c
  5ddb42184fe06678b1e6b2401e6afbdf  gcc/testsuite/gcc.target/i386/nop-mcount-m16.c
  92d9fb2d7f42096be9b83ca172427c12  gcc/testsuite/gcc.target/i386/nop-mcount.c
  7554f6e1a30e3cc93f33dbad79fc2a68  gcc/testsuite/gcc.target/i386/noplt-1.c
*************** ccca3b30b6af298d42eddc8e8341d504  gcc/te
*** 90899,90905 ****
  b908829ba1abd899d74b7494ef7f84c8  gcc/testsuite/gcc.target/i386/pr106303.c
  8e04a4c455c50be91bd44e269c69ba78  gcc/testsuite/gcc.target/i386/pr106322.c
  d73eb1730ba03838f067f7d89538ec5f  gcc/testsuite/gcc.target/i386/pr106347.c
! 8b2a2d866f1cca03bdf1c6e4549342c7  gcc/testsuite/gcc.target/i386/pr106450.c
  1b9e10a79afe3d75e16c7e53f14d3a61  gcc/testsuite/gcc.target/i386/pr106453.c
  6b7de3fd1c9dbe08e19184ca06249a0c  gcc/testsuite/gcc.target/i386/pr106481.c
  0b24757c68eb2a3daa238bf239c21f77  gcc/testsuite/gcc.target/i386/pr106577.c
--- 90984,90990 ----
  b908829ba1abd899d74b7494ef7f84c8  gcc/testsuite/gcc.target/i386/pr106303.c
  8e04a4c455c50be91bd44e269c69ba78  gcc/testsuite/gcc.target/i386/pr106322.c
  d73eb1730ba03838f067f7d89538ec5f  gcc/testsuite/gcc.target/i386/pr106347.c
! fc0d5882a65e2fd501c6abe2d36502e3  gcc/testsuite/gcc.target/i386/pr106450.c
  1b9e10a79afe3d75e16c7e53f14d3a61  gcc/testsuite/gcc.target/i386/pr106453.c
  6b7de3fd1c9dbe08e19184ca06249a0c  gcc/testsuite/gcc.target/i386/pr106481.c
  0b24757c68eb2a3daa238bf239c21f77  gcc/testsuite/gcc.target/i386/pr106577.c
*************** ef2cdb48cbe0dedfce0d7eb770a1f30f  gcc/te
*** 91299,91305 ****
  42f4bc7c237a78cf6b5c8c5a42d51425  gcc/testsuite/gcc.target/i386/pr119473.c
  3cee806d4474b5711bc99a7abe73cadc  gcc/testsuite/gcc.target/i386/pr119549.c
  9f5fc319370713ca538c4ff5dba50a70  gcc/testsuite/gcc.target/i386/pr119784a.c
! 038406363ec46be9b531268d03546b94  gcc/testsuite/gcc.target/i386/pr119784b.c
  d3fd8df69f54080b300d3fa63445f693  gcc/testsuite/gcc.target/i386/pr119795.c
  1eb4ee8a31ea901f2b8b18e1346e6d95  gcc/testsuite/gcc.target/i386/pr119884.c
  2cc171f199bf9e81728d6f33d15ea6c0  gcc/testsuite/gcc.target/i386/pr119919.c
--- 91384,91390 ----
  42f4bc7c237a78cf6b5c8c5a42d51425  gcc/testsuite/gcc.target/i386/pr119473.c
  3cee806d4474b5711bc99a7abe73cadc  gcc/testsuite/gcc.target/i386/pr119549.c
  9f5fc319370713ca538c4ff5dba50a70  gcc/testsuite/gcc.target/i386/pr119784a.c
! af5b1fb328a4c5594547234401d6573b  gcc/testsuite/gcc.target/i386/pr119784b.c
  d3fd8df69f54080b300d3fa63445f693  gcc/testsuite/gcc.target/i386/pr119795.c
  1eb4ee8a31ea901f2b8b18e1346e6d95  gcc/testsuite/gcc.target/i386/pr119884.c
  2cc171f199bf9e81728d6f33d15ea6c0  gcc/testsuite/gcc.target/i386/pr119919.c
*************** df76ec06f1f94b77cb1652a61b635dcd  gcc/te
*** 91490,91495 ****
--- 91575,91586 ----
  57561ff787e5008d8cbc12f15d3ef382  gcc/testsuite/gcc.target/i386/pr125351.c
  5e60669dc31220ebca3d33f2e3d79b71  gcc/testsuite/gcc.target/i386/pr125355-2.c
  0d5d3d25c881e920fd3309b334c0c58f  gcc/testsuite/gcc.target/i386/pr125355.c
+ 3a279fe11d2ff2b5ac06c455d8030c0f  gcc/testsuite/gcc.target/i386/pr125436-1a.c
+ 0004242b482f069875dbdaf9591afedd  gcc/testsuite/gcc.target/i386/pr125436-1b.c
+ 76c265e51ce367d1bb22161a2785a112  gcc/testsuite/gcc.target/i386/pr125436-2a.c
+ 611cade9ca2cb44f3bcd97a96c40961f  gcc/testsuite/gcc.target/i386/pr125436-2b.c
+ 4fe6b8586570216e1e52b07fd8670ff3  gcc/testsuite/gcc.target/i386/pr125436-3.c
+ da78a391ac02d4cc16ae604858c2e8df  gcc/testsuite/gcc.target/i386/pr125436-4.c
  20e05cf993391a61cf15835793091a43  gcc/testsuite/gcc.target/i386/pr125614.c
  1f67cd0f9980b605cafe7d50af23cbf9  gcc/testsuite/gcc.target/i386/pr125883.c
  b74c2af473afb9b45ec43c61dc46e8e7  gcc/testsuite/gcc.target/i386/pr125893-1.c
*************** ec4b39860e0991bd026c5c23e91175ed  gcc/te
*** 91506,91511 ****
--- 91597,91604 ----
  15ee29d681fd6d3183fc51e825b71820  gcc/testsuite/gcc.target/i386/pr125895.c
  2f69299dd02a2a0513b7f830ae0df284  gcc/testsuite/gcc.target/i386/pr125949.c
  3d8dd7cc1e868adc304243a4c6a7d758  gcc/testsuite/gcc.target/i386/pr125958.c
+ 898e1acdc786475670737820ad19ab04  gcc/testsuite/gcc.target/i386/pr126098.c
+ f91ae39059fe7fb51f459d3446010197  gcc/testsuite/gcc.target/i386/pr126148.c
  8951a1fa31f2d45ef9eacfff6a733f77  gcc/testsuite/gcc.target/i386/pr13366.c
  9a752a4b3b77930d91d3c8b0c8897b90  gcc/testsuite/gcc.target/i386/pr13685.c
  31ead0ee84b382ba03e3561931bc6e40  gcc/testsuite/gcc.target/i386/pr14289-1.c
*************** f87405c6bc34723d3a6beec60ff1e327  gcc/te
*** 91860,91865 ****
--- 91953,91959 ----
  5e6de73519ac9f584a9666ea877f5f86  gcc/testsuite/gcc.target/i386/pr48237.c
  be400ddaa3be56c18065c4f1cb7c507a  gcc/testsuite/gcc.target/i386/pr48335-1.c
  3dfc1c2aadd0b2a9c8222b36204d9c89  gcc/testsuite/gcc.target/i386/pr48389.c
+ b2e52d110baeb793e1257a2183b9b378  gcc/testsuite/gcc.target/i386/pr48609-2.c
  a0e8df751a0532abc2f56fae74b35ceb  gcc/testsuite/gcc.target/i386/pr48678.c
  962e6910e237be3f3f6321cb982ac739  gcc/testsuite/gcc.target/i386/pr48688.c
  2a341a4e00b9beab43e6507b79108513  gcc/testsuite/gcc.target/i386/pr48708.c
*************** a0b729acde9699d1371dbbc4a150e4c3  gcc/te
*** 93443,93448 ****
--- 93537,93543 ----
  3dc7436738419d05898b026d61d1ffed  gcc/testsuite/gcc.target/i386/pr99531.c
  5486d1afdbf1b54f2a6bb18f55e8463d  gcc/testsuite/gcc.target/i386/pr99591.c
  50d8d196bff1de9d48e4220d453251f2  gcc/testsuite/gcc.target/i386/pr99600.c
+ 5f5482a8dc0ec1d7a05004f3d3b8913b  gcc/testsuite/gcc.target/i386/pr99668.c
  5c90090d1d1e1b7415543965fbde2289  gcc/testsuite/gcc.target/i386/pr99726.c
  5e4366668d71168c760c357dda3525bb  gcc/testsuite/gcc.target/i386/pr99744-1.c
  f08d11401823ad2121b53968898078a8  gcc/testsuite/gcc.target/i386/pr99744-2.c
*************** c67d46e36d4a7e968e0fcaa3891ff96e  gcc/te
*** 93471,93477 ****
  811a5506483777c40996276aca5ecc5e  gcc/testsuite/gcc.target/i386/preserve-none-11.c
  49e228ad7941593d66503db15bb82424  gcc/testsuite/gcc.target/i386/preserve-none-12.c
  af443a637b1bbe94c00fa9497d96f7bb  gcc/testsuite/gcc.target/i386/preserve-none-13.c
! f57a82588645a68210589a6abc683ddb  gcc/testsuite/gcc.target/i386/preserve-none-14.c
  b6a1cde1548013b66be47a3cd36c9945  gcc/testsuite/gcc.target/i386/preserve-none-15.c
  6f0b161e274978fc465705acdebb3969  gcc/testsuite/gcc.target/i386/preserve-none-16.c
  f85582df9bec9b4c497c5bb05affa30b  gcc/testsuite/gcc.target/i386/preserve-none-17.c
--- 93566,93572 ----
  811a5506483777c40996276aca5ecc5e  gcc/testsuite/gcc.target/i386/preserve-none-11.c
  49e228ad7941593d66503db15bb82424  gcc/testsuite/gcc.target/i386/preserve-none-12.c
  af443a637b1bbe94c00fa9497d96f7bb  gcc/testsuite/gcc.target/i386/preserve-none-13.c
! e3379a6b91d663a5f4f5c6d3d239dab0  gcc/testsuite/gcc.target/i386/preserve-none-14.c
  b6a1cde1548013b66be47a3cd36c9945  gcc/testsuite/gcc.target/i386/preserve-none-15.c
  6f0b161e274978fc465705acdebb3969  gcc/testsuite/gcc.target/i386/preserve-none-16.c
  f85582df9bec9b4c497c5bb05affa30b  gcc/testsuite/gcc.target/i386/preserve-none-17.c
*************** f85582df9bec9b4c497c5bb05affa30b  gcc/te
*** 93481,93487 ****
  d18b3df1e3458bb621e6394d59a53306  gcc/testsuite/gcc.target/i386/preserve-none-20.c
  56306971eee8f608a87c6e88e789d411  gcc/testsuite/gcc.target/i386/preserve-none-21.c
  7fca32d4ccac7b8ffc8719cb67604ae3  gcc/testsuite/gcc.target/i386/preserve-none-22.c
! 8278a9c28c9e6fe75e54ebbf4ae4f66a  gcc/testsuite/gcc.target/i386/preserve-none-23.c
  2fc1e21de8668eb81132effc8f8e0472  gcc/testsuite/gcc.target/i386/preserve-none-24.c
  36f2af5f54d89fbd52ffdf607d1db23c  gcc/testsuite/gcc.target/i386/preserve-none-25.c
  9d3023190f814ae2fde64e821fac4c21  gcc/testsuite/gcc.target/i386/preserve-none-26.c
--- 93576,93582 ----
  d18b3df1e3458bb621e6394d59a53306  gcc/testsuite/gcc.target/i386/preserve-none-20.c
  56306971eee8f608a87c6e88e789d411  gcc/testsuite/gcc.target/i386/preserve-none-21.c
  7fca32d4ccac7b8ffc8719cb67604ae3  gcc/testsuite/gcc.target/i386/preserve-none-22.c
! 4ed96f93d209ebe8db42f2b48b53c280  gcc/testsuite/gcc.target/i386/preserve-none-23.c
  2fc1e21de8668eb81132effc8f8e0472  gcc/testsuite/gcc.target/i386/preserve-none-24.c
  36f2af5f54d89fbd52ffdf607d1db23c  gcc/testsuite/gcc.target/i386/preserve-none-25.c
  9d3023190f814ae2fde64e821fac4c21  gcc/testsuite/gcc.target/i386/preserve-none-26.c
*************** b501a62760784713bfc543b44dc04688  gcc/te
*** 93494,93500 ****
  637c2bec6ad35c42f783e0a3b31021f4  gcc/testsuite/gcc.target/i386/preserve-none-4.c
  aeb341ec372b4ad17f7d946f744a6d78  gcc/testsuite/gcc.target/i386/preserve-none-5.c
  7b282944b063006f6e2ff7c67ebb74b7  gcc/testsuite/gcc.target/i386/preserve-none-6.c
! 192f3b1fb9a6904f97a6c55cb3648351  gcc/testsuite/gcc.target/i386/preserve-none-7.c
  46ee3b21d6fbb4874e2cc387dc76894f  gcc/testsuite/gcc.target/i386/preserve-none-8.c
  dbaa3ccce2e7bd8e259f97b2d272cf9c  gcc/testsuite/gcc.target/i386/preserve-none-9.c
  0a07ad1959a1b8b5b90dfd47f4cdd1db  gcc/testsuite/gcc.target/i386/prfchw-Wcast-qual-1.c
--- 93589,93595 ----
  637c2bec6ad35c42f783e0a3b31021f4  gcc/testsuite/gcc.target/i386/preserve-none-4.c
  aeb341ec372b4ad17f7d946f744a6d78  gcc/testsuite/gcc.target/i386/preserve-none-5.c
  7b282944b063006f6e2ff7c67ebb74b7  gcc/testsuite/gcc.target/i386/preserve-none-6.c
! d0d2f810c001eb119d6514b653451aa9  gcc/testsuite/gcc.target/i386/preserve-none-7.c
  46ee3b21d6fbb4874e2cc387dc76894f  gcc/testsuite/gcc.target/i386/preserve-none-8.c
  dbaa3ccce2e7bd8e259f97b2d272cf9c  gcc/testsuite/gcc.target/i386/preserve-none-9.c
  0a07ad1959a1b8b5b90dfd47f4cdd1db  gcc/testsuite/gcc.target/i386/prfchw-Wcast-qual-1.c
*************** d59f1ded63c010f7c70d8914ff035369  gcc/te
*** 96647,96652 ****
--- 96742,96748 ----
  12ae868dfb598fb35cde9f3deb2aa240  gcc/testsuite/gcc.target/or1k/got-1.c
  cdffa4b9237da98d7598debeadcb29fd  gcc/testsuite/gcc.target/or1k/or1k.exp
  586447fae94a7aba8d497d7146120eaa  gcc/testsuite/gcc.target/or1k/pr125155.c
+ 758f06e84d719bac9db773ac6a03c8e6  gcc/testsuite/gcc.target/or1k/pr126081.c
  26536fcae441d001c2a53c21abf56757  gcc/testsuite/gcc.target/or1k/return-1.c
  19a50da79764b52ec4c567f7aac53bdd  gcc/testsuite/gcc.target/or1k/return-2.c
  30571d600ad8e2c620b4c88dd60b22ab  gcc/testsuite/gcc.target/or1k/return-3.c
*************** bb8948b99ee40edd60fac5552a29094b  gcc/te
*** 96736,96744 ****
  1c3dd2fcc33b780dbf70e4ad8f8354e5  gcc/testsuite/gcc.target/powerpc/acmp-tst-32bit.c
  d3d9937409a146815a384e38f69c829a  gcc/testsuite/gcc.target/powerpc/acmp-tst-indexed.c
  51497862cbe2c65e679d0f8102a6c722  gcc/testsuite/gcc.target/powerpc/acmp-tst.c
! 7e51ad94a84aa7e10974b09b04903e96  gcc/testsuite/gcc.target/powerpc/aes-builtin-1.c
! a230b59a8a08e65922c81f1a9237b840  gcc/testsuite/gcc.target/powerpc/aes-builtin-2.c
! b38a63566b67c129c09f0d282731b17b  gcc/testsuite/gcc.target/powerpc/aes-builtin-3.c
  49eb45ddbbc137e8692612bbe8958966  gcc/testsuite/gcc.target/powerpc/altivec-1.c
  d71351ecab256bb9c7162016a5087dd9  gcc/testsuite/gcc.target/powerpc/altivec-10.c
  a5a1d544c1a4460222f01fc318321eea  gcc/testsuite/gcc.target/powerpc/altivec-11.c
--- 96832,96840 ----
  1c3dd2fcc33b780dbf70e4ad8f8354e5  gcc/testsuite/gcc.target/powerpc/acmp-tst-32bit.c
  d3d9937409a146815a384e38f69c829a  gcc/testsuite/gcc.target/powerpc/acmp-tst-indexed.c
  51497862cbe2c65e679d0f8102a6c722  gcc/testsuite/gcc.target/powerpc/acmp-tst.c
! e949a835430ed98c68bf16b11530d359  gcc/testsuite/gcc.target/powerpc/aes-builtin-1.c
! 037cb6004be866fa6551ab06df7600d2  gcc/testsuite/gcc.target/powerpc/aes-builtin-2.c
! e0c066339c0b535296ec3ff7345658d1  gcc/testsuite/gcc.target/powerpc/aes-builtin-3.c
  49eb45ddbbc137e8692612bbe8958966  gcc/testsuite/gcc.target/powerpc/altivec-1.c
  d71351ecab256bb9c7162016a5087dd9  gcc/testsuite/gcc.target/powerpc/altivec-10.c
  a5a1d544c1a4460222f01fc318321eea  gcc/testsuite/gcc.target/powerpc/altivec-11.c
*************** dcbebe071d63c21a542a5715031d4d82  gcc/te
*** 97539,97544 ****
--- 97635,97643 ----
  1b40025433c5882c82a7973a8acd66cf  gcc/testsuite/gcc.target/powerpc/fusion2.c
  fd3ca3fdb9af79fbaaaf7ad8d0d02666  gcc/testsuite/gcc.target/powerpc/future-1.c
  a37f7a987530bbfd72ef935e3501f63e  gcc/testsuite/gcc.target/powerpc/future-2.c
+ ce8dbd2fc4cbdb51ea62b59c743705ab  gcc/testsuite/gcc.target/powerpc/future-vucmpr-altivec.c
+ c8ada5234676e0119ac6f109140c4322  gcc/testsuite/gcc.target/powerpc/future-vucmpr-vsx.c
+ 949970ead2aa1271087aca0d76231500  gcc/testsuite/gcc.target/powerpc/future-vupk.c
  c8bb039efa1ac96486e0294c85966d8f  gcc/testsuite/gcc.target/powerpc/fwprop-1.c
  d339d3fe4c50dd4c2727de10dcf3374e  gcc/testsuite/gcc.target/powerpc/gcse-1.c
  8bb9827b615648c123de2019c6d1017b  gcc/testsuite/gcc.target/powerpc/gnuattr1.c
*************** a4c468f0dabef5849f00b0ea4f2d7f34  gcc/te
*** 100127,100133 ****
  5436f7a25300f600f9163405e8836b6f  gcc/testsuite/gcc.target/riscv/ext-dce-1.c
  5a1d2cabe7e71d1c3b7c41816442ac0e  gcc/testsuite/gcc.target/riscv/ext-dce-2.c
  e850a2d4d5d1cf01a0cc82d1158702f4  gcc/testsuite/gcc.target/riscv/ext-dce-3.c
! 5c4d5dadf108967dcc7fd25a4896d80c  gcc/testsuite/gcc.target/riscv/ext-dce-4.c
  b289cfd1cdd529019c81c25ebf8aee0f  gcc/testsuite/gcc.target/riscv/ext-dce-promote-1.c
  a9e21b2d22d00c5d449271103515f86d  gcc/testsuite/gcc.target/riscv/ext-dce-promote-2.c
  7cf820151c7fd7e6165871cdb49c8cac  gcc/testsuite/gcc.target/riscv/extend-shift-helpers.h
--- 100226,100232 ----
  5436f7a25300f600f9163405e8836b6f  gcc/testsuite/gcc.target/riscv/ext-dce-1.c
  5a1d2cabe7e71d1c3b7c41816442ac0e  gcc/testsuite/gcc.target/riscv/ext-dce-2.c
  e850a2d4d5d1cf01a0cc82d1158702f4  gcc/testsuite/gcc.target/riscv/ext-dce-3.c
! 791256aafa01ed4b511358c6a87317af  gcc/testsuite/gcc.target/riscv/ext-dce-4.c
  b289cfd1cdd529019c81c25ebf8aee0f  gcc/testsuite/gcc.target/riscv/ext-dce-promote-1.c
  a9e21b2d22d00c5d449271103515f86d  gcc/testsuite/gcc.target/riscv/ext-dce-promote-2.c
  7cf820151c7fd7e6165871cdb49c8cac  gcc/testsuite/gcc.target/riscv/extend-shift-helpers.h
*************** b1501e176991bdafb852ead7111b522d  gcc/te
*** 100218,100223 ****
--- 100317,100323 ----
  0f7ebc2d65ebdb64c7b00775db650cdd  gcc/testsuite/gcc.target/riscv/mcpu-sifive-x280.c
  1e98805082752ae19404fb6ab5adf407  gcc/testsuite/gcc.target/riscv/mcpu-spacemit-a100.c
  6aca92b845bddc5351f8aaa2c10dc848  gcc/testsuite/gcc.target/riscv/mcpu-spacemit-x100.c
+ 10ad81c933259bacaa7f2e3f00829ca8  gcc/testsuite/gcc.target/riscv/mcpu-spacemit-x60.c
  d66b77cd3223498c6e933305c7a7ca13  gcc/testsuite/gcc.target/riscv/mcpu-thead-c906.c
  80b46a59e47fe5cb83685a398cf89368  gcc/testsuite/gcc.target/riscv/mcpu-tt-ascalon-d8.c
  dcced0272e68ebd6c311b4e558088af7  gcc/testsuite/gcc.target/riscv/mcpu-xiangshan-kunminghu.c
*************** f035fac0dc9b5f42ec0a469a8391163c  gcc/te
*** 100703,100709 ****
  8d7255840198f77168c7067059ac39ac  gcc/testsuite/gcc.target/riscv/pr57650.c
  db206807e7e87fc388e039471812c6e0  gcc/testsuite/gcc.target/riscv/pr58727.c
  ae7832d0dbfbabb51f555f2e9c3138bc  gcc/testsuite/gcc.target/riscv/pr64345.c
! a4a202f1399aa8c9184e570fbe7d1c4e  gcc/testsuite/gcc.target/riscv/pr67731.c
  4652135af633fda87e51a6ef8d505b6d  gcc/testsuite/gcc.target/riscv/pr80770-2.c
  e3bfbe592522e285c497fdc836c58ed3  gcc/testsuite/gcc.target/riscv/pr80770.c
  10400130cc47973d43925669f3c795ed  gcc/testsuite/gcc.target/riscv/pr84660.c
--- 100803,100809 ----
  8d7255840198f77168c7067059ac39ac  gcc/testsuite/gcc.target/riscv/pr57650.c
  db206807e7e87fc388e039471812c6e0  gcc/testsuite/gcc.target/riscv/pr58727.c
  ae7832d0dbfbabb51f555f2e9c3138bc  gcc/testsuite/gcc.target/riscv/pr64345.c
! a8b52f6c3dc92a883d2af00ebe6abc2e  gcc/testsuite/gcc.target/riscv/pr67731.c
  4652135af633fda87e51a6ef8d505b6d  gcc/testsuite/gcc.target/riscv/pr80770-2.c
  e3bfbe592522e285c497fdc836c58ed3  gcc/testsuite/gcc.target/riscv/pr80770.c
  10400130cc47973d43925669f3c795ed  gcc/testsuite/gcc.target/riscv/pr84660.c
*************** d90ca4ab32f893e58362b7afbe85e6fd  gcc/te
*** 101382,101387 ****
--- 101482,101536 ----
  edd0a4ba6a9489214ca39d04c6a65fdc  gcc/testsuite/gcc.target/riscv/rvv/autovec/gather-scatter/strided_store-2.c
  107743a69f58f28cf14e8a598bd333e7  gcc/testsuite/gcc.target/riscv/rvv/autovec/gather-scatter/strided_store_run-1.c
  c1274e3ee15699a124ca1ff4e24fd55b  gcc/testsuite/gcc.target/riscv/rvv/autovec/gather-scatter/strided_store_run-2.c
+ 146bc36012f7c00a372699da7c2a51c1  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/group_overlap.h
+ c25cf2ca0a3a0b014906f24afd50821f  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i16-m1.c
+ 7df66d26e286fb57d9e06f027962d153  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i16-m2.c
+ b44618517a66b464f9d723d353604c1f  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i16-m4.c
+ cc6c7adbdd81aa0545db3464b3b72f4a  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i16-mf2.c
+ fdc504df4598713016e23a1be9c25a73  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i16-mf4.c
+ 6670263387d1c19dc955e58742aa0705  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i32-m1.c
+ 9f651efc81ce26d7fa2e31145fc473bf  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i32-m2.c
+ 56c2e92ff85457654633cce3cdbd0fb5  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i32-m4.c
+ 812c4f62571577bf018f909d02966278  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i32-mf2.c
+ e6476fb24901d079f1ac907459bcf84d  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i8-m1.c
+ c8f3c18e44e69524575ac36145a49fc3  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i8-m2.c
+ f6201c2799002d61ba70845f52d8885a  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i8-m4.c
+ 2279a66c6cb9e29851ea4e607c0d79d2  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i8-mf2.c
+ 4c63181a145f0f77e33012448f4759f2  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i8-mf4.c
+ 610dd150764921a84e3d75ceb6888c39  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i8-mf8.c
+ 8a455152ded03f279e6c1b37d35e18c1  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf4-i16-m1.c
+ 190ad1d3f267f3264ded51c5086f4551  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf4-i16-m2.c
+ da06f93dc0cf06a6e2865c0216113213  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf4-i16-mf2.c
+ 0d5cbc69ea937b3a3ccf7b22db98cb01  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf4-i16-mf4.c
+ aebf8cb55ea37d488f66e723386c2094  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf4-i8-m1.c
+ 77f3defb97a663851958bf180f1bf510  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf4-i8-m2.c
+ d13f1fc153f66706d99b5b567a580764  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf4-i8-mf2.c
+ a38cc702fc0e0c3a0353c472da553230  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf4-i8-mf4.c
+ 26f1e175ba5ddf8e8a367a2667077401  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf4-i8-mf8.c
+ ccf92ff3f50eee7364c44c3dc49f8ed1  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u16-m1.c
+ 996219fee36cdaedaf6aceae53bbf2ea  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u16-m2.c
+ cb1adfb03ea24c507b7cf273b40f9287  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u16-m4.c
+ 653c96e5b10c0d81e864a65cda537e58  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u16-mf2.c
+ 00d1742072fabe13211a3fd87eb39c89  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u16-mf4.c
+ 60ce9ff848f54917083e0a199e609a38  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u32-m1.c
+ 9404d46e0687e0e5a036af9cba2cdf6b  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u32-m2.c
+ dcf0b13f22521fc836671cca2d2b8ea9  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u32-m4.c
+ c1250391b46a6256a2f013d3d1d41f8e  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u32-mf2.c
+ f731871e4bfb07f62b90e70b62af3c04  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u8-m1.c
+ d08eedb6836d5e53a65397eadb19f45f  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u8-m2.c
+ 82f8252330adb9be134d856d009e757f  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u8-m4.c
+ 401dc6a29c923e1af0aaa0cb69c22908  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u8-mf2.c
+ e52d84128f00a1b8b74fa94c0bb00190  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u8-mf4.c
+ 414b4014231857e1e1c9d14c3551a8ee  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u8-mf8.c
+ 3bf1ff71da354808701ac993514bb178  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf4-u16-m1.c
+ b5694792b5e8fd96bb83a3a45a23224d  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf4-u16-m2.c
+ 52df73ded97985343f658a1e68fa967c  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf4-u16-mf2.c
+ 4b2e22b7f979a38ac65e36accce403c4  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf4-u16-mf4.c
+ e2b0b76a8e56cd8728365c7f79cf87a1  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf4-u8-m1.c
+ 9e923c7718b51471f5225960d84e1b03  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf4-u8-m2.c
+ 5aa965327f3d9f56aaf9a10bd072e950  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf4-u8-mf2.c
+ 3b4d7400c1877e475f4a1a365ae47ece  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf4-u8-mf4.c
+ a5051b2db50e5a6cfc051b22bd3d07ff  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf4-u8-mf8.c
  c1779350d6b08b51c352226f6a13ffb2  gcc/testsuite/gcc.target/riscv/rvv/autovec/madd-split2-1.c
  f7a8ba49de6d1e5b275e35f45edbf009  gcc/testsuite/gcc.target/riscv/rvv/autovec/max-vect-1.c
  2b66681c6de1c53f888f788a0ccfb6da  gcc/testsuite/gcc.target/riscv/rvv/autovec/max-vect-2.c
*************** ea1a52d4d4520c9759f08c40d864ed64  gcc/te
*** 101500,101506 ****
  54b9fd1958ad7501fd74fa0c09213498  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr112999.c
  f30693b200f336b7d96f5c6c869848ff  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr113087-1.c
  c2d70a58e506274256f65d7f6cb17f6d  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr113087-2.c
! cc397788c7fa081c3f6af9b0e48683a3  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr113206-1.c
  8ecb9c61d54e68de697979addcdb22cb  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr113206-2.c
  2c4e25a7be198b668bc9e0c734d22df6  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr113209.c
  690d60fb5e8422e5e4384fa519eafe88  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr113393-1.c
--- 101649,101655 ----
  54b9fd1958ad7501fd74fa0c09213498  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr112999.c
  f30693b200f336b7d96f5c6c869848ff  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr113087-1.c
  c2d70a58e506274256f65d7f6cb17f6d  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr113087-2.c
! 2f871b128eb2b9dd108c109ca201d42d  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr113206-1.c
  8ecb9c61d54e68de697979addcdb22cb  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr113206-2.c
  2c4e25a7be198b668bc9e0c734d22df6  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr113209.c
  690d60fb5e8422e5e4384fa519eafe88  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr113393-1.c
*************** ef9d88ddc5f88fc5357cd99e400658aa  gcc/te
*** 102493,102499 ****
  f8f02afa0e63dc72766d22598cfbffa5  gcc/testsuite/gcc.target/riscv/rvv/autovec/unop/math-lroundf16-rv32-0.c
  98b3b5a27c7bfa7b999d0a2f866fe588  gcc/testsuite/gcc.target/riscv/rvv/autovec/unop/math-lroundf16-rv64-0.c
  e85a3c10b502ad623811c9be83945973  gcc/testsuite/gcc.target/riscv/rvv/autovec/unop/math-lroundf16-rv64-ice-1.c
! f7771c0afab8e37449c61713813c0d7f  gcc/testsuite/gcc.target/riscv/rvv/autovec/unop/math-nearbyint-0.c
  d435e3d4140bfd179cd4938547ff48fb  gcc/testsuite/gcc.target/riscv/rvv/autovec/unop/math-nearbyint-1.c
  3e3b6320ac54bcc532b2ecd80daacf53  gcc/testsuite/gcc.target/riscv/rvv/autovec/unop/math-nearbyint-2.c
  f1a1eb60fbe8c66e6178ce44d131a193  gcc/testsuite/gcc.target/riscv/rvv/autovec/unop/math-nearbyint-3.c
--- 102642,102648 ----
  f8f02afa0e63dc72766d22598cfbffa5  gcc/testsuite/gcc.target/riscv/rvv/autovec/unop/math-lroundf16-rv32-0.c
  98b3b5a27c7bfa7b999d0a2f866fe588  gcc/testsuite/gcc.target/riscv/rvv/autovec/unop/math-lroundf16-rv64-0.c
  e85a3c10b502ad623811c9be83945973  gcc/testsuite/gcc.target/riscv/rvv/autovec/unop/math-lroundf16-rv64-ice-1.c
! a2ef4fe9f176835bd6f98c1e05a8c064  gcc/testsuite/gcc.target/riscv/rvv/autovec/unop/math-nearbyint-0.c
  d435e3d4140bfd179cd4938547ff48fb  gcc/testsuite/gcc.target/riscv/rvv/autovec/unop/math-nearbyint-1.c
  3e3b6320ac54bcc532b2ecd80daacf53  gcc/testsuite/gcc.target/riscv/rvv/autovec/unop/math-nearbyint-2.c
  f1a1eb60fbe8c66e6178ce44d131a193  gcc/testsuite/gcc.target/riscv/rvv/autovec/unop/math-nearbyint-3.c
*************** b36633c19b388332a46c2d831d64b9dd  gcc/te
*** 102671,102683 ****
  d872d21ec4d4f80b7cd59a9ff702bc0a  gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/trailing_run-1.c
  0381910f2661633b53cd8ec84f13d3aa  gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/trailing_run-2.c
  7dddb5a0a454afa6321ade0f61112089  gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-1.c
! 0ddbcdc06b7ec6a47e66bfb0b1387de6  gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-1u.c
  493247e7a7cb8d31e228f9f42cb0db30  gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-2.c
! eb3a0fce5ff21d2b729d86ea9ef07b32  gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-2u.c
  1f29e8d0f46e5ba1c0562616781cba6b  gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-3.c
! 4461f43d74ee2529f304ba16c291d5d7  gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-3u.c
  1b6cf92fcda9350a8816733c44cdadeb  gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-4.c
! 52cd30e8985cc51af53d9e88840978a1  gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-4u.c
  a4570acb76500092b07210f7cd534012  gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-run.c
  d8985ae8f91dc93abd516c587cb91a5e  gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-runu.c
  cd3df122f8339aa8061347402dfcfafe  gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-zvfh-run.c
--- 102820,102832 ----
  d872d21ec4d4f80b7cd59a9ff702bc0a  gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/trailing_run-1.c
  0381910f2661633b53cd8ec84f13d3aa  gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/trailing_run-2.c
  7dddb5a0a454afa6321ade0f61112089  gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-1.c
! 17dbd0a554079b2140cea4f5ea6bfa91  gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-1u.c
  493247e7a7cb8d31e228f9f42cb0db30  gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-2.c
! 2de0bbfce4ae47ef459e2378bda61fe8  gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-2u.c
  1f29e8d0f46e5ba1c0562616781cba6b  gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-3.c
! 12e99e8360706aa46a607cc576c5d283  gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-3u.c
  1b6cf92fcda9350a8816733c44cdadeb  gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-4.c
! 1872e679f0c69996d4a5c50b46f30b96  gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-4u.c
  a4570acb76500092b07210f7cd534012  gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-run.c
  d8985ae8f91dc93abd516c587cb91a5e  gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-runu.c
  cd3df122f8339aa8061347402dfcfafe  gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-zvfh-run.c
*************** cd375212683d2e89715f19dd60b794dc  gcc/te
*** 102699,102712 ****
  c93cf42525a1c616ab0e12687755dfc0  gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/avg-5.c
  648888d42e42549adab8222e0efc29a7  gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/avg-6.c
  c921c5085b27858499e470f23a40d71c  gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/bswap16-0.c
! b31c88d47d78f741076463728b6d8bd9  gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/calling-convention-1.c
  a4cf378028e723371c5f17d244a90e7c  gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/calling-convention-10.c
! 9d430c958c1f97205d82d014f7c39865  gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/calling-convention-2.c
! ca3084d36f83c41d4a52f2b030e3edc5  gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/calling-convention-3.c
! abb70a04005a106ebb77a5a09dc08c20  gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/calling-convention-4.c
! 847c42eba0db6e7127fba682f67bfcbc  gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/calling-convention-5.c
! 260baa4a6225388c3be5c762b5d1fdfa  gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/calling-convention-6.c
! c85ad178bb69d8c575a83bf160f40b23  gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/calling-convention-7.c
  81082a96f41628c763f35ef172e77815  gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/calling-convention-8.c
  f40503114afea5268bbab44e4a6cc185  gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/calling-convention-9.c
  18bb84cafeb71b2fbe2da4a97b8a72d9  gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/calling-convention-run-1.c
--- 102848,102861 ----
  c93cf42525a1c616ab0e12687755dfc0  gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/avg-5.c
  648888d42e42549adab8222e0efc29a7  gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/avg-6.c
  c921c5085b27858499e470f23a40d71c  gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/bswap16-0.c
! 318f075a415cc97bceacbe89a993cd36  gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/calling-convention-1.c
  a4cf378028e723371c5f17d244a90e7c  gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/calling-convention-10.c
! 842140e6d2892e3ab2d8e67e9a8ead03  gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/calling-convention-2.c
! 196fd304ea52d6f323d73176ebe42f3c  gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/calling-convention-3.c
! adec105832f332bb83e8e5e98eb1226d  gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/calling-convention-4.c
! 82c377b5cb8bb23096465a75c66289cf  gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/calling-convention-5.c
! 18c29b74743aa79e0dbad2bb6587f59c  gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/calling-convention-6.c
! 468917eb832e7ffdbeaa8dc65643451c  gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/calling-convention-7.c
  81082a96f41628c763f35ef172e77815  gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/calling-convention-8.c
  f40503114afea5268bbab44e4a6cc185  gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/calling-convention-9.c
  18bb84cafeb71b2fbe2da4a97b8a72d9  gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/calling-convention-run-1.c
*************** e971a88ccb711afd1d7b3690f3c24f69  gcc/te
*** 103908,103950 ****
  1853361239475570bec4de9959fc0d85  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-36.c
  c4377924db17218fd1a9f71272a97de8  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-37.c
  62eee2dc9191998cb770ab96128a91f3  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-38.c
! da23ca4308a4af40cde7b83f3875ba6b  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-39.c
  8fe9441bc15fe69c61afe696cb787bd4  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-4.c
  fcd85807d47d1aa732644c6bd29bc460  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-40.c
! 583aff41be73e2cf036aa17ac783e6c3  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-41.c
  05de4238dd27e8f7bd06215b541ed103  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-42.c
  0697ea0a928a990c62e53730b2d74cd8  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-43.c
  64d75ebb58e002a30e5ef9b349cfaca7  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-44.c
! 032e2a876c35f78ae998855a01574e6d  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-45.c
! b36ecfab5f19f93cd5be02a5babd866a  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-46.c
  fab92414b9a7c56752b0ea31adced714  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-47.c
! a55c02c67f3b358d7e6da6a7550ef5f6  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-48.c
! b08918e67de1bbe4f071623126637fd1  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-49.c
  896f1d3dbe5b5af8ebd6303a1de7c12c  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-5.c
! 200c8d66adfb6fde6e86e4113b84622b  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-50.c
  02f331cbc7b14fa4be5724465d6b0457  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-51.c
! 3bcd0d7f144f54f0f2b3359c3cfdd26b  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-52.c
  93ab4f336e951a11c1ab696d53615540  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-53.c
  92a06e1471b270521b5e87369cb8aae6  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-54.c
  44da02ffc9cab20c646b37a4dc7cfe41  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-55.c
! 698c0cbd75f042c85692d9e57436faa3  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-56.c
  c3ce5c47b9a65de2e82818405fb45249  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-57.c
  d5374e91aa2e026dcb667eb34d3d43b9  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-58.c
! 49ed6c4e07a46be7b352ae9cf4b8f9c4  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-59.c
  5be2a4b06a41199015dda601b4768215  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-6.c
! b66e0edb92973d821bf2a808979b69b8  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-60.c
! 3393718e312d72abd03c6e486220d4a4  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-61.c
! 536fc3c1afb9a0e29862775b614ec480  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-62.c
  72e215fd2989adc8887ec5edd221dd0b  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-63.c
! e507503d9903b3d6f161862524f7a43f  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-64.c
! 7294760216816d388cea4c8c8142a958  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-65.c
! 5a2664b3cf5a43e1226b86a318feeb4b  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-66.c
! 743ef036d8df04c6b13343c19cca5609  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-67.c
! fb633d8f4ef046fc5227cb88e9c47e23  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-68.c
! a1b3434fd11a0481b121c48ed2900eaa  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-69.c
  4da9108de22e727b36a90c39f768cccf  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-7.c
! 53298291a579ed930c786d44ffc5be19  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-70.c
! 8c91437fa7b567afad5bfbc8bdc85f90  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-71.c
  07ed1e2a91dfeb3efc3559a2d1cda889  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-72.c
  1923a5b6a5f592a57920be56f0f46f37  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-73.c
  221b4ec6df47580950a6ebd735a51c85  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-74.c
--- 104057,104099 ----
  1853361239475570bec4de9959fc0d85  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-36.c
  c4377924db17218fd1a9f71272a97de8  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-37.c
  62eee2dc9191998cb770ab96128a91f3  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-38.c
! b31fe78eb165bf40150ac6d89f84481e  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-39.c
  8fe9441bc15fe69c61afe696cb787bd4  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-4.c
  fcd85807d47d1aa732644c6bd29bc460  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-40.c
! 93a5b1a538428ed5311981a644023729  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-41.c
  05de4238dd27e8f7bd06215b541ed103  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-42.c
  0697ea0a928a990c62e53730b2d74cd8  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-43.c
  64d75ebb58e002a30e5ef9b349cfaca7  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-44.c
! 5d9120c36b4104bff2c7cceaaa78bdd4  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-45.c
! 0edce528a86eb16208924b7ccd3696d3  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-46.c
  fab92414b9a7c56752b0ea31adced714  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-47.c
! 690951190d599018b9954886fc46f530  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-48.c
! f3f3d29da4ef25bac5a8c8a4fec2bf5c  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-49.c
  896f1d3dbe5b5af8ebd6303a1de7c12c  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-5.c
! 9815396b68c8d40f9ea8eb289f0ed15f  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-50.c
  02f331cbc7b14fa4be5724465d6b0457  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-51.c
! 92a35c5bb597a876e1588f681063e0ec  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-52.c
  93ab4f336e951a11c1ab696d53615540  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-53.c
  92a06e1471b270521b5e87369cb8aae6  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-54.c
  44da02ffc9cab20c646b37a4dc7cfe41  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-55.c
! 3d166279f647f076a5c10eb1a9b23c93  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-56.c
  c3ce5c47b9a65de2e82818405fb45249  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-57.c
  d5374e91aa2e026dcb667eb34d3d43b9  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-58.c
! 2f66b66094ed22361a24ab7867749972  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-59.c
  5be2a4b06a41199015dda601b4768215  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-6.c
! 616ee7a81908be883369e1039a992cee  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-60.c
! 476197f8f40692cb66ec04479b84d8c3  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-61.c
! 894649cfac295aee09df2454d88ea0ee  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-62.c
  72e215fd2989adc8887ec5edd221dd0b  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-63.c
! e682972a60e37655f4cc82550382549c  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-64.c
! 733f99e9bd8ba4cf1ba4470418819976  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-65.c
! 41854bd15b948310f3e49dc72a9fd048  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-66.c
! 7c7c5306f9f715984e309d0a1b8de5e4  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-67.c
! 9d0521da54ca89d8d8cf9348f32f91ee  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-68.c
! 4425ecae75b6287d4aec31b6c3b53698  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-69.c
  4da9108de22e727b36a90c39f768cccf  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-7.c
! 29df1e7c053b0d67157324d6a7e2ad2c  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-70.c
! cb327ba20917305547c29f7c581b088a  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-71.c
  07ed1e2a91dfeb3efc3559a2d1cda889  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-72.c
  1923a5b6a5f592a57920be56f0f46f37  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-73.c
  221b4ec6df47580950a6ebd735a51c85  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-74.c
*************** c87529df3798efdb96df88cb00280be2  gcc/te
*** 103962,103969 ****
  b67ca5e39bbd8dd9eac473b210aa40a5  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-frm-insert-10.c
  c618f387f6415254cd607cf609660cb7  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-frm-insert-2.c
  afd460908a0b7401ce9f6e4ead6a3c28  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-frm-insert-3.c
! 785b47edc03bb493904167e2efec96dd  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-frm-insert-4.c
! f02442531968c4cb1f107061e23a9475  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-frm-insert-5.c
  a11b2d48f45e0532bda6343f2dbf1969  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-frm-insert-7.c
  5f1974423a4eb40c08c5f87a3d5df989  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-frm-insert-8.c
  f7ecc35a59544c495fa9a69e895ba453  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-frm-insert-9.c
--- 104111,104118 ----
  b67ca5e39bbd8dd9eac473b210aa40a5  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-frm-insert-10.c
  c618f387f6415254cd607cf609660cb7  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-frm-insert-2.c
  afd460908a0b7401ce9f6e4ead6a3c28  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-frm-insert-3.c
! fdd7ca08370edc102a089bdc70948641  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-frm-insert-4.c
! 03ed55bad5be320930d3e6d80f76c81b  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-frm-insert-5.c
  a11b2d48f45e0532bda6343f2dbf1969  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-frm-insert-7.c
  5f1974423a4eb40c08c5f87a3d5df989  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-frm-insert-8.c
  f7ecc35a59544c495fa9a69e895ba453  gcc/testsuite/gcc.target/riscv/rvv/base/float-point-frm-insert-9.c
*************** c732619185ed7d06a226a8b77b3bf69c  gcc/te
*** 104156,104163 ****
  a8a4d03be327fb2c9f5b75bd853a5c21  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-13.c
  cceb6dda294173f54299477fb726ce86  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-14.c
  554e3c1dffb02461769b5b636e984057  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-15.c
! 4158f0a85b78efa028eac16b5958a4bc  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-16.c
! cfeb2916d3c635fdc870fa4dd68db703  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-17.c
  45f0ef4b9e6482ffad4ed07b3848d1e5  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-18.c
  7e4acf8a36d5832d7d5e91c74df1e724  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-19.c
  3e2ec7778c99a6a0261ab2f4a6450f3e  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-2.c
--- 104305,104312 ----
  a8a4d03be327fb2c9f5b75bd853a5c21  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-13.c
  cceb6dda294173f54299477fb726ce86  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-14.c
  554e3c1dffb02461769b5b636e984057  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-15.c
! 012a9bc246bc5b0d9125f41583a0c090  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-16.c
! 513c0d5674fd571d3afdc78a9be04f74  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-17.c
  45f0ef4b9e6482ffad4ed07b3848d1e5  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-18.c
  7e4acf8a36d5832d7d5e91c74df1e724  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-19.c
  3e2ec7778c99a6a0261ab2f4a6450f3e  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-2.c
*************** d806ad060ae7740379c2b929ee5e88eb  gcc/te
*** 104203,104209 ****
  4f118ff8b8d46e2f259e09044750e87c  gcc/testsuite/gcc.target/riscv/rvv/base/pr114195-1.c
  ba3126509aac3dd5778a08801e58d39c  gcc/testsuite/gcc.target/riscv/rvv/base/pr114352-1.c
  ddbf78c23d7663691fc4ccf12518597c  gcc/testsuite/gcc.target/riscv/rvv/base/pr114352-2.c
! 0f06f41c879cdb21c8b10fa63d877bb0  gcc/testsuite/gcc.target/riscv/rvv/base/pr114352-3.c
  c8df0572c9496b8c5f4e05d96fc6cc61  gcc/testsuite/gcc.target/riscv/rvv/base/pr114639-1.c
  7333f6fe4bde976370361beae4252cd4  gcc/testsuite/gcc.target/riscv/rvv/base/pr114988-1.c
  cdba373e4c3a0250dd05956a2143e9a4  gcc/testsuite/gcc.target/riscv/rvv/base/pr114988-2.c
--- 104352,104358 ----
  4f118ff8b8d46e2f259e09044750e87c  gcc/testsuite/gcc.target/riscv/rvv/base/pr114195-1.c
  ba3126509aac3dd5778a08801e58d39c  gcc/testsuite/gcc.target/riscv/rvv/base/pr114352-1.c
  ddbf78c23d7663691fc4ccf12518597c  gcc/testsuite/gcc.target/riscv/rvv/base/pr114352-2.c
! 854e8d3c7a9231234edfe3d57b615673  gcc/testsuite/gcc.target/riscv/rvv/base/pr114352-3.c
  c8df0572c9496b8c5f4e05d96fc6cc61  gcc/testsuite/gcc.target/riscv/rvv/base/pr114639-1.c
  7333f6fe4bde976370361beae4252cd4  gcc/testsuite/gcc.target/riscv/rvv/base/pr114988-1.c
  cdba373e4c3a0250dd05956a2143e9a4  gcc/testsuite/gcc.target/riscv/rvv/base/pr114988-2.c
*************** f0ef727ad421676bfc8524d445606492  gcc/te
*** 104285,104291 ****
  8c21b304dcf8bfcea2ca1180cbeec2d2  gcc/testsuite/gcc.target/riscv/rvv/base/scalar_move-4.c
  6664771566394a52d726e74dda9c8b1b  gcc/testsuite/gcc.target/riscv/rvv/base/scalar_move-5.c
  6daee8ed72e60f230e10827d13ea871e  gcc/testsuite/gcc.target/riscv/rvv/base/scalar_move-6.c
! 13f53785a7384e28366f1fa2fe211302  gcc/testsuite/gcc.target/riscv/rvv/base/scalar_move-7.c
  24d9548de200fc4e0a34539da4df8b00  gcc/testsuite/gcc.target/riscv/rvv/base/scalar_move-8.c
  dfa7bdc703178385c7e9fe50842850c2  gcc/testsuite/gcc.target/riscv/rvv/base/scalar_move-9.c
  9d67b7bcf56a9d5e0175ad39afd31d8c  gcc/testsuite/gcc.target/riscv/rvv/base/setmem-1.c
--- 104434,104440 ----
  8c21b304dcf8bfcea2ca1180cbeec2d2  gcc/testsuite/gcc.target/riscv/rvv/base/scalar_move-4.c
  6664771566394a52d726e74dda9c8b1b  gcc/testsuite/gcc.target/riscv/rvv/base/scalar_move-5.c
  6daee8ed72e60f230e10827d13ea871e  gcc/testsuite/gcc.target/riscv/rvv/base/scalar_move-6.c
! c31ed1949dfbf0220d4df2b12e27ff86  gcc/testsuite/gcc.target/riscv/rvv/base/scalar_move-7.c
  24d9548de200fc4e0a34539da4df8b00  gcc/testsuite/gcc.target/riscv/rvv/base/scalar_move-8.c
  dfa7bdc703178385c7e9fe50842850c2  gcc/testsuite/gcc.target/riscv/rvv/base/scalar_move-9.c
  9d67b7bcf56a9d5e0175ad39afd31d8c  gcc/testsuite/gcc.target/riscv/rvv/base/setmem-1.c
*************** c7b8c050c02b19e79d1fc07b2cbd9798  gcc/te
*** 104295,104303 ****
  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
--- 104444,104452 ----
  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
! a554fd9470ae77763968b43d6480d78b  gcc/testsuite/gcc.target/riscv/rvv/base/spill-10.c
! 816826b8b43512ef06d959dfa87aef49  gcc/testsuite/gcc.target/riscv/rvv/base/spill-11.c
! c8cee8ebe0c5ce1875c12c0f4c9ac6ff  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
*************** e8ea0f42bb8a05b5e45a37e22183f419  gcc/te
*** 104305,104312 ****
  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
  20a684fa5f054c192dbda28d90be1465  gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-1.c
  b7e97c7f4fb848841316b6d34e7ace8e  gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-10.c
--- 104454,104461 ----
  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
! 25c81a84ad9c0035f8738c91ff4e61b8  gcc/testsuite/gcc.target/riscv/rvv/base/spill-8.c
! df7f27842d98429fb6d17c7093d53a25  gcc/testsuite/gcc.target/riscv/rvv/base/spill-9.c
  7de53eea40a2d3d1318fd361b276a775  gcc/testsuite/gcc.target/riscv/rvv/base/spill-sp-adjust.c
  20a684fa5f054c192dbda28d90be1465  gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-1.c
  b7e97c7f4fb848841316b6d34e7ace8e  gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-10.c
*************** edd4b8bcb1a19623aa4ce3536faca5f3  gcc/te
*** 104447,104453 ****
  87045e4f08ac44364b834bfacdea6c34  gcc/testsuite/gcc.target/riscv/rvv/base/vslide1up-3.c
  7192c059be7172e1f5c4753ed0d2490f  gcc/testsuite/gcc.target/riscv/rvv/base/vssubu-1.c
  0d7e03883d33c6e1c3165f297d500dee  gcc/testsuite/gcc.target/riscv/rvv/base/vssubu-2.c
! 5d6d690d8e8436015160489d27e995fe  gcc/testsuite/gcc.target/riscv/rvv/base/vwaddsub-1.c
  9031404c3b18cc30d16acd7145002cf8  gcc/testsuite/gcc.target/riscv/rvv/base/vxrm-1.c
  2562b37a9bac7879f2b354b626e6f688  gcc/testsuite/gcc.target/riscv/rvv/base/vxrm-10.c
  22d2eaeec1e80ef99fb44a1a0fc6f92e  gcc/testsuite/gcc.target/riscv/rvv/base/vxrm-11.c
--- 104596,104602 ----
  87045e4f08ac44364b834bfacdea6c34  gcc/testsuite/gcc.target/riscv/rvv/base/vslide1up-3.c
  7192c059be7172e1f5c4753ed0d2490f  gcc/testsuite/gcc.target/riscv/rvv/base/vssubu-1.c
  0d7e03883d33c6e1c3165f297d500dee  gcc/testsuite/gcc.target/riscv/rvv/base/vssubu-2.c
! feea2d8bdd623fe8660d57f30842ac80  gcc/testsuite/gcc.target/riscv/rvv/base/vwaddsub-1.c
  9031404c3b18cc30d16acd7145002cf8  gcc/testsuite/gcc.target/riscv/rvv/base/vxrm-1.c
  2562b37a9bac7879f2b354b626e6f688  gcc/testsuite/gcc.target/riscv/rvv/base/vxrm-10.c
  22d2eaeec1e80ef99fb44a1a0fc6f92e  gcc/testsuite/gcc.target/riscv/rvv/base/vxrm-11.c
*************** d4b845b37c1db36e564e49baf5cd8e49  gcc/te
*** 104462,104471 ****
  2d52719c034a5801989d67be7c33f0af  gcc/testsuite/gcc.target/riscv/rvv/base/vxrm-9.c
  2de15487c12126f324038bdb2050abfa  gcc/testsuite/gcc.target/riscv/rvv/base/zero_base_load_store_optimization.c
  30bd95b0d8fa20d5e5ec5567c4ed306a  gcc/testsuite/gcc.target/riscv/rvv/base/zvbb-intrinsic.c
! b8b40b2b717de4ba1ef09f41f93b4daf  gcc/testsuite/gcc.target/riscv/rvv/base/zvbb_vandn_vx_constraint.c
  d7fd06e3af3dd81cf77886dd8ab671d7  gcc/testsuite/gcc.target/riscv/rvv/base/zvbc-intrinsic.c
  4b3401a0c0238f475ed98d0934b381f0  gcc/testsuite/gcc.target/riscv/rvv/base/zvbc_vx_constraint-1.c
! ee85407f9dba1640640a3899f4769036  gcc/testsuite/gcc.target/riscv/rvv/base/zvbc_vx_constraint-2.c
  bd5fe2ac8c7ea125bd674e1aa8150399  gcc/testsuite/gcc.target/riscv/rvv/base/zvfh-intrinsic.c
  13a36cf2a5d58c14616db5e25bdfd498  gcc/testsuite/gcc.target/riscv/rvv/base/zvfh-over-zvfhmin.c
  159fb4f31c4451273024055ea7dca53b  gcc/testsuite/gcc.target/riscv/rvv/base/zvfhmin-intrinsic.c
--- 104611,104620 ----
  2d52719c034a5801989d67be7c33f0af  gcc/testsuite/gcc.target/riscv/rvv/base/vxrm-9.c
  2de15487c12126f324038bdb2050abfa  gcc/testsuite/gcc.target/riscv/rvv/base/zero_base_load_store_optimization.c
  30bd95b0d8fa20d5e5ec5567c4ed306a  gcc/testsuite/gcc.target/riscv/rvv/base/zvbb-intrinsic.c
! a94e58f7b7e8dac6a24eaeb26d91a894  gcc/testsuite/gcc.target/riscv/rvv/base/zvbb_vandn_vx_constraint.c
  d7fd06e3af3dd81cf77886dd8ab671d7  gcc/testsuite/gcc.target/riscv/rvv/base/zvbc-intrinsic.c
  4b3401a0c0238f475ed98d0934b381f0  gcc/testsuite/gcc.target/riscv/rvv/base/zvbc_vx_constraint-1.c
! 4f8f9b0a32d4b4835a68cee631570c17  gcc/testsuite/gcc.target/riscv/rvv/base/zvbc_vx_constraint-2.c
  bd5fe2ac8c7ea125bd674e1aa8150399  gcc/testsuite/gcc.target/riscv/rvv/base/zvfh-intrinsic.c
  13a36cf2a5d58c14616db5e25bdfd498  gcc/testsuite/gcc.target/riscv/rvv/base/zvfh-over-zvfhmin.c
  159fb4f31c4451273024055ea7dca53b  gcc/testsuite/gcc.target/riscv/rvv/base/zvfhmin-intrinsic.c
*************** c408b1a7f84e4b815e85476963221ae9  gcc/te
*** 104481,104487 ****
  999cc44bdd25aaa38b1dfd62ba9b84ab  gcc/testsuite/gcc.target/riscv/rvv/pr121073.c
  86731b52476b518fce91bf0158bbd223  gcc/testsuite/gcc.target/riscv/rvv/pr122474.c
  e1f5047958163bd4a7c56181c616e105  gcc/testsuite/gcc.target/riscv/rvv/pr124038.c
! 6fea082cc5d5719bf16939b0f1ec6357  gcc/testsuite/gcc.target/riscv/rvv/rvv.exp
  5478c0c8327ff5286acd21adf7801a3b  gcc/testsuite/gcc.target/riscv/rvv/vls-cc/abi-vlen-128-xlen-32/test_128bit_vector.c
  7474e3b118ab01afd89adaf5d29c7e26  gcc/testsuite/gcc.target/riscv/rvv/vls-cc/abi-vlen-128-xlen-32/test_256bit_vector.c
  b0ad6114de72318c274762ca3a6f767b  gcc/testsuite/gcc.target/riscv/rvv/vls-cc/abi-vlen-128-xlen-32/test_32bit_vector.c
--- 104630,104636 ----
  999cc44bdd25aaa38b1dfd62ba9b84ab  gcc/testsuite/gcc.target/riscv/rvv/pr121073.c
  86731b52476b518fce91bf0158bbd223  gcc/testsuite/gcc.target/riscv/rvv/pr122474.c
  e1f5047958163bd4a7c56181c616e105  gcc/testsuite/gcc.target/riscv/rvv/pr124038.c
! 1e5c3f465c3f1edceaaaeef7ffa889fd  gcc/testsuite/gcc.target/riscv/rvv/rvv.exp
  5478c0c8327ff5286acd21adf7801a3b  gcc/testsuite/gcc.target/riscv/rvv/vls-cc/abi-vlen-128-xlen-32/test_128bit_vector.c
  7474e3b118ab01afd89adaf5d29c7e26  gcc/testsuite/gcc.target/riscv/rvv/vls-cc/abi-vlen-128-xlen-32/test_256bit_vector.c
  b0ad6114de72318c274762ca3a6f767b  gcc/testsuite/gcc.target/riscv/rvv/vls-cc/abi-vlen-128-xlen-32/test_32bit_vector.c
*************** cd0f1a5b67b08f0e9954e4db7ce9cce6  gcc/te
*** 104902,104909 ****
  36022a6c2f044e3a2e3837d12eb88046  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_multiple-15.c
  d9bead3269296af775ead9cb975dd377  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_multiple-16.c
  cfa0226e610713a63f7449fe07f1cca6  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_multiple-2.c
! ca6cf9eea9a25f0d1a90a7170f738078  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_multiple-3.c
! 917232cfbf36ec4e19c9de207333c3d3  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_multiple-4.c
  da3f39255f0a045ad328d2f04a7b01d2  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_multiple-5.c
  d8acc1034261ddf1a5e7c1c2ecee2fc1  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_multiple-6.c
  a5a183977a10bab9c4d173183e0ad73b  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_multiple-7.c
--- 105051,105058 ----
  36022a6c2f044e3a2e3837d12eb88046  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_multiple-15.c
  d9bead3269296af775ead9cb975dd377  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_multiple-16.c
  cfa0226e610713a63f7449fe07f1cca6  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_multiple-2.c
! b7ab6e3770646d2ec4261a50d724e666  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_multiple-3.c
! 1e45c41e59a04623b975847d8e174f8c  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_multiple-4.c
  da3f39255f0a045ad328d2f04a7b01d2  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_multiple-5.c
  d8acc1034261ddf1a5e7c1c2ecee2fc1  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_multiple-6.c
  a5a183977a10bab9c4d173183e0ad73b  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_multiple-7.c
*************** db0a5b3b6100b7acab9712793560a780  gcc/te
*** 104954,104960 ****
  baad1a844810f4188b5c66116c07d376  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-37.c
  fc113c8d95b51954d7f9871c93446b9f  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-38.c
  a45963b5d080e72125bbac7d426add30  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-39.c
! 17d98ea8a8a651bc5ea1c12a8a76e844  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-4.c
  e982f410da548fc73557e74cb4ca7db4  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-40.c
  419dc6bfe8177790c95f1c53e74f8179  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-41.c
  5536be35d117b4e0304189c057e3c4ea  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-42.c
--- 105103,105109 ----
  baad1a844810f4188b5c66116c07d376  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-37.c
  fc113c8d95b51954d7f9871c93446b9f  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-38.c
  a45963b5d080e72125bbac7d426add30  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-39.c
! c091dbef3ac0e19fca2a6c949e141d97  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-4.c
  e982f410da548fc73557e74cb4ca7db4  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-40.c
  419dc6bfe8177790c95f1c53e74f8179  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-41.c
  5536be35d117b4e0304189c057e3c4ea  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-42.c
*************** a3af7d1671248b55b14f0bdda3176c98  gcc/te
*** 104976,104989 ****
  1cbb4c610a13c59e8ebee85065cff5a2  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-57.c
  67fd570a5f5d1e175ddb907dab2a621e  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-58.c
  899e3eee3656e0aebb614699b6492ed6  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-59.c
! c1eb81181d61acf40c1a8db9df167633  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-6.c
  2e1015b5d3b0bb6986ff9015e7efbaa7  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-60.c
  ef6e4b4d36d909db18c72729eae41856  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-61.c
  4208cb77eb4cff856816f25aaddd653a  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-62.c
  ba056af537a5d0b759601127a968797b  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-63.c
  49e30c5d97c3b098b983fd0fd16cc7d6  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-64.c
  aeef26bc58e2d29602800ba19c113617  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-65.c
! a5cad86ec76fd005eedc7d77e635f7f8  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-66.c
  b25a47afc8ae99293fd9c8294c187303  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-67.c
  1cc15041e816e1c706a17d21c1d05b5a  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-68.c
  86947ef0aec9e92b82058a6f3b232093  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-69.c
--- 105125,105138 ----
  1cbb4c610a13c59e8ebee85065cff5a2  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-57.c
  67fd570a5f5d1e175ddb907dab2a621e  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-58.c
  899e3eee3656e0aebb614699b6492ed6  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-59.c
! 32b951577703adb2acf0b457c610acf8  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-6.c
  2e1015b5d3b0bb6986ff9015e7efbaa7  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-60.c
  ef6e4b4d36d909db18c72729eae41856  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-61.c
  4208cb77eb4cff856816f25aaddd653a  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-62.c
  ba056af537a5d0b759601127a968797b  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-63.c
  49e30c5d97c3b098b983fd0fd16cc7d6  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-64.c
  aeef26bc58e2d29602800ba19c113617  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-65.c
! c43fdbef27df5f7df612bed27596c298  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-66.c
  b25a47afc8ae99293fd9c8294c187303  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-67.c
  1cc15041e816e1c706a17d21c1d05b5a  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-68.c
  86947ef0aec9e92b82058a6f3b232093  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-69.c
*************** a36a8b43148ba2fe56ca4a407cd0d515  gcc/te
*** 105045,105051 ****
  508423e9f3cd4102b079bd46d3adf20f  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/imm_conflict-3.c
  be851da0cb125d662452ecefeb694ebd  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/imm_conflict-4.c
  6c92bf40eabf2429e13fe0befa3c5bae  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/imm_conflict-5.c
! f56f295e1fde3d3a20d08762bbe6cb15  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-1.c
  fcb9c7ec10e39bcf039c98dc6fd1f2b3  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-10.c
  8d167ce4c9cbad2ded0e0b19ddcc7931  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-11.c
  1bf6b16b86fbbb7d966640fc7631409e  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-12.c
--- 105194,105200 ----
  508423e9f3cd4102b079bd46d3adf20f  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/imm_conflict-3.c
  be851da0cb125d662452ecefeb694ebd  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/imm_conflict-4.c
  6c92bf40eabf2429e13fe0befa3c5bae  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/imm_conflict-5.c
! 5f0bcd6f3962bf01c6481939a922cc46  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-1.c
  fcb9c7ec10e39bcf039c98dc6fd1f2b3  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-10.c
  8d167ce4c9cbad2ded0e0b19ddcc7931  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-11.c
  1bf6b16b86fbbb7d966640fc7631409e  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-12.c
*************** b878b51cd7e698f1a9518ff3e7d8f8f4  gcc/te
*** 105054,105064 ****
  c281d334daa2447697b22827467297a3  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-15.c
  10bf6808976492ea6313f533d103d7dc  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-16.c
  5abfbd893f87208627797d250b01d7c2  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-17.c
! aa07819241c5fa7ac467301b5935ff14  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-2.c
! 6b75a049e8d730d7baf1705aeb4e1129  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-3.c
! e18b3030a29256515d88ae41f312123b  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-4.c
! 1a49f9d40e046c0fc70eb48654cea047  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-5.c
! c7f8df98090c973f0f3dbd24cd2030e2  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-6.c
  6d8c72edc562a5039dc7ac041f6b7376  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-7.c
  f71e4919d3b3079c119386218c1071af  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-8.c
  562bf3d719a2d1ffa435ad220f892b4a  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-9.c
--- 105203,105213 ----
  c281d334daa2447697b22827467297a3  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-15.c
  10bf6808976492ea6313f533d103d7dc  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-16.c
  5abfbd893f87208627797d250b01d7c2  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-17.c
! d98fa3556a4e2571945ee59efaed4305  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-2.c
! 2e804b62c3ed047dca01cfcd776604f0  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-3.c
! 4ee3f5dc3c0d77afd76ac5c5f8fecb99  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-4.c
! 70f025c85c5d65e5894c1eaae1307097  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-5.c
! 662099d7625c32e03738b048e71a0948  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-6.c
  6d8c72edc562a5039dc7ac041f6b7376  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-7.c
  f71e4919d3b3079c119386218c1071af  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-8.c
  562bf3d719a2d1ffa435ad220f892b4a  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-9.c
*************** c85dd72a05191265ed466d39c4b6b5e7  gcc/te
*** 105108,105144 ****
  214ad7d07e6a288b395d3cef7ca24962  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/pr117974.c
  1b8009a0ebc38d1aa9051f39e5badf50  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/pr121485.c
  979e78c5ed1d2ba91a46584480362b26  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/riscv_vector.h
! e08588cfa23221a10eaf714a16aa7ea1  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-1.c
! 162e11cf9edc569ca4a0cc195e7265bb  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-10.c
  5f3b8ca1c3fc687d5eba2c13ea3fa7a9  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-11.c
  dfe616cc3424529fcb1b4f29efe74279  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-12.c
  5ffb34cd5f5096dadbecd4148e1118e2  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-13.c
! 0c9bb152d57345363b715221ef1cf628  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-14.c
! a291a75f362a1d9612f424ed15308ac9  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-15.c
! cbedd2ab19c43402f6ebc60a97090fd7  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-16.c
! fbd74ed87c3c3be2e6db21a54024e697  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-17.c
! 4923e42f1f15e86c027585b5ec203232  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-18.c
! aafa85da7bf3c2d63cf97c3f3f163083  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-19.c
  fb62294d3a2bb010cba54883210ab826  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-2.c
! fbd74ed87c3c3be2e6db21a54024e697  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-20.c
! df54ad883c077c5451c0f22c36dd15ef  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-21.c
! 6820cfa20d531d810edba6d0501e00dc  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-22.c
! 9c61363c3dd816e4b584b847ac1283a8  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-23.c
  97efb86837d92aa3c95d2a215b78972f  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-24.c
! 6f99eab73223621bb8ce4e75786377b1  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-25.c
  92fba188ee05e339e73ae974f3c86eab  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-26.c
! 541b1d2517f9375555b758354e07e902  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-27.c
! 7b72487e8213232895b139d700e66fe3  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-28.c
! d9d97c6f9a34c864b30be56e4015ea8a  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-29.c
! 3bb3d30614fb36adf0789a759aff0fa7  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-3.c
! 7104919f7818fbddde3578070b37714a  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-30.c
! 9ba2386c1751be6914c8d70e906da175  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-31.c
  64e41d7c7ece1b1d030abd2cfa63e74f  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-32.c
  d64e66d94cbdd12b340dbf4a224f19e9  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-33.c
  48d9349f8c0c8af7f20bc9ffab411625  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-34.c
! 90f5c3d830c10098a5344e2de3079c1b  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-35.c
  9a448d4392699ef2b3082ce2dbb7cacf  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-36.c
! fee73b147399f1d0829f785da3578a44  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-37.c
  07badc323281331a3a04c4de6815be63  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-38.c
  d155ea0f0b50305c82378ab87c0dc321  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-39.c
  90f4672e8fa886fa4cfbb22f81a4990e  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-4.c
--- 105257,105293 ----
  214ad7d07e6a288b395d3cef7ca24962  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/pr117974.c
  1b8009a0ebc38d1aa9051f39e5badf50  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/pr121485.c
  979e78c5ed1d2ba91a46584480362b26  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/riscv_vector.h
! b7a78eb7f3bb15b0b51f5e78b954ebf1  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-1.c
! 058332640e85ddf7a4d348f17dba8f52  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-10.c
  5f3b8ca1c3fc687d5eba2c13ea3fa7a9  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-11.c
  dfe616cc3424529fcb1b4f29efe74279  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-12.c
  5ffb34cd5f5096dadbecd4148e1118e2  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-13.c
! f4a7f69301f74684f55c4178e3953fa2  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-14.c
! 454854a5635d131bd192bd259395e10b  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-15.c
! 9f80c18e213f74cf15b4c61bb88b822e  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-16.c
! 27262b4974733ba933fadf38291b33f0  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-17.c
! 29fc73376691793c4953b59e6397425b  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-18.c
! af4a5a8744645f6df320a99f271e2a48  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-19.c
  fb62294d3a2bb010cba54883210ab826  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-2.c
! 27262b4974733ba933fadf38291b33f0  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-20.c
! d5fff0211ad215d33237aabb5badd316  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-21.c
! 0beb690c026b3499042396174c4271a7  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-22.c
! 6b7225d78e9657a261c9d98e9d6157a3  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-23.c
  97efb86837d92aa3c95d2a215b78972f  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-24.c
! faa5b609ec3ea5838158d0e396e1b0c2  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-25.c
  92fba188ee05e339e73ae974f3c86eab  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-26.c
! df656e84003b1460d527011eb3d4bbc1  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-27.c
! cc16682bce38b2369d5746a3606e36b9  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-28.c
! 7f9e00cebfa61de0d4e34ca6cdc1ea92  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-29.c
! 0fc1720e88c16e748af68e4a0e87a0f8  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-3.c
! 688c85c54f0632d899319da7fa4b82f7  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-30.c
! 464fec2aaa6736cd6e165e0fefc258e3  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-31.c
  64e41d7c7ece1b1d030abd2cfa63e74f  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-32.c
  d64e66d94cbdd12b340dbf4a224f19e9  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-33.c
  48d9349f8c0c8af7f20bc9ffab411625  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-34.c
! 7b2ceb3c565e45614c481736f3c349c1  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-35.c
  9a448d4392699ef2b3082ce2dbb7cacf  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-36.c
! b52f97c93529a238efa6897a26326f80  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-37.c
  07badc323281331a3a04c4de6815be63  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-38.c
  d155ea0f0b50305c82378ab87c0dc321  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-39.c
  90f4672e8fa886fa4cfbb22f81a4990e  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-4.c
*************** c42380201d075b3dc00d854091144ef3  gcc/te
*** 105151,105159 ****
  6f44a86257c7958a7826d7bd4c6bcf56  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-46.c
  30f6d6ccd44b52eb344072edf0137d7c  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-5.c
  02d0ae53ee03e94f3bba682e09fce208  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-6.c
! e0475a3754322c28cdf3d3f577af2bf8  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-7.c
! 7e98ad8aa051c55f994f3039c5dfb893  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-8.c
! 6429a2c1e9fa06a5b58be536b336be92  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-9.c
  11dbe76bf4eabe78dce6ec42f072b46b  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-1.c
  c1e6a37e8ff25986110ad6ef9ef4de0f  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-10.c
  aa4ddbbbf67691c72071a00529ecc48a  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-11.c
--- 105300,105308 ----
  6f44a86257c7958a7826d7bd4c6bcf56  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-46.c
  30f6d6ccd44b52eb344072edf0137d7c  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-5.c
  02d0ae53ee03e94f3bba682e09fce208  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-6.c
! 1be76da4537b9fb4e7a0f72d4b11032f  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-7.c
! 0a04e474b9a2485dff735fa9eb4707f2  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-8.c
! d2667dee10ba736403516d06d30aba7e  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-9.c
  11dbe76bf4eabe78dce6ec42f072b46b  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-1.c
  c1e6a37e8ff25986110ad6ef9ef4de0f  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-10.c
  aa4ddbbbf67691c72071a00529ecc48a  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-11.c
*************** aa4ddbbbf67691c72071a00529ecc48a  gcc/te
*** 105162,105172 ****
  8c51a7469b86f6d410266ba0c13c4f6b  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-14.c
  ea2b33efc025442329a336a059925ff7  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-15.c
  3f07a9149e9ac4032c6fd871d0371a4c  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-16.c
! 75d1f0f0b1c9a12031ea53c461bd2b15  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-17.c
! cffec56716c682862b9366cda346ab51  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-18.c
! c9a0a7608ef26fb3e1598a09299a3152  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-19.c
  02ec03ccfb668b351de40962b4525774  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-2.c
! 7db23cf82bc61c50eb46d36ada54cde8  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-20.c
  cde86dd4e44b53be452f5c6b6d1c01da  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-21.c
  2242fb56ee1673059d261659fbcaae30  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-22.c
  b0e5119c93d15f64cec2ddf78c015be6  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-23.c
--- 105311,105321 ----
  8c51a7469b86f6d410266ba0c13c4f6b  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-14.c
  ea2b33efc025442329a336a059925ff7  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-15.c
  3f07a9149e9ac4032c6fd871d0371a4c  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-16.c
! 8fb5a2fdea9abc54cac64fa2dd6144e7  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-17.c
! 26e924bc637e6af1f46477eea3594820  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-18.c
! 8456fa72c4c8a075f6f817b9176b78f8  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-19.c
  02ec03ccfb668b351de40962b4525774  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-2.c
! 752204ee9c2b729494734a08b61e1868  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-20.c
  cde86dd4e44b53be452f5c6b6d1c01da  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-21.c
  2242fb56ee1673059d261659fbcaae30  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-22.c
  b0e5119c93d15f64cec2ddf78c015be6  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-23.c
*************** cd948c64a2684bb7995fa9d7b296ba40  gcc/te
*** 105190,105196 ****
  aedb7500eb87a112f80fb4609b472748  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_complex_loop-2.c
  a6e85f1bf3d68b905f55eb7a3c5ea388  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_conflict-1.c
  c0a5c2206ccb5cf2a7d4252a7f171aed  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_conflict-10.c
! aa76ec6fcec01d05d6b7e67b164ae65d  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_conflict-11.c
  7d34e3c14e449cb63f6293af6c9316d0  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_conflict-12.c
  835d7f9ee00940eb208115ef87f2b36f  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_conflict-13.c
  4aa61bc76d29783352fc122155853cb1  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_conflict-2.c
--- 105339,105345 ----
  aedb7500eb87a112f80fb4609b472748  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_complex_loop-2.c
  a6e85f1bf3d68b905f55eb7a3c5ea388  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_conflict-1.c
  c0a5c2206ccb5cf2a7d4252a7f171aed  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_conflict-10.c
! 53d0a2998a86b61666e3e83e9514aae6  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_conflict-11.c
  7d34e3c14e449cb63f6293af6c9316d0  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_conflict-12.c
  835d7f9ee00940eb208115ef87f2b36f  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_conflict-13.c
  4aa61bc76d29783352fc122155853cb1  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_conflict-2.c
*************** f272a5f941dae54178996abf83a2d35f  gcc/te
*** 105289,105297 ****
  861b8565e70a72c65cbabbbab3a2c957  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-11.c
  74641d520de3f75906323a1cc88bbe61  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-12.c
  d7fbcf64fbb0d5c5eafc00eaf59b4014  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-13.c
! 9dc6123188ed1e38859900dc0cd6449e  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-14.c
! cb5abdeef334d7ca5ff5a5c51147f5f4  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-15.c
! fbf55e3959f112f1befd5c5423abd915  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-16.c
  db3716ab98e490696d91b43f563138a4  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-2.c
  d114f36b403e4209efa0e7ef95c150ba  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-3.c
  a56a90a0f7ffe624f8f5d652f5794539  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-4.c
--- 105438,105446 ----
  861b8565e70a72c65cbabbbab3a2c957  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-11.c
  74641d520de3f75906323a1cc88bbe61  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-12.c
  d7fbcf64fbb0d5c5eafc00eaf59b4014  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-13.c
! 17c8240f287f2f837141efc42141fec9  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-14.c
! 23586209bcf8c7dd757f1737e35d10e8  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-15.c
! 4c2d0b215fa8688ebaeecd94642e1584  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-16.c
  db3716ab98e490696d91b43f563138a4  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-2.c
  d114f36b403e4209efa0e7ef95c150ba  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-3.c
  a56a90a0f7ffe624f8f5d652f5794539  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-4.c
*************** f6f88d093025e4e08279af1a0dc99807  gcc/te
*** 106413,106419 ****
  6ac6cb7156c6792c36eb8bf50d36e6c3  gcc/testsuite/gcc.target/riscv/shift-shift-4.c
  f75203940c40557e5e51741f83c5a2de  gcc/testsuite/gcc.target/riscv/shift-shift-5.c
  8211d8e4b9da78adea589cb1f201edb1  gcc/testsuite/gcc.target/riscv/shift-shift-6.c
! 30d71df4284c3f12e347e20a6c5d7c17  gcc/testsuite/gcc.target/riscv/shift-shift-7.c
  d42b5158196a609204cd9c4e3de58825  gcc/testsuite/gcc.target/riscv/shorten-memrefs-1.c
  19d45e9f2c84257eb2d8540e8a98084b  gcc/testsuite/gcc.target/riscv/shorten-memrefs-2.c
  d16769ddf3b35ed27690cb27f697ede2  gcc/testsuite/gcc.target/riscv/shorten-memrefs-3.c
--- 106562,106568 ----
  6ac6cb7156c6792c36eb8bf50d36e6c3  gcc/testsuite/gcc.target/riscv/shift-shift-4.c
  f75203940c40557e5e51741f83c5a2de  gcc/testsuite/gcc.target/riscv/shift-shift-5.c
  8211d8e4b9da78adea589cb1f201edb1  gcc/testsuite/gcc.target/riscv/shift-shift-6.c
! 5e52b992180624943d4387e1e79ada3a  gcc/testsuite/gcc.target/riscv/shift-shift-7.c
  d42b5158196a609204cd9c4e3de58825  gcc/testsuite/gcc.target/riscv/shorten-memrefs-1.c
  19d45e9f2c84257eb2d8540e8a98084b  gcc/testsuite/gcc.target/riscv/shorten-memrefs-2.c
  d16769ddf3b35ed27690cb27f697ede2  gcc/testsuite/gcc.target/riscv/shorten-memrefs-3.c
*************** b2d190bbc93bb8aca63abd0ddf20aefc  gcc/te
*** 106432,106438 ****
  3f47aa8acdf98bd432971c2997721537  gcc/testsuite/gcc.target/riscv/simplify_ior_optimization.c
  b46d13a1308787ce2b7a3bb9f83f6524  gcc/testsuite/gcc.target/riscv/sle.c
  7932cde858379cf62bae15befab52987  gcc/testsuite/gcc.target/riscv/sleu.c
! 43818de9fb25aaf8a55fa39dcd3bca02  gcc/testsuite/gcc.target/riscv/slt-1.c
  a2a3683590a6c12a010cfd0b3f03b095  gcc/testsuite/gcc.target/riscv/smax-ieee.c
  86c31544a16504a7d32260ca07621420  gcc/testsuite/gcc.target/riscv/smax.c
  0215096559d8744c32da1dc65d488b7c  gcc/testsuite/gcc.target/riscv/smaxf-ieee.c
--- 106581,106587 ----
  3f47aa8acdf98bd432971c2997721537  gcc/testsuite/gcc.target/riscv/simplify_ior_optimization.c
  b46d13a1308787ce2b7a3bb9f83f6524  gcc/testsuite/gcc.target/riscv/sle.c
  7932cde858379cf62bae15befab52987  gcc/testsuite/gcc.target/riscv/sleu.c
! 33017ee48637167310cc697349833aba  gcc/testsuite/gcc.target/riscv/slt-1.c
  a2a3683590a6c12a010cfd0b3f03b095  gcc/testsuite/gcc.target/riscv/smax-ieee.c
  86c31544a16504a7d32260ca07621420  gcc/testsuite/gcc.target/riscv/smax.c
  0215096559d8744c32da1dc65d488b7c  gcc/testsuite/gcc.target/riscv/smaxf-ieee.c
*************** b415bb951ba55d3b5e901876751b51e8  gcc/te
*** 106483,106489 ****
  303e1468981b64cf07461158b0ab0649  gcc/testsuite/gcc.target/riscv/stack_frame.c
  271a1d3492e3b8728d53f6f6a634ae80  gcc/testsuite/gcc.target/riscv/stack_save_restore_1.c
  04ca12883d56722f87d5564f50f4fa51  gcc/testsuite/gcc.target/riscv/stack_save_restore_2.c
! bae0f68f57195d7a40dc2141a14558cd  gcc/testsuite/gcc.target/riscv/struct_vect_24.c
  f6c69573e846720818ee65a925b0af14  gcc/testsuite/gcc.target/riscv/sum-of-two-s12-const-1.c
  7304074a0af5a5e8dbb86e7f5c0467c8  gcc/testsuite/gcc.target/riscv/sum-of-two-s12-const-2.c
  09a9691c0cf30e284d645d7330825235  gcc/testsuite/gcc.target/riscv/sum-of-two-s12-const-3.c
--- 106632,106638 ----
  303e1468981b64cf07461158b0ab0649  gcc/testsuite/gcc.target/riscv/stack_frame.c
  271a1d3492e3b8728d53f6f6a634ae80  gcc/testsuite/gcc.target/riscv/stack_save_restore_1.c
  04ca12883d56722f87d5564f50f4fa51  gcc/testsuite/gcc.target/riscv/stack_save_restore_2.c
! cbb2a520f133aca83514f291894f0980  gcc/testsuite/gcc.target/riscv/struct_vect_24.c
  f6c69573e846720818ee65a925b0af14  gcc/testsuite/gcc.target/riscv/sum-of-two-s12-const-1.c
  7304074a0af5a5e8dbb86e7f5c0467c8  gcc/testsuite/gcc.target/riscv/sum-of-two-s12-const-2.c
  09a9691c0cf30e284d645d7330825235  gcc/testsuite/gcc.target/riscv/sum-of-two-s12-const-3.c
*************** c0a4bee5eba1cce4e72b7fe92728426b  gcc/te
*** 106536,106541 ****
--- 106685,106695 ----
  8cbdaea3ed315b788e2b1bede243011b  gcc/testsuite/gcc.target/riscv/test-equal.c
  eba52e984a37427da6fa1233257ff6a9  gcc/testsuite/gcc.target/riscv/tls_1.x
  dbe67905fc0f65b7be7d2f96a6c490e6  gcc/testsuite/gcc.target/riscv/tlsdesc.c
+ c895766a1610f9d625cb27bca819c177  gcc/testsuite/gcc.target/riscv/unroll-explicit.c
+ 7c6ff445e37bec7c2f19a69141de53c3  gcc/testsuite/gcc.target/riscv/unroll-large-loop.c
+ d0fda40ee29ab6c0c6f7481afa55a64b  gcc/testsuite/gcc.target/riscv/unroll-pragma.c
+ d45ab7c86bae3f24ebe278d34d77ca5a  gcc/testsuite/gcc.target/riscv/unroll-small-loop-tune.c
+ 17c26c4e3db90b10786000b08e72a1fb  gcc/testsuite/gcc.target/riscv/unroll-small-loop.c
  29a602b7f814b2f1c3f0991f0e0525b8  gcc/testsuite/gcc.target/riscv/ventana-16122.c
  76005de0a7c1ca66b1b06de3c53ad1c2  gcc/testsuite/gcc.target/riscv/weak-1.c
  6d3d9a73b1f2951561a607e43dc3ee05  gcc/testsuite/gcc.target/riscv/xandes/xandes-predef-1.c
*************** cc1048ad15d6f0a5bad76a5c0525c334  gcc/te
*** 106662,106668 ****
  3aa6b271c776af41bb52f19f6d2be52b  gcc/testsuite/gcc.target/riscv/zbb-min-max-02.c
  cc6086a551f06fe43ba1143dd3b45a0f  gcc/testsuite/gcc.target/riscv/zbb-min-max-03.c
  ea1b6a61c1909e52158b60625a154098  gcc/testsuite/gcc.target/riscv/zbb-min-max-04.c
! 213739450b24026f8c901e4ee0554b7c  gcc/testsuite/gcc.target/riscv/zbb-min-max-05.c
  4972a6b280ebb908120b62c006afb291  gcc/testsuite/gcc.target/riscv/zbb-min-max-06.c
  fdaee9e32a4828e4601eb17d83715b80  gcc/testsuite/gcc.target/riscv/zbb-min-max-07-run.c
  034755623c7d07978a584f1f4a9fca31  gcc/testsuite/gcc.target/riscv/zbb-min-max.c
--- 106816,106822 ----
  3aa6b271c776af41bb52f19f6d2be52b  gcc/testsuite/gcc.target/riscv/zbb-min-max-02.c
  cc6086a551f06fe43ba1143dd3b45a0f  gcc/testsuite/gcc.target/riscv/zbb-min-max-03.c
  ea1b6a61c1909e52158b60625a154098  gcc/testsuite/gcc.target/riscv/zbb-min-max-04.c
! 197e09c5c68c94895e397860db4d8b8d  gcc/testsuite/gcc.target/riscv/zbb-min-max-05.c
  4972a6b280ebb908120b62c006afb291  gcc/testsuite/gcc.target/riscv/zbb-min-max-06.c
  fdaee9e32a4828e4601eb17d83715b80  gcc/testsuite/gcc.target/riscv/zbb-min-max-07-run.c
  034755623c7d07978a584f1f4a9fca31  gcc/testsuite/gcc.target/riscv/zbb-min-max.c
*************** c141239c428d6f6e368356cbbd1dcdb7  gcc/te
*** 106853,106859 ****
  853c27a897cefbe98ebdbb934bbedef0  gcc/testsuite/gcc.target/rx/rx-abi-function-tests.c
  9770d8681c86c1a845862c1b624fc3ba  gcc/testsuite/gcc.target/rx/rx.exp
  e718c4f5bac79651adb4d0396b231953  gcc/testsuite/gcc.target/rx/zero-width-bitfield.c
- 2326486bbdc13fa6e49aadd508a1be61  gcc/testsuite/gcc.target/s390/20020926-1.c
  5f66a42e5c40df26aab6aad04c3794e3  gcc/testsuite/gcc.target/s390/20030123-1.c
  bfbcb40f434922a438420abc293e4a1e  gcc/testsuite/gcc.target/s390/20030129-1.c
  53b04422f85cb2fd7dedf7e13f61cb29  gcc/testsuite/gcc.target/s390/20040305-1.c
--- 107007,107012 ----
*************** ee05c824cd4a82ab77049eb9faf0e4fc  gcc/te
*** 106863,106877 ****
  c975117f4dad5f7d006165a64d22ff94  gcc/testsuite/gcc.target/s390/20050824-1.c
  943c3f5138314c478e34a5e9e2849353  gcc/testsuite/gcc.target/s390/20071212-1.c
  f657a587777cadd240d90267c42183a8  gcc/testsuite/gcc.target/s390/20090223-1.c
- b496b43e01188107d0277ab22fe7faa6  gcc/testsuite/gcc.target/s390/20140327-1.c
  0a834a7ade0902d6124c6925bdeba9fc  gcc/testsuite/gcc.target/s390/20150826-1.c
  0119e9b45819b50cdcbe43e352d8ee2f  gcc/testsuite/gcc.target/s390/20181024-1.c
  f27f299747d9862a0ca9a3ab3770f1c4  gcc/testsuite/gcc.target/s390/20200617.c
  1dabce41016ae8d4d1de9989a3307a73  gcc/testsuite/gcc.target/s390/20211119.c
  2a2e7cf581c0ea913bb0cd940e096c96  gcc/testsuite/gcc.target/s390/TI-constants-lra.c
  9ad2567c20e2550aeb41dc9e21f08fc5  gcc/testsuite/gcc.target/s390/addr-constraints-1.c
! 4bbde949a856a0b7fa4b437f375ac7e9  gcc/testsuite/gcc.target/s390/addsub-signed-overflow-1.c
! 91db25b7e50eea2c23caebfa790a61fd  gcc/testsuite/gcc.target/s390/addsub-signed-overflow-2.c
  9f272b5243eacbb553813a4fb9ed4d5b  gcc/testsuite/gcc.target/s390/aligned-1.c
  738e36dab36af196826c9b4e12d54d36  gcc/testsuite/gcc.target/s390/arch12/aghsghmgh-1.c
  0e764028020c3f12e214f3b6304e69fd  gcc/testsuite/gcc.target/s390/arch12/mul-1.c
--- 107016,107029 ----
  c975117f4dad5f7d006165a64d22ff94  gcc/testsuite/gcc.target/s390/20050824-1.c
  943c3f5138314c478e34a5e9e2849353  gcc/testsuite/gcc.target/s390/20071212-1.c
  f657a587777cadd240d90267c42183a8  gcc/testsuite/gcc.target/s390/20090223-1.c
  0a834a7ade0902d6124c6925bdeba9fc  gcc/testsuite/gcc.target/s390/20150826-1.c
  0119e9b45819b50cdcbe43e352d8ee2f  gcc/testsuite/gcc.target/s390/20181024-1.c
  f27f299747d9862a0ca9a3ab3770f1c4  gcc/testsuite/gcc.target/s390/20200617.c
  1dabce41016ae8d4d1de9989a3307a73  gcc/testsuite/gcc.target/s390/20211119.c
  2a2e7cf581c0ea913bb0cd940e096c96  gcc/testsuite/gcc.target/s390/TI-constants-lra.c
  9ad2567c20e2550aeb41dc9e21f08fc5  gcc/testsuite/gcc.target/s390/addr-constraints-1.c
! 0b4644a22e72f5b1398f5887b2f4afb1  gcc/testsuite/gcc.target/s390/addsub-signed-overflow-1.c
! 717f558fd9095741d192b8ed529c413e  gcc/testsuite/gcc.target/s390/addsub-signed-overflow-2.c
  9f272b5243eacbb553813a4fb9ed4d5b  gcc/testsuite/gcc.target/s390/aligned-1.c
  738e36dab36af196826c9b4e12d54d36  gcc/testsuite/gcc.target/s390/arch12/aghsghmgh-1.c
  0e764028020c3f12e214f3b6304e69fd  gcc/testsuite/gcc.target/s390/arch12/mul-1.c
*************** e06741a8741ba8ec94b2d802e4574d83  gcc/te
*** 106883,106889 ****
  c983687631a2e6c9dbb24e103ebd1364  gcc/testsuite/gcc.target/s390/arch13/popcount-1.c
  3c016ed407b9af1863b6adcef0bb891a  gcc/testsuite/gcc.target/s390/arch13/sel-1.c
  4ce603e2d83e4fcf4fa5babc96818e9b  gcc/testsuite/gcc.target/s390/ashr.c
! 77ddc4010e02bc058f8df5a13b8cced7  gcc/testsuite/gcc.target/s390/asm-constant-1.c
  394c9c146974e9a7e13f1b58ea0df5ed  gcc/testsuite/gcc.target/s390/asm-hard-reg-1.c
  62c75d1d7df914897b00cdff5647499f  gcc/testsuite/gcc.target/s390/asm-hard-reg-2.c
  19d1c822df73af7a606839c325b0c9a9  gcc/testsuite/gcc.target/s390/asm-hard-reg-3.c
--- 107035,107041 ----
  c983687631a2e6c9dbb24e103ebd1364  gcc/testsuite/gcc.target/s390/arch13/popcount-1.c
  3c016ed407b9af1863b6adcef0bb891a  gcc/testsuite/gcc.target/s390/arch13/sel-1.c
  4ce603e2d83e4fcf4fa5babc96818e9b  gcc/testsuite/gcc.target/s390/ashr.c
! 326d3032772b5b5e2fb0fa7edc9aa7e7  gcc/testsuite/gcc.target/s390/asm-constant-1.c
  394c9c146974e9a7e13f1b58ea0df5ed  gcc/testsuite/gcc.target/s390/asm-hard-reg-1.c
  62c75d1d7df914897b00cdff5647499f  gcc/testsuite/gcc.target/s390/asm-hard-reg-2.c
  19d1c822df73af7a606839c325b0c9a9  gcc/testsuite/gcc.target/s390/asm-hard-reg-3.c
*************** cdfaf0f556535d7f3ffb05c59924a233  gcc/te
*** 106906,106917 ****
  2750052bc05f059828b76c05a2a7da2e  gcc/testsuite/gcc.target/s390/bswaphi-1.c
  b1e7540142373435ec864919ea80e8c4  gcc/testsuite/gcc.target/s390/builtin-array-arg-1.c
  6837d1a6d1d448c21031e10330351313  gcc/testsuite/gcc.target/s390/builtin-constant-p-threading.c
! 37f41f2d3820a5ed3bd75f1c2a0da697  gcc/testsuite/gcc.target/s390/call-z10-pic-nodatarel.c
! cece0b36a531ed987691ab943d51fa1a  gcc/testsuite/gcc.target/s390/call-z10-pic.c
! 9177ade245e1460087c886601b8e1e38  gcc/testsuite/gcc.target/s390/call-z10.c
! eb9fe387b13f739f84281a3a0b5e8d6a  gcc/testsuite/gcc.target/s390/call-z9-pic-nodatarel.c
! 6725626c547ce5e5c48d8077dad26338  gcc/testsuite/gcc.target/s390/call-z9-pic.c
! b1f0c01d637b8df47287f927152ff965  gcc/testsuite/gcc.target/s390/call-z9.c
  46b537032825fcf59c9ec689bc2e887b  gcc/testsuite/gcc.target/s390/call.h
  a30e9b647f9ba647f6a35589e92b976d  gcc/testsuite/gcc.target/s390/ccor.c
  4b5dde5fc23f81bafd85214a111c5530  gcc/testsuite/gcc.target/s390/ccusage.c
--- 107058,107069 ----
  2750052bc05f059828b76c05a2a7da2e  gcc/testsuite/gcc.target/s390/bswaphi-1.c
  b1e7540142373435ec864919ea80e8c4  gcc/testsuite/gcc.target/s390/builtin-array-arg-1.c
  6837d1a6d1d448c21031e10330351313  gcc/testsuite/gcc.target/s390/builtin-constant-p-threading.c
! e45d9219b31ea29f807a9e80cedac98c  gcc/testsuite/gcc.target/s390/call-z10-pic-nodatarel.c
! fc672c51c7ad8cfe0b68c78730ec8365  gcc/testsuite/gcc.target/s390/call-z10-pic.c
! a1ab9c7632ff615b50b89114d3ae009c  gcc/testsuite/gcc.target/s390/call-z10.c
! 9af95a3767a47e5e78cbdc9651c7b40e  gcc/testsuite/gcc.target/s390/call-z9-pic-nodatarel.c
! 0ab9b5969f57032b5fc486f59012b719  gcc/testsuite/gcc.target/s390/call-z9-pic.c
! 15bbfad96c784e2a5b9b72e4e40b1d9a  gcc/testsuite/gcc.target/s390/call-z9.c
  46b537032825fcf59c9ec689bc2e887b  gcc/testsuite/gcc.target/s390/call.h
  a30e9b647f9ba647f6a35589e92b976d  gcc/testsuite/gcc.target/s390/ccor.c
  4b5dde5fc23f81bafd85214a111c5530  gcc/testsuite/gcc.target/s390/ccusage.c
*************** bd36d7368fda184d34631ae156b531dc  gcc/te
*** 106922,106931 ****
  c5136e0bb58277988b6c8fb48db7921f  gcc/testsuite/gcc.target/s390/dfp-1.c
  7a9f6920ab3e490fbba0f30bd72676f7  gcc/testsuite/gcc.target/s390/dfp-conv1.c
  8fe194c399b90414286b1fe87a584938  gcc/testsuite/gcc.target/s390/dfp_to_bfp_rounding.c
- 1d597c2c76602bea7e4683b7c43d63ab  gcc/testsuite/gcc.target/s390/dwarfregtable-1.c
- 3df32b127f6505d5afe3b8ea351491f1  gcc/testsuite/gcc.target/s390/dwarfregtable-2.c
  e4935aebfbac92efa594724b44e77822  gcc/testsuite/gcc.target/s390/dwarfregtable-3.c
! a726659c2ae1fb309562a9b72e3c2160  gcc/testsuite/gcc.target/s390/fcall-saved.c
  e94dcf472bccaf6bc8319b00c5dbfe57  gcc/testsuite/gcc.target/s390/ffs-1.c
  fe9d0881a008474329f40ac5043460f3  gcc/testsuite/gcc.target/s390/float16-1-2.h
  c405438f80470749a67f679ec7f3062f  gcc/testsuite/gcc.target/s390/float16-1.c
--- 107074,107081 ----
  c5136e0bb58277988b6c8fb48db7921f  gcc/testsuite/gcc.target/s390/dfp-1.c
  7a9f6920ab3e490fbba0f30bd72676f7  gcc/testsuite/gcc.target/s390/dfp-conv1.c
  8fe194c399b90414286b1fe87a584938  gcc/testsuite/gcc.target/s390/dfp_to_bfp_rounding.c
  e4935aebfbac92efa594724b44e77822  gcc/testsuite/gcc.target/s390/dwarfregtable-3.c
! 7f5488b58f773a36011d016281c0064b  gcc/testsuite/gcc.target/s390/fcall-saved.c
  e94dcf472bccaf6bc8319b00c5dbfe57  gcc/testsuite/gcc.target/s390/ffs-1.c
  fe9d0881a008474329f40ac5043460f3  gcc/testsuite/gcc.target/s390/float16-1-2.h
  c405438f80470749a67f679ec7f3062f  gcc/testsuite/gcc.target/s390/float16-1.c
*************** b76aabe27bc8e57b089f23dadbb05795  gcc/te
*** 106944,106950 ****
  9d34a3245581ff3208ddbda615ef6617  gcc/testsuite/gcc.target/s390/flogr-1.c
  d7d4fa685a6e49b79f2998b7b01a68f8  gcc/testsuite/gcc.target/s390/fminmax-1.c
  c634b66997aef6ea6be272161d55b9af  gcc/testsuite/gcc.target/s390/fminmax-2.c
- 2f2404c29092408bd406cc2e185ee7d4  gcc/testsuite/gcc.target/s390/fp2int1.c
  9b770970bea6710409e92c9a84d3a5d3  gcc/testsuite/gcc.target/s390/frame-addr1.c
  c7958dc9fa4da0d50fe09b45a6790ac0  gcc/testsuite/gcc.target/s390/frame-addr2.c
  e69b1b91153a3bf733d7b911d27f92d1  gcc/testsuite/gcc.target/s390/function-align1.c
--- 107094,107099 ----
*************** e69b1b91153a3bf733d7b911d27f92d1  gcc/te
*** 106953,106959 ****
  46ecba66446e0ff75c58b8c476d318d9  gcc/testsuite/gcc.target/s390/global-array-almost-huge-element.c
  339b5d2f3d9288a416be37bf773e7fd8  gcc/testsuite/gcc.target/s390/global-array-almost-negative-huge-element.c
  927ba8856c8a059ea35b7a5aa000a4c7  gcc/testsuite/gcc.target/s390/global-array-element-pic.c
! 939d0d8cfb1b36d6a99e9d550456b7ac  gcc/testsuite/gcc.target/s390/global-array-element-pic2.c
  4f9fe6f9b7ce15b1bfc7f4d2953c8ab3  gcc/testsuite/gcc.target/s390/global-array-even-element.c
  6006bf10a65a3d925ad0fa13c5bc4f2f  gcc/testsuite/gcc.target/s390/global-array-huge-element.c
  82ea28ab074cb45eafa2132c9fd8bd07  gcc/testsuite/gcc.target/s390/global-array-negative-huge-element.c
--- 107102,107108 ----
  46ecba66446e0ff75c58b8c476d318d9  gcc/testsuite/gcc.target/s390/global-array-almost-huge-element.c
  339b5d2f3d9288a416be37bf773e7fd8  gcc/testsuite/gcc.target/s390/global-array-almost-negative-huge-element.c
  927ba8856c8a059ea35b7a5aa000a4c7  gcc/testsuite/gcc.target/s390/global-array-element-pic.c
! 4f19702071b04a45e600b052fccf6672  gcc/testsuite/gcc.target/s390/global-array-element-pic2.c
  4f9fe6f9b7ce15b1bfc7f4d2953c8ab3  gcc/testsuite/gcc.target/s390/global-array-even-element.c
  6006bf10a65a3d925ad0fa13c5bc4f2f  gcc/testsuite/gcc.target/s390/global-array-huge-element.c
  82ea28ab074cb45eafa2132c9fd8bd07  gcc/testsuite/gcc.target/s390/global-array-negative-huge-element.c
*************** d94841af420f4745c433040de2753088  gcc/te
*** 107015,107021 ****
  2b6e27fb8c269454cda4b9124b0e9469  gcc/testsuite/gcc.target/s390/ifcvt-two-insns-bool.c
  0336e88917e98f4a57628237772223ba  gcc/testsuite/gcc.target/s390/ifcvt-two-insns-int.c
  54fc6c42e5cde795a04a012e14c9f842  gcc/testsuite/gcc.target/s390/ifcvt-two-insns-long.c
! 404116fb6b10d4fe3544c0e8e39a1204  gcc/testsuite/gcc.target/s390/insv-1.c
  7361c2c610e646df57c6d91b57e4689e  gcc/testsuite/gcc.target/s390/insv-2.c
  baa6d1c3d77baf7c1324df7bb6f4f40c  gcc/testsuite/gcc.target/s390/insv-3.c
  c3e13b2ac420e231a16f2a177383585a  gcc/testsuite/gcc.target/s390/int128load.c
--- 107164,107170 ----
  2b6e27fb8c269454cda4b9124b0e9469  gcc/testsuite/gcc.target/s390/ifcvt-two-insns-bool.c
  0336e88917e98f4a57628237772223ba  gcc/testsuite/gcc.target/s390/ifcvt-two-insns-int.c
  54fc6c42e5cde795a04a012e14c9f842  gcc/testsuite/gcc.target/s390/ifcvt-two-insns-long.c
! 62bb4ba167d519a0f9c9e1f3078a8e23  gcc/testsuite/gcc.target/s390/insv-1.c
  7361c2c610e646df57c6d91b57e4689e  gcc/testsuite/gcc.target/s390/insv-2.c
  baa6d1c3d77baf7c1324df7bb6f4f40c  gcc/testsuite/gcc.target/s390/insv-3.c
  c3e13b2ac420e231a16f2a177383585a  gcc/testsuite/gcc.target/s390/int128load.c
*************** bd67a43e59e2c398787687b428149fbc  gcc/te
*** 107023,107034 ****
  b7171bceb3b3104dac9a1f1a4b2b9cc6  gcc/testsuite/gcc.target/s390/ira-pic-spill-2.c
  f9357a4707183106de3a349754d00e8f  gcc/testsuite/gcc.target/s390/ira-pic-spill-3.c
  a9bc35f3b8e2135b6e2d575d37dd20e7  gcc/testsuite/gcc.target/s390/isfinite-isinf-isnormal-signbit-1.c
! 2c7b9c55c8431a78c587fa6dfd32e12d  gcc/testsuite/gcc.target/s390/isfinite-isinf-isnormal-signbit-2.c
! ef2c5743cfecad7fa099e99612f0f0e1  gcc/testsuite/gcc.target/s390/isfinite-isinf-isnormal-signbit-3.c
  2fac1f3d555a888fa224b855ee080ef3  gcc/testsuite/gcc.target/s390/isfinite-isinf-isnormal-signbit.h
  5ec66e2212ebc6c860d123f507d0b6bc  gcc/testsuite/gcc.target/s390/jump-label.c
! 91bc2877aa0bfe7d8d59f1e2b0d68dbf  gcc/testsuite/gcc.target/s390/larl-1.c
! 86858e91f5b4dabc479f75228a16d550  gcc/testsuite/gcc.target/s390/leaf-profile.c
  f13fa958f52666320ebd966fc9530e05  gcc/testsuite/gcc.target/s390/litpool-int.c
  25399ee14c48d99597fc401591d68286  gcc/testsuite/gcc.target/s390/litpool-r3-1.c
  2b7175e138a756516a334fd03dd56b25  gcc/testsuite/gcc.target/s390/litpool-str-1.c
--- 107172,107183 ----
  b7171bceb3b3104dac9a1f1a4b2b9cc6  gcc/testsuite/gcc.target/s390/ira-pic-spill-2.c
  f9357a4707183106de3a349754d00e8f  gcc/testsuite/gcc.target/s390/ira-pic-spill-3.c
  a9bc35f3b8e2135b6e2d575d37dd20e7  gcc/testsuite/gcc.target/s390/isfinite-isinf-isnormal-signbit-1.c
! 8c0842a717bd54d2b3ff8d1e91be167f  gcc/testsuite/gcc.target/s390/isfinite-isinf-isnormal-signbit-2.c
! c8767c280e5bcc52a2c97a8d2370a0b8  gcc/testsuite/gcc.target/s390/isfinite-isinf-isnormal-signbit-3.c
  2fac1f3d555a888fa224b855ee080ef3  gcc/testsuite/gcc.target/s390/isfinite-isinf-isnormal-signbit.h
  5ec66e2212ebc6c860d123f507d0b6bc  gcc/testsuite/gcc.target/s390/jump-label.c
! 7952a735e78e7916a0da3dedf73eae0a  gcc/testsuite/gcc.target/s390/larl-1.c
! 932abc6c1fb4ea46436c10593fa65182  gcc/testsuite/gcc.target/s390/leaf-profile.c
  f13fa958f52666320ebd966fc9530e05  gcc/testsuite/gcc.target/s390/litpool-int.c
  25399ee14c48d99597fc401591d68286  gcc/testsuite/gcc.target/s390/litpool-r3-1.c
  2b7175e138a756516a334fd03dd56b25  gcc/testsuite/gcc.target/s390/litpool-str-1.c
*************** a588f46b95abbab88ae5d34ca6ecdd74  gcc/te
*** 107040,107055 ****
  d473dda0acb68834c59c17300e9ce72a  gcc/testsuite/gcc.target/s390/load-and-test-fp.h
  a036b9c25181b348fabb813340965fd8  gcc/testsuite/gcc.target/s390/load-imm64-1.c
  67bc799c51190b143fcacd467d5604ab  gcc/testsuite/gcc.target/s390/load-imm64-2.c
! 39a3f1ac65f6b0dc5d9fe19ba5ed5f96  gcc/testsuite/gcc.target/s390/load-relative-check.c
! 19669d4c8129516729256af32eaf6e79  gcc/testsuite/gcc.target/s390/load-thread-pointer-once-2.c
! b8618898336397f0399d4c97701db7b8  gcc/testsuite/gcc.target/s390/load-thread-pointer-once.c
! 987d68c1cce8154fbef166f19f27d276  gcc/testsuite/gcc.target/s390/loc-1.c
  a4589217f85d225cee7d91649add59dc  gcc/testsuite/gcc.target/s390/lxa-1.c
  8576cb75188e265f621918172e37993a  gcc/testsuite/gcc.target/s390/lxa-2.c
  36d3b271e2f2eb0b15047430141e90bf  gcc/testsuite/gcc.target/s390/lxa-3.c
  25deeadef473f8167ac2f3aa560675e9  gcc/testsuite/gcc.target/s390/lxa-4.c
  29af65df49e303cbbe65fb9285be4736  gcc/testsuite/gcc.target/s390/md/andc-splitter-1.c
! 0f503fcf0cca864c9e45098ba6fd7616  gcc/testsuite/gcc.target/s390/md/andc-splitter-2.c
  9cf080f05a65a6c75f29f573c2a8c74a  gcc/testsuite/gcc.target/s390/md/atomic_compare_exchange-1.c
  10c6b7fde71de9dd63f0385af3e8bf9a  gcc/testsuite/gcc.target/s390/md/atomic_compare_exchange-1.inc
  48899608a96c6cef698fb830e8be0679  gcc/testsuite/gcc.target/s390/md/atomic_exchange-1.c
--- 107189,107204 ----
  d473dda0acb68834c59c17300e9ce72a  gcc/testsuite/gcc.target/s390/load-and-test-fp.h
  a036b9c25181b348fabb813340965fd8  gcc/testsuite/gcc.target/s390/load-imm64-1.c
  67bc799c51190b143fcacd467d5604ab  gcc/testsuite/gcc.target/s390/load-imm64-2.c
! d1dc86975a5a1fd613d46844fd4b8d1a  gcc/testsuite/gcc.target/s390/load-relative-check.c
! f281a9c20c8e8727dd55ca4f896314ef  gcc/testsuite/gcc.target/s390/load-thread-pointer-once-2.c
! eec02dc07b43cfc104ce1ed2bfa156fa  gcc/testsuite/gcc.target/s390/load-thread-pointer-once.c
! 3f99735fa8a886630ad1ca57cbe8eccd  gcc/testsuite/gcc.target/s390/loc-1.c
  a4589217f85d225cee7d91649add59dc  gcc/testsuite/gcc.target/s390/lxa-1.c
  8576cb75188e265f621918172e37993a  gcc/testsuite/gcc.target/s390/lxa-2.c
  36d3b271e2f2eb0b15047430141e90bf  gcc/testsuite/gcc.target/s390/lxa-3.c
  25deeadef473f8167ac2f3aa560675e9  gcc/testsuite/gcc.target/s390/lxa-4.c
  29af65df49e303cbbe65fb9285be4736  gcc/testsuite/gcc.target/s390/md/andc-splitter-1.c
! 940c6d532875614376476db0f68cef52  gcc/testsuite/gcc.target/s390/md/andc-splitter-2.c
  9cf080f05a65a6c75f29f573c2a8c74a  gcc/testsuite/gcc.target/s390/md/atomic_compare_exchange-1.c
  10c6b7fde71de9dd63f0385af3e8bf9a  gcc/testsuite/gcc.target/s390/md/atomic_compare_exchange-1.inc
  48899608a96c6cef698fb830e8be0679  gcc/testsuite/gcc.target/s390/md/atomic_exchange-1.c
*************** bb08fa1f6627522f43f5fe89dadd04a3  gcc/te
*** 107062,107074 ****
  a57f54483446dc5f464df08f79495bf7  gcc/testsuite/gcc.target/s390/memset-2.c
  f1f16081b0ad5b5a36f15cad87905e5a  gcc/testsuite/gcc.target/s390/mfentry-m64-pic.c
  c754a4515598fececb1e5306e99940eb  gcc/testsuite/gcc.target/s390/mfentry-m64.c
- 36072c7ea4113d0f19d663ddcf2bb764  gcc/testsuite/gcc.target/s390/mnop-mcount-m31-mzarch.c
  75f52f2182843e46acb7cf3cf9a6e8b4  gcc/testsuite/gcc.target/s390/mnop-mcount-m64-mfentry.c
  01217c0e5adcf0b590c88e802a446ace  gcc/testsuite/gcc.target/s390/mnop-mcount-m64.c
  436250948f985648a9f34494e8165c41  gcc/testsuite/gcc.target/s390/morestack.c
! e487655bbd959e42358a2a891b8712b8  gcc/testsuite/gcc.target/s390/mrecord-mcount.c
! 89187d4ded3bce370dc2fc5e2b6166b6  gcc/testsuite/gcc.target/s390/mul-signed-overflow-1.c
! 7848d2e49973e98fd02e545a79bb6b05  gcc/testsuite/gcc.target/s390/mul-signed-overflow-2.c
  4ebab6f204bac7a0c329a474cfea88ba  gcc/testsuite/gcc.target/s390/mul-wide.c
  b1409a345cc01bf1c136d5086d63118d  gcc/testsuite/gcc.target/s390/narrow-logical-op-1.c
  ee3f00537b1c391d545c37c6ea4a145c  gcc/testsuite/gcc.target/s390/nearestint-1.c
--- 107211,107222 ----
  a57f54483446dc5f464df08f79495bf7  gcc/testsuite/gcc.target/s390/memset-2.c
  f1f16081b0ad5b5a36f15cad87905e5a  gcc/testsuite/gcc.target/s390/mfentry-m64-pic.c
  c754a4515598fececb1e5306e99940eb  gcc/testsuite/gcc.target/s390/mfentry-m64.c
  75f52f2182843e46acb7cf3cf9a6e8b4  gcc/testsuite/gcc.target/s390/mnop-mcount-m64-mfentry.c
  01217c0e5adcf0b590c88e802a446ace  gcc/testsuite/gcc.target/s390/mnop-mcount-m64.c
  436250948f985648a9f34494e8165c41  gcc/testsuite/gcc.target/s390/morestack.c
! bd40aa7d92d3feed092af534af9443ba  gcc/testsuite/gcc.target/s390/mrecord-mcount.c
! 6a013f0de25355b9876ece5d01672822  gcc/testsuite/gcc.target/s390/mul-signed-overflow-1.c
! a030c349f0959fce57100e587a9e6afb  gcc/testsuite/gcc.target/s390/mul-signed-overflow-2.c
  4ebab6f204bac7a0c329a474cfea88ba  gcc/testsuite/gcc.target/s390/mul-wide.c
  b1409a345cc01bf1c136d5086d63118d  gcc/testsuite/gcc.target/s390/narrow-logical-op-1.c
  ee3f00537b1c391d545c37c6ea4a145c  gcc/testsuite/gcc.target/s390/nearestint-1.c
*************** a746140bf015e375e657d70b442a69b1  gcc/te
*** 107103,107117 ****
  562f1ca03435b8b1feb13adcaaa3be2c  gcc/testsuite/gcc.target/s390/nodatarel-1.c
  7ea6fcf7afbdc4bcd57407e5299e712a  gcc/testsuite/gcc.target/s390/nolrl-1.c
  d5b2bba665576dc0538f9d0bd2142e62  gcc/testsuite/gcc.target/s390/nomemloopunroll-1.c
! 8ed627b3bfa707f445d4ba3ae1d9c812  gcc/testsuite/gcc.target/s390/not.c
  40f68b40c79861c5702abc1940423c1b  gcc/testsuite/gcc.target/s390/oscbreak-1.c
  25c3bd00fd3d097e42ac8cfc215fd0c4  gcc/testsuite/gcc.target/s390/pfpo.c
  bc7456fc6c1a06bf4e0babad37deb6b4  gcc/testsuite/gcc.target/s390/pr101260.c
- bdf3ebe1c6a408e4efe2845222b3d54d  gcc/testsuite/gcc.target/s390/pr102222.c
  182ebf3677a29bf9b1dbb033505f78dd  gcc/testsuite/gcc.target/s390/pr104775.c
  b65b6b60679fe5fe589b83fa813950ac  gcc/testsuite/gcc.target/s390/pr106355-1.c
- 7768189c94023d287d68251021ad2dee  gcc/testsuite/gcc.target/s390/pr106355-2.c
- a69e5256407f09ac05e2e19ea14c9e15  gcc/testsuite/gcc.target/s390/pr106355-3.c
  5680e7515cb52b85f38e10b48d5e6a75  gcc/testsuite/gcc.target/s390/pr106355.h
  3037fa7dfb434ad8be9522e919ab6d65  gcc/testsuite/gcc.target/s390/pr112753.c
  b3924bf1892d3c296907c61da351118a  gcc/testsuite/gcc.target/s390/pr115860-1.c
--- 107251,107262 ----
  562f1ca03435b8b1feb13adcaaa3be2c  gcc/testsuite/gcc.target/s390/nodatarel-1.c
  7ea6fcf7afbdc4bcd57407e5299e712a  gcc/testsuite/gcc.target/s390/nolrl-1.c
  d5b2bba665576dc0538f9d0bd2142e62  gcc/testsuite/gcc.target/s390/nomemloopunroll-1.c
! ec2ee1b02f5dc885e4579c3b275975e5  gcc/testsuite/gcc.target/s390/not.c
  40f68b40c79861c5702abc1940423c1b  gcc/testsuite/gcc.target/s390/oscbreak-1.c
  25c3bd00fd3d097e42ac8cfc215fd0c4  gcc/testsuite/gcc.target/s390/pfpo.c
  bc7456fc6c1a06bf4e0babad37deb6b4  gcc/testsuite/gcc.target/s390/pr101260.c
  182ebf3677a29bf9b1dbb033505f78dd  gcc/testsuite/gcc.target/s390/pr104775.c
  b65b6b60679fe5fe589b83fa813950ac  gcc/testsuite/gcc.target/s390/pr106355-1.c
  5680e7515cb52b85f38e10b48d5e6a75  gcc/testsuite/gcc.target/s390/pr106355.h
  3037fa7dfb434ad8be9522e919ab6d65  gcc/testsuite/gcc.target/s390/pr112753.c
  b3924bf1892d3c296907c61da351118a  gcc/testsuite/gcc.target/s390/pr115860-1.c
*************** e282b73f72ab6c2a629448cad8de65a7  gcc/te
*** 107122,107128 ****
  87f44f86ebbe34eb671b5986ea8e15b1  gcc/testsuite/gcc.target/s390/pr119873-2.c
  ddd06bb7aa032539e1d7f788e2ddb31f  gcc/testsuite/gcc.target/s390/pr119873-3.c
  8e924805f1a0bbe1a1a2871be67a0970  gcc/testsuite/gcc.target/s390/pr119873-4.c
- c5b09d072962be55a3b282895afe41d6  gcc/testsuite/gcc.target/s390/pr119873-5.c
  d49455031d1c0b8c6740f90cf831720a  gcc/testsuite/gcc.target/s390/pr124079.c
  d519a0e6ac82acfc25e0475e29ea6d80  gcc/testsuite/gcc.target/s390/pr125972.c
  86e19acef61e2b484623df454673168e  gcc/testsuite/gcc.target/s390/pr125992.c
--- 107267,107272 ----
*************** d519a0e6ac82acfc25e0475e29ea6d80  gcc/te
*** 107131,107141 ****
  85f31fb9b4b15529205376d3f6fa385c  gcc/testsuite/gcc.target/s390/pr24624.c
  7adacbd67601dc0845e556e5632cd718  gcc/testsuite/gcc.target/s390/pr27661.c
  e9e2200b0b1b2ee975a929b593283ffc  gcc/testsuite/gcc.target/s390/pr36822.c
! 7cec3ba9828f4b3baffb3b8cd0153fbd  gcc/testsuite/gcc.target/s390/pr42224.c
  1dc778b76a0bb22bd3c2627bcd370dd4  gcc/testsuite/gcc.target/s390/pr55718.c
  6eff422787e3130ffd44a19983d51301  gcc/testsuite/gcc.target/s390/pr57559.c
  15e57d65510d631ba11ff1b829743815  gcc/testsuite/gcc.target/s390/pr57960.c
- e39ae50cfd41db69820ef49affe4f84c  gcc/testsuite/gcc.target/s390/pr61078.c
  00c63ab17bfff39123fe39e8948e04fb  gcc/testsuite/gcc.target/s390/pr66306.c
  a24ddb518747e2c2d2b79b51cff14991  gcc/testsuite/gcc.target/s390/pr67443.c
  f3e06ddc2677337fb5a4b5ab42a718d8  gcc/testsuite/gcc.target/s390/pr68015.c
--- 107275,107284 ----
  85f31fb9b4b15529205376d3f6fa385c  gcc/testsuite/gcc.target/s390/pr24624.c
  7adacbd67601dc0845e556e5632cd718  gcc/testsuite/gcc.target/s390/pr27661.c
  e9e2200b0b1b2ee975a929b593283ffc  gcc/testsuite/gcc.target/s390/pr36822.c
! ae5c2b6b02b57cde4cfbe6e12444b419  gcc/testsuite/gcc.target/s390/pr42224.c
  1dc778b76a0bb22bd3c2627bcd370dd4  gcc/testsuite/gcc.target/s390/pr55718.c
  6eff422787e3130ffd44a19983d51301  gcc/testsuite/gcc.target/s390/pr57559.c
  15e57d65510d631ba11ff1b829743815  gcc/testsuite/gcc.target/s390/pr57960.c
  00c63ab17bfff39123fe39e8948e04fb  gcc/testsuite/gcc.target/s390/pr66306.c
  a24ddb518747e2c2d2b79b51cff14991  gcc/testsuite/gcc.target/s390/pr67443.c
  f3e06ddc2677337fb5a4b5ab42a718d8  gcc/testsuite/gcc.target/s390/pr68015.c
*************** f4792ece0a0aff8add8968cae67374ad  gcc/te
*** 107167,107181 ****
  f1116dd01874e965a113345275e6310a  gcc/testsuite/gcc.target/s390/pr96456.c
  26a9015200103b2f0617d5672b91a902  gcc/testsuite/gcc.target/s390/pr97497.c
  45d0019f5b3d0e18a69edbc1595f0798  gcc/testsuite/gcc.target/s390/pr99663.c
! 8d798fcd0d87f17d6c3a8253fb51a8e8  gcc/testsuite/gcc.target/s390/preserve-args-1.c
  68221b669a135ab2606b54506cfd7989  gcc/testsuite/gcc.target/s390/preserve-args-2.c
! d0ba6ce53be2df8464e7d29dec20c450  gcc/testsuite/gcc.target/s390/preserve-args-3.c
  67a78b5542696a9589ecec30f861139d  gcc/testsuite/gcc.target/s390/rawmemchr-1.c
  f9de3c4e9d9e8c3a707e1f51e48901b6  gcc/testsuite/gcc.target/s390/return-addr1.c
  5368e8759352b798ae1db6bc79919aa2  gcc/testsuite/gcc.target/s390/return-addr2.c
! c638a86bd5bf24acab1490492cbfb557  gcc/testsuite/gcc.target/s390/risbg-ll-1.c
! b25efa9d439f6c9ad06962cba99229c8  gcc/testsuite/gcc.target/s390/risbg-ll-2.c
! abd82e72aa14d30ef649fb88b2856d0d  gcc/testsuite/gcc.target/s390/risbg-ll-3.c
  6c330cfc80a0f60d042947448413d011  gcc/testsuite/gcc.target/s390/rotate-truncation-mask.c
  82c60672eaa0813617a93a6fb6cf9fe8  gcc/testsuite/gcc.target/s390/s390.exp
  6e3e8c0857a625eecc8436188ac6907e  gcc/testsuite/gcc.target/s390/section-anchors-4.c
--- 107310,107324 ----
  f1116dd01874e965a113345275e6310a  gcc/testsuite/gcc.target/s390/pr96456.c
  26a9015200103b2f0617d5672b91a902  gcc/testsuite/gcc.target/s390/pr97497.c
  45d0019f5b3d0e18a69edbc1595f0798  gcc/testsuite/gcc.target/s390/pr99663.c
! 2225fb99fda2e7b802abaf01114d6100  gcc/testsuite/gcc.target/s390/preserve-args-1.c
  68221b669a135ab2606b54506cfd7989  gcc/testsuite/gcc.target/s390/preserve-args-2.c
! 5804dfb2e407cfcaf168afd904fa8239  gcc/testsuite/gcc.target/s390/preserve-args-3.c
  67a78b5542696a9589ecec30f861139d  gcc/testsuite/gcc.target/s390/rawmemchr-1.c
  f9de3c4e9d9e8c3a707e1f51e48901b6  gcc/testsuite/gcc.target/s390/return-addr1.c
  5368e8759352b798ae1db6bc79919aa2  gcc/testsuite/gcc.target/s390/return-addr2.c
! 893acdb4e35fd6db97db5170a2b90e4c  gcc/testsuite/gcc.target/s390/risbg-ll-1.c
! 05b5b4a2dcdd6648e1242a3b2f8ac5ee  gcc/testsuite/gcc.target/s390/risbg-ll-2.c
! 0f14c6def5b023b539b6cc21ddecda0a  gcc/testsuite/gcc.target/s390/risbg-ll-3.c
  6c330cfc80a0f60d042947448413d011  gcc/testsuite/gcc.target/s390/rotate-truncation-mask.c
  82c60672eaa0813617a93a6fb6cf9fe8  gcc/testsuite/gcc.target/s390/s390.exp
  6e3e8c0857a625eecc8436188ac6907e  gcc/testsuite/gcc.target/s390/section-anchors-4.c
*************** a4145c88799e654f926cb8d212d71829  gcc/te
*** 107199,107221 ****
  f7b099f000b8bc666ec6322dfb1ecd5f  gcc/testsuite/gcc.target/s390/stack-clash-1.c
  bc3d746388a64b8efc8d54c61733e6ad  gcc/testsuite/gcc.target/s390/stack-clash-2.c
  2fa5c1396a5010a1cc712e1a8a2aa834  gcc/testsuite/gcc.target/s390/stack-clash-3.c
- 9aaf7372b57bb00dcc00776ce67cbfff  gcc/testsuite/gcc.target/s390/stack-clash-4.c
- 416604f1f6966a9841843e4274cc86c1  gcc/testsuite/gcc.target/s390/stack-clash-5.c
  4da9c1f267a9b26bd7252e43441c1dd2  gcc/testsuite/gcc.target/s390/stack-protector-guard-global-1.c
  f4dd83de04bc9987ed038654890e8f5c  gcc/testsuite/gcc.target/s390/stack-protector-guard-global-2.c
  b5daee4f83823db3b6ec431c58bd0892  gcc/testsuite/gcc.target/s390/stack-protector-guard-global-3.c
  21c461ecf01490118d4e756f70eb4dba  gcc/testsuite/gcc.target/s390/stack-protector-guard-global-4.c
! d6f96ad5c638b20cfc8abae2975a39ca  gcc/testsuite/gcc.target/s390/stack-protector-guard-tls-1.c
  3a9ba61f8844739d1b5989c7c7e2b6c1  gcc/testsuite/gcc.target/s390/stackcheck1.c
  6194a2f1ab73b5d2d770793e72434897  gcc/testsuite/gcc.target/s390/target-attribute/pr82012.c
  a7f1a331d327049c14923db6d8cbc90e  gcc/testsuite/gcc.target/s390/target-attribute/pr99313.c
  653c12d6c072af1ed779f09c673f2bee  gcc/testsuite/gcc.target/s390/target-attribute/tattr-1.c
  3eadbba9f114de154af023b82b998dba  gcc/testsuite/gcc.target/s390/target-attribute/tattr-10.c
  df32ee2c85133188b09e051e4034671f  gcc/testsuite/gcc.target/s390/target-attribute/tattr-11.c
! 5e953bb238a5d4f89f370ca7a63de40d  gcc/testsuite/gcc.target/s390/target-attribute/tattr-12.c
  c5750a32146f25558a5ce74ab9b1e358  gcc/testsuite/gcc.target/s390/target-attribute/tattr-13.c
  9fc933767ac857c24fec47d42bd2a6b1  gcc/testsuite/gcc.target/s390/target-attribute/tattr-14.c
! 60f4d42d793368c5c865f21ad1960ade  gcc/testsuite/gcc.target/s390/target-attribute/tattr-15.c
  c41a415d34916c316aaec966296bc30f  gcc/testsuite/gcc.target/s390/target-attribute/tattr-16.c
  ab41e62f799930f1b6f0e834307da9de  gcc/testsuite/gcc.target/s390/target-attribute/tattr-17.c
  85caa32bd88038d647ac5fad83685829  gcc/testsuite/gcc.target/s390/target-attribute/tattr-2.c
--- 107342,107362 ----
  f7b099f000b8bc666ec6322dfb1ecd5f  gcc/testsuite/gcc.target/s390/stack-clash-1.c
  bc3d746388a64b8efc8d54c61733e6ad  gcc/testsuite/gcc.target/s390/stack-clash-2.c
  2fa5c1396a5010a1cc712e1a8a2aa834  gcc/testsuite/gcc.target/s390/stack-clash-3.c
  4da9c1f267a9b26bd7252e43441c1dd2  gcc/testsuite/gcc.target/s390/stack-protector-guard-global-1.c
  f4dd83de04bc9987ed038654890e8f5c  gcc/testsuite/gcc.target/s390/stack-protector-guard-global-2.c
  b5daee4f83823db3b6ec431c58bd0892  gcc/testsuite/gcc.target/s390/stack-protector-guard-global-3.c
  21c461ecf01490118d4e756f70eb4dba  gcc/testsuite/gcc.target/s390/stack-protector-guard-global-4.c
! 072fcf6c580162f19b8f0b799f71543c  gcc/testsuite/gcc.target/s390/stack-protector-guard-tls-1.c
  3a9ba61f8844739d1b5989c7c7e2b6c1  gcc/testsuite/gcc.target/s390/stackcheck1.c
  6194a2f1ab73b5d2d770793e72434897  gcc/testsuite/gcc.target/s390/target-attribute/pr82012.c
  a7f1a331d327049c14923db6d8cbc90e  gcc/testsuite/gcc.target/s390/target-attribute/pr99313.c
  653c12d6c072af1ed779f09c673f2bee  gcc/testsuite/gcc.target/s390/target-attribute/tattr-1.c
  3eadbba9f114de154af023b82b998dba  gcc/testsuite/gcc.target/s390/target-attribute/tattr-10.c
  df32ee2c85133188b09e051e4034671f  gcc/testsuite/gcc.target/s390/target-attribute/tattr-11.c
! ef5ce3c980d2434fb11536af8aa6885f  gcc/testsuite/gcc.target/s390/target-attribute/tattr-12.c
  c5750a32146f25558a5ce74ab9b1e358  gcc/testsuite/gcc.target/s390/target-attribute/tattr-13.c
  9fc933767ac857c24fec47d42bd2a6b1  gcc/testsuite/gcc.target/s390/target-attribute/tattr-14.c
! 0799a5c2cbeab4f8c0475c5b2f2ee40e  gcc/testsuite/gcc.target/s390/target-attribute/tattr-15.c
  c41a415d34916c316aaec966296bc30f  gcc/testsuite/gcc.target/s390/target-attribute/tattr-16.c
  ab41e62f799930f1b6f0e834307da9de  gcc/testsuite/gcc.target/s390/target-attribute/tattr-17.c
  85caa32bd88038d647ac5fad83685829  gcc/testsuite/gcc.target/s390/target-attribute/tattr-2.c
*************** fd265332edfd3b9f48d52096e5427dbe  gcc/te
*** 107229,107266 ****
  864bca74b625b80b1893fee96a66830d  gcc/testsuite/gcc.target/s390/target-attribute/tattr-9.c
  4be4043feb4a50a0d2e30b3d3c1c81f8  gcc/testsuite/gcc.target/s390/target-attribute/tattr-arch-tune-1.c
  7ec001055dea6f341cfc0ab0f01e6332  gcc/testsuite/gcc.target/s390/target-attribute/tattr-arch-tune-2.c
- 2d64fc823bd3fe25294439964ba9f4a4  gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-1.c
- d46500a0aaeafd1554c9c0a57275f726  gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-10.c
- 6c38b64d0b3118d854c5cf047d9e8613  gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-11.c
- afaaf051405b13b1d0f25d151cd3d58b  gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-12.c
- 1fe39e4656a6ff814b994a8c6e1483a9  gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-13.c
- b5c747b69637d18464fc979ebed7cdbb  gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-14.c
- 23036da8959472f7eec5c6f6be264182  gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-15.c
- aeb81da81db7d00ff2c179e0d11276c2  gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-16.c
- 7ab020c1b22dc498f1451006b6b978a4  gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-17.c
- 6b1dc993a54520f483b7abcfd3afb1ea  gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-18.c
- aee84878702ea8b65d4cb2e1a2490f6f  gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-19.c
- a9bb1e4cd7c676cfb133b12bcabe1fd9  gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-2.c
- 62e99f879d5349a7870d086a13f8e19e  gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-20.c
- 97f1cc02f7a2ee8a8316823b44992bc7  gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-21.c
- 4087ecf8cdb28cae6baa61e742b83071  gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-22.c
- 695a1a84e7a9a2e79de66d5d888e4ca9  gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-23.c
- 6c528b03d013b8e44cf1d7d67cfbed4e  gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-24.c
- 730d1083e5193b2d1c2f8c3784a5b6b1  gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-25.c
- f6bf6b1377004431df089d447f640b52  gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-26.c
- 4e886a9a4b8537c87f0c51fa89d4f61e  gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-27.c
- ba8c2a14bb30f05edab82298f1c95144  gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-28.c
- 6ce5aab31bba9cad5392b157bbe1b322  gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-29.c
- a540fc65292f279472990c487ced0f01  gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-3.c
- bd3c146b910dc29666814200fa820148  gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-30.c
- 2b91b92e139ea36708f87516ae804569  gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-31.c
- 8eb7a2dbff200e149c159b17b229252a  gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-32.c
- 3eee8c16a035e68dd0c82b8994e00050  gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-4.c
- 3d38df0c4fb30c724c693a5749049a06  gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-5.c
- 5d4f9a731165bf5b723a0c26fdb776d7  gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-6.c
- 5269557426a2cbcddc498b6edd9aeaca  gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-7.c
- 1a70336e17671010b1b09dc91c0c6abb  gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-8.c
- ad2c29d0217fe6015e746b5840a7196c  gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-9.c
  22557576b8bfc3316945262059abeeed  gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-1.c
  ad3af3a4a4589f2bcad91de540d9e333  gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-10.c
  73f37956cfae8e77f0d4ed23b9db05be  gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-11.c
--- 107370,107375 ----
*************** ff7d9419a3b2402f3410b0aae024febc  gcc/te
*** 107298,107313 ****
  9e482ff5796d7aa27f6f404a18462f13  gcc/testsuite/gcc.target/s390/target-attribute/tpragma-struct-vx-2.c
  201a36e4a6548d10d83352d305b4284a  gcc/testsuite/gcc.target/s390/tf_to_di-1.c
  b5c026b313e7e579c58d749f8ff8ab28  gcc/testsuite/gcc.target/s390/tls-pic.c
! 69c2f8e3f1d02b9f005713af50f678a4  gcc/testsuite/gcc.target/s390/tls.c
  d0f7e6beee3ecb181246a2372324af7e  gcc/testsuite/gcc.target/s390/tls.h
! 3036c442dc3b8f562a149cdd30c3d3aa  gcc/testsuite/gcc.target/s390/uaddc-1.c
! be6324fd92cea0881639c80ab321c307  gcc/testsuite/gcc.target/s390/uaddc-2.c
! 6cde92ca49e304a2c89a6706f7707986  gcc/testsuite/gcc.target/s390/uaddc-3.c
  e018d4fe07e1701b88d0469006781862  gcc/testsuite/gcc.target/s390/umul-wide.c
  3095d4efb3461cf2dfc79a3037839336  gcc/testsuite/gcc.target/s390/unaligned-1.c
! 917abff3cd250028ba01de23d5fd2dd9  gcc/testsuite/gcc.target/s390/usubc-1.c
! e4835dbf6d9c3c7438e6d7a8372da7ee  gcc/testsuite/gcc.target/s390/usubc-2.c
! ed8807784132f9e94878b1bae2639eb9  gcc/testsuite/gcc.target/s390/usubc-3.c
  daf32d359b4f5080aef58859b29870b9  gcc/testsuite/gcc.target/s390/vector/align-1.c
  6bf626314f1db50adc71184824f22bba  gcc/testsuite/gcc.target/s390/vector/align-2.c
  37d2afe5f257fe6c269b2baa787ffe41  gcc/testsuite/gcc.target/s390/vector/combine-shift-vec.c
--- 107407,107422 ----
  9e482ff5796d7aa27f6f404a18462f13  gcc/testsuite/gcc.target/s390/target-attribute/tpragma-struct-vx-2.c
  201a36e4a6548d10d83352d305b4284a  gcc/testsuite/gcc.target/s390/tf_to_di-1.c
  b5c026b313e7e579c58d749f8ff8ab28  gcc/testsuite/gcc.target/s390/tls-pic.c
! 2a14260841e2352b1a87270f5891b548  gcc/testsuite/gcc.target/s390/tls.c
  d0f7e6beee3ecb181246a2372324af7e  gcc/testsuite/gcc.target/s390/tls.h
! 5ea4d76f454b59836103b624cdd69fb0  gcc/testsuite/gcc.target/s390/uaddc-1.c
! 7fb7a2714ee55cea7a1d30738bad67cb  gcc/testsuite/gcc.target/s390/uaddc-2.c
! 6540e19446f93cfa4e4807145fa9cbe3  gcc/testsuite/gcc.target/s390/uaddc-3.c
  e018d4fe07e1701b88d0469006781862  gcc/testsuite/gcc.target/s390/umul-wide.c
  3095d4efb3461cf2dfc79a3037839336  gcc/testsuite/gcc.target/s390/unaligned-1.c
! 5925a282b16fb0391a80ab692c2a4117  gcc/testsuite/gcc.target/s390/usubc-1.c
! 4b7df99ff8d731c07e196deed5ed57b8  gcc/testsuite/gcc.target/s390/usubc-2.c
! c1c8d21b089d5ff3309579dde3fe3e2d  gcc/testsuite/gcc.target/s390/usubc-3.c
  daf32d359b4f5080aef58859b29870b9  gcc/testsuite/gcc.target/s390/vector/align-1.c
  6bf626314f1db50adc71184824f22bba  gcc/testsuite/gcc.target/s390/vector/align-2.c
  37d2afe5f257fe6c269b2baa787ffe41  gcc/testsuite/gcc.target/s390/vector/combine-shift-vec.c
*************** bffd2a31f045a49ed041fb06c40d1cd5  gcc/te
*** 107416,107422 ****
  bef5e60d91c914bf7de9023a9ab9f6b9  gcc/testsuite/gcc.target/s390/vector/partial/s390-vec-length-run-7.h
  071400cad4fbc56048b43c44323629fe  gcc/testsuite/gcc.target/s390/vector/partial/s390-vec-length-small.c
  ca2326bfc2b9007e3b63b0bea8890a00  gcc/testsuite/gcc.target/s390/vector/partial/s390-vec-length.h
! e5a0d225e223a496d21dbc38f267e4f8  gcc/testsuite/gcc.target/s390/vector/pattern-avg-1.c
  cd2bb8cc2344798548447dc2e2dee5de  gcc/testsuite/gcc.target/s390/vector/pattern-avg-2.c
  4898a67bf40a0253adf2960511aff52c  gcc/testsuite/gcc.target/s390/vector/pattern-mulh-1.c
  84012b25c9d455df9a346ad5d1f0de07  gcc/testsuite/gcc.target/s390/vector/pattern-mulh-2.c
--- 107525,107531 ----
  bef5e60d91c914bf7de9023a9ab9f6b9  gcc/testsuite/gcc.target/s390/vector/partial/s390-vec-length-run-7.h
  071400cad4fbc56048b43c44323629fe  gcc/testsuite/gcc.target/s390/vector/partial/s390-vec-length-small.c
  ca2326bfc2b9007e3b63b0bea8890a00  gcc/testsuite/gcc.target/s390/vector/partial/s390-vec-length.h
! 5fb0dc603e5a70b8fa1cf82d05201bc8  gcc/testsuite/gcc.target/s390/vector/pattern-avg-1.c
  cd2bb8cc2344798548447dc2e2dee5de  gcc/testsuite/gcc.target/s390/vector/pattern-avg-2.c
  4898a67bf40a0253adf2960511aff52c  gcc/testsuite/gcc.target/s390/vector/pattern-mulh-1.c
  84012b25c9d455df9a346ad5d1f0de07  gcc/testsuite/gcc.target/s390/vector/pattern-mulh-2.c
*************** f8ddf98d23fed8fdb81fc0b6b8a34fa4  gcc/te
*** 107439,107448 ****
  79d159920f787c25a63fedb37633653d  gcc/testsuite/gcc.target/s390/vector/vcond-mixed-double.c
  b2c713823b2df17078c09edbeb492644  gcc/testsuite/gcc.target/s390/vector/vcond-mixed-float.c
  a5e975cf66da220c860fe7a598ad059d  gcc/testsuite/gcc.target/s390/vector/vcond-shift.c
! 8fa9b68cf0196b4198ce00a304191744  gcc/testsuite/gcc.target/s390/vector/vec-abi-1.c
  3a8a70f0c80bb59f0c702d13290890cd  gcc/testsuite/gcc.target/s390/vector/vec-abi-2.c
! 9aa9bf85698e7ef21c53f1f2dd13ee75  gcc/testsuite/gcc.target/s390/vector/vec-abi-3.c
! 7ff0c05924eb5c6e6bd60f130e7d49c1  gcc/testsuite/gcc.target/s390/vector/vec-abi-4.c
  66b44542d1c591b33c3a652c0810d58e  gcc/testsuite/gcc.target/s390/vector/vec-abi-align-1.c
  8a3ffb6c5f4313662883368725aca94d  gcc/testsuite/gcc.target/s390/vector/vec-abi-attr-1.c
  ecbbab960980ce6717cd871016f94e2b  gcc/testsuite/gcc.target/s390/vector/vec-abi-attr-2.c
--- 107548,107557 ----
  79d159920f787c25a63fedb37633653d  gcc/testsuite/gcc.target/s390/vector/vcond-mixed-double.c
  b2c713823b2df17078c09edbeb492644  gcc/testsuite/gcc.target/s390/vector/vcond-mixed-float.c
  a5e975cf66da220c860fe7a598ad059d  gcc/testsuite/gcc.target/s390/vector/vcond-shift.c
! 8e0b1ad51cb4b99aa03c4ecea9ea2566  gcc/testsuite/gcc.target/s390/vector/vec-abi-1.c
  3a8a70f0c80bb59f0c702d13290890cd  gcc/testsuite/gcc.target/s390/vector/vec-abi-2.c
! 55a64f021a71186476c6610e71f52a17  gcc/testsuite/gcc.target/s390/vector/vec-abi-3.c
! ca59d93c419e9da6ca121dcc4a2ac1a5  gcc/testsuite/gcc.target/s390/vector/vec-abi-4.c
  66b44542d1c591b33c3a652c0810d58e  gcc/testsuite/gcc.target/s390/vector/vec-abi-align-1.c
  8a3ffb6c5f4313662883368725aca94d  gcc/testsuite/gcc.target/s390/vector/vec-abi-attr-1.c
  ecbbab960980ce6717cd871016f94e2b  gcc/testsuite/gcc.target/s390/vector/vec-abi-attr-2.c
*************** ecbbab960980ce6717cd871016f94e2b  gcc/te
*** 107453,107459 ****
  33a954fbedcbfb9b4e001f905bd6f8e0  gcc/testsuite/gcc.target/s390/vector/vec-abi-single-1.c
  7610eb58cecb933142d1f5db5b158bac  gcc/testsuite/gcc.target/s390/vector/vec-abi-single-2.c
  00c677b45b031010d00b9a08464d45c2  gcc/testsuite/gcc.target/s390/vector/vec-abi-struct-1.c
! 49445c57bcd7c342eb0107bc9b13d44e  gcc/testsuite/gcc.target/s390/vector/vec-abi-vararg-1.c
  dd0d54001d5c0c89de9ecbfeca7d9163  gcc/testsuite/gcc.target/s390/vector/vec-abi-vararg-2.c
  04edf5219581ca639beb3a6702c0c825  gcc/testsuite/gcc.target/s390/vector/vec-abs-emu.c
  18a30b21905501cfe3b583c13b3c756a  gcc/testsuite/gcc.target/s390/vector/vec-clobber-1.c
--- 107562,107568 ----
  33a954fbedcbfb9b4e001f905bd6f8e0  gcc/testsuite/gcc.target/s390/vector/vec-abi-single-1.c
  7610eb58cecb933142d1f5db5b158bac  gcc/testsuite/gcc.target/s390/vector/vec-abi-single-2.c
  00c677b45b031010d00b9a08464d45c2  gcc/testsuite/gcc.target/s390/vector/vec-abi-struct-1.c
! ee72e168bd831ac7e7ef9f243e197502  gcc/testsuite/gcc.target/s390/vector/vec-abi-vararg-1.c
  dd0d54001d5c0c89de9ecbfeca7d9163  gcc/testsuite/gcc.target/s390/vector/vec-abi-vararg-2.c
  04edf5219581ca639beb3a6702c0c825  gcc/testsuite/gcc.target/s390/vector/vec-abs-emu.c
  18a30b21905501cfe3b583c13b3c756a  gcc/testsuite/gcc.target/s390/vector/vec-clobber-1.c
*************** ff8a9ec0d970b55dd483a1d16ac9c94e  gcc/te
*** 107489,107495 ****
  36edbd8af8f3368a9b83ac5c88068cfc  gcc/testsuite/gcc.target/s390/vector/vec-nopeel-2.c
  6ef587966b363a02d4d92c17291005c6  gcc/testsuite/gcc.target/s390/vector/vec-perm-merge-1.c
  49d2d93d83391e6a89cb6fb3c01b3c59  gcc/testsuite/gcc.target/s390/vector/vec-perm-pack-1.c
! 604b357bf5bdc9c25e2e900ed77fd858  gcc/testsuite/gcc.target/s390/vector/vec-scalar-cmp-1.c
  ac53c0a1cd9b9e491894529575db4008  gcc/testsuite/gcc.target/s390/vector/vec-set-1.c
  8de36944e18edbbcc735c9baad533f52  gcc/testsuite/gcc.target/s390/vector/vec-shift-1.c
  0abbe44ec35d751d3115d16aa8369ae5  gcc/testsuite/gcc.target/s390/vector/vec-shift-10.c
--- 107598,107604 ----
  36edbd8af8f3368a9b83ac5c88068cfc  gcc/testsuite/gcc.target/s390/vector/vec-nopeel-2.c
  6ef587966b363a02d4d92c17291005c6  gcc/testsuite/gcc.target/s390/vector/vec-perm-merge-1.c
  49d2d93d83391e6a89cb6fb3c01b3c59  gcc/testsuite/gcc.target/s390/vector/vec-perm-pack-1.c
! ef6c9b67afe88d7c2441d5b7cee18156  gcc/testsuite/gcc.target/s390/vector/vec-scalar-cmp-1.c
  ac53c0a1cd9b9e491894529575db4008  gcc/testsuite/gcc.target/s390/vector/vec-set-1.c
  8de36944e18edbbcc735c9baad533f52  gcc/testsuite/gcc.target/s390/vector/vec-shift-1.c
  0abbe44ec35d751d3115d16aa8369ae5  gcc/testsuite/gcc.target/s390/vector/vec-shift-10.c
*************** f23d6e61c5e5e6f2cf2c19a7fe9e0222  gcc/te
*** 107562,107568 ****
  ec3bf0a75e3c2708bf426ad398014945  gcc/testsuite/gcc.target/s390/vxe3/vrl-1.c
  392e832721d81631ba8b1df2b30b4779  gcc/testsuite/gcc.target/s390/vxe3/vrl-2.c
  dc95f2902df894907c8cd4f00960f509  gcc/testsuite/gcc.target/s390/warn-dynamicstack-1.c
! 2bdca9d8b8f8e9f0aa4cc4029ce548d1  gcc/testsuite/gcc.target/s390/zero-scratch-regs-1.c
  7c087406872c6516a684c368993dcfea  gcc/testsuite/gcc.target/s390/zvector/autovec-double-quiet-eq.c
  8b4739c7e6faa30a8e2da3644af7e13a  gcc/testsuite/gcc.target/s390/zvector/autovec-double-quiet-ge.c
  dcc5ed5b3edf72f429ca266357c415da  gcc/testsuite/gcc.target/s390/zvector/autovec-double-quiet-gt.c
--- 107671,107677 ----
  ec3bf0a75e3c2708bf426ad398014945  gcc/testsuite/gcc.target/s390/vxe3/vrl-1.c
  392e832721d81631ba8b1df2b30b4779  gcc/testsuite/gcc.target/s390/vxe3/vrl-2.c
  dc95f2902df894907c8cd4f00960f509  gcc/testsuite/gcc.target/s390/warn-dynamicstack-1.c
! ad067e52d93e8e9d563c49580da5c897  gcc/testsuite/gcc.target/s390/zero-scratch-regs-1.c
  7c087406872c6516a684c368993dcfea  gcc/testsuite/gcc.target/s390/zvector/autovec-double-quiet-eq.c
  8b4739c7e6faa30a8e2da3644af7e13a  gcc/testsuite/gcc.target/s390/zvector/autovec-double-quiet-ge.c
  dcc5ed5b3edf72f429ca266357c415da  gcc/testsuite/gcc.target/s390/zvector/autovec-double-quiet-gt.c
*************** c510e08487f29d55308ff7e6e92099e1  gcc/te
*** 107633,107639 ****
  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
  99a4d9d376b39be880dd323c2ff0e424  gcc/testsuite/gcc.target/s390/zvector/vec-double-1.c
--- 107742,107748 ----
  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
! f59b4393dc1e5cccddf9db593b4b8f0b  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
  99a4d9d376b39be880dd323c2ff0e424  gcc/testsuite/gcc.target/s390/zvector/vec-double-1.c
*************** dfc167e3c82be6261ef045c50a409cf9  gcc/te
*** 108480,108487 ****
  ced3e7fc25757fe027f4eacc904e6881  gcc/testsuite/gcc.target/x86_64/abi/macros.h
  a28c324c053ea30337be8d9b01478f4d  gcc/testsuite/gcc.target/x86_64/abi/ms-sysv/do-test.S
  cf207cd32f48bf81f1c2ea9397f53856  gcc/testsuite/gcc.target/x86_64/abi/ms-sysv/gen.cc
! 67ddeb9bd931554189c4f100a0db2082  gcc/testsuite/gcc.target/x86_64/abi/ms-sysv/ms-sysv.c
! d28c46b8b9a691d6ae3abd7f324e5b87  gcc/testsuite/gcc.target/x86_64/abi/ms-sysv/ms-sysv.exp
  df350cc8fc42fcbfb44edc088765d60a  gcc/testsuite/gcc.target/x86_64/abi/test_3_element_struct_and_unions.c
  54a02258e782aaa35101b4f6cddbe300  gcc/testsuite/gcc.target/x86_64/abi/test_basic_alignment.c
  21f9b335d755c74bdef8998aeac98585  gcc/testsuite/gcc.target/x86_64/abi/test_basic_array_size_and_align.c
--- 108589,108596 ----
  ced3e7fc25757fe027f4eacc904e6881  gcc/testsuite/gcc.target/x86_64/abi/macros.h
  a28c324c053ea30337be8d9b01478f4d  gcc/testsuite/gcc.target/x86_64/abi/ms-sysv/do-test.S
  cf207cd32f48bf81f1c2ea9397f53856  gcc/testsuite/gcc.target/x86_64/abi/ms-sysv/gen.cc
! 86eaa72e1ff6c2744ffa37b93b7e3f52  gcc/testsuite/gcc.target/x86_64/abi/ms-sysv/ms-sysv.c
! e44ad0904c1813b96900f1dc55637bce  gcc/testsuite/gcc.target/x86_64/abi/ms-sysv/ms-sysv.exp
  df350cc8fc42fcbfb44edc088765d60a  gcc/testsuite/gcc.target/x86_64/abi/test_3_element_struct_and_unions.c
  54a02258e782aaa35101b4f6cddbe300  gcc/testsuite/gcc.target/x86_64/abi/test_basic_alignment.c
  21f9b335d755c74bdef8998aeac98585  gcc/testsuite/gcc.target/x86_64/abi/test_basic_array_size_and_align.c
*************** defe3a05f941a9b5c9f6a22338429ba8  gcc/te
*** 113537,113543 ****
  b6c4702bf04caee25dc8228192964820  gcc/testsuite/gfortran.dg/allocate_alloc_opt_15.f90
  3c813b0a7d13f9aa20c4646947272369  gcc/testsuite/gfortran.dg/allocate_alloc_opt_2.f90
  45a53c48bd85b773185b35930db8dd81  gcc/testsuite/gfortran.dg/allocate_alloc_opt_3.f90
! 99d5a861de70768d4b39b55425f3fbe6  gcc/testsuite/gfortran.dg/allocate_alloc_opt_4.f90
  41880aff4e6fc2f7230d0d90d9e456c7  gcc/testsuite/gfortran.dg/allocate_alloc_opt_5.f90
  3162e656f0f87f9864c9db26f113d416  gcc/testsuite/gfortran.dg/allocate_alloc_opt_6.f90
  597103d48c04622391db357f32409a4d  gcc/testsuite/gfortran.dg/allocate_alloc_opt_7.f90
--- 113646,113652 ----
  b6c4702bf04caee25dc8228192964820  gcc/testsuite/gfortran.dg/allocate_alloc_opt_15.f90
  3c813b0a7d13f9aa20c4646947272369  gcc/testsuite/gfortran.dg/allocate_alloc_opt_2.f90
  45a53c48bd85b773185b35930db8dd81  gcc/testsuite/gfortran.dg/allocate_alloc_opt_3.f90
! 3d3543b9f731021138f22b094ffd6023  gcc/testsuite/gfortran.dg/allocate_alloc_opt_4.f90
  41880aff4e6fc2f7230d0d90d9e456c7  gcc/testsuite/gfortran.dg/allocate_alloc_opt_5.f90
  3162e656f0f87f9864c9db26f113d416  gcc/testsuite/gfortran.dg/allocate_alloc_opt_6.f90
  597103d48c04622391db357f32409a4d  gcc/testsuite/gfortran.dg/allocate_alloc_opt_7.f90
*************** c8af6a632c789d3dc3fb0b76448852dd  gcc/te
*** 113555,113561 ****
  6fa4e8002e9d69d571d9ec8598f9889a  gcc/testsuite/gfortran.dg/allocate_class_4.f90
  8a886493e1b962cbfbe3ce9aa829d3a7  gcc/testsuite/gfortran.dg/allocate_deferred_char_scalar_1.f03
  215caa91f9d220e3892c4f395e00b7d8  gcc/testsuite/gfortran.dg/allocate_deferred_char_scalar_2.f03
! ff2e982bde22ac51a61fd6cb3b87bbf5  gcc/testsuite/gfortran.dg/allocate_derived_1.f90
  06dc937b7f96471c2676fbd37045a96e  gcc/testsuite/gfortran.dg/allocate_derived_2.f90
  6941791b2bcce63c7b4dedc3e2e6dce4  gcc/testsuite/gfortran.dg/allocate_derived_3.f90
  7489adc4a057289a0a380306d774dc64  gcc/testsuite/gfortran.dg/allocate_derived_4.f90
--- 113664,113670 ----
  6fa4e8002e9d69d571d9ec8598f9889a  gcc/testsuite/gfortran.dg/allocate_class_4.f90
  8a886493e1b962cbfbe3ce9aa829d3a7  gcc/testsuite/gfortran.dg/allocate_deferred_char_scalar_1.f03
  215caa91f9d220e3892c4f395e00b7d8  gcc/testsuite/gfortran.dg/allocate_deferred_char_scalar_2.f03
! 9ece384294cf047ce8ba0b26149d70a3  gcc/testsuite/gfortran.dg/allocate_derived_1.f90
  06dc937b7f96471c2676fbd37045a96e  gcc/testsuite/gfortran.dg/allocate_derived_2.f90
  6941791b2bcce63c7b4dedc3e2e6dce4  gcc/testsuite/gfortran.dg/allocate_derived_3.f90
  7489adc4a057289a0a380306d774dc64  gcc/testsuite/gfortran.dg/allocate_derived_4.f90
*************** bff4f86cadc34cdb60ab04c217d46dbd  gcc/te
*** 113578,113583 ****
--- 113687,113694 ----
  f4cacbb7fc7a73c4dc452abb4169a708  gcc/testsuite/gfortran.dg/allocate_with_mold_3.f90
  7d6318515de269c6859cdb9dea3519ac  gcc/testsuite/gfortran.dg/allocate_with_mold_4.f90
  516ab2101e0a7432925ea8c85bbc95d5  gcc/testsuite/gfortran.dg/allocate_with_mold_5.f90
+ fe7c37b9a23d7c4d89a4749882a59fc8  gcc/testsuite/gfortran.dg/allocate_with_mold_6.f90
+ 9ab1b47bc647683423a01be8f72d4870  gcc/testsuite/gfortran.dg/allocate_with_mold_7.f90
  8525309ee0a25fc4ec16a87c02a27e9a  gcc/testsuite/gfortran.dg/allocate_with_source_1.f90
  31f46b6f8cf8a1610b258ea73d0033de  gcc/testsuite/gfortran.dg/allocate_with_source_10.f08
  3e69f8fb58e06a24fc9934b0040bc33c  gcc/testsuite/gfortran.dg/allocate_with_source_11.f08
*************** c91185a3ccff03eaf3228522d82e998b  gcc/te
*** 114265,114270 ****
--- 114376,114382 ----
  90449ea3743d628deeed9105efb3d065  gcc/testsuite/gfortran.dg/block_15.f08
  32ce0fc033d0dabfb432fbabf6904563  gcc/testsuite/gfortran.dg/block_16.f08
  3c11755bcb25184e3524ac2842c42f70  gcc/testsuite/gfortran.dg/block_17.f90
+ 97dda518a0bdcc5acdcea19694d833fe  gcc/testsuite/gfortran.dg/block_18.f90
  10f179cb673e09df610043e9f3876bb2  gcc/testsuite/gfortran.dg/block_2.f08
  c20765c7d7a394e2f5b7ef52556e7d8a  gcc/testsuite/gfortran.dg/block_3.f90
  e1627e8620425c4babefa34dcd289690  gcc/testsuite/gfortran.dg/block_4.f08
*************** ea90081d3cd8fedd1e22f5d111802ece  gcc/te
*** 116250,116255 ****
--- 116362,116369 ----
  7fa8e9c2ccdac20cdb13dd112da81f1e  gcc/testsuite/gfortran.dg/f2003_io_7.f03
  949a57779b95604b00225fd54e04a853  gcc/testsuite/gfortran.dg/f2003_io_8.f03
  cfd26cb5680953939bd5d728d9a800ec  gcc/testsuite/gfortran.dg/f2018_obs.f90
+ 9792fc3c318e237f9c78f4c02e0b6a41  gcc/testsuite/gfortran.dg/f2018c937.f90
+ c6592585bef94703f809874423c1a912  gcc/testsuite/gfortran.dg/f2018c949.f90
  bfb30719592e25feea6d64c8daad785c  gcc/testsuite/gfortran.dg/f202y/f202y.exp
  c2fb85dc9b92d270b40acc03dd3807f7  gcc/testsuite/gfortran.dg/f202y/generic_assumed_rank_1.f90
  c16b9cae86b485f4536263e479960e2b  gcc/testsuite/gfortran.dg/f202y/generic_assumed_rank_2.f90
*************** ed6e00c5dc57055959583aa16ab493b8  gcc/te
*** 118640,118645 ****
--- 118754,118761 ----
  ccbe22a34dbac49b2d95cd730bb61d7e  gcc/testsuite/gfortran.dg/lto/bind_c-6_0.f90
  6d93908070e9d39392e45f8f55d2d583  gcc/testsuite/gfortran.dg/lto/bind_c-6_1.c
  0437f7ea90355be92502dc734e98686d  gcc/testsuite/gfortran.dg/lto/lto.exp
+ 2b8a012dfa7469de447886e577ac29d7  gcc/testsuite/gfortran.dg/lto/pr126170_0.f90
+ 561e6cc6456c8bd622576542ea741aef  gcc/testsuite/gfortran.dg/lto/pr126170_1.f90
  2e2f1d0362a3798b5cc0cdb704ae7876  gcc/testsuite/gfortran.dg/lto/pr40724_0.f
  b924c46f8e9c528e66113310bd822e92  gcc/testsuite/gfortran.dg/lto/pr40724_1.f
  b310c10bba59712483944d83a656d6cb  gcc/testsuite/gfortran.dg/lto/pr40725_0.f03
*************** cc6ac3aa934c104c85fad8e43ae6985d  gcc/te
*** 119498,119503 ****
--- 119614,119622 ----
  ce86820082e25f5aad2607f9163c3cf4  gcc/testsuite/gfortran.dg/pr103312.f90
  ab2e9f64b18aaf6df9600288ded6ce51  gcc/testsuite/gfortran.dg/pr103366.f90
  f5b2d7909d22359486a362b6e2b6e6d2  gcc/testsuite/gfortran.dg/pr103367.f90
+ c35efc88e117f86638938a16d6b88054  gcc/testsuite/gfortran.dg/pr103367_2.f90
+ 8a27376a5ce044b06ca3b47f787353d7  gcc/testsuite/gfortran.dg/pr103367_3.f90
+ 066ab4b80e43f24da3f7fe87a2cf8014  gcc/testsuite/gfortran.dg/pr103367_4.f90
  9e00f34ad9d6d78b98007d4ad68251f5  gcc/testsuite/gfortran.dg/pr103389.f90
  f2ba2e64941d368a0af432859dc114fe  gcc/testsuite/gfortran.dg/pr103471.f90
  229784fea790d57d4bfbaa9533660ee7  gcc/testsuite/gfortran.dg/pr103475.f90
*************** c82475796fec905fbcbddbebc480ad15  gcc/te
*** 119708,119713 ****
--- 119827,119834 ----
  5b0777068e1d7ec735043f942f680e93  gcc/testsuite/gfortran.dg/pr125117.f90
  355d56226f56678c5cd357d83a78ddff  gcc/testsuite/gfortran.dg/pr125263.f90
  21a6fcd9db938827306935bac8eec1c1  gcc/testsuite/gfortran.dg/pr125391.f90
+ 7e2e05a5f046a763356f94130e52c9a6  gcc/testsuite/gfortran.dg/pr126116.f90
+ 6e08f4627287595ccc509969aa703e88  gcc/testsuite/gfortran.dg/pr126210.f90
  984f8307f36d56a0b48b5acce2dd5eb5  gcc/testsuite/gfortran.dg/pr12884.f
  64075248b9d1bffd6f380bb4e2a6eae0  gcc/testsuite/gfortran.dg/pr15129.f90
  2b5f18b773a5db29b0a2ee2d8cce767c  gcc/testsuite/gfortran.dg/pr15140.f90
*************** b97c0286f254565a5f355602323616fe  gcc/te
*** 121483,121488 ****
--- 121604,121610 ----
  85db2a6cf6ca2d6c94792c2d028ff272  gcc/testsuite/gfortran.dg/transpose_optimization_1.f90
  b2f197e507dcc27d26c82d5585371568  gcc/testsuite/gfortran.dg/transpose_optimization_2.f90
  32ed89d0a0d70ae9ee467c7ecd483ca3  gcc/testsuite/gfortran.dg/transpose_reshape_r10.f90
+ 0e2eaac54fef8dc839f5c9b96a5c8783  gcc/testsuite/gfortran.dg/trigd_1.f90
  250cd83d324826e163003cc65309e6c3  gcc/testsuite/gfortran.dg/trim_1.f90
  f7b65ba4a0bca5d191b122de209dc237  gcc/testsuite/gfortran.dg/trim_optimize_1.f90
  64b094992df6f196a8eec88d8248b009  gcc/testsuite/gfortran.dg/trim_optimize_2.f90
*************** cf008cdbb160a8d4eded875132b8af0d  gcc/te
*** 130802,130808 ****
  bef0b63cc1001918d661e9e13db5ef66  gcc/testsuite/rust/compile/array_empty_list.rs
  57922881fbda5f036b116d8caa6456d0  gcc/testsuite/rust/compile/arrays1.rs
  b844641ffa836259966da8bbdb705602  gcc/testsuite/rust/compile/arrays2.rs
! 293314113a4ba4b608178368155ed2fa  gcc/testsuite/rust/compile/assert_missing_panic.rs
  0e211ddb899f5f3123a498cfad360aa2  gcc/testsuite/rust/compile/assume.rs
  6073012d58901a9b4fa93a8cc3ab6efb  gcc/testsuite/rust/compile/attr-allocator1.rs
  328554ef224af71babac5a995a70182e  gcc/testsuite/rust/compile/attr-allocator2.rs
--- 130924,130930 ----
  bef0b63cc1001918d661e9e13db5ef66  gcc/testsuite/rust/compile/array_empty_list.rs
  57922881fbda5f036b116d8caa6456d0  gcc/testsuite/rust/compile/arrays1.rs
  b844641ffa836259966da8bbdb705602  gcc/testsuite/rust/compile/arrays2.rs
! 7a8b40c83f6c3707247d1443740d82e0  gcc/testsuite/rust/compile/assert_missing_panic.rs
  0e211ddb899f5f3123a498cfad360aa2  gcc/testsuite/rust/compile/assume.rs
  6073012d58901a9b4fa93a8cc3ab6efb  gcc/testsuite/rust/compile/attr-allocator1.rs
  328554ef224af71babac5a995a70182e  gcc/testsuite/rust/compile/attr-allocator2.rs
*************** c741636a5e6ad51c24807384332f5603  gcc/te
*** 130836,130847 ****
--- 130958,130971 ----
  c232d78021a4d2d5e84318548a6251c7  gcc/testsuite/rust/compile/black_box.rs
  13fae562540b454a5e5897797377f4a3  gcc/testsuite/rust/compile/bounds.rs
  7a959378207d735e2baccb5cc9532d88  gcc/testsuite/rust/compile/bounds1.rs
+ 2a7e5feabeb0837ff7faa872b5168ab9  gcc/testsuite/rust/compile/box-expr.rs
  f33e8fc4a1deb14c8248f987029d6c2b  gcc/testsuite/rust/compile/box_syntax.rs
  37b5801c93adeef8c5f99969239c2b36  gcc/testsuite/rust/compile/box_syntax_feature_gate.rs
  91b41e1fa1acc4ecf813b938e00fc8e4  gcc/testsuite/rust/compile/braced_macro_arm.rs
  8cafb08a7b39753cc9f336e63efa1c3e  gcc/testsuite/rust/compile/braced_macro_statements1.rs
  546c4b5465b0e2fa6bc3edc7c2488dce  gcc/testsuite/rust/compile/braced_macro_statements2.rs
  438b9e47fc66fb5baab28b6c812b2c26  gcc/testsuite/rust/compile/braced_macro_statements3.rs
+ 73d706cc98a5662f943a78f6f6208b23  gcc/testsuite/rust/compile/break-label-loop.rs
  814ea7709c4f71ccb81bae4276ea218f  gcc/testsuite/rust/compile/break-rust1.rs
  f3d42a5fa0e793d38226efdb29b90d66  gcc/testsuite/rust/compile/break-rust2.rs
  5f5081a7a43a927732dc3d0e5f051ba1  gcc/testsuite/rust/compile/break-rust3.rs
*************** bd0c3f42f2caa1d391123da46b68a0e8  gcc/te
*** 130853,130858 ****
--- 130977,130983 ----
  d2aaa83aac21a0079b403bb1089990f2  gcc/testsuite/rust/compile/bswap.rs
  bf288f5c0e5145fb8d4726a44c5a66a2  gcc/testsuite/rust/compile/bug-with-default-generic.rs
  8df49cd8be0ccc61f2a2b4e3b40cadaa  gcc/testsuite/rust/compile/bytecharstring.rs
+ a1c942c0bcaadc4018f9f0529352e173  gcc/testsuite/rust/compile/c_string_null_byte_check.rs
  47f2827b01658a867a4f66627f986611  gcc/testsuite/rust/compile/canonical_paths1.rs
  07f84ca35516d54ef5ad8684ac15669f  gcc/testsuite/rust/compile/cast1.rs
  498aa4e0e5202b3a5830573fa9e03501  gcc/testsuite/rust/compile/cast4.rs
*************** e0bee5a4c22efe0cd6d765bbc357b61b  gcc/te
*** 131016,131022 ****
  8f0e76ff07fb5af3bb9cbebc501c2f41  gcc/testsuite/rust/compile/func4.rs
  82bbbd57da5b9363f6d0aa25ecaf13ea  gcc/testsuite/rust/compile/func5.rs
  86b96014ba3ffec125a0dc0e5f4af39e  gcc/testsuite/rust/compile/functions_without_body.rs
! 534769a0c614d8e8e7b2515c36e4ef81  gcc/testsuite/rust/compile/gat1.rs
  135d767a7acf31d830ff1345cc4d88d4  gcc/testsuite/rust/compile/generic-default1.rs
  e6eacbc5e5520f4ce5cd5c3464df0637  gcc/testsuite/rust/compile/generic_auto_trait.rs
  05d82b7d3b52387b4e6f06332d561bcf  gcc/testsuite/rust/compile/generics1.rs
--- 131141,131154 ----
  8f0e76ff07fb5af3bb9cbebc501c2f41  gcc/testsuite/rust/compile/func4.rs
  82bbbd57da5b9363f6d0aa25ecaf13ea  gcc/testsuite/rust/compile/func5.rs
  86b96014ba3ffec125a0dc0e5f4af39e  gcc/testsuite/rust/compile/functions_without_body.rs
! d145f34da5d2575d8f5af7adfd0540d1  gcc/testsuite/rust/compile/gat1.rs
! d3a13fa8872d9e5d12fb0f443787343c  gcc/testsuite/rust/compile/gat2.rs
! 0e046c32cdcc422420eae4a720cf98fd  gcc/testsuite/rust/compile/gat3.rs
! df86b062970b39f6a9795d94df33acff  gcc/testsuite/rust/compile/gat4.rs
! bbd157e5973cd67753ed213570f8512f  gcc/testsuite/rust/compile/gat5.rs
! b2e7063b14c7568f70cafa6d435946a8  gcc/testsuite/rust/compile/gat6.rs
! c6f61b31a39ce8151bcc2441b7c1e283  gcc/testsuite/rust/compile/gat7.rs
! 305454b3a90bf151a1e736fc2514783a  gcc/testsuite/rust/compile/gat8.rs
  135d767a7acf31d830ff1345cc4d88d4  gcc/testsuite/rust/compile/generic-default1.rs
  e6eacbc5e5520f4ce5cd5c3464df0637  gcc/testsuite/rust/compile/generic_auto_trait.rs
  05d82b7d3b52387b4e6f06332d561bcf  gcc/testsuite/rust/compile/generics1.rs
*************** f393b26051ebd301bb886eda0461df73  gcc/te
*** 131052,131057 ****
--- 131184,131190 ----
  066821e5180beb0aa6b4c8caf1016d2e  gcc/testsuite/rust/compile/import_wildcards.rs
  6e9d06bd7806b627386fd989566d2414  gcc/testsuite/rust/compile/include_empty.rs
  1b40abdd095a8e3abae8a1adea4ddb31  gcc/testsuite/rust/compile/infer-crate-name.rs
+ ae171ee7f81eeb162d5dac7a900c4bdd  gcc/testsuite/rust/compile/infer-type-issue-3583.rs
  15f303eb78df0a1cac790e83f79988a3  gcc/testsuite/rust/compile/inline_1.rs
  708412b50e770327700c5550b6566d52  gcc/testsuite/rust/compile/inline_2.rs
  aec34bd500a81987606d2134fa520c55  gcc/testsuite/rust/compile/inline_asm_compile_nop.rs
*************** a3e65f2e2c60fca52b7769e65f947880  gcc/te
*** 131128,131134 ****
  811e531d15eb795402f47d15325d5d94  gcc/testsuite/rust/compile/issue-2019-3.rs
  549a80c92a40487b2a65f8e2488f0e63  gcc/testsuite/rust/compile/issue-2029.rs
  a803f06e0dc3498d7e770cbc5af39a87  gcc/testsuite/rust/compile/issue-2035.rs
! 7570ee1143e9a835b053c07e9c54e76a  gcc/testsuite/rust/compile/issue-2036.rs
  992eefd3973c9ed7f8fd9685650c5b5a  gcc/testsuite/rust/compile/issue-2037.rs
  6139d817b414c4151f379955935f8cf8  gcc/testsuite/rust/compile/issue-2039.rs
  547b10786adb8f90ccdcdb969034fa27  gcc/testsuite/rust/compile/issue-2040.rs
--- 131261,131267 ----
  811e531d15eb795402f47d15325d5d94  gcc/testsuite/rust/compile/issue-2019-3.rs
  549a80c92a40487b2a65f8e2488f0e63  gcc/testsuite/rust/compile/issue-2029.rs
  a803f06e0dc3498d7e770cbc5af39a87  gcc/testsuite/rust/compile/issue-2035.rs
! c0f9689544b7d2186d746da35b2e62a6  gcc/testsuite/rust/compile/issue-2036.rs
  992eefd3973c9ed7f8fd9685650c5b5a  gcc/testsuite/rust/compile/issue-2037.rs
  6139d817b414c4151f379955935f8cf8  gcc/testsuite/rust/compile/issue-2039.rs
  547b10786adb8f90ccdcdb969034fa27  gcc/testsuite/rust/compile/issue-2040.rs
*************** e7802d00b16604c92dd4001dc1e8f6c0  gcc/te
*** 131170,131176 ****
  02b52a68a503e509e1a7029c5ac0db61  gcc/testsuite/rust/compile/issue-2431.rs
  ec52761abd07b504226c553a8ca4c14b  gcc/testsuite/rust/compile/issue-2477.rs
  7f19731795007120b5633ac365fb5d8a  gcc/testsuite/rust/compile/issue-2478.rs
! 2971e9c9c7f16aade9147c16afc62b4f  gcc/testsuite/rust/compile/issue-2479.rs
  a72fe401d81bfe5ec819415cf35e7f2b  gcc/testsuite/rust/compile/issue-2499.rs
  ee1a20e625319e9dd2461ed43a888276  gcc/testsuite/rust/compile/issue-2514.rs
  04566d12ea83457e16b70a1f9eeef210  gcc/testsuite/rust/compile/issue-2567-1.rs
--- 131303,131309 ----
  02b52a68a503e509e1a7029c5ac0db61  gcc/testsuite/rust/compile/issue-2431.rs
  ec52761abd07b504226c553a8ca4c14b  gcc/testsuite/rust/compile/issue-2477.rs
  7f19731795007120b5633ac365fb5d8a  gcc/testsuite/rust/compile/issue-2478.rs
! 90a86f3e4f007eedb76fca18180876dd  gcc/testsuite/rust/compile/issue-2479.rs
  a72fe401d81bfe5ec819415cf35e7f2b  gcc/testsuite/rust/compile/issue-2499.rs
  ee1a20e625319e9dd2461ed43a888276  gcc/testsuite/rust/compile/issue-2514.rs
  04566d12ea83457e16b70a1f9eeef210  gcc/testsuite/rust/compile/issue-2567-1.rs
*************** c83424f57449e8ce7fccd283b524220c  gcc/te
*** 131199,131205 ****
  26b8d79d68c1e9fdb6f7511706d42ed8  gcc/testsuite/rust/compile/issue-2847.rs
  1a06483921e6b522322ef85172e8f8c0  gcc/testsuite/rust/compile/issue-2850.rs
  04b7ceda1d5d5265884350cffc5ec4a4  gcc/testsuite/rust/compile/issue-2905-1.rs
! a6e23b3d9644d389e89b36eb748c44f5  gcc/testsuite/rust/compile/issue-2905-2.rs
  cbb5b7e9bd4315f08e1c81cf8a6e2aa4  gcc/testsuite/rust/compile/issue-2906.rs
  61cf63a1610da81aac9588cd0c6289fd  gcc/testsuite/rust/compile/issue-2907.rs
  93d2a15c5b751c9cb47e2ad249eb3683  gcc/testsuite/rust/compile/issue-2951.rs
--- 131332,131338 ----
  26b8d79d68c1e9fdb6f7511706d42ed8  gcc/testsuite/rust/compile/issue-2847.rs
  1a06483921e6b522322ef85172e8f8c0  gcc/testsuite/rust/compile/issue-2850.rs
  04b7ceda1d5d5265884350cffc5ec4a4  gcc/testsuite/rust/compile/issue-2905-1.rs
! df0a43fc8d17bb346c4d5d6f3160b897  gcc/testsuite/rust/compile/issue-2905-2.rs
  cbb5b7e9bd4315f08e1c81cf8a6e2aa4  gcc/testsuite/rust/compile/issue-2906.rs
  61cf63a1610da81aac9588cd0c6289fd  gcc/testsuite/rust/compile/issue-2907.rs
  93d2a15c5b751c9cb47e2ad249eb3683  gcc/testsuite/rust/compile/issue-2951.rs
*************** d3c25032b8e53cce6c34fafb5c355bda  gcc/te
*** 131374,131380 ****
--- 131507,131515 ----
  8535ad42022800c7f590dae363f7402d  gcc/testsuite/rust/compile/issue-4261.rs
  4cca37aaba46ad2ca34e404507b2536a  gcc/testsuite/rust/compile/issue-4262.rs
  c4209d2cfbe219138e10a0f059076dc5  gcc/testsuite/rust/compile/issue-4267.rs
+ 50427cc38add5019c406b170f63201bf  gcc/testsuite/rust/compile/issue-4293.rs
  9924a2652de8938e92418d5a841cb69b  gcc/testsuite/rust/compile/issue-4301.rs
+ 0e603a05312b2da43348bad8ac945b46  gcc/testsuite/rust/compile/issue-4302.rs
  7c33cefa5e3570697e19ec562c0e91d4  gcc/testsuite/rust/compile/issue-4375-ice-regression.rs
  bf86a972ac45a08d4f4b7e25d7f5c73c  gcc/testsuite/rust/compile/issue-4375-multiple-errors.rs
  cb6448e8e2e1b415379859fe50662527  gcc/testsuite/rust/compile/issue-4375-tuple-pattern.rs
*************** b9dece72b980e6878e0b9c8f92233dad  gcc/te
*** 131387,131394 ****
--- 131522,131538 ----
  6e2900f5f167d67ed6e69842a0ef2a48  gcc/testsuite/rust/compile/issue-4413.rs
  7835d03556e24617123ceaf32f087c93  gcc/testsuite/rust/compile/issue-4414.rs
  a54fd203759501635c8dded722e53305  gcc/testsuite/rust/compile/issue-4433.rs
+ 8fe8dd5754149f550c2d471a06750474  gcc/testsuite/rust/compile/issue-4471-1.rs
+ 3845dcd6e0cc2e1c44b0e3a7b9729784  gcc/testsuite/rust/compile/issue-4471-2.rs
+ 9461fc661d698626cb07c3e196682fe6  gcc/testsuite/rust/compile/issue-4476.rs
+ ee0d5805e55b0138258cb3de41b547ae  gcc/testsuite/rust/compile/issue-4481.rs
+ 45d1d5e587f520e62835fccfc3fde161  gcc/testsuite/rust/compile/issue-4486-1.rs
+ 4e3c4406305a9089a02fb14a6a422cd6  gcc/testsuite/rust/compile/issue-4486-2.rs
  056ded6ab1597de901b0442358e37ff4  gcc/testsuite/rust/compile/issue-4517.rs
+ 06ae2587732b9316e0108a9893203740  gcc/testsuite/rust/compile/issue-4538.rs
  a8bb81b5dff32585332ab4a069ec39ec  gcc/testsuite/rust/compile/issue-4563.rs
+ 557048da72c434cfff51dc77f5a06ed8  gcc/testsuite/rust/compile/issue-4592.rs
+ 81386638c5a0b0856ef2e9ad9628a540  gcc/testsuite/rust/compile/issue-4617.rs
  a814a3e2cad8eccf8272598f00384a38  gcc/testsuite/rust/compile/issue-557.rs
  93b8051018ad8ff1a45c001b33db9697  gcc/testsuite/rust/compile/issue-635-1.rs
  45b28bac74e6ab3db3594e805656e836  gcc/testsuite/rust/compile/issue-635-2.rs
*************** a84db31db1ee4fdf339e745cda91d4e3  gcc/te
*** 131400,131405 ****
--- 131544,131551 ----
  a9f1fae1fccdf4c532a7aa0372993dd2  gcc/testsuite/rust/compile/issue_4402_foo.rs
  8128baae1ca44f7d332f2fd81123b04a  gcc/testsuite/rust/compile/iterators1.rs
  5a347e59d47b125a2cd33d06e8663f67  gcc/testsuite/rust/compile/lang-impl.rs
+ 2bc79ba9e4f4fe33f8b6d32747516c38  gcc/testsuite/rust/compile/lang-owned-box-error1.rs
+ 3262a8cfa963ae582235d56b809049be  gcc/testsuite/rust/compile/lang-owned-box-error2.rs
  b13a9b4fdde57deff61e694ae3c96e53  gcc/testsuite/rust/compile/lang_feature_gate.rs
  4f3427d14c7a910ca47c17d9c09dbbb9  gcc/testsuite/rust/compile/let_alt.rs
  69ba857e39678ce4bdee992dd13f0c17  gcc/testsuite/rust/compile/lifetime_name_validation.rs
*************** f26cb01b22ed4b2c9501fa0184223c2e  gcc/te
*** 131413,131418 ****
--- 131559,131565 ----
  301621160505aa17f44e4d7e57866c82  gcc/testsuite/rust/compile/macros/builtin/eager1.rs
  5bf43102845b1bfd8e7ecda9699f69fd  gcc/testsuite/rust/compile/macros/builtin/eager2.rs
  40709a01d2ef59d69b31d0a9dd201d32  gcc/testsuite/rust/compile/macros/builtin/eager3.rs
+ a1e03b437e6d33756e6ace59ba372147  gcc/testsuite/rust/compile/macros/builtin/eager4.rs
  249a90e5584f358706d01af5982243dc  gcc/testsuite/rust/compile/macros/builtin/env.rs
  7c516c321c99795b5e55e9fd8552329c  gcc/testsuite/rust/compile/macros/builtin/include1.rs
  128993435cb1fa69362ac50bf135b907  gcc/testsuite/rust/compile/macros/builtin/include2.rs
*************** e1eaf64215ba0ce1a54872c4a2755695  gcc/te
*** 131575,131580 ****
--- 131722,131728 ----
  271c3222ab9469f9b089235cfeccbae7  gcc/testsuite/rust/compile/min_specialization1.rs
  b23f62fc9d1eb805631bc50ee1e59f27  gcc/testsuite/rust/compile/mismatch-crate-name.rs
  73b118a19b96907169d1be7f656ddd55  gcc/testsuite/rust/compile/mismatched-types.rs
+ 3e22ee0e3671b10ba6bf9cca6e5a3104  gcc/testsuite/rust/compile/missing-abi_0.rs
  e05003672155738b42ff0078b90b057c  gcc/testsuite/rust/compile/missing_closing_paren.rs
  b156f9fdfb8912df64086e4f8eb959dd  gcc/testsuite/rust/compile/missing_constructor_fields.rs
  9b6e3f6b3dd4d34b65d0488caa8b8def  gcc/testsuite/rust/compile/missing_return1.rs
*************** f159ce03b1d0ade06a353e46a520eeff  gcc/te
*** 131631,131636 ****
--- 131779,131786 ----
  c97542e19c49bdb1c1e6093f0d15ec85  gcc/testsuite/rust/compile/no-crate-level-outer-attr.rs
  ef10078e5cc72b7aa58ddd6f57415ed9  gcc/testsuite/rust/compile/no_core_feature_gate.rs
  cba1a4379934d707369e076d94501ff0  gcc/testsuite/rust/compile/no_mangle-malformed.rs
+ f76f505e266e9101fde2b3fa0551cbb0  gcc/testsuite/rust/compile/non-contiguous-range-endpoints_0.rs
+ 893b483571fe210ba77c45c57d5f9c1e  gcc/testsuite/rust/compile/non-shorthand-field-patterns_0.rs
  cef42490f234ffc267de19e41732f4d9  gcc/testsuite/rust/compile/non-snake-case_0.rs
  e00a3ea37078ff74ef1a8388f56054ec  gcc/testsuite/rust/compile/non-upper-case-globals_0.rs
  e33927992c01ea6d969a35997cdc12fb  gcc/testsuite/rust/compile/non_foreign_variadic_function.rs
*************** b2befa9b5e6c5f5879e6c46d22266199  gcc/te
*** 131967,131973 ****
  f26498a44d79401245cad77da9eaf3f5  gcc/testsuite/rust/compile/torture/traits15.rs
  63f48e06908e1de3a93be9a0df043aa7  gcc/testsuite/rust/compile/torture/traits16.rs
  a46f4f21290e866176f62a4d383f037c  gcc/testsuite/rust/compile/torture/traits17.rs
! fcb5d49b21f79b0fb269b916fc1cb377  gcc/testsuite/rust/compile/torture/traits18.rs
  60519d01b9239ad8a1b992d957714e5f  gcc/testsuite/rust/compile/torture/traits19.rs
  f21e553716eaf7471113d8ee88f2281c  gcc/testsuite/rust/compile/torture/traits2.rs
  16b352ff250c0328d6623eaa09895575  gcc/testsuite/rust/compile/torture/traits3.rs
--- 132117,132123 ----
  f26498a44d79401245cad77da9eaf3f5  gcc/testsuite/rust/compile/torture/traits15.rs
  63f48e06908e1de3a93be9a0df043aa7  gcc/testsuite/rust/compile/torture/traits16.rs
  a46f4f21290e866176f62a4d383f037c  gcc/testsuite/rust/compile/torture/traits17.rs
! fcb5d49b21f79b0fb269b916fc1cb377  gcc/testsuite/rust/compile/torture/traits18.rs.disabled
  60519d01b9239ad8a1b992d957714e5f  gcc/testsuite/rust/compile/torture/traits19.rs
  f21e553716eaf7471113d8ee88f2281c  gcc/testsuite/rust/compile/torture/traits2.rs
  16b352ff250c0328d6623eaa09895575  gcc/testsuite/rust/compile/torture/traits3.rs
*************** f1d5123657fc6159987adfc10e9a51c7  gcc/te
*** 132057,132062 ****
--- 132207,132213 ----
  7a6b96d0d3e537aa3c5377a9be1284fa  gcc/testsuite/rust/compile/tuplepattern-rest-readonly.rs
  79d59262987244890dd0a208a08bb9ae  gcc/testsuite/rust/compile/tuplepattern-restpattern-typecheck-err.rs
  32fc48739ea8b0102d44e1cebfd3482d  gcc/testsuite/rust/compile/tupple_struct_pattern_tuple.rs
+ cfb67b03759fe77c168a62953271af5a  gcc/testsuite/rust/compile/type-alias-generic-params.rs
  327b2855c73d318f1913d9235779d72f  gcc/testsuite/rust/compile/type-alias1.rs
  71c01ad03e2210d0247966a67c80e9e2  gcc/testsuite/rust/compile/type-bindings1.rs
  34935eb9cc883ddde614fb5d934f9978  gcc/testsuite/rust/compile/type-if.rs
*************** d3fa26eb07286f98c866e4e1b4c2d66b  gcc/te
*** 132086,132091 ****
--- 132237,132243 ----
  b65d217f81971305b657dfe421eda452  gcc/testsuite/rust/compile/unused-label_0.rs
  04c7030db51404d464ea0e79f87ac952  gcc/testsuite/rust/compile/unused-mut-identifier_0.rs
  48446af08464265d0ab531a13f494f7d  gcc/testsuite/rust/compile/unused-mut-struct-field_0.rs
+ ee9f3f9f2eeb3160bfcb4c2814dd53bf  gcc/testsuite/rust/compile/unused-visibilities_0.rs
  e042c5df93d476c84c3dec3c4a9d9508  gcc/testsuite/rust/compile/use_1.rs
  e147f1b16076aa9a6adabbe57df290e5  gcc/testsuite/rust/compile/use_2.rs
  558ea55fed98664a0af5b9f7ec511a03  gcc/testsuite/rust/compile/use_3.rs
*************** bc4a7cc0d8495f1ceb127fcfe2b05f85  gcc/te
*** 132122,132127 ****
--- 132274,132280 ----
  cabed98da33089ea15090f29e224f0fa  gcc/testsuite/rust/debug/oldlang.rs
  c7800d2a071ca2035e1e11d541d30282  gcc/testsuite/rust/debug/tuple.rs
  28335e6adaa7ca29f05ca2cad1ffd1c3  gcc/testsuite/rust/debug/win64-abi.rs
+ 44b0cd54ab14872907a6bab9f95495fe  gcc/testsuite/rust/execute/arith-offset.rs
  66f1763e73f2ea3328ba2b4ceaa057d0  gcc/testsuite/rust/execute/black_box.rs
  62ba180d7563201b9ef58cd0f08239e4  gcc/testsuite/rust/execute/bswap.rs
  88b00a09a41ef0fed7704188b89d3129  gcc/testsuite/rust/execute/cf-labeled-block.rs
*************** a56f460658cfa395fe3344ba68ff230f  gcc/te
*** 132130,132143 ****
--- 132283,132301 ----
  09e4d03dc32179648d3c7480dd71e0d7  gcc/testsuite/rust/execute/drop-block-scope.rs
  f19541fd953f46622ca16f7d6f82229b  gcc/testsuite/rust/execute/drop-function-scope-unit.rs
  973f188ba37707e9a470abc5050ff6d2  gcc/testsuite/rust/execute/drop-function-scope.rs
+ 552b40a23de393030c5ac5683f3c08d7  gcc/testsuite/rust/execute/drop-local-binding-lifo.rs
+ 3d69416e6b610ca16ebf049bafbe74a9  gcc/testsuite/rust/execute/drop-nested-block-scope.rs
  ee134a130743701047cd96c1fbf6fd01  gcc/testsuite/rust/execute/execute.exp
  5fce9179d59f0126f11a1db088901e50  gcc/testsuite/rust/execute/ident_pat_vs_path_1.rs
  1367735cf0c407f6eac379c6d157ffc4  gcc/testsuite/rust/execute/ident_pat_vs_path_2.rs
  ee23f2ac9014108d621746737e1803e4  gcc/testsuite/rust/execute/inline_asm_inout_ident.rs
  662f5147acc82b839a44e77df01fd782  gcc/testsuite/rust/execute/inline_asm_inout_var.rs
  ea3394a2e4f70b56cff9533b77626b80  gcc/testsuite/rust/execute/issue-1245.rs
+ d5ec14c6bd708719a2b707b1e3360d20  gcc/testsuite/rust/execute/min-align-of-val.rs
  a7f7c83e1714c01e9cc8437236496baa  gcc/testsuite/rust/execute/min_align_of.rs
  b3889753c0ac11385836b9891bb934cc  gcc/testsuite/rust/execute/non_decimal_128_saturation.rs
+ f5813efe267d2b52693fccdf31c4e7a0  gcc/testsuite/rust/execute/raw-pointer-aliasing.rs
+ e7eb91ee5ba32503ca17ad21cdcb315b  gcc/testsuite/rust/execute/size-of-val.rs
  b4a0564525cb409452c76182233b23f4  gcc/testsuite/rust/execute/torture/arrays.rs
  f4ad97f462282641b0be461bfd9da9b1  gcc/testsuite/rust/execute/torture/atomic_load.rs
  d47f35842ab0532a87ccf6d3e0226d55  gcc/testsuite/rust/execute/torture/atomic_store.rs
*************** b3d52a0a97d6520d3987277a12741eb0  gcc/te
*** 132155,132160 ****
--- 132313,132320 ----
  b26aaf2a9163b4a10cffeb72bdfbe1bb  gcc/testsuite/rust/execute/torture/builtin_macro_stringify.rs
  b0ee1c038f97be3d803fcc8200bf3f1e  gcc/testsuite/rust/execute/torture/builtin_macros1.rs
  34cfdeb7e5ad6d691ae648160dcc8121  gcc/testsuite/rust/execute/torture/builtin_macros3.rs
+ ece336ceb357d0ec234659406bc1461e  gcc/testsuite/rust/execute/torture/c_string.rs
+ 23115738214a7b75c4cf47c93e97e1c0  gcc/testsuite/rust/execute/torture/c_string_ensure_null_term.rs
  2cee2abf3b84009c25623edd8c6e6472  gcc/testsuite/rust/execute/torture/cfg-tail.rs
  3de5547b419f815ebbcf2f6c14ff3748  gcc/testsuite/rust/execute/torture/cfg1.rs
  0501f55c0ec294bf56658c412d9e2759  gcc/testsuite/rust/execute/torture/cfg2.rs
*************** e6c1f5a4a94b0cc181e682dbabffbcd8  gcc/te
*** 132210,132215 ****
--- 132370,132376 ----
  87061577dc414c140cc99f6a1b31c1a4  gcc/testsuite/rust/execute/torture/derive_macro1.rs
  e75cae93204cc6e59920d326cce3107a  gcc/testsuite/rust/execute/torture/derive_macro3.rs
  11228f490f795627480f0bac13bdda0f  gcc/testsuite/rust/execute/torture/derive_macro4.rs
+ 1ab9a76b1a4bb91d42f9e9e460b86083  gcc/testsuite/rust/execute/torture/dyn_object.rs
  05b6f5867925755b836912795518f507  gcc/testsuite/rust/execute/torture/empty_main.rs
  af3e80f19118fef9e24b5334cb280e93  gcc/testsuite/rust/execute/torture/enum_intrinsics1.rs
  253bbdaa1cd10758f573a18be8faac55  gcc/testsuite/rust/execute/torture/enum_intrinsics2.rs
*************** c9bea91ae1ce044220393b6dce45743f  gcc/te
*** 132397,132402 ****
--- 132558,132567 ----
  daa90aea6bd3f3798c9888f9222860f9  gcc/testsuite/rust/execute/torture/transmute1.rs
  01084c3ebbceda46979d1bb9752f62e5  gcc/testsuite/rust/execute/torture/wrapping_op1.rs
  cf3c92e27b00cca353ef473ff1ce8947  gcc/testsuite/rust/execute/torture/wrapping_op2.rs
+ 85b76be8d57979e284b81ca8f1b665c9  gcc/testsuite/rust/execute/trait-multi-impl-generic.rs
+ d819b7cf3fc4f0baa60e916960921d59  gcc/testsuite/rust/execute/trait-multi-impl-generic2.rs
+ 5752dc74f74c50a7e9b48fb97b9390d6  gcc/testsuite/rust/execute/trait-multi-impl.rs
+ f9d66a3fb0f06e249d8b567db2be534b  gcc/testsuite/rust/execute/write-bytes.rs
  a6e3b1960b16403b3c3478060109befe  gcc/testsuite/rust/execute/xfail/macro1.rs
  dad9679bd67145f945d7e0e948f2aaec  gcc/testsuite/rust/execute/xfail/match-identifierpattern-enum.rs
  19f5e29a15addb88054fc379a60540e4  gcc/testsuite/rust/link/generic_function_0.rs
*************** cbe90a107fcd179a95684d58982b5779  gcc/te
*** 132510,132516 ****
  16df2eee5df7c3c54070ef71bde6afcb  gcc/text-art/widget.h
  4020706e89a3193babbae430014c2735  gcc/text-range-label.h
  092eef5e89ca84562a58ff0e91eaee48  gcc/timevar.cc
! 7ae6e65fc4154cb546728c98d8ef8f9c  gcc/timevar.def
  160bb6626a9562507750456253c82eb4  gcc/timevar.h
  af430d420eee56a4d869b7421ddb08b9  gcc/topics/pass-events.h
  35d78a05799f4ad5feaaa1f036300c33  gcc/toplev.cc
--- 132675,132681 ----
  16df2eee5df7c3c54070ef71bde6afcb  gcc/text-art/widget.h
  4020706e89a3193babbae430014c2735  gcc/text-range-label.h
  092eef5e89ca84562a58ff0e91eaee48  gcc/timevar.cc
! 0a047bed22335b1138e07847e8c78e83  gcc/timevar.def
  160bb6626a9562507750456253c82eb4  gcc/timevar.h
  af430d420eee56a4d869b7421ddb08b9  gcc/topics/pass-events.h
  35d78a05799f4ad5feaaa1f036300c33  gcc/toplev.cc
*************** a4340dde4019e28f9fad54b2a7770c74  gcc/tr
*** 132522,132529 ****
  330c89392efb47062df1e82fff7ef01d  gcc/tree-affine.cc
  ed70c897fa5690940494f2b8b6e27f21  gcc/tree-affine.h
  80bb689c790bf8a20a1604f1fb450d2e  gcc/tree-assume.cc
! 256b77a135d2615eb0f9808933a9b462  gcc/tree-call-cdce.cc
! 7e71a9607cb07b71df80b2c61aa198a8  gcc/tree-cfg.cc
  809e1f07de4be5a3fc990f66bd6d1105  gcc/tree-cfg.h
  930348a0e01a15c999f55d255a5b9f42  gcc/tree-cfgcleanup.cc
  645c34c74323c655a1d20f8f76e64b27  gcc/tree-cfgcleanup.h
--- 132687,132694 ----
  330c89392efb47062df1e82fff7ef01d  gcc/tree-affine.cc
  ed70c897fa5690940494f2b8b6e27f21  gcc/tree-affine.h
  80bb689c790bf8a20a1604f1fb450d2e  gcc/tree-assume.cc
! f69e4c4ce8bf5067318a63c77a37f17f  gcc/tree-call-cdce.cc
! 9ab2f438de927b8530292a0f2bb11087  gcc/tree-cfg.cc
  809e1f07de4be5a3fc990f66bd6d1105  gcc/tree-cfg.h
  930348a0e01a15c999f55d255a5b9f42  gcc/tree-cfgcleanup.cc
  645c34c74323c655a1d20f8f76e64b27  gcc/tree-cfgcleanup.h
*************** f52407e888b9f0b3706e16b105f0ee56  gcc/tr
*** 132531,132537 ****
  1cf760e3e7aab6f94a5e56897486623d  gcc/tree-chrec.h
  f6230fc0d600174a276b14cbea9f0e37  gcc/tree-complex.cc
  891f03cd6411a8a239edcf6e6789611f  gcc/tree-core.h
! 872c20fe2fd8d662c991f9f0b4ddaaef  gcc/tree-data-ref.cc
  8a41e760788789609c052d419c155691  gcc/tree-data-ref.h
  89ef786b9c4639015bae3652c90fa60f  gcc/tree-dfa.cc
  e4c2f21e28741c793a32ae0fc8dbfa4c  gcc/tree-dfa.h
--- 132696,132702 ----
  1cf760e3e7aab6f94a5e56897486623d  gcc/tree-chrec.h
  f6230fc0d600174a276b14cbea9f0e37  gcc/tree-complex.cc
  891f03cd6411a8a239edcf6e6789611f  gcc/tree-core.h
! 52c5a671b1bb3224dba45336f53f7dad  gcc/tree-data-ref.cc
  8a41e760788789609c052d419c155691  gcc/tree-data-ref.h
  89ef786b9c4639015bae3652c90fa60f  gcc/tree-dfa.cc
  e4c2f21e28741c793a32ae0fc8dbfa4c  gcc/tree-dfa.h
*************** e3ac97ae6e4c501bb7dabaf26cdf8a30  gcc/tr
*** 132567,132573 ****
  7810fba9c2ee7167c24df41d8458fad3  gcc/tree-outof-ssa.h
  1f0636a04a2cc3390a38e648d396a06f  gcc/tree-parloops.cc
  898be2fb978b49d3654ad458a2cfab7d  gcc/tree-parloops.h
! fe7cb8d01db48420c7b2914863f3580c  gcc/tree-pass.h
  559089300f750cecc62d34797418b3cc  gcc/tree-phinodes.cc
  d370934f01e7c80fa4e88a80fabbcb95  gcc/tree-phinodes.h
  e955b77da9f61f19437f61d65861e763  gcc/tree-predcom.cc
--- 132732,132738 ----
  7810fba9c2ee7167c24df41d8458fad3  gcc/tree-outof-ssa.h
  1f0636a04a2cc3390a38e648d396a06f  gcc/tree-parloops.cc
  898be2fb978b49d3654ad458a2cfab7d  gcc/tree-parloops.h
! 649278dd78b836d270d24b012e26f43a  gcc/tree-pass.h
  559089300f750cecc62d34797418b3cc  gcc/tree-phinodes.cc
  d370934f01e7c80fa4e88a80fabbcb95  gcc/tree-phinodes.h
  e955b77da9f61f19437f61d65861e763  gcc/tree-predcom.cc
*************** b1c1f1362ac401ede3373f8aa23c02f1  gcc/tr
*** 132603,132609 ****
  8810d451bbe1958d41d972bc0224c156  gcc/tree-ssa-loop-ch.cc
  f1057b330ee10c6234f1f927ffba2f4d  gcc/tree-ssa-loop-im.cc
  972578d2900bb38415f9eb02b271096c  gcc/tree-ssa-loop-ivcanon.cc
! 308323e045a628302bd95db1c98c32f9  gcc/tree-ssa-loop-ivopts.cc
  73db7c26eb3c2afa63524b388a9849fd  gcc/tree-ssa-loop-ivopts.h
  f084337b877c38fa179ae0f14738ee83  gcc/tree-ssa-loop-manip.cc
  035c28a41f0d6337f42b24ced6477de5  gcc/tree-ssa-loop-manip.h
--- 132768,132774 ----
  8810d451bbe1958d41d972bc0224c156  gcc/tree-ssa-loop-ch.cc
  f1057b330ee10c6234f1f927ffba2f4d  gcc/tree-ssa-loop-im.cc
  972578d2900bb38415f9eb02b271096c  gcc/tree-ssa-loop-ivcanon.cc
! 46252b9e47c9eabb30fb36f08be3f474  gcc/tree-ssa-loop-ivopts.cc
  73db7c26eb3c2afa63524b388a9849fd  gcc/tree-ssa-loop-ivopts.h
  f084337b877c38fa179ae0f14738ee83  gcc/tree-ssa-loop-manip.cc
  035c28a41f0d6337f42b24ced6477de5  gcc/tree-ssa-loop-manip.h
*************** f7b409734eec08cd9a87244dc663df3a  gcc/tr
*** 132614,132620 ****
  e095960ef0fe00db5db9f4a2e88515d1  gcc/tree-ssa-loop-unswitch.cc
  faa18178392bba086edee765e464318c  gcc/tree-ssa-loop.cc
  c1590659dad2b41a69adb7654db65644  gcc/tree-ssa-loop.h
! ba282fb45d22dd7b9f51e27d263cda3d  gcc/tree-ssa-math-opts.cc
  fa83f982a805985b3a3da2ca5e10e43a  gcc/tree-ssa-math-opts.h
  56d25f9d7a5f35aa3637460c00b7eb7e  gcc/tree-ssa-operands.cc
  f83d0b12185538e6f679296bebfe3d2f  gcc/tree-ssa-operands.h
--- 132779,132785 ----
  e095960ef0fe00db5db9f4a2e88515d1  gcc/tree-ssa-loop-unswitch.cc
  faa18178392bba086edee765e464318c  gcc/tree-ssa-loop.cc
  c1590659dad2b41a69adb7654db65644  gcc/tree-ssa-loop.h
! c371423899467f80168b205dcf8d016e  gcc/tree-ssa-math-opts.cc
  fa83f982a805985b3a3da2ca5e10e43a  gcc/tree-ssa-math-opts.h
  56d25f9d7a5f35aa3637460c00b7eb7e  gcc/tree-ssa-operands.cc
  f83d0b12185538e6f679296bebfe3d2f  gcc/tree-ssa-operands.h
*************** f8119a019450befbbf3e3e40b010cf74  gcc/tr
*** 132657,132669 ****
  31edb0540b970325ae5c017fddf7eb02  gcc/tree-switch-conversion.cc
  fa20fc0102b6036d5fa58b953c127e15  gcc/tree-switch-conversion.h
  6a0f6268d598b3c59871ad41e01f33c1  gcc/tree-tailcall.cc
! b02942e4c99b39c803f5dbb4d27d5ed6  gcc/tree-vect-data-refs.cc
  851cdeabb53d017910c4c7442f3afe61  gcc/tree-vect-generic.cc
  8097a8b31ddd542184c52c26afb91da8  gcc/tree-vect-loop-manip.cc
  a24bebd0c765a4a97ecac1da1a798f8b  gcc/tree-vect-loop.cc
  14fdba1e6d50517ed4d832ad5d063740  gcc/tree-vect-patterns.cc
  4eab6d0f40af2653170a2f7ecf2d6fc1  gcc/tree-vect-slp-patterns.cc
! 6b495eb4a34811c5000eab4596a623ff  gcc/tree-vect-slp.cc
  3f2b3ea8ac574facaa66e059db6a23e3  gcc/tree-vect-stmts.cc
  42032e04f389a2e0f43fbb46ac091dac  gcc/tree-vector-builder.cc
  4a1b4947e64a076fdca46d14aab2181f  gcc/tree-vector-builder.h
--- 132822,132834 ----
  31edb0540b970325ae5c017fddf7eb02  gcc/tree-switch-conversion.cc
  fa20fc0102b6036d5fa58b953c127e15  gcc/tree-switch-conversion.h
  6a0f6268d598b3c59871ad41e01f33c1  gcc/tree-tailcall.cc
! d26bb3f656aca146cd991af417611476  gcc/tree-vect-data-refs.cc
  851cdeabb53d017910c4c7442f3afe61  gcc/tree-vect-generic.cc
  8097a8b31ddd542184c52c26afb91da8  gcc/tree-vect-loop-manip.cc
  a24bebd0c765a4a97ecac1da1a798f8b  gcc/tree-vect-loop.cc
  14fdba1e6d50517ed4d832ad5d063740  gcc/tree-vect-patterns.cc
  4eab6d0f40af2653170a2f7ecf2d6fc1  gcc/tree-vect-slp-patterns.cc
! d28b7185cb5b113dc5d1cd3b295b4095  gcc/tree-vect-slp.cc
  3f2b3ea8ac574facaa66e059db6a23e3  gcc/tree-vect-stmts.cc
  42032e04f389a2e0f43fbb46ac091dac  gcc/tree-vector-builder.cc
  4a1b4947e64a076fdca46d14aab2181f  gcc/tree-vector-builder.h
*************** a87f80d9a1405f816a0b6d544400beef  gcc/tr
*** 132671,132679 ****
  31766daa9141887d0af2afbaf39f8362  gcc/tree-vectorizer.h
  ca9cb422fed204a85a3a1a56b3ca8812  gcc/tree-vrp.cc
  c946b0d59b15393b95e356052c027eed  gcc/tree-vrp.h
! 3274b7d6d1a326dbca9dd4b097f64fd0  gcc/tree.cc
  f88475a43ca5e7c59112c941875a762c  gcc/tree.def
! bfcb67830fe6ae74eda42e77329da480  gcc/tree.h
  56652e612288132aa8395fdf720b0146  gcc/treestruct.def
  6c6350469a3dbb37f658f247d16ed872  gcc/tristate.cc
  704359710c2d40a58b6646b2da626443  gcc/tristate.h
--- 132836,132844 ----
  31766daa9141887d0af2afbaf39f8362  gcc/tree-vectorizer.h
  ca9cb422fed204a85a3a1a56b3ca8812  gcc/tree-vrp.cc
  c946b0d59b15393b95e356052c027eed  gcc/tree-vrp.h
! 3a7664bbd6a29e184794a50f2f418bd0  gcc/tree.cc
  f88475a43ca5e7c59112c941875a762c  gcc/tree.def
! 2d7f02d3dc4d4b6caad2bdf559f5d3e7  gcc/tree.h
  56652e612288132aa8395fdf720b0146  gcc/treestruct.def
  6c6350469a3dbb37f658f247d16ed872  gcc/tristate.cc
  704359710c2d40a58b6646b2da626443  gcc/tristate.h
*************** c210d770d6e95b32ac6887b37a5fbbaf  gcc/va
*** 132700,132706 ****
  7d6f590ff775e8cf6a2294e92a716df4  gcc/value-range.h
  67666161e57e5be58fba9c1c031067b0  gcc/value-relation.cc
  ea7df3e5b6ab2e6e23e741431d583880  gcc/value-relation.h
! 063ac1ec4666e86252dc7653bde86852  gcc/var-tracking.cc
  abe4064b9258df5b6c87d9394dc9b67c  gcc/varasm.cc
  183473e8cac5bad9279eb1937e4edda9  gcc/varasm.h
  136dfca78729a02f744f7929df4331c9  gcc/varpool.cc
--- 132865,132871 ----
  7d6f590ff775e8cf6a2294e92a716df4  gcc/value-range.h
  67666161e57e5be58fba9c1c031067b0  gcc/value-relation.cc
  ea7df3e5b6ab2e6e23e741431d583880  gcc/value-relation.h
! 247781425e1760fc6fd7790dca1c0637  gcc/var-tracking.cc
  abe4064b9258df5b6c87d9394dc9b67c  gcc/varasm.cc
  183473e8cac5bad9279eb1937e4edda9  gcc/varasm.h
  136dfca78729a02f744f7929df4331c9  gcc/varpool.cc
*************** c03a072efac9b30f8f8429ac52fd246b  libato
*** 132899,132950 ****
  8a7308fda7ed1543cb9e3be0f8e47bce  libatomic/testsuite/libatomic.c/atomic-store-5.c
  40618200985a15bcba64f871863da498  libatomic/testsuite/libatomic.c/c.exp
  97b0c9cdfcb733664bdf4efe0f5dc449  libatomic/testsuite/libatomic.c/generic-2.c
! 846b845b1db3df8b88a715abb2571420  libbacktrace/ChangeLog
  eb3a88b53140eb234a99a4b3a55e56bf  libbacktrace/ChangeLog.jit
! 3666db75f4b55461411d215c60f35beb  libbacktrace/Makefile.am
! f9e4383641cb9203faa7433e51857ce2  libbacktrace/Makefile.in
  edfaf8bfb5589c6323039e8289c4bb3c  libbacktrace/README
  4883dd3a6f42b0e31a8a56dbd4de9950  libbacktrace/aclocal.m4
  719dc569c62e5d69a68f4863a4ababba  libbacktrace/alloc.c
  f4b1ae56f4c4053efc21b5465684f95d  libbacktrace/allocfail.c
  9957fac2a5bea80745c23eb0ff65516a  libbacktrace/allocfail.sh
  3bcfde89a7dff1482bb03683c70e2c53  libbacktrace/atomic.c
! 56223a0e6fed39f8de32761005c19112  libbacktrace/backtrace-supported.h.in
! 96e20545918ca8d6408cd9507c957153  libbacktrace/backtrace.c
! 71af7824d1973b034520c3322eb198ae  libbacktrace/backtrace.h
  d2bf0859654109e63b35816412d817f8  libbacktrace/btest.c
  1680f9d27c3626fb2d07ae4ee9206da6  libbacktrace/config.h.in
  4015d9af550e58bee77b58416310f544  libbacktrace/configure
  f2a850d5c04ceedd0964b863899fec42  libbacktrace/configure.ac
! 46ec0883605fc53660c7f51dbe16b83f  libbacktrace/dwarf.c
  883b410489e200aea1b6ecc248562d86  libbacktrace/edtest.c
  1908cd42481d0b1a8a32ff691f4eaeb9  libbacktrace/edtest2.c
! e5a0074584e2209556e30e796206f573  libbacktrace/elf.c
! 46ea221f18220bbecd9d7128ca3f6741  libbacktrace/fileline.c
  2101239b2b163b2ca53d5ae30bbfaadf  libbacktrace/filetype.awk
  f074a8be4c44a8cd964cec9d10340d19  libbacktrace/install-debuginfo-for-buildid.sh.in
  be49a1d5141f385cac57e0ac77bc98af  libbacktrace/instrumented_alloc.c
! 0b2c09f4da738a4cc67b96ffe3b2f61c  libbacktrace/internal.h
! 67d38d9e05f032e36c03ccf1ce3dbd44  libbacktrace/macho.c
  1ef7a2fac7a2772d0a7a556b4a99be04  libbacktrace/mmap.c
  b77baf71c27d700972eb8dc8f51ef0f3  libbacktrace/mmapio.c
  3789b6b40341ca92c0013e965a22fc01  libbacktrace/mtest.c
  391ba39ddd4909ef37a05687406175a2  libbacktrace/nounwind.c
! 594ac0ff61ff0b4632be4f7ce652b4b1  libbacktrace/pecoff.c
  7a8b0f750d0ef74615d523e4c5062c6d  libbacktrace/posix.c
  34df0de860580492f5005b13488bf8e9  libbacktrace/print.c
  b41920d55477139013ce3d99e3126916  libbacktrace/read.c
  c831c20e4578d0b03be2169c0e79212e  libbacktrace/simple.c
  7a5f9398860d8fea53d43bafd55aa107  libbacktrace/sort.c
! 2df44beb0af670ae31954f4328f5c9e7  libbacktrace/state.c
  3b0cc1f755bd9dc3a5bc0d7de583a39f  libbacktrace/stest.c
  f12cb902c3ab24d137099f0db9e260a9  libbacktrace/test_format.c
  18c308f65a94786fb63f3f5d50d98552  libbacktrace/testlib.c
  d8d1bc377aa497a217f38aad204fd050  libbacktrace/testlib.h
  886b918a82080f85c7ca29ba3fe03708  libbacktrace/ttest.c
  8f0d571ffa42ffdc43776bebe5d56ef2  libbacktrace/unittest.c
! fa9332436547b6e468e3f9d3560612c5  libbacktrace/unknown.c
! c2c965e4a7a144af3e430d4191b2a091  libbacktrace/xcoff.c
  04137bad794f9bfb1236039f63227eef  libbacktrace/xztest.c
  eeca8e2df01fdc9fa455f2c703d1acee  libbacktrace/zstdtest.c
  ace1e49933e01dd308790e101ff593e2  libbacktrace/ztest.c
--- 133064,133116 ----
  8a7308fda7ed1543cb9e3be0f8e47bce  libatomic/testsuite/libatomic.c/atomic-store-5.c
  40618200985a15bcba64f871863da498  libatomic/testsuite/libatomic.c/c.exp
  97b0c9cdfcb733664bdf4efe0f5dc449  libatomic/testsuite/libatomic.c/generic-2.c
! 813ca2756c7fda4e11df6717ab57f7b0  libbacktrace/ChangeLog
  eb3a88b53140eb234a99a4b3a55e56bf  libbacktrace/ChangeLog.jit
! 0889fdb544ff54312dd272567e1a9f57  libbacktrace/Makefile.am
! ab6eae8bb7f2a7e1bc425c73c078ec0c  libbacktrace/Makefile.in
  edfaf8bfb5589c6323039e8289c4bb3c  libbacktrace/README
  4883dd3a6f42b0e31a8a56dbd4de9950  libbacktrace/aclocal.m4
  719dc569c62e5d69a68f4863a4ababba  libbacktrace/alloc.c
  f4b1ae56f4c4053efc21b5465684f95d  libbacktrace/allocfail.c
  9957fac2a5bea80745c23eb0ff65516a  libbacktrace/allocfail.sh
  3bcfde89a7dff1482bb03683c70e2c53  libbacktrace/atomic.c
! 23e433922bc101855f14e8ca0a379c36  libbacktrace/backtrace-supported.h.in
! e5e11f00a35ff937a5169e884f5b0cb6  libbacktrace/backtrace.c
! 065e8c3823bc8f52bb95800c6b55c0de  libbacktrace/backtrace.h
  d2bf0859654109e63b35816412d817f8  libbacktrace/btest.c
  1680f9d27c3626fb2d07ae4ee9206da6  libbacktrace/config.h.in
  4015d9af550e58bee77b58416310f544  libbacktrace/configure
  f2a850d5c04ceedd0964b863899fec42  libbacktrace/configure.ac
! 9f4a8e92d2966b4c446a79dec40dc951  libbacktrace/dwarf.c
  883b410489e200aea1b6ecc248562d86  libbacktrace/edtest.c
  1908cd42481d0b1a8a32ff691f4eaeb9  libbacktrace/edtest2.c
! 4ac8ed729031489da155b2e4193c72d3  libbacktrace/elf.c
! 3ddafef5b062db25cdcd8454d01e7d59  libbacktrace/fileline.c
  2101239b2b163b2ca53d5ae30bbfaadf  libbacktrace/filetype.awk
  f074a8be4c44a8cd964cec9d10340d19  libbacktrace/install-debuginfo-for-buildid.sh.in
  be49a1d5141f385cac57e0ac77bc98af  libbacktrace/instrumented_alloc.c
! 18d190d5086c477058b8add7e4f2f6ee  libbacktrace/internal.h
! a7eea23fd2224b54dca64659a473b04c  libbacktrace/macho.c
! d329ba86d192f4a2f0e1dd8bb47689e9  libbacktrace/mdtest.c
  1ef7a2fac7a2772d0a7a556b4a99be04  libbacktrace/mmap.c
  b77baf71c27d700972eb8dc8f51ef0f3  libbacktrace/mmapio.c
  3789b6b40341ca92c0013e965a22fc01  libbacktrace/mtest.c
  391ba39ddd4909ef37a05687406175a2  libbacktrace/nounwind.c
! 0111fd63710c0080f9755056ddfb7ce1  libbacktrace/pecoff.c
  7a8b0f750d0ef74615d523e4c5062c6d  libbacktrace/posix.c
  34df0de860580492f5005b13488bf8e9  libbacktrace/print.c
  b41920d55477139013ce3d99e3126916  libbacktrace/read.c
  c831c20e4578d0b03be2169c0e79212e  libbacktrace/simple.c
  7a5f9398860d8fea53d43bafd55aa107  libbacktrace/sort.c
! e6bd5218604af25af16d24cf0de8324c  libbacktrace/state.c
  3b0cc1f755bd9dc3a5bc0d7de583a39f  libbacktrace/stest.c
  f12cb902c3ab24d137099f0db9e260a9  libbacktrace/test_format.c
  18c308f65a94786fb63f3f5d50d98552  libbacktrace/testlib.c
  d8d1bc377aa497a217f38aad204fd050  libbacktrace/testlib.h
  886b918a82080f85c7ca29ba3fe03708  libbacktrace/ttest.c
  8f0d571ffa42ffdc43776bebe5d56ef2  libbacktrace/unittest.c
! be492d9e9d7bbbd81084cccf15019b82  libbacktrace/unknown.c
! 035cd11dc94f5248d9cfdd1d64c4bf1b  libbacktrace/xcoff.c
  04137bad794f9bfb1236039f63227eef  libbacktrace/xztest.c
  eeca8e2df01fdc9fa455f2c703d1acee  libbacktrace/zstdtest.c
  ace1e49933e01dd308790e101ff593e2  libbacktrace/ztest.c
*************** fc49680d0c6e77e437523ea496a6b8c4  libga6
*** 133589,133597 ****
  095aff369c31681c96b933fbedd8e05f  libga68/posix.a68
  b0d017b83148520411f1c1ebdbf28b58  libga68/sppp.awk
  4ad0dcaa2eb0b81efb58d47400b0933d  libga68/standard.a68.in
! 2ed5df80c58f1b1fe212b2b892eb1e8b  libgcc/ChangeLog
  6926dcea143d4f6166d7feff9e8ee35a  libgcc/Makefile.in
! 229424d0e39b7ca6486e3f691d3d6c91  libgcc/config.host
  46412830a2ee8a02503ccc921912c3cf  libgcc/config.in
  453dd2d1f5f7e9b0683ae1c960ef7eac  libgcc/config/aarch64/__aarch64_have_sme.c
  aee2000eefb98b188a6cd051fd4e1e72  libgcc/config/aarch64/__arm_get_current_vg.S
--- 133755,133763 ----
  095aff369c31681c96b933fbedd8e05f  libga68/posix.a68
  b0d017b83148520411f1c1ebdbf28b58  libga68/sppp.awk
  4ad0dcaa2eb0b81efb58d47400b0933d  libga68/standard.a68.in
! 952359aa6a400189fe5d18b035e8b888  libgcc/ChangeLog
  6926dcea143d4f6166d7feff9e8ee35a  libgcc/Makefile.in
! 2784b3778636af2fb69b003fd8743e11  libgcc/config.host
  46412830a2ee8a02503ccc921912c3cf  libgcc/config.in
  453dd2d1f5f7e9b0683ae1c960ef7eac  libgcc/config/aarch64/__aarch64_have_sme.c
  aee2000eefb98b188a6cd051fd4e1e72  libgcc/config/aarch64/__arm_get_current_vg.S
*************** dad7fcdc3017bd6d379a2a8cffddfbb5  libgcc
*** 133734,133743 ****
  a2cbfeed5ac41bd10f73aa701e9ac26d  libgcc/config/arm/unwind-arm-vxworks.c
  2afcadf0f0c3f05077a78caa5a26af99  libgcc/config/arm/unwind-arm.c
  d1bc698652ed847a9a315e51f8dfecc1  libgcc/config/arm/unwind-arm.h
! 6406279037feb4c63865032dbce26084  libgcc/config/avr/asm-defs.h
  16da8ddeeb0393a8a09e4b1d871d728a  libgcc/config/avr/avr-lib.h
! 474ae851b65fdeeac669ca5fe93e1fd0  libgcc/config/avr/lib1funcs-fixed.S
! 95293e26c6315a1abbf95359c6410a1f  libgcc/config/avr/lib1funcs.S
  622f81485f02d0eac2caaafa7d3a2fd1  libgcc/config/avr/lib2-object.mk
  c7a08febc167bf9a84c28593ca627617  libgcc/config/avr/lib2funcs.c
  122bbba7b2f0ed4283449af510301a17  libgcc/config/avr/libf7/ChangeLog
--- 133900,133909 ----
  a2cbfeed5ac41bd10f73aa701e9ac26d  libgcc/config/arm/unwind-arm-vxworks.c
  2afcadf0f0c3f05077a78caa5a26af99  libgcc/config/arm/unwind-arm.c
  d1bc698652ed847a9a315e51f8dfecc1  libgcc/config/arm/unwind-arm.h
! 3436c84302ea207c268a88e7d0091761  libgcc/config/avr/asm-defs.h
  16da8ddeeb0393a8a09e4b1d871d728a  libgcc/config/avr/avr-lib.h
! 65f546cc8c0076394a8bc56d205dfe60  libgcc/config/avr/lib1funcs-fixed.S
! 86e2bb3b316853162e87882fa3d32ea5  libgcc/config/avr/lib1funcs.S
  622f81485f02d0eac2caaafa7d3a2fd1  libgcc/config/avr/lib2-object.mk
  c7a08febc167bf9a84c28593ca627617  libgcc/config/avr/lib2funcs.c
  122bbba7b2f0ed4283449af510301a17  libgcc/config/avr/libf7/ChangeLog
*************** badb073cfbf15031442110b1cfaeab5f  libgcc
*** 133758,133764 ****
  2921a86fef727ada45668b8c0f091e33  libgcc/config/avr/libf7/t-libf7
  bf9360cfc14e0b0129af5560893f374e  libgcc/config/avr/libf7/t-libf7-math
  761826027ebb1cfbb089d23904494606  libgcc/config/avr/libf7/t-libf7-math-symbols
! bafae17b5d2413fa5abeb0be76fd62ca  libgcc/config/avr/t-avr
  42e21fd8b00be58d09a62b8654a8ba20  libgcc/config/avr/t-avrlibc
  77d29be9a46b600293b32c93c09dacbf  libgcc/config/avr/t-copy-libgcc
  a2c28c9fd8e63f29ab5a369ef41e8b3b  libgcc/config/bfin/crti.S
--- 133924,133930 ----
  2921a86fef727ada45668b8c0f091e33  libgcc/config/avr/libf7/t-libf7
  bf9360cfc14e0b0129af5560893f374e  libgcc/config/avr/libf7/t-libf7-math
  761826027ebb1cfbb089d23904494606  libgcc/config/avr/libf7/t-libf7-math-symbols
! 48fa8a9bf32b898dbdab0967f3fed38c  libgcc/config/avr/t-avr
  42e21fd8b00be58d09a62b8654a8ba20  libgcc/config/avr/t-avrlibc
  77d29be9a46b600293b32c93c09dacbf  libgcc/config/avr/t-copy-libgcc
  a2c28c9fd8e63f29ab5a369ef41e8b3b  libgcc/config/bfin/crti.S
*************** d820380e8f0e706ecb940aa6bd3430b6  libgcc
*** 134777,134789 ****
  eb8c88f2a2dc84128599645db8f106d3  libgcc/config/rx/rx-abi.h
  da7bc70013c60be91cf9f085fed52f1a  libgcc/config/rx/rx-lib.h
  0be6cfdd32c91fdfd53e4e590b21d32b  libgcc/config/rx/t-rx
- da4583caf892ab676e6a243852b2983e  libgcc/config/s390/32/_fixdfdi.c
- a9287ad6b7fdfb20ff33210a47225c5c  libgcc/config/s390/32/_fixsfdi.c
- 3f60b01be997cbb7ccdb85421107b7a4  libgcc/config/s390/32/_fixtfdi.c
- 8fdb07fa02c7693bb79243f95e544531  libgcc/config/s390/32/_fixunsdfdi.c
- 5defb1b495fb879f9cf2caa04dd984c4  libgcc/config/s390/32/_fixunssfdi.c
- fd70b3c9f0caf175f5e2f1321b478aa3  libgcc/config/s390/32/_fixunstfdi.c
- 6101649604e2b3fdd6179e1aa53066bf  libgcc/config/s390/32/t-floattodi
  8ab7e1ebe8eecf3039ed500965fbc901  libgcc/config/s390/_dpd_dd_to_hf.c
  059ae505b5f6fe229f83bcd90ad6cb6e  libgcc/config/s390/_dpd_hf_to_dd.c
  36dae53ac8e8b37ee6b5dea385d4a4e6  libgcc/config/s390/_dpd_hf_to_sd.c
--- 134943,134948 ----
*************** f2f887c98a90e240096bd5c7d9073820  libgcc
*** 134791,134801 ****
  73fe14c571f67378a5a7f1a6fd7e68bc  libgcc/config/s390/_dpd_sd_to_hf.c
  ff1ad91822a4ed7441b0ae894f5f6cf4  libgcc/config/s390/_dpd_td_to_hf.c
  35e2a29d0b5449790b3d6bf986a3219b  libgcc/config/s390/gthr-tpf.h
! fb117289ee8148eccf8fca824a5afebd  libgcc/config/s390/libgcc-glibc.ver
  b9d76026e9b4a32ec5abeea952e67920  libgcc/config/s390/linux-unwind.h
! d2ecaafa0415f409b5cf3fe193aa01fc  libgcc/config/s390/morestack.S
  0b9515e3a218241a90278da06fa8c3d8  libgcc/config/s390/sfp-exceptions.c
! ca9e2d051c98251181478b44ec2d0541  libgcc/config/s390/sfp-machine.h
  c150e28c734710584eba8e77d2ff5105  libgcc/config/s390/t-crtstuff
  1a60eb262e18463fd779de57ffec3634  libgcc/config/s390/t-float16
  35a77f8c50ecf16802e00e647ad94026  libgcc/config/s390/t-linux
--- 134950,134960 ----
  73fe14c571f67378a5a7f1a6fd7e68bc  libgcc/config/s390/_dpd_sd_to_hf.c
  ff1ad91822a4ed7441b0ae894f5f6cf4  libgcc/config/s390/_dpd_td_to_hf.c
  35e2a29d0b5449790b3d6bf986a3219b  libgcc/config/s390/gthr-tpf.h
! 5eecfa64899b5206ba3af2eb8bd0a4d6  libgcc/config/s390/libgcc-glibc.ver
  b9d76026e9b4a32ec5abeea952e67920  libgcc/config/s390/linux-unwind.h
! 59d49c327c715f4de2adcdaf6c21d4cc  libgcc/config/s390/morestack.S
  0b9515e3a218241a90278da06fa8c3d8  libgcc/config/s390/sfp-exceptions.c
! 4c71c708c84ea9080d89ed00a51c32b2  libgcc/config/s390/sfp-machine.h
  c150e28c734710584eba8e77d2ff5105  libgcc/config/s390/t-crtstuff
  1a60eb262e18463fd779de57ffec3634  libgcc/config/s390/t-float16
  35a77f8c50ecf16802e00e647ad94026  libgcc/config/s390/t-linux
*************** ce614fa17d52c2d7121d7e2d6f80b02d  libgcc
*** 134942,134949 ****
  3887e891f6c35841fabbfe9a8edfdb6a  libgcc/config/xtensa/unwind-dw2-xtensa.c
  f0d00382ed17e7f222caffb11bcfa0d7  libgcc/config/xtensa/unwind-dw2-xtensa.h
  7ab9e3e4b42feb0139bf1fa67e0bfe36  libgcc/config/xtensa/xtensa-config-builtin.h
! 7fee1b3dd5b087ae187503e683f0c7e7  libgcc/configure
! 698ff0478b6033f785225d68e14e3066  libgcc/configure.ac
  a5267c42def0d7d222389e49a1f25937  libgcc/crtstuff.c
  93a24cef6f5e41c4aef0e0909cb4b9e4  libgcc/dfp-bit.c
  8cfa5184dd2b0f09bbfb9f387c946c3b  libgcc/dfp-bit.h
--- 135101,135108 ----
  3887e891f6c35841fabbfe9a8edfdb6a  libgcc/config/xtensa/unwind-dw2-xtensa.c
  f0d00382ed17e7f222caffb11bcfa0d7  libgcc/config/xtensa/unwind-dw2-xtensa.h
  7ab9e3e4b42feb0139bf1fa67e0bfe36  libgcc/config/xtensa/xtensa-config-builtin.h
! 206a057db4cc0ef8c603c6e9456a6e55  libgcc/configure
! c875364428d7053907375970f2ef2dee  libgcc/configure.ac
  a5267c42def0d7d222389e49a1f25937  libgcc/crtstuff.c
  93a24cef6f5e41c4aef0e0909cb4b9e4  libgcc/dfp-bit.c
  8cfa5184dd2b0f09bbfb9f387c946c3b  libgcc/dfp-bit.h
*************** faedd2248586a9d50451e03d502eb147  libgcc
*** 134965,134971 ****
  51b9eeca9e171ea1ad289eba008c2356  libgcc/gcov.h
  c7b70dcc1f2024624fcba54a60ffcdda  libgcc/gen-fixed.sh
  3e3f0ab4fd877783aa7679eb406bee1c  libgcc/generic-morestack-thread.c
! 0260c3eff3ff6deba05c5265bcfc10af  libgcc/generic-morestack.c
  2d17f5c92e8af92b2abaa08e5c3651d2  libgcc/generic-morestack.h
  971ff834e82a1a1964a019bfdac21c5c  libgcc/gstdint.h
  4a535e31ee01c5ecc8ad90aeec393233  libgcc/gthr-posix.h
--- 135124,135130 ----
  51b9eeca9e171ea1ad289eba008c2356  libgcc/gcov.h
  c7b70dcc1f2024624fcba54a60ffcdda  libgcc/gen-fixed.sh
  3e3f0ab4fd877783aa7679eb406bee1c  libgcc/generic-morestack-thread.c
! c9268a49df000c23252a3479d9542230  libgcc/generic-morestack.c
  2d17f5c92e8af92b2abaa08e5c3651d2  libgcc/generic-morestack.h
  971ff834e82a1a1964a019bfdac21c5c  libgcc/gstdint.h
  4a535e31ee01c5ecc8ad90aeec393233  libgcc/gthr-posix.h
*************** b7bdc64c03d62f87f61d3d8a61a75d2d  libgcc
*** 135170,135184 ****
  227525d7193394128a83ce15e7642842  libgcc/vtv_start.c
  23ad2a8d256ba5dca28382d64a20e8f2  libgcc/vtv_start_preinit.c
  e50c29294062dfe571c9c053a8ec217b  libgcobol/.gitignore
! be285d0b51c458e642e1d795dcb6e4a3  libgcobol/ChangeLog
  bec1e79fc8ada70ed4ac3dc61a33d576  libgcobol/LICENSE
  8b9a5263fc79d367bdafa609a2ac1363  libgcobol/Makefile.am
  d97f1f2b9efb3a8fa8c9db9a04ea78db  libgcobol/Makefile.in
  b0657c8d818882b87c44a17db46300df  libgcobol/README
  a69c3f28d1be90eb0b0287fa450c3684  libgcobol/acinclude.m4
  916ce15e68376e661a41f183252a74ec  libgcobol/aclocal.m4
! 1a36387a9e52a001f44000ab03cfe817  libgcobol/charmaps.cc
! 18e7fd26c059e1f9514add6c94c67059  libgcobol/charmaps.h
  94c48aaa30cd3785160dfbdf56b68d0a  libgcobol/common-defs.h
  fba8f609927b913d1ca3d30a27d0febc  libgcobol/compat/README.md
  69fc231dbe0ada7d183b3b115faee461  libgcobol/compat/gnu/cpy/cblproto.cpy
--- 135329,135344 ----
  227525d7193394128a83ce15e7642842  libgcc/vtv_start.c
  23ad2a8d256ba5dca28382d64a20e8f2  libgcc/vtv_start_preinit.c
  e50c29294062dfe571c9c053a8ec217b  libgcobol/.gitignore
! 63956999049c7a5b81be5b69f63210fe  libgcobol/ChangeLog
  bec1e79fc8ada70ed4ac3dc61a33d576  libgcobol/LICENSE
  8b9a5263fc79d367bdafa609a2ac1363  libgcobol/Makefile.am
  d97f1f2b9efb3a8fa8c9db9a04ea78db  libgcobol/Makefile.in
  b0657c8d818882b87c44a17db46300df  libgcobol/README
  a69c3f28d1be90eb0b0287fa450c3684  libgcobol/acinclude.m4
  916ce15e68376e661a41f183252a74ec  libgcobol/aclocal.m4
! 25a2c096c350f42299b74a614e669690  libgcobol/charmaps.cc
! 30d346da69645e3402cf3f6a1a6043c3  libgcobol/charmaps.h
! c6f3fa55b7a75f8923a1121bea070575  libgcobol/cobol-endian.h
  94c48aaa30cd3785160dfbdf56b68d0a  libgcobol/common-defs.h
  fba8f609927b913d1ca3d30a27d0febc  libgcobol/compat/README.md
  69fc231dbe0ada7d183b3b115faee461  libgcobol/compat/gnu/cpy/cblproto.cpy
*************** a5821ed24abf64b452f15f29da418d17  libgco
*** 135216,135232 ****
  0fbbb7014a9f8ebc82c4fd8130f54774  libgcobol/encodings.h
  44aa23a1baad26222e629bf8cf03a357  libgcobol/exceptl.h
  649e793ce5ae15bd0f3dd1fe2ecfbea9  libgcobol/gcobolio.h
! 882856d895b686fc355b61771cada120  libgcobol/gfileio.cc
  0ae92e32a618fa39e3ff18a50cbfff17  libgcobol/gfileio.h
! 72c63fe79b2bdb5311dfa07fb32c9bcc  libgcobol/gmath.cc
  484b264b1c8d844ef5989f4d7075f520  libgcobol/gmath.h
! 85dd497f2ca6afe8d2440211eaf37ec6  libgcobol/inspect.cc
! 8e756bd6d6fe25a0f758f96daa9d31e2  libgcobol/intrinsic.cc
! 16dfd5dc1d9f83d11546c8d442151225  libgcobol/io.cc
  fbd32f035f7b4e73896b3d489e50e747  libgcobol/io.h
  39a9dbab64d7e5acec671784d7ca4cde  libgcobol/libgcobol-fp.h
! 2b7aa112175786e5c6cf7f7f339bc38d  libgcobol/libgcobol.cc
! 8a5ee2382d4a52f09cae86593887d210  libgcobol/libgcobol.h
  469e0f6e21e357ff8b53b9d17373a6c8  libgcobol/libgcobol.spec.in
  88c1134ff3ee63c326541ce3f35f6699  libgcobol/m4/autoconf.m4
  96b721e88c5f79776cedad463373ad78  libgcobol/posix/README.md
--- 135376,135392 ----
  0fbbb7014a9f8ebc82c4fd8130f54774  libgcobol/encodings.h
  44aa23a1baad26222e629bf8cf03a357  libgcobol/exceptl.h
  649e793ce5ae15bd0f3dd1fe2ecfbea9  libgcobol/gcobolio.h
! 0b68efe9e64e86726c8c0c4284da0852  libgcobol/gfileio.cc
  0ae92e32a618fa39e3ff18a50cbfff17  libgcobol/gfileio.h
! 2f25f550572b378a77867a149ca433e2  libgcobol/gmath.cc
  484b264b1c8d844ef5989f4d7075f520  libgcobol/gmath.h
! dcabaaf6ddd04cde5f6c45ec26776470  libgcobol/inspect.cc
! 9140485ed69b7e3b01329d2166a1d04d  libgcobol/intrinsic.cc
! 3e61c85524aa03d6d0f23aa8dfa8152c  libgcobol/io.cc
  fbd32f035f7b4e73896b3d489e50e747  libgcobol/io.h
  39a9dbab64d7e5acec671784d7ca4cde  libgcobol/libgcobol-fp.h
! 955502594caec4dbff60e838728ae67a  libgcobol/libgcobol.cc
! 4413f7e166cc8e47d86e48a3abf4a0bd  libgcobol/libgcobol.h
  469e0f6e21e357ff8b53b9d17373a6c8  libgcobol/libgcobol.spec.in
  88c1134ff3ee63c326541ce3f35f6699  libgcobol/m4/autoconf.m4
  96b721e88c5f79776cedad463373ad78  libgcobol/posix/README.md
*************** fa11a6e56c666d0f6aed79e8a76ee830  libgco
*** 135279,135290 ****
  859336a5b2670d1679e68d9e00bec381  libgcobol/posix/udf/posix-stat.cbl
  9c2b0ac9c647bc3a9b65244797bb88d7  libgcobol/posix/udf/posix-unlink.cbl
  f7f3ede57639856878087542116a625d  libgcobol/posix/udf/posix-write.cbl
! cbd083ee865e62b38cc23ffc179b2efb  libgcobol/stringbin.cc
! f49aafcc21e24a1ea3753658ab5250a9  libgcobol/stringbin.h
! d77d00934ab6b213d8c526ae0673969c  libgcobol/valconv.cc
  3466db9e6fc5748c08c947e71a566c07  libgcobol/valconv.h
  8485adf73f6988a83d317bb42594aa15  libgcobol/xmlparse.cc
! 20d35eb06b4aab62a01ab08b1dcf8c44  libgfortran/ChangeLog
  d99469a76bfe825683f8d94fe07b508c  libgfortran/ChangeLog-2002
  522fdb2df6cefe6bcaed3c7c7311eae1  libgfortran/ChangeLog-2003
  5a3a93e76d878d063aba66079340cfe0  libgfortran/ChangeLog-2004
--- 135439,135450 ----
  859336a5b2670d1679e68d9e00bec381  libgcobol/posix/udf/posix-stat.cbl
  9c2b0ac9c647bc3a9b65244797bb88d7  libgcobol/posix/udf/posix-unlink.cbl
  f7f3ede57639856878087542116a625d  libgcobol/posix/udf/posix-write.cbl
! 5e28d0b3d3acd31b24a4c3bdaac8d346  libgcobol/stringbin.cc
! 52ce4fc545bb5fe44f0fbc9b887fada7  libgcobol/stringbin.h
! 72f6d694311f4eb82bd18968a55dfc0f  libgcobol/valconv.cc
  3466db9e6fc5748c08c947e71a566c07  libgcobol/valconv.h
  8485adf73f6988a83d317bb42594aa15  libgcobol/xmlparse.cc
! ed48aa499bf3a5819d5f1b053ecbdbb0  libgfortran/ChangeLog
  d99469a76bfe825683f8d94fe07b508c  libgfortran/ChangeLog-2002
  522fdb2df6cefe6bcaed3c7c7311eae1  libgfortran/ChangeLog-2003
  5a3a93e76d878d063aba66079340cfe0  libgfortran/ChangeLog-2004
*************** aa424ddf6a9e4e08b8023d3d5b371a0d  libgfo
*** 135310,135317 ****
  09537a69736f655d1e0ccf28367d3ddf  libgfortran/ChangeLog-2024
  a1bbe79151b753b8b25205a178953376  libgfortran/ChangeLog-2025
  7a9dd3c91b585f18a8d8a30c6e60d98f  libgfortran/ISO_Fortran_binding.h
! 7cbace53ae182714e1886f1b5a55cae3  libgfortran/Makefile.am
! 56822f371af0a90781525ea4df867290  libgfortran/Makefile.in
  3879d8dc995bf27be4ecc7d20e919051  libgfortran/acinclude.m4
  d6bbf0d0b277cee1255f31f38d6cd5fb  libgfortran/aclocal.m4
  6d4f5918ea5082a0bc3b9bbe3455b876  libgfortran/c99_protos.h
--- 135470,135477 ----
  09537a69736f655d1e0ccf28367d3ddf  libgfortran/ChangeLog-2024
  a1bbe79151b753b8b25205a178953376  libgfortran/ChangeLog-2025
  7a9dd3c91b585f18a8d8a30c6e60d98f  libgfortran/ISO_Fortran_binding.h
! b11b84a677caab738db045922e35c29b  libgfortran/Makefile.am
! 407ec5eeee573889c8619e7c33db4c4b  libgfortran/Makefile.in
  3879d8dc995bf27be4ecc7d20e919051  libgfortran/acinclude.m4
  d6bbf0d0b277cee1255f31f38d6cd5fb  libgfortran/aclocal.m4
  6d4f5918ea5082a0bc3b9bbe3455b876  libgfortran/c99_protos.h
*************** dd71507c0f33fcbad63e92c89f62526d  libgfo
*** 136143,136149 ****
  7defb71e6422bd7d808f8f11f07b254c  libgfortran/generated/unpack_r17.c
  70b608e1cae7dea3a5460744ec08fffb  libgfortran/generated/unpack_r4.c
  cd7676a051ca08e9686f5818826bee57  libgfortran/generated/unpack_r8.c
! 986f41ec15bd059f568724e6295dc8e6  libgfortran/gfortran.map
  411bfc7d6e64aa5a6d7ef03e7b743dcc  libgfortran/ieee/ieee_arithmetic.F90
  caba33bea39fbaa4b7bef6cc969ae10f  libgfortran/ieee/ieee_exceptions.F90
  38cc57b3d853fa603fb331591aead84a  libgfortran/ieee/ieee_features.F90
--- 136303,136309 ----
  7defb71e6422bd7d808f8f11f07b254c  libgfortran/generated/unpack_r17.c
  70b608e1cae7dea3a5460744ec08fffb  libgfortran/generated/unpack_r4.c
  cd7676a051ca08e9686f5818826bee57  libgfortran/generated/unpack_r8.c
! 56b9a5f1a3a4ba6b2bd5d1e3d6b3f9d2  libgfortran/gfortran.map
  411bfc7d6e64aa5a6d7ef03e7b743dcc  libgfortran/ieee/ieee_arithmetic.F90
  caba33bea39fbaa4b7bef6cc969ae10f  libgfortran/ieee/ieee_exceptions.F90
  38cc57b3d853fa603fb331591aead84a  libgfortran/ieee/ieee_features.F90
*************** a1c61999c9b91803f586503559199a42  libgfo
*** 136212,136217 ****
--- 136372,136378 ----
  cdd10b2f69a82610444a2522ebd110e0  libgfortran/intrinsics/trigd.c
  299e8e94cf833be84eb71d93a7b02c69  libgfortran/intrinsics/trigd.inc
  04c94be9f886e1e44ea2ea2184d5968a  libgfortran/intrinsics/trigd_lib.inc
+ 194175c188991f8ed4d47a9eee6442df  libgfortran/intrinsics/trigd_specific.F90
  42db9c3421a25a78d54f2a058f4917e1  libgfortran/intrinsics/umask.c
  4681a0cf5cfd7e0f18fbc29a4e82b1db  libgfortran/intrinsics/unlink.c
  cec32999db8b4e87719bd32022b37c61  libgfortran/intrinsics/unpack_generic.c
*************** dd973d8040e0630939ee22b69ae43002  libgfo
*** 136225,136231 ****
  73d01474fc7e12ff7cd21c2c920a6638  libgfortran/io/format.h
  3d6bdfad19038c8e5794b4f1d39dc010  libgfortran/io/inquire.c
  86f78d0a8d7fd3418de9e9f9a1cb384f  libgfortran/io/intrinsics.c
! a2f65c26aecd11bf2d28164967bcf9dc  libgfortran/io/io.h
  a7f1f84c3d85c67f583fa6c7674fdd06  libgfortran/io/list_read.c
  908721400434528de210b0cbef37f603  libgfortran/io/lock.c
  601d86fd12148a4342e1ca9c4905714d  libgfortran/io/open.c
--- 136386,136392 ----
  73d01474fc7e12ff7cd21c2c920a6638  libgfortran/io/format.h
  3d6bdfad19038c8e5794b4f1d39dc010  libgfortran/io/inquire.c
  86f78d0a8d7fd3418de9e9f9a1cb384f  libgfortran/io/intrinsics.c
! 881d629188d9571bf02f154c40ee1bdc  libgfortran/io/io.h
  a7f1f84c3d85c67f583fa6c7674fdd06  libgfortran/io/list_read.c
  908721400434528de210b0cbef37f603  libgfortran/io/lock.c
  601d86fd12148a4342e1ca9c4905714d  libgfortran/io/open.c
*************** a7f1f84c3d85c67f583fa6c7674fdd06  libgfo
*** 136233,136239 ****
  4d71c600a702cb37b041c18304734191  libgfortran/io/size_from_kind.c
  e576991d7c7b08d89f87f41afb9590d0  libgfortran/io/transfer.c
  be377468666649cbd953626596944272  libgfortran/io/transfer128.c
! 6b4c699c45d7572e14c3e15d974a752a  libgfortran/io/unit.c
  f10c0db103b5f89684041aff43553d3d  libgfortran/io/unix.c
  f460ce66bb06770e24fc348ce57dcea7  libgfortran/io/unix.h
  4092613d079ce7160a7ce3e52722bf1e  libgfortran/io/write.c
--- 136394,136400 ----
  4d71c600a702cb37b041c18304734191  libgfortran/io/size_from_kind.c
  e576991d7c7b08d89f87f41afb9590d0  libgfortran/io/transfer.c
  be377468666649cbd953626596944272  libgfortran/io/transfer128.c
! 5bc7ea60cf122271c60a2f8e4c8faac5  libgfortran/io/unit.c
  f10c0db103b5f89684041aff43553d3d  libgfortran/io/unix.c
  f460ce66bb06770e24fc348ce57dcea7  libgfortran/io/unix.h
  4092613d079ce7160a7ce3e52722bf1e  libgfortran/io/write.c
*************** c04e4e4d264af0c1d4e39e88a93d6258  libgfo
*** 136335,136341 ****
  ac9900506f66729b67b81e0404c39eb1  libgfortran/runtime/select_inc.c
  fdc5bc5ac9f0f6c3348f4f076be6db95  libgfortran/runtime/stop.c
  48bdb4b17463d0fcaca2653d6e84ddaf  libgfortran/runtime/string.c
! a95cf0fdf8e91508c4d6db8cd3f014b8  libgm2/ChangeLog
  81dadb03add7a7278a98cd845177e76a  libgm2/Makefile.am
  f26132364738756eeee0acf44fb5aadf  libgm2/Makefile.in
  cc0e852d9771f65adf2905912e55f880  libgm2/acinclude.m4
--- 136496,136502 ----
  ac9900506f66729b67b81e0404c39eb1  libgfortran/runtime/select_inc.c
  fdc5bc5ac9f0f6c3348f4f076be6db95  libgfortran/runtime/stop.c
  48bdb4b17463d0fcaca2653d6e84ddaf  libgfortran/runtime/string.c
! 7b1ac9970a6b81f028f940c6f102b18a  libgm2/ChangeLog
  81dadb03add7a7278a98cd845177e76a  libgm2/Makefile.am
  f26132364738756eeee0acf44fb5aadf  libgm2/Makefile.in
  cc0e852d9771f65adf2905912e55f880  libgm2/acinclude.m4
*************** d4629d8a3f44bc8f1060e37d381418f6  libgm2
*** 136343,136349 ****
  ec51f8ac3552cbacd95bf08e21a6568a  libgm2/config.h.in
  78ec2b598118700ecb6c420bbfd644ff  libgm2/configure
  c96b91010e53cf611d2beda0416f19f4  libgm2/configure.ac
! b52a0b00feee9e93f7dc34a66027a39f  libgm2/configure.host
  2a25928a1abd3989edcf11c8def19d00  libgm2/libm2cor/KeyBoardLEDs.cc
  f25de03fc822c5eebf7118fcf5283ebc  libgm2/libm2cor/Makefile.am
  cfc25cb3101a1a8d7b997af2cb96ee97  libgm2/libm2cor/Makefile.in
--- 136504,136510 ----
  ec51f8ac3552cbacd95bf08e21a6568a  libgm2/config.h.in
  78ec2b598118700ecb6c420bbfd644ff  libgm2/configure
  c96b91010e53cf611d2beda0416f19f4  libgm2/configure.ac
! 452a5ac96f20a98b63f24d27a1643c9b  libgm2/configure.host
  2a25928a1abd3989edcf11c8def19d00  libgm2/libm2cor/KeyBoardLEDs.cc
  f25de03fc822c5eebf7118fcf5283ebc  libgm2/libm2cor/Makefile.am
  cfc25cb3101a1a8d7b997af2cb96ee97  libgm2/libm2cor/Makefile.in
*************** a3a7e9ca6057da9ca42e03e41e1c73f7  libgo/
*** 141872,141878 ****
  dcdf1b680b15b372bdb64cc5107d51b6  libgo/testsuite/libgo-test-support.exp.in
  bf162aa572f7b96b25dbd2b027845d32  libgo/testsuite/libgo.testmain/testmain.exp
  cc9d2a0e34e31ba866a8caf9f46f48f3  libgomp/.gitattributes
! 72d427a155c3a6911fa5a27499052cea  libgomp/ChangeLog
  0d55aa862aee66efdc5f8d62c94ff8fb  libgomp/ChangeLog.graphite
  e1d869816ce58d8fdc05a55313f8c194  libgomp/Makefile.am
  4da024f3aacefa7a1d2396c494ae6526  libgomp/Makefile.in
--- 142033,142039 ----
  dcdf1b680b15b372bdb64cc5107d51b6  libgo/testsuite/libgo-test-support.exp.in
  bf162aa572f7b96b25dbd2b027845d32  libgo/testsuite/libgo.testmain/testmain.exp
  cc9d2a0e34e31ba866a8caf9f46f48f3  libgomp/.gitattributes
! fb35c887c5e1b41690dc86378ace9065  libgomp/ChangeLog
  0d55aa862aee66efdc5f8d62c94ff8fb  libgomp/ChangeLog.graphite
  e1d869816ce58d8fdc05a55313f8c194  libgomp/Makefile.am
  4da024f3aacefa7a1d2396c494ae6526  libgomp/Makefile.in
*************** c447ed13e1d693f4b983b83ca2478aa8  libgom
*** 141926,141932 ****
  c4edbd7c2c1205e40ebb4fe0f1270559  libgomp/config/gcn/target.c
  55d3b1a161a020a1c6c18b3e41dd9420  libgomp/config/gcn/task.c
  8c261f3d46bea4a014a7dc403f84226a  libgomp/config/gcn/team.c
! 4b378d1e45ffdf29f9ca2f8a1a8b573d  libgomp/config/gcn/teams.c
  de27fe416c22021c880c3ef4d002aa91  libgomp/config/gcn/time.c
  7bff56f23fd667518b0ce11825f3a66b  libgomp/config/hpux/plugin-suffix.h
  7a0a6a6d5cb567d0de762d9dbe76d9be  libgomp/config/linux/affinity.c
--- 142087,142093 ----
  c4edbd7c2c1205e40ebb4fe0f1270559  libgomp/config/gcn/target.c
  55d3b1a161a020a1c6c18b3e41dd9420  libgomp/config/gcn/task.c
  8c261f3d46bea4a014a7dc403f84226a  libgomp/config/gcn/team.c
! fd4346a681746dfd044d855d5927c444  libgomp/config/gcn/teams.c
  de27fe416c22021c880c3ef4d002aa91  libgomp/config/gcn/time.c
  7bff56f23fd667518b0ce11825f3a66b  libgomp/config/hpux/plugin-suffix.h
  7a0a6a6d5cb567d0de762d9dbe76d9be  libgomp/config/linux/affinity.c
*************** ca14627edee8edaa51ae0d2606f17be4  libgom
*** 141972,141978 ****
  d4ef411ea34a5e21bbc28b10c1f3b9cf  libgomp/config/nvptx/target.c
  1ccc40324f0cdb57674db555b003e81d  libgomp/config/nvptx/task.c
  f3acd222abbaa3769c5ea50494029c42  libgomp/config/nvptx/team.c
! 6a2f12a09bf4819db6c48ee99a46a005  libgomp/config/nvptx/teams.c
  1e82aa2630626e511ff0d1341a76d2fb  libgomp/config/nvptx/time.c
  f71a2c1760df3cace4ad96cbc50e724c  libgomp/config/posix/bar.c
  b72c763edbd3bad13d1a4137ea03cf10  libgomp/config/posix/bar.h
--- 142133,142139 ----
  d4ef411ea34a5e21bbc28b10c1f3b9cf  libgomp/config/nvptx/target.c
  1ccc40324f0cdb57674db555b003e81d  libgomp/config/nvptx/task.c
  f3acd222abbaa3769c5ea50494029c42  libgomp/config/nvptx/team.c
! 6f9652aa612e4c359fb33ddd4199f84f  libgomp/config/nvptx/teams.c
  1e82aa2630626e511ff0d1341a76d2fb  libgomp/config/nvptx/time.c
  f71a2c1760df3cace4ad96cbc50e724c  libgomp/config/posix/bar.c
  b72c763edbd3bad13d1a4137ea03cf10  libgomp/config/posix/bar.h
*************** e40f7f1dbaf7de3643dec21493aed6b5  libgom
*** 142016,142028 ****
  e59f9d9c4947a5f7d4bdd011da890930  libgomp/libgomp-plugin.c
  5159bdd2c1f79b781dc70f618a9c8f34  libgomp/libgomp-plugin.h
  8ea87cdae5f8849f75c6e4c9e7a06439  libgomp/libgomp.h
! c227fce7002f7e0944869b5940e49fc8  libgomp/libgomp.map
  8b2aa50aecad82171348a6918309afd6  libgomp/libgomp.spec.in
! b7fa019d9bea4de0a9b979a11a262ebf  libgomp/libgomp.texi
  1d54928ce4032885323fb921fd1df788  libgomp/libgomp_f.h.in
! 3fe9ecb217c50929b3a00a144bd1b440  libgomp/libgomp_g.h
  26474764313104462f3252f8ce962c10  libgomp/lock.c
! 83ae93ed86e28412cd75aa493fe04885  libgomp/loop.c
  80446fe6cd6193819bea8853c8dcc525  libgomp/loop_ull.c
  806319a3f4077f3dfe6699ec2e9051c9  libgomp/numa.c
  6688bf57d8344fc3ab514e0ca98629a5  libgomp/oacc-async.c
--- 142177,142189 ----
  e59f9d9c4947a5f7d4bdd011da890930  libgomp/libgomp-plugin.c
  5159bdd2c1f79b781dc70f618a9c8f34  libgomp/libgomp-plugin.h
  8ea87cdae5f8849f75c6e4c9e7a06439  libgomp/libgomp.h
! 9e99459357a5d0014a2cdd7f32b0ccd1  libgomp/libgomp.map
  8b2aa50aecad82171348a6918309afd6  libgomp/libgomp.spec.in
! 28194ec1c033c6f64e62596ad60d0086  libgomp/libgomp.texi
  1d54928ce4032885323fb921fd1df788  libgomp/libgomp_f.h.in
! d1b10812b635c975811f56459dd67018  libgomp/libgomp_g.h
  26474764313104462f3252f8ce962c10  libgomp/lock.c
! 872219350d2f98cbe76a54c544d74a81  libgomp/loop.c
  80446fe6cd6193819bea8853c8dcc525  libgomp/loop_ull.c
  806319a3f4077f3dfe6699ec2e9051c9  libgomp/numa.c
  6688bf57d8344fc3ab514e0ca98629a5  libgomp/oacc-async.c
*************** b514e62ec1099b7683f3107c94615e99  libgom
*** 142043,142049 ****
  951da06c04766ca9e95dd4a2294b9b77  libgomp/openacc.h
  499db3818012abc0c973cf7887ad887b  libgomp/openacc_lib.h
  da2ae01cd3ee1b82927ed89b489413c4  libgomp/ordered.c
! 651856f2bfdb63d51dbae6fa0f30bbbd  libgomp/parallel.c
  a19fe470b125fddc580e5e0bbeee471d  libgomp/plugin/Makefrag.am
  1b94d027e28b8b7e6f38e326d8412459  libgomp/plugin/build-target-indirect-htab.h
  fab10af27c836c7b90303245f3965cb8  libgomp/plugin/configfrag.ac
--- 142204,142210 ----
  951da06c04766ca9e95dd4a2294b9b77  libgomp/openacc.h
  499db3818012abc0c973cf7887ad887b  libgomp/openacc_lib.h
  da2ae01cd3ee1b82927ed89b489413c4  libgomp/ordered.c
! f813b5b07fd46b494552fb262108b2b8  libgomp/parallel.c
  a19fe470b125fddc580e5e0bbeee471d  libgomp/plugin/Makefrag.am
  1b94d027e28b8b7e6f38e326d8412459  libgomp/plugin/build-target-indirect-htab.h
  fab10af27c836c7b90303245f3965cb8  libgomp/plugin/configfrag.ac
*************** c88620bad36f9c420348d0508bd4b346  libgom
*** 142057,142063 ****
  8bf8367c96a0d0ec9dbadd40492f39ca  libgomp/sections.c
  ed195dc04ac3e252f89029dee0bc9c05  libgomp/secure_getenv.h
  4c3303bbfa7c506556555bd8c33816df  libgomp/simple-allocator.c
! 12ec8b0f7c30499a3d3656fbdbe42300  libgomp/single.c
  80878b96d4a2653d45e47682a81cb8b2  libgomp/splay-tree.c
  bbb8b404de421c08a4468a7c149897e3  libgomp/splay-tree.h
  1775f6ebbed5a9aef1882e66136d9e2b  libgomp/target-cxa-dso-dtor.c
--- 142218,142224 ----
  8bf8367c96a0d0ec9dbadd40492f39ca  libgomp/sections.c
  ed195dc04ac3e252f89029dee0bc9c05  libgomp/secure_getenv.h
  4c3303bbfa7c506556555bd8c33816df  libgomp/simple-allocator.c
! 0e140a36377efc1b8e242cdde8c0d151  libgomp/single.c
  80878b96d4a2653d45e47682a81cb8b2  libgomp/splay-tree.c
  bbb8b404de421c08a4468a7c149897e3  libgomp/splay-tree.h
  1775f6ebbed5a9aef1882e66136d9e2b  libgomp/target-cxa-dso-dtor.c
*************** efc6f457ddec802a552a289c9f6cec1d  libgom
*** 142066,142072 ****
  9423c0473a15a8d13b93375561ef5058  libgomp/task.c
  7f9c7ebe470f1e58806b1136258bd786  libgomp/taskloop.c
  abb5e2202aa84d67c967b7dc176fc937  libgomp/team.c
! d4dbcf7aa478af80e0612b229077cd7c  libgomp/teams.c
  ae0dcb4c08025996b4bf4550cf72832e  libgomp/testsuite/Makefile.am
  2c4f8874086e4e29d9e1638e65b409b3  libgomp/testsuite/Makefile.in
  4f0fd32ecaf8eb341fbaa1f46bfaf2a2  libgomp/testsuite/config/default.exp
--- 142227,142233 ----
  9423c0473a15a8d13b93375561ef5058  libgomp/task.c
  7f9c7ebe470f1e58806b1136258bd786  libgomp/taskloop.c
  abb5e2202aa84d67c967b7dc176fc937  libgomp/team.c
! 8247dfb9073a5bab4f94827621b96b02  libgomp/teams.c
  ae0dcb4c08025996b4bf4550cf72832e  libgomp/testsuite/Makefile.am
  2c4f8874086e4e29d9e1638e65b409b3  libgomp/testsuite/Makefile.in
  4f0fd32ecaf8eb341fbaa1f46bfaf2a2  libgomp/testsuite/config/default.exp
*************** fb8359839c9314ffa41831bcd16efb06  libgom
*** 142606,142611 ****
--- 142767,142776 ----
  ee0115a370a5b6a9e6990b3d15bdd431  libgomp/testsuite/libgomp.c-c++-common/for-7.c
  5b4d126628a41201baf8653fe10a5d94  libgomp/testsuite/libgomp.c-c++-common/for-8.c
  14ac121f9dbf4675cb527a13f401e0c6  libgomp/testsuite/libgomp.c-c++-common/for-9.c
+ e9d16978781d5a6bb09d992e31a71f82  libgomp/testsuite/libgomp.c-c++-common/for-static-1.c
+ 427aec3091596e79a785168dfa374671  libgomp/testsuite/libgomp.c-c++-common/for-static-2.c
+ fd8af5bac0ba4943882ddb71ea84daab  libgomp/testsuite/libgomp.c-c++-common/for-static-3.c
+ a2dc6aeb34413f354719647b6254bd78  libgomp/testsuite/libgomp.c-c++-common/for-static.h
  38b84120e95c50bcbe995ff760fb2f46  libgomp/testsuite/libgomp.c-c++-common/function-not-offloaded-aux.c
  0a53af92f72022a91eded9bc193bc5c0  libgomp/testsuite/libgomp.c-c++-common/function-not-offloaded.c
  01b4d3feaccb2eb8d3e59343a0390b17  libgomp/testsuite/libgomp.c-c++-common/gcn-kernel-launch-no-tvt-alloc.c
*************** ee19f42594a2dbadbc455736a8e69944  libgom
*** 143125,143131 ****
  ee6acb3089ae16656715ede5acd4a769  libgomp/testsuite/libgomp.c/interop-hipblas-nvidia-no-hip-header.c
  73994b391db11a9fa8269d17021fc731  libgomp/testsuite/libgomp.c/interop-hipblas.h
  a312f0c1d775afad3261daee64966b25  libgomp/testsuite/libgomp.c/interop-hsa.c
! d2f54779778d4b9c23b17d235214afc6  libgomp/testsuite/libgomp.c/ipcp-cb-spec1.c
  01e92bf2afe709ab5d5aabf0410fa484  libgomp/testsuite/libgomp.c/ipcp-cb-spec2.c
  95f6c8613aa251d5def12c5b8ac78a94  libgomp/testsuite/libgomp.c/ipcp-cb1.c
  05a55b01beb419917b31560d862a3cad  libgomp/testsuite/libgomp.c/lib-1.c
--- 143290,143296 ----
  ee6acb3089ae16656715ede5acd4a769  libgomp/testsuite/libgomp.c/interop-hipblas-nvidia-no-hip-header.c
  73994b391db11a9fa8269d17021fc731  libgomp/testsuite/libgomp.c/interop-hipblas.h
  a312f0c1d775afad3261daee64966b25  libgomp/testsuite/libgomp.c/interop-hsa.c
! ccd110942c40ade1e600092db60e23f7  libgomp/testsuite/libgomp.c/ipcp-cb-spec1.c
  01e92bf2afe709ab5d5aabf0410fa484  libgomp/testsuite/libgomp.c/ipcp-cb-spec2.c
  95f6c8613aa251d5def12c5b8ac78a94  libgomp/testsuite/libgomp.c/ipcp-cb1.c
  05a55b01beb419917b31560d862a3cad  libgomp/testsuite/libgomp.c/lib-1.c
*************** e52d95644dc6f186070f349a5903ca72  libibe
*** 145716,145722 ****
  6f774a92661ca4a067f1691a7925524b  libiberty/xstrerror.c
  82039c5e76badca485d7ec27bf160ba4  libiberty/xstrndup.c
  2052196fd1de9a9efa8722031398f544  libiberty/xvasprintf.c
! cfee045530db3bfc00a57fabb18086d9  libitm/ChangeLog
  763fe82c2e5c5ae9547defb28107952a  libitm/Makefile.am
  4fb260790809cc0a691787692a7d2d92  libitm/Makefile.in
  86465895a9d654faded88bc3fa075117  libitm/aatree.cc
--- 145881,145887 ----
  6f774a92661ca4a067f1691a7925524b  libiberty/xstrerror.c
  82039c5e76badca485d7ec27bf160ba4  libiberty/xstrndup.c
  2052196fd1de9a9efa8722031398f544  libiberty/xvasprintf.c
! 84375862135859b06902c9f93a33fa8f  libitm/ChangeLog
  763fe82c2e5c5ae9547defb28107952a  libitm/Makefile.am
  4fb260790809cc0a691787692a7d2d92  libitm/Makefile.in
  86465895a9d654faded88bc3fa075117  libitm/aatree.cc
*************** fae9408bd410481614542cb6479b613b  libitm
*** 145763,145769 ****
  001834d6d7e6631e7b41cc3f063d8370  libitm/config/riscv/asm.h
  101279332017d342accee74c1c299361  libitm/config/riscv/sjlj.S
  dfad4321615f0f61a045831e4a4ba248  libitm/config/riscv/target.h
! 7f4e7d13494988dbdce892df8b095f0a  libitm/config/s390/sjlj.S
  02aa373269b013df346bfa89c478b546  libitm/config/s390/target.h
  120f6b0ecb280f04bb1ae2c217db7d75  libitm/config/sh/sjlj.S
  7102fe013391a015530bf8dcadbdee26  libitm/config/sh/target.h
--- 145928,145934 ----
  001834d6d7e6631e7b41cc3f063d8370  libitm/config/riscv/asm.h
  101279332017d342accee74c1c299361  libitm/config/riscv/sjlj.S
  dfad4321615f0f61a045831e4a4ba248  libitm/config/riscv/target.h
! 5f977220ad20c37b6df6959a203792c5  libitm/config/s390/sjlj.S
  02aa373269b013df346bfa89c478b546  libitm/config/s390/target.h
  120f6b0ecb280f04bb1ae2c217db7d75  libitm/config/sh/sjlj.S
  7102fe013391a015530bf8dcadbdee26  libitm/config/sh/target.h
*************** db97a70a62d75baf7c6133362b383ccb  libobj
*** 145882,145888 ****
  d1e7c7c92a4c08557a1274ac25bac6e2  libobjc/selector.c
  029b66bb69dc70e347fe3849fc60cfd3  libobjc/sendmsg.c
  e968027639cc91f736aa2aeaee56682c  libobjc/thr.c
! 3dba63427c4f440a902f353661899777  libphobos/ChangeLog
  958562279744f77373a0c5c9dc43b414  libphobos/Makefile.am
  a4ee57d4fc32508060fff33b4fc4f976  libphobos/Makefile.in
  ee88c20a7744a2305503e1670f3b7889  libphobos/README.gcc
--- 146047,146053 ----
  d1e7c7c92a4c08557a1274ac25bac6e2  libobjc/selector.c
  029b66bb69dc70e347fe3849fc60cfd3  libobjc/sendmsg.c
  e968027639cc91f736aa2aeaee56682c  libobjc/thr.c
! b5db45196d3692f14dc41bab33781260  libphobos/ChangeLog
  958562279744f77373a0c5c9dc43b414  libphobos/Makefile.am
  a4ee57d4fc32508060fff33b4fc4f976  libphobos/Makefile.in
  ee88c20a7744a2305503e1670f3b7889  libphobos/README.gcc
*************** e4224ccaecb14d942c71d31bef20d78c  libpho
*** 145901,145907 ****
  56bb01634c256cb5d65c7952ea1c4d67  libphobos/libdruntime/__main.di
  a36852e4bff4b656855a3664d2bc775d  libphobos/libdruntime/config/aarch64/switchcontext.S
  3c347376723731c44bb45f39e805b551  libphobos/libdruntime/config/arm/switchcontext.S
! e372bad328c3200e0b5c2e80aafaf8d2  libphobos/libdruntime/config/common/threadasm.S
  f4cc85e6f059c583d462bd54e79516c7  libphobos/libdruntime/config/loongarch/switchcontext.S
  efb3f0d13f8f48c433389bd9d23fa469  libphobos/libdruntime/config/mingw/msvc.c
  d34e2d2837cc5f3916ddd0a896bf0cdc  libphobos/libdruntime/config/mingw/switchcontext.S
--- 146066,146072 ----
  56bb01634c256cb5d65c7952ea1c4d67  libphobos/libdruntime/__main.di
  a36852e4bff4b656855a3664d2bc775d  libphobos/libdruntime/config/aarch64/switchcontext.S
  3c347376723731c44bb45f39e805b551  libphobos/libdruntime/config/arm/switchcontext.S
! df24f69e2ef503816c486a235ba8c69f  libphobos/libdruntime/config/common/threadasm.S
  f4cc85e6f059c583d462bd54e79516c7  libphobos/libdruntime/config/loongarch/switchcontext.S
  efb3f0d13f8f48c433389bd9d23fa469  libphobos/libdruntime/config/mingw/msvc.c
  d34e2d2837cc5f3916ddd0a896bf0cdc  libphobos/libdruntime/config/mingw/switchcontext.S
*************** a73d560a3ba317c5ad0a7919d87b4b6d  libssp
*** 147553,147559 ****
  7d75fa0d30318408fe4cd91d9cbe3ac7  libssp/vsnprintf-chk.c
  e9ff0f4bdd1be75a507480ed1267459d  libssp/vsprintf-chk.c
  9e2de2e1f20ab0ffa2201164de02824f  libstdc++-v3/.editorconfig
! fcd7a587dd6c6609c5dbef2933d38c3f  libstdc++-v3/ChangeLog
  7aa6c40440a44fcf5ec94c066160c2f8  libstdc++-v3/ChangeLog-1998
  7aff86600b6a1ed3fa87305075a92db0  libstdc++-v3/ChangeLog-1999
  a6f28e8fc9bb07696a9e068b439a3a87  libstdc++-v3/ChangeLog-2000
--- 147718,147724 ----
  7d75fa0d30318408fe4cd91d9cbe3ac7  libssp/vsnprintf-chk.c
  e9ff0f4bdd1be75a507480ed1267459d  libssp/vsprintf-chk.c
  9e2de2e1f20ab0ffa2201164de02824f  libstdc++-v3/.editorconfig
! a7f5bddcbd834419a481f77694861f83  libstdc++-v3/ChangeLog
  7aa6c40440a44fcf5ec94c066160c2f8  libstdc++-v3/ChangeLog-1998
  7aff86600b6a1ed3fa87305075a92db0  libstdc++-v3/ChangeLog-1999
  a6f28e8fc9bb07696a9e068b439a3a87  libstdc++-v3/ChangeLog-2000
*************** f7e6afd3479309813624b96ba52e9f11  libstd
*** 147620,147626 ****
  64c7ddb3ee44b0d3bc4a83995c1f0d96  libstdc++-v3/config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt
  5c4c38aeca254313c616b84337c937c3  libstdc++-v3/config/abi/pre/float128.ver
  d8fba4e72b3bac4b2fa939d9ec589c51  libstdc++-v3/config/abi/pre/gnu-versioned-namespace.ver
! 25fae1b670f3a8f2a42f4311bc475590  libstdc++-v3/config/abi/pre/gnu.ver
  b01f8da8f4373070847fe317fe8a546e  libstdc++-v3/config/abi/pre/none.ver
  a2a19bba90a6663d180d5d9f7b28b623  libstdc++-v3/config/allocator/malloc_allocator_base.h
  92afc718fea5d5748cbf18f969414917  libstdc++-v3/config/allocator/new_allocator_base.h
--- 147785,147791 ----
  64c7ddb3ee44b0d3bc4a83995c1f0d96  libstdc++-v3/config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt
  5c4c38aeca254313c616b84337c937c3  libstdc++-v3/config/abi/pre/float128.ver
  d8fba4e72b3bac4b2fa939d9ec589c51  libstdc++-v3/config/abi/pre/gnu-versioned-namespace.ver
! 38abad6ce1fa6139a3470c2e1895993f  libstdc++-v3/config/abi/pre/gnu.ver
  b01f8da8f4373070847fe317fe8a546e  libstdc++-v3/config/abi/pre/none.ver
  a2a19bba90a6663d180d5d9f7b28b623  libstdc++-v3/config/allocator/malloc_allocator_base.h
  92afc718fea5d5748cbf18f969414917  libstdc++-v3/config/allocator/new_allocator_base.h
*************** faf24ef1bfbf7953179f10e428a0c0da  libstd
*** 147665,147671 ****
  3e25d7f371691a3ae25c94e07233cb4a  libstdc++-v3/config/locale/generic/c_locale.h
  9b91ae35b733e7ae41f7a15f40e6eb05  libstdc++-v3/config/locale/generic/codecvt_members.cc
  610085184f4e74f18dd0fd2d6260abfc  libstdc++-v3/config/locale/generic/collate_members.cc
! dc6c49d4220911d62974445ef6330ff2  libstdc++-v3/config/locale/generic/ctype_members.cc
  508ad653a9a0e046e61e989be4e016d0  libstdc++-v3/config/locale/generic/messages_members.cc
  1de709a574001f89ac649d8f8c7c0349  libstdc++-v3/config/locale/generic/messages_members.h
  f1d0636ae23d86ef530870b7af26304f  libstdc++-v3/config/locale/generic/monetary_members.cc
--- 147830,147836 ----
  3e25d7f371691a3ae25c94e07233cb4a  libstdc++-v3/config/locale/generic/c_locale.h
  9b91ae35b733e7ae41f7a15f40e6eb05  libstdc++-v3/config/locale/generic/codecvt_members.cc
  610085184f4e74f18dd0fd2d6260abfc  libstdc++-v3/config/locale/generic/collate_members.cc
! 5697a0ac3bebe82fa792511b367a69e8  libstdc++-v3/config/locale/generic/ctype_members.cc
  508ad653a9a0e046e61e989be4e016d0  libstdc++-v3/config/locale/generic/messages_members.cc
  1de709a574001f89ac649d8f8c7c0349  libstdc++-v3/config/locale/generic/messages_members.h
  f1d0636ae23d86ef530870b7af26304f  libstdc++-v3/config/locale/generic/monetary_members.cc
*************** a3f907fa7f71dc9eb08755c9c438accc  libstd
*** 147781,147787 ****
  e8e7da2b87b17dcd2c2faadb8b5cd1ad  libstdc++-v3/config/os/vxworks/os_defines.h
  0a3e0c39cff2046f50d98471fd1988b7  libstdc++-v3/configure
  159707023fcf6084313b6d6e970be4b2  libstdc++-v3/configure.ac
! ac3c5c4c31f1e2c1f6e793bafb5f3931  libstdc++-v3/configure.host
  e9366e11a064aa5c3169c19d2164c799  libstdc++-v3/crossconfig.m4
  21e660b6ad1acb38a925de8aee375f12  libstdc++-v3/doc/Makefile.am
  015a7bc96be2528c79352941cf0f8da0  libstdc++-v3/doc/Makefile.in
--- 147946,147952 ----
  e8e7da2b87b17dcd2c2faadb8b5cd1ad  libstdc++-v3/config/os/vxworks/os_defines.h
  0a3e0c39cff2046f50d98471fd1988b7  libstdc++-v3/configure
  159707023fcf6084313b6d6e970be4b2  libstdc++-v3/configure.ac
! b033b430e0de6b3da2c1dfdfc0b4080c  libstdc++-v3/configure.host
  e9366e11a064aa5c3169c19d2164c799  libstdc++-v3/crossconfig.m4
  21e660b6ad1acb38a925de8aee375f12  libstdc++-v3/doc/Makefile.am
  015a7bc96be2528c79352941cf0f8da0  libstdc++-v3/doc/Makefile.in
*************** f9e306b8cee74f13390d2c91f994d69f  libstd
*** 148371,148381 ****
  eae71ddcefd0eda0b73f00439edf8ed4  libstdc++-v3/include/bits/stl_algo.h
  bb3f76482179ec4ebe183284d0d69874  libstdc++-v3/include/bits/stl_algobase.h
  93fb042c4fe4f9ba7e63ccbb7c5f3845  libstdc++-v3/include/bits/stl_bvector.h
! c53878727e94c56c0b362d17dfe0fca2  libstdc++-v3/include/bits/stl_construct.h
  3e4f6e814111cf95a66ca90d92f7cee6  libstdc++-v3/include/bits/stl_deque.h
  dad6f36c0bb9a2b5c5cfe42d6904e350  libstdc++-v3/include/bits/stl_function.h
  4af65d6cfcd3e9943b1da341c9fa26ad  libstdc++-v3/include/bits/stl_heap.h
! e3d170c870b27f010b65121977deb05f  libstdc++-v3/include/bits/stl_iterator.h
  e4fadcd5fca526cd53e83c472d606b4f  libstdc++-v3/include/bits/stl_iterator_base_funcs.h
  9ca5002544e6d43a87c20d3052b7348a  libstdc++-v3/include/bits/stl_iterator_base_types.h
  0b716dbdfa551e19bc190dc3329971b4  libstdc++-v3/include/bits/stl_list.h
--- 148536,148546 ----
  eae71ddcefd0eda0b73f00439edf8ed4  libstdc++-v3/include/bits/stl_algo.h
  bb3f76482179ec4ebe183284d0d69874  libstdc++-v3/include/bits/stl_algobase.h
  93fb042c4fe4f9ba7e63ccbb7c5f3845  libstdc++-v3/include/bits/stl_bvector.h
! dee57b6a88249dded126c87e67e24d82  libstdc++-v3/include/bits/stl_construct.h
  3e4f6e814111cf95a66ca90d92f7cee6  libstdc++-v3/include/bits/stl_deque.h
  dad6f36c0bb9a2b5c5cfe42d6904e350  libstdc++-v3/include/bits/stl_function.h
  4af65d6cfcd3e9943b1da341c9fa26ad  libstdc++-v3/include/bits/stl_heap.h
! 5bb92c950881ea1e58555eea3f491411  libstdc++-v3/include/bits/stl_iterator.h
  e4fadcd5fca526cd53e83c472d606b4f  libstdc++-v3/include/bits/stl_iterator_base_funcs.h
  9ca5002544e6d43a87c20d3052b7348a  libstdc++-v3/include/bits/stl_iterator_base_types.h
  0b716dbdfa551e19bc190dc3329971b4  libstdc++-v3/include/bits/stl_list.h
*************** c786caa278e3160f3daa8327ee1002a1  libstd
*** 148390,148396 ****
  3045fc424cd30d4b31742c2fc59e9825  libstdc++-v3/include/bits/stl_set.h
  2e947ba181d169443bd32dfa77c0e138  libstdc++-v3/include/bits/stl_stack.h
  1c29bd2c226486c0b4016828fd21d761  libstdc++-v3/include/bits/stl_tempbuf.h
! 5a7ae738df1c65c40473cbd89974f3fd  libstdc++-v3/include/bits/stl_tree.h
  6b5ebf261762096423606222edf5246e  libstdc++-v3/include/bits/stl_uninitialized.h
  5b5fe3133702ab5cc4dc814931795738  libstdc++-v3/include/bits/stl_vector.h
  2c7366439d5d5d987425f6e2434bb9f7  libstdc++-v3/include/bits/stream_iterator.h
--- 148555,148561 ----
  3045fc424cd30d4b31742c2fc59e9825  libstdc++-v3/include/bits/stl_set.h
  2e947ba181d169443bd32dfa77c0e138  libstdc++-v3/include/bits/stl_stack.h
  1c29bd2c226486c0b4016828fd21d761  libstdc++-v3/include/bits/stl_tempbuf.h
! 14ac2394f09eced3924bdf86b3305e35  libstdc++-v3/include/bits/stl_tree.h
  6b5ebf261762096423606222edf5246e  libstdc++-v3/include/bits/stl_uninitialized.h
  5b5fe3133702ab5cc4dc814931795738  libstdc++-v3/include/bits/stl_vector.h
  2c7366439d5d5d987425f6e2434bb9f7  libstdc++-v3/include/bits/stream_iterator.h
*************** ddd4bdc2fa29f8f2aa3386cead9ebcb2  libstd
*** 148416,148422 ****
  16c6db3f5b1e7b3e37c3febbf4dc4e8c  libstdc++-v3/include/bits/valarray_before.h
  dce382334795c24946cb8838e6fed9e5  libstdc++-v3/include/bits/vec_ops.h
  fe1be23d00db0d87529a75faf3afb98a  libstdc++-v3/include/bits/vector.tcc
! dee55d68bedeb08918f18ae95aebd9af  libstdc++-v3/include/bits/version.def
  058720e59b09c497a912ee429deee7e4  libstdc++-v3/include/bits/version.h
  07c6aeb4ce2629a1da2d63d08e65c0f8  libstdc++-v3/include/bits/version.tpl
  d99b1b69e5f87e5a631c8a881d053766  libstdc++-v3/include/c/cassert
--- 148581,148587 ----
  16c6db3f5b1e7b3e37c3febbf4dc4e8c  libstdc++-v3/include/bits/valarray_before.h
  dce382334795c24946cb8838e6fed9e5  libstdc++-v3/include/bits/vec_ops.h
  fe1be23d00db0d87529a75faf3afb98a  libstdc++-v3/include/bits/vector.tcc
! 5d9bd5987a4f7017d6f0279fe9b613a9  libstdc++-v3/include/bits/version.def
  058720e59b09c497a912ee429deee7e4  libstdc++-v3/include/bits/version.h
  07c6aeb4ce2629a1da2d63d08e65c0f8  libstdc++-v3/include/bits/version.tpl
  d99b1b69e5f87e5a631c8a881d053766  libstdc++-v3/include/c/cassert
*************** c64ab520b4f6639a904aff1b2898fe5d  libstd
*** 148985,148991 ****
  d1dc8325fc8c069a07bab71a935bced3  libstdc++-v3/include/std/filesystem
  5f6d1d543aa97204300a7a76284f8775  libstdc++-v3/include/std/flat_map
  c3b66598ccd8ea2009de9b04433b7dcf  libstdc++-v3/include/std/flat_set
! 14af52719f1a2256a34af2a26160d1b8  libstdc++-v3/include/std/format
  821d1dff1ce8d861767808c7c5eab838  libstdc++-v3/include/std/forward_list
  10ba06a4268328778f0feab5e3778f91  libstdc++-v3/include/std/fstream
  5907213253b81e40fd9101e5d092fc82  libstdc++-v3/include/std/functional
--- 149150,149156 ----
  d1dc8325fc8c069a07bab71a935bced3  libstdc++-v3/include/std/filesystem
  5f6d1d543aa97204300a7a76284f8775  libstdc++-v3/include/std/flat_map
  c3b66598ccd8ea2009de9b04433b7dcf  libstdc++-v3/include/std/flat_set
! b9be5ed2ce50a4b29ee72e3c2522887c  libstdc++-v3/include/std/format
  821d1dff1ce8d861767808c7c5eab838  libstdc++-v3/include/std/forward_list
  10ba06a4268328778f0feab5e3778f91  libstdc++-v3/include/std/fstream
  5907213253b81e40fd9101e5d092fc82  libstdc++-v3/include/std/functional
*************** ca0b85731f9c9d61a813d97c3286740e  libstd
*** 149003,149009 ****
  7fa0f238b96d8783fbe3c95f0aaa1d8a  libstdc++-v3/include/std/list
  979d756bd9149a01a697b92c921e75a0  libstdc++-v3/include/std/locale
  b9368104d884bddd988db2b9e69ab485  libstdc++-v3/include/std/map
! 562d87908c3c047101842d3fce84f04e  libstdc++-v3/include/std/mdspan
  ac2295459d5771dfc8ae3d83c5e860bc  libstdc++-v3/include/std/memory
  ea0d67f29f1a73f1ccdade0115646a1c  libstdc++-v3/include/std/memory_resource
  f431aa799cd5cc175e6d5af7130ac487  libstdc++-v3/include/std/meta
--- 149168,149174 ----
  7fa0f238b96d8783fbe3c95f0aaa1d8a  libstdc++-v3/include/std/list
  979d756bd9149a01a697b92c921e75a0  libstdc++-v3/include/std/locale
  b9368104d884bddd988db2b9e69ab485  libstdc++-v3/include/std/map
! ccef79443b4a2e805fed108a98a5094e  libstdc++-v3/include/std/mdspan
  ac2295459d5771dfc8ae3d83c5e860bc  libstdc++-v3/include/std/memory
  ea0d67f29f1a73f1ccdade0115646a1c  libstdc++-v3/include/std/memory_resource
  f431aa799cd5cc175e6d5af7130ac487  libstdc++-v3/include/std/meta
*************** bcf1c0b79e2efd9cd34763d368f40966  libstd
*** 149015,149021 ****
  e24e6fab84ab94b060b3c31ebc39b264  libstdc++-v3/include/std/print
  879fbfbd4d520dc45943e6e1c095a2e7  libstdc++-v3/include/std/queue
  3f2ecc03a66eecb18b68d4fdbf35e268  libstdc++-v3/include/std/random
! c7ec54928f0e973821d473f521fa1686  libstdc++-v3/include/std/ranges
  ee576f89ae347224177df91fe86d905d  libstdc++-v3/include/std/ratio
  a5c4f3df840ba7c3fbc9b7b9d5567ef2  libstdc++-v3/include/std/regex
  8e6ef0834acfc88dd03f5eae2990e41a  libstdc++-v3/include/std/scoped_allocator
--- 149180,149186 ----
  e24e6fab84ab94b060b3c31ebc39b264  libstdc++-v3/include/std/print
  879fbfbd4d520dc45943e6e1c095a2e7  libstdc++-v3/include/std/queue
  3f2ecc03a66eecb18b68d4fdbf35e268  libstdc++-v3/include/std/random
! 0856e1bb7a699020cb6e8d3f5e0475e1  libstdc++-v3/include/std/ranges
  ee576f89ae347224177df91fe86d905d  libstdc++-v3/include/std/ratio
  a5c4f3df840ba7c3fbc9b7b9d5567ef2  libstdc++-v3/include/std/regex
  8e6ef0834acfc88dd03f5eae2990e41a  libstdc++-v3/include/std/scoped_allocator
*************** bf574394d5a86a292cf1a1ce1696148d  libstd
*** 149040,149046 ****
  3de44f0df6167a88cbfda331087cb3e8  libstdc++-v3/include/std/text_encoding
  0e55da688cfae6ed254c1328fad9c8ad  libstdc++-v3/include/std/thread
  8ef30587757a1234aab215609f1a2e45  libstdc++-v3/include/std/tuple
! b99e4c8ad37dc8e679d2d265354d549b  libstdc++-v3/include/std/type_traits
  66a7939bfcb3a6f5966552f3fb49a384  libstdc++-v3/include/std/typeindex
  994522acd96f1b6084469da322d17c19  libstdc++-v3/include/std/unordered_map
  5393bc9d8b494917b25afd3714e8014a  libstdc++-v3/include/std/unordered_set
--- 149205,149211 ----
  3de44f0df6167a88cbfda331087cb3e8  libstdc++-v3/include/std/text_encoding
  0e55da688cfae6ed254c1328fad9c8ad  libstdc++-v3/include/std/thread
  8ef30587757a1234aab215609f1a2e45  libstdc++-v3/include/std/tuple
! ff36824a29ea5b43834acdcc395dabf0  libstdc++-v3/include/std/type_traits
  66a7939bfcb3a6f5966552f3fb49a384  libstdc++-v3/include/std/typeindex
  994522acd96f1b6084469da322d17c19  libstdc++-v3/include/std/unordered_map
  5393bc9d8b494917b25afd3714e8014a  libstdc++-v3/include/std/unordered_set
*************** f4935a7b92bee0179976443347292535  libstd
*** 149050,149056 ****
  3bc614c8d83d3085cdb3c15f7bafea3b  libstdc++-v3/include/std/vector
  ecd0f316fc872dc19b88a6c834438315  libstdc++-v3/include/std/version
  7874ef3c97c791ad66b9def816d95363  libstdc++-v3/include/tr1/array
! 9cef28d9f1825ac84137374a9584f648  libstdc++-v3/include/tr1/bessel_function.tcc
  46b13f8e728a833dde0cec867ab5223b  libstdc++-v3/include/tr1/beta_function.tcc
  85293e2b94356bf4c406779e5c720114  libstdc++-v3/include/tr1/ccomplex
  da08fb62bf24710dd34ca36964e4e394  libstdc++-v3/include/tr1/cctype
--- 149215,149221 ----
  3bc614c8d83d3085cdb3c15f7bafea3b  libstdc++-v3/include/std/vector
  ecd0f316fc872dc19b88a6c834438315  libstdc++-v3/include/std/version
  7874ef3c97c791ad66b9def816d95363  libstdc++-v3/include/tr1/array
! 9af6bc6d76f3358773a73a3bf07565a6  libstdc++-v3/include/tr1/bessel_function.tcc
  46b13f8e728a833dde0cec867ab5223b  libstdc++-v3/include/tr1/beta_function.tcc
  85293e2b94356bf4c406779e5c720114  libstdc++-v3/include/tr1/ccomplex
  da08fb62bf24710dd34ca36964e4e394  libstdc++-v3/include/tr1/cctype
*************** cdf9c54ab7ea85aa42bbf32b2e749913  libstd
*** 149317,149323 ****
  8fccfe420c4b99cdf08023a4fc8ab137  libstdc++-v3/src/c++17/floating_from_chars.cc
  66709d03438eb17097ae45fa2a7b4d0b  libstdc++-v3/src/c++17/floating_to_chars.cc
  ab713104bd5f979c12c01a7037584aa9  libstdc++-v3/src/c++17/fs_dir.cc
! c2c31d841f1cbaae1ccfc04bbc3441ff  libstdc++-v3/src/c++17/fs_ops.cc
  9246ac24ff18dcedf681fb7ccbaa8cd5  libstdc++-v3/src/c++17/fs_path.cc
  702e1413956c4c9873d78ce075b24e4e  libstdc++-v3/src/c++17/memory_resource.cc
  5fc15b3f8bf3bb0c0b6b692daffe193e  libstdc++-v3/src/c++17/ostream-inst.cc
--- 149482,149488 ----
  8fccfe420c4b99cdf08023a4fc8ab137  libstdc++-v3/src/c++17/floating_from_chars.cc
  66709d03438eb17097ae45fa2a7b4d0b  libstdc++-v3/src/c++17/floating_to_chars.cc
  ab713104bd5f979c12c01a7037584aa9  libstdc++-v3/src/c++17/fs_dir.cc
! 61c0fdfe946a64398f8327020bf207e7  libstdc++-v3/src/c++17/fs_ops.cc
  9246ac24ff18dcedf681fb7ccbaa8cd5  libstdc++-v3/src/c++17/fs_path.cc
  702e1413956c4c9873d78ce075b24e4e  libstdc++-v3/src/c++17/memory_resource.cc
  5fc15b3f8bf3bb0c0b6b692daffe193e  libstdc++-v3/src/c++17/ostream-inst.cc
*************** b4fa33c3234234ee50ec148cb246a424  libstd
*** 149342,149348 ****
  5ef17b396924faca2ae22d3b9424b38d  libstdc++-v3/src/c++20/atomic.cc
  e017d47cedd4e843177ec9ff2c936541  libstdc++-v3/src/c++20/clock.cc
  beadb627afafbd9d018802046c0b4403  libstdc++-v3/src/c++20/cow-string-inst.cc
! 950ea458edaf556ab767e8e46c180ee3  libstdc++-v3/src/c++20/format-inst.cc
  6f52cb5166806e80230cc27bc6c99101  libstdc++-v3/src/c++20/format.cc
  c2bd27af25e57adce5807e0f01a2d0dc  libstdc++-v3/src/c++20/sstream-inst.cc
  23187a5ee053acd65f32c0dc2ac4bdf7  libstdc++-v3/src/c++20/string-inst.cc
--- 149507,149513 ----
  5ef17b396924faca2ae22d3b9424b38d  libstdc++-v3/src/c++20/atomic.cc
  e017d47cedd4e843177ec9ff2c936541  libstdc++-v3/src/c++20/clock.cc
  beadb627afafbd9d018802046c0b4403  libstdc++-v3/src/c++20/cow-string-inst.cc
! 8935ae75c739b4bfd7e44d8d9f686f6e  libstdc++-v3/src/c++20/format-inst.cc
  6f52cb5166806e80230cc27bc6c99101  libstdc++-v3/src/c++20/format.cc
  c2bd27af25e57adce5807e0f01a2d0dc  libstdc++-v3/src/c++20/sstream-inst.cc
  23187a5ee053acd65f32c0dc2ac4bdf7  libstdc++-v3/src/c++20/string-inst.cc
*************** b6eb8bb1cd9be8390c8051e209be07bb  libstd
*** 149412,149418 ****
  4e5208dea38714bba31a6423b752994c  libstdc++-v3/src/filesystem/cow-path.cc
  d0ede5bf6e0a8ece42e35e4991fea077  libstdc++-v3/src/filesystem/dir-common.h
  680a6a0fe67e137a04446aca13b2b0ab  libstdc++-v3/src/filesystem/dir.cc
! 66c2c9befa8002b731eb7e547c1d955e  libstdc++-v3/src/filesystem/ops-common.h
  708bef5c318e9dca58ef3f6ca51d417d  libstdc++-v3/src/filesystem/ops.cc
  22fb7f66282e5e6bcde7f86d4a562e6f  libstdc++-v3/src/filesystem/path.cc
  59acac69f8e68c8d18f337534074bf2a  libstdc++-v3/src/libbacktrace/Makefile.am
--- 149577,149583 ----
  4e5208dea38714bba31a6423b752994c  libstdc++-v3/src/filesystem/cow-path.cc
  d0ede5bf6e0a8ece42e35e4991fea077  libstdc++-v3/src/filesystem/dir-common.h
  680a6a0fe67e137a04446aca13b2b0ab  libstdc++-v3/src/filesystem/dir.cc
! e8282ddc39d84455a8bf048ff7a404d1  libstdc++-v3/src/filesystem/ops-common.h
  708bef5c318e9dca58ef3f6ca51d417d  libstdc++-v3/src/filesystem/ops.cc
  22fb7f66282e5e6bcde7f86d4a562e6f  libstdc++-v3/src/filesystem/path.cc
  59acac69f8e68c8d18f337534074bf2a  libstdc++-v3/src/libbacktrace/Makefile.am
*************** c13631fa982dd192af2bf8c125ad420c  libstd
*** 150170,150175 ****
--- 150335,150341 ----
  839b0c83e1a0bd5c0ee958739de5e6c7  libstdc++-v3/testsuite/20_util/function_ref/deduction.cc
  fe11d1f21c6bd06aa902315e0eb169b2  libstdc++-v3/testsuite/20_util/function_ref/incomplete_neg.cc
  d98606abcb3c5938ecf7e2652a647a32  libstdc++-v3/testsuite/20_util/function_ref/mutation.cc
+ 8daef288b823d5c1ceeb63b2bd8f9130  libstdc++-v3/testsuite/20_util/has_unique_object_representations/neg.cc
  88f8f853b228275ceab6e1840a8a6f08  libstdc++-v3/testsuite/20_util/has_unique_object_representations/requirements/explicit_instantiation.cc
  10a395803b3413c9edcd7427782ce060  libstdc++-v3/testsuite/20_util/has_unique_object_representations/requirements/typedefs.cc
  255dd887346fe1c2d03e9843733faab3  libstdc++-v3/testsuite/20_util/has_unique_object_representations/value.cc
*************** fffdb6f32241f4a0878ec3ece51b7dd0  libstd
*** 153072,153077 ****
--- 153238,153244 ----
  bab905e1ae8763b4c0a3e78d5c903a92  libstdc++-v3/testsuite/23_containers/map/operations/31440.cc
  5e991b87f5722d4a5c08ace0de825f30  libstdc++-v3/testsuite/23_containers/map/operations/contains.cc
  86500f9420a0881022d4bfb1ea90e83e  libstdc++-v3/testsuite/23_containers/map/operations/count.cc
+ 3d3f976ab247fd6a7c4c02f3dc7e2721  libstdc++-v3/testsuite/23_containers/map/operations/hetero/equal_range.cc
  2d9e93a0a8f4dda0db9314f1c61149a4  libstdc++-v3/testsuite/23_containers/map/operators/1.cc
  50acf8a93ad96c097c51d3597c41cc15  libstdc++-v3/testsuite/23_containers/map/operators/1_neg.cc
  867a5677b298fd175abf9987e8a40f49  libstdc++-v3/testsuite/23_containers/map/operators/2.cc
*************** afe443cccc07fbd59aff2af0edd955ce  libstd
*** 153118,153123 ****
--- 153285,153291 ----
  c70a46b7a870b0d7ac9e94fd9d9077b6  libstdc++-v3/testsuite/23_containers/mdspan/layouts/padded.cc
  490297a4a90a084a51d7dfe6eb3a0f72  libstdc++-v3/testsuite/23_containers/mdspan/layouts/padded_neg.cc
  54d31e86115d0b93699f33eca2e16852  libstdc++-v3/testsuite/23_containers/mdspan/layouts/stride.cc
+ 91c5f0500560d19589fb48c98fe2df8d  libstdc++-v3/testsuite/23_containers/mdspan/layouts/stride_neg.cc
  083b2e8397805cfb105e7a8f99e725ca  libstdc++-v3/testsuite/23_containers/mdspan/mdspan.cc
  4b1a50b4d361b155b60027f1bdc566e7  libstdc++-v3/testsuite/23_containers/mdspan/out_of_bounds_neg.cc
  d0948adb8d08e1ed90f5223c0e45676b  libstdc++-v3/testsuite/23_containers/mdspan/submdspan/canonical_slices.cc
*************** ee05c2e9c75aa016dd6674fa799fa799  libstd
*** 153202,153207 ****
--- 153370,153376 ----
  c4d146c9793c76f76cf92765dfa7f24c  libstdc++-v3/testsuite/23_containers/multimap/operations/2.cc
  0dfe8f5a034fd23187fc58db07c0e537  libstdc++-v3/testsuite/23_containers/multimap/operations/contains.cc
  ff5454a841985ac7b90c2661e33c15dd  libstdc++-v3/testsuite/23_containers/multimap/operations/count.cc
+ 321b722f962443ed6626f7ab8c73e9fd  libstdc++-v3/testsuite/23_containers/multimap/operations/hetero/equal_range.cc
  dc22e2e36cc9d38d447d24bca81dbc1e  libstdc++-v3/testsuite/23_containers/multimap/operators/cmp_c++20.cc
  42f87833a952ce15b4cea4acdff36df3  libstdc++-v3/testsuite/23_containers/multimap/pmr_typedefs.cc
  873dfa1b280df264b784a841e0e30938  libstdc++-v3/testsuite/23_containers/multimap/pmr_typedefs_debug.cc
*************** ff179f969bc7af62e225d6efe4b76149  libstd
*** 153282,153287 ****
--- 153451,153457 ----
  c8741e98624e6a1e5586ad16993fc69b  libstdc++-v3/testsuite/23_containers/multiset/operations/2.cc
  5457561abefa6d6e674773bbeb4671c6  libstdc++-v3/testsuite/23_containers/multiset/operations/contains.cc
  136811d2188175896e74395c3cc392d9  libstdc++-v3/testsuite/23_containers/multiset/operations/count.cc
+ 6f48e251937a202a73a586b17177bc93  libstdc++-v3/testsuite/23_containers/multiset/operations/hetero/equal_range.cc
  b0f7e73ef898d113c6fb71d5a14029e0  libstdc++-v3/testsuite/23_containers/multiset/operators/cmp_c++20.cc
  aaa919efe8cb639aa1d218e411d370a4  libstdc++-v3/testsuite/23_containers/multiset/pmr_typedefs.cc
  f1e0bcdd6fdad5c95c26b9dc1647ecda  libstdc++-v3/testsuite/23_containers/multiset/pmr_typedefs_debug.cc
*************** c9dab4e9f5ce7812fc0b1b7df1af319c  libstd
*** 153413,153418 ****
--- 153583,153589 ----
  fb75406f76ec13d56d02da8ada6c2808  libstdc++-v3/testsuite/23_containers/set/operations/contains.cc
  ec5060576579cbf448731f4c600b4277  libstdc++-v3/testsuite/23_containers/set/operations/count.cc
  065a68ad028dbc0bc280a1c97fa26875  libstdc++-v3/testsuite/23_containers/set/operations/equal_range_adl.cc
+ cfa0ece74e384908ea1bc84ea93af07b  libstdc++-v3/testsuite/23_containers/set/operations/hetero/equal_range.cc
  06773e1df29f92c918f36f8ff7947461  libstdc++-v3/testsuite/23_containers/set/operators/1_neg.cc
  d65f40f06b065ff4ea16acf0f6879a30  libstdc++-v3/testsuite/23_containers/set/operators/cmp_c++20.cc
  9358962599a928aeef2096fe52e2169d  libstdc++-v3/testsuite/23_containers/set/pmr_typedefs.cc
*************** d40969d8e7a8973cde9b227f9ce95961  libstd
*** 158759,158764 ****
--- 158930,158936 ----
  d51794347be9f703e0ae6ba7fe53c7ff  libstdc++-v3/testsuite/special_functions/07_cyl_bessel_i/compile.cc
  852d9cef14cff4b4838e9156d9a36a9e  libstdc++-v3/testsuite/special_functions/07_cyl_bessel_i/compile_2.cc
  d339256f454a80af08225c41df2f507e  libstdc++-v3/testsuite/special_functions/07_cyl_bessel_i/pr56216.cc
+ dae267ab57458a7527b7ce4e8bbcb255  libstdc++-v3/testsuite/special_functions/08_cyl_bessel_j/check_inf.cc
  714bd741346d1fddf1a5cdc9ce74b4ba  libstdc++-v3/testsuite/special_functions/08_cyl_bessel_j/check_nan.cc
  539a31488702874a723d615ed2cae144  libstdc++-v3/testsuite/special_functions/08_cyl_bessel_j/check_value.cc
  e94d4edf67ef397033603e5959b76ea2  libstdc++-v3/testsuite/special_functions/08_cyl_bessel_j/compile.cc
*************** e94d4edf67ef397033603e5959b76ea2  libstd
*** 158767,158772 ****
--- 158939,158945 ----
  8047570d0ce5637669245d04fa431482  libstdc++-v3/testsuite/special_functions/09_cyl_bessel_k/check_value.cc
  9c94cf0312bd03a0cb8e40a9711dd81d  libstdc++-v3/testsuite/special_functions/09_cyl_bessel_k/compile.cc
  f11ce3d565763c3b3efa477f07b79b10  libstdc++-v3/testsuite/special_functions/09_cyl_bessel_k/compile_2.cc
+ 256a6c9914fe614760b3c1d12935305a  libstdc++-v3/testsuite/special_functions/10_cyl_neumann/check_inf.cc
  204691ae30ea3502dcab602599c2132c  libstdc++-v3/testsuite/special_functions/10_cyl_neumann/check_nan.cc
  77186a57701ac0752592eb20efbdf51a  libstdc++-v3/testsuite/special_functions/10_cyl_neumann/check_value.cc
  dcf34393b1a30218cbb8e7b99dfe2266  libstdc++-v3/testsuite/special_functions/10_cyl_neumann/compile.cc
*************** ec577f25e43df56f2c55dd8b70cc4282  libstd
*** 158912,158917 ****
--- 159085,159091 ----
  f8c9db32ebd1429bbaf2c1ead8562583  libstdc++-v3/testsuite/std/memory/polymorphic/invalid_neg.cc
  25b0d78575b430455c13bd9f89ac1220  libstdc++-v3/testsuite/std/memory/polymorphic/move.cc
  83a6a4f90d8bbb271dd1e34ad1d2a573  libstdc++-v3/testsuite/std/memory/polymorphic/move_alloc.cc
+ 66f653230f8945d6e9694e299534f5e8  libstdc++-v3/testsuite/std/memory/start_lifetime_as/neg.cc
  45c599ec07af3ccb18a0d8e3c2aea96f  libstdc++-v3/testsuite/std/memory/start_lifetime_as/start_lifetime_as.cc
  93d5cc160b98cb8b7d737ffed5842b3d  libstdc++-v3/testsuite/std/ranges/97600.cc
  9f1ea1f1671d48aea7ae18a55694c05d  libstdc++-v3/testsuite/std/ranges/access/101782.cc
*************** f28db5c2cfd426b3767ce7c0f206c38b  libstd
*** 159503,159508 ****
--- 159677,159683 ----
  b90398509c956cef6b474b996d1772f2  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/08_cyl_bessel_i/compile.cc
  b60b8b6419355380e7305eeafabec5e6  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/08_cyl_bessel_i/compile_2.cc
  bf806b61bb14bba030e27a9d9906612c  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/08_cyl_bessel_i/pr56216.cc
+ c60741caf98a65421aadafbef3890ff2  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/09_cyl_bessel_j/check_inf.cc
  478d50a221bea28a52fedc472f54e5fb  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/09_cyl_bessel_j/check_nan.cc
  a0f6778cae2f514088e658ff1fd90673  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/09_cyl_bessel_j/check_value.cc
  1b970583ecf36f0f59beb188dabfc7bf  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/09_cyl_bessel_j/compile.cc
*************** f904fbe291397e67499ad3c75dd690ef  libstd
*** 159512,159517 ****
--- 159687,159693 ----
  b5a4a9389ac4e98cec6750990d86ba4f  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/10_cyl_bessel_k/check_value.cc
  557a7bb6ed377d35722fc72d214d29c3  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/10_cyl_bessel_k/compile.cc
  53ca293d213cd9a24756d7df4e15eb1e  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/10_cyl_bessel_k/compile_2.cc
+ c67dfe2ad944a2b8bc99f25b42d0a88a  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/11_cyl_neumann/check_inf.cc
  c847ec67c459a3b45d9a72408f94511d  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/11_cyl_neumann/check_nan.cc
  c7441e5379a673b5b7c18c24b343c90b  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/11_cyl_neumann/check_value.cc
  8a0987945829e9838778590af809f833  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/11_cyl_neumann/compile.cc
diff -Nrcpad gcc-17-20260705/config/acx.m4 gcc-17-20260712/config/acx.m4
*** gcc-17-20260705/config/acx.m4	Sun Jul  5 22:32:05 2026
--- gcc-17-20260712/config/acx.m4	Sun Jul 12 22:32:05 2026
*************** rm conftest.c
*** 340,345 ****
--- 340,350 ----
  AC_DEFUN([ACX_CHECK_INSTALLED_TARGET_TOOL], [
  AC_REQUIRE([ACX_TOOL_DIRS])
  AC_REQUIRE([ACX_HAVE_GCC_FOR_TARGET])
+ if test -n "[$]$1"; then
+   ac_cv_path_$1=[$]$1
+ elif test -n "$ac_cv_path_$1"; then
+   $1=$ac_cv_path_$1
+ fi
  if test -z "$ac_cv_path_$1" ; then
    if test -n "$with_build_time_tools"; then
      AC_MSG_CHECKING([for $2 in $with_build_time_tools])
diff -Nrcpad gcc-17-20260705/configure gcc-17-20260712/configure
*** gcc-17-20260705/configure	Sun Jul  5 22:32:22 2026
--- gcc-17-20260712/configure	Sun Jul 12 22:32:23 2026
*************** case "$target:$have_compiler:$host:$targ
*** 11752,11773 ****
      ;;
  esac
  
- # For s390, -m31 is deprecated.  Emit a warning if --enable-multilib and
- # --enable-obsolete are explicitly specified.  If --enable-multilib is
- # specified implicitly or --enable-obsolete is missing, error out.
- case "$target:$enable_multilib:$enable_obsolete" in
-   s390*:yes:yes)
-     { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Support for -m31 is deprecated and will be removed." >&5
- $as_echo "$as_me: WARNING: Support for -m31 is deprecated and will be removed." >&2;}
-     ;;
-   s390*::*)
-     as_fn_error $? "Support for -m31 is deprecated and will be removed. Explicitly specify --disable-multilib or --enable-multilib --enable-obsolete to build it anyway." "$LINENO" 5
-     ;;
-   s390*:yes:*)
-     as_fn_error $? "Support for -m31 is deprecated and will be removed. Specify --enable-obsolete to build it anyway." "$LINENO" 5
-     ;;
- esac
- 
  # Default to --enable-multilib.
  if test x${enable_multilib} = x ; then
    target_configargs="--enable-multilib ${target_configargs}"
--- 11752,11757 ----
*************** rm conftest.c
*** 16498,16503 ****
--- 16482,16492 ----
  
  
  
+ if test -n "$AR_FOR_TARGET"; then
+   ac_cv_path_AR_FOR_TARGET=$AR_FOR_TARGET
+ elif test -n "$ac_cv_path_AR_FOR_TARGET"; then
+   AR_FOR_TARGET=$ac_cv_path_AR_FOR_TARGET
+ fi
  if test -z "$ac_cv_path_AR_FOR_TARGET" ; then
    if test -n "$with_build_time_tools"; then
      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ar in $with_build_time_tools" >&5
*************** fi
*** 16728,16733 ****
--- 16717,16727 ----
  
  
  
+ if test -n "$AS_FOR_TARGET"; then
+   ac_cv_path_AS_FOR_TARGET=$AS_FOR_TARGET
+ elif test -n "$ac_cv_path_AS_FOR_TARGET"; then
+   AS_FOR_TARGET=$ac_cv_path_AS_FOR_TARGET
+ fi
  if test -z "$ac_cv_path_AS_FOR_TARGET" ; then
    if test -n "$with_build_time_tools"; then
      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for as in $with_build_time_tools" >&5
*************** fi
*** 16958,16963 ****
--- 16952,16962 ----
  
  
  
+ if test -n "$DLLTOOL_FOR_TARGET"; then
+   ac_cv_path_DLLTOOL_FOR_TARGET=$DLLTOOL_FOR_TARGET
+ elif test -n "$ac_cv_path_DLLTOOL_FOR_TARGET"; then
+   DLLTOOL_FOR_TARGET=$ac_cv_path_DLLTOOL_FOR_TARGET
+ fi
  if test -z "$ac_cv_path_DLLTOOL_FOR_TARGET" ; then
    if test -n "$with_build_time_tools"; then
      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlltool in $with_build_time_tools" >&5
*************** fi
*** 17188,17193 ****
--- 17187,17197 ----
  
  
  
+ if test -n "$DSYMUTIL_FOR_TARGET"; then
+   ac_cv_path_DSYMUTIL_FOR_TARGET=$DSYMUTIL_FOR_TARGET
+ elif test -n "$ac_cv_path_DSYMUTIL_FOR_TARGET"; then
+   DSYMUTIL_FOR_TARGET=$ac_cv_path_DSYMUTIL_FOR_TARGET
+ fi
  if test -z "$ac_cv_path_DSYMUTIL_FOR_TARGET" ; then
    if test -n "$with_build_time_tools"; then
      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dsymutil in $with_build_time_tools" >&5
*************** fi
*** 17418,17423 ****
--- 17422,17432 ----
  
  
  
+ if test -n "$LD_FOR_TARGET"; then
+   ac_cv_path_LD_FOR_TARGET=$LD_FOR_TARGET
+ elif test -n "$ac_cv_path_LD_FOR_TARGET"; then
+   LD_FOR_TARGET=$ac_cv_path_LD_FOR_TARGET
+ fi
  if test -z "$ac_cv_path_LD_FOR_TARGET" ; then
    if test -n "$with_build_time_tools"; then
      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld in $with_build_time_tools" >&5
*************** fi
*** 17648,17653 ****
--- 17657,17667 ----
  
  
  
+ if test -n "$LIPO_FOR_TARGET"; then
+   ac_cv_path_LIPO_FOR_TARGET=$LIPO_FOR_TARGET
+ elif test -n "$ac_cv_path_LIPO_FOR_TARGET"; then
+   LIPO_FOR_TARGET=$ac_cv_path_LIPO_FOR_TARGET
+ fi
  if test -z "$ac_cv_path_LIPO_FOR_TARGET" ; then
    if test -n "$with_build_time_tools"; then
      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lipo in $with_build_time_tools" >&5
*************** fi
*** 17878,17883 ****
--- 17892,17902 ----
  
  
  
+ if test -n "$NM_FOR_TARGET"; then
+   ac_cv_path_NM_FOR_TARGET=$NM_FOR_TARGET
+ elif test -n "$ac_cv_path_NM_FOR_TARGET"; then
+   NM_FOR_TARGET=$ac_cv_path_NM_FOR_TARGET
+ fi
  if test -z "$ac_cv_path_NM_FOR_TARGET" ; then
    if test -n "$with_build_time_tools"; then
      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nm in $with_build_time_tools" >&5
*************** fi
*** 18108,18113 ****
--- 18127,18137 ----
  
  
  
+ if test -n "$OBJCOPY_FOR_TARGET"; then
+   ac_cv_path_OBJCOPY_FOR_TARGET=$OBJCOPY_FOR_TARGET
+ elif test -n "$ac_cv_path_OBJCOPY_FOR_TARGET"; then
+   OBJCOPY_FOR_TARGET=$ac_cv_path_OBJCOPY_FOR_TARGET
+ fi
  if test -z "$ac_cv_path_OBJCOPY_FOR_TARGET" ; then
    if test -n "$with_build_time_tools"; then
      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for objcopy in $with_build_time_tools" >&5
*************** fi
*** 18338,18343 ****
--- 18362,18372 ----
  
  
  
+ if test -n "$OBJDUMP_FOR_TARGET"; then
+   ac_cv_path_OBJDUMP_FOR_TARGET=$OBJDUMP_FOR_TARGET
+ elif test -n "$ac_cv_path_OBJDUMP_FOR_TARGET"; then
+   OBJDUMP_FOR_TARGET=$ac_cv_path_OBJDUMP_FOR_TARGET
+ fi
  if test -z "$ac_cv_path_OBJDUMP_FOR_TARGET" ; then
    if test -n "$with_build_time_tools"; then
      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdump in $with_build_time_tools" >&5
*************** fi
*** 18568,18573 ****
--- 18597,18607 ----
  
  
  
+ if test -n "$OTOOL_FOR_TARGET"; then
+   ac_cv_path_OTOOL_FOR_TARGET=$OTOOL_FOR_TARGET
+ elif test -n "$ac_cv_path_OTOOL_FOR_TARGET"; then
+   OTOOL_FOR_TARGET=$ac_cv_path_OTOOL_FOR_TARGET
+ fi
  if test -z "$ac_cv_path_OTOOL_FOR_TARGET" ; then
    if test -n "$with_build_time_tools"; then
      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for otool in $with_build_time_tools" >&5
*************** fi
*** 18798,18803 ****
--- 18832,18842 ----
  
  
  
+ if test -n "$RANLIB_FOR_TARGET"; then
+   ac_cv_path_RANLIB_FOR_TARGET=$RANLIB_FOR_TARGET
+ elif test -n "$ac_cv_path_RANLIB_FOR_TARGET"; then
+   RANLIB_FOR_TARGET=$ac_cv_path_RANLIB_FOR_TARGET
+ fi
  if test -z "$ac_cv_path_RANLIB_FOR_TARGET" ; then
    if test -n "$with_build_time_tools"; then
      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ranlib in $with_build_time_tools" >&5
*************** fi
*** 19028,19033 ****
--- 19067,19077 ----
  
  
  
+ if test -n "$READELF_FOR_TARGET"; then
+   ac_cv_path_READELF_FOR_TARGET=$READELF_FOR_TARGET
+ elif test -n "$ac_cv_path_READELF_FOR_TARGET"; then
+   READELF_FOR_TARGET=$ac_cv_path_READELF_FOR_TARGET
+ fi
  if test -z "$ac_cv_path_READELF_FOR_TARGET" ; then
    if test -n "$with_build_time_tools"; then
      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for readelf in $with_build_time_tools" >&5
*************** fi
*** 19258,19263 ****
--- 19302,19312 ----
  
  
  
+ if test -n "$STRIP_FOR_TARGET"; then
+   ac_cv_path_STRIP_FOR_TARGET=$STRIP_FOR_TARGET
+ elif test -n "$ac_cv_path_STRIP_FOR_TARGET"; then
+   STRIP_FOR_TARGET=$ac_cv_path_STRIP_FOR_TARGET
+ fi
  if test -z "$ac_cv_path_STRIP_FOR_TARGET" ; then
    if test -n "$with_build_time_tools"; then
      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for strip in $with_build_time_tools" >&5
*************** fi
*** 19488,19493 ****
--- 19537,19547 ----
  
  
  
+ if test -n "$WINDRES_FOR_TARGET"; then
+   ac_cv_path_WINDRES_FOR_TARGET=$WINDRES_FOR_TARGET
+ elif test -n "$ac_cv_path_WINDRES_FOR_TARGET"; then
+   WINDRES_FOR_TARGET=$ac_cv_path_WINDRES_FOR_TARGET
+ fi
  if test -z "$ac_cv_path_WINDRES_FOR_TARGET" ; then
    if test -n "$with_build_time_tools"; then
      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for windres in $with_build_time_tools" >&5
*************** fi
*** 19718,19723 ****
--- 19772,19782 ----
  
  
  
+ if test -n "$WINDMC_FOR_TARGET"; then
+   ac_cv_path_WINDMC_FOR_TARGET=$WINDMC_FOR_TARGET
+ elif test -n "$ac_cv_path_WINDMC_FOR_TARGET"; then
+   WINDMC_FOR_TARGET=$ac_cv_path_WINDMC_FOR_TARGET
+ fi
  if test -z "$ac_cv_path_WINDMC_FOR_TARGET" ; then
    if test -n "$with_build_time_tools"; then
      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for windmc in $with_build_time_tools" >&5
diff -Nrcpad gcc-17-20260705/configure.ac gcc-17-20260712/configure.ac
*** gcc-17-20260705/configure.ac	Sun Jul  5 22:32:05 2026
--- gcc-17-20260712/configure.ac	Sun Jul 12 22:32:05 2026
*************** case "$target:$have_compiler:$host:$targ
*** 3826,3846 ****
      ;;
  esac
  
- # For s390, -m31 is deprecated.  Emit a warning if --enable-multilib and
- # --enable-obsolete are explicitly specified.  If --enable-multilib is
- # specified implicitly or --enable-obsolete is missing, error out.
- case "$target:$enable_multilib:$enable_obsolete" in
-   s390*:yes:yes)
-     AC_MSG_WARN([Support for -m31 is deprecated and will be removed.])
-     ;;
-   s390*::*)
-     AC_MSG_ERROR([Support for -m31 is deprecated and will be removed. Explicitly specify --disable-multilib or --enable-multilib --enable-obsolete to build it anyway.])
-     ;;
-   s390*:yes:*)
-     AC_MSG_ERROR([Support for -m31 is deprecated and will be removed. Specify --enable-obsolete to build it anyway.])
-     ;;
- esac
- 
  # Default to --enable-multilib.
  if test x${enable_multilib} = x ; then
    target_configargs="--enable-multilib ${target_configargs}"
--- 3826,3831 ----
diff -Nrcpad gcc-17-20260705/contrib/ChangeLog gcc-17-20260712/contrib/ChangeLog
*** gcc-17-20260705/contrib/ChangeLog	Sun Jul  5 22:32:05 2026
--- gcc-17-20260712/contrib/ChangeLog	Sun Jul 12 22:32:05 2026
***************
*** 1,3 ****
--- 1,25 ----
+ 2026-07-09  Stefan Schulze Frielinghaus  <stefansf@gcc.gnu.org>
+ 
+ 	* compare-all-tests: Remove opts -m31 and so on.
+ 	* config-list.mk: Remove s390-linux-gnu.
+ 
+ 2026-07-07  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	* add-write-after.py: New file.
+ 
+ 2026-07-07  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	* gen-MAINTAINERS.py: New file.
+ 	* maintainer_utils.py: New file.
+ 	* check-MAINTAINERS.py: Delete.
+ 
+ 2026-07-07  Arsen Arsenović  <aarsenovic@baylibre.com>
+ 
+ 	* download_prerequisites (gettext): Set gettext source file to
+ 	gettext-1.0.tar.gz.
+ 	* prerequisites.md5: Update gettext hash.
+ 	* prerequisites.sha512: Update gettext hash.
+ 
  2026-07-01  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
  
  	* config-list.mk (sparc64-sun-solaris2.11): Remove --with-gnu-ld.
diff -Nrcpad gcc-17-20260705/contrib/add-write-after.py gcc-17-20260712/contrib/add-write-after.py
*** gcc-17-20260705/contrib/add-write-after.py	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/contrib/add-write-after.py	Sun Jul 12 22:32:05 2026
***************
*** 0 ****
--- 1,150 ----
+ #! /usr/bin/env python3
+ 
+ # Add a new Write-After account to MAINTAINERS.yml
+ 
+ # Copyright (C) 2026 Free Software Foundation, Inc.
+ #
+ # This file is part of GCC.
+ #
+ # GCC is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+ # the Free Software Foundation; either version 3, or (at your option)
+ # any later version.
+ #
+ # GCC is distributed in the hope that it will be useful,
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ # GNU General Public License for more details.
+ #
+ # You should have received a copy of the GNU General Public License
+ # along with GCC; see the file COPYING.  If not, write to
+ # the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+ # Boston, MA 02110-1301, USA.
+ 
+ import os
+ import pwd
+ import re
+ import sys
+ import unidecode
+ import yaml
+ 
+ from optparse import OptionParser
+ 
+ import maintainer_utils as maintutils
+ 
+ def unilower(txt):
+     """return a lower-case version of txt, mapping accented characters
+     onto their ASCII near equivalents."""
+     return unidecode.unidecode(txt).lower()
+ 
+ def get_surname(name):
+     parts = name.split()
+     surname = parts[-1]
+ 
+     if surname.startswith("d'"):
+         surname = surname[2:]
+ 
+     return surname
+ 
+ def ask(prompt, default, required=True):
+     while True:
+         print(f"{prompt} [{default if default else '(no default)'}]: ", end="",
+               flush=True)
+         result = sys.stdin.readline().strip()
+         if result != "":
+             return result
+         if default or not required:
+             return default
+ 
+ def email_valid(e):
+     template = r"^[A-Za-z0-9._%+-]+@(?:[A-Za-z0-9-]+\.)+[A-Za-z]{2,}$"
+     if re.match(template, e):
+         return True
+     return False
+ 
+ def getuserdata():
+     user = pwd.getpwuid(os.getuid())
+     # Make an initial guess that the name and GCC account will match
+     # the local account name.
+     # GECOS fields sometime contain a comma-separated list; in that case
+     # we only want the first component (the user's name)
+     print ("Please enter the details of your Sourceware account.")
+     print ("Some details have been guessed, based on your local account,")
+     print ("but you can adjust as required.")
+     newuser = {
+         'sn': "",
+         'cn': "",
+         'email': [],
+         'roles': [],
+         'account': "",
+     }
+     newuser['cn'] = ask("Your name", user.pw_gecos.split(",", 1)[0])
+     newuser['sn'] = ask("Your surname (only used for sorting entries)",
+                         get_surname(newuser['cn']))
+     account = ask("Your sourceware account", user.pw_name)
+     while True:
+         e = ask("Primary email address", None)
+         if email_valid(e):
+             break
+         print ("That address does not look valid.")
+     newuser['email'].append(e)
+     while (e := ask("Additional email (return to stop)", None,
+                     required=False)):
+         if email_valid(e):
+             newuser['email'].append(e)
+         else:
+             print ("That address does not look valid.  Ignored.")
+     gcc_email = account + "@gcc.gnu.org"
+     if not gcc_email in newuser['email']:
+         print(f"Appending {gcc_email} to the list of email addresses")
+         newuser['email'].append(gcc_email)
+     newuser['roles'] = list()
+     newuser['roles'].append('WriteAfter')
+     newuser['account'] = account
+     print("If you are using a Developer Certificate of Origin (DCO)")
+     print("you can add appropriate email addresses here")
+     while (e := ask("DCO email (return to stop)", None, required=False)):
+         if email_valid(e):
+             newuser['roles'].append({'DCO': e})
+         else:
+             print ("That address does not look valid.  Ignored.")
+     return newuser
+ 
+ def main():
+     optp = OptionParser(usage="Usage: %prog [<options>] <maintainers.yml>")
+     optp.add_option("-o", "--output", metavar="FILE",
+                     default=None, dest="outfilename",
+                     help="Write to FILE instead of updating original file")
+     opts, args = optp.parse_args()
+     if len(args) != 1:
+         optp.print_help()
+         sys.exit(1)
+ 
+     data = maintutils.load(args[0])
+     # Check the data before we try to update it.
+     maintutils.validate(data)
+     newuser = getuserdata()
+     if not newuser:
+         return 0
+     existing = [u for u in filter(lambda x: (x.get('account')
+                                              == newuser['account']),
+                                   data['users'])]
+     if len(existing):
+         print(f"Sorry that account name ({newuser['account']}) has already been used.")
+         print("Note, this script can only be used to add new accounts.")
+         return 1
+     data['users'].append (newuser)
+     data['users'] = sorted(data['users'],
+                            key = lambda k: (unilower(k['sn']),
+                                             unilower(k['cn'])))
+     if opts.outfilename and opts.outfilename != '-':
+         outfd = open (opts.outfilename, "w", encoding="utf-8")
+     elif opts.outfilename and opts.outfilename == '-':
+         outfd = sys.stdout
+     else:
+         outfd = open (args[0], "w", encoding="utf-8")
+     yaml.dump (data, outfd, allow_unicode = True, sort_keys = False)
+     return 0
+ 
+ if __name__ == "__main__":
+     sys.exit (main())
diff -Nrcpad gcc-17-20260705/contrib/check-MAINTAINERS.py gcc-17-20260712/contrib/check-MAINTAINERS.py
*** gcc-17-20260705/contrib/check-MAINTAINERS.py	Sun Jul  5 22:32:05 2026
--- gcc-17-20260712/contrib/check-MAINTAINERS.py	Thu Jan  1 00:00:00 1970
***************
*** 1,229 ****
- #!/usr/bin/env python3
- 
- # Copyright (C) 2022-2026 Free Software Foundation, Inc.
- #
- # This file is part of GCC.
- #
- # GCC is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
- # the Free Software Foundation; either version 3, or (at your option)
- # any later version.
- #
- # GCC is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- # GNU General Public License for more details.
- #
- # You should have received a copy of the GNU General Public License
- # along with GCC; see the file COPYING.  If not, write to
- # the Free Software Foundation, 51 Franklin Street, Fifth Floor,
- # Boston, MA 02110-1301, USA.
- 
- # Check that names in the file are sorted alphabetically by surname, name
- # bugzilla handle and email (in this order).
- 
- import locale
- import sys
- import re
- from itertools import groupby
- from operator import itemgetter
- from difflib import ndiff
- import unidecode
- 
- locale.setlocale(locale.LC_ALL, 'en_US.utf8')
- 
- exit_code = 0
- 
- if len(sys.argv) != 2:
-     print('Usage: ./check-MAINTAINERS.py path-to/MAINTAINERS')
-     sys.exit(1)
- 
- 
- def get_name_for_sort(name):
-     parts = name.split()
-     surname = parts[-1] + ", " + " ".join(parts[:-1])
- 
-     # Special-case some names
-     if (name == 'Stefan Schulze Frielinghaus'
-         or name == 'Kris Van Hees'):
-         surname = " ".join(parts[1:]) + ", " + parts[0]
-     if surname.startswith("d'"):
-         surname = surname[2:]
- 
-     # Remove accents
-     return unidecode.unidecode(surname)
- 
- 
- def check_group(name, lines, columns, matcher, sort_by):
-     global exit_code
-     named_lines = []
-     rex = re.compile (matcher)
-     for line in lines:
-         if line.startswith(' '):
-             print(f'Line should not start with space: "{line}"')
-             exit_code = 2
-             continue
- 
-         if line.endswith(' '):
-             print(f'Line should not end with space: "{line}"')
-             exit_code = 3
-             continue
- 
-         # Special-case some names
-         if line == 'James Norris':
-             named_lines.append((get_name_for_sort(line), "", "", line))
-             continue
- 
-         fields = rex.match(line)
-         if not fields:
-             print(f'Could not parse line: "{line}"')
-             exit_code = 3
-             continue
- 
-         matched_keys = [
-             name for name, idx in sorted (rex.groupindex.items(),
-                                         key=lambda x: x[1])
-             if fields.group(idx) is not None]
- 
-         pos = 0
-         for i, k in enumerate (matched_keys):
-             if i >= len (columns):
-                 break
-             if pos < columns[i]:
-                 pos = columns[i]
-             start = fields.start(k)
-             if k == 'email':
-                 start -= 1  # Account for the leading '<'
-             if start == pos:
-                 True
-             elif (start > pos
-                   and pos > 2
-                   and k == 'email'
-                   and line[start-1] == " "
-                   and line[start-2] != " "):
-                 True
-             elif (start > pos
-                   and k != 'email'
-                   and pos > 3
-                   and line[start-2:start] == "  "
-                   and line[start-3] != " "):
-                 True
-             else:
-                 exit_code = 3
-                 print (line)
-                 print (f"{k} starts in the wrong column: expected: {pos}, actual {start}")
-             pos += 1 + len (fields[k].rstrip())
- 
-         fields = fields.groupdict()
-         if 'Team' in fields and fields['Team']:
-             fields['User'] = fields['Team']
-             fields['email'] = ""
-         pieces = []
-         for i, f in enumerate (sort_by):
-             if f not in fields:
-                 print('Internal error: re mismatch')
-                 sys.exit(10)
-             if f == 'User':
-                 pieces.append(get_name_for_sort(fields[f].rstrip()))
-             elif f == 'component':
-                 pieces.append(fields[f].rstrip().lower())
-             else:
-                 pieces.append(fields[f].rstrip())
-         pieces.append (line)
-         named_lines.append(pieces)
- 
-     order = []
-     for i, _ in enumerate (sort_by):
-         order.append(i)
-     order = tuple(order)
-     lines = [line + "\n" for line in lines]
-     sorted_lines = [line[-1] + "\n"
-                     for line in sorted(named_lines,
-                                        key = itemgetter(*order))]
-     if lines != sorted_lines:
-         exit_code = 1
-         diff = [line for line in ndiff(lines, sorted_lines)
-                 if not line.startswith('? ')]
-         print(f'Wrong order for {name}:\n')
-         print(''.join(diff))
-     else:
-         print(f'{name} are fine!')
- 
- 
- text = open(sys.argv[1]).read()
- if '\t' in text:
-     print('The file should not contain tabs')
-     exit_code = 9
- 
- sections = [
-     # heading, paragraph index, column numbers, regex, sort order
-     ('Global Reviewers',
-      1,
-      [0, 48],
-      r'^(?P<User>.{47}) <(?P<email>.*)>$',
-      ['User', 'email']),
-     ('CPU Port Maintainers    (CPU alphabetical order)',
-      1,
-      [0, 24, 48],
-      r'^(?P<component>.{23}) (?P<User>.*) <(?P<email>[^<>]*)>$',
-      ['component', 'User', 'email']),
-     ('OS Port Maintainers     (OS alphabetical order)',
-      1,
-      [0, 24, 48],
-      r'^(?P<component>.{23}) (?P<User>.*) <(?P<email>[^<>]*)>$',
-      ['component', 'User', 'email']),
-     ('Language Front Ends Maintainer',
-      1,
-      [0, 24, 48],
-      r'^(?P<component>.{23}) (?P<User>.*) <(?P<email>[^<>]*)>$',
-      ['component', 'User', 'email']),
-     ('Various Maintainers',
-      1,
-      [0, 24, 48],
-      r'''(?x)
-          ^(?P<component>(?:(?!\s\s).)*)\s\s+
-          (?:(?P<Team>All.*maintainers)
-           |(?P<User>[^\s].*)\s+<(?P<email>[^<>]*)>)$''',
-      ['component', 'User', 'email']),
-     ('Reviewers',
-      1,
-      [0, 24, 48],
-      r'^(?P<component>(?:(?!  ).)*)  +(?P<User>[^\s].*) <(?P<email>[^<>]*)>$',
-      ['component', 'User', 'email']),
-     ('Write After Approval',
-      2,
-      [0, 32, 48],
-      r'^(?P<User>.{31}) (?P<account>.{15}) <(?P<email>[^<>]*)>$',
-      ['User', 'email', 'account']),
-     ('Bug database only accounts',
-      1,
-      [0, 48],
-      r'^(?P<User>.{47}) <(?P<email>[^<>]*)>$',
-      ['User', 'email']),
-     ('Contributing under the DCO',
-      2,
-      [0, 48],
-      r'^(?P<User>.{47}) <(?P<email>[^<>]*)>$',
-      ['User', 'email'])
- ]
- 
- i = 0
- count = 0
- for is_empty, lines in groupby(text.splitlines(), lambda x: not x):
-     if is_empty:
-         continue
-     lines = list(lines)
-     if count > 0:
-         count -= 1
-         if count == 0:
-             check_group(sections[i][0], lines, sections[i][2], sections[i][3],
-                         sections[i][4])
-             i += 1
-     elif len(lines) == 1 and i < len(sections) and sections[i][0] in lines[0]:
-         count = sections[i][1]
- 
- if i < len(sections):
-     print(f'Missing "{sections[i][0]}" section')
-     exit_code = 10
- 
- sys.exit(exit_code)
--- 0 ----
diff -Nrcpad gcc-17-20260705/contrib/compare-all-tests gcc-17-20260712/contrib/compare-all-tests
*** gcc-17-20260705/contrib/compare-all-tests	Sun Jul  5 22:32:05 2026
--- gcc-17-20260712/contrib/compare-all-tests	Sun Jul 12 22:32:05 2026
*************** mips_opts='-msoft-float/-mgp32/-mips16 -
*** 29,35 ****
  mn10300_opts='-mam33 -mam33-2'
  pa_opts='-march=2.0 -march=1.0 -march=1.1'
  ppc_opts='-m32 -m64'
- s390_opts='-m31 -m31/-mzarch -m64'
  sh_opts='-m3 -m3e -m4 -m4a -m4al -m4/-mieee -m1 -m1/-mno-cbranchdi -m2a -m2a/-mieee -m2e -m2e/-mieee'
  sparc_opts='-mcpu=v8/-m32 -mcpu=v9/-m32 -m64'
  
--- 29,34 ----
diff -Nrcpad gcc-17-20260705/contrib/config-list.mk gcc-17-20260712/contrib/config-list.mk
*** gcc-17-20260705/contrib/config-list.mk	Sun Jul  5 22:32:05 2026
--- gcc-17-20260712/contrib/config-list.mk	Sun Jul 12 22:32:05 2026
*************** LIST = \
*** 94,100 ****
    pru-elf \
    riscv32-unknown-linux-gnu riscv64-unknown-linux-gnu \
    powerpc-ibm-aix7.1 powerpc-ibm-aix7.2 \
!   rl78-elf rx-elf s390-linux-gnu s390x-linux-gnu s390x-ibm-tpf sh-elf \
    shle-linux sh-netbsdelf sh-superh-elf \
    sh-rtems sh-wrs-vxworks sparc-elf \
    sparc-leon-elf sparc-rtems sparc-linux-gnu \
--- 94,100 ----
    pru-elf \
    riscv32-unknown-linux-gnu riscv64-unknown-linux-gnu \
    powerpc-ibm-aix7.1 powerpc-ibm-aix7.2 \
!   rl78-elf rx-elf s390x-linux-gnu s390x-ibm-tpf sh-elf \
    shle-linux sh-netbsdelf sh-superh-elf \
    sh-rtems sh-wrs-vxworks sparc-elf \
    sparc-leon-elf sparc-rtems sparc-linux-gnu \
diff -Nrcpad gcc-17-20260705/contrib/download_prerequisites gcc-17-20260712/contrib/download_prerequisites
*** gcc-17-20260705/contrib/download_prerequisites	Sun Jul  5 22:32:05 2026
--- gcc-17-20260712/contrib/download_prerequisites	Sun Jul 12 22:32:05 2026
*************** gmp='gmp-6.3.0.tar.bz2'
*** 31,37 ****
  mpfr='mpfr-4.2.2.tar.bz2'
  mpc='mpc-1.3.1.tar.gz'
  isl='isl-0.24.tar.bz2'
! gettext='gettext-0.22.tar.gz'
  
  base_url='https://gcc.gnu.org/pub/gcc/infrastructure/'
  
--- 31,37 ----
  mpfr='mpfr-4.2.2.tar.bz2'
  mpc='mpc-1.3.1.tar.gz'
  isl='isl-0.24.tar.bz2'
! gettext='gettext-1.0.tar.gz'
  
  base_url='https://gcc.gnu.org/pub/gcc/infrastructure/'
  
diff -Nrcpad gcc-17-20260705/contrib/gen-MAINTAINERS.py gcc-17-20260712/contrib/gen-MAINTAINERS.py
*** gcc-17-20260705/contrib/gen-MAINTAINERS.py	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/contrib/gen-MAINTAINERS.py	Sun Jul 12 22:32:05 2026
***************
*** 0 ****
--- 1,319 ----
+ #!/usr/bin/env python3
+ 
+ # Regenerate the MAINTAINERS file from the YAML data.
+ 
+ # Copyright (C) 2026 Free Software Foundation, Inc.
+ #
+ # This file is part of GCC.
+ #
+ # GCC is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+ # the Free Software Foundation; either version 3, or (at your option)
+ # any later version.
+ #
+ # GCC is distributed in the hope that it will be useful,
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ # GNU General Public License for more details.
+ #
+ # You should have received a copy of the GNU General Public License
+ # along with GCC; see the file COPYING.  If not, write to
+ # the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+ # Boston, MA 02110-1301, USA.
+ 
+ 
+ import locale
+ import sys
+ 
+ from operator import itemgetter
+ from optparse import OptionParser
+ 
+ import unidecode
+ 
+ import maintainer_utils as maintutils
+ 
+ opts = None
+ verbose = False
+ active_only = False
+ 
+ boilerplate = {
+     'intro': {
+         'preamble': """Note
+ ====
+ 
+ This file is autogenerated.  DO NOT EDIT or your changes will be lost.
+ Instead, add your details to contrib/MAINTAINERS.yml and run
+ 
+         contrib/gen-MAINTAINERS.py -o MAINTAINERS MAINTAINERS.yml
+ 
+ This file contains information about people who are permitted to make
+ changes to various parts of the compiler and associated libraries.
+ 
+ Please do not contact the people in this file directly to report
+ problems in GCC.
+ 
+ For general information about GCC, please visit:
+ 
+   http://gcc.gnu.org
+ 
+ To report problems in GCC, please visit:
+ 
+   http://gcc.gnu.org/bugs/
+ 
+ If you'd like to CC a maintainer in bugzilla, please add @gcc.gnu.org
+ to the account name given in the Write After Approval section below.
+ Please use the email address given in <...> for direct email communication.
+ 
+ Note: when adding someone who has commit access to a more specific section,
+ please also ensure that there is a corresponding entry in the Write After
+ Approval list, since that list contains the gcc.gnu.org account name.
+ 
+ Maintainers
+ ===========""",
+     },
+     'global': {
+         'preamble': """
+                         Global Reviewers
+ """,
+         'template': "{u[cn]:{w[cn]}} <{u[email]}>",
+         'widths': [('cn', 47)],
+         'filter': {
+             'role': "Global",
+             'order': ['sn', 'cn', 'email'],
+         },
+         'posttext': """
+ Note that while global reviewers can approve changes to any part of
+ the compiler or associated libraries, they still need approval for
+ their own patches from other maintainers or reviewers.
+ 
+ Also note that maintainership of any area covers changes to web pages,
+ docs, and the testsuite related to that.""",
+     },
+     'cpu': {
+         'preamble': """
+                         CPU Port Maintainers    (CPU alphabetical order)
+ """,
+         'template': "{u[subsystem]:{w[subsystem]}} {u[cn]:{w[cn]}} <{u[email]}>",
+         'widths': [('subsystem', 23), ('cn', 23)],
+         'filter': {
+             'role': "Maintainer",
+             'subclass': "CPU",
+             'order': ['subsystem', 'sn', 'cn', 'email'],
+         },
+     },
+     'os': {
+         'preamble': """
+                         OS Port Maintainers     (OS alphabetical order)
+ """,
+         'template': "{u[subsystem]:{w[subsystem]}} {u[cn]:{w[cn]}} <{u[email]}>",
+         'widths': [('subsystem', 23), ('cn', 23)],
+         'filter': {
+             'role': "Maintainer",
+             'subclass': "OS",
+             'order': ['subsystem', 'sn', 'cn', 'email'],
+         },
+     },
+     'lang': {
+         'preamble': """
+                         Language Front Ends Maintainers
+ """,
+         'template': "{u[subsystem]:{w[subsystem]}} {u[cn]:{w[cn]}} <{u[email]}>",
+         'widths': [('subsystem', 23), ('cn', 23)],
+         'filter': {
+             'role': "Maintainer",
+             'subclass': "Lang",
+             'order': ['subsystem', 'sn', 'cn', 'email'],
+         },
+     },
+     'various': {
+         'preamble': """
+                         Various Maintainers   (Area alphabetical order)
+ """,
+         'template': "{u[subsystem]:{w[subsystem]}}  {u[cn]:{w[cn]}} <{u[email]}>",
+         'widths': [('subsystem', 22), ('cn', 23)],
+         'filter': {
+             'role': "Maintainer",
+             'subclass': "Subsystem",
+             'order': ['subsystem', 'sn', 'cn', 'email'],
+         },
+         'posttext': """
+ Note that individuals who maintain parts of the compiler need approval to
+ check in changes outside of the parts of the compiler they maintain.""",
+     },
+     'reviewers': {
+         'preamble': """
+                         Reviewers
+ """,
+         'template': "{u[subsystem]:{w[subsystem]}}  {u[cn]:{w[cn]}} <{u[email]}>",
+         'widths': [('subsystem', 22), ('cn', 23)],
+         'filter': {
+             'role': "Reviewer",
+             'order': ['subsystem', 'sn', 'cn', 'email'],
+         },
+         'posttext': """
+ Note that while reviewers can approve changes to parts of the compiler
+ that they maintain, they still need approval for their own patches
+ from other maintainers or reviewers.""",
+     },
+     'writeafter': {
+         'preamble': """
+                         Write After Approval    (last name alphabetical order)
+ 
+ Name                            BZ account      Email
+ """,
+         'template': "{u[cn]:{w[cn]}} {u[account]:{w[account]}} <{u[email]}>",
+         'widths': [('cn', 31), ('account', 15)],
+         'filter': {
+             'role': "WriteAfter",
+             'order': ['sn', 'cn', 'account'],
+         },
+     },
+     'bz': {
+         'preamble': """
+                         Bug database only accounts
+ """,
+         'template': "{u[cn]:{w[cn]}} <{u[email]}>",
+         'widths': [('cn', 47)],
+         'filter': {
+             'role': "BZ",
+             'order': ['sn', 'cn', 'email'],
+         },
+     },
+     'dco': {
+         'preamble': """
+                         Contributing under the DCO
+ 
+ By adding your name and email to this section, you certify that all your
+ subsequent contributions to GCC are made under the terms of the Developer's
+ Certificate of Origin Version 1.1.  See https://gcc.gnu.org/dco.html for more
+ information.
+ 
+ """,
+         'template': "{u[cn]:{w[cn]}} <{u[email]}>",
+         'widths': [('cn', 47)],
+         'filter': {
+             'role': "DCO",
+             'order': ['sn', 'cn', 'email'],
+         },
+     },
+ }
+ 
+ 
+ def debug(msg):
+     global verbose
+     if verbose:
+         print(msg, file=sys.stderr)
+     return
+ 
+ 
+ def uni2alower(txt):
+     """Translate unicode text into its closest lower-case ASCII."""
+     return unidecode.unidecode(txt).lower()
+ 
+ 
+ def format_output(outfile, data):
+     global active_only
+     all_users = data['users']
+     if active_only:
+         all_users = [
+             u
+             for u in filter(
+                 lambda x: not x.get('inactive', False), data['users']
+             )
+         ]
+     for section in boilerplate.values():
+         if 'preamble' in section:
+             print(section['preamble'], file=outfile)
+         if 'filter' in section:
+             l = []
+             role = section['filter']['role']
+             subclass = section['filter'].get('subclass')
+             for u in all_users:
+                 for r in filter(lambda x: role in x, u['roles']):
+                     if subclass:
+                         sc = [
+                             s
+                             for s in filter(
+                                 lambda x: x['name'] == r[role],
+                                 data['subsystems'],
+                             )
+                         ]
+                         if len(sc) > 1:
+                             verbose(f"multiple matches for {r[role]}")
+                         if not 'class' in sc[0] or sc[0]['class'] != subclass:
+                             continue
+                     d = {
+                         'email': u['email'][0],
+                         'account': u.get('account', '-'),
+                         'sn': u['sn'],
+                         'cn': u['cn'],
+                         'subsystem': r[role] if type(r) == dict else None,
+                     }
+                     if role == 'DCO':
+                         d['email'] = r['DCO']
+                     if role == 'WriteAfter' and type(r) == dict:
+                         d['email'] = r['WriteAfter']
+                     elif type(r) == dict and 'email' in r:
+                         d['email'] = r['email']
+                     w = dict()
+                     col = 0
+                     overrun = 0
+                     for field, width in section['widths']:
+                         width -= overrun
+                         w[field] = max(width, 1)
+                         overrun = max(len(d[field]) - width, 0)
+                     d['w'] = w
+                     l.append(d)
+             kfn = itemgetter(*section['filter']['order'])
+             for u in sorted(
+                 l, key=lambda x: tuple(uni2alower(v) for v in kfn(x))
+             ):
+                 debug(str(u))
+                 print(section['template'].format(u=u, w=u['w']), file=outfile)
+         if 'posttext' in section:
+             print(section['posttext'], file=outfile)
+     return
+ 
+ 
+ def main():
+     global opts, verbose, active_only
+     optp = OptionParser(usage="Usage: %prog [<options>] user-data")
+     optp.add_option(
+         "-v", "--verbose",
+         action='store_true',
+         default=False,
+         dest='verbose',
+         help="Print some diagnostic messages",
+     )
+     optp.add_option(
+         "-a", "--active",
+         action='store_true',
+         default=False,
+         dest='active_only',
+         help="Omit inactive users",
+     )
+     optp.add_option(
+         "-o", "--output",
+         metavar="FILE",
+         default=None,
+         dest='outfilename',
+         help="Write to FILE instead of stdout",
+     )
+     opts, args = optp.parse_args()
+     if len(args) != 1:
+         optp.print_help()
+         sys.exit(1)
+     verbose = opts.verbose
+     active_only = opts.active_only
+     data = maintutils.load(args[0])
+     maintutils.validate(data)
+     if opts.outfilename:
+         out_file = open(opts.outfilename, "w", encoding="utf-8")
+     else:
+         out_file = sys.stdout
+     format_output(out_file, data)
+     return 0
+ 
+ 
+ if __name__ == "__main__":
+     sys.exit(main())
diff -Nrcpad gcc-17-20260705/contrib/maintainer_utils.py gcc-17-20260712/contrib/maintainer_utils.py
*** gcc-17-20260705/contrib/maintainer_utils.py	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/contrib/maintainer_utils.py	Sun Jul 12 22:32:05 2026
***************
*** 0 ****
--- 1,288 ----
+ #!/usr/bin/env python3
+ 
+ # Utilities for manipulating/testing the MAINTAINERS.yml data.
+ 
+ # Copyright (C) 2026 Free Software Foundation, Inc.
+ #
+ # This file is part of GCC.
+ #
+ # GCC is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+ # the Free Software Foundation; either version 3, or (at your option)
+ # any later version.
+ #
+ # GCC is distributed in the hope that it will be useful,
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ # GNU General Public License for more details.
+ #
+ # You should have received a copy of the GNU General Public License
+ # along with GCC; see the file COPYING.  If not, write to
+ # the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+ # Boston, MA 02110-1301, USA.
+ 
+ import json
+ import jsonschema
+ import sys
+ import unidecode
+ import yaml
+ 
+ # Prefer the libYAML implementations if available.  Fall back to the
+ # pure python versions as a backup.
+ try:
+     from yaml import CLoader as Loader, CDumper as Dumper
+ except:
+     from yaml import Loader, Dumper
+ 
+ label_pattern = '[a-zA-Z][-+a-zA-Z0-9]*(/[a-zA-Z][-+a-zA-Z0-9]*)+'
+ 
+ maintainer_schema = {
+     '$schema': 'https://json-schema.org/draft/2020-12/schema',
+     'type': 'object',
+     'properties': {
+         'users': {
+             'type': 'array',
+             'items': {
+                 'type': 'object',
+                 'properties': {
+                     'sn': {
+                         'type': 'string',
+                         'minlength': 1,
+                     },
+                     'cn': {
+                         'type': 'string',
+                         'minlength': 1,
+                     },
+                     'email': {
+                         'type': 'array',
+                         'items': {
+                             'type': 'string',
+                             'format': 'email',
+                         },
+                     },
+                     'roles': {
+                         'type': 'array',
+                         'items': {
+                             'oneOf': [
+                                 {
+                                     'type': 'string',
+                                     'enum': ['Global', 'WriteAfter', 'BZ'],
+                                 },
+                                 {
+                                     'type': 'object',
+                                     'properties': {
+                                         'WriteAfter': {
+                                             'type': 'string',
+                                             'format': 'email',
+                                         },
+                                         'DCO': {
+                                             'type': 'string',
+                                             'format': 'email',
+                                         },
+                                     },
+                                     'additionalProperties': False,
+                                 },
+                                 {
+                                     'type': 'object',
+                                     'properties': {
+                                         'Maintainer': {
+                                             'type': 'string',
+                                         },
+                                         'Reviewer': {
+                                             'type': 'string',
+                                         },
+                                         'email': {
+                                             'type': 'string',
+                                             'format': 'email',
+                                         },
+                                     },
+                                     'additionalProperties': False,
+                                     'oneOf': [
+                                         {'required': ["Maintainer"]},
+                                         {'required': ["Reviewer"]},
+                                     ],
+                                 },
+                             ],
+                         },
+                         'minlength': 1,
+                     },
+                     'account': {
+                         'type': 'string',
+                         'minlength': 1,
+                         'pattern': '[a-zA-Z][a-zA-Z0-9]*',
+                     },
+                     'aliases': {
+                         'type': 'array',
+                         'minlength': 1,
+                         'items': {
+                             'type': 'string',
+                             'minlength': 1,
+                         },
+                     },
+                     'inactive': {
+                         'type': 'boolean',
+                     },
+                 },
+                 'additionalProperties': False,
+                 'required': ['sn', 'cn', 'email', 'roles'],
+             },
+         },
+         'subsystems': {
+             'type': 'array',
+             'items': {
+                 'type': 'object',
+                 'properties': {
+                     'name': {
+                         'type': 'string',
+                         'minlength': 1,
+                     },
+                     'class': {
+                         'type': 'string',
+                         'minlength': 1,
+                     },
+                     'labels': {
+                         'type': 'array',
+                         # Disabled until we populate the labels
+                         # 'minlength': 1,
+                         'items': {
+                             'type': 'string',
+                             'minlength': 3,
+                             'pattern': label_pattern,
+                         },
+                     },
+                 },
+                 'additionalProperties': False,
+                 'required': ['name', 'labels'],
+             },
+         },
+     },
+ }
+ 
+ error_count = 0
+ warning_count = 0
+ 
+ 
+ def _fatal(msg):
+     print(f"fatal: {msg}", file=sys.stderr)
+     sys.exit(1)
+ 
+ 
+ def _error(msg):
+     global error_count
+     print(f"error: {msg}", file=sys.stderr)
+     error_count += 1
+ 
+ 
+ def _warning(msg):
+     global warning_count
+     print(f"warning: {msg}", file=sys.stderr)
+     warning_count += 1
+ 
+ 
+ def _format_path(path, data):
+     """Try to turn a validation error path into something more readable"""
+     elts = [""]
+     cur = data
+     try:
+         for elt in path:
+             if isinstance(cur, list) and isinstance(elt, int):
+                 item = cur[elt]
+                 if isinstance(item, dict) and 'cn' in item:
+                     elts[-1] += f"[cn = {item['cn']}]"
+                 elif isinstance(item, dict) and 'name' in item:
+                     elts[-1] += f"[name = {item['name']}]"
+                 else:
+                     elts[-1] += f"[(anon index): {elt}]"
+                 cur = item
+             else:
+                 cur = cur[elt]
+                 elts.append(str(elt))
+     except Exception as e:
+         print('/'.join(elts))
+         raise e
+     if elts[0] == "":
+         elts = elts[1:]
+     return '/'.join(elts)
+ 
+ 
+ def _check_schema(data):
+     try:
+         schema = jsonschema.validators.Draft202012Validator(maintainer_schema)
+         errors = sorted(schema.iter_errors(data), key=lambda e: e.path)
+         for err in errors:
+             _error(f"{_format_path(err.path, data)}: {err.message}")
+     except jsonschema.exceptions.SchemaError as e:
+         _fatal(str(e))
+     return
+ 
+ 
+ def validate(data):
+     """Check the data against the schema and our own consistency checks"""
+     _check_schema(data)
+     # The data conforms to the expected schema, so now run some data
+     # validation checks.
+ 
+     # Maintainer and Reviewer roles need to match entries in the
+     # subsystems list; Maintainer entires must also have a class entry, though
+     # that is optional for Reviewers.
+     for u in data['users']:
+         # Users with the 'BZ' role should not have any other roles; we
+         # can quickly skip the additional checks if that is the case.
+         if len(u['roles']) == 1 and u['roles'][0] == 'BZ':
+             continue
+         seen_writeafter = False
+         only_dco = True
+         for r in u['roles']:
+             if isinstance(r, str):
+                 if r == 'BZ':
+                     _error(
+                         f"User '{u['cn']}' has 'BZ' role as well as others."
+                     )
+                 if r == 'WriteAfter':
+                     seen_writeafter = True
+                 only_dco = False
+                 continue
+             if 'WriteAfter' in r:
+                 seen_writeafter = True
+             need_class = True
+             if 'DCO' in r:
+                 continue
+             only_dco = False
+             n = r.get('Maintainer')
+             if not n:
+                 need_class = False
+                 n = r.get('Reviewer')
+             if n:
+                 subsystems = list(
+                     filter(lambda s: s['name'] == n, data['subsystems'])
+                 )
+                 if len(subsystems) == 1:
+                     if need_class and not 'class' in subsystems[0]:
+                         _error(f"subsystem '{n}' missing a class.")
+                 elif len(subsystems) == 0:
+                     _error(f"No subsystem entry for '{n}'.")
+                 else:
+                     _error(f"Multiple subsystem entries for '{n}'.")
+         if not seen_writeafter and not only_dco:
+             _error(f"User '{u['cn']}' lacks WriteAfter role.")
+     if error_count:
+         sys.exit(1)
+     return
+ 
+ 
+ def load(file):
+     with open(file, "r", encoding="utf-8") as f:
+         data = yaml.load(f, Loader=Loader)
+     return data
+ 
+ 
+ def main():
+     if len(sys.argv) != 2:
+         print(f"Usage: {sys.argv[0]} path-to-MAINTAINERS.yml")
+         return 1
+     validate(load(sys.argv[1]))
+     return 0
+ 
+ 
+ if __name__ == "__main__":
+     sys.exit(main())
diff -Nrcpad gcc-17-20260705/contrib/prerequisites.md5 gcc-17-20260712/contrib/prerequisites.md5
*** gcc-17-20260705/contrib/prerequisites.md5	Sun Jul  5 22:32:05 2026
--- gcc-17-20260712/contrib/prerequisites.md5	Sun Jul 12 22:32:05 2026
*************** c1cd6ef33085e9cb818b9b08371f9000  gmp-6.
*** 2,5 ****
  afe8268360bc8702fbc8297d351c8b5e  mpfr-4.2.2.tar.bz2
  5c9bc658c9fd0f940e8e3e0f09530c62  mpc-1.3.1.tar.gz
  dd2f7b78e118c25bd96134a52aae7f4d  isl-0.24.tar.bz2
! c092102240f8f66134d22718421d5115  gettext-0.22.tar.gz
--- 2,5 ----
  afe8268360bc8702fbc8297d351c8b5e  mpfr-4.2.2.tar.bz2
  5c9bc658c9fd0f940e8e3e0f09530c62  mpc-1.3.1.tar.gz
  dd2f7b78e118c25bd96134a52aae7f4d  isl-0.24.tar.bz2
! 4ba57b13fc49183a9b8ef6a691571a90  gettext-1.0.tar.gz
diff -Nrcpad gcc-17-20260705/contrib/prerequisites.sha512 gcc-17-20260712/contrib/prerequisites.sha512
*** gcc-17-20260705/contrib/prerequisites.sha512	Sun Jul  5 22:32:05 2026
--- gcc-17-20260712/contrib/prerequisites.sha512	Sun Jul 12 22:32:05 2026
***************
*** 2,5 ****
  0176e50808dcc07afbf5bc3e38bf9b7b21918e5f194aa0bfd860d99b00c470630aef149776c4be814a61c44269c3a5b9a4b0b1c0fcd4c9feb1459d8466452da8  mpfr-4.2.2.tar.bz2
  4bab4ef6076f8c5dfdc99d810b51108ced61ea2942ba0c1c932d624360a5473df20d32b300fc76f2ba4aa2a97e1f275c9fd494a1ba9f07c4cb2ad7ceaeb1ae97  mpc-1.3.1.tar.gz
  aab3bddbda96b801d0f56d2869f943157aad52a6f6e6a61745edd740234c635c38231af20bc3f1a08d416a5e973a90e18249078ed8e4ae2f1d5de57658738e95  isl-0.24.tar.bz2
! e2a58dde1cae3e6b79c03e7ef3d888f7577c1f4cba283b3b0f31123ceea8c33d7c9700e83de57104644de23e5f5c374868caa0e091f9c45edbbe87b98ee51c04  gettext-0.22.tar.gz
--- 2,5 ----
  0176e50808dcc07afbf5bc3e38bf9b7b21918e5f194aa0bfd860d99b00c470630aef149776c4be814a61c44269c3a5b9a4b0b1c0fcd4c9feb1459d8466452da8  mpfr-4.2.2.tar.bz2
  4bab4ef6076f8c5dfdc99d810b51108ced61ea2942ba0c1c932d624360a5473df20d32b300fc76f2ba4aa2a97e1f275c9fd494a1ba9f07c4cb2ad7ceaeb1ae97  mpc-1.3.1.tar.gz
  aab3bddbda96b801d0f56d2869f943157aad52a6f6e6a61745edd740234c635c38231af20bc3f1a08d416a5e973a90e18249078ed8e4ae2f1d5de57658738e95  isl-0.24.tar.bz2
! 664c3b1985cb7d1e7ed443e036a6c7f8c1f47354720d13c2db2c2cf8a85136d0ffc2cc920dce1240d688f706653f647749ce29f69eb0bb659e043b499f9c47eb  gettext-1.0.tar.gz
diff -Nrcpad gcc-17-20260705/gcc/ChangeLog gcc-17-20260712/gcc/ChangeLog
*** gcc-17-20260705/gcc/ChangeLog	Sun Jul  5 22:32:05 2026
--- gcc-17-20260712/gcc/ChangeLog	Sun Jul 12 22:32:06 2026
***************
*** 1,3 ****
--- 1,898 ----
+ 2026-07-11  Surya Kumari Jangala  <jskumari@linux.ibm.com>
+ 
+ 	Revert:
+ 	2026-07-11  Surya Kumari Jangala  <jskumari@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-cpus.def (FUTURE_MASKS_SERVER): Add OPTION_MASK_DMF.
+ 	(POWERPC_MASKS): Likewise.
+ 	* config/rs6000/rs6000.cc (rs6000_option_override_internal): Enable
+ 	OPTION_MASK_DMF by default when TARGET_FUTURE is set and the
+ 	flag was not explicitly given; emit an error and clear the flag
+ 	when -mdense-math is requested on a non-future target.
+ 	(rs6000_opt_masks): Add "dense-math" entry for OPTION_MASK_DMF.
+ 	* config/rs6000/rs6000.opt (mdense-math): New option backed by Mask(DMF).
+ 	* doc/invoke.texi: Add -mdense-math.
+ 
+ 2026-07-11  Surya Kumari Jangala  <jskumari@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-cpus.def (FUTURE_MASKS_SERVER): Add OPTION_MASK_DMF.
+ 	(POWERPC_MASKS): Likewise.
+ 	* config/rs6000/rs6000.cc (rs6000_option_override_internal): Enable
+ 	OPTION_MASK_DMF by default when TARGET_FUTURE is set and the
+ 	flag was not explicitly given; emit an error and clear the flag
+ 	when -mdense-math is requested on a non-future target.
+ 	(rs6000_opt_masks): Add "dense-math" entry for OPTION_MASK_DMF.
+ 	* config/rs6000/rs6000.opt (mdense-math): New option backed by Mask(DMF).
+ 	* doc/invoke.texi: Add -mdense-math.
+ 
+ 2026-07-10  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	PR tree-optimization/57371
+ 	* fold-const.cc (fold_cmp_float_cst_p): New helper function.
+ 	* fold-const.h (fold_cmp_float_cst_p): Prototype here.
+ 	* match.pd ((FTYPE) N CMP CST): Use the new helper
+ 	fold_cmp_float_cst_p to check that transformation to an integer
+ 	comparison is safe.
+ 
+ 2026-07-10  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	PR target/48609
+ 	* expr.cc (emit_group_load_1): When passing a complex value in an
+ 	integer mode of the same size, explicitly construct (hi<<N)+lo to
+ 	avoid spilling to memory before reload.
+ 
+ 2026-07-10  Roger Sayle  <roger@nextmovesoftware.com>
+ 	    Richard Biener  <rguenther@suse.de>
+ 
+ 	PR target/99668
+ 	* expr.cc (try_expand_complex_as_vector): Try to use vec_init_optab
+ 	to convert a complex number to a two-component vector with the same
+ 	inner type.
+ 	(expand_expr_real_1) <case VIEW_CONVERT_EXPR>: Check whether the
+ 	above function can be used to implement this VIEW_CONVERT_EXPR.
+ 
+ 2026-07-10  Jim Lin  <jim@andestech.com>
+ 
+ 	* common/config/riscv/riscv-common.cc
+ 	(riscv_multi_lib_info_t::parse): Remove early-out for multilibs
+ 	matching only the default march/mabi.
+ 
+ 2026-07-10  Pengfei Li  <Pengfei.Li2@arm.com>
+ 
+ 	* match.pd: Simplify vector permute and insert patterns.
+ 
+ 2026-07-10  Kael Andrew Franco  <kaelfandrew@gmail.com>
+ 
+ 	PR tree-optimization/125738
+ 	PR tree-optimization/64130
+ 	* match.pd: Use tree_expr_nonnegative_p for (X / Y) (==,!=) 0 -> X (<,>=) Y.
+ 
+ 2026-07-10  Léo Hardt  <leom.hardt@inf.ufrgs.br>
+ 
+ 	* sel-sched-ir.cc (struct succs_info): Removed
+ 	unused variable current_succs.
+ 
+ 2026-07-10  Daniel Barboza  <daniel.barboza@oss.qualcomm.com>
+ 
+ 	PR tree-optimization/124808
+ 	* match.pd(`(A >> CST1) CMP CST2`): New pattern.
+ 
+ 2026-07-10  Thomas Schwinge  <tschwinge@baylibre.com>
+ 
+ 	* system.h [INCLUDE_ITERATOR]: '#include <iterator>'.
+ 
+ 2026-07-10  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* config/i386/i386.opt.urls: Regenerate.
+ 
+ 2026-07-10  Konstantinos Eleftheriou  <konstantinos.eleftheriou@vrull.eu>
+ 
+ 	PR rtl-optimization/117922
+ 	* fold-mem-offsets.cc (INCLUDE_ALGORITHM):  Added definition.
+ 	(INCLUDE_FUNCTIONAL): Likewise.
+ 	(class pass_fold_mem_offsets): Moved to bottom of file.
+ 	(class change_info): New.
+ 	(def_shadowed_by_cond_exec_p): New.
+ 	(get_single_def_in_bb): Converted to RTL-SSA.
+ 	(get_fold_mem_offset_root): Converted to RTL-SSA.
+ 	(get_uses): Removed.
+ 	(fold_offsets): Converted to RTL-SSA.
+ 	(fold_offsets_value): New.
+ 	(fold_offsets_1): Converted to RTL-SSA.
+ 	(has_foldable_uses_p): Converted to RTL-SSA.
+ 	(get_fold_mem_root): Removed.
+ 	(insn_uses_not_in_bitmap): New.
+ 	(drop_unsafe_candidates): New.
+ 	(do_commit_offset): Converted to RTL-SSA.
+ 	(do_analysis): Removed.
+ 	(do_commit_insn): Converted to RTL-SSA.
+ 	(do_fold_info_calculation): Removed.
+ 	(sort_changes): New.
+ 	(struct regno_changes): New.
+ 	(sort_pairs): New.
+ 	(do_check_validity): Removed.
+ 	(get_last_def): New.
+ 	(move_uses_to_prev_def): New.
+ 	(compute_validity_closure): Removed.
+ 	(change_in_vec_p): New.
+ 	(cancel_changes_for_group): New.
+ 	(find_keys_to_remove): New.
+ 	(free_changes_info): New.
+ 	(update_insns): New.
+ 	(fold_mem_offsets_1): New.
+ 	(pass_fold_mem_offsets::execute): Moved to bottom of file.
+ 	(fold_mem_offsets): New.
+ 
+ 2026-07-10  Thomas Schwinge  <tschwinge@baylibre.com>
+ 
+ 	* config/nvptx/nvptx.cc (flexible_array_member_type_p): Rename to
+ 	'nvptx_flexible_array_member_type_p'.
+ 
+ 2026-07-10  Jeff Law  <jeffrey.law@oss.qualcomm.com>
+ 
+ 	* config/m68k/m68k.h (ASM_PREFERRED_EH_DATA_FORMAT): Adjust parens
+ 	so they wrap the macro parameter.
+ 
+ 2026-07-10  Pan Li  <pan2.li@intel.com>
+ 
+ 	* config/riscv/riscv-protos.h (is_frac_vlmul_p): Add new func
+ 	decl to predicate frac vlmul for a mode.
+ 	* config/riscv/riscv-v.cc (is_frac_vlmul_p): Add new func impl
+ 	for above.
+ 	(riscv_v_widen_constraint_ok): Add Source and Dest lmul less
+ 	and equal 1 handling.
+ 	* config/riscv/vector.md: Leverage widen constraint Wvr.
+ 
+ 2026-07-10  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR tree-optimization/116860
+ 	PR tree-optimization/114326
+ 	* match.pd (`((a ^ b) & c) cmp d || a != b`): Expand
+ 	to support bit_and and fix up the :c.
+ 
+ 2026-07-09  Paul-Antoine Arras  <parras@baylibre.com>
+ 	    Thomas Schwinge  <tschwinge@baylibre.com>
+ 
+ 	* builtin-types.def (BT_FN_COMPLEX_INT): Remove.
+ 	(BT_FN_COMPLEX_INT_ULONGLONG): New.
+ 	* omp-builtins.def (BUILT_IN_GOMP_LOOP_STATIC_WORKSHARING): Use
+ 	BT_FN_COMPLEX_INT_ULONGLONG.
+ 	(BUILT_IN_GOMP_LOOP_STATIC_WORKSHARING_START): Likewise.
+ 	(BUILT_IN_GOMP_DISTRIBUTE_STATIC_WORKSHARING): Likewise.
+ 	(BUILT_IN_GOMP_DISTRIBUTE_STATIC_WORKSHARING_START): Likewise.
+ 	* omp-expand.cc (expand_omp_for_static_nochunk): Move worksharing
+ 	builtin call after iteration count computation; pass n as niter.
+ 	(expand_omp_for_static_chunk): Likewise.
+ 
+ 2026-07-09  Paul-Antoine Arras  <parras@baylibre.com>
+ 
+ 	* common.opt (fopenmp-ompt): New option.
+ 	(fopenmp-ompt-detailed): New option.
+ 	* common.opt.urls: Regenerate.
+ 	* doc/invoke.texi (Option Summary): Add -fopenmp-ompt and
+ 	-fopenmp-ompt-detailed.
+ 	(OpenMP and OpenACC Options): Document -fopenmp-ompt and
+ 	-fopenmp-ompt-detailed.
+ 	* omp-builtins.def (BUILT_IN_GOMP_SINGLE_START_WITH_END): New builtin.
+ 	(BUILT_IN_GOMP_SINGLE_END): New builtin.
+ 	(BUILT_IN_GOMP_MASKED_END): New builtin.
+ 	(BUILT_IN_GOMP_LOOP_STATIC_WORKSHARING_START): New builtin.
+ 	(BUILT_IN_GOMP_LOOP_STATIC_WORKSHARING_END): New builtin.
+ 	(BUILT_IN_GOMP_LOOP_STATIC_WORKSHARING_DISPATCH): New builtin.
+ 	(BUILT_IN_GOMP_DISTRIBUTE_STATIC_WORKSHARING_START): New builtin.
+ 	(BUILT_IN_GOMP_DISTRIBUTE_STATIC_WORKSHARING_END): New builtin.
+ 	(BUILT_IN_GOMP_DISTRIBUTE_STATIC_WORKSHARING_DISPATCH): New builtin.
+ 	* omp-expand.cc (expand_omp_for_static_nochunk): With -fopenmp-ompt,
+ 	emit _start and _end variants instead of the plain worksharing call;
+ 	with -fopenmp-ompt-detailed, also emit _dispatch.
+ 	(expand_omp_for_static_chunk): Likewise.
+ 	* omp-low.cc (lower_omp_single_simple): With -fopenmp-ompt, use
+ 	GOMP_single_start_with_end instead of GOMP_single_start.
+ 	(lower_omp_single): With -fopenmp-ompt, emit GOMP_single_end.
+ 	(lower_omp_master): With -fopenmp-ompt, emit GOMP_masked_end.
+ 	* opts.cc (finish_options): Diagnose -fopenmp-ompt and
+ 	-fopenmp-ompt-detailed used without -fopenmp.
+ 
+ 2026-07-09  Richard Sandiford  <rdsandiford@googlemail.com>
+ 
+ 	PR debug/126169
+ 	* rtl.h (rtx_def::u2): Add value_uid to the union.
+ 	(CSELIB_VAL_UID): New macro.
+ 	* cselib.h (cselib_val::HASH_MASK): Delete.
+ 	(cselib_val::hash): Restore to a full int.
+ 	(cselib_val::uid): Delete.
+ 	(canonical_cselib_val): Use CSELIB_VAL_UID instead of cselib_val::uid.
+ 	* alias.cc (refs_newer_value_p): Likewise.
+ 	* dse.cc (canon_address): Likewise.
+ 	* print-rtl.cc (rtx_writer::print_rtx_operand_code_0): Likewise.
+ 	* var-tracking.cc (dv_uid, canon_value_cmp): Likewise.
+ 	(variable_post_merge_new_vals): Likewise.
+ 	* cselib.cc (new_elt_loc_list, new_cselib_val): Likewise.
+ 	(cselib_lookup): Likewise.
+ 	(cselib_find_slot): Remove use of cselib_val::HASH_MASK.
+ 
+ 2026-07-09  Andreas Schwab  <schwab@linux-m68k.org>
+ 
+ 	PR target/126121
+ 	* config/m68k/m68k.md (bsetmemqi, *bsetmemqi_ext, bclrmemqi)
+ 	(*bclrmemqi_ext): Add AND with 7 around bit number.
+ 
+ 2026-07-09  Karl Meakin  <karl.meakin@arm.com>
+ 
+ 	* bitmap.h: Replace uses of `CONSTEXPR` with `constexpr`.
+ 	* config/aarch64/aarch64-acle-builtins.cc: Likewise.
+ 	* config/aarch64/aarch64-builtins.cc: Likewise.
+ 	* config/aarch64/aarch64-protos.h: Likewise.
+ 	* config/aarch64/aarch64-sve-builtins-base.cc: Likewise.
+ 	* config/aarch64/aarch64-sve-builtins-functions.h: Likewise.
+ 	* config/aarch64/aarch64-sve-builtins-shapes.cc: Likewise.
+ 	* config/aarch64/aarch64-sve-builtins-sme.cc: Likewise.
+ 	* config/aarch64/aarch64-sve-builtins-sve2.cc: Likewise.
+ 	* config/aarch64/aarch64.cc: Likewise.
+ 	* config/aarch64/driver-aarch64.cc: Likewise.
+ 	* config/arm/arm-mve-builtins-base.cc: Likewise.
+ 	* config/arm/arm-mve-builtins-functions.h: Likewise.
+ 	* config/arm/arm-mve-builtins-shapes.cc: Likewise.
+ 	* config/arm/arm-mve-builtins.cc: Likewise.
+ 	* config/riscv/andes-vector-builtins-bases.cc: Likewise.
+ 	* config/riscv/riscv-protos.h: Likewise.
+ 	* config/riscv/riscv-vector-builtins-bases.cc: Likewise.
+ 	* config/riscv/riscv-vector-builtins-shapes.cc: Likewise.
+ 	* config/riscv/riscv-vector-builtins.cc: Likewise.
+ 	* config/riscv/riscv-vector-builtins.h: Likewise.
+ 	* config/riscv/sifive-vector-builtins-bases.cc: Likewise.
+ 	* machmode.h: Likewise.
+ 
+ 2026-07-09  Philipp Tomsich  <philipp.tomsich@vrull.eu>
+ 
+ 	* doc/params.texi (widening-mul-defer-fma): Document.
+ 	* params.opt (-param=widening-mul-defer-fma=): New param.
+ 	* tree-ssa-math-opts.cc (math_opts_dom_walker::after_dom_children):
+ 	Gate fma_deferring_state's enable predicate on
+ 	param_widening_mul_defer_fma on top of param_avoid_fma_max_bits.
+ 	* config/aarch64/aarch64-tuning-flags.def (AVOID_CROSS_LOOP_FMA):
+ 	Update the comment for the widening-mul-defer-fma effect.
+ 	* config/aarch64/aarch64.cc (aarch64_override_options_internal):
+ 	Inside the AARCH64_EXTRA_TUNE_AVOID_CROSS_LOOP_FMA block, set
+ 	param_widening_mul_defer_fma to 0.
+ 
+ 2026-07-09  Nathan Sidwell  <nathan@acm.org>
+ 
+ 	* Makefile.in (genprogrtl, genprogmd, genprogerr, genprog): Append,
+ 	rather than set.
+ 	* config/riscv/t-riscv: Delete genrvv-type-indexer workaround rule,
+ 	it is no longer needed.
+ 
+ 2026-07-09  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	PR ipa/125207
+ 	* ipa-cp.cc (decide_about_value): Add detailed dumping about skipping
+ 	a value when there are no edges for it.  Make dumping about skipping
+ 	because of growth limit violation consistent with other cases.
+ 	(decide_whether_version_node): Only create all-context nodes for local
+ 	nodes, remove the logic doing it in other cases, allow cloning for
+ 	single constant lattices for non-local nodes.  Adjust dumping.
+ 
+ 2026-07-09  Jim Lin  <jim@andestech.com>
+ 
+ 	* config/riscv/riscv-string.cc (riscv_vector_expand_block_move):
+ 	Gate the memcpy path on riscv_memcpy_size_threshold instead of
+ 	riscv_memmove_size_threshold.
+ 
+ 2026-07-09  Jovan Dmitrovic  <jovan.dmitrovic@htecgroup.com>
+ 
+ 	* tree-ssa-loop-ivopts.cc (ivopts_estimate_reg_pressure):
+ 	Return zero if there are enough registers to store new
+ 	invariants and induction variables.
+ 
+ 2026-07-09  Eikansh Gupta  <eikansh.gupta@oss.qualcomm.com>
+ 
+ 	PR tree-optimization/112472
+ 	* match.pd ((trunc)copysign ((extend)x, CST) --> copysign (x, -1.0/1.0)):
+ 	New pattern.
+ 
+ 2026-07-09  Zhou Xuhang  <zhouxh2002@gmail.com>
+ 
+ 	* match.pd: Canonicalize shifted high-half unsigned multiply
+ 	overflow checks to widened comparisons.  Simplify widened unsigned
+ 	multiply comparison against the narrow type maximum to IFN_MUL_OVERFLOW.
+ 
+ 2026-07-09  Avinash Jayakar  <avinashd@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-builtins.def: Move AES builtins to future-vsx
+ 	stanza.
+ 	* doc/extend.texi: Add subheading for AES builtins.
+ 
+ 2026-07-09  Stefan Schulze Frielinghaus  <stefansf@gcc.gnu.org>
+ 
+ 	* config.gcc: Remove target s390-*. Don't accept
+ 	--with-mode=esa anymore.
+ 	* config.host: Remove target s390-*.
+ 	* config/host-linux.cc (TRY_EMPTY_VM_SPACE): Remove definition
+ 	for s390.
+ 	* config/s390/2827.md: Remove scheduling information for
+ 	mnemonics which are only used by -m31 but not by -m64.
+ 	* config/s390/2964.md: Ditto.
+ 	* config/s390/3906.md: Ditto.
+ 	* config/s390/3931.md: Ditto.
+ 	* config/s390/8561.md: Ditto.
+ 	* config/s390/9175.md: Ditto.
+ 	* config/s390/constraints.md (ZL): Remove TARGET_64BIT test.
+ 	* config/s390/driver-native.cc (s390_host_detect_local_cpu):
+ 	Remove handling for -mesa/-mzarch.
+ 	* config/s390/htmxlintrin.h (__TM_failure_address): Remove
+ 	-m31 part.
+ 	* config/s390/linux.h: Remove -m31 parts.
+ 	* config/s390/predicates.md: Ditto.
+ 	* config/s390/s390-builtins.def: Rename RTL expander name for
+ 	s390_vsce[fg].
+ 	* config/s390/s390-c.cc (s390_cpu_cpp_builtins): Remove
+ 	TARGET_{64BIT,ZARCH} tests.
+ 	* config/s390/s390-d.cc (s390_d_target_versions): Remove
+ 	TARGET_64BIT test.
+ 	* config/s390/s390.cc: Remove -m31 parts.  In particular, there
+ 	is no need to distinguish between 64-bit registers in ABI
+ 	contexts anymore which is why UNITS_PER_WORD and UNITS_PER_LONG
+ 	always equal, now.  Hence, replace UNITS_PER_LONG by
+ 	UNITS_PER_WORD.
+ 	* config/s390/s390.h: Ditto.
+ 	* config/s390/s390.md: Ditto. Mode iterator GPR is replaced by
+ 	DSI. Likewise, DGPR by new mode iterator TDSI.  Remove mode
+ 	iterators P, DW, W because they are singletons, now.
+ 	* config/s390/s390.opt: Keep -m64 and -mzarch for backwards
+ 	compatibility.  Mark -m31 and -mesa as undocumented.
+ 	* config/s390/s390.opt.urls: Regenerate.
+ 	* config/s390/t-linux64: Remove -m31 parts.
+ 	* config/s390/tpf.h (POINTERS_EXTEND_UNSIGNED): This is only
+ 	required for TPF which is why it is moved from s390.h here.
+ 	(TARGET_DEFAULT): Remove MASK_64BIT and MASK_ZARCH.
+ 	* config/s390/vector.md: Remove -m31 parts.
+ 	* config/s390/vx-builtins.md
+ 	(vec_scatter_element<V_HW_2:mode>_SI): There is no need for
+ 	multiplexing different address sizes for vec_scatter_element
+ 	anymore.
+ 	(vec_scatter_element<V_HW_32_64:mode>): Ditto.
+ 	* configure: Regenerate.
+ 	* configure.ac: Remove target s390-*.
+ 	* doc/install.texi: Remove mentions of s390 without also
+ 	referring to s390x.
+ 	* doc/invoke.texi: Remove options -m31 and -mesa.  Document that
+ 	-m64 and -mzarch are the defaults, now, and that they don't have
+ 	any additional effect when explicitly specified.
+ 	* config/s390/s390x.h: Removed.
+ 
+ 2026-07-08  Jim Lin  <jim@andestech.com>
+ 
+ 	* config/riscv/riscv.h (TARGET_SFB_ALU): Add andes_45_series.
+ 
+ 2026-07-08  Uros Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/126148
+ 	* config/i386/i386-expand.cc (ix86_gen_ccmp_first): Restrict
+ 	floating-point modes accepted for ccmp according to the
+ 	available floating-point instruction set.
+ 
+ 2026-07-08  Jeff Law  <jeffrey.law@oss.qualcomm.com>
+ 
+ 	PR rtl-optimization/126136
+ 	* ifcvt.cc (noce_try_store_flag_logical): Fix for STORE_FLAG_VALUE
+ 	of -1.
+ 
+ 2026-07-08  Jim Lin  <jim@andestech.com>
+ 
+ 	* config/riscv/spacemit-x60.md (spacemit_x60_alu): Remove cpop
+ 	from the type list.
+ 
+ 2026-07-08  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vect-slp.cc (vect_build_slp_tree_1): Remove group_size
+ 	argument and adjust.
+ 	(vect_build_slp_tree_2): Likewise.
+ 	(vect_build_slp_tree): Likewise.
+ 	(optimize_load_redistribution_1): Likewise.
+ 	(vect_build_slp_instance): Likewise.
+ 	(vect_analyze_slp_reduc_chain): Likewise.
+ 	(vect_analyze_slp_reduction): Likewise.
+ 	(vect_analyze_slp_reduction_group): Likewise.
+ 	(vect_analyze_slp_instance): Likewise.
+ 	(vect_lower_load_permutations): Likewise.
+ 
+ 2026-07-08  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/126150
+ 	* tree-cfg.cc (replace_uses_by): Delay purging of EH edges
+ 	until after FOR_EACH_IMM_USE_STMT finished.
+ 
+ 2026-07-08  Martin Uecker  <uecker@tugraz.at>
+ 
+ 	* tree.h (flexible_array_member_type_p): New helper function.
+ 	* tree.cc (flexible_array_member_type_p): New helper function.
+ 	(flexible_array_type_p): Use new helper function.
+ 
+ 2026-07-08  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/126159
+ 	* tree-data-ref.cc (dr_analyze_indices): Handle non-aggregate
+ 	union field accesses.
+ 	(access_fn_component_p): Adjust.
+ 
+ 2026-07-08  Pengfei Li  <Pengfei.Li2@arm.com>
+ 
+ 	* match.pd: Simplify SAD(x, x, acc) into acc.
+ 
+ 2026-07-08  Evgeny Karpov  <evgeny.karpov@arm.com>
+ 
+ 	* config/i386/cygming.h (TARGET_ASM_FUNCTION_END_PROLOGUE):
+ 	Rename.
+ 	(TARGET_ASM_EMIT_EXCEPT_PERSONALITY): Likewise.
+ 	(TARGET_ASM_INIT_SECTIONS): Likewise.
+ 	(SUBTARGET_ASM_UNWIND_INIT): Likewise.
+ 	(ASM_DECLARE_FUNCTION_SIZE): Likewise.
+ 	(ASM_DECLARE_COLD_FUNCTION_SIZE): Likewise.
+ 	* config/i386/i386-protos.h (i386_pe_end_function):
+ 	Remove declarations.
+ 	(i386_pe_end_cold_function): Likewise.
+ 	(i386_pe_seh_init): Likewise.
+ 	(i386_pe_seh_end_prologue): Likewise.
+ 	(i386_pe_seh_cold_init): Likewise.
+ 	(i386_pe_seh_emit_except_personality): Likewise.
+ 	(i386_pe_seh_init_sections): Likewise.
+ 	* config/mingw/winnt.cc (defined): Update.
+ 	(struct seh_frame_state): Move to mingw/winnt.h.
+ 	(i386_pe_seh_init): Rename into ...
+ 	(mingw_pe_seh_init): ... this.
+ 	(i386_pe_seh_end_prologue): Rename into ...
+ 	(mingw_pe_seh_end_prologue): ... this.
+ 	(i386_pe_seh_cold_init): Rename into ...
+ 	(mingw_pe_seh_cold_init): ... this.
+ 	(i386_pe_seh_fini): Rename into ...
+ 	(mingw_pe_seh_fini): ... this.
+ 	(seh_emit_stackalloc): Rename into ...
+ 	(mingw_pe_seh_emit_stackalloc): ... this.
+ 	(seh_cfa_adjust_cfa): Update.
+ 	(seh_frame_related_expr): Update.
+ 	(i386_pe_seh_emit_except_personality): Rename into ...
+ 	(mingw_pe_seh_emit_except_personality): ... this.
+ 	(i386_pe_seh_init_sections): Rename into ...
+ 	(mingw_pe_seh_init_sections): ... this.
+ 	(i386_pe_end_function): Rename into ...
+ 	(mingw_pe_end_function): ... this.
+ 	(i386_pe_end_cold_function): Rename into ...
+ 	(mingw_pe_end_cold_function): ... this.
+ 	* config/mingw/winnt.h (struct seh_frame_state):
+ 	Move from mingw/winnt.cc.
+ 	(mingw_pe_end_cold_function): Add declarations.
+ 	(mingw_pe_end_function): Likewise.
+ 	(mingw_pe_seh_init): Likewise.
+ 	(mingw_pe_seh_init_sections): Likewise.
+ 	(mingw_pe_seh_cold_init): Likewise.
+ 	(mingw_pe_seh_emit_except_personality): Likewise.
+ 	(mingw_pe_seh_end_prologue): Likewise.
+ 
+ 2026-07-08  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	* tree-vect-data-refs.cc (vect_create_addr_base_for_vector_ref):
+ 	Restructure computations to force separate base.
+ 
+ 2026-07-08  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	* tree-vect-data-refs.cc (vect_slp_analyze_store_dependences,
+ 	vect_slp_analyze_load_dependences,
+ 	vect_slp_analyze_instance_dependence): Use for-each over for with len.
+ 	* tree-vect-slp.cc (vect_mark_slp_stmts_relevant,
+ 	,vect_find_last_scalar_stmt_in_slp, vect_find_first_scalar_stmt_in_slp,
+ 	vect_build_slp_store_interleaving, vect_analyze_slp,
+ 	vect_slp_prune_covered_roots, vect_bb_partition_graph_r,
+ 	vect_remove_slp_scalar_calls): Likewise.
+ 
+ 2026-07-08  Richard Biener  <rguenther@suse.de>
+ 
+ 	* gimple-ssa-pta-constraints.cc (find_func_aliases_for_builtin_call):
+ 	Correctly use SCALAR rhs from the variadic argument part of
+ 	the function info or from NONLOCAL in case of intra-PTA.
+ 	(find_func_aliases_for_call): Handle .VA_ARG.
+ 
+ 2026-07-08  Philipp Tomsich  <philipp.tomsich@vrull.eu>
+ 
+ 	* config/aarch64/tuning_models/ampere1.h (ampere1_scalar_issue_info)
+ 	(ampere1_advsimd_issue_info, ampere1_vec_issue_info): New.
+ 	(ampere1_vector_cost): Use ampere1_vec_issue_info for issue_info.
+ 	* config/aarch64/tuning_models/ampere1b.h (ampere1b_scalar_issue_info)
+ 	(ampere1b_advsimd_issue_info, ampere1b_vec_issue_info): New.
+ 	(ampere1b_vector_cost): Use ampere1b_vec_issue_info for issue_info.
+ 
+ 2026-07-08  H.J. Lu  <hjl.tools@gmail.com>
+ 	    Richard Sandiford  <rdsandiford@googlemail.com>
+ 
+ 	PR target/124798
+ 	PR target/125436
+ 	* config/i386/i386-expand.cc: Include "function-abi.h".
+ 	(x86_64_ms_sysv_extra_clobbered_registers): Removed.
+ 	(ix86_expand_call): Don't add explicit call and ABI-switch
+ 	clobbers.
+ 	* config/i386/i386-features.cc (ix86_emit_tls_call): Call
+ 	ix86_tls_get_addr_abi to get GNU TLS ABI and use it, instead of
+ 	default_function_abi, for registers clobbered by GNU TLS call.
+ 	(ix86_place_single_tls_call): Set CALL_INSN_ABI_ID on TLS calls.
+ 	* config/i386/i386-options.cc (ix86_set_current_function): Don't
+ 	call reinit_regs.
+ 	* config/i386/i386-protos.h
+ 	(ix86_type_no_callee_saved_registers_p): Removed.
+ 	(ix86_tls_get_addr_abi): New.
+ 	* config/i386/i386.cc (ix86_alternate_abi): New prototype.
+ 	(ix86_conditional_register_usage): Changed to describe the
+ 	system ABI.
+ 	(ix86_type_no_callee_saved_registers_p): Make it static.
+ 	(ix86_function_value_regno_p): Replace ix86_cfun_abi () with
+ 	ix86_abi.
+ 	(ix86_save_reg): Only check TYPE_NO_CALLEE_SAVED_REGISTERS as
+ 	a special case.
+ 	(ix86_tls_get_addr_abi): New.
+ 	(legitimize_tls_address): Set CALL_INSN_ABI_ID on TLS calls.
+ 	Call ix86_alternate_abi to initialize the alternate function ABI.
+ 	(ix86_initialize_abi): New function.
+ 	(ix86_no_callee_saved_abi): Likewise.
+ 	(ix86_no_caller_saved_abi): Likewise.
+ 	(ix86_standard_abi): Likewise.
+ 	(ix86_alternate_abi): Likewise.
+ 	(ix86_function_abi_id): Likewise.
+ 	(ix86_fntype_abi): Likewise.
+ 	(ix86_hard_regno_call_part_clobbered): Handle newly added ABIs.
+ 	(TARGET_FNTYPE_ABI): New.
+ 	* config/i386/i386.md: Add ABI_ALTERNATE, ABI_NO_CALLEE_SAVED,
+ 	ABI_NO_CALLER_SAVED_RETURN_VOID, ABI_NO_CALLER_SAVED_RETURN_AX,
+ 	ABI_NO_CALLER_SAVED_RETURN_AX_DX,
+ 	ABI_NO_CALLER_SAVED_RETURN_AX_XMM0,
+ 	ABI_NO_CALLER_SAVED_RETURN_XMM0 and
+ 	ABI_NO_CALLER_SAVED_RETURN_XMM0_XMM1.
+ 
+ 2026-07-08  Richard Sandiford  <rdsandiford@googlemail.com>
+ 
+ 	* config/i386/i386.cc (ix86_function_arg): Remove always-true
+ 	condition.
+ 
+ 2026-07-08  Richard Sandiford  <rdsandiford@googlemail.com>
+ 
+ 	* config/i386/i386-features.cc: Include function-abi.h.
+ 	(ix86_emit_tls_call): Use default_function_abi instead of
+ 	call_used_regs.
+ 	* config/i386/i386.cc (x86_order_regs_for_local_alloc): Likewise.
+ 	(ix86_save_reg, x86_64_select_profile_regnum): Use crtl->abi
+ 	instead of call_used_regs.
+ 
+ 2026-07-08  Richard Sandiford  <rdsandiford@googlemail.com>
+ 
+ 	* config/i386/i386-protos.h (ix86_fntype_call_saved_registers):
+ 	Declare.
+ 	* config/i386/i386-options.cc (ix86_fntype_call_saved_registers): New
+ 	function, split out from...
+ 	(ix86_set_func_type): ...here.  Avoid calling it if the result
+ 	would be ignored.
+ 	* config/i386/i386.cc (ix86_type_no_callee_saved_registers_p): Use
+ 	ix86_fntype_call_saved_registers instead of querying attributes
+ 	directly.
+ 
+ 2026-07-08  Pan Li  <pan2.li@intel.com>
+ 
+ 	* config/riscv/constraints.md (Wtt): Rename to Wvr to
+ 	indicate widen vector register constraint.
+ 	* config/riscv/riscv-protos.h (riscv_widen_overlap_ok): Rename
+ 	from...
+ 	(riscv_vector_mode_p): Add new decl for riscv-v.cc visibile.
+ 	(riscv_hard_regno_nregs): Ditto.
+ 	(riscv_v_widen_constraint_ok): Rename to...
+ 	* config/riscv/riscv-v.cc (riscv_v_widen_constraint_ok): Rename
+ 	to... and take care of Wvr constraint.
+ 	* config/riscv/riscv.cc (riscv_vector_mode_p): Remove static.
+ 	(riscv_hard_regno_nregs): Ditto.
+ 	(riscv_widen_overlap_ok): Remove.
+ 	* config/riscv/vector.md: Rename to Wvr.
+ 
+ 2026-07-07  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	* config/aarch64/aarch64-option-extensions.def (AARCH64_OPT_EXTENSION):
+ 	Remove +mpamv2.
+ 	* config/aarch64/aarch64-sys-regs.def: Remove sysregs associated
+ 	with MPAMv2_VID and adjust other related sysregs to use the
+ 	base permitted architecture.
+ 	* doc/invoke.texi (aarch64: +mpamv2): Remove option.
+ 
+ 2026-07-07  Dhruv Chawla  <dhruvc@nvidia.com>
+ 
+ 	* config/aarch64/aarch64-cores.def (rigel): New entry.
+ 	* config/aarch64/aarch64-tune.md: Regenerate.
+ 	* doc/invoke.texi (AArch64 Options): Document the above.
+ 
+ 2026-07-07  wangjue  <juewang@linux.alibaba.com>
+ 
+ 	* common/config/riscv/riscv-common.cc (riscv_option_optimization_table):
+ 	Enable -funroll-loops and -munroll-only-small-loops at -O2 and above.
+ 	* config/riscv/riscv.cc (struct riscv_tune_param): Add fields
+ 	small_loop_unroll_ninsns and small_loop_unroll_factor.
+ 	(xt_c9501_tune_info): Set them.
+ 	(riscv_loop_unroll_adjust): New function.
+ 	(riscv_option_override): Turn off -munroll-only-small-loops when
+ 	-funroll-loops or -funroll-all-loops is explicitly given.
+ 	(TARGET_LOOP_UNROLL_ADJUST): Define.
+ 	* config/riscv/riscv.opt (munroll-only-small-loops): New option.
+ 	* config/riscv/riscv.opt.urls: Regenerate.
+ 	* doc/invoke.texi (RISC-V Options): Document -munroll-only-small-loops.
+ 
+ 2026-07-07  Alfie Richards  <alfie.richards@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd.md (*aarch64_abs_plus<mode>): New
+ 	define_insn_and_split.
+ 
+ 2026-07-07  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	PR target/124146
+ 	* config/aarch64/aarch64.cc (aarch64_function_arg_alignment):
+ 	Ignore user alignment left on a type's main variant; use the
+ 	mode's natural alignment instead.
+ 
+ 2026-07-07  Kishan Parmar  <kishan@linux.ibm.com>
+ 
+ 	* config/rs6000/altivec.md (UNSPEC_VUCMPRHN): New unspec entry.
+ 	(UNSPEC_VUCMPRLN): Likewise.
+ 	(UNSPEC_VUCMPRHB): Likewise.
+ 	(UNSPEC_VUCMPRLB): Likewise.
+ 	(UNSPEC_VUCMPRHH): Likewise.
+ 	(UNSPEC_VUCMPRLH): Likewise.
+ 	(UNSPEC_VUPKHSNTOB): Likewise.
+ 	(UNSPEC_VUPKLSNTOB): Likewise.
+ 	(UNSPEC_VUPKINT4TOBF16): Likewise.
+ 	(UNSPEC_VUPKINT8TOBF16): Likewise.
+ 	(UNSPEC_VUPKINT4TOFP32): Likewise.
+ 	(UNSPEC_VUPKINT8TOFP32): Likewise.
+ 	(vu_hl): New attribute.
+ 	(vu_lh): Likewise.
+ 	(VUPKNTOB): New int iterator.
+ 	(altivec_vupkhsntob): New define_insn.
+ 	(altivec_vupklsntob): Likewise.
+ 	(altivec_vupkint4tobf16): Likewise.
+ 	(altivec_vupkint8tobf16): Likewise.
+ 	(altivec_vupkint4tofp32): Likewise.
+ 	(altivec_vupkint8tofp32): Likewise.
+ 	(vucmpr_splat): New attribute.
+ 	(vucmpr_pcv): Likewise.
+ 	(vucmpr_uim): Likewise.
+ 	(VUCMPR_N): New int iterator.
+ 	(VUCMPR_B): Likewise.
+ 	(VUCMPR_H): Likewise.
+ 	(altivec_vucmpr<vu_hl>n): New define_expand.
+ 	(altivec_vucmpr<vu_hl>n_direct): New define_insn for vucmpr<vu_hl>n.
+ 	(altivec_vucmpr<vu_hl>b): New define_expand.
+ 	(altivec_vucmpr<vu_hl>b_direct): New define_insn for vucmpr<vu_hl>b.
+ 	(altivec_vucmpr<vu_hl>h): New define_expand.
+ 	(altivec_vucmpr<vu_hl>h_direct): New define_insn for vucmpr<vu_hl>h.
+ 	* config/rs6000/rs6000-builtins.def: Add vector uncompress and unpack
+ 	builtins under [future].
+ 	* config/rs6000/rs6000-overload.def: Add vec_uncompress* and vec_unpack*
+ 	interfaces.
+ 
+ 2026-07-07  Stafford Horne  <shorne@gmail.com>
+ 
+ 	PR target/126081
+ 	* config/or1k/or1k.cc (or1k_hard_regno_mode_ok): Stop allowing
+ 	SImode for FLAG_REGS.
+ 	(or1k_can_change_mode_class): Stop allowing SImode for
+ 	FLAG_REGS.
+ 	(or1k_noce_conversion_profitable_p): Always check
+ 	or1k_is_cmov_insn.
+ 
+ 2026-07-07  Naveen  <naveen.siddegowda@oss.qualcomm.com>
+ 
+ 	PR tree-optimization/102202
+ 	* tree-call-cdce.cc: Include "value-query.h" and "value-range.h".
+ 	(len_has_boolean_range_p): Remove.
+ 	(get_len_nonzero_value): New function. Return the nonzero member of
+ 	LEN's value range when it is a boolean range [0, 1] or an exact
+ 	two-value set {0, N}.
+ 	(can_shrink_wrap_len_p): Replace len_has_boolean_range_p call with
+ 	get_len_nonzero_value. Add NONZERO_LEN output parameter and set it
+ 	to the returned nonzero value on success.
+ 	(shrink_wrap_len_call): Use it to pin the length argument on the
+ 	guarded call path instead of build_one_cst.
+ 	(shrink_wrap_conditional_dead_built_in_calls): Declare local
+ 	nonzero_len and pass it to can_shrink_wrap_len_p and forward it to
+ 	shrink_wrap_len_call.
+ 	(pass_call_cdce::execute): Pass nullptr as NONZERO_LEN to
+ 	can_shrink_wrap_len_p.
+ 
+ 2026-07-07  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/125758
+ 	* gimple-range.cc (gimple_ranger::gimple_ranger): Create prefill stack.
+ 	(gimple_ranger::gimple_ranger): Dispose of prefill stack.
+ 	(gimple_ranger::prefill_name): Maybe push name on prefill stack.
+ 	(gimple_ranger::prefill_stmt_dependencies): Implement a DFS
+ 	stack for dependency satisfaction.
+ 	* gimple-range.h (struct prefill_frame): New.
+ 	(m_prefill_stack): New.
+ 	(prefill_name): Sadjust parameters.
+ 	(m_active_prefill): New.
+ 
+ 2026-07-07  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/125758
+ 	* gimple-range-cache.cc (struct time_stamp): New.
+ 	(set_timestamp): Deleted.
+ 	(set_timestamp_stored): New.
+ 	(set_timestamp_calc): New.
+ 	(set_always_current): Remove a parameter.
+ 	(temporal_value): Remove.
+ 	(temporal_value_stored): New.,
+ 	(temporal_value_calc): New.
+ 	(m_timestamp): Change to vector of struct time_stamp.
+ 	(temporal_cache::temporal_cache): Adjust.
+ 	(temporal_cache::current_p): Use both timestamps.
+ 	(temporal_cache::set_always_current): 0 means always current.
+ 	(temporal_cache::always_current_p): Check for 0.
+ 	(ranger_cache::get_global_range): adjust params.
+ 	(ranger_cache::update_consumers): Set stored timestamp.
+ 	(ranger_cache::set_global_range): Use new timestamps.
+ 
+ 2026-07-06  Mark Zhuang  <zhuangqiubin@linux.spacemit.com>
+ 
+ 	* config/riscv/riscv-cores.def (spacemit-x60): Use rva22u64
+ 	profile shorthand, add missing entries.
+ 
+ 2026-07-06  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vect-slp.cc (vect_build_slp_instance): For BB reductions
+ 	note the first root stmt.
+ 
+ 2026-07-06  Andrew Stubbs  <ams@baylibre.com>
+ 
+ 	* config/gcn/gcn-valu.md (*vec_set<mode>): Ad TImode instruction.
+ 
+ 2026-07-06  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* config/vms/vms.h (ADA_LONG_TYPE_SIZE): Delete.
+ 	* doc/tm.texi.in (ADA_LONG_TYPE_SIZE): Likewise.
+ 	* doc/tm.texi: Regenerate.
+ 	* system.h (ADA_LONG_TYPE_SIZE): Poison.
+ 
+ 2026-07-06  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* config/aarch64/aarch64.h (WIDEST_HARDWARE_FP_SIZE): Delete.
+ 	* config/alpha/alpha.h (WIDEST_HARDWARE_FP_SIZE): Likewise.
+ 	* config/i386/i386.h (WIDEST_HARDWARE_FP_SIZE): Likewise.
+ 	* config/ia64/vms.h (WIDEST_HARDWARE_FP_SIZE): Likewise.
+ 	* config/pa/pa.h (WIDEST_HARDWARE_FP_SIZE): Likewise.
+ 	* config/rs6000/rs6000.h (WIDEST_HARDWARE_FP_SIZE): Likewise.
+ 	* config/s390/s390.h (WIDEST_HARDWARE_FP_SIZE): Likewise.
+ 	* config/sparc/sparc.h (WIDEST_HARDWARE_FP_SIZE): Likewise.
+ 	* config/visium/visium.h (WIDEST_HARDWARE_FP_SIZE): Likewise.
+ 	* doc/tm.texi.in (WIDEST_HARDWARE_FP_SIZE): Likewise.
+ 	* doc/tm.texi: Regenerate.
+ 	* system.h (WIDEST_HARDWARE_FP_SIZE): Poison.
+ 
+ 2026-07-06  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	PR tree-optimization/120892
+ 	* gimple-ssa-split-paths.cc: Remove.
+ 	* passes.def (pass_split_paths): Remove.
+ 	* tree-pass.h (make_pass_split_paths): Remove.
+ 	* Makefile.in (OBJS): Remove gimple-ssa-split-paths.o.
+ 	* timevar.def (TV_SPLIT_PATHS): Remove.
+ 	* opts.cc (default_options_table): Remove the OPT_LEVELS_3_PLUS entry
+ 	for OPT_fsplit_paths.
+ 	* common.opt (fsplit-paths): Make it a deprecated no-op using Ignore.
+ 	* doc/invoke.texi (-fsplit-paths): Document as deprecated and remove it
+ 	from the option summary and the -O3 list.
+ 
+ 2026-07-06  H.J. Lu  <hjl.tools@gmail.com>
+ 	    Richard Biener  <rguenther@suse.de>
+ 
+ 	PR target/109780
+ 	PR target/109093
+ 	PR target/123210
+ 	PR target/124098
+ 	PR target/124165
+ 	PR target/124684
+ 	PR target/124759
+ 	PR target/124789
+ 	* alias.cc (static_reg_base_value): Moved to rtl.h.
+ 	(find_base_term): Remove static.
+ 	* alias.h (find_base_term): New prototype.
+ 	* function.cc (thread_prologue_and_epilogue_insns): Call
+ 	init_alias_analysis and end_alias_analysis.
+ 	* rtl.h (static_reg_base_value): Moved from alias.cc.
+ 	* config/i386/i386.cc (stack_access_data): Removed.
+ 	(ix86_find_all_reg_uses_1): Likewise.
+ 	(ix86_find_all_reg_uses): Likewise.
+ 	(ix86_access_stack_p): Likewise.
+ 	(ix86_need_alignment_p_2): Likewise.
+ 	(ix86_need_alignment_p_1): Likewise.
+ 	(ix86_need_alignment_p): Likewise.
+ 	(ix86_update_stack_alignment_2): New function.
+ 	(ix86_update_stack_alignment_1): Likewise.
+ 	(ix86_update_stack_alignment): Rewrite.
+ 	(ix86_find_max_used_stack_alignment): If check_stack_slot is
+ 	true, call ix86_update_stack_alignment on each INSN.
+ 
+ 2026-07-06  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/126098
+ 	* config/i386/sse.md (VI1_AVX512VNNIBW): Remove.
+ 	(sdot_prod<ssedvecmodelower><mode>): Use VI1_AVX512 instead of
+ 	VI1_AVX512VNNIBW so V64QI is enabled only under AVX512BW.
+ 	(udot_prod<ssedvecmodelower><mode>): Likewise.
+ 
+ 2026-07-05  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	PR target/126094
+ 	* config/aarch64/aarch64-simd.md (aarch64_cmtst<mode><vczle><vczbe>):
+ 	Update pattern to match recent RTL simplification.
+ 	(*aarch64_cmtst<mode><vczle><vczbe>): Preserve the original.
+ 	(*aarch64_cmtst_same_<mode><vczle><vczbe>): Additional variant.
+ 
+ 2026-07-05  Kael Andrew Alonzo Franco  <kaelfandrew@gmail.com>
+ 
+ 	PR tree-optimization/125641
+ 	* match.pd: Fix #ifdef GIMPLE typo.
+ 
+ 2026-07-05  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+ 
+ 	* configure.ac (gcc_cv_ld_clearcap): Remove.
+ 	Link clearcap.map to config/sol2-clearcap.map with Solaris ld.
+ 	* configure: Regenerate.
+ 	* config.in: Likewise.
+ 	* config/sol2-clearcap.map: Remove.
+ 	* config/sol2-clearcapv2.map: Rename to sol2-clearcap.map.
+ 	* config/t-sol2 (install-clearcap-map): Install source file
+ 	directly.
+ 	* config/sol2.h (LINK_CLEARCAP_SPEC): Guard with HAVE_SOLARIS_LD.
+ 
+ 2026-07-05  Oleg Endo  <olegendo@gcc.gnu.org>
+ 
+ 	PR target/67643
+ 	PR target/126117
+ 	* config/sh/sh.cc (fpscr_set_from_mem): Add missing argument to
+ 	get_free_reg invocation.
+ 
+ 2026-07-05  Oleg Endo  <olegendo@gcc.gnu.org>
+ 
+ 	PR target/67643
+ 	* config/sh/sh.cc (fpscr_set_from_mem): Specify a post-inc memory
+ 	operand for lds_fpscr after RA.
+ 
+ 2026-07-05  Oleg Endo  <olegendo@gcc.gnu.org>
+ 
+ 	PR target/55212
+ 	* config/sh/sh-protos.h (sh_lra_p): Remove.
+ 	(sh_legitimize_reload_address): Remove.
+ 	* config/sh/sh.h (LEGITIMIZE_RELOAD_ADDRESS): Remove.
+ 	* config/sh/sh.cc (sh_legitimize_reload_address): Remove.
+ 	(prepare_move_operands, broken_move): Remove sh_lra_p uses.
+ 	* config/sh/constraints.md (Rab, Rai, Ssd): Likewise.
+ 	* config/sh/sh.md: Likewise.  Remove reload-only *addsi3 patterns.
+ 
+ 2026-07-05  Oleg Endo  <olegendo@gcc.gnu.org>
+ 
+ 	* config/sh/sh.cc (emit_fpu_switch): Delete and merge into...
+ 	(fpscr_set_from_mem): ...this.
+ 
+ 2026-07-05  Oleg Endo  <olegendo@gcc.gnu.org>
+ 
+ 	PR target/116709
+ 	* config/sh/sh.md (movsf_ie): Mark constant-pool load FPUL
+ 	alternative with '*'.
+ 
+ 2026-07-05  Oleg Endo  <olegendo@gcc.gnu.org>
+ 
+ 	PR target/67459
+ 	PR target/122948
+ 	* config/sh/sh.md (addc): Fix T bit set expression.
+ 	(subc): Likewise.
+ 
+ 2026-07-05  Oleg Endo  <olegendo@gcc.gnu.org>
+ 
+ 	PR target/124778
+ 	* config/sh/sh.md (extend<mode>si2_short_mem_disp_z): Move after
+ 	'*extend<mode>si2_compact_mem_disp' patterns.
+ 
  2026-07-04  Filip Kastl  <fkastl@suse.cz>
  
  	* config/i386/i386.cc: Add override specifier for
diff -Nrcpad gcc-17-20260705/gcc/DATESTAMP gcc-17-20260712/gcc/DATESTAMP
*** gcc-17-20260705/gcc/DATESTAMP	Sun Jul  5 22:32:06 2026
--- gcc-17-20260712/gcc/DATESTAMP	Sun Jul 12 22:32:06 2026
***************
*** 1 ****
! 20260705
--- 1 ----
! 20260712
diff -Nrcpad gcc-17-20260705/gcc/Makefile.in gcc-17-20260712/gcc/Makefile.in
*** gcc-17-20260705/gcc/Makefile.in	Sun Jul  5 22:32:06 2026
--- gcc-17-20260712/gcc/Makefile.in	Sun Jul 12 22:32:06 2026
*************** OBJS = \
*** 1542,1548 ****
  	gimple-ssa-isolate-paths.o \
  	gimple-ssa-nonnull-compare.o \
  	gimple-ssa-sccopy.o \
- 	gimple-ssa-split-paths.o \
  	gimple-ssa-store-merging.o \
  	gimple-ssa-strength-reduction.o \
  	gimple-ssa-sprintf.o \
--- 1542,1547 ----
*************** build/gencfn-macros.o : gencfn-macros.cc
*** 3372,3392 ****
  # since they need to run on this machine
  # even if GCC is being compiled to run on some other machine.
  
  # All these programs use the RTL reader ($(BUILD_RTL)).
! genprogrtl = attr attr-common attrtab automata codes conditions config emit \
  	     extract flags mddump opinit output peep preds recog target-def
  $(genprogrtl:%=build/gen%$(build_exeext)): $(BUILD_RTL)
  
  # All these programs use the MD reader ($(BUILD_MD)).
! genprogmd = $(genprogrtl) mddeps constants enums
  $(genprogmd:%=build/gen%$(build_exeext)): $(BUILD_MD)
  
  # All these programs need to report errors.
! genprogerr = $(genprogmd) genrtl modes gtype hooks cfn-macros condmd
  $(genprogerr:%=build/gen%$(build_exeext)): $(BUILD_ERRORS)
  
  # Remaining build programs.
! genprog = $(genprogerr) check checksum match
  
  # These programs need libs over and above what they get from the above list.
  build/genautomata$(build_exeext) : BUILD_LIBS += -lm
--- 3371,3395 ----
  # since they need to run on this machine
  # even if GCC is being compiled to run on some other machine.
  
+ # We append to the genFOO variables so that target make fragments can
+ # add programs to them (those includes have already been included).
+ # Example: riscv/t-riscv
+ 
  # All these programs use the RTL reader ($(BUILD_RTL)).
! genprogrtl += attr attr-common attrtab automata codes conditions config emit \
  	     extract flags mddump opinit output peep preds recog target-def
  $(genprogrtl:%=build/gen%$(build_exeext)): $(BUILD_RTL)
  
  # All these programs use the MD reader ($(BUILD_MD)).
! genprogmd += $(genprogrtl) mddeps constants enums
  $(genprogmd:%=build/gen%$(build_exeext)): $(BUILD_MD)
  
  # All these programs need to report errors.
! genprogerr += $(genprogmd) genrtl modes gtype hooks cfn-macros condmd
  $(genprogerr:%=build/gen%$(build_exeext)): $(BUILD_ERRORS)
  
  # Remaining build programs.
! genprog += $(genprogerr) check checksum match
  
  # These programs need libs over and above what they get from the above list.
  build/genautomata$(build_exeext) : BUILD_LIBS += -lm
diff -Nrcpad gcc-17-20260705/gcc/ada/ChangeLog gcc-17-20260712/gcc/ada/ChangeLog
*** gcc-17-20260705/gcc/ada/ChangeLog	Sun Jul  5 22:32:06 2026
--- gcc-17-20260712/gcc/ada/ChangeLog	Sun Jul 12 22:32:06 2026
***************
*** 1,3 ****
--- 1,28 ----
+ 2026-07-10  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* exp_disp.adb (Expand_Dispatching_Call): Reenable the suppression
+ 	of access checks during analysis of expanded dispatching calls.
+ 
+ 2026-07-06  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gnatlink.adb: Remove clause for System.CRTL.
+ 	(Store_File_Context): Remove clause for System.CRTL.long.
+ 	* gcc-interface/targtyps.cc (ADA_LONG_TYPE_SIZE): Delete.
+ 	(get_target_long_size): Use LONG_TYPE_SIZE.
+ 	* libgnat/i-c.ads: Remove clause for System.Parameters.
+ 	(long): Declare as derived from Long_Integer.
+ 	* libgnat/i-cstrin.ads: Add clause for System.Parameters.
+ 	* libgnat/s-crtl.ads: Remove clause for System.Parameters.
+ 	(long): Declare as subtype of Long_Integer.
+ 	* libgnat/s-parame.ads (long_bits): Delete.
+ 	* libgnat/s-parame__hpux.ads (long_bits): Likewise.
+ 	* libgnat/s-parame__vxworks.ads (long_bits): Likewise.
+ 
+ 2026-07-06  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc-interface/decl.cc (gnat_to_gnu_entity): Use the precision of
+ 	longest_float_type_node to compute the maximum size of FP types.
+ 
  2026-07-01  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
  
  	* link.c: Check HAVE_LD_AT_FILE instead of HAVE_GNU_LD.
diff -Nrcpad gcc-17-20260705/gcc/ada/exp_disp.adb gcc-17-20260712/gcc/ada/exp_disp.adb
*** gcc-17-20260705/gcc/ada/exp_disp.adb	Sun Jul  5 22:32:06 2026
--- gcc-17-20260712/gcc/ada/exp_disp.adb	Sun Jul 12 22:32:06 2026
*************** package body Exp_Disp is
*** 1203,1209 ****
           Set_SCIL_Node (SCIL_Related_Node, SCIL_Node);
        end if;
  
!       Analyze_And_Resolve (Call_Node, Call_Typ);
  
        Set_Is_Expanded_Dispatching_Call (Call_Node);
     end Expand_Dispatching_Call;
--- 1203,1211 ----
           Set_SCIL_Node (SCIL_Related_Node, SCIL_Node);
        end if;
  
!       --  Suppress null access checks during the analysis of the expanded code
! 
!       Analyze_And_Resolve (Call_Node, Call_Typ, Suppress => Access_Check);
  
        Set_Is_Expanded_Dispatching_Call (Call_Node);
     end Expand_Dispatching_Call;
diff -Nrcpad gcc-17-20260705/gcc/ada/gcc-interface/decl.cc gcc-17-20260712/gcc/ada/gcc-interface/decl.cc
*** gcc-17-20260705/gcc/ada/gcc-interface/decl.cc	Sun Jul  5 22:32:06 2026
--- gcc-17-20260712/gcc/ada/gcc-interface/decl.cc	Sun Jul 12 22:32:06 2026
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 543,554 ****
  	  esize = UI_To_Int (Esize (gnat_entity));
  
  	  if (IN (kind, Float_Kind))
! #ifdef WIDEST_HARDWARE_FP_SIZE
! 	    max_esize = fp_prec_to_size (WIDEST_HARDWARE_FP_SIZE);
! #else
! 	    max_esize
! 	      = fp_prec_to_size (TYPE_PRECISION (long_double_type_node));
! #endif
  	  else if (IN (kind, Access_Kind))
  	    max_esize = POINTER_SIZE * 2;
  	  else
--- 543,558 ----
  	  esize = UI_To_Int (Esize (gnat_entity));
  
  	  if (IN (kind, Float_Kind))
! 	    {
! 	      /* This block is executed the first time to translate the GNAT
! 		 node corresponding to Gigi's longest_float_type_node, so the
! 		 tree is not yet saved at this time.  */
! 	      if (longest_float_type_node)
! 		max_esize
! 		  = fp_prec_to_size (TYPE_PRECISION (longest_float_type_node));
! 	      else
! 		max_esize = esize;
! 	    }
  	  else if (IN (kind, Access_Kind))
  	    max_esize = POINTER_SIZE * 2;
  	  else
diff -Nrcpad gcc-17-20260705/gcc/ada/gcc-interface/targtyps.cc gcc-17-20260712/gcc/ada/gcc-interface/targtyps.cc
*** gcc-17-20260705/gcc/ada/gcc-interface/targtyps.cc	Sun Jul  5 22:32:06 2026
--- gcc-17-20260712/gcc/ada/gcc-interface/targtyps.cc	Sun Jul 12 22:32:06 2026
***************
*** 39,50 ****
  #include "ada-tree.h"
  #include "gigi.h"
  
- /* If we don't have a specific size for Ada's equivalent of `long', use that
-    of C.  */
- #ifndef ADA_LONG_TYPE_SIZE
- #define ADA_LONG_TYPE_SIZE LONG_TYPE_SIZE
- #endif
- 
  /* The following provide a functional interface for the front end Ada code
     to determine the sizes that are used for various C types. */
  
--- 39,44 ----
*************** get_target_int_size (void)
*** 88,94 ****
  Pos
  get_target_long_size (void)
  {
!   return ADA_LONG_TYPE_SIZE;
  }
  
  Pos
--- 82,88 ----
  Pos
  get_target_long_size (void)
  {
!   return LONG_TYPE_SIZE;
  }
  
  Pos
diff -Nrcpad gcc-17-20260705/gcc/ada/gnatlink.adb gcc-17-20260712/gcc/ada/gnatlink.adb
*** gcc-17-20260705/gcc/ada/gnatlink.adb	Sun Jul  5 22:32:06 2026
--- gcc-17-20260712/gcc/ada/gnatlink.adb	Sun Jul 12 22:32:06 2026
*************** with Ada.Exceptions;   use Ada.Exception
*** 45,51 ****
  with Ada.Strings.Fixed;
  
  with System.OS_Lib; use System.OS_Lib;
- with System.CRTL;
  
  with Interfaces.C_Streams; use Interfaces.C_Streams;
  with Interfaces.C.Strings; use Interfaces.C.Strings;
--- 45,50 ----
*************** procedure Gnatlink is
*** 897,904 ****
        ------------------------
  
        procedure Store_File_Context is
-          use type System.CRTL.long;
- 
        begin
           RB_Next_Line := Next_Line;
           RB_Nfirst    := Nfirst;
--- 896,901 ----
diff -Nrcpad gcc-17-20260705/gcc/ada/libgnat/i-c.ads gcc-17-20260712/gcc/ada/libgnat/i-c.ads
*** gcc-17-20260705/gcc/ada/libgnat/i-c.ads	Sun Jul  5 22:32:06 2026
--- gcc-17-20260712/gcc/ada/libgnat/i-c.ads	Sun Jul 12 22:32:06 2026
*************** pragma Assertion_Policy (Pre
*** 28,34 ****
  --  in order to work around an internal limitation of the compiler.
  
  with System;
- with System.Parameters;
  
  package Interfaces.C with
    SPARK_Mode,
--- 28,33 ----
*************** is
*** 59,68 ****
     --  avoid ambiguities when compiling in the presence of s-auxdec.ads and
     --  a non-private system.address type.
  
!    type int   is new Integer;
!    type short is new Short_Integer;
!    type long  is range -(2 ** (System.Parameters.long_bits - Integer'(1)))
!      .. +(2 ** (System.Parameters.long_bits - Integer'(1))) - 1;
     type long_long is new Long_Long_Integer;
  
     type signed_char is range SCHAR_MIN .. SCHAR_MAX;
--- 58,66 ----
     --  avoid ambiguities when compiling in the presence of s-auxdec.ads and
     --  a non-private system.address type.
  
!    type int       is new Integer;
!    type short     is new Short_Integer;
!    type long      is new Long_Integer;
     type long_long is new Long_Long_Integer;
  
     type signed_char is range SCHAR_MIN .. SCHAR_MAX;
diff -Nrcpad gcc-17-20260705/gcc/ada/libgnat/i-cstrin.ads gcc-17-20260712/gcc/ada/libgnat/i-cstrin.ads
*** gcc-17-20260705/gcc/ada/libgnat/i-cstrin.ads	Sun Jul  5 22:32:06 2026
--- gcc-17-20260712/gcc/ada/libgnat/i-cstrin.ads	Sun Jul 12 22:32:06 2026
***************
*** 45,50 ****
--- 45,52 ----
  
  pragma Assertion_Policy (Pre => Ignore);
  
+ with System.Parameters;
+ 
  package Interfaces.C.Strings with
    SPARK_Mode     => On,
    Abstract_State => (C_Memory, (C_Addresses with Synchronous)),
diff -Nrcpad gcc-17-20260705/gcc/ada/libgnat/s-crtl.ads gcc-17-20260712/gcc/ada/libgnat/s-crtl.ads
*** gcc-17-20260705/gcc/ada/libgnat/s-crtl.ads	Sun Jul  5 22:32:06 2026
--- gcc-17-20260712/gcc/ada/libgnat/s-crtl.ads	Sun Jul 12 22:32:06 2026
***************
*** 31,38 ****
  
  --  This package provides the low level interface to the C runtime library
  
- with System.Parameters;
- 
  package System.CRTL is
     pragma Preelaborate;
  
--- 31,36 ----
*************** package System.CRTL is
*** 53,60 ****
     type unsigned is mod 2 ** 32;
     for unsigned'Size use 32;
  
!    type long is range -(2 ** (System.Parameters.long_bits - 1))
!                    .. +(2 ** (System.Parameters.long_bits - 1)) - 1;
  
     subtype off_t is Long_Integer;
  
--- 51,57 ----
     type unsigned is mod 2 ** 32;
     for unsigned'Size use 32;
  
!    subtype long is Long_Integer;
  
     subtype off_t is Long_Integer;
  
diff -Nrcpad gcc-17-20260705/gcc/ada/libgnat/s-parame.ads gcc-17-20260712/gcc/ada/libgnat/s-parame.ads
*** gcc-17-20260705/gcc/ada/libgnat/s-parame.ads	Sun Jul  5 22:32:06 2026
--- gcc-17-20260712/gcc/ada/libgnat/s-parame.ads	Sun Jul 12 22:32:06 2026
*************** package System.Parameters is
*** 101,111 ****
     -- Characteristics of types in Interfaces.C --
     ----------------------------------------------
  
-    long_bits : constant := Long_Integer'Size;
-    --  Number of bits in type long and unsigned_long. The normal convention
-    --  is that this is the same as type Long_Integer, but this may not be true
-    --  of all targets.
- 
     ptr_bits  : constant := Standard'Address_Size;
     subtype C_Address is System.Address;
     --  Number of bits in Interfaces.C pointers, normally a standard address
--- 101,106 ----
diff -Nrcpad gcc-17-20260705/gcc/ada/libgnat/s-parame__hpux.ads gcc-17-20260712/gcc/ada/libgnat/s-parame__hpux.ads
*** gcc-17-20260705/gcc/ada/libgnat/s-parame__hpux.ads	Sun Jul  5 22:32:06 2026
--- gcc-17-20260712/gcc/ada/libgnat/s-parame__hpux.ads	Sun Jul 12 22:32:06 2026
*************** package System.Parameters is
*** 100,110 ****
     -- Characteristics of Types in Interfaces.C --
     ----------------------------------------------
  
-    long_bits : constant := Long_Integer'Size;
-    --  Number of bits in type long and unsigned_long. The normal convention
-    --  is that this is the same as type Long_Integer, but this may not be true
-    --  of all targets.
- 
     ptr_bits  : constant := Standard'Address_Size;
     subtype C_Address is System.Address;
     --  Number of bits in Interfaces.C pointers, normally a standard address
--- 100,105 ----
diff -Nrcpad gcc-17-20260705/gcc/ada/libgnat/s-parame__vxworks.ads gcc-17-20260712/gcc/ada/libgnat/s-parame__vxworks.ads
*** gcc-17-20260705/gcc/ada/libgnat/s-parame__vxworks.ads	Sun Jul  5 22:32:06 2026
--- gcc-17-20260712/gcc/ada/libgnat/s-parame__vxworks.ads	Sun Jul 12 22:32:06 2026
*************** package System.Parameters is
*** 102,112 ****
     -- Characteristics of types in Interfaces.C --
     ----------------------------------------------
  
-    long_bits : constant := Long_Integer'Size;
-    --  Number of bits in type long and unsigned_long. The normal convention
-    --  is that this is the same as type Long_Integer, but this may not be true
-    --  of all targets.
- 
     ptr_bits  : constant := Standard'Address_Size;
     subtype C_Address is System.Address;
     --  Number of bits in Interfaces.C pointers, normally a standard address
--- 102,107 ----
diff -Nrcpad gcc-17-20260705/gcc/algol68/ChangeLog gcc-17-20260712/gcc/algol68/ChangeLog
*** gcc-17-20260705/gcc/algol68/ChangeLog	Sun Jul  5 22:32:06 2026
--- gcc-17-20260712/gcc/algol68/ChangeLog	Sun Jul 12 22:32:07 2026
***************
*** 1,3 ****
--- 1,17 ----
+ 2026-07-05  Jose E. Marchesi  <jemarch@gnu.org>
+ 
+ 	* a68-low-units.cc (a68_lower_denotation): Check for denotations
+ 	too big for bits modes.
+ 
+ 2026-07-05  Jose E. Marchesi  <jemarch@gnu.org>
+ 
+ 	* ga68.vw: Add syntax for the GNU68-2026-003-decimal-radices
+ 	language extension.
+ 	* a68-parser-scanner.cc (get_next_token): Recognize decimal bits
+ 	denotations.
+ 	(get_next_token): Emit an error if an invalid radix is found in a
+ 	bits denotation.
+ 
  2026-06-24  Jose E. Marchesi  <jemarch@gnu.org>
  
  	* a68-moids-sorting.cc (packs_ordering): Do not rely on pointer
diff -Nrcpad gcc-17-20260705/gcc/alias.cc gcc-17-20260712/gcc/alias.cc
*** gcc-17-20260705/gcc/alias.cc	Sun Jul  5 22:32:06 2026
--- gcc-17-20260712/gcc/alias.cc	Sun Jul 12 22:32:07 2026
*************** static GTY((deletable)) vec<rtx, va_gc>
*** 232,240 ****
  #define UNIQUE_BASE_VALUE_FP	-3
  #define UNIQUE_BASE_VALUE_HFP	-4
  
- #define static_reg_base_value \
-   (this_target_rtl->x_static_reg_base_value)
- 
  #define REG_BASE_VALUE(X)					\
    (REGNO (X) < vec_safe_length (reg_base_value)			\
     ? (*reg_base_value)[REGNO (X)] : 0)
--- 232,237 ----
*************** find_base_term (rtx x, vec<std::pair<cse
*** 2065,2071 ****
  /* Wrapper around the worker above which removes locs from visited VALUEs
     to avoid visiting them multiple times.  We unwind that changes here.  */
  
! static rtx
  find_base_term (rtx x)
  {
    auto_vec<std::pair<cselib_val *, struct elt_loc_list *>, 32> visited_vals;
--- 2062,2068 ----
  /* Wrapper around the worker above which removes locs from visited VALUEs
     to avoid visiting them multiple times.  We unwind that changes here.  */
  
! rtx
  find_base_term (rtx x)
  {
    auto_vec<std::pair<cselib_val *, struct elt_loc_list *>, 32> visited_vals;
*************** base_alias_check (rtx x, rtx x_base, rtx
*** 2274,2283 ****
  static bool
  refs_newer_value_p (const_rtx expr, rtx v)
  {
!   int minuid = CSELIB_VAL_PTR (v)->uid;
    subrtx_iterator::array_type array;
    FOR_EACH_SUBRTX (iter, array, expr, NONCONST)
!     if (GET_CODE (*iter) == VALUE && CSELIB_VAL_PTR (*iter)->uid >= minuid)
        return true;
    return false;
  }
--- 2271,2280 ----
  static bool
  refs_newer_value_p (const_rtx expr, rtx v)
  {
!   int minuid = CSELIB_VAL_UID (v);
    subrtx_iterator::array_type array;
    FOR_EACH_SUBRTX (iter, array, expr, NONCONST)
!     if (GET_CODE (*iter) == VALUE && CSELIB_VAL_UID (*iter) >= minuid)
        return true;
    return false;
  }
diff -Nrcpad gcc-17-20260705/gcc/alias.h gcc-17-20260712/gcc/alias.h
*** gcc-17-20260705/gcc/alias.h	Sun Jul  5 22:32:06 2026
--- gcc-17-20260712/gcc/alias.h	Sun Jul 12 22:32:07 2026
*************** int compare_base_decls (tree, tree);
*** 42,47 ****
--- 42,48 ----
  bool refs_same_for_tbaa_p (tree, tree);
  bool mems_same_for_tbaa_p (rtx, rtx);
  bool view_converted_memref_p (tree);
+ extern rtx find_base_term (rtx);
  
  /* This alias set can be used to force a memory to conflict with all
     other memories, creating a barrier across which no memory reference
diff -Nrcpad gcc-17-20260705/gcc/bitmap.h gcc-17-20260712/gcc/bitmap.h
*** gcc-17-20260705/gcc/bitmap.h	Sun Jul  5 22:32:06 2026
--- gcc-17-20260712/gcc/bitmap.h	Sun Jul 12 22:32:07 2026
*************** class GTY(()) bitmap_head {
*** 331,337 ****
  public:
    static bitmap_obstack crashme;
    /* Poison obstack to not make it not a valid initialized GC bitmap.  */
!   CONSTEXPR bitmap_head()
      : indx (0), tree_form (false), padding (0), alloc_descriptor (0), first (NULL),
        current (NULL), obstack (&crashme)
    {}
--- 331,337 ----
  public:
    static bitmap_obstack crashme;
    /* Poison obstack to not make it not a valid initialized GC bitmap.  */
!   constexpr bitmap_head()
      : indx (0), tree_form (false), padding (0), alloc_descriptor (0), first (NULL),
        current (NULL), obstack (&crashme)
    {}
diff -Nrcpad gcc-17-20260705/gcc/builtin-types.def gcc-17-20260712/gcc/builtin-types.def
*** gcc-17-20260705/gcc/builtin-types.def	Sun Jul  5 22:32:06 2026
--- gcc-17-20260712/gcc/builtin-types.def	Sun Jul 12 22:32:07 2026
*************** DEF_FUNCTION_TYPE_0 (BT_FN_CONST_STRING,
*** 236,242 ****
  DEF_FUNCTION_TYPE_0 (BT_FN_PID, BT_PID)
  DEF_FUNCTION_TYPE_0 (BT_FN_INT, BT_INT)
  DEF_FUNCTION_TYPE_0 (BT_FN_UINT, BT_UINT)
- DEF_FUNCTION_TYPE_0 (BT_FN_COMPLEX_INT, BT_COMPLEX_INT)
  DEF_FUNCTION_TYPE_0 (BT_FN_ULONG, BT_ULONG)
  DEF_FUNCTION_TYPE_0 (BT_FN_ULONGLONG, BT_ULONGLONG)
  DEF_FUNCTION_TYPE_0 (BT_FN_FLOAT, BT_FLOAT)
--- 236,241 ----
*************** DEF_FUNCTION_TYPE_1 (BT_FN_UINT16_UINT32
*** 429,434 ****
--- 428,434 ----
  DEF_FUNCTION_TYPE_1 (BT_FN_UINT32_UINT16, BT_UINT32, BT_UINT16)
  DEF_FUNCTION_TYPE_1 (BT_FN_INT_FENV_T_PTR, BT_INT, BT_FENV_T_PTR)
  DEF_FUNCTION_TYPE_1 (BT_FN_INT_CONST_FENV_T_PTR, BT_INT, BT_CONST_FENV_T_PTR)
+ DEF_FUNCTION_TYPE_1 (BT_FN_COMPLEX_INT_ULONGLONG, BT_COMPLEX_INT, BT_ULONGLONG)
  
  DEF_POINTER_TYPE (BT_PTR_FN_VOID_PTR, BT_FN_VOID_PTR)
  
diff -Nrcpad gcc-17-20260705/gcc/c/ChangeLog gcc-17-20260712/gcc/c/ChangeLog
*** gcc-17-20260705/gcc/c/ChangeLog	Sun Jul  5 22:32:06 2026
--- gcc-17-20260712/gcc/c/ChangeLog	Sun Jul 12 22:32:07 2026
***************
*** 1,3 ****
--- 1,30 ----
+ 2026-07-08  Martin Uecker  <uecker@tugraz.at>
+ 
+ 	* c-tree.h (zero_length_array_type_p,
+ 	c_build_array_type_zero_size) Add prototypes.
+ 	* c-decl.cc (zero_length_array_type_p): External linkage.
+ 	(c_build_array_type_zero_size): New.
+ 	(grokdeclarator): Use new function.
+ 	* c-typeck.cc (c_verify_type): New consistency checks.
+ 	(c_build_array_type_zero_size): New function
+ 	(composite_type_internal): Refactor.
+ 	(comptypes_internal): Refactor.
+ 
+ 2026-07-08  Martin Uecker  <uecker@tugraz.at>
+ 
+ 	* c-decl.cc (grokdeclarator): Add assertion.
+ 	(add_flexible_array_elts_to_size): Adapt.
+ 	(is_flexible_array_member_p): Adapt.
+ 	(verify_counted_by_attribute): Adapt.
+ 	(finish_struct): Adapt.
+ 	* c-typeck.cc (check_counted_by_attribute): Adapt.
+ 	(build_counted_by_ref): Adapt.
+ 	(build_access_with_size_for_counted_by): Adapt.
+ 	(handle_counted_by_for_component_ref): Adapt.
+ 	(c_incomplete_type_error): Use new helper function.
+ 	(digest_init): Use new helper function.
+ 	(pop_init_level): Use new helper function.
+ 
  2026-06-30  Chung-Lin Tang  <cltang@baylibre.com>
  
  	* c-typeck.cc (c_finish_omp_clauses): Fix comments.
diff -Nrcpad gcc-17-20260705/gcc/c/c-decl.cc gcc-17-20260712/gcc/c/c-decl.cc
*** gcc-17-20260705/gcc/c/c-decl.cc	Sun Jul  5 22:32:06 2026
--- gcc-17-20260712/gcc/c/c-decl.cc	Sun Jul 12 22:32:07 2026
*************** one_element_array_type_p (const_tree typ
*** 5537,5551 ****
  }
  
  /* Determine whether TYPE is a zero-length array type "[0]".  */
! static bool
  zero_length_array_type_p (const_tree type)
  {
!   if (TREE_CODE (type) == ARRAY_TYPE)
!     if (tree type_size = TYPE_SIZE_UNIT (type))
!       if ((integer_zerop (type_size))
! 	   && TYPE_DOMAIN (type) != NULL_TREE
! 	   && TYPE_MAX_VALUE (TYPE_DOMAIN (type)) == NULL_TREE)
! 	return true;
    return false;
  }
  
--- 5537,5551 ----
  }
  
  /* Determine whether TYPE is a zero-length array type "[0]".  */
! bool
  zero_length_array_type_p (const_tree type)
  {
!   if (TREE_CODE (type) == ARRAY_TYPE
!       && COMPLETE_TYPE_P (type)
!       && TYPE_DOMAIN (type) != NULL_TREE
!       && (TYPE_MAX_VALUE (TYPE_DOMAIN (type)) == NULL_TREE
! 	  || integer_all_onesp (TYPE_MAX_VALUE (TYPE_DOMAIN (type)))))
!     return true;
    return false;
  }
  
*************** add_flexible_array_elts_to_size (tree de
*** 5564,5570 ****
  
    elt = CONSTRUCTOR_ELTS (init)->last ().value;
    type = TREE_TYPE (elt);
!   if (c_flexible_array_member_type_p (type))
      {
        complete_array_type (&type, elt, false);
        /* For a structure, add the size of the initializer to the DECL's
--- 5564,5570 ----
  
    elt = CONSTRUCTOR_ELTS (init)->last ().value;
    type = TREE_TYPE (elt);
!   if (flexible_array_member_type_p (type))
      {
        complete_array_type (&type, elt, false);
        /* For a structure, add the size of the initializer to the DECL's
*************** grokdeclarator (const struct c_declarato
*** 7315,7320 ****
--- 7315,7322 ----
  
  	    declarator = declarator->declarator;
  
+ 	    bool flexible_array_member = false;
+ 
  	    /* Check for some types that there cannot be arrays of.  */
  
  	    if (VOID_TYPE_P (type))
*************** grokdeclarator (const struct c_declarato
*** 7527,7533 ****
  	      }
  	    else if (decl_context == FIELD)
  	      {
- 		bool flexible_array_member = false;
  		if (array_parm_vla_unspec_p)
  		  /* Field names can in fact have function prototype
  		     scope so [*] is disallowed here through making
--- 7529,7534 ----
*************** grokdeclarator (const struct c_declarato
*** 7587,7594 ****
--- 7588,7603 ----
  						 ENCODE_QUAL_ADDR_SPACE (as));
  		if (array_parm_vla_unspec_p)
  		  type = c_build_array_type_unspecified (type);
+ 		/* The GCC extension for zero-length arrays differs from
+ 		   ISO flexible array members in that sizeof yields
+ 		   zero.  */
+ 		else if (size && integer_zerop (size))
+ 		  type = c_build_array_type_zero_size (type);
  		else
  		  type = c_build_array_type (type, itype);
+ 
+ 		if (!valid_array_size_p (loc, type, name))
+ 		  type = error_mark_node;
  	      }
  
  	    if (array_parm_vla_unspec_p)
*************** grokdeclarator (const struct c_declarato
*** 7607,7629 ****
  		size_varies = true;
  	      }
  
- 	    if (type != error_mark_node)
- 	      {
- 		/* The GCC extension for zero-length arrays differs from
- 		   ISO flexible array members in that sizeof yields
- 		   zero.  */
- 		if (size && integer_zerop (size))
- 		  {
- 		    gcc_assert (itype);
- 		    type = build_distinct_type_copy (TYPE_MAIN_VARIANT (type));
- 		    TYPE_SIZE (type) = bitsize_zero_node;
- 		    TYPE_SIZE_UNIT (type) = size_zero_node;
- 		    SET_TYPE_STRUCTURAL_EQUALITY (type);
- 		  }
  
! 		if (!valid_array_size_p (loc, type, name))
! 		  type = error_mark_node;
! 	      }
  
  	    if (decl_context != PARM
  		&& (array_ptr_quals != TYPE_UNQUALIFIED
--- 7616,7625 ----
  		size_varies = true;
  	      }
  
  
! 	    gcc_assert (type == error_mark_node
! 			|| flexible_array_member
! 			   == flexible_array_member_type_p (type));
  
  	    if (decl_context != PARM
  		&& (array_ptr_quals != TYPE_UNQUALIFIED
*************** is_flexible_array_member_p (bool is_last
*** 9413,9419 ****
  
    bool is_zero_length_array = zero_length_array_type_p (TREE_TYPE (x));
    bool is_one_element_array = one_element_array_type_p (TREE_TYPE (x));
!   bool is_flexible_array = c_flexible_array_member_type_p (TREE_TYPE (x));
  
    unsigned int strict_flex_array_level = c_strict_flex_array_level_of (x);
  
--- 9409,9415 ----
  
    bool is_zero_length_array = zero_length_array_type_p (TREE_TYPE (x));
    bool is_one_element_array = one_element_array_type_p (TREE_TYPE (x));
!   bool is_flexible_array = flexible_array_member_type_p (TREE_TYPE (x));
  
    unsigned int strict_flex_array_level = c_strict_flex_array_level_of (x);
  
*************** verify_counted_by_attribute (tree outmos
*** 9539,9545 ****
    for (tree field = TYPE_FIELDS (cur_struct_type); field;
         field = TREE_CHAIN (field))
      {
!       if (c_flexible_array_member_type_p (TREE_TYPE (field))
  	   || TREE_CODE (TREE_TYPE (field)) == POINTER_TYPE)
  	{
  	  tree attr_counted_by = lookup_attribute ("counted_by",
--- 9535,9541 ----
    for (tree field = TYPE_FIELDS (cur_struct_type); field;
         field = TREE_CHAIN (field))
      {
!       if (flexible_array_member_type_p (TREE_TYPE (field))
  	   || TREE_CODE (TREE_TYPE (field)) == POINTER_TYPE)
  	{
  	  tree attr_counted_by = lookup_attribute ("counted_by",
*************** finish_struct (location_t loc, tree t, t
*** 9742,9748 ****
  	DECL_PACKED (x) = 1;
  
        /* Detect flexible array member in an invalid context.  */
!       if (c_flexible_array_member_type_p (TREE_TYPE (x)))
  	{
  	  if (TREE_CODE (t) == UNION_TYPE)
  	    pedwarn (DECL_SOURCE_LOCATION (x), OPT_Wpedantic,
--- 9738,9744 ----
  	DECL_PACKED (x) = 1;
  
        /* Detect flexible array member in an invalid context.  */
!       if (flexible_array_member_type_p (TREE_TYPE (x)))
  	{
  	  if (TREE_CODE (t) == UNION_TYPE)
  	    pedwarn (DECL_SOURCE_LOCATION (x), OPT_Wpedantic,
*************** finish_struct (location_t loc, tree t, t
*** 9789,9795 ****
  	 the result for multiple last_fields.  */
        if (TREE_CODE (TREE_TYPE (x)) == ARRAY_TYPE)
  	TYPE_INCLUDES_FLEXARRAY (t)
! 	  |= is_last_field && c_flexible_array_member_type_p (TREE_TYPE (x));
        /* Recursively set TYPE_INCLUDES_FLEXARRAY for the context of x, t
  	 when x is an union or record and is the last field.  */
        else if (RECORD_OR_UNION_TYPE_P (TREE_TYPE (x)))
--- 9785,9791 ----
  	 the result for multiple last_fields.  */
        if (TREE_CODE (TREE_TYPE (x)) == ARRAY_TYPE)
  	TYPE_INCLUDES_FLEXARRAY (t)
! 	  |= is_last_field && flexible_array_member_type_p (TREE_TYPE (x));
        /* Recursively set TYPE_INCLUDES_FLEXARRAY for the context of x, t
  	 when x is an union or record and is the last field.  */
        else if (RECORD_OR_UNION_TYPE_P (TREE_TYPE (x)))
diff -Nrcpad gcc-17-20260705/gcc/c/c-tree.h gcc-17-20260712/gcc/c/c-tree.h
*** gcc-17-20260705/gcc/c/c-tree.h	Sun Jul  5 22:32:06 2026
--- gcc-17-20260712/gcc/c/c-tree.h	Sun Jul 12 22:32:07 2026
*************** c_type_unspecified_p (tree t)
*** 846,851 ****
--- 846,852 ----
  	 && integer_zerop (TREE_OPERAND (TYPE_MAX_VALUE (TYPE_DOMAIN (t)), 1));
  }
  
+ extern bool zero_length_array_type_p (const_tree type);
  extern bool char_type_p (tree);
  extern tree c_type_tag (const_tree t);
  extern tree c_objc_common_truthvalue_conversion (location_t, tree,
*************** extern tree c_build_type_attribute_varia
*** 960,965 ****
--- 961,967 ----
  extern tree c_build_pointer_type (tree type);
  extern tree c_build_array_type (tree type, tree domain);
  extern tree c_build_array_type_unspecified (tree type);
+ extern tree c_build_array_type_zero_size (tree type);
  extern tree c_build_function_type (tree type, tree args, bool no = false);
  extern tree c_build_pointer_type_for_mode (tree type, machine_mode mode, bool m);
  
diff -Nrcpad gcc-17-20260705/gcc/c/c-typeck.cc gcc-17-20260712/gcc/c/c-typeck.cc
*** gcc-17-20260705/gcc/c/c-typeck.cc	Sun Jul  5 22:32:06 2026
--- gcc-17-20260712/gcc/c/c-typeck.cc	Sun Jul 12 22:32:07 2026
*************** c_incomplete_type_error (location_t loc,
*** 265,271 ****
  	case ARRAY_TYPE:
  	  if (TYPE_DOMAIN (type))
  	    {
! 	      if (TYPE_MAX_VALUE (TYPE_DOMAIN (type)) == NULL)
  		{
  		  error_at (loc, "invalid use of flexible array member");
  		  return;
--- 265,271 ----
  	case ARRAY_TYPE:
  	  if (TYPE_DOMAIN (type))
  	    {
! 	      if (flexible_array_member_type_p (type))
  		{
  		  error_at (loc, "invalid use of flexible array member");
  		  return;
*************** c_verify_type (tree type)
*** 392,399 ****
        if (!TYPE_STRUCTURAL_EQUALITY_P (type)
  	  && TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (type)))
  	return false;
! 
!      default:
         break;
      }
  
--- 392,398 ----
        if (!TYPE_STRUCTURAL_EQUALITY_P (type)
  	  && TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (type)))
  	return false;
!     default:
         break;
      }
  
*************** c_verify_type (tree type)
*** 422,427 ****
--- 421,449 ----
  	  if (!C_TYPE_VARIABLY_MODIFIED (type))
  	    return false;
  	}
+ 
+       /* va_list violates this, accept such types here.  */
+       if (!COMPLETE_TYPE_P (TREE_TYPE (type)))
+ 	return true;
+ 
+       if (COMPLETE_TYPE_P (type))
+ 	{
+ 	  /* If the size is unknown, it can not be complete.  */
+ 	  if (NULL_TREE == TYPE_DOMAIN (type))
+ 	    return false;
+ 
+ 	  /* Zero-length arrays must have size zero.  */
+ 	  if (zero_length_array_type_p (type)
+ 	      && !integer_zerop (TYPE_SIZE (type)))
+ 	    return false;
+ 	}
+       else
+ 	{
+ 	  /* If not complete but has a domain, it must be a FAM.  */
+ 	  if (NULL_TREE != TYPE_DOMAIN (type)
+ 	      && !flexible_array_member_type_p (type))
+ 	    return false;
+ 	}
      default:
        break;
      }
*************** c_build_array_type (tree type, tree doma
*** 507,513 ****
    return c_set_type_bits (ret, type);
  }
  
- 
  /* Build an array type of unspecified size.  */
  tree
  c_build_array_type_unspecified (tree type)
--- 529,534 ----
*************** c_build_array_type_unspecified (tree typ
*** 517,522 ****
--- 538,557 ----
    return c_build_array_type (type, build_index_type (upper));
  }
  
+ /* Build an array type of zero size.  */
+ tree
+ c_build_array_type_zero_size (tree type)
+ {
+   /* The GCC extension for zero-length arrays differs from
+      ISO flexible array members in that sizeof yields
+      zero.  */
+   type = c_build_array_type (type, build_index_type (NULL_TREE));
+   type = build_distinct_type_copy (TYPE_MAIN_VARIANT (type));
+   TYPE_SIZE (type) = bitsize_zero_node;
+   TYPE_SIZE_UNIT (type) = size_zero_node;
+   SET_TYPE_STRUCTURAL_EQUALITY (type);
+   return type;
+ }
  
  tree
  c_build_type_attribute_qual_variant (tree type, tree attrs, int quals)
*************** composite_type_internal (tree t1, tree t
*** 824,840 ****
  	gcc_assert (!TYPE_QUALS_NO_ADDR_SPACE (t1)
  		    && !TYPE_QUALS_NO_ADDR_SPACE (t2));
  
! 	bool t1_complete = COMPLETE_TYPE_P (t1);
! 	bool t2_complete = COMPLETE_TYPE_P (t2);
! 
! 	bool d1_zero = d1 == NULL_TREE || !TYPE_MAX_VALUE (d1);
! 	bool d2_zero = d2 == NULL_TREE || !TYPE_MAX_VALUE (d2);
  
  	bool d1_variable = top_array_vla_p (t1);
  	bool d2_variable = top_array_vla_p (t2);
  
! 	bool use1 = d1 && (d2_variable || d2_zero || !d1_variable);
! 	bool use2 = d2 && (d1_variable || d1_zero || !d2_variable);
  
  	/* If the first is an unspecified size pick the other one.  */
  	if (d2_variable && c_type_unspecified_p (t1))
--- 859,874 ----
  	gcc_assert (!TYPE_QUALS_NO_ADDR_SPACE (t1)
  		    && !TYPE_QUALS_NO_ADDR_SPACE (t2));
  
! 	bool d1_zero = zero_length_array_type_p (t1)
! 		       || flexible_array_member_type_p (t1);
! 	bool d2_zero = zero_length_array_type_p (t2)
! 		       || flexible_array_member_type_p (t2);
  
  	bool d1_variable = top_array_vla_p (t1);
  	bool d2_variable = top_array_vla_p (t2);
  
! 	bool use1 = d1 && (d2_variable || !d2 || d2_zero || !d1_variable);
! 	bool use2 = d2 && (d1_variable || !d1 || d1_zero || !d2_variable);
  
  	/* If the first is an unspecified size pick the other one.  */
  	if (d2_variable && c_type_unspecified_p (t1))
*************** composite_type_internal (tree t1, tree t
*** 889,912 ****
  	int quals = TYPE_QUALS (strip_array_types (elt));
  	tree unqual_elt = c_build_qualified_type (elt, TYPE_UNQUALIFIED);
  
! 	t1 = c_build_array_type (unqual_elt, td);
  
  	/* Check that a type which has a varying outermost dimension
! 	   got marked has having a variable size.  */
  	bool varsize = (d1_variable && d2_variable)
! 		       || (d1_variable && !t2_complete)
! 		       || (d2_variable && !t1_complete);
  	gcc_checking_assert (!varsize || C_TYPE_VARIABLE_SIZE (t1));
  
- 	/* Ensure a composite type involving a zero-length array type
- 	   is a zero-length type not an incomplete type.  */
- 	if (d1_zero && d2_zero
- 	    && (t1_complete || t2_complete)
- 	    && !COMPLETE_TYPE_P (t1))
- 	  {
- 	    TYPE_SIZE (t1) = bitsize_zero_node;
- 	    TYPE_SIZE_UNIT (t1) = size_zero_node;
- 	  }
  	t1 = c_build_qualified_type (t1, quals);
  	return c_build_type_attribute_variant (t1, attributes);
        }
--- 923,940 ----
  	int quals = TYPE_QUALS (strip_array_types (elt));
  	tree unqual_elt = c_build_qualified_type (elt, TYPE_UNQUALIFIED);
  
! 	if ((!d1 || d1_zero) && (!d2 || d2_zero) && (d1 || d2))
! 	  t1 = c_build_array_type_zero_size (unqual_elt);
! 	else
! 	  t1 = c_build_array_type (unqual_elt, td);
  
  	/* Check that a type which has a varying outermost dimension
! 	   got marked as having a variable size.  */
  	bool varsize = (d1_variable && d2_variable)
! 		       || (d1_variable && !d2)
! 		       || (d2_variable && !d1);
  	gcc_checking_assert (!varsize || C_TYPE_VARIABLE_SIZE (t1));
  
  	t1 = c_build_qualified_type (t1, quals);
  	return c_build_type_attribute_variant (t1, attributes);
        }
*************** comptypes_internal (const_tree type1, co
*** 1809,1817 ****
  	if (d1 == NULL_TREE || d2 == NULL_TREE || d1 == d2)
  	  return true;
  
- 	bool d1_zero = !TYPE_MAX_VALUE (d1);
- 	bool d2_zero = !TYPE_MAX_VALUE (d2);
- 
  	bool d1_variable = top_array_vla_p (t1);
  	bool d2_variable = top_array_vla_p (t2);
  
--- 1837,1842 ----
*************** comptypes_internal (const_tree type1, co
*** 1819,1828 ****
  	  data->different_types_p = true;
  	if (d1_variable || d2_variable)
  	  return true;
  	if (d1_zero && d2_zero)
  	  return true;
! 	if (d1_zero || d2_zero
! 	    || !tree_int_cst_equal (TYPE_MIN_VALUE (d1), TYPE_MIN_VALUE (d2))
  	    || !tree_int_cst_equal (TYPE_MAX_VALUE (d1), TYPE_MAX_VALUE (d2)))
  	  return false;
  
--- 1844,1862 ----
  	  data->different_types_p = true;
  	if (d1_variable || d2_variable)
  	  return true;
+ 
+ 	bool d1_zero = zero_length_array_type_p (t1)
+ 		       || flexible_array_member_type_p (t1);
+ 
+ 	bool d2_zero = zero_length_array_type_p (t2)
+ 		       || flexible_array_member_type_p (t2);
+ 
  	if (d1_zero && d2_zero)
  	  return true;
! 	if (d1_zero || d2_zero)
! 	  return false;
! 
! 	if (!tree_int_cst_equal (TYPE_MIN_VALUE (d1), TYPE_MIN_VALUE (d2))
  	    || !tree_int_cst_equal (TYPE_MAX_VALUE (d1), TYPE_MAX_VALUE (d2)))
  	  return false;
  
*************** check_counted_by_attribute (location_t l
*** 3089,3095 ****
    tree subdatum = TREE_OPERAND (ref, 1);
    tree sub_type = TREE_TYPE (subdatum);
  
!   if (!c_flexible_array_member_type_p (sub_type)
        && TREE_CODE (sub_type) != POINTER_TYPE)
      return;
  
--- 3123,3129 ----
    tree subdatum = TREE_OPERAND (ref, 1);
    tree sub_type = TREE_TYPE (subdatum);
  
!   if (!flexible_array_member_type_p (sub_type)
        && TREE_CODE (sub_type) != POINTER_TYPE)
      return;
  
*************** build_counted_by_ref (tree datum, tree s
*** 3137,3143 ****
  		      tree *counted_by_type)
  {
    tree sub_type = TREE_TYPE (subdatum);
!   if (!c_flexible_array_member_type_p (sub_type)
        && TREE_CODE (sub_type) != POINTER_TYPE)
      return NULL_TREE;
  
--- 3171,3177 ----
  		      tree *counted_by_type)
  {
    tree sub_type = TREE_TYPE (subdatum);
!   if (!flexible_array_member_type_p (sub_type)
        && TREE_CODE (sub_type) != POINTER_TYPE)
      return NULL_TREE;
  
*************** build_access_with_size_for_counted_by (l
*** 3232,3241 ****
  				       tree counted_by_ref,
  				       tree counted_by_type)
  {
!   gcc_assert (c_flexible_array_member_type_p (TREE_TYPE (ref))
  	      || TREE_CODE (TREE_TYPE (ref)) == POINTER_TYPE);
  
!   bool is_fam = c_flexible_array_member_type_p (TREE_TYPE (ref));
  
    /* The result type of the call is a pointer to the flexible array type;
       or is the original pointer type to the pointer field with counted_by.  */
--- 3266,3275 ----
  				       tree counted_by_ref,
  				       tree counted_by_type)
  {
!   gcc_assert (flexible_array_member_type_p (TREE_TYPE (ref))
  	      || TREE_CODE (TREE_TYPE (ref)) == POINTER_TYPE);
  
!   bool is_fam = flexible_array_member_type_p (TREE_TYPE (ref));
  
    /* The result type of the call is a pointer to the flexible array type;
       or is the original pointer type to the pointer field with counted_by.  */
*************** handle_counted_by_for_component_ref (loc
*** 3285,3291 ****
    tree subdatum = TREE_OPERAND (ref, 1);
    tree counted_by_type = NULL_TREE;
  
!   if (!(c_flexible_array_member_type_p (TREE_TYPE (ref))
  	|| TREE_CODE (TREE_TYPE (ref)) == POINTER_TYPE))
      return ref;
  
--- 3319,3325 ----
    tree subdatum = TREE_OPERAND (ref, 1);
    tree counted_by_type = NULL_TREE;
  
!   if (!(flexible_array_member_type_p (TREE_TYPE (ref))
  	|| TREE_CODE (TREE_TYPE (ref)) == POINTER_TYPE))
      return ref;
  
*************** digest_init (location_t init_loc, tree d
*** 9944,9950 ****
  	  expr.m_decimal = 0;
  	  maybe_warn_string_init (init_loc, type, expr);
  
! 	  if (TYPE_DOMAIN (type) && !TYPE_MAX_VALUE (TYPE_DOMAIN (type)))
  	    pedwarn_init (init_loc, OPT_Wpedantic,
  			  "initialization of a flexible array member");
  
--- 9978,9984 ----
  	  expr.m_decimal = 0;
  	  maybe_warn_string_init (init_loc, type, expr);
  
! 	  if (flexible_array_member_type_p (type))
  	    pedwarn_init (init_loc, OPT_Wpedantic,
  			  "initialization of a flexible array member");
  
*************** pop_init_level (location_t loc, int impl
*** 10915,10926 ****
  
    p = constructor_stack;
  
!   /* Error for initializing a flexible array member, or a zero-length
!      array member in an inappropriate context.  */
    if (constructor_type && constructor_fields
!       && TREE_CODE (constructor_type) == ARRAY_TYPE
!       && TYPE_DOMAIN (constructor_type)
!       && !TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type)))
      {
        /* Silently discard empty initializations.  The parser will
  	 already have pedwarned for empty brackets for C17 and earlier.  */
--- 10949,10957 ----
  
    p = constructor_stack;
  
!   /* Error for initializing a flexible array member.  */
    if (constructor_type && constructor_fields
!       && flexible_array_member_type_p (constructor_type))
      {
        /* Silently discard empty initializations.  The parser will
  	 already have pedwarned for empty brackets for C17 and earlier.  */
diff -Nrcpad gcc-17-20260705/gcc/c-family/ChangeLog gcc-17-20260712/gcc/c-family/ChangeLog
*** gcc-17-20260705/gcc/c-family/ChangeLog	Sun Jul  5 22:32:06 2026
--- gcc-17-20260712/gcc/c-family/ChangeLog	Sun Jul 12 22:32:07 2026
***************
*** 1,3 ****
--- 1,15 ----
+ 2026-07-10  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/107187
+ 	* c-lex.cc (c_common_has_attribute): Don't advertise
+ 	__has_cpp_attribute (gnu::trivial_abi) in C++.
+ 
+ 2026-07-08  Martin Uecker  <uecker@tugraz.at>
+ 
+ 	* c-attribs.cc (handle_counted_by_attribute): Adapt.
+ 	* c-common.h (c_flexible_array_member_type_p): Remove.
+ 	* c-common.cc (c_flexible_array_member_type_p): Remove.
+ 
  2026-06-30  Jakub Jelinek  <jakub@redhat.com>
  
  	PR c++/125837
diff -Nrcpad gcc-17-20260705/gcc/c-family/c-attribs.cc gcc-17-20260712/gcc/c-family/c-attribs.cc
*** gcc-17-20260705/gcc/c-family/c-attribs.cc	Sun Jul  5 22:32:06 2026
--- gcc-17-20260712/gcc/c-family/c-attribs.cc	Sun Jul 12 22:32:07 2026
*************** handle_counted_by_attribute (tree *node,
*** 2963,2969 ****
      }
    /* This attribute only applies to a C99 flexible array member type.  */
    else if (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
! 	   && !c_flexible_array_member_type_p (TREE_TYPE (decl)))
      {
        error_at (DECL_SOURCE_LOCATION (decl),
  		"%qE attribute is not allowed for a non-flexible"
--- 2963,2969 ----
      }
    /* This attribute only applies to a C99 flexible array member type.  */
    else if (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
! 	   && !flexible_array_member_type_p (TREE_TYPE (decl)))
      {
        error_at (DECL_SOURCE_LOCATION (decl),
  		"%qE attribute is not allowed for a non-flexible"
diff -Nrcpad gcc-17-20260705/gcc/c-family/c-common.cc gcc-17-20260712/gcc/c-family/c-common.cc
*** gcc-17-20260705/gcc/c-family/c-common.cc	Sun Jul  5 22:32:06 2026
--- gcc-17-20260712/gcc/c-family/c-common.cc	Sun Jul 12 22:32:07 2026
*************** c_common_finalize_early_debug (void)
*** 10561,10579 ****
        (*debug_hooks->early_global_decl) (cnode->decl);
  }
  
- /* Determine whether TYPE is an ISO C99 flexible array member type "[]".  */
- bool
- c_flexible_array_member_type_p (const_tree type)
- {
-   if (TREE_CODE (type) == ARRAY_TYPE
-       && TYPE_SIZE (type) == NULL_TREE
-       && TYPE_DOMAIN (type) != NULL_TREE
-       && TYPE_MAX_VALUE (TYPE_DOMAIN (type)) == NULL_TREE)
-     return true;
- 
-   return false;
- }
- 
  /* Get the LEVEL of the strict_flex_array for the ARRAY_FIELD based on the
     values of attribute strict_flex_array and the flag_strict_flex_arrays.  */
  unsigned int
--- 10561,10566 ----
diff -Nrcpad gcc-17-20260705/gcc/c-family/c-common.h gcc-17-20260712/gcc/c-family/c-common.h
*** gcc-17-20260705/gcc/c-family/c-common.h	Sun Jul  5 22:32:06 2026
--- gcc-17-20260712/gcc/c-family/c-common.h	Sun Jul 12 22:32:07 2026
*************** extern tree fold_for_warn (tree);
*** 928,934 ****
  extern tree c_common_get_narrower (tree, int *);
  extern bool get_attribute_operand (tree, unsigned HOST_WIDE_INT *);
  extern void c_common_finalize_early_debug (void);
- extern bool c_flexible_array_member_type_p (const_tree);
  extern unsigned int c_strict_flex_array_level_of (tree);
  extern bool c_option_is_from_cpp_diagnostics (int);
  extern tree c_hardbool_type_attr_1 (tree, tree *, tree *);
--- 928,933 ----
diff -Nrcpad gcc-17-20260705/gcc/c-family/c-lex.cc gcc-17-20260712/gcc/c-family/c-lex.cc
*** gcc-17-20260705/gcc/c-family/c-lex.cc	Sun Jul  5 22:32:06 2026
--- gcc-17-20260712/gcc/c-family/c-lex.cc	Sun Jul 12 22:32:07 2026
*************** c_common_has_attribute (cpp_reader *pfil
*** 403,408 ****
--- 403,415 ----
  		result = 1;
  	      if (result)
  		attr_name = NULL_TREE;
+ 	      /* gnu::trivial_abi is in the attribute table just
+ 		 to error on it and suggest using [[clang::trivial_abi]]
+ 		 or __attribute__((trivial_abi)).  Don't advertise it.  */
+ 	      else if (c_dialect_cxx ()
+ 		       && is_attribute_p ("gnu", attr_ns)
+ 		       && is_attribute_p ("trivial_abi", attr_id))
+ 		attr_name = NULL_TREE;
  	      else
  		attr_name = build_tree_list (attr_ns, attr_id);
  	    }
diff -Nrcpad gcc-17-20260705/gcc/cobol/ChangeLog gcc-17-20260712/gcc/cobol/ChangeLog
*** gcc-17-20260705/gcc/cobol/ChangeLog	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/cobol/ChangeLog	Sun Jul 12 22:32:07 2026
***************
*** 1,3 ****
--- 1,158 ----
+ 2026-07-11  Robert Dubner  <rdubner@symas.com>
+ 
+ 	* copybook.h (class copybook_t): Mollify cppcheck.
+ 	* lexio.h (struct filespan_t): Likewise.
+ 	* symbols.h (symbol_typedef): Add declaration.
+ 
+ 2026-07-10  Robert Dubner  <rdubner@symas.com>
+ 
+ 	* Make-lang.in: Copy charmaps.cc and valconv.cc without using SED to
+ 	alter their contents.
+ 	* cbldiag.h (struct cbl_loc_t): Mollify cppcheck.
+ 	* compare.cc (alpha_compare_figconst): Endianness.
+ 	(alpha_compare): Endianness.
+ 	* genapi.cc (get_class_condition_string): Endianness.
+ 	(parser_statement_end): Fix initialization.
+ 	(initialize_variable_internal): Likewise.
+ 	(leave_section_internal): Likewise.
+ 	(parser_init_list): Likewise.
+ 	(parser_alphabet): Pass "cbl_alphabet_t *" instead of
+ 	"cbl_alphabet_t &"
+ 	(parser_alphabet_use): Likewise.
+ 	(program_end_stuff): Endianness.
+ 	(establish_using): Endianness; use out-of-band metadata to handle
+ 	passing intermediate_e variables BY VALUE.
+ 	(parser_trim): Endianness.
+ 	(parser_sort): Change call to parser_alphabet_use().
+ 	(parser_file_sort): Likewise.
+ 	(parser_file_merge): Likewise.
+ 	(create_and_call): Change handling of BY VALUE; handle RETURN-CODE
+ 	properly for dialects IBM, MF, and GNU.
+ 	(actually_create_the_static_field): Endianness.
+ 	(parser_symbol_add): Endianness.
+ 	* genapi.h (parser_alphabet): Change declaration.
+ 	(parser_alphabet_use): Likewise.
+ 	(parser_file_merge): Make a couple of formal parameters "const".
+ 	* genmath.cc: Incorporate cobol-endian.h.
+ 	* genutil.cc (binary_from_numdisp): Endianness.
+ 	(get_binary_value): Endianness.
+ 	(safe_cast): Prevent aliasing.
+ 	(safe_assign): New routine that extracts the binary value from a
+ 	numeric source, and assigns it to the target, converting as
+ 	necessary based on the target's TREE_TYPE.
+ 	* genutil.h (safe_assign): New declaration.
+ 	* messages.cc: Incorporate cobol-endian.h.
+ 	* move.cc (mh_source_is_literalN): Use streamlined, endian-safe
+ 	routines.
+ 	* parse.y: Incorporate cobol-endian.h; set big_endian_e for
+ 	FldNumericBin5 when the target machine is big-endian.
+ 	* parse_ante.h (mode_syntax_only): Formatting.
+ 	(struct prototype_type_t): Likewise.
+ 	(is_allowed_name): Likewise.
+ 	(prototype_args): Likewise.
+ 	(verify_args): Likewise.
+ 	(valid_pointer_relop): Likewise.
+ 	(blankit): Eliminate.
+ 	(cbl_field_t::blank_initial): Handle multi-byte characters.
+ 	(cbl_field_t::set_initial): Formatting.
+ 	(data_division_ready): Likewise.
+ 	(field_binary_usage): Likewise.
+ 	(ast_end_program): Likewise.
+ 	* parse_util.h (intrinsic_invalid_parameter): Eliminate FldIndex as
+ 	an invalid parameter type.
+ 	* symbols.cc (symbols_alphabet_set): Remove FldIndex from list of
+ 	invalid types.
+ 	(cbl_alphabet_t::reencode): Handle big-endian multi-byte charsets.
+ 	(iconv_cd): Use helpful_iconv_open().
+ 	(symbol_label_add): Eliminate overwritten assignment.
+ 	* util.cc (cbl_field_t::encode_numeric): Handle big-endian
+ 	numeric-display values.
+ 
+ 2026-07-10  James K. Lowden  <jklowden@cobolworx.com>
+ 
+ 	* lexio.h (parse_error_inc): Declare function.
+ 	(struct filespan_t::next_line): Detect and remove NUL,
+ 
+ 2026-07-09  James K. Lowden  <jklowden@cobolworx.com>
+ 
+ 	PR cobol/126105
+ 	* parse.y: Remove unnecessary test and improve diagnostic message.
+ 	* parse_ante.h (yylocation_print): New function.
+ 	(YYLOCATION_PRINT): Define, because user-defined cbl_loc_t location.
+ 	* symbols.cc (symbol_typedef): Exclude current field from type search.
+ 	* symbols.h (symbol_typedef): Delete unused overload.
+ 
+ 2026-07-09  James K. Lowden  <jklowden@cobolworx.com>
+ 
+ 	PR cobol/126106
+ 	* parse.y: Report error instead of crashing.
+ 
+ 2026-07-08  James K. Lowden  <jklowden@cobolworx.com>
+ 
+ 	* genapi.cc (parser_call_targets_dump): Remove function.
+ 	* genapi.h (parser_call_targets_dump): Same.
+ 	* parse.y: Instantiate forward labels consistently.
+ 	(label_add) Capture forward references for efficiency.
+ 	(paragraph_reference) Use forward reference.
+ 	(label_add_once): New function.
+ 	* parse_ante.h (label_add_once): Declare function.
+ 	(label_instantiate): New function.
+ 	(ast_enter_exit_section): Improve debug message.
+ 	* symbols.cc (label_cmp): Allow forward reference to have a parent.
+ 	(cbl_label_ref_t): Remove class.
+ 	(symbol_label): Whitespace.
+ 	(symbols_dump): Add information to output.
+ 	(symbol_add): Remove program label symbol-assignment to symbol_label_add.
+ 	(cbl_label_t::str): Add information to output.
+ 	(symbol_label_add): Assign id to program label.
+ 	* symbols.h (class cbl_label_ref_t): Remove.
+ 	(struct symbol_elem_t): Remove struct keyword.
+ 	(struct cbl_label_t): Same.
+ 	(struct cbl_special_name_t): Same.
+ 	(struct cbl_field_t): Same.
+ 	(symbol_typedef): Same.
+ 	(symbol_field): Same.
+ 	(symbol_label): Same.
+ 	(symbol_function): Same.
+ 	(symbol_function_any): Same.
+ 	(symbol_program): Same.
+ 	(symbol_literalA): Same.
+ 	(symbol_special): Same.
+ 	(symbol_locale): Same.
+ 	(symbol_alphabet): Same.
+ 	(symbol_file): Same.
+ 	(symbol_file_record): Same.
+ 	(struct cbl_section_t): Same.
+ 	(symbol_section): Same.
+ 	(parent_of): Same.
+ 	* util.cc: (match_proc::find) Use only section and paragraph names.
+ 
+ 2026-07-08  James K. Lowden  <jklowden@cobolworx.com>
+ 
+ 	* parse.y (literal_refmod_valid): Do not deference NULL pointer.
+ 
+ 2026-07-06  James K. Lowden  <jklowden@cobolworx.com>
+ 
+ 	* cbldiag.h (struct cbl_loc_t): Add as_first_line() function.
+ 	(location_dump): Shorten diagnostic message.
+ 	* cdf-copy.cc (copybook_elem_t::open_file): Same.
+ 	* copybook.h (class copybook_t): Remove debug message.
+ 	* lexio.cc (parse_copy_directive): Clarify comment.
+ 	(cdftext::lex_open): Set please_push_filename boolean for open_input.
+ 	(cdftext::open_input): Issue push directive where COPY appeared.
+ 	(cdftext::output_push_directive): New function.
+ 	(cdftext::process_file): Relocate PUSH/POP directives.
+ 	* lexio.h (class cdftext): Add please_push_filename and output_push_directive().
+ 	* parse.y: Improve PERFORM diagnostics.
+ 	* parse_ante.h (ast_enter_exit_section): Correct paragraph section ancestor.
+ 	* scan.l: Update gcc location for PUSH directive.
+ 	* symbols.cc (cbl_perform_tgt_t::recurses): New validation function.
+ 	* symbols.h (struct cbl_perform_tgt_t): Same.
+ 	* util.cc (cobol_filename): Clarify diagnostic message.
+ 	(gcc_location_set_impl): Remove function.
+ 	(gcc_location_set): Implement directly.
+ 	(gcc_location_dump): Add newline to output.
+ 
  2026-06-30  Robert Dubner  <rdubner@symas.com>
  
  	* compare.cc (alpha_compare_figconst): Make the code endian-agnostic.
diff -Nrcpad gcc-17-20260705/gcc/cobol/Make-lang.in gcc-17-20260712/gcc/cobol/Make-lang.in
*** gcc-17-20260705/gcc/cobol/Make-lang.in	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/cobol/Make-lang.in	Sun Jul 12 22:32:07 2026
*************** cobol1_OBJS =    \
*** 93,103 ****
  # on all of the libgcobol/*.h files, which might lead to the occasional
  # unnecessary compilation.  The impact of that is negligible.
  #
- # Various #includes in the files copied from gcc/libgcobol need to be modified
- # so that the .h files can be found.
  
  cobol/charmaps.cc cobol/valconv.cc: cobol/%.cc: $(LIB_SOURCE)/%.cc
! 	sed -e '/^#include/s,"\([^"]*[^g"].h\)","../../libgcobol/\1",' $^ > $@
  
  LIB_SOURCE_H=$(wildcard $(LIB_SOURCE)/*.h)
  
--- 93,101 ----
  # on all of the libgcobol/*.h files, which might lead to the occasional
  # unnecessary compilation.  The impact of that is negligible.
  #
  
  cobol/charmaps.cc cobol/valconv.cc: cobol/%.cc: $(LIB_SOURCE)/%.cc
! 	cp $^ $@
  
  LIB_SOURCE_H=$(wildcard $(LIB_SOURCE)/*.h)
  
diff -Nrcpad gcc-17-20260705/gcc/cobol/cbldiag.h gcc-17-20260712/gcc/cobol/cbldiag.h
*** gcc-17-20260705/gcc/cobol/cbldiag.h	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/cobol/cbldiag.h	Sun Jul 12 22:32:07 2026
*************** struct cbl_loc_t : public cbl_loc_base_t
*** 116,132 ****
          last_line, last_column
        }
    {}
!   cbl_loc_t( const cbl_loc_base_t& base ) : cbl_loc_base_t(base)   // cppcheck-suppress noExplicitConstructor
    {}
! #if 0
!   cbl_loc_t(   int first_line, int first_column,
!                int last_line,  int last_column ) 
!     : first_line(first_line)
!     , first_column(first_column)
!     , last_line(last_line)
!     , last_column(last_column)
    {}
! #endif
  };
  
  const cbl_loc_t& cobol_location();
--- 116,146 ----
          last_line, last_column
        }
    {}
!   // cppcheck-suppress noExplicitConstructor
!   cbl_loc_t( const cbl_loc_base_t& base )
!     : cbl_loc_base_t(base)   
    {}
! 
!   explicit cbl_loc_t(   int line )
!     : cbl_loc_base_t {
!         line, 1, line, 1
!       }
    {}
! 
!   cbl_loc_t& operator=( int lineno ) {
!     first_line = last_line = lineno;
!     first_column = last_column = 1;
!     return *this;
!   }
! 
!   // Represent a multi-line location as the first line, so "included from"
!   // reflects where the COPY statement appears, not where it ends. 
!   cbl_loc_t as_first_line() const {
!     cbl_loc_t loc(*this);
!     loc.last_line = first_line;
!     loc.last_column = first_column;
!     return loc;
!   }
  };
  
  const cbl_loc_t& cobol_location();
*************** enum cbl_diag_id_t : uint64_t {
*** 158,163 ****
--- 172,178 ----
    LexReplaceE,
    LexSeparatorE,
  
+   IbmCallFd,
    IbmCdf,
    IbmEjectE,
    IbmEqualAssignE,
*************** location_dump( const char func[], int li
*** 275,283 ****
    if( yy_flex_debug ) {
      const char *detail = gcobol_getenv("update_location");
      if( detail ) { // cppcheck-suppress knownConditionTrueFalse
!       fprintf(stderr, "%s:%d: %s location (%d,%d) to (%d,%d)\n",
                func, line, tag,
!               loc.first_line, loc.first_column, loc.last_line, loc.last_column);
        if( *detail == '2' ) gcc_location_dump();
      }
    }
--- 290,298 ----
    if( yy_flex_debug ) {
      const char *detail = gcobol_getenv("update_location");
      if( detail ) { // cppcheck-suppress knownConditionTrueFalse
!       fprintf(stderr, "%s:%d: %s location (%d,%d) to (%d,%d) '%c'\n",
                func, line, tag,
!               loc.first_line, loc.first_column, loc.last_line, loc.last_column, detail[0]);
        if( *detail == '2' ) gcc_location_dump();
      }
    }
diff -Nrcpad gcc-17-20260705/gcc/cobol/cdf-copy.cc gcc-17-20260712/gcc/cobol/cdf-copy.cc
*** gcc-17-20260705/gcc/cobol/cdf-copy.cc	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/cobol/cdf-copy.cc	Sun Jul 12 22:32:07 2026
*************** copybook_elem_t::open_file( const char d
*** 293,307 ****
    gcc_assert( ! literally );
  
    free(copier);
  
    for( auto suffix : suffixes ) {
      std::string pattern(path);
      pattern += suffix;
-     dbgmsg("%s: trying %s", __func__, pattern.c_str());
- 
      auto filename = pattern.c_str();
      if( (this->fd = open(filename, O_RDONLY)) != -1 ) {
-       dbgmsg("found copybook file %s", filename);
        this->source.name = xstrdup(filename);
        if( ! cobol_filename(this->source.name, inode_of(fd)) ) {
          error_msg(source.loc, "recursive copybook: '%s' includes itself",
--- 293,319 ----
    gcc_assert( ! literally );
  
    free(copier);
+   
+   extern int yydebug;
+   if( yydebug ) {
+     std::string pattern(path);
+     pattern += "{";
+     auto comma = "";
+     for( const auto suffix : suffixes ) {
+       pattern += comma;
+       pattern += suffix;
+       comma = ",";
+     }
+     pattern += "}";
+     dbgmsg("%s: trying %s", __func__, pattern.c_str());
+   }
  
    for( auto suffix : suffixes ) {
      std::string pattern(path);
      pattern += suffix;
      auto filename = pattern.c_str();
+     
      if( (this->fd = open(filename, O_RDONLY)) != -1 ) {
        this->source.name = xstrdup(filename);
        if( ! cobol_filename(this->source.name, inode_of(fd)) ) {
          error_msg(source.loc, "recursive copybook: '%s' includes itself",
diff -Nrcpad gcc-17-20260705/gcc/cobol/cobol1.cc gcc-17-20260712/gcc/cobol/cobol1.cc
*** gcc-17-20260705/gcc/cobol/cobol1.cc	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/cobol/cobol1.cc	Sun Jul 12 22:32:07 2026
*************** cobol_langhook_handle_option (size_t sco
*** 581,586 ****
--- 581,590 ----
            cobol_warning(MfBinaryLongLong, binary_long_long, warning_as_error);
            return true;
  
+         case OPT_Wcall_fd:
+           cobol_warning(IbmCallFd, cobol_call_fd, warning_as_error);
+           return true;
+ 
          case OPT_Wcall_giving:
            cobol_warning(MfCallGiving, call_giving, warning_as_error);
            return true;
diff -Nrcpad gcc-17-20260705/gcc/cobol/compare.cc gcc-17-20260712/gcc/cobol/compare.cc
*** gcc-17-20260705/gcc/cobol/compare.cc	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/cobol/compare.cc	Sun Jul 12 22:32:07 2026
***************
*** 50,55 ****
--- 50,56 ----
  #include "genmath.h"
  #include "structs.h"
  #include "../../libgcobol/gcobolio.h"
+ #include "../../libgcobol/cobol-endian.h"
  #include "../../libgcobol/charmaps.h"
  #include "../../libgcobol/valconv.h"
  #include "show_parse.h"
*************** alpha_compare_figconst( tree        &lef
*** 606,620 ****
  
    const charmap_t *charmap_left =
                         __gg__get_charmap(left_side.field->codeset.encoding);
!   charmap_t *charmap_right =
!                        __gg__get_charmap(right_side.field->codeset.encoding);
  
    // We know the result of this mapping has to be an 8-bit value, because
    // all figconsts map to a single byte.  HIGH-VALUE is a bit of a problem,
    // but when is it not?  It usually will be 0xFF in the low-order byte, so
    // that's what we assume for now.
  
!   uint8_t char_right = charmap_right->figconst_character(figconst_right);
  
    size_t nbytes;
    char *converted;
--- 607,621 ----
  
    const charmap_t *charmap_left =
                         __gg__get_charmap(left_side.field->codeset.encoding);
! ////  charmap_t *charmap_right =
! ////                       __gg__get_charmap(right_side.field->codeset.encoding);
  
    // We know the result of this mapping has to be an 8-bit value, because
    // all figconsts map to a single byte.  HIGH-VALUE is a bit of a problem,
    // but when is it not?  It usually will be 0xFF in the low-order byte, so
    // that's what we assume for now.
  
!   uint8_t char_right = char_from_figconst(figconst_right);
  
    size_t nbytes;
    char *converted;
*************** alpha_compare(tree        &left,
*** 798,807 ****
      // R.J.Dubner; 2026-05-08
      static const long MAGIC_NUMBER = 16;
  
!     // We are going to need the space character in this encoding space.  We
!     // know the result of the mapping has to fit into a byte, so we do that
!     // to make things work in both little-endian and big-endian.
!     uint8_t space_char = charmap_left->mapped_character(ascii_space);
      const char *the_routine;
      switch( charmap_left->stride() )
        {
--- 799,813 ----
      // R.J.Dubner; 2026-05-08
      static const long MAGIC_NUMBER = 16;
  
!     char ach_space[4];
!     char ch = ascii_space;
!     size_t nbytes;
!     const char *converted = __gg__iconverter(DEFAULT_SOURCE_ENCODING,
!                                              left_side.field->codeset.encoding,
!                                              &ch,
!                                              1,
!                                              &nbytes);
!     memcpy(ach_space, converted, nbytes);
      const char *the_routine;
      switch( charmap_left->stride() )
        {
*************** alpha_compare(tree        &left,
*** 850,861 ****
                    {
                    IF( gg_indirect(location_left, count),
                        ne_op,
!                       build_int_cst_type(UCHAR, space_char) )
                      {
                      // We have a difference.  We need to calculate +1/-1
                      IF( gg_indirect(location_left, count),
                          gt_op,
!                         build_int_cst_type(UCHAR, space_char) )
                        {
                        gg_assign(left, integer_one_node);
                        }
--- 856,867 ----
                    {
                    IF( gg_indirect(location_left, count),
                        ne_op,
!                       build_int_cst_type(UCHAR, *ach_space) )
                      {
                      // We have a difference.  We need to calculate +1/-1
                      IF( gg_indirect(location_left, count),
                          gt_op,
!                         build_int_cst_type(UCHAR, *ach_space) )
                        {
                        gg_assign(left, integer_one_node);
                        }
*************** alpha_compare(tree        &left,
*** 897,908 ****
                    {
                    IF( gg_indirect(location_right, count),
                        ne_op,
!                       build_int_cst_type(UCHAR, space_char) )
                      {
                      // We have a difference.  We need to calculate +1/-1
                      IF( gg_indirect(location_right, count),
                          lt_op,
!                         build_int_cst_type(UCHAR, space_char) )
                        {
                        gg_assign(left, integer_one_node);
                        }
--- 903,914 ----
                    {
                    IF( gg_indirect(location_right, count),
                        ne_op,
!                       build_int_cst_type(UCHAR, *ach_space) )
                      {
                      // We have a difference.  We need to calculate +1/-1
                      IF( gg_indirect(location_right, count),
                          lt_op,
!                         build_int_cst_type(UCHAR, *ach_space) )
                        {
                        gg_assign(left, integer_one_node);
                        }
*************** alpha_compare(tree        &left,
*** 993,999 ****
              length_left,
              location_right,
              length_right,
!             build_int_cst_type(INT, space_char),
              NULL_TREE);
      retval = true;
      goto done;
--- 999,1005 ----
              length_left,
              location_right,
              length_right,
!             build_string_literal(charmap_left->stride(), ach_space),
              NULL_TREE);
      retval = true;
      goto done;
diff -Nrcpad gcc-17-20260705/gcc/cobol/copybook.h gcc-17-20260712/gcc/cobol/copybook.h
*** gcc-17-20260705/gcc/cobol/copybook.h	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/cobol/copybook.h	Sun Jul 12 22:32:07 2026
*************** class copybook_t {
*** 197,207 ****
      book.clear();
      this->source(loc, name);
  
!     for( auto dir : directories ) {
!       dbgmsg("copybook_t::open '%s' OF '%s' %s",
! 	     book.source.name,
! 	     dir? dir: ".",
! 	     book.literally.source? ", literally" : "" );
        if( (fd = book.open_file(dir, book.literally.source)) != -1 ) break;
      }
      return fd;
--- 197,204 ----
      book.clear();
      this->source(loc, name);
  
!     for( const auto &dir : directories ) {
!       // cppcheck-suppress useStlAlgorithm
        if( (fd = book.open_file(dir, book.literally.source)) != -1 ) break;
      }
      return fd;
diff -Nrcpad gcc-17-20260705/gcc/cobol/gcobol.1 gcc-17-20260712/gcc/cobol/gcobol.1
*** gcc-17-20260705/gcc/cobol/gcobol.1	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/cobol/gcobol.1	Sun Jul 12 22:32:07 2026
***************
*** 44,49 ****
--- 44,50 ----
  .Op Fl Wno-bad-line-directive
  .Op Fl Wno-bad-numeric
  .Op Fl Wno-binary-long-long
+ .Op Fl Wno-call-fd
  .Op Fl Wno-call-giving
  .Op Fl Wno-call-literal
  .Op Fl Wno-cdf-dollar
*************** Warn if malformed
*** 603,608 ****
--- 604,612 ----
  directive is encountered.
  .It Fl Wno-binary-long-long
  Warn if BINARY-LONG-LONG is used.
+ .It Fl Wno-call_fd
+ Warn if CALL with FD parameter is used.
+ This feature is currently unimplemented. 
  .It Fl Wno-call_giving
  Warn if CALL ... GIVING is used.
  .It Fl Wno-call_literal
diff -Nrcpad gcc-17-20260705/gcc/cobol/genapi.cc gcc-17-20260712/gcc/cobol/genapi.cc
*** gcc-17-20260705/gcc/cobol/genapi.cc	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/cobol/genapi.cc	Sun Jul 12 22:32:07 2026
***************
*** 50,55 ****
--- 50,56 ----
  #include "genmath.h"
  #include "structs.h"
  #include "../../libgcobol/gcobolio.h"
+ #include "../../libgcobol/cobol-endian.h"
  #include "../../libgcobol/charmaps.h"
  #include "../../libgcobol/valconv.h"
  #include "show_parse.h"
*************** get_class_condition_string(cbl_field_t *
*** 561,567 ****
                                : strlen(domain->first.name());
  
      cbl_encoding_t from = var->codeset.default_encodings.source->type;
!     cbl_encoding_t to = DEFAULT_32_ENCODING;
      size_t nbytes;
      const char *converted;
  
--- 562,568 ----
                                : strlen(domain->first.name());
  
      cbl_encoding_t from = var->codeset.default_encodings.source->type;
!     cbl_encoding_t to = HOST_32_ENCODING;
      size_t nbytes;
      const char *converted;
  
*************** parser_call_target_convention( tree func
*** 737,765 ****
    return cbl_call_cobol_e;
    }
  
- void
- parser_call_targets_dump()
-   {
-     dbgmsg( "call targets for #" HOST_SIZE_T_PRINT_UNSIGNED " NOT dumping",
-             (fmt_size_t)current_program_index() );
- #if 0 // A change to call_targets rendered this routine useless.  Until we get
-       // around to repairing it, this code is left for reference.
-     for( const auto& elem : call_targets ) {
-       const auto& k = elem.first;
-       const auto& v = elem.second;
-       fprintf(stderr, "\t#%-3" GCC_PRISZ "u %s calls %s ",
-               (fmt_size_t)k.caller, cbl_label_of(symbol_at(k.caller))->name,
-               k.called);
-       char ch = '[';
-       for( auto func : v ) {
-         fprintf( stderr, "%c %s", ch, IDENTIFIER_POINTER(DECL_NAME(func)) );
-         ch = ',';
-       }
-       fprintf(stderr, " ]\n");
-     }
- #endif
-   }
- 
  size_t
  parser_call_target_update( size_t caller,
                             const char plain_name[],
--- 738,743 ----
*************** parser_statement_end( const std::list<cb
*** 1227,1232 ****
--- 1205,1219 ----
      }
    }
  
+ 
+ static const int DEFAULT_BYTE_MASK = 0x00000000FF;
+ static const int NSUBSCRIPT_MASK   = 0x0000000F00;
+ static const int NSUBSCRIPT_SHIFT  =            8;
+ static const int DEFAULTBYTE_BIT   = 0x0000001000;
+ static const int EXPLICIT_BIT      = 0x0000002000;
+ static const int REDEFINED_BIT     = 0x0000004000;
+ static const int JUST_ONCE_BIT     = 0x0000008000;
+ 
  static void
  initialize_variable_internal( cbl_refer_t refer,
                                bool explicitly=false,
*************** initialize_variable_internal( cbl_refer_
*** 1417,1430 ****
        }
      }
  
-   static const int DEFAULT_BYTE_MASK = 0x00000000FF;
-   static const int NSUBSCRIPT_MASK   = 0x0000000F00;
-   static const int NSUBSCRIPT_SHIFT  =            8;
-   static const int DEFAULTBYTE_BIT   = 0x0000001000;
-   static const int EXPLICIT_BIT      = 0x0000002000;
-   static const int REDEFINED_BIT     = 0x0000004000;
-   static const int JUST_ONCE_BIT     = 0x0000008000;
- 
    int flag_bits  = 0;
    flag_bits     |= explicitly ? EXPLICIT_BIT : 0;
    flag_bits     |= is_redefined && !explicitly ? REDEFINED_BIT : 0 ;
--- 1404,1409 ----
*************** leave_section_internal()
*** 2042,2052 ****
    Analyze();
    SHOW_PARSE
      {
!     if(gg_trans_unit.function_stack.size() && current_function && current_function->current_section)
        {
        SHOW_PARSE_HEADER
        SHOW_PARSE_TEXT(" ")
        SHOW_PARSE_TEXT(current_function->current_section->label->name)
        SHOW_PARSE_END
        }
      }
--- 2021,2036 ----
    Analyze();
    SHOW_PARSE
      {
!     if(   gg_trans_unit.function_stack.size()
!        && current_function && current_function->current_section)
        {
        SHOW_PARSE_HEADER
        SHOW_PARSE_TEXT(" ")
        SHOW_PARSE_TEXT(current_function->current_section->label->name)
+       SHOW_PARSE_TEXT(" ")
+       fprintf(stderr,
+               "%p",
+               static_cast<void *>(current_function->current_section->label));
        SHOW_PARSE_END
        }
      }
*************** parser_init_list()
*** 3494,3506 ****
            "..variables_to_init_" HOST_SIZE_T_PRINT_DEC,
            (fmt_size_t)current_function->our_symbol_table_index);
    tree array = gg_trans_unit_var_decl(ach);
    gg_call(VOID,
            "__gg__variables_to_init",
            gg_pointer_to_array(array),
!           wsclear() ? build_string_literal(
!                                     1,
!                                     reinterpret_cast<const char *>(wsclear()))
!                     : null_pointer_node,
            NULL_TREE);
    }
  
--- 3478,3491 ----
            "..variables_to_init_" HOST_SIZE_T_PRINT_DEC,
            (fmt_size_t)current_function->our_symbol_table_index);
    tree array = gg_trans_unit_var_decl(ach);
+ 
+   int flag_bits =  wsclear()
+                 ? DEFAULTBYTE_BIT + (*wsclear() & DEFAULT_BYTE_MASK)
+                 : 0;
    gg_call(VOID,
            "__gg__variables_to_init",
            gg_pointer_to_array(array),
!           build_int_cst_type(INT, flag_bits),
            NULL_TREE);
    }
  
*************** parser_accept_date_hhmmssff( struct cbl_
*** 4391,4406 ****
   */
  
  void
! parser_alphabet( const cbl_alphabet_t& alphabet )
    {
    Analyze();
    SHOW_PARSE
      {
      SHOW_PARSE_HEADER
!     char *psz = xasprintf(" %s ", alphabet.name);
      SHOW_PARSE_TEXT(psz);
      free(psz);
!     switch(alphabet.encoding)
        {
        case iconv_CP1252_e:
          psz = xasprintf("CP1252");
--- 4376,4391 ----
   */
  
  void
! parser_alphabet( const cbl_alphabet_t *alphabet )
    {
    Analyze();
    SHOW_PARSE
      {
      SHOW_PARSE_HEADER
!     char *psz = xasprintf(" %s ", alphabet->name);
      SHOW_PARSE_TEXT(psz);
      free(psz);
!     switch(alphabet->encoding)
        {
        case iconv_CP1252_e:
          psz = xasprintf("CP1252");
*************** parser_alphabet( const cbl_alphabet_t& a
*** 4418,4427 ****
          psz = xasprintf("UTF8");
          break;
        case custom_encoding_e:
!         psz = xasprintf("%s", alphabet.name);
          break;
        default:
!         { const char * p = __gg__encoding_iconv_name( alphabet.encoding );
            psz = xasprintf("%s", p? p : "[unknown]");
          }
        }
--- 4403,4412 ----
          psz = xasprintf("UTF8");
          break;
        case custom_encoding_e:
!         psz = xasprintf("%s", alphabet->name);
          break;
        default:
!         { const char * p = __gg__encoding_iconv_name( alphabet->encoding );
            psz = xasprintf("%s", p? p : "[unknown]");
          }
        }
*************** parser_alphabet( const cbl_alphabet_t& a
*** 4431,4437 ****
      SHOW_PARSE_END
      }
  
!   switch(alphabet.encoding)
      {
      case iconv_CP1252_e:
      case ASCII_e:
--- 4416,4422 ----
      SHOW_PARSE_END
      }
  
!   switch(alphabet->encoding)
      {
      case iconv_CP1252_e:
      case ASCII_e:
*************** parser_alphabet( const cbl_alphabet_t& a
*** 4442,4448 ****
  
      case custom_encoding_e:
        {
!       uint64_t alphabet_index = symbol_unique_index(symbol_elem_of(&alphabet));
  
        unsigned char ach[256];
  
--- 4427,4433 ----
  
      case custom_encoding_e:
        {
!       uint64_t alphabet_index = symbol_unique_index(symbol_elem_of(alphabet));
  
        unsigned char ach[256];
  
*************** parser_alphabet( const cbl_alphabet_t& a
*** 4453,4473 ****
          // character i has the ordinal alphabet[i]
          unsigned char ch = i;
  
!         ach[ch] = (alphabet.collation_sequence[i]);
          gg_assign(  gg_array_value(table256, ch),
!                     build_int_cst_type(UCHAR, (alphabet.collation_sequence[i])) );
          }
  
!       unsigned int low_char  = alphabet.low_char;
!       unsigned int high_char = alphabet.high_char;
!       __gg__alphabet_create(alphabet.encoding,
                              alphabet_index,
                              ach,
                              low_char,
                              high_char);
        gg_call(VOID,
                "__gg__alphabet_create",
!               build_int_cst_type(INT, alphabet.encoding),
                build_int_cst_type(SIZE_T, alphabet_index),
                gg_pointer_to_array(table256),
                build_int_cst_type(INT, low_char),
--- 4438,4458 ----
          // character i has the ordinal alphabet[i]
          unsigned char ch = i;
  
!         ach[ch] = (alphabet->collation_sequence[i]);
          gg_assign(  gg_array_value(table256, ch),
!                     build_int_cst_type(UCHAR, (alphabet->collation_sequence[i])) );
          }
  
!       unsigned int low_char  = alphabet->low_char;
!       unsigned int high_char = alphabet->high_char;
!       __gg__alphabet_create(alphabet->encoding,
                              alphabet_index,
                              ach,
                              low_char,
                              high_char);
        gg_call(VOID,
                "__gg__alphabet_create",
!               build_int_cst_type(INT, alphabet->encoding),
                build_int_cst_type(SIZE_T, alphabet_index),
                gg_pointer_to_array(table256),
                build_int_cst_type(INT, low_char),
*************** parser_alphabet( const cbl_alphabet_t& a
*** 4484,4499 ****
    }
  
  void
! parser_alphabet_use( cbl_alphabet_t& alphabet )
    {
    Analyze();
    SHOW_PARSE
      {
      SHOW_PARSE_HEADER
!     char *psz = xasprintf(" %s ", alphabet.name);
      SHOW_PARSE_TEXT(psz);
      free(psz);
!     switch(alphabet.encoding)
        {
        case iconv_CP1252_e:
          psz = xasprintf("CP1252");
--- 4469,4484 ----
    }
  
  void
! parser_alphabet_use( const cbl_alphabet_t *alphabet )
    {
    Analyze();
    SHOW_PARSE
      {
      SHOW_PARSE_HEADER
!     char *psz = xasprintf(" %s ", alphabet->name);
      SHOW_PARSE_TEXT(psz);
      free(psz);
!     switch(alphabet->encoding)
        {
        case iconv_CP1252_e:
          psz = xasprintf("CP1252");
*************** parser_alphabet_use( cbl_alphabet_t& alp
*** 4511,4517 ****
          psz = xasprintf("UTF8");
          break;
        case custom_encoding_e:
!         psz = xasprintf("%s", alphabet.name);
          break;
        default:
          gcc_unreachable();
--- 4496,4502 ----
          psz = xasprintf("UTF8");
          break;
        case custom_encoding_e:
!         psz = xasprintf("%s", alphabet->name);
          break;
        default:
          gcc_unreachable();
*************** parser_alphabet_use( cbl_alphabet_t& alp
*** 4521,4531 ****
      SHOW_PARSE_END
      }
  
!   uint64_t alphabet_index = symbol_unique_index(symbol_elem_of(&alphabet));
  
    current_function->alphabet_in_use = true;
  
!   switch(alphabet.encoding)
      {
      default:
        gcc_unreachable();
--- 4506,4516 ----
      SHOW_PARSE_END
      }
  
!   uint64_t alphabet_index = symbol_unique_index(symbol_elem_of(alphabet));
  
    current_function->alphabet_in_use = true;
  
!   switch(alphabet->encoding)
      {
      default:
        gcc_unreachable();
*************** parser_alphabet_use( cbl_alphabet_t& alp
*** 4540,4546 ****
                "__gg__alphabet_use",
                build_int_cst_type(INT, current_encoding(display_encoding_e)),
                build_int_cst_type(INT, current_encoding(national_encoding_e)),
!               build_int_cst_type(INT, alphabet.encoding),
                null_pointer_node,
                NULL_TREE);
        break;
--- 4525,4531 ----
                "__gg__alphabet_use",
                build_int_cst_type(INT, current_encoding(display_encoding_e)),
                build_int_cst_type(INT, current_encoding(national_encoding_e)),
!               build_int_cst_type(INT, alphabet->encoding),
                null_pointer_node,
                NULL_TREE);
        break;
*************** parser_alphabet_use( cbl_alphabet_t& alp
*** 4557,4563 ****
                "__gg__alphabet_use",
                build_int_cst_type(INT, current_encoding(display_encoding_e)),
                build_int_cst_type(INT, current_encoding(national_encoding_e)),
!               build_int_cst_type(INT, alphabet.encoding),
                build_int_cst_type(SIZE_T, alphabet_index),
                NULL_TREE);
        break;
--- 4542,4548 ----
                "__gg__alphabet_use",
                build_int_cst_type(INT, current_encoding(display_encoding_e)),
                build_int_cst_type(INT, current_encoding(national_encoding_e)),
!               build_int_cst_type(INT, alphabet->encoding),
                build_int_cst_type(SIZE_T, alphabet_index),
                NULL_TREE);
        break;
*************** parser_exit_program()
*** 5568,5575 ****
  
  static
  void
! program_end_stuff(cbl_refer_t refer,
!                   ec_type_t ec)
    {
    // Looking for hijack here puts the hijacked code just before the
    // exit sequence
--- 5553,5560 ----
  
  static
  void
! program_end_stuff(const cbl_refer_t &refer,
!                         ec_type_t    ec)
    {
    // Looking for hijack here puts the hijacked code just before the
    // exit sequence
*************** program_end_stuff(cbl_refer_t refer,
*** 5599,5607 ****
    if( returner )
      {
      cbl_field_type_t field_type = returner->type;
!     size_t nbytes = 0;
!     tree return_type = tree_type_from_field_type(returner,
!                                                  nbytes);
      tree retval   = gg_define_variable(return_type);
  
      gg_assign(retval, gg_cast(return_type, integer_zero_node));
--- 5584,5590 ----
    if( returner )
      {
      cbl_field_type_t field_type = returner->type;
!     tree return_type = tree_type_from_field(returner);
      tree retval   = gg_define_variable(return_type);
  
      gg_assign(retval, gg_cast(return_type, integer_zero_node));
*************** program_end_stuff(cbl_refer_t refer,
*** 5614,5634 ****
            ||  field_type == FldPointer
            ||  field_type == FldIndex )
          {
!         // These are easily handled because they are all little-endian.
          gg_memcpy(gg_get_address_of(retval),
                    member(returner, "data"),
                    build_int_cst_type( SIZE_T,
!                                       std::min(nbytes, (size_t)returner->data.capacity())));
          }
        else
          {
          // The field_type has a PICTURE string, so we need to convert from the
!         // COBOL form to little-endian binary:
          tree value;
!         get_binary_value( value, returner, INT128);
          gg_memcpy(gg_get_address_of(retval),
                    gg_get_address_of(value),
!                   build_int_cst_type(SIZE_T, nbytes));
          }
        restore_local_variables();
        gg_return(retval);
--- 5597,5618 ----
            ||  field_type == FldPointer
            ||  field_type == FldIndex )
          {
!         // These are easily handled because they are all native binary
          gg_memcpy(gg_get_address_of(retval),
                    member(returner, "data"),
                    build_int_cst_type( SIZE_T,
!                                       std::min(gg_sizeof(return_type),
!                                          (size_t)returner->data.capacity())));
          }
        else
          {
          // The field_type has a PICTURE string, so we need to convert from the
!         // COBOL form to native binary:
          tree value;
!         get_binary_value( value, returner, return_type);
          gg_memcpy(gg_get_address_of(retval),
                    gg_get_address_of(value),
!                   build_int_cst_type(SIZE_T, gg_sizeof(return_type)));
          }
        restore_local_variables();
        gg_return(retval);
*************** establish_using(size_t nusing,
*** 6309,6337 ****
        // This code is relevant at compile time.  It takes each
        // expected formal parameter and tacks it onto the end of the
        // function's arguments chain.
- 
        char *ach = xasprintf("_p_%s", args[i].refer.field->name);
! 
!       size_t nbytes = 0;
!       tree par_type = tree_type_from_field_type(args[i].refer.field, nbytes);
!       if( par_type == FLOAT )
!         {
!         if( nbytes == 16 )
!           {
!           par_type = INT128;
!           }
!         else
!           {
!           par_type = SSIZE_T;
!           }
!         }
!       if( par_type == DOUBLE )
          {
!         par_type = SSIZE_T;
          }
!       if( par_type == FLOAT128 )
          {
!         par_type = INT128;
          }
        chain_parameter_to_function(current_function->function_decl, par_type, ach);
        free(ach);
--- 6293,6307 ----
        // This code is relevant at compile time.  It takes each
        // expected formal parameter and tacks it onto the end of the
        // function's arguments chain.
        char *ach = xasprintf("_p_%s", args[i].refer.field->name);
!       tree par_type;
!       if( args[i].crv == by_value_e )
          {
!         par_type = tree_type_from_refer(args[i].refer);
          }
!       else
          {
!         par_type = VOID_P;
          }
        chain_parameter_to_function(current_function->function_decl, par_type, ach);
        free(ach);
*************** establish_using(size_t nusing,
*** 6392,6398 ****
      tree rt_i = gg_define_int();
      for(size_t i=0; i<nusing; i++)
        {
!       // And this compiler code generates run-time execution code. The
        // generated code picks up, at run time, the variable we just
        // established in the chain at compile time.
  
--- 6362,6368 ----
      tree rt_i = gg_define_int();
      for(size_t i=0; i<nusing; i++)
        {
!       // And this generates run-time execution code. The
        // generated code picks up, at run time, the variable we just
        // established in the chain at compile time.
  
*************** establish_using(size_t nusing,
*** 6466,6473 ****
                        // gg_array_value(var_decl_call_parameter_lengths, rt_i),
                        // NULL_TREE);
  
!             // Get the length from the global lengths[] side channel.  Don't
!             // forget to use the length mask on the table value.
              gg_assign(member(args[i].refer.field->var_decl_node, "capacity"),
                        gg_array_value(var_decl_call_parameter_lengths, rt_i));
              }
--- 6436,6442 ----
                        // gg_array_value(var_decl_call_parameter_lengths, rt_i),
                        // NULL_TREE);
  
!             // Get the length from the global lengths[] side channel.
              gg_assign(member(args[i].refer.field->var_decl_node, "capacity"),
                        gg_array_value(var_decl_call_parameter_lengths, rt_i));
              }
*************** establish_using(size_t nusing,
*** 6477,6482 ****
--- 6446,6484 ----
            gg_assign(reference, gg_cast(UCHAR_P, null_pointer_node));
            }
          ENDIF
+         if(     cobol_target_big_endian()  // cppcheck-suppress knownConditionTrueFalse
+             &&  (    args[i].refer.field->type == FldNumericBin5
+                   || args[i].refer.field->type == FldNumericBinary) )
+           {
+           // We have another thing to think about.  The reference we are
+           // processing might have come from an intermediate, and those are
+           // sixteen-byte values.  On a little-endian machine we can just use
+           // the value as-is, because the extra zeroes are to the right of the
+           // one we need.  But a big endian sixteen-byte value has a bunch of
+           // leading zeroes, and we need to skip past them.
+           tree offset = gg_define_variable(SIZE_T);
+           // Pick up the length metadata.
+           gg_assign(offset,
+                     gg_array_value(var_decl_call_parameter_lengths, rt_i));
+ 
+           // That value is probably sixteen.  Subtract the length of our target
+           // value from that.
+           gg_assign(offset,
+                     gg_subtract(offset,
+                                 member(args[i].refer.field->var_decl_node,
+                                        "capacity")));
+           // And add that value to 'reference'
+           gg_assign(reference, gg_add(reference, offset));
+           // This code was added when I encountered a function call using
+           // func( N - 1 ), where the function expected a single-byte value.
+           // In little-endian, no problem, because the calculated value of 3
+           // produced a sixteen-byte 0x03 00 00 00.....  But in big-endian,
+           // the sixteen bytes are 0x00 00 00 00 ... 00 03.  The above
+           // calculation starts with sixteen, subtracts one from it to get
+           // fifteen, and then adds fifteen to 'reference' to point to the
+           // 0x03.
+           }
+ 
          // 'parameter' is a reference, so it it becomes the data member of
          // the cblc_field_t COBOL variable.
          gg_assign(member(args[i].field()->var_decl_node, "data"), reference);
*************** establish_using(size_t nusing,
*** 6488,6506 ****
  
        if( crv == by_value_e )
          {
!         size_t nbytes;
!         tree_type_from_field_type(new_var, nbytes);
!         tree parm = gg_define_variable(INT128);
! 
!         tree value_type;
!         if( nbytes == 16 )
!           {
!           value_type = INT128;
!           }
!         else
!           {
!           value_type = SSIZE_T;
!           }
  
          // 'parameter' is the 64-bit or 128-bit value that was placed on the stack
          tree value = gg_define_variable(value_type);
--- 6490,6496 ----
  
        if( crv == by_value_e )
          {
!         tree value_type = tree_type_from_field(new_var);
  
          // 'parameter' is the 64-bit or 128-bit value that was placed on the stack
          tree value = gg_define_variable(value_type);
*************** establish_using(size_t nusing,
*** 6518,6527 ****
              // These are subsequent parameters
              parameter = TREE_CHAIN(parameter);
              }
-           gg_assign(value, gg_cast(value_type, parameter));
            gg_memcpy(gg_get_address_of(value),
                      gg_get_address_of(parameter),
!                     build_int_cst_type(SIZE_T, nbytes));
  
            if( args[i].refer.field->attr & any_length_e )
              {
--- 6508,6516 ----
              // These are subsequent parameters
              parameter = TREE_CHAIN(parameter);
              }
            gg_memcpy(gg_get_address_of(value),
                      gg_get_address_of(parameter),
!                     build_int_cst_type(SIZE_T, gg_sizeof(value)));
  
            if( args[i].refer.field->attr & any_length_e )
              {
*************** establish_using(size_t nusing,
*** 6542,6582 ****
            }
          ENDIF
  
!         if( nbytes <= 8 )
!           {
!           // Our input is a 64-bit number
!           if( new_var->attr & signable_e )
!             {
!             IF( gg_bitwise_and( gg_cast(SIZE_T, value),
!                                 build_int_cst_type(SIZE_T, 0x8000000000000000ULL)),
!                 ne_op,
!                 gg_cast(SIZE_T, integer_zero_node) )
!               {
!               // Our input is a negative number.  Set it to -1, so that the
!               // eight high-order bytes are 0xFF
!               gg_assign(parm, gg_cast(INT128, integer_minus_one_node));
!               }
!             ELSE
!               {
!               // Our input is a positive number, so set it to zero, so that
!               // the eight high-order bytes are 0x00
!               gg_assign(parm, gg_cast(INT128, integer_zero_node));
!               }
!             ENDIF
!             }
!           else
!             {
!             // This is a 64-bit positive number: so set it to zero, so that
!               // the eight high-order bytes are 0x00
!             gg_assign(parm, gg_cast(INT128, integer_zero_node));
!             }
!           }
! 
!         // Now copy over the little-endian binary bytes, either 8 or 16 as
!         // necessary
!         gg_memcpy(gg_get_address_of(parm),
!                   gg_get_address_of(value),
!                   build_int_cst_type(SIZE_T, nbytes));
          tree array_type = build_array_type_nelts(UCHAR, new_var->data.capacity());
          tree data_decl_node = gg_define_variable( array_type,
                                                    NULL,
--- 6531,6538 ----
            }
          ENDIF
  
!         // Because new_var is linkage, at this point it has no data area. We
!         // need to create that data area.
          tree array_type = build_array_type_nelts(UCHAR, new_var->data.capacity());
          tree data_decl_node = gg_define_variable( array_type,
                                                    NULL,
*************** establish_using(size_t nusing,
*** 6584,6595 ****
          gg_assign( member(new_var->var_decl_node, "data"),
                            gg_pointer_to_array(data_decl_node) );
  
!         // And then move it into place
!         gg_call(VOID,
!                 "__gg__assign_value_from_stack",
!                 gg_get_address_of(new_var->var_decl_node),
!                 parm,
!                 NULL_TREE);
          // We now have to handle an oddball situation.  It's possible we are
          // dealing with
          //
--- 6540,6560 ----
          gg_assign( member(new_var->var_decl_node, "data"),
                            gg_pointer_to_array(data_decl_node) );
  
!         // And then put 'value' into place:
!         if( new_var->type == FldFloat )
!           {
!           gg_memcpy(member(new_var->var_decl_node, "data"),
!                     gg_get_address(value),
!                     build_int_cst_type(SIZE_T, new_var->data.capacity()));
!           }
!         else
!           {
!           gg_call(VOID,
!                   "__gg__assign_value_from_stack",
!                   gg_get_address_of(new_var->var_decl_node),
!                   gg_cast(INT128, value),
!                   NULL_TREE);
!           }
          // We now have to handle an oddball situation.  It's possible we are
          // dealing with
          //
*************** parser_trim( cbl_field_t *tgt,
*** 10830,10837 ****
    gcc_assert(how >= 1 && how <= 3);
    if( !handle_gg_trim(tgt, input, how, args) )
      {
      cbl_encoding_t encoding = input.field->codeset.encoding;
!     charmap_t *charmap = __gg__get_charmap(encoding);
      int stride = charmap->stride();
      tree tstride = build_int_cst_type(SIZE_T, stride);
  
--- 10795,10803 ----
    gcc_assert(how >= 1 && how <= 3);
    if( !handle_gg_trim(tgt, input, how, args) )
      {
+     // We know stride is bigger than 1.
      cbl_encoding_t encoding = input.field->codeset.encoding;
!     const charmap_t *charmap = __gg__get_charmap(encoding);
      int stride = charmap->stride();
      tree tstride = build_int_cst_type(SIZE_T, stride);
  
*************** parser_trim( cbl_field_t *tgt,
*** 10850,10864 ****
                                            (arg.field->attr & FIGCONST_MASK);
        if( figconst )
          {
!         uint8_t figcst = charmap->figconst_character(figconst);
!         tree tfigcst = build_int_cst_type(ULONG, figcst);
  
          gg_memcpy(char_p,
!                   gg_get_address_of(tfigcst),
!                   tstride );
          }
        else
          {
          tree location;
          get_location(location, arg);
          gg_memcpy(char_p,
--- 10816,10839 ----
                                            (arg.field->attr & FIGCONST_MASK);
        if( figconst )
          {
!         char space[] = " ";
!         *space = char_from_figconst(figconst);
  
+         // Convert that character to the encoded version:
+         size_t nbytes;
+         const char *converted =  __gg__iconverter(DEFAULT_SOURCE_ENCODING,
+                                                   encoding,
+                                                   space,
+                                                   1,
+                                                   &nbytes);
+         // And add it to the array:
          gg_memcpy(char_p,
!                   build_string_literal(stride, converted),
!                   tstride);
          }
        else
          {
+         // It's not a figurative constant, so we get our value from 'arg'
          tree location;
          get_location(location, arg);
          gg_memcpy(char_p,
*************** parser_sort(cbl_refer_t tableref,
*** 11667,11673 ****
    if( alphabet )
      {
      push_program_state();
!     parser_alphabet_use(*alphabet);
      }
    gg_call(VOID,
            "__gg__sort_table",
--- 11642,11648 ----
    if( alphabet )
      {
      push_program_state();
!     parser_alphabet_use(alphabet);
      }
    gg_call(VOID,
            "__gg__sort_table",
*************** parser_file_sort(   cbl_file_t *workfile
*** 11815,11821 ****
    if( alphabet )
      {
      push_program_state();
!     parser_alphabet_use(*alphabet);
      }
    gg_call(VOID,
            "__gg__sort_workfile",
--- 11790,11796 ----
    if( alphabet )
      {
      push_program_state();
!     parser_alphabet_use(alphabet);
      }
    gg_call(VOID,
            "__gg__sort_workfile",
*************** gg_array_of_file_pointers(  size_t N,
*** 12100,12106 ****
  
  void
  parser_file_merge(  cbl_file_t *workfile,
!                     cbl_alphabet_t *alphabet,
                      const std::vector<cbl_key_t>& keys,
                      size_t ninputs,
                      cbl_file_t **inputs,
--- 12075,12081 ----
  
  void
  parser_file_merge(  cbl_file_t *workfile,
!               const cbl_alphabet_t *alphabet,
                      const std::vector<cbl_key_t>& keys,
                      size_t ninputs,
                      cbl_file_t **inputs,
*************** parser_file_merge(  cbl_file_t *workfile
*** 12216,12222 ****
    if( alphabet )
      {
      push_program_state();
!     parser_alphabet_use(*alphabet);
      }
    gg_call(VOID,
            "__gg__merge_files",
--- 12191,12197 ----
    if( alphabet )
      {
      push_program_state();
!     parser_alphabet_use(alphabet);
      }
    gg_call(VOID,
            "__gg__merge_files",
*************** create_and_call(size_t narg,
*** 12662,12677 ****
        crv = by_value_e;
        }
  
!     if( args[i].attr == address_of_e || args[i].refer.addr_of )
        {
!       // ADDRESS OF has to be passed by value.
        crv = by_value_e;
        }
  
      allocated[i] = 0;
  
!     tree location = gg_define_variable(UCHAR_P, "..location.1", vs_stack);
!     tree length   = gg_define_variable(SIZE_T,  "..length.1",   vs_stack);
  
      if( !args[i].refer.field )
        {
--- 12637,12659 ----
        crv = by_value_e;
        }
  
!     if(    args[i].attr == address_of_e
!         || args[i].attr == length_of_e
!         || args[i].refer.addr_of )
        {
!       // These have to be passed to be passed by value.
        crv = by_value_e;
        }
+     else if( crv == by_value_e && args[i].refer.field->type == FldAlphanumeric)
+       {
+       // Maybe passing an alphanumeric BY VALUE should be a syntax error?
+       crv = by_content_e;
+       }
  
      allocated[i] = 0;
  
!     tree location = gg_define_variable(UCHAR_P);
!     tree length   = gg_define_variable(SIZE_T);
  
      if( !args[i].refer.field )
        {
*************** create_and_call(size_t narg,
*** 12688,12694 ****
          {
          crv = by_content_e;
          gg_assign(location,
!                   gg_cast(UCHAR_P, build_string_literal(args[i].refer.field->data.capacity(),
                                         args[i].refer.field->data.original())));
          gg_assign(length,
                    build_int_cst_type( SIZE_T,
--- 12670,12677 ----
          {
          crv = by_content_e;
          gg_assign(location,
!                   gg_cast(UCHAR_P,
!                      build_string_literal(args[i].refer.field->data.capacity(),
                                         args[i].refer.field->data.original())));
          gg_assign(length,
                    build_int_cst_type( SIZE_T,
*************** create_and_call(size_t narg,
*** 12741,12769 ****
          switch(args[i].attr)
            {
            case address_of_e:
-             {
-             // Allocate the memory, and make the copy:
-             arguments[i] = gg_define_char_star();
-             allocated[i] = 1;
-             gg_assign(arguments[i], gg_malloc(length) ) ;
-             gg_memcpy(arguments[i],
-                       location,
-                       length);
-             break;
-             }
- 
            case length_of_e:
              {
!             // The BY CONTENT LENGTH OF gets passed as an 64-bit big-endian
!             // value
!             arguments[i] = gg_define_size_t();
!             allocated[i] = 1;
!             gg_assign(arguments[i], gg_malloc(length) ) ;
!             gg_call(VOID,
!                     "__gg__copy_as_big_endian",
!                     gg_get_address_of(arguments[i]),
!                     length,
!                     NULL_TREE);
              break;
              }
  
--- 12724,12733 ----
          switch(args[i].attr)
            {
            case address_of_e:
            case length_of_e:
              {
!             // Up above, we converted these to by_value_e
!             gcc_unreachable();
              break;
              }
  
*************** create_and_call(size_t narg,
*** 12782,12790 ****
  
        case by_value_e:
          {
!         // For BY VALUE, we take whatever we've been given and do our best to
!         // make a 64-bit value out of it, although we move to 128 bits when
!         // necessary.
  
          cbl_ffi_arg_attr_t attr = args[i].attr;
          if( args[i].refer.addr_of )
--- 12746,12753 ----
  
        case by_value_e:
          {
!         // For BY VALUE, we take whatever we've been given and make a INT128
!         // out of it if necessary, and either LONG or ULONG otherwise.
  
          cbl_ffi_arg_attr_t attr = args[i].attr;
          if( args[i].refer.addr_of )
*************** create_and_call(size_t narg,
*** 12798,12804 ****
              {
              arguments[i] = gg_define_size_t();
              gg_assign(arguments[i], gg_cast(SIZE_T, location ));
!             gg_assign(length, build_int_cst_type(SIZE_T, 8));
              break;
              }
  
--- 12761,12767 ----
              {
              arguments[i] = gg_define_size_t();
              gg_assign(arguments[i], gg_cast(SIZE_T, location ));
!             gg_assign(length, build_int_cst_type(SIZE_T, gg_sizeof(CHAR_P)));
              break;
              }
  
*************** create_and_call(size_t narg,
*** 12806,12866 ****
              {
              arguments[i] = gg_define_size_t();
              gg_assign(arguments[i], gg_cast(SIZE_T, length));
!             gg_assign(length, build_int_cst_type(SIZE_T, 8));
              break;
              }
  
            case none_of_e:
              {
!             assert(args[i].refer.field);
!             bool as_int128 = false;
!             if( !(args[i].refer.field->attr & intermediate_e) )
!               {
!               // All temporaries are SIZE_T
!               if( args[i].refer.field->type == FldFloat )
!                 {
!                 as_int128 = true;
!                 }
!               else if(   args[i].refer.field->type == FldNumericBin5
!                       && args[i].refer.field->data.digits   == 0
!                       && args[i].refer.field->data.capacity() == 16 )
!                 {
!                 as_int128 = true;
!                 }
!               else if( args[i].refer.field->data.digits > 18 )
!                 {
!                 as_int128 = true;
!                 }
!               }
! 
!             if( as_int128 )
!               {
!               arguments[i] = gg_define_variable(INT128);
!               gg_assign(arguments[i],
!                         gg_cast(INT128,
!                                 gg_call_expr(
!                                 INT128,
!                                 "__gg__fetch_call_by_value_value",
!                                 gg_get_address_of(args[i].refer.field->var_decl_node),
!                                 refer_offset(args[i].refer),
!                                 refer_size_source(args[i].refer),
!                                 NULL_TREE)));
!               gg_assign(length, build_int_cst_type(SIZE_T, 16));
!               }
!             else
!               {
!               arguments[i] = gg_define_size_t();
!               gg_assign(arguments[i],
!                         gg_cast(SIZE_T,
!                                 gg_call_expr(
!                                 INT128,
!                                 "__gg__fetch_call_by_value_value",
!                                 gg_get_address_of(args[i].refer.field->var_decl_node),
!                                 refer_offset(args[i].refer),
!                                 refer_size_source(args[i].refer),
!                                 NULL_TREE)));
!               gg_assign(length, build_int_cst_type(SIZE_T, 8));
!               }
              break;
              }
            }
--- 12769,12783 ----
              {
              arguments[i] = gg_define_size_t();
              gg_assign(arguments[i], gg_cast(SIZE_T, length));
!             gg_assign(length, build_int_cst_type(SIZE_T, gg_sizeof(CHAR_P)));
              break;
              }
  
            case none_of_e:
              {
!             tree type = tree_type_from_refer(args[i].refer);
!             arguments[i] = gg_define_variable(type);
!             safe_assign(arguments[i], args[i].refer);
              break;
              }
            }
*************** create_and_call(size_t narg,
*** 12898,12904 ****
      // Fetch the FUNCTION_DECL for that FUNCTION_TYPE
      tree function_decl = gg_build_fn_decl(funcname, fndecl_type);
      set_call_convention(function_decl, current_call_convention());
- 
      // Take the address of the function decl:
      tree address_of_function = gg_get_address_of(function_decl);
  
--- 12815,12820 ----
*************** create_and_call(size_t narg,
*** 13021,13027 ****
      {
      // There is no explicit location to assign the returned value.
      push_program_state();
!     if( dialect_ibm() )
        {
        // Because no explicit returning value is expected, we call the
        // designated function and assign the return value to our RETURN-CODE.
--- 12937,12943 ----
      {
      // There is no explicit location to assign the returned value.
      push_program_state();
!     if( dialect_ibm() || dialect_mf() || dialect_gnu() )
        {
        // Because no explicit returning value is expected, we call the
        // designated function and assign the return value to our RETURN-CODE.
*************** create_and_call(size_t narg,
*** 13029,13036 ****
        }
      else
        {
!       // Because it is not IBM, we execute the called function and ignore the
!       // any returned value.
        gg_append_statement(call_expr);
        }
      pop_program_state();
--- 12945,12952 ----
        }
      else
        {
!       // Because it is not IBM/MF/GNU, we execute the called function and
!       // ignore any returned value.
        gg_append_statement(call_expr);
        }
      pop_program_state();
*************** actually_create_the_static_field( cbl_fi
*** 14313,14319 ****
      }
    else if( new_var->type == FldClass )
      {
!     encoding = DEFAULT_32_ENCODING;
      }
    else
      {
--- 14229,14235 ----
      }
    else if( new_var->type == FldClass )
      {
!     encoding = HOST_32_ENCODING;
      }
    else
      {
*************** parser_symbol_add(struct cbl_field_t *ne
*** 14962,14968 ****
          size_t converted_length;
          const char *converted = __gg__iconverter(
                                   new_var->codeset.default_encodings.source->type,
!                                  DEFAULT_32_ENCODING,
                                   level_88_string,
                                   level_88_string_size,  // Convert the NUL
                                   &converted_length);
--- 14878,14884 ----
          size_t converted_length;
          const char *converted = __gg__iconverter(
                                   new_var->codeset.default_encodings.source->type,
!                                  HOST_32_ENCODING,
                                   level_88_string,
                                   level_88_string_size,  // Convert the NUL
                                   &converted_length);
diff -Nrcpad gcc-17-20260705/gcc/cobol/genapi.h gcc-17-20260712/gcc/cobol/genapi.h
*** gcc-17-20260705/gcc/cobol/genapi.h	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/cobol/genapi.h	Sun Jul 12 22:32:07 2026
*************** void parser_accept_date_dow( cbl_field_t
*** 88,96 ****
  void parser_accept_date_hhmmssff( cbl_field_t *tgt );
  
  void
! parser_alphabet( const cbl_alphabet_t& alphabet );
  void
! parser_alphabet_use( cbl_alphabet_t& alphabet );
  
  void
  parser_allocate( cbl_refer_t size_or_based, cbl_refer_t returning, bool initialized );
--- 88,96 ----
  void parser_accept_date_hhmmssff( cbl_field_t *tgt );
  
  void
! parser_alphabet( const cbl_alphabet_t *alphabet );
  void
! parser_alphabet_use( const cbl_alphabet_t *alphabet );
  
  void
  parser_allocate( cbl_refer_t size_or_based, cbl_refer_t returning, bool initialized );
*************** parser_file_sort(   cbl_file_t *file,
*** 460,467 ****
                      cbl_perform_tgt_t *out_proc );
  void
  parser_file_merge(  cbl_file_t *file,
!                     cbl_alphabet_t *alphabet,
!                     const std::vector<cbl_key_t>& keys,
                      size_t ninput,
                      cbl_file_t **inputs,
                      size_t noutput,
--- 460,467 ----
                      cbl_perform_tgt_t *out_proc );
  void
  parser_file_merge(  cbl_file_t *file,
!               const cbl_alphabet_t *alphabet,
!               const std::vector<cbl_key_t>& keys,
                      size_t ninput,
                      cbl_file_t **inputs,
                      size_t noutput,
*************** void parser_clear_exception();
*** 582,588 ****
  void parser_push_exception();
  void parser_pop_exception();
  
- void parser_call_targets_dump();
  size_t parser_call_target_update( size_t caller,
                                    const char extant[],
                                    const char mangled_tgt[] );
--- 582,587 ----
diff -Nrcpad gcc-17-20260705/gcc/cobol/genmath.cc gcc-17-20260712/gcc/cobol/genmath.cc
*** gcc-17-20260705/gcc/cobol/genmath.cc	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/cobol/genmath.cc	Sun Jul 12 22:32:07 2026
***************
*** 30,35 ****
--- 30,36 ----
  #include "cobol-system.h"
  #include "coretypes.h"
  #include "tree.h"
+ #include "tm.h"
  #include "../../libgcobol/ec.h"
  #include "../../libgcobol/common-defs.h"
  #include "util.h"
***************
*** 42,47 ****
--- 43,49 ----
  #include "gengen.h"
  #include "structs.h"
  #include "../../libgcobol/gcobolio.h"
+ #include "../../libgcobol/cobol-endian.h"
  #include "../../libgcobol/charmaps.h"
  #include "show_parse.h"
  
diff -Nrcpad gcc-17-20260705/gcc/cobol/genutil.cc gcc-17-20260712/gcc/cobol/genutil.cc
*** gcc-17-20260705/gcc/cobol/genutil.cc	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/cobol/genutil.cc	Sun Jul 12 22:32:07 2026
***************
*** 54,59 ****
--- 54,60 ----
  #include "genutil.h"
  #include "structs.h"
  #include "../../libgcobol/gcobolio.h"
+ #include "../../libgcobol/cobol-endian.h"
  #include "../../libgcobol/charmaps.h"
  #include "show_parse.h"
  #include "../../libgcobol/exceptl.h"
*************** binary_from_numdisp(tree &value,
*** 2019,2024 ****
--- 2020,2039 ----
  
    tree sign_location = gg_define_variable(UCHAR_P);
  
+   // We need to be able to handle encodings that are big-endian.  We do that
+   // here with a little bit of a stunt.  The 'location' we are handed points
+   // to the UCHAR that is the leftmost digit of a little-endian encoded value.
+ 
+   // By adding offset-1 to that value, we point to the UCHAR that is the
+   // leftmost digit of a big-endian encoding.  The subsequent processing all
+   // works off that base location.
+   if( charmap->is_big_endian() )
+     {
+     gg_assign(location,
+               gg_add(location,
+                      build_int_cst_type(SIZE_T, fstride-1)));
+     }
+ 
    if( field->attr & signable_e )
      {
      // The value is signable.
*************** get_binary_value(tree &value, const cbl_
*** 2523,2530 ****
    {
    /* There are other get binary value routines.  This one is intended to be the
       "best in class" version, incorporating everything that's been learned
!      about the process, and incorporating compiler SSA guidelines. 
!      
       On entry, value should be unassigned.  It will be given the type 'type',
       if present, and otherwise will be the same as the type derived from the
       source.   */
--- 2538,2545 ----
    {
    /* There are other get binary value routines.  This one is intended to be the
       "best in class" version, incorporating everything that's been learned
!      about the process, and incorporating compiler SSA guidelines.
! 
       On entry, value should be unassigned.  It will be given the type 'type',
       if present, and otherwise will be the same as the type derived from the
       source.   */
*************** safe_cast(tree &target,         // A def
*** 2655,2661 ****
    {
    /* The construction here does the safe equivalent of
  
!       int target = *(int *)location.
  
     It does this by copying through memcpy rather than dereferencing
     source_location as a source_type pointer.  This avoids creating a typed
--- 2670,2676 ----
    {
    /* The construction here does the safe equivalent of
  
!       <type> target = *(<type> *)location.
  
     It does this by copying through memcpy rather than dereferencing
     source_location as a source_type pointer.  This avoids creating a typed
*************** void
*** 2674,2679 ****
--- 2689,2696 ----
  safe_cast(tree &target,         // A defined variable.
            const cbl_field_t *field)
    {
+   // Use this routine when you know the data at the field->location is
+   // of the source_type.
    tree source_type = tree_type_from_field(field);
    tree source_location;
    get_location(source_location, field);
*************** void
*** 2684,2689 ****
--- 2701,2708 ----
  safe_cast(tree &target,         // A defined variable.
            const cbl_refer_t &refer)
    {
+   // Use this routine when you know the data at the refer/field->location is
+   // of the source_type.
    tree source_type = tree_type_from_field(refer.field);
    tree source_location;
    get_location(source_location, refer);
*************** safe_cast(tree &target,         // A def
*** 2691,2696 ****
--- 2710,2741 ----
    }
  
  void
+ safe_assign(tree target, // A defined variable.
+             const cbl_field_t *field)
+   {
+   // This routine extracts a binary value from 'field', and safely assigns it
+   // to the target.
+   tree dest_type   = TREE_TYPE(target);
+   tree source_type = tree_type_from_field(field);
+   tree source;
+   get_binary_value(source, field, source_type);
+   gg_assign(target, gg_cast(dest_type, source));
+   }
+ 
+ void
+ safe_assign(tree target, // A defined variable.
+             const cbl_refer_t &refer)
+   {
+   // This routine extracts a binary value from 'field', and safely assigns it
+   // to the target.
+   tree dest_type   = TREE_TYPE(target);
+   tree source_type = tree_type_from_refer(refer);
+   tree source;
+   get_binary_value(source, refer, source_type);
+   gg_assign(target, gg_cast(dest_type, source));
+   }
+ 
+ void
  get_length(tree &retval, const cbl_refer_t &refer)
    {
    if(refer_is_clean(refer))
diff -Nrcpad gcc-17-20260705/gcc/cobol/genutil.h gcc-17-20260712/gcc/cobol/genutil.h
*** gcc-17-20260705/gcc/cobol/genutil.h	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/cobol/genutil.h	Sun Jul 12 22:32:07 2026
*************** void attribute_bit_clear(const struct cb
*** 149,152 ****
--- 149,157 ----
  tree attribute_bit_get(const struct cbl_field_t *var, cbl_field_attr_t bits);
  void attribute_bit_set(const struct cbl_field_t *var, cbl_field_attr_t bits);
  
+ void safe_assign(tree target, // A defined variable.
+            const cbl_field_t *field);
+ void safe_assign(tree target, // A defined variable.
+            const cbl_refer_t &refer);
+ 
  #endif
diff -Nrcpad gcc-17-20260705/gcc/cobol/lang-specs.h gcc-17-20260712/gcc/cobol/lang-specs.h
*** gcc-17-20260705/gcc/cobol/lang-specs.h	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/cobol/lang-specs.h	Sun Jul 12 22:32:07 2026
***************
*** 54,59 ****
--- 54,60 ----
  	"%{Wno-bad-line-directive} "
  	"%{Wno-bad-numeric} "
  	"%{Wno-binary-long-long} "
+ 	"%{Wno-call-fd} "
  	"%{Wno-call-giving} "
  	"%{Wno-call-literal} "
  	"%{Wno-cdf-dollar} "
diff -Nrcpad gcc-17-20260705/gcc/cobol/lang.opt gcc-17-20260712/gcc/cobol/lang.opt
*** gcc-17-20260705/gcc/cobol/lang.opt	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/cobol/lang.opt	Sun Jul 12 22:32:07 2026
*************** Wnllanginfo-error
*** 228,233 ****
--- 228,238 ----
  Cobol Warning Var(nllanginfo_error, 1) Init(1)
  Warn if nlanglanginfo(3) fails.
  
+ ; IbmCallFd
+ Wcall-fd
+ Cobol Warning Var(cobol_call_fd, 1) Init(1)
+ Warn if fd name is used as a CALL parameter.
+ 
  ; IbmCdf
  Wibm-cdf
  Cobol Warning Var(cobol_ibmcdf, 1) Init(1)
diff -Nrcpad gcc-17-20260705/gcc/cobol/lexio.cc gcc-17-20260712/gcc/cobol/lexio.cc
*** gcc-17-20260705/gcc/cobol/lexio.cc	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/cobol/lexio.cc	Sun Jul 12 22:32:07 2026
*************** parse_copy_directive( filespan_t& mfile
*** 1052,1058 ****
        }
      }
  
!     // If the parse failed, pass it through to the parser for analysis.
      if( outcome.parsed ) {
        erase_line( const_cast<char*>(copy_stmt.p),
                    const_cast<char*>(copy_stmt.pend));
--- 1052,1058 ----
        }
      }
  
!     // If the parse succeeded, erase it, else pass it through to the parser for analysis.
      if( outcome.parsed ) {
        erase_line( const_cast<char*>(copy_stmt.p),
                    const_cast<char*>(copy_stmt.pend));
*************** cdftext::lex_open( const char filename[]
*** 1526,1531 ****
--- 1526,1532 ----
      cobol_filename(name, inode_of(input));
      filespan_t mfile( free_form_reference_format( input ) );
  
+     please_push_filename = true;
      process_file( mfile, output );
  
      dbgmsg("lex_open: processed %zu of %zu: '%s'", n, included_files.size(), name);
*************** cdftext::open_input( const char filename
*** 1612,1618 ****
    verbose_file_reader = NULL != getenv("GCOBOL_TEMPDIR");
  
    if( verbose_file_reader ) {
!     cbl_message(LexInputN, "verbose: opening %s for input", filename);
    }
    return fd;
  }
--- 1613,1619 ----
    verbose_file_reader = NULL != getenv("GCOBOL_TEMPDIR");
  
    if( verbose_file_reader ) {
!     cbl_message(LexInputN, "opening %s for input", filename);
    }
    return fd;
  }
*************** cdftext::free_form_reference_format( int
*** 1851,1856 ****
--- 1852,1871 ----
    return source_buffer;
  }
  
+ bool cdftext::please_push_filename = false;
+ 
+ void
+ cdftext::output_push_directive( const char filename[],
+                                std::ostream_iterator<char>& ofs )
+ {
+   static const char file_push[] = "\f#FILE PUSH ";
+   static const char delimiter[] = "\f";
+ 
+   std::copy(file_push, file_push + strlen(file_push), ofs);
+   std::copy(filename, filename + strlen(filename), ofs);
+   std::copy(delimiter, delimiter + strlen(delimiter), ofs);
+ }
+ 
  /*
   * process_file is a recursive routine that opens and processes
   * included files.  It uses the input file stack in two ways: to check
*************** cdftext::free_form_reference_format( int
*** 1885,1905 ****
  void
  cdftext::process_file( filespan_t mfile, int output, bool second_pass ) {
    static size_t nfiles = 0;
! 
    __gnu_cxx::stdio_filebuf<char> outbuf(fdopen(output, "a"), std::ios::out);
    std::ostream out(&outbuf);
    std::ostream_iterator<char> ofs(out);
  
!   // indicate current file
!   static const char file_push[] = "\f#FILE PUSH ", file_pop[] = "\f#FILE POP\f";
  
    if( !included_files.empty() ) { ++nfiles; }; // force push/pop of included filename
    if( !second_pass && nfiles++ ) {
-     static const char delimiter[] = "\f";
-     const char *filename = cobol_filename();
-     std::copy(file_push, file_push + strlen(file_push), ofs);
-     std::copy(filename, filename + strlen(filename), ofs);
-     std::copy(delimiter, delimiter + strlen(delimiter), ofs);
      out.flush();
    }
  
--- 1900,1927 ----
  void
  cdftext::process_file( filespan_t mfile, int output, bool second_pass ) {
    static size_t nfiles = 0;
!   
    __gnu_cxx::stdio_filebuf<char> outbuf(fdopen(output, "a"), std::ios::out);
    std::ostream out(&outbuf);
    std::ostream_iterator<char> ofs(out);
  
!   if( please_push_filename ) {
!     assert(!second_pass);
!     output_push_directive( cobol_filename(), ofs );
!     please_push_filename = false;
!   }
! 
! #if 0
!   {
!     auto fd = open("/tmp/I", O_CREAT | O_WRONLY, S_IRWXU);
!     auto n = write(fd, mfile.data, mfile.size());
!     if( n < 0 ) perror("write error");
!     close(fd);
!   }
! #endif
  
    if( !included_files.empty() ) { ++nfiles; }; // force push/pop of included filename
    if( !second_pass && nfiles++ ) {
      out.flush();
    }
  
*************** cdftext::process_file( filespan_t mfile,
*** 1909,1916 ****
      auto copied = parse_copy_directive(mfile);
      if( copied.parsed && copied.fd != -1 ) {
        gcc_assert(copied.erased_lines.p);
!       std::copy_if(copied.erased_lines.p, copied.erased_lines.pend, ofs,
!                    []( char ch ) { return ch == '\n'; } );
        struct { int in, out; filespan_t mfile; } copy;
        dbgmsg("%s:%d: line " HOST_SIZE_T_PRINT_UNSIGNED ", opening %s on fd %d",
               __func__, __LINE__, (fmt_size_t)mfile.lineno(),
--- 1931,1938 ----
      auto copied = parse_copy_directive(mfile);
      if( copied.parsed && copied.fd != -1 ) {
        gcc_assert(copied.erased_lines.p);
!       output_push_directive( cobol_filename(), ofs );
! 
        struct { int in, out; filespan_t mfile; } copy;
        dbgmsg("%s:%d: line " HOST_SIZE_T_PRINT_UNSIGNED ", opening %s on fd %d",
               __func__, __LINE__, (fmt_size_t)mfile.lineno(),
*************** cdftext::process_file( filespan_t mfile,
*** 1936,1942 ****
--- 1958,1976 ----
          process_file(copy.mfile, output, true);
          // COPY statement is erased from input if processed successfully
        }
+       /*
+        * After returning from the recursive call, restore the global current
+        * filename and output blank lines representing the erased COPY
+        * statement.  Do not be confused: the POP directive is produced by the
+        * recursed function after processing the copybook file.  Here we output
+        * the blank lines after that directive is produced, representing the
+        * lines where the COPY statement appeared.
+        */
        cobol_filename_restore();
+       unsigned long n = std::count(copied.erased_lines.p, copied.erased_lines.pend, '\n');
+       std::copy_if(copied.erased_lines.p, copied.erased_lines.pend, ofs, 
+                    []( char ch ) { return ch == '\n'; } );
+       dbgmsg("%s:%d: %lu blank lines erased", __func__, __LINE__, n);
      }
  
      auto erased = parse_replace_directive(mfile);
*************** cdftext::process_file( filespan_t mfile,
*** 1959,1964 ****
--- 1993,1999 ----
    }
    // end of file
    if( !second_pass && --nfiles ) {
+     static const char file_pop[] = "\f#FILE POP\f";
      std::copy(file_pop, file_pop + strlen(file_pop), ofs);
      out.flush();
    }
diff -Nrcpad gcc-17-20260705/gcc/cobol/lexio.h gcc-17-20260712/gcc/cobol/lexio.h
*** gcc-17-20260705/gcc/cobol/lexio.h	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/cobol/lexio.h	Sun Jul 12 22:32:07 2026
*************** struct bytespan_t {
*** 112,118 ****
    }
  };
  
! // YYLTYPE supplied by cbldiag.h.  Borrowed from parse.h as generated by Bison.
  
  struct filespan_t : public bytespan_t {
    char *cur, *eol, *quote;
--- 112,118 ----
    }
  };
  
! size_t parse_error_inc();
  
  struct filespan_t : public bytespan_t {
    char *cur, *eol, *quote;
*************** struct filespan_t : public bytespan_t {
*** 164,169 ****
--- 164,182 ----
  
      eol = std::find(cur, eodata, '\n');
  
+     char *nul = std::find(cur, eol, '\0');
+     if( nul != eol ) {
+       if( std::any_of( nul, eodata,
+                        []( char ch ) { return ch != '\0'; } ) ) {
+         int icol2 = nul - cur;
+         fprintf(stderr, "%s:%d:%d: error: NUL character detected in input\n%*s\n",
+                 cobol_filename(), int(iline + 1), ++icol2,
+                 int(eol - cur), cur);
+         parse_error_inc();
+         std::replace(nul, eol, '\0', SPACE);
+       }
+     }
+ 
      if( eol < eodata ) {
        ++eol;
        ++iline;
*************** struct replace_t {
*** 272,280 ****
--- 285,297 ----
  #include <list>
  
  class cdftext {
+   static bool please_push_filename;
    static filespan_t  free_form_reference_format( int fd );
    static void process_file( filespan_t, int output, bool second_pass = false );
  
+   static void output_push_directive( const char filename[],
+                                     std::ostream_iterator<char>& ofs);
+ 
    static filespan_t map_file( int fd );
  
    static void echo_input( int input, const char filename[] );
diff -Nrcpad gcc-17-20260705/gcc/cobol/messages.cc gcc-17-20260712/gcc/cobol/messages.cc
*** gcc-17-20260705/gcc/cobol/messages.cc	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/cobol/messages.cc	Sun Jul 12 22:32:07 2026
***************
*** 37,42 ****
--- 37,43 ----
  #include <cobol-system.h>
  #include <coretypes.h>
  #include <tree.h>
+ #include "target.h"
  #undef yy_flex_debug
  
  #include <langinfo.h>
***************
*** 61,66 ****
--- 62,68 ----
  #include "../../libgcobol/io.h"
  #include "genapi.h"
  #include "genutil.h"
+ #include "../../libgcobol/cobol-endian.h"
  #include "../../libgcobol/charmaps.h"
  
  
*************** std::set<cbl_diag_t> cbl_diagnostics {
*** 122,127 ****
--- 124,130 ----
  
    { EcUnknownW, "-Wec-unknown", diagnostics::kind::warning },
  
+   { IbmCallFd, "-Wcall-fd", diagnostics::kind::error, dialect_ibm_e },
    { IbmCdf, "-Wibm-cdf", diagnostics::kind::error, dialect_ibm_e },
    { IbmEjectE, "-Wcobol-eject", diagnostics::kind::error, dialect_ibm_e },
    { IbmLengthOf, "-Wlength-of", diagnostics::kind::error, dialect_ibm_mf_gnu },
diff -Nrcpad gcc-17-20260705/gcc/cobol/move.cc gcc-17-20260712/gcc/cobol/move.cc
*** gcc-17-20260705/gcc/cobol/move.cc	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/cobol/move.cc	Sun Jul 12 22:32:07 2026
***************
*** 50,55 ****
--- 50,56 ----
  #include "genmath.h"
  #include "structs.h"
  #include "../../libgcobol/gcobolio.h"
+ #include "../../libgcobol/cobol-endian.h"
  #include "../../libgcobol/charmaps.h"
  #include "../../libgcobol/valconv.h"
  #include "show_parse.h"
*************** mh_source_is_literalN(cbl_refer_t &destr
*** 262,320 ****
        case FldPointer:
        case FldIndex:
          {
-         // We know this is a move to an eight-byte value:
          SHOW_PARSE1
            {
            SHOW_PARSE_INDENT
            SHOW_PARSE_TEXT("mh_source_is_literalN: pointer/index")
            }
  
!         if( sourceref.field->data.capacity() < 8 )
!           {
!           // There are too few bytes in sourceref
!           if( sourceref.field->attr & signable_e )
!             {
!             tree highbyte = gg_define_variable(UCHAR);
!             // Pick up the source byte that has the sign bit.
!             gg_assign(highbyte,
!                       gg_get_indirect_reference(gg_add(member(sourceref.field->var_decl_node,
!                                                               "data"),
!                                                 build_int_cst_type(SIZE_T,
!                                                                    sourceref.field->data.capacity()-1)),
!                       integer_zero_node));
!             IF( gg_bitwise_and(highbyte, build_int_cst_type(UCHAR, 0x80)),
!                 eq_op,
!                 build_int_cst_type(UCHAR, 0x80) )
!               {
!               // We are dealing with a negative number
!               gg_memset(gg_add(member(destref.field->var_decl_node, "data"),
!                                refer_offset(destref)),
!                                 build_int_cst_type(UCHAR, 0xFF),
!                                 build_int_cst_type(SIZE_T, 8));
!               }
!             ELSE
!               gg_memset(gg_add(member(destref.field->var_decl_node, "data"),
!                                refer_offset(destref)),
!                                 build_int_cst_type(UCHAR, 0x00),
!                                 build_int_cst_type(SIZE_T, 8));
!               ENDIF
!             }
!           else
!             {
!             // The too-short source is positive.
!               gg_memset(gg_add(member(destref.field->var_decl_node, "data"),
!                                refer_offset(destref)),
!                               build_int_cst_type(UCHAR, 0x00),
!                               build_int_cst_type(SIZE_T, 8));
!             }
!           }
  
!         tree literalN_value = get_literalN_value(sourceref.field);
!         scale_by_power_of_ten_N(literalN_value, -sourceref.field->data.rdigits);
!         gg_memcpy(gg_add(member(destref.field->var_decl_node, "data"),
!                                refer_offset(destref)),
!                   gg_get_address_of(literalN_value),
!                   build_int_cst_type(SIZE_T, sourceref.field->data.capacity()));
          moved = true;
  
          break;
--- 263,286 ----
        case FldPointer:
        case FldIndex:
          {
          SHOW_PARSE1
            {
            SHOW_PARSE_INDENT
            SHOW_PARSE_TEXT("mh_source_is_literalN: pointer/index")
            }
  
!         tree source;
!         get_binary_value(source, sourceref);
  
!         tree dest_type = tree_type_from_refer(destref);
!         tree dest = gg_define_variable(dest_type);
!         gg_assign(dest, gg_cast(dest_type, source));
! 
!         tree location;
!         get_location(location, destref);
!         gg_memcpy(location,
!                   gg_get_address_of(dest),
!                   build_int_cst_type(SIZE_T, gg_sizeof(dest_type)));
          moved = true;
  
          break;
diff -Nrcpad gcc-17-20260705/gcc/cobol/parse.y gcc-17-20260712/gcc/cobol/parse.y
*** gcc-17-20260705/gcc/cobol/parse.y	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/cobol/parse.y	Sun Jul 12 22:32:07 2026
*************** class locale_tgt_t {
*** 342,347 ****
--- 342,352 ----
  #include "cobol-system.h"
  #include "coretypes.h"
  #include "tree.h"
+ #include "tree-iterator.h"
+ #include "stringpool.h"
+ #include "diagnostic-core.h"
+ #include "target.h"
+ #include "tm.h"
  #undef cobol_dialect
  #undef cobol_exceptions
  #undef yy_flex_debug
*************** class locale_tgt_t {
*** 356,361 ****
--- 361,367 ----
  #include "genapi.h"
  #include "../../libgcobol/exceptl.h"
  #include "exceptg.h"
+ #include "../../libgcobol/cobol-endian.h"
  #include "../../libgcobol/charmaps.h"
  #include "parse_ante.h"
  %}
*************** cobol_words1:	COBOL_WORDS EQUATE NAME[ke
*** 1636,1642 ****
  		  if( ! cdf_tokens.reserve(@name, $name) ) { YYERROR; }
  		}
          |       PROCESS {
!                   cbl_message(@1, IbmCdf, "%qs", $1);
                  }
  		;
  
--- 1642,1648 ----
  		  if( ! cdf_tokens.reserve(@name, $name) ) { YYERROR; }
  		}
          |       PROCESS {
!                   cbl_message(@1, IbmCdf, "CDF directive ignored: %qs", $1);
                  }
  		;
  
*************** sign_separate:  %empty              { $$
*** 5468,5486 ****
  type_clause: TYPE to typename
                  {
                    cbl_field_t *field = current_field();
!                   if( $typename ) {
!                     const auto e = symbol_field_same_as(field, $typename);
! 		    symbol_field_location( symbol_index(e), @typename );
!                   }
                  }
          |       USAGE is typename
                  {
                    dialect_ok(@typename, MfUsageTypename, "USAGE TYPENAME");
                    cbl_field_t *field = current_field();
!                   if( $typename ) {
!                     const auto e = symbol_field_same_as(field, $typename);
! 		    symbol_field_location( symbol_index(e), @typename );
!                   }
                  }
                  ;
  
--- 5474,5490 ----
  type_clause: TYPE to typename
                  {
                    cbl_field_t *field = current_field();
!                   assert( $typename );
!                   const auto e = symbol_field_same_as(field, $typename);
!                   symbol_field_location( symbol_index(e), @typename );
                  }
          |       USAGE is typename
                  {
                    dialect_ok(@typename, MfUsageTypename, "USAGE TYPENAME");
                    cbl_field_t *field = current_field();
!                   assert( $typename );
!                   const auto e = symbol_field_same_as(field, $typename);
!                   symbol_field_location( symbol_index(e), @typename );
                  }
                  ;
  
*************** sentences:      sentence {
*** 5647,5656 ****
          |       paragraph_name[para] '.'
                  {
                    location_set(@para);
!                   cbl_label_t *label = label_add(@para, LblParagraph, $para);
!                   if( !label ) {
!                     YYERROR;
!                   }
                    ast_enter_paragraph(@para, label);
                    current.new_paragraph(label);
                    apply_declaratives();
--- 5651,5661 ----
          |       paragraph_name[para] '.'
                  {
                    location_set(@para);
!                   cbl_label_t
!                     *label = label_instantiate(@para, PROGRAM, LblParagraph,
!                                                current.program_section(),
!                                                $para);
!                   assert(label);
                    ast_enter_paragraph(@para, label);
                    current.new_paragraph(label);
                    apply_declaratives();
*************** sentences:      sentence {
*** 5664,5673 ****
          |       sentences paragraph_name[para] '.'
                  {
                    location_set(@para);
!                   cbl_label_t *label = label_add(@para, LblParagraph, $para);
!                   if( !label ) {
!                     YYERROR;
!                   }
                    ast_enter_paragraph(@para, label);
                    current.new_paragraph(label);
                    apply_declaratives();
--- 5669,5679 ----
          |       sentences paragraph_name[para] '.'
                  {
                    location_set(@para);
!                   cbl_label_t
!                     *label = label_instantiate(@para, PROGRAM, LblParagraph,
!                                                current.program_section(),
!                                                $para);
!                   assert(label);
                    ast_enter_paragraph(@para, label);
                    current.new_paragraph(label);
                    apply_declaratives();
*************** if_statements:  %empty        %prec ADD
*** 7048,7054 ****
          |       statements    %prec ADD
          |       NEXT SENTENCE %prec ADD
                  {
!                   next_sentence = label_add(LblNone, "next_sentence", 0);
                    parser_label_goto(next_sentence);
                  }
                  ;
--- 7054,7060 ----
          |       statements    %prec ADD
          |       NEXT SENTENCE %prec ADD
                  {
!                   next_sentence = label_add_once(LblNone, "next_sentence");
                    parser_label_goto(next_sentence);
                  }
                  ;
*************** eval_case:      eval_objects statements
*** 7110,7116 ****
                  {
  		  auto& ev( eval_stack.current() );
  		  ev.write_when_label();
!                   next_sentence = label_add(LblNone, "next_sentence", 0);
                    parser_label_goto(next_sentence);
                  }
                  ;
--- 7116,7122 ----
                  {
  		  auto& ev( eval_stack.current() );
  		  ev.write_when_label();
!                   next_sentence = label_add_once(LblNone, "next_sentence");
                    parser_label_goto(next_sentence);
                  }
                  ;
*************** typename:       NAME
*** 7413,7419 ****
                  {
                    auto e = symbol_typedef(PROGRAM, $NAME);
                    if( ! e ) {
! 		    error_msg(@1, "DATA-ITEM '%s' not found", $NAME );
                      YYERROR;
                    }
                    $$ = cbl_field_of(e);
--- 7419,7425 ----
                  {
                    auto e = symbol_typedef(PROGRAM, $NAME);
                    if( ! e ) {
! 		    error_msg(@1, "TYPE %qs not found", $NAME );
                      YYERROR;
                    }
                    $$ = cbl_field_of(e);
*************** cce_factor:     NUMSTR {
*** 8017,8030 ****
  section_name:	NAME section_kw '.'
                  {
                    statement_begin(@1, SECTION);
! 		  $$ = label_add(@1, LblSection, $1);
                    ast_enter_section(@1, $$);
                    apply_declaratives();
                  }
  	|	NAME section_kw // lexer swallows '.' before USE
                  <label>{
                    statement_begin(@1, SECTION);
! 		  $$ = label_add(@1, LblSection, $1);
                    ast_enter_section(@1, $$);
                    apply_declaratives();
                  } [label]
--- 8023,8036 ----
  section_name:	NAME section_kw '.'
                  {
                    statement_begin(@1, SECTION);
! 		  $$ = label_instantiate(@1, PROGRAM, LblSection, 0, $1);
                    ast_enter_section(@1, $$);
                    apply_declaratives();
                  }
  	|	NAME section_kw // lexer swallows '.' before USE
                  <label>{
                    statement_begin(@1, SECTION);
! 		  $$ = label_instantiate(@1, PROGRAM, LblSection, 0, $1);
                    ast_enter_section(@1, $$);
                    apply_declaratives();
                  } [label]
*************** perform_proc:   perform_names %prec NAME
*** 8332,8342 ****
  
  perform_names:  label_1[para]
                  {
!                   perform_tgt_set($para);
                  }
          |       label_1[para1] THRU label_1[para2]
                  {
!                   perform_tgt_set($para1, $para2);
                  }
                  ;
  
--- 8338,8382 ----
  
  perform_names:  label_1[para]
                  {
!                   auto perf = perform_tgt_set($para);
!                   const auto sect = current.section();
!                   const auto para = current.paragraph();
!                   const cbl_label_t *curr = perf->tgt.recurses(para, sect); // disabled
! 
!                   if( sect && curr && curr->type == LblParagraph ) {
!                     // It's not recursion if OF NAME does not match the current section.
!                     if( curr->parent ) {
!                       auto tgt_sect = cbl_label_of(symbol_at(curr->parent));
!                       if( 0 != strcasecmp(sect->name, tgt_sect->name) ) {
!                         curr = nullptr;
!                       }
!                     }
!                   }
!                   if( curr ) {
!                     error_msg(@$, "would recurse through current procedure %s",
!                               curr->name);
!                   }
                  }
          |       label_1[para1] THRU label_1[para2]
                  {
!                   auto perf = perform_tgt_set($para1, $para2);
!                   const auto sect = current.section();
!                   const auto para = current.paragraph();
!                   const cbl_label_t *curr = perf->tgt.recurses(para, sect); // disabled
! 
!                   if( sect && curr && curr->type == LblParagraph ) {
!                     // It's not recursion if OF NAME does not match the current section.
!                     if( curr->parent ) {
!                       auto tgt_sect = cbl_label_of(symbol_at(curr->parent));
!                       if( 0 != strcasecmp(sect->name, tgt_sect->name) ) {
!                         curr = nullptr;
!                       }
!                     }
!                   }
!                   if( curr ) {
!                     error_msg(@$, "would recurse through current procedure %s",
!                               curr->name);
!                   }
                  }
                  ;
  
*************** search_2_case:  WHEN { parser_bsearch_co
*** 9778,9784 ****
  
  search_stmts:   statements    %prec ADD
          |       NEXT SENTENCE %prec ADD {
!                   next_sentence = label_add(LblNone, "next_sentence", 0);
                    parser_label_goto(next_sentence);
                  }
                  ;
--- 9818,9824 ----
  
  search_stmts:   statements    %prec ADD
          |       NEXT SENTENCE %prec ADD {
!                   next_sentence = label_add_once(LblNone, "next_sentence");
                    parser_label_goto(next_sentence);
                  }
                  ;
*************** sort_table:     SORT tableref[table] sor
*** 9843,9848 ****
--- 9883,9892 ----
  		    error_msg(@1, "%s has no OCCURS clause", $table->field->name);
                      YYERROR;
  		  }
+ 		  if( !$table->field->occurs.keys ) {
+ 		    error_msg(@1, "%s: no key defined", $table->field->name);
+                     YYERROR;
+ 		  }
                    cbl_key_t
                      key = cbl_key_t($table->field->occurs.keys[0]),
                      guess(1, &$table->field);
*************** label_1:        qname
*** 10857,10869 ****
  
                    if( namelocs.size() == 2 ) {
  		    auto nameloc = namelocs.front();
!                     cbl_label_t *sect = label_add(nameloc.loc, LblSection, nameloc.name);
                      isect = symbol_index(symbol_elem_of(sect));
                    }
  
                    $$ = paragraph_reference(@1, para, isect);
                    assert($$);
!                   dbgmsg( "using procedure %s of line %d", $$->name, $$->line );
                  }
          |       NUMSTR
                  {
--- 10901,10916 ----
  
                    if( namelocs.size() == 2 ) {
  		    auto nameloc = namelocs.front();
!                     cbl_label_t *sect = symbol_label(PROGRAM,
!                                                      LblSection, 0, nameloc.name);
!                     if( !sect ) sect = label_add(nameloc.loc, LblNone, nameloc.name);
                      isect = symbol_index(symbol_elem_of(sect));
                    }
  
                    $$ = paragraph_reference(@1, para, isect);
                    assert($$);
!                   size_t isym = symbol_index(symbol_elem_of($$));
!                   dbgmsg( "using procedure #%lu %s of line %d", isym, $$->name, $$->line );
                  }
          |       NUMSTR
                  {
*************** class label_named {
*** 13179,13185 ****
  typedef label_named<LblSection> section_named;
  typedef label_named<LblParagraph> paragraph_named;
  
! static struct cbl_label_t *
  label_add( const cbl_loc_t& loc,
  	   enum cbl_label_type_t type, const char name[] ) {
    size_t parent = 0;
--- 13226,13232 ----
  typedef label_named<LblSection> section_named;
  typedef label_named<LblParagraph> paragraph_named;
  
! static cbl_label_t *
  label_add( const cbl_loc_t& loc,
  	   enum cbl_label_type_t type, const char name[] ) {
    size_t parent = 0;
*************** label_add( const cbl_loc_t& loc,
*** 13201,13208 ****
      auto p = std::find_if(symbols_begin(PROGRAM), symbols_end(),
                            paragraph_named(PROGRAM, name));
      if( p != symbols_end() ) {
!       error_msg(loc, "section %s conflicts with paragraph %s on line %d",
!                 name, cbl_label_of(p)->name, cbl_label_of(p)->line);
      }
    }
    struct cbl_label_t label = { type, parent, loc.first_line };
--- 13248,13261 ----
      auto p = std::find_if(symbols_begin(PROGRAM), symbols_end(),
                            paragraph_named(PROGRAM, name));
      if( p != symbols_end() ) {
!       const auto& para(*cbl_label_of(p));
!       if( 0 < para.line ) {
!         error_msg(loc, "section %s conflicts with paragraph %s on line %d",
!                   name, para.name, para.line);
!       } else {
!         error_msg(loc, "section %s would conflict with paragraph of same name",
!                   name);
!       }
      }
    }
    struct cbl_label_t label = { type, parent, loc.first_line };
*************** label_add( const cbl_loc_t& loc,
*** 13216,13235 ****
  
    assert( !(p->type == LblSection && p->parent > 0) );
  
    return p;
  }
  
  /*
   * Many label names are defined statically and so are guaranteed to be in
   * bounds. Often they are created far away from the yacc metavariables, so
   * there's no location to access.
   */
! static struct cbl_label_t *
  label_add( enum cbl_label_type_t type, const char name[], int line ) {
    cbl_loc_t loc { line, 1, line, 1 };
    return label_add(loc, type, name);
  }
  
  cbl_label_t *
  perform_t::ec_labels_t::new_label( cbl_label_type_t type,
  				   const cbl_name_t role )
--- 13269,13354 ----
  
    assert( !(p->type == LblSection && p->parent > 0) );
  
+   if( type == LblNone ) {
+     auto isym = symbol_index(symbol_elem_of(p));
+     current.forward_add(isym);
+     dbgmsg("%s: add forward %s %s #%lu", __func__,
+            p->type_str(), p->name, (unsigned long)isym);
+   }
    return p;
  }
  
  /*
+  * Special treatment for the "next_sentence" label, which the compiler creates and
+  * remains LblNone.
+  */
+ static cbl_label_t *
+ label_add_once( cbl_label_type_t type, const char name[] ) {
+   cbl_label_t *L = symbol_label(PROGRAM, type, 0, name);
+   if( L ) return L;
+ 
+   cbl_label_t label = { type, 0, 0 }; // no parent, line 0
+   strcpy(label.name, name);
+   
+   return symbol_label_add(PROGRAM, &label);
+ }
+ 
+ /*
   * Many label names are defined statically and so are guaranteed to be in
   * bounds. Often they are created far away from the yacc metavariables, so
   * there's no location to access.
   */
! static cbl_label_t *
  label_add( enum cbl_label_type_t type, const char name[], int line ) {
    cbl_loc_t loc { line, 1, line, 1 };
    return label_add(loc, type, name);
  }
  
+ // When a Section or Paragraph is defined, first see if a LblNone exists for
+ // it.  If so, imbue it as now defined. Else create one.  
+ static cbl_label_t *
+ label_instantiate( const cbl_loc_t& loc, size_t program,
+                           cbl_label_type_t type, size_t section,
+                           const char name[] )
+ {
+   cbl_label_t *label = symbol_label(program, type, section, name);
+   if( ! label && type == LblParagraph ) {
+     // A forward reference could be mistakenly attached to a section with no
+     // such paragraph.
+     auto& forwards = current.forwards();
+ 
+     for( auto isym : forwards ) {
+       auto para = cbl_label_of(symbol_at(isym));
+       if( para->type == LblNone ) {
+         if( 0 == strcasecmp(para->name, name) ) {
+           assert(para->parent);
+           auto sect = cbl_label_of(symbol_at(para->parent));            
+           if( 0 == strcasecmp(sect->name, current.section()->name) ) {
+             // The current section has the same name as a prior one, and that
+             // prior one was parsed without instantiating a forward reference
+             // that was attached to it.  So, use it.  
+             label = para;
+             forwards.erase(isym);
+             break;
+           }
+         }
+       }
+     }
+   }
+   if( label && label->type == LblNone ) {
+     label->type = type;
+     label->parent = section;
+     label->line = loc.first_line;
+     dbgmsg("%s:%d: instantiated %s", __func__, __LINE__, label->str());
+     return label;
+   }
+ 
+   label = label_add(loc, type, name);
+   dbgmsg("%s:%d: add %s", __func__, __LINE__, label->str());
+   
+   return label;
+ }
+ 
  cbl_label_t *
  perform_t::ec_labels_t::new_label( cbl_label_type_t type,
  				   const cbl_name_t role )
*************** perform_t::ec_labels_t::new_label( cbl_l
*** 13269,13283 ****
  static struct cbl_label_t *
  paragraph_reference( const cbl_loc_t& loc, const char name[], size_t section )
  {
!   // A reference has line == 0.  It is LblParagraph if the section is
!   // explicitly named, else LblNone (because we don't know).
!   struct cbl_label_t *p, label = { section? LblParagraph : LblNone, section };
    assert(strlen(name) < sizeof(label.name)); // caller ensures
    strcpy(label.name, name);
-   if( label.type == LblNone ) assert(label.parent == 0);
  
!   p = symbol_label_add(PROGRAM, &label);
!   assert(p);
    const char *para_name = p->name;
    const char *sect_name = section? cbl_label_of(symbol_at(section))->name : NULL;
    
--- 13388,13415 ----
  static struct cbl_label_t *
  paragraph_reference( const cbl_loc_t& loc, const char name[], size_t section )
  {
!   dbgmsg("%s: find '%s' in section #%lu", __func__, name, (unsigned long)section);
!   // A reference has line == 0.  It is LblNone, possibly with a parent, until instantiated.
!   cbl_label_t label = { LblNone, section };
    assert(strlen(name) < sizeof(label.name)); // caller ensures
    strcpy(label.name, name);
  
!   auto p = symbol_label(PROGRAM, LblParagraph, label.parent, label.name);
!   if( !p && section == 0 ) {
!     p = symbol_label(PROGRAM, LblSection, label.parent, label.name);
!   }
!   if( ! p  ) {
!     p = symbol_label_add(PROGRAM, &label);
!     assert(p);
!     if( p->type == LblNone ) {
!       auto isym = symbol_index(symbol_elem_of(p));
!       current.forward_add(isym);
!       dbgmsg("%s: add forward %s %s #%lu in section %lu", __func__,
!              p->type_str(), p->name,
!              (unsigned long)isym, (unsigned long)p->parent);
!     }
!   }
!   
    const char *para_name = p->name;
    const char *sect_name = section? cbl_label_of(symbol_at(section))->name : NULL;
    
*************** ast_op( const cbl_loc_t& loc, cbl_refer_
*** 13546,13551 ****
--- 13678,13689 ----
  static void
  ast_relop( const cbl_loc_t& loc, cbl_field_t *tgt,
             cbl_refer_t lhs, relop_t op, cbl_refer_t rhs ) {
+   if( was_fd_name(lhs.field) || was_fd_name(rhs.field) ) {
+     const char *name = was_fd_name(lhs.field) ? lhs.field->name : rhs.field->name;
+     error_msg(loc, "cannot compare anything to FD %qs", name);
+     return;
+   }
+ 
    if( ! (valid_move(lhs.field, rhs.field) && valid_move(rhs.field, lhs.field)) ) {
      if( is_numeric(lhs.field) != is_numeric(rhs.field) ) {
        if( (lhs.field->type == FldFloat) || (rhs.field->type == FldFloat) ) {
*************** literal_refmod_valid( cbl_loc_t loc, con
*** 14721,14786 ****
  
    unsigned int nchar = r.field->char_capacity();
    const cbl_span_t& refmod(r.refmod);
  
    // Check ANY LENGTH for initial refmod FROM literal 0. A bit specific....
    if( r.field->has_attr(any_length_e) ) {
      if( is_literal(refmod.from->field) ) {
!       auto edge = refmod.from->field->as_integer();
!       if( edge < 1 ) {
          error_msg(loc,"%s(%zu:%s) out of bounds, must be within 1:%u",
                    r.field->name,
                    size_t(refmod.from->field->as_integer()),
!                   nice_name_of(refmod.len->field),
                    nchar );
          return false;
        }
      }
      return true;
    }
!   
    if( ! is_literal(refmod.from->field) ) {
      if( ! refmod.len ) return true;
      if( ! is_literal(refmod.len->field) ) return true;
!     auto edge = refmod.len->field->as_integer();
!     if( 0 < edge ) {
!       if( edge-1 < nchar ) return true;
      }
!     // len < 0 or not: 0 < from + len <= capacity
      error_msg(loc, "%s(%s:%zu) out of bounds, "
  	           "size is %u",
  	      r.field->name,
  	      refmod.from->name(),
! 	      size_t(edge),
  	      nchar );
      return false;
    }
  
!   auto edge = refmod.from->field->as_integer();
!   if( 0 < edge ) {
!     if( --edge < nchar ) {
!       if( ! refmod.len ) return true;
!       if( ! is_literal(refmod.len->field) ) return true;
!       auto len = refmod.len->field->as_integer();
!       if( len > 0 ) {
! 	edge += len;
! 	if( --edge < nchar ) return true;
!       }
!       // len < 0 or not: 0 < from + len <= capacity
!       loc = symbol_field_location(field_index(r.field));
!       error_msg(loc, "%s(%zu:%zu) out of bounds, "
! 		"size is %u",
! 		r.field->name,
! 		size_t(refmod.from->field->as_integer()),
! 		size_t(len),
! 		nchar );
!       return false;
      }
    }
  
    error_msg(loc,"%s(%zu:%s) out of bounds, must be within 1:%u",
  	    r.field->name,
! 	    size_t(refmod.from->field->as_integer()),
!             nice_name_of(refmod.len->field),
  	    nchar );
    return false;
  }
--- 14859,14931 ----
  
    unsigned int nchar = r.field->char_capacity();
    const cbl_span_t& refmod(r.refmod);
+   const char *len_name = refmod.len? nice_name_of(refmod.len->field) : "";
  
    // Check ANY LENGTH for initial refmod FROM literal 0. A bit specific....
    if( r.field->has_attr(any_length_e) ) {
      if( is_literal(refmod.from->field) ) {
!       auto from = refmod.from->field->as_integer();
!       if( from < 1 ) {
          error_msg(loc,"%s(%zu:%s) out of bounds, must be within 1:%u",
                    r.field->name,
                    size_t(refmod.from->field->as_integer()),
!                   len_name,
                    nchar );
          return false;
        }
      }
      return true;
    }
! 
!   // from is unknown
    if( ! is_literal(refmod.from->field) ) {
      if( ! refmod.len ) return true;
      if( ! is_literal(refmod.len->field) ) return true;
!     auto len = refmod.len->field->as_integer();
!     if( 0 < len ) {
!       if( len-1 < nchar ) return true; // len is less than the field's size
      }
!     // len too big: 0 < from + len <= capacity
      error_msg(loc, "%s(%s:%zu) out of bounds, "
  	           "size is %u",
  	      r.field->name,
  	      refmod.from->name(),
! 	      size_t(len),
  	      nchar );
      return false;
    }
  
!   gcc_assert(is_literal(refmod.from->field));
! 
!   // from is known
!   auto from = refmod.from->field->as_integer();
!   if( 0 < from && from <= nchar ) {
!     // from is in bounds
!     if( ! refmod.len ) return true;
!     if( ! is_literal(refmod.len->field) ) return true;
!     // len is known
!     auto len = refmod.len->field->as_integer();
!     if( 0 < len ) {
!       if( from + len - 2 < nchar ) return true;
      }
+     // from + len too big: 0 < from + len <= capacity
+     loc = symbol_field_location(field_index(r.field));
+     error_msg(loc, "%s(%zu:%zu) out of bounds, "
+       	"size is %u",
+       	r.field->name,
+       	size_t(from),
+       	size_t(len),
+       	nchar );
+     return false;
    }
  
+   // from is too big or 0
+   gcc_assert(from < 1 || nchar <= from);
+ 
    error_msg(loc,"%s(%zu:%s) out of bounds, must be within 1:%u",
  	    r.field->name,
! 	    size_t(from),
!             len_name,
  	    nchar );
    return false;
  }
*************** field_binary_usage( cbl_loc_t loc, cbl_f
*** 15022,15027 ****
--- 15167,15176 ----
      field->attr |= big_endian_e;
      __attribute__((fallthrough));
    case FldNumericBin5:
+     if( cobol_target_big_endian() ) // cppcheck-suppress knownConditionTrueFalse
+       {
+       field->attr |= big_endian_e;
+       }
      // If no capacity yet, then no picture, infer $comp.capacity.
      // If field has capacity, ensure USAGE is compatible.
      if( field->data.capacity() > 0 ) { // PICTURE before USAGE
diff -Nrcpad gcc-17-20260705/gcc/cobol/parse_ante.h gcc-17-20260712/gcc/cobol/parse_ante.h
*** gcc-17-20260705/gcc/cobol/parse_ante.h	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/cobol/parse_ante.h	Sun Jul 12 22:32:07 2026
*************** cbl_division_t cbl_syntax_only = not_syn
*** 78,84 ****
  void
  mode_syntax_only( cbl_division_t division ) {
    cbl_syntax_only = division;
!   dbgmsg("%s: parsing %s, %zu errors", __func__, 
           cbl_syntax_only == not_syntax_only? "resumes" : "syntax only",
           nparse_error);
  }
--- 78,84 ----
  void
  mode_syntax_only( cbl_division_t division ) {
    cbl_syntax_only = division;
!   dbgmsg("%s: parsing %s, %zu errors", __func__,
           cbl_syntax_only == not_syntax_only? "resumes" : "syntax only",
           nparse_error);
  }
*************** mode_syntax_only( const char func[], boo
*** 93,99 ****
              __func__, cbl_syntax_only, nparse_error );
    }
    if( was_syntax_only != cbl_syntax_only ) {
!     dbgmsg("%s: parsing %s, %zu errors", func, 
             cbl_syntax_only == not_syntax_only? "resumes" : "syntax only",
             nparse_error);
    }
--- 93,99 ----
              __func__, cbl_syntax_only, nparse_error );
    }
    if( was_syntax_only != cbl_syntax_only ) {
!     dbgmsg("%s: parsing %s, %zu errors", func,
             cbl_syntax_only == not_syntax_only? "resumes" : "syntax only",
             nparse_error);
    }
*************** static bool successful_parse() {
*** 129,134 ****
--- 129,143 ----
  
  void input_file_status_notify();
  
+ static void
+ yylocation_print(FILE* file, const cbl_loc_t& loc) {
+   fprintf(file, "%d.%d-%d.%d", 
+           loc.first_line, loc.first_column, 
+           loc.last_line, loc.last_column);
+ }
+ 
+ #define YYLOCATION_PRINT(File, Loc) yylocation_print(File, *Loc)
+ 
  #define YYLLOC_DEFAULT(Current, Rhs, N)                                 \
    do {                                                                  \
        if (N)                                                            \
*************** extern int yydebug;
*** 160,170 ****
  // These programs in libgcobol/compat are allowed to use ANY LENGTH even though
  // they look like top-level programs.
  static const std::set<std::string> compat_programs {
!   "CBL_ALLOC_MEM", 
!   "CBL_CHECK_FILE_EXIST", 
    "CBL_CLOSE_FILE",
!   "CBL_DELETE_FILE", 
!   "CBL_FREE_MEM", 
    "CBL_GET_PROGRAM_INFO",
    "CBL_OPEN_FILE",
    "CBL_READ_FILE",
--- 169,179 ----
  // These programs in libgcobol/compat are allowed to use ANY LENGTH even though
  // they look like top-level programs.
  static const std::set<std::string> compat_programs {
!   "CBL_ALLOC_MEM",
!   "CBL_CHECK_FILE_EXIST",
    "CBL_CLOSE_FILE",
!   "CBL_DELETE_FILE",
!   "CBL_FREE_MEM",
    "CBL_GET_PROGRAM_INFO",
    "CBL_OPEN_FILE",
    "CBL_READ_FILE",
*************** struct tgt_list_t {
*** 941,950 ****
    list<cbl_num_result_t> targets;
  };
  
! static struct cbl_label_t *
  label_add( const cbl_loc_t& loc, enum cbl_label_type_t type, const char name[] );
! static struct cbl_label_t *
  label_add( enum cbl_label_type_t type, const char name[], int line );
  
  static struct cbl_label_t *
  paragraph_reference( const cbl_loc_t& loc, const char name[], size_t section );
--- 950,964 ----
    list<cbl_num_result_t> targets;
  };
  
! static cbl_label_t *
  label_add( const cbl_loc_t& loc, enum cbl_label_type_t type, const char name[] );
! static cbl_label_t *
! label_add_once( cbl_label_type_t type, const char name[] );
! static cbl_label_t *
  label_add( enum cbl_label_type_t type, const char name[], int line );
+ static cbl_label_t *
+ label_instantiate( const cbl_loc_t& loc, size_t program,
+                    cbl_label_type_t type, size_t section, const char name[]);
  
  static struct cbl_label_t *
  paragraph_reference( const cbl_loc_t& loc, const char name[], size_t section );
*************** static class current_t {
*** 1714,1719 ****
--- 1728,1734 ----
    program_stack_t programs;
    unique_typedefs_t typedefs;
    std::set<function_descr_t> udfs;
+   std::set<size_t> undefined_labels;
    int first_statement;
    bool in_declaratives;
    // from command line or early TURN
*************** static class current_t {
*** 1979,1984 ****
--- 1994,2007 ----
      return client->second;
    }
  
+   void forward_add( size_t isym ) {
+     assert( LblNone == cbl_label_of(symbol_at(isym))->type );
+     undefined_labels.insert(isym);
+   }
+   auto& forwards() {
+     return undefined_labels;
+   }
+ 
    void alpha_encoding( size_t isym, cbl_encoding_t encoding ) {
      prog_descr_t& program = programs.top();
      program.alphabet.alpha.set(isym, encoding);
*************** static class current_t {
*** 2147,2153 ****
      assert(!programs.empty());
  
      match_proc::statements_verify();
!     
      const procref_t *ref = ambiguous_reference(program_index());
      std::set<std::string> externals = programs.top().external_targets();
  
--- 2170,2176 ----
      assert(!programs.empty());
  
      match_proc::statements_verify();
! 
      const procref_t *ref = ambiguous_reference(program_index());
      std::set<std::string> externals = programs.top().external_targets();
  
*************** static class current_t {
*** 2189,2195 ****
          }
        callers_we_have_seen.insert(caller);
        }
-       if( yydebug ) parser_call_targets_dump();
      }
  
      parser_leave_paragraph( programs.top().paragraph );
--- 2212,2217 ----
*************** struct prototype_type_t : public cbl_lab
*** 2414,2420 ****
  
  /*
   * For any name, there may be one prototype and one definition.  A Function-ID
!  * cannot share a name with a Program-ID.  
   *
   * std::set::insert returns an iterator to the element and boolean indicating
   * whether the insertion succeeded.  If false, the iterator points to the
--- 2436,2442 ----
  
  /*
   * For any name, there may be one prototype and one definition.  A Function-ID
!  * cannot share a name with a Program-ID.
   *
   * std::set::insert returns an iterator to the element and boolean indicating
   * whether the insertion succeeded.  If false, the iterator points to the
*************** static bool is_allowed_name( size_t isym
*** 2431,2442 ****
    if( ! p.second ) {
      const cbl_label_t& extant(*p.first);
  
!     // cannot have program and function by same name. 
      if( extant.type != L->type ) return false;
!     
!     // ok if both are prototypes of type, not if neither is. 
      if( extant.prototype == L->prototype ) {
!       return extant.prototype; 
      }
    }
    return p.second; // otherwise known as true
--- 2453,2464 ----
    if( ! p.second ) {
      const cbl_label_t& extant(*p.first);
  
!     // cannot have program and function by same name.
      if( extant.type != L->type ) return false;
! 
!     // ok if both are prototypes of type, not if neither is.
      if( extant.prototype == L->prototype ) {
!       return extant.prototype;
      }
    }
    return p.second; // otherwise known as true
*************** prototype_args( const cbl_label_t *L, si
*** 2470,2476 ****
      size_t iprog = symbol_elem_of(L)->program;
      assert(iprog == 0); // no containing program
      iprog = symbol_index(symbol_elem_of(L));
!     
      if( iprog < esym ) {
        auto p = function_prototypes.find(iprog);
        if( p != function_prototypes.end() ) {
--- 2492,2498 ----
      size_t iprog = symbol_elem_of(L)->program;
      assert(iprog == 0); // no containing program
      iprog = symbol_index(symbol_elem_of(L));
! 
      if( iprog < esym ) {
        auto p = function_prototypes.find(iprog);
        if( p != function_prototypes.end() ) {
*************** prototype_args( const char *name, size_t
*** 2487,2498 ****
    auto L = symbol_program(0, name, true);         // seek program prototype
    if( !L ) L = symbol_program(0, name);           // else use definition
    if( !L ) L = symbol_function_any(0, name);      // else prototype or definition
!   
    return prototype_args(L, esym);
  }
  
  static void
! verify_args( const cbl_loc_t& loc, 
               const char name[], size_t narg,
               const cbl_ffi_arg_t args[] );
  
--- 2509,2520 ----
    auto L = symbol_program(0, name, true);         // seek program prototype
    if( !L ) L = symbol_program(0, name);           // else use definition
    if( !L ) L = symbol_function_any(0, name);      // else prototype or definition
! 
    return prototype_args(L, esym);
  }
  
  static void
! verify_args( const cbl_loc_t& loc,
               const char name[], size_t narg,
               const cbl_ffi_arg_t args[] );
  
*************** size_t program_level() { return current.
*** 2575,2581 ****
  static size_t constant_index( int token );
  
  static bool
! valid_pointer_relop( const cbl_loc_t& lloc, const cbl_loc_t& oloc, const cbl_loc_t& rloc, 
                       cbl_refer_t *lhs, relop_t op, cbl_refer_t *rhs );
  
  static relop_t relop_of(int);
--- 2597,2603 ----
  static size_t constant_index( int token );
  
  static bool
! valid_pointer_relop( const cbl_loc_t& lloc, const cbl_loc_t& oloc, const cbl_loc_t& rloc,
                       cbl_refer_t *lhs, relop_t op, cbl_refer_t *rhs );
  
  static relop_t relop_of(int);
*************** field_find( cbl_loc_t loc, const std::li
*** 2874,2879 ****
--- 2896,2908 ----
      }
    }
    symbol_elem_t *e = symbol_find(names);
+   if( e && SymField == e->type && was_fd_name(cbl_field_of(e)) ) {
+     if( dialect_ok(loc, IbmCallFd, "CALL USING FD unimplemented") ) {
+       // No other COBOL compiler interprets the FD as a buffer.  This feature
+       // requires further development.
+       warn_msg(loc, "CALL USING FD passes file buffer, not handle");
+     }
+   }
    return e? cbl_field_of(e) : NULL;
  }
  
*************** field_capacity_error( const cbl_loc_t& l
*** 3183,3223 ****
  #define ERROR_IF_CAPACITY(L, F)                                 \
    do { if( field_capacity_error(L, F) ) YYERROR; } while(0)
  
- template <typename T>
- static void
- blankit( T* beg, size_t n, T ch ) {
-   std::fill(beg, beg + n, ch);
- }
- 
  /*
   * Normally blank_initial takes just a length argument and initializes
   * data.initial to all blanks according to the field's encoding.  Optionally it
!  * applies a figurative constant and uses that instead. 
   */
  void
  cbl_field_t::blank_initial( size_t nchar, cbl_figconst_t figconst ) {
!   charmap_t *charmap = __gg__get_charmap(codeset.encoding);
!   cbl_char_t space_char = figconst == normal_value_e?
!     charmap->mapped_character(ascii_space)
!   : charmap->figconst_character(figconst);
!   
    size_t nbyte = nchar * codeset.stride();
    char *init = static_cast<char *>(xmalloc(nbyte+4));
!   char *enit = init + nbyte;
!   std::fill(enit, enit + 4, '\0'); // append for NULs
!   
!   switch(codeset.stride()) {
!   case 1: 
!     blankit( reinterpret_cast<uint8_t*>(init), nchar, uint8_t(space_char%0x100) );
!     break;
!   case 2:
!     blankit( reinterpret_cast<uint16_t*>(init), nchar, uint16_t(space_char%0x10000) );
!     break;
!   case 4:
!     blankit( reinterpret_cast<uint32_t*>(init), nchar, uint32_t(space_char) );
!     break;
!   default:
!     gcc_unreachable();
    }
    data.initial = init;
  }
--- 3212,3246 ----
  #define ERROR_IF_CAPACITY(L, F)                                 \
    do { if( field_capacity_error(L, F) ) YYERROR; } while(0)
  
  /*
   * Normally blank_initial takes just a length argument and initializes
   * data.initial to all blanks according to the field's encoding.  Optionally it
!  * applies a figurative constant and uses that instead. We are going to take
!  * that one character, convert it to the target encoding, and then duplicate
!  * as necessary.
   */
  void
  cbl_field_t::blank_initial( size_t nchar, cbl_figconst_t figconst ) {
!   // Set our "from" buffer to a single space
!   char space[] = " ";
!   if( figconst ) {
!     *space = char_from_figconst(figconst);
!   }
! 
!   // Convert that character to the encoded version:
!   size_t nbytes;
!   const char *converted =  __gg__iconverter(DEFAULT_SOURCE_ENCODING,
!                                             codeset.encoding,
!                                             space,
!                                             1,
!                                             &nbytes);
!   // Duplicate that encoded character throughout the target range:
    size_t nbyte = nchar * codeset.stride();
    char *init = static_cast<char *>(xmalloc(nbyte+4));
!   char *d = init;
!   for(size_t i=0; i<nchar; i++) {
!     memcpy(d, converted, codeset.stride());
!     d += codeset.stride();
    }
    data.initial = init;
  }
*************** cbl_field_t::blank_initial( size_t nchar
*** 3230,3242 ****
   */
  void
  cbl_field_t::set_initial( size_t nchar, const cbl_loc_t& loc ) {
!   auto srclen = data.capacity(); 
    set_capacity(nchar);
    blank_initial( char_capacity() );
    if( data.original() ) {
      attr |= cbl_figconst_of(data.original());
      if( has_attr(hex_encoded_e) ) {
!       // If initial value is too long, the caller should report it. 
        auto len = std::min(srclen, data.capacity());
        std::copy(data.original(), data.original() + len,
                  const_cast<char*>(data.initial));
--- 3253,3265 ----
   */
  void
  cbl_field_t::set_initial( size_t nchar, const cbl_loc_t& loc ) {
!   auto srclen = data.capacity();
    set_capacity(nchar);
    blank_initial( char_capacity() );
    if( data.original() ) {
      attr |= cbl_figconst_of(data.original());
      if( has_attr(hex_encoded_e) ) {
!       // If initial value is too long, the caller should report it.
        auto len = std::min(srclen, data.capacity());
        std::copy(data.original(), data.original() + len,
                  const_cast<char*>(data.initial));
*************** parser_move_carefully( const char */*F*/
*** 3410,3415 ****
--- 3433,3443 ----
    for( const auto& num_result : tgt_list->targets ) {
      const cbl_refer_t& tgt = num_result.refer;
  
+     if( was_fd_name(tgt.field) ) { 
+       error_msg(src.loc, "cannot compare anything to FD %qs", tgt.field->name);
+       return false;
+     }
+ 
      if( is_index ) {
        if( tgt.field->type != FldIndex && src.field->type != FldIndex) {
          error_msg(src.loc, "invalid SET %qs (%s) TO %qs (%s): not a field index",
*************** implicit_section()
*** 3498,3528 ****
  static void
  // cppcheck-suppress constParameterPointer
  ast_enter_exit_section( cbl_label_t * section ) {
!   auto implicit = section?  implicit_paragraph() : NULL;
! 
!   struct { cbl_label_t *para, *sect;
      inline bool exists() const { return sect != NULL && para != NULL; }
    } prior = {
!     current.new_paragraph(implicit),
      current.new_section(section)
    };
    dbgmsg( "%s:%d: leaving section %s paragraph %s (line %d)",
            __func__, __LINE__,
            prior.sect? prior.sect->name : "''",
            prior.para? prior.para->name : "''",
            yylineno );
-   if( section ) {
-     dbgmsg( "%s:%d: entering section %s", __func__, __LINE__,
-             section->name );
-   }
    
    if( prior.exists() ) {
      parser_leave_paragraph(prior.para);
      parser_leave_section(prior.sect);
    }
    if( section ) {
      parser_enter_section(section);
!     parser_enter_paragraph(implicit);
    }
  }
  
--- 3526,3563 ----
  static void
  // cppcheck-suppress constParameterPointer
  ast_enter_exit_section( cbl_label_t * section ) {
!   // Add the next section and paragraph to the symbol table, capturing the prior ones.
!   struct { cbl_label_t *sect, *para;
      inline bool exists() const { return sect != NULL && para != NULL; }
    } prior = {
!     // Add the section before the paragraph because label_add() depends on
!     // current.program_section().  But leave the current paragraph before
!     // leaving the current section.
      current.new_section(section)
    };
+ 
+   cbl_label_t *paragraph = nullptr;
+ 
+   if( section ) {
+     paragraph = implicit_paragraph();
+     prior.para = current.new_paragraph(paragraph);
+   }
+   
    dbgmsg( "%s:%d: leaving section %s paragraph %s (line %d)",
            __func__, __LINE__,
            prior.sect? prior.sect->name : "''",
            prior.para? prior.para->name : "''",
            yylineno );
    
    if( prior.exists() ) {
      parser_leave_paragraph(prior.para);
      parser_leave_section(prior.sect);
    }
    if( section ) {
+     dbgmsg( "%s:%d: entering section #%lu %s", __func__, __LINE__,
+             (unsigned long)symbol_index(symbol_elem_of(section)), section->name );
      parser_enter_section(section);
!     parser_enter_paragraph(paragraph);
    }
  }
  
*************** data_division_ready() {
*** 3567,3573 ****
    // Tell codegen about symbols.
    static size_t nsymbol = 0;
    size_t again(nsymbol);
!   
    if( (nsymbol = symbols_update(nsymbol, nparse_error == 0)) > 0 ) {
      if( ! mode_syntax_only() ) {
        if( ! literally_one ) {
--- 3602,3608 ----
    // Tell codegen about symbols.
    static size_t nsymbol = 0;
    size_t again(nsymbol);
! 
    if( (nsymbol = symbols_update(nsymbol, nparse_error == 0)) > 0 ) {
      if( ! mode_syntax_only() ) {
        if( ! literally_one ) {
*************** void internal_ebcdic_unlock();
*** 3846,3852 ****
  static cbl_field_type_t
  field_binary_usage( cbl_loc_t loc, cbl_field_t *field,
                      cbl_field_type_t type, uint32_t capacity,
!                     bool signable ); 
  
  void
  ast_end_program(const char name[]  ) {
--- 3881,3887 ----
  static cbl_field_type_t
  field_binary_usage( cbl_loc_t loc, cbl_field_t *field,
                      cbl_field_type_t type, uint32_t capacity,
!                     bool signable );
  
  void
  ast_end_program(const char name[]  ) {
*************** ast_end_program(const char name[]  ) {
*** 3874,3880 ****
    }
    parser_end_program(name);
    internal_ebcdic_unlock();
!   resume_parsing(); 
  }
  
  static bool
--- 3909,3915 ----
    }
    parser_end_program(name);
    internal_ebcdic_unlock();
!   resume_parsing();
  }
  
  static bool
diff -Nrcpad gcc-17-20260705/gcc/cobol/parse_util.h gcc-17-20260712/gcc/cobol/parse_util.h
*** gcc-17-20260705/gcc/cobol/parse_util.h	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/cobol/parse_util.h	Sun Jul 12 22:32:07 2026
*************** intrinsic_invalid_parameter( int token,
*** 501,507 ****
      case FldClass:
      case FldConditional:
      case FldForward:
-     case FldIndex:
        yyerror("%s: field '%s' (%s) invalid for %s parameter",
                 descr.name,
                 arg.field->name, cbl_field_type_str(arg.field->type),
--- 501,506 ----
diff -Nrcpad gcc-17-20260705/gcc/cobol/scan.l gcc-17-20260712/gcc/cobol/scan.l
*** gcc-17-20260705/gcc/cobol/scan.l	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/cobol/scan.l	Sun Jul 12 22:32:07 2026
*************** BASIS		{ yy_push_state(basis); return BA
*** 2466,2476 ****
  <*>{
    {PUSH_FILE}		{
  			  yy_set_bol(true);
- 			  auto top_file = cobol_lineno(yylineno);
- 			  if( top_file ) {
- 			    if( yy_flex_debug ) dbgmsg("  saving line %4d of %s",
- 			  			       yylineno, top_file);
- 			  }
  			  // "\f#file push <name>": name starts at offset 13.
  			  char *filename = xstrdup(yytext);
  			  filename[yyleng - 1] = '\0'; // kill the trailing formfeed
--- 2466,2471 ----
*************** BASIS		{ yy_push_state(basis); return BA
*** 2479,2484 ****
--- 2474,2491 ----
  			    dbgmsg("logic warning: filename was adjusted to %s",
  				   --filename);
  			  }
+ 			  /*
+ 			   * Update the GCC location so that it reflects the
+ 			   * location of the COPY directive in the file when
+ 			   * the parser calls input_file_status_notify(). That
+ 			   * function leads to gcc's linemap_add, starting a
+ 			   * new location sequence for the copybook text.  When
+ 			   * it does that, if the current file's location is
+ 			   * only the parser's last location, the "included
+ 			   * from" message reflects where the parser last
+ 			   * parsed, not where the scanner found the COPY.
+ 			   */
+ 			  gcc_location_set(yylloc.as_first_line());
  			  input_file_status.enter(filename);
  			  yylineno = 1;
  			  reset_location();
*************** BASIS		{ yy_push_state(basis); return BA
*** 2489,2494 ****
--- 2496,2503 ----
  			  yylineno = input_file_status.pending().lineno;
  			  input_file_status.leave();
                            dbgmsg("banged yylineno to %d", yylineno);
+ 			  gcc_location_set(yylloc = yylineno);
+ 			  location_dump("lexer", __LINE__, "POP_FILE", yylloc);
  			}
  
    {LINE_DIRECTIVE} 	{
diff -Nrcpad gcc-17-20260705/gcc/cobol/symbols.cc gcc-17-20260712/gcc/cobol/symbols.cc
*** gcc-17-20260705/gcc/cobol/symbols.cc	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/cobol/symbols.cc	Sun Jul 12 22:32:07 2026
***************
*** 39,44 ****
--- 39,45 ----
  
  #include <search.h>
  #include <iconv.h>
+ #include "tm.h"
  #include "../../libgcobol/ec.h"
  #include "../../libgcobol/common-defs.h"
  #include "util.h"
***************
*** 47,52 ****
--- 48,54 ----
  #include "inspect.h"
  #include "../../libgcobol/io.h"
  #include "genapi.h"
+ #include "../../libgcobol/cobol-endian.h"
  #include "../../libgcobol/charmaps.h"
  
  #pragma GCC diagnostic ignored "-Wunused-result"
*************** special_pair_cmp( const cbl_special_name
*** 386,391 ****
--- 388,394 ----
   * Key                 Element       New    Effect
   * type  parent  line  type  parent  type
   * None     -          None     -           unqualified ref matches decl
+  * None     S          Para     -             qualified ref matches forward decl
   * None     -          Sect     -           unqualified ref matches section
   * None     -          Para     x           unqualified ref matches any para
   * Sect     -          None     -    Sect   section definition updates decl
*************** static bool label_cmp( const cbl_label_t
*** 407,420 ****
    switch( key.type ) {
  
    case LblNone:
-     assert(0 == key.explicit_parent());
      assert(0 == key.line);
      switch( elem.type ) {
-     case LblNone:
      case LblSection:
        assert(!elem.explicit_parent());
        return true;
        break;
      case LblParagraph:
        return true;
        break;
--- 410,422 ----
    switch( key.type ) {
  
    case LblNone:
      assert(0 == key.line);
      switch( elem.type ) {
      case LblSection:
        assert(!elem.explicit_parent());
        return true;
        break;
+     case LblNone:
      case LblParagraph:
        return true;
        break;
*************** static bool label_cmp( const cbl_label_t
*** 427,432 ****
--- 429,435 ----
      assert(0 == key.explicit_parent());
      switch( elem.type ) {
      case LblNone:
+       return true;
      case LblSection:
        assert(!elem.explicit_parent());
        return true;
*************** static bool label_cmp( const cbl_label_t
*** 439,455 ****
    case LblParagraph:
      switch( elem.type ) {
      case LblNone:
!       if(elem.explicit_parent()) {
!         cbl_errx( "%s:%d: LblNone '%s' has parent #%zu",
!              __func__, __LINE__, elem.name, elem.parent );
        }
-       assert(!elem.explicit_parent());
-       return true;
        break;
      case LblParagraph:
!       if( key.parent == elem.parent ) { // explicit or implicit
          return key.line == 0 || elem.line == 0 || key.line == elem.line;
-         // negative key.line never matches (causing insertion)
        }
        break;
      default:
--- 442,459 ----
    case LblParagraph:
      switch( elem.type ) {
      case LblNone:
!       // dbgmsg("%s:%d: para %s: key parent %zu, LblNone elem parent %zu", __func__, __LINE__, 
!       //        key.name, key.parent, elem.parent);
!       // Undefined label element with matching parent or no parent.
!       if( key.parent == elem.parent || elem.parent == 0 ) { 
!         return key.line == 0 || elem.line == 0 || key.line == elem.line;
        }
        break;
      case LblParagraph:
!       // dbgmsg("%s:%d: para %s: key parent %zu, elem parent %zu", __func__, __LINE__, 
!       //        key.name, key.parent, elem.parent);
!       if( key.parent == 0 || key.parent == elem.parent ) { // explicit or implicit
          return key.line == 0 || elem.line == 0 || key.line == elem.line;
        }
        break;
      default:
*************** symbol_elem_cmp( const void *K, const vo
*** 562,585 ****
    return strcasecmp(cbl_field_of(k)->name, cbl_field_of(e)->name);
  }
  
! cbl_label_ref_t::
! cbl_label_ref_t( size_t program, const cbl_label_t& context, int line,
!                  const char name[], size_t isect )
!   : qualified(isect != 0)
!   , context(context)
!   , line(line)
!   , handle(NULL)
! {
!   cbl_label_type_t type = isect? LblParagraph : LblNone;
!   struct cbl_label_t label = { type, isect, line };
!   assert(strlen(name) < sizeof(label.name));
!   strcpy(label.name, name);
! 
!   target = symbol_label_add(program, &label);
!   assert(target);
! }
! 
! struct cbl_label_t *
  symbol_label( size_t program, cbl_label_type_t type, size_t section,
                const char name[],
                const char os_name[] )
--- 566,572 ----
    return strcasecmp(cbl_field_of(k)->name, cbl_field_of(e)->name);
  }
  
! cbl_label_t *
  symbol_label( size_t program, cbl_label_type_t type, size_t section,
                const char name[],
                const char os_name[] )
*************** symbol_label( size_t program, cbl_label_
*** 608,614 ****
                        break;
                      case LblNone: case LblSection: case LblParagraph:
                        return label_cmp(key, elem, true);
!                         break;
                      default:
                        if( key.parent != elem.parent ) { // allow zero parent of LblNone
                          if( !(elem.type == LblNone && elem.explicit_parent() == 0) ) return false;
--- 595,601 ----
                        break;
                      case LblNone: case LblSection: case LblParagraph:
                        return label_cmp(key, elem, true);
!                       break;
                      default:
                        if( key.parent != elem.parent ) { // allow zero parent of LblNone
                          if( !(elem.type == LblNone && elem.explicit_parent() == 0) ) return false;
*************** symbols_dump( size_t first, bool header
*** 1141,1148 ****
        }
        break;
      case SymLabel:
        s = xasprintf("%4" GCC_PRISZ "u %-18s %s", (fmt_size_t)e->program,
!                     "Labe1l", e->elem.label.str());
        if( LblProgram == cbl_label_of(e)->type ) {
          const auto& L = *cbl_label_of(e);
          if( L.os_name ) {
--- 1128,1136 ----
        }
        break;
      case SymLabel:
+       if( cbl_label_of(e)->type == LblLoop ) continue;
        s = xasprintf("%4" GCC_PRISZ "u %-18s %s", (fmt_size_t)e->program,
!                     "Label", e->elem.label.str());
        if( LblProgram == cbl_label_of(e)->type ) {
          const auto& L = *cbl_label_of(e);
          if( L.os_name ) {
*************** symbols_alphabet_set( size_t program, co
*** 1730,1736 ****
    struct alpha {
      void operator()( symbol_elem_t& elem ) const {
        if( elem.type == SymAlphabet ) {
!         parser_alphabet( *cbl_alphabet_of(&elem) );
        }
      }
    };
--- 1718,1724 ----
    struct alpha {
      void operator()( symbol_elem_t& elem ) const {
        if( elem.type == SymAlphabet ) {
!         parser_alphabet( cbl_alphabet_of(&elem) );
        }
      }
    };
*************** symbols_alphabet_set( size_t program, co
*** 1744,1750 ****
      if( !e ) {
        return false;
      }
!     parser_alphabet_use(*cbl_alphabet_of(e));
    }
    return true;
  // End older version
--- 1732,1738 ----
      if( !e ) {
        return false;
      }
!     parser_alphabet_use(cbl_alphabet_of(e));
    }
    return true;
  // End older version
*************** symbols_update( size_t first, bool parse
*** 2071,2077 ****
          ninvalid++;
          continue;
        }
!     if( parsed_ok ) parser_file_add(&file);
      } else {
        if( p->type == SymField ) {
          auto f = cbl_field_of(p);
--- 2059,2068 ----
          ninvalid++;
          continue;
        }
!       if( parsed_ok ) {
!         parser_file_add(&file);
!         update_symbol_map2(file); // Add FD name as a name for the default record. 
!       }
      } else {
        if( p->type == SymField ) {
          auto f = cbl_field_of(p);
*************** symbol_add( struct symbol_elem_t *elem )
*** 2584,2604 ****
      cbl_field_of(elem)->our_index = symbols.nelem;
    }
  
!   struct symbol_elem_t *p =
!     static_cast<struct symbol_elem_t *>(lsearch( elem, symbols.elems,
                                                   &symbols.nelem, sizeof(*elem),
                                                   symbol_elem_cmp ) );
-   assert(symbols.nelem > 1);
- 
-   if( is_program(*p) ) {
-     assert(p->program == 0 || p->elem.label.os_name != NULL);
-     p->program = p - symbols.elems;
-   }
- 
-   if( p->program == 0 ) {
-     p->program = p[-1].program;
-   }
- 
    return p;
  }
  
--- 2575,2583 ----
      cbl_field_of(elem)->our_index = symbols.nelem;
    }
  
!   auto p = static_cast<symbol_elem_t *>(lsearch( elem, symbols.elems,
                                                   &symbols.nelem, sizeof(*elem),
                                                   symbol_elem_cmp ) );
    return p;
  }
  
*************** symbol_registers_add() {
*** 2676,2681 ****
--- 2655,2682 ----
    }
  }
  
+ const cbl_label_t *
+ cbl_perform_tgt_t::recurses( const cbl_label_t *para __attribute__ ((unused)),
+                              const cbl_label_t *sect __attribute__ ((unused)) ) const 
+ {
+   // Mon Jul  6 11:14:12 2026
+   // Decided not to enforce until we enforce EC-FLOW-IMP-RECURSION or
+   // possibly EC-PROGRAM-RECURSIVE-CALL.
+ #if 0
+   if( from() ) {
+     auto tgt = from();
+     if( para && 0 == strcasecmp(tgt->name, para->name) ) return tgt;
+     if( sect && 0 == strcasecmp(tgt->name, sect->name) ) return tgt;
+   }
+   if( to() ) {
+     auto tgt = to();
+     if( para && 0 == strcasecmp(tgt->name, para->name) ) return tgt;
+     if( sect && 0 == strcasecmp(tgt->name, sect->name) ) return tgt;
+   }
+ #endif
+   return nullptr;
+ }
+ 
  cbl_label_t *
  cbl_perform_tgt_t::finally( size_t program ) {
    assert(0 < ito);
*************** symbol_typedef( size_t program, const ch
*** 2897,2903 ****
    auto beg = std::reverse_iterator<symbol_elem_t *>(symbols_end());
    auto end = std::reverse_iterator<symbol_elem_t *>(symbols_begin(program));
  
!   auto p = std::find_if( beg, end,
                           [name]( const symbol_elem_t& sym ) {
                             if( sym.type == SymField ) {
                               auto f = cbl_field_of(&sym);
--- 2898,2904 ----
    auto beg = std::reverse_iterator<symbol_elem_t *>(symbols_end());
    auto end = std::reverse_iterator<symbol_elem_t *>(symbols_begin(program));
  
!   auto p = std::find_if( ++beg, end,
                           [name]( const symbol_elem_t& sym ) {
                             if( sym.type == SymField ) {
                               auto f = cbl_field_of(&sym);
*************** cbl_alphabet_t::reencode( const cbl_loc_
*** 3460,3466 ****
    const char *fromcode = __gg__encoding_iconv_name(CP1252_e);
    const char *tocode =
                __gg__encoding_iconv_name(current_encoding(display_encoding_e));
!   iconv_t cd = iconv_open(tocode, fromcode);
    if( cd == iconv_t(-1) ) {
      error_msg(loc, "cannot convert from %qs to %qs: %s",
                fromcode, tocode, xstrerror(errno));
--- 3461,3467 ----
    const char *fromcode = __gg__encoding_iconv_name(CP1252_e);
    const char *tocode =
                __gg__encoding_iconv_name(current_encoding(display_encoding_e));
!   iconv_t cd = helpful_iconv_open(tocode, fromcode);
    if( cd == iconv_t(-1) ) {
      error_msg(loc, "cannot convert from %qs to %qs: %s",
                fromcode, tocode, xstrerror(errno));
*************** cbl_alphabet_t::reencode( const cbl_loc_
*** 3512,3528 ****
        continue;
      }
  
      if( ch == low_index ) {
!       low_index = pos[0];
      }
      if( ch == last_index ) {
!       last_index = pos[0];
      }
      if( ch == high_index ) {
!      high_index = pos[0];
      }
  
!     tgt.at(pos[0]) = *p;
    }
  
    std::copy(tgt.begin(), tgt.end(), collation_sequence);
--- 3513,3550 ----
        continue;
      }
  
+     /* We have a problem.  We originally did collation sequences for
+        single-byte-coded (SBC) character sets, like ASCII and EBCDIC.  But we
+        have the capability of multi-byte sets like UTF-16LE/BE and
+        UTF-32/LE/BE.  What collation means in those environments is unknown to
+        me at this time.  So, for now I am simply assuming that whatever we are
+        doing here fits into a single byte.
+        
+        So, for SBC or little-endian character sets, we just pick up the value
+        at pos[0].  For big-endian character sets, we find the low-order byte.
+        */
+ 
+     unsigned char ch_pos;
+     if( charmap_disp->is_big_endian() )
+       {
+       ch_pos = pos[stride-1];
+       }
+     else
+       {
+       ch_pos = pos[0];
+       }
+ 
      if( ch == low_index ) {
!       low_index = ch_pos;
      }
      if( ch == last_index ) {
!       last_index = ch_pos;
      }
      if( ch == high_index ) {
!      high_index = ch_pos;
      }
  
!     tgt.at(ch_pos) = *p;
    }
  
    std::copy(tgt.begin(), tgt.end(), collation_sequence);
*************** iconv_cd( cbl_encoding_t tgt ) {
*** 4180,4186 ****
      const char *tocode   = __gg__encoding_iconv_name(tgt);    
      gcc_assert(fromcode && tocode);
      
!     if( (cd = iconv_open(tocode, fromcode)) == iconv_t(-1) ) {
        return cd;
      }
      cds[key] = cd;
--- 4202,4208 ----
      const char *tocode   = __gg__encoding_iconv_name(tgt);    
      gcc_assert(fromcode && tocode);
      
!     if( (cd = helpful_iconv_open(tocode, fromcode)) == iconv_t(-1) ) {
        return cd;
      }
      cds[key] = cd;
*************** cbl_label_t::str() const {
*** 4386,4392 ****
    char *buf;
    switch(type) {
    case LblParagraph:
!     buf = xasprintf("%-12s %s OF '%s', line %d", type_str() + 3, name,
                      parent? cbl_label_of(symbol_at(parent))->name : "", line);
      break;
    case LblProgram:
--- 4408,4414 ----
    char *buf;
    switch(type) {
    case LblParagraph:
!     buf = xasprintf("%-12s %s OF #%ld %s, line %d", type_str() + 3, name, parent, 
                      parent? cbl_label_of(symbol_at(parent))->name : "", line);
      break;
    case LblProgram:
*************** common_callables_update( const size_t ip
*** 4492,4531 ****
  cbl_label_t *
  symbol_label_add( size_t program, cbl_label_t *input )
  {
-   cbl_label_t *label = symbol_label(program, input->type,
-                                     input->parent, input->name);
- 
-   if( label && label->type == LblNone ) {
-     label->type = input->type;
-     label->parent = input->parent;
-     label->line = input->line;
- 
-     return label;
-   }
- 
-   // Set the program's mangled name, dehyphenated and uniqified by parent index.
    if( input->type == LblProgram ) {
      char *psz = cobol_name_mangler(input->name);
      input->mangled_name = xasprintf("%s." HOST_SIZE_T_PRINT_UNSIGNED,
                                      psz, (fmt_size_t)input->parent);
      free(psz);
    }
  
!   struct symbol_elem_t
!     elem { program, *input }, *e = &elem;
  
!   assert(0 <= e->elem.label.line);
!   e->elem.label.line = -e->elem.label.line; // force insertion
  
!   if( (e = symbol_add(&elem)) == NULL ) {
!     cbl_errx("%s:%d: could not add '%s'", __func__, __LINE__, label->name);
    }
-   assert(e);
  
!   common_callables_update( symbol_index(e) );
  
!   // restore munged line number unless symbol_add returned an existing label
!   if( e->elem.label.line < 0 ) e->elem.label.line = -e->elem.label.line;
  
    symbols.labelmap_add(e);
    return cbl_label_of(e);
--- 4514,4542 ----
  cbl_label_t *
  symbol_label_add( size_t program, cbl_label_t *input )
  {
    if( input->type == LblProgram ) {
+     // Set the program's mangled name, dehyphenated and uniqified by parent index.
      char *psz = cobol_name_mangler(input->name);
      input->mangled_name = xasprintf("%s." HOST_SIZE_T_PRINT_UNSIGNED,
                                      psz, (fmt_size_t)input->parent);
      free(psz);
    }
  
!   symbol_elem_t elem { program, *input }, *e;
  
!   e = symbol_append(elem);
!   assert(e);
  
!   if( is_program(*e) ) {
!     assert(e->program == 0 || e->elem.label.os_name != NULL);
!     e->program = e - symbols.elems;
    }
  
!   if( e->program == 0 ) {
!     e->program = e[-1].program;
!   }
  
!   common_callables_update( symbol_index(e) );
  
    symbols.labelmap_add(e);
    return cbl_label_of(e);
diff -Nrcpad gcc-17-20260705/gcc/cobol/symbols.h gcc-17-20260712/gcc/cobol/symbols.h
*** gcc-17-20260705/gcc/cobol/symbols.h	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/cobol/symbols.h	Sun Jul 12 22:32:07 2026
*************** struct cbl_label_t {
*** 1559,1584 ****
  
  struct parser_tgt_t;
  
- class cbl_label_ref_t {
-   bool qualified;             // caller mentioned paragraph & section
-   cbl_label_t *target;
-   const cbl_label_t& context; // section called from
-   int line;                   // point of reference
-   parser_tgt_t *handle;
- public:
-   cbl_label_ref_t( size_t program, const cbl_label_t& context, int line,
-                    const char name[], size_t isect = 0 );
- 
-   cbl_label_t * target_of() { return target; }
- 
-   parser_tgt_t * handle_of(parser_tgt_t *parser_tgt) {
-     return this->handle = parser_tgt;
-   }
-   parser_tgt_t * handle_of() {
-     return this->handle;
-   }
- };
- 
  static inline bool
  label_lessthan( const cbl_label_t & a, const cbl_label_t & b ) {
    if ( a.type == LblNone || b.type == LblNone || a.type == b.type ) {
--- 1559,1564 ----
*************** void build_symbol_map();
*** 2389,2397 ****
--- 2369,2380 ----
  bool update_symbol_map( symbol_elem_t *e );
  
  void update_symbol_map2( const symbol_elem_t *elem );
+ void update_symbol_map2( const cbl_file_t& file );
  void finalize_symbol_map2();
  void dump_symbol_map2();
  
+ bool was_fd_name( const cbl_field_t * field ); // uses symbol_map2, sort of
+ 
  symbol_elem_t * symbol_register( const char name[] );
  
  std::pair<symbol_elem_t *, bool>
*************** struct cbl_perform_tgt_t {
*** 2685,2691 ****
      return ito? cbl_label_of(symbol_at(ito)) : NULL;
    }
  
! 
    void dump() const {
      assert(ifrom);
      if( !ito ) {
--- 2668,2675 ----
      return ito? cbl_label_of(symbol_at(ito)) : NULL;
    }
  
!   const cbl_label_t * recurses( const cbl_label_t *para,
!                                 const cbl_label_t *sect ) const;
    void dump() const {
      assert(ifrom);
      if( !ito ) {
*************** cbl_namelist_t teed_up_names();
*** 2866,2900 ****
  
  size_t end_of_group( size_t igroup );
  
! struct symbol_elem_t * symbol_typedef( size_t program, std::list<const char *> names );
! struct symbol_elem_t * symbol_typedef( size_t program, const char name[] );
! struct symbol_elem_t * symbol_field( size_t program,
!                                      size_t parent, const char name[] );
! struct cbl_label_t *   symbol_label( size_t program, cbl_label_type_t type,
!                                      size_t section, const char name[],
!                                      const char os_name[] = NULL );
! struct symbol_elem_t * symbol_function( size_t parent,
!                                         const char name[], bool prototype = false );
! struct cbl_label_t *   symbol_function_any( size_t parent, const char name[] );
! struct cbl_label_t *   symbol_program( size_t parent,
!                                        const char name[], bool prototype = false );
  
! struct symbol_elem_t * symbol_literalA( size_t program, const char name[] );
  
! struct cbl_special_name_t * symbol_special( special_name_t id );
! struct symbol_elem_t * symbol_special( size_t program, const char name[] );
! struct symbol_elem_t * symbol_locale( size_t program, const char name[] );
! struct symbol_elem_t * symbol_alphabet( size_t program, const char name[] );
  
! struct symbol_elem_t * symbol_file( size_t program, const char name[] );
! struct cbl_field_t   * symbol_file_record( const cbl_file_t *file );
  cbl_file_t::varying_t symbol_file_record_sizes( struct cbl_file_t *file );
! struct cbl_section_t * symbol_section( size_t program,
!                                        struct cbl_section_t *section );
  
  size_t symbol_label_id( const cbl_label_t *label );
  
! struct cbl_field_t * parent_of( const cbl_field_t *f );
   const cbl_field_t * occurs_in( const cbl_field_t *f );
  
  cbl_field_t *rename_not_ok( const cbl_field_t *first, const cbl_field_t *last);
--- 2850,2883 ----
  
  size_t end_of_group( size_t igroup );
  
! symbol_elem_t * symbol_typedef( size_t program, std::list<const char *> names );
! symbol_elem_t * symbol_typedef( size_t program, const char name[] );
! symbol_elem_t * symbol_field( size_t program, size_t parent, const char name[] );
! cbl_label_t *   symbol_label( size_t program, cbl_label_type_t type,
!                               size_t section, const char name[],
!                               const char os_name[] = NULL );
! symbol_elem_t * symbol_function( size_t parent,
!                                  const char name[], bool prototype = false );
! cbl_label_t *   symbol_function_any( size_t parent, const char name[] );
! cbl_label_t *   symbol_program( size_t parent,
!                                 const char name[], bool prototype = false );
  
! symbol_elem_t * symbol_literalA( size_t program, const char name[] );
  
! cbl_special_name_t * symbol_special( special_name_t id );
! symbol_elem_t * symbol_special( size_t program, const char name[] );
! symbol_elem_t * symbol_locale( size_t program, const char name[] );
! symbol_elem_t * symbol_alphabet( size_t program, const char name[] );
  
! symbol_elem_t * symbol_file( size_t program, const char name[] );
! cbl_field_t   * symbol_file_record( const cbl_file_t *file );
  cbl_file_t::varying_t symbol_file_record_sizes( struct cbl_file_t *file );
! cbl_section_t * symbol_section( size_t program,
!                                 struct cbl_section_t *section );
  
  size_t symbol_label_id( const cbl_label_t *label );
  
! cbl_field_t * parent_of( const cbl_field_t *f );
   const cbl_field_t * occurs_in( const cbl_field_t *f );
  
  cbl_field_t *rename_not_ok( const cbl_field_t *first, const cbl_field_t *last);
diff -Nrcpad gcc-17-20260705/gcc/cobol/symfind.cc gcc-17-20260712/gcc/cobol/symfind.cc
*** gcc-17-20260705/gcc/cobol/symfind.cc	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/cobol/symfind.cc	Sun Jul 12 22:32:07 2026
***************
*** 45,50 ****
--- 45,78 ----
  
  extern int yydebug;
  
+ /*
+  * This silly function accepts __PRETTY_FUNCTION__ and trims the return type
+  * and parameter list from the name.  It's used only for debug messages.  It
+  * will not DTRT for conversion operators e.g. operator bool() or others with
+  * spaces in their names.
+  */
+ struct funcname {
+   std::string output;
+   funcname( const char name[] ) {
+     auto ename = name + strlen(name);
+     auto p = std::find(name, ename, ' ');
+     p = p == ename? name : p + 1;
+     auto pend = std::find(p, ename, '(');
+     std::reverse_iterator<const char *> rbeg(pend), rend(p);
+     // Find the last character that could not by part of the function name.
+     const std::string stop(" *&");
+     auto rp = std::find_if( rbeg, rend, 
+                             [stop]( char ch ) {
+                               return stop.find(ch) != std::string::npos;
+                             } );
+     if( rp != rend ) p = rp.base();
+ 
+     assert(p < pend && pend < ename);
+     output.assign(p, pend);
+   }
+ };
+ #define __funcsig__ funcname(__PRETTY_FUNCTION__).output.c_str()
+ 
  static bool
  is_data_field( symbol_elem_t& e ) {
    if( e.type != SymField ) return false;
*************** is_data_field( symbol_elem_t& e ) {
*** 56,65 ****
  }
  
  class sym_name_t {
- public: // TEMPORARY
-   const char *name;
-   size_t program, parent;
  public:
    explicit sym_name_t( const char name[] )
      : name(name), program(0), parent(0) { assert(name[0] == '\0'); }
    sym_name_t( size_t program, const char name[], size_t parent )
--- 84,93 ----
  }
  
  class sym_name_t {
  public:
+   const char *name;
+   const size_t program, parent;
+ 
    explicit sym_name_t( const char name[] )
      : name(name), program(0), parent(0) { assert(name[0] == '\0'); }
    sym_name_t( size_t program, const char name[], size_t parent )
*************** public:
*** 86,98 ****
  
  typedef std::map< sym_name_t, std::vector<size_t> > symbol_map_t;
  
- 
  static symbol_map_t symbol_map;
  
  typedef std::map <field_key_t, std::list<size_t> > field_keymap_t;
  static field_keymap_t symbol_map2;
  
  /*
   * As each field is added to the symbol table, add its name and index to the
   * name map.  Initially the type is FldInvalid.  Those are removed by
   * symbols_update().  Typedefs are excluded; they do not represent data items.
--- 114,174 ----
  
  typedef std::map< sym_name_t, std::vector<size_t> > symbol_map_t;
  
  static symbol_map_t symbol_map;
  
  typedef std::map <field_key_t, std::list<size_t> > field_keymap_t;
  static field_keymap_t symbol_map2;
  
  /*
+  * symbol_file_names_t is a small "lookaside" map of FD name to the file's
+  * default buffer. It's a little bit too generous.  It works correctly for
+  * CALL, but because it's used by the parser's name: nonterminal, everything
+  * that wants a cbl_field_t gets it.  So MOVE would also work.
+  *
+  * To make it convenient for the parser to verify it's not relying on an FD
+  * name, the was_fd_name() function calls symbol_file_names_t::exists.
+  */
+ static class symbol_file_names_t : protected symbol_map_t {
+   std::set<size_t> named_defaults;
+  public:
+   void add( const cbl_file_t& file ) {
+     auto program = symbol_elem_of(&file)->program;
+     std::vector<size_t> ids( 1, file.default_record );
+     sym_name_t key(program, file.name, 0);
+     (*this)[key] = ids;
+     // Keep track of symbols we added, so the parser can ask. 
+     auto f = cbl_field_of(symbol_at(ids.front()));
+     assert('_' == f->name[0]); // not a COBOL name
+     named_defaults.insert(ids.front());
+   }
+   symbol_map_t find( size_t program, const char name[] ) const {
+     symbol_map_t output;
+     std::copy_if( cbegin(), cend(),
+                   std::inserter(output, output.begin()), 
+                   [program, name]( const auto& elem ) {
+                     return match(program, name, elem);
+                   } );
+     
+     dbgmsg("%s:%d: found %lu #%lu for %s", __funcsig__, __LINE__,
+            (unsigned long)output.size(),
+            output.empty()? 0ul : (unsigned long)output.begin()->second.front(),
+            name);
+            
+     return output;
+   }
+   bool exists( const cbl_field_t * field ) const {
+     auto isym = symbol_index(symbol_elem_of(field));
+     return 1 == named_defaults.count(isym);
+   }
+  protected:
+   static bool match( size_t program, const char *name, const_reference elem ) {
+     const sym_name_t& key = elem.first;
+     return key.program == program
+       &&   0 == strcasecmp(key.name, name);
+   }
+ } symbol_file_names;
+ 
+ /*
   * As each field is added to the symbol table, add its name and index to the
   * name map.  Initially the type is FldInvalid.  Those are removed by
   * symbols_update().  Typedefs are excluded; they do not represent data items.
*************** update_symbol_map2( const symbol_elem_t
*** 118,123 ****
--- 194,229 ----
    symbol_map2[fk].push_back(symbol_index(e));
  }
  
+ void
+ update_symbol_map2( const cbl_file_t& file ) {
+   assert(file.default_record);
+   auto e = symbol_elem_of(&file);
+ 
+   symbol_file_names.add(file);
+ 
+   sym_name_t key( e->program, file.name, 0 );
+   auto m = symbol_file_names.find(e->program, file.name);
+   dbgmsg("%s:%d: %s => %lu (last of %lu)", __func__, __LINE__,
+          key.name, m[key].back(), m[key].size() );
+ }
+ 
+ /*
+  * The field may have been accepted as an FD NAME, representing the file's
+  * buffer.  That is valid for a CALL parameter, for example, but not otherwise,
+  * as in MOVE.
+  *
+  * When parsing a name nonterminal, we smuggle in the file's default buffer if
+  * an FD name is referenced (and unique).  The function below exists to check
+  * against that possibility in cases where it's not allowed.
+  */
+ bool
+ was_fd_name( const cbl_field_t * field ) {
+   if( current_program_index() < field->our_index ) {
+     return symbol_file_names.exists(field);
+   }
+   return false;
+ }
+ 
  /*
   * Purge any field whose type is FldInvalid.  Remove any names that do
   * not map to any field.
*************** symbol_find( size_t program, std::list<c
*** 529,534 ****
--- 635,644 ----
      items = qualified;
    }
  
+   if( items.empty() && names.size() == 1 ) {
+     items = symbol_file_names.find(program, names.front());
+   }
+ 
    auto unique = items.size() == 1;
  
    if( ! unique ) {
diff -Nrcpad gcc-17-20260705/gcc/cobol/util.cc gcc-17-20260712/gcc/cobol/util.cc
*** gcc-17-20260705/gcc/cobol/util.cc	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/cobol/util.cc	Sun Jul 12 22:32:07 2026
***************
*** 55,60 ****
--- 55,61 ----
  #include "cdfval.h"
  #include "lexio.h"
  
+ #include "tm.h"
  #include "../../libgcobol/ec.h"
  #include "../../libgcobol/common-defs.h"
  #include "symbols.h"
***************
*** 62,67 ****
--- 63,69 ----
  #include "../../libgcobol/io.h"
  #include "genapi.h"
  #include "genutil.h"
+ #include "../../libgcobol/cobol-endian.h"
  #include "../../libgcobol/charmaps.h"
  #include "../../libgcobol/valconv.h"
  
*************** cbl_field_t::encode_numeric( const char
*** 1814,1822 ****
              *pretval++ = ascii_plus;
              }
            }
! 
          // It's at this point we convert to the target encoding:
-         charmap_t *charmap = __gg__get_charmap(codeset.encoding);
          size_t retval_length = pretval - retval;
          if( retval_length != char_capacity() ) {
            cbl_errx( "%s: %s %lu %s %lu",
--- 1816,1862 ----
              *pretval++ = ascii_plus;
              }
            }
!         if(     (attr & signable_e)
!             && !(attr & separate_e) )
!           {
!           // The value is signable and internal;
!           char *sign_loc;
!           if( attr & leading_e )
!             {
!             // The sign is in the first character
!             sign_loc = retval;
!             }
!           else
!             {
!             // The sign is in the final character
!             sign_loc = retval + char_capacity() - 1;
!             }
!           if( negative )
!             {
!             // We have to convert the very first digit into the negative flag
!             const charmap_t *charmap = __gg__get_charmap(codeset.encoding);
!             if( charmap->is_like_ebcdic() )
!               {
!               if( *sign_loc == ascii_zero )
!                 {
!                 /* When EBCDIC '0' is 0xF0.  The negative flag version is 0xD0,
!                    which is right left brace.  */
!                 *sign_loc = ascii_rbrace;
!                 }
!               else
!                 {
!                 /* EBCDIC '1' through '9' is 0xF1 through 0xF9, and they need
!                    to be converted to 0xD0 through 0xD9.  */
!                 *sign_loc = (*sign_loc - ascii_zero) + ascii_J-1;
!                 }
!               }
!             else
!               {
!               *sign_loc = (*sign_loc - ascii_zero) + ascii_p;
!               }
!             }
!           }
          // It's at this point we convert to the target encoding:
          size_t retval_length = pretval - retval;
          if( retval_length != char_capacity() ) {
            cbl_errx( "%s: %s %lu %s %lu",
*************** cbl_field_t::encode_numeric( const char
*** 1842,1879 ****
          }
          gcc_assert(nbytes == data.capacity());
          memcpy(retval, converted, data.capacity());
-         if(     (attr & signable_e)
-             && !(attr & separate_e) )
-           {
-           // This value is signable, and not separate.  So, the sign
-           // information goes into the first or last byte:
-           char *sign_location = attr & leading_e
-                         ? retval
-                         : retval + (data.digits-1) * charmap->stride() ;
-           cbl_char_t schar = charmap->set_digit_negative(*sign_location,
-                                                           negative);
-           switch(charmap->stride())
-             {
-             case 1:
-               {
-               uint8_t v = schar;
-               memcpy(sign_location, &v, charmap->stride());
-               break;
-               }
-             case 2:
-               {
-               uint16_t v = schar;
-               memcpy(sign_location, &v, charmap->stride());
-               break;
-               }
-             case 4:
-               {
-               uint32_t v = schar;
-               memcpy(sign_location, &v, charmap->stride());
-               break;
-               }
-             }
-           }
          break;
          }
  
--- 1882,1887 ----
*************** namespace match_proc {
*** 2629,2656 ****
        found_t() : n(0), isym(0) {}
        found_t(size_t n, size_t isym) : n(n), isym(isym) {}
      };
!     void error(const cbl_name_t program_name,
                 const tgt_t&tgt,
                 const found_t& found) const 
      {
        const char *clause = tgt == tgts.first? "" : "THRU ";
            
!       switch( found.n ) {
!       case 1:
!         gcc_unreachable();
!         break;
!       case 0:
!         // error: not found
!         dbgmsg("%s:%d PERFORM %s%s not resolved",
!                program_name, line, clause, tgt.name.c_str());
!         break;
!       default:        
!         assert( 1 < found.n );
!         // error: ambiguous
!         dbgmsg("%s:%d PERFORM %s%s ambiguous",
!                program_name, line, clause, tgt.name.c_str());
!         break;
!       }
      }
    };
  
--- 2637,2651 ----
        found_t() : n(0), isym(0) {}
        found_t(size_t n, size_t isym) : n(n), isym(isym) {}
      };
!     void error(const cbl_loc_t& loc,
                 const tgt_t&tgt,
                 const found_t& found) const 
      {
        const char *clause = tgt == tgts.first? "" : "THRU ";
+       assert( 1 != found.n );
+       const char *status = found.n == 0? "procedure not found" : "ambiguous reference";
            
!       error_msg(loc, "%s: PERFORM %s%s", status, clause, tgt.name.c_str());
      }
    };
  
*************** namespace match_proc {
*** 2664,2670 ****
--- 2659,2673 ----
      bool operator<( const sect_t& that ) const {
        return name < that.name;
      }
+     const sect_t& ambiguous() {
+       isym = 0;
+       return *this;
+     }
+     bool is_unique() const {
+       return isym != 0;
+     }
    };
+ 
    struct para_t {
      size_t isym, parent;
      std::string name;
*************** namespace match_proc {
*** 2679,2711 ****
        }
        return name < that.name;
      }
      std::string parent_name() const {
        if( ! parent ) return std::string();
        const auto f = cbl_label_of(symbol_at(parent));
        return lcase(f->name);
      }
    };
-   struct proc_t {
-     size_t n, isym; // index of first of n matching pairs
-     std::string para, sect;
-     proc_t( size_t n, size_t isym,
-             const std::string& para,
-             const std::string& sect )
-       : n(n), isym(isym), para(para), sect(sect)
-     {}
-     bool operator<( const proc_t& that ) const {
-       if( para == that.para ) {
-         return sect < that.sect;
-       }
-       return para < that.para;
-     }
-   };
  
    class procedures_t {
      std::set<sect_t> sects;
      std::set<para_t> paras;
-     std::set<proc_t> procs;
      friend bool statements_verify();
    public:
      procedures_t( size_t program ) {
        // find sections and paragraphs
--- 2682,2713 ----
        }
        return name < that.name;
      }
+     const para_t& ambiguous() {
+       isym = 0;
+       return *this;
+     }
      std::string parent_name() const {
        if( ! parent ) return std::string();
        const auto f = cbl_label_of(symbol_at(parent));
        return lcase(f->name);
      }
    };
  
    class procedures_t {
      std::set<sect_t> sects;
      std::set<para_t> paras;
      friend bool statements_verify();
+     template <typename T>
+     // If the element name is not unique, set its isym to 0 so it can't be referenced.
+       static void update_set( T& names, size_t isym ) {
+         auto p = names.insert(isym);
+         if( ! p.second ) {
+           auto ambig = *p.first;
+           names.erase(p.first);
+           p = names.insert(ambig.ambiguous());
+           assert(p.second);
+         }
+       }
    public:
      procedures_t( size_t program ) {
        // find sections and paragraphs
*************** namespace match_proc {
*** 2714,2744 ****
            const auto& L = *cbl_label_of(e);
            auto isym = e - symbols_begin();
            switch(L.type) {
!           case LblSection: 
!             sects.insert(isym);
              break;
            case LblParagraph:
!             paras.insert(isym);
              break;
            default:
              continue;
            }
          }
        }
-       // join sections and paragraphs, unreduced
-       std::list<proc_t> all;
-       for( const auto& para : paras ) {
-         std::set<sect_t> parents;
-         std::copy_if( sects.begin(), sects.end(), std::inserter(parents, parents.begin()),
-                       [para]( const auto& sect ) {
-                         return para.parent_name() == sect.name;
-                       } );
-         std::transform( parents.begin(), parents.end(), std::back_inserter(all), 
-                         [para]( const auto& sect ) {
-                           proc_t proc(1, para.isym, para.name, sect.name);
-                           return proc;
-                         } );
-       }
        // insert paragraph procedures
        struct stat_t {
          size_t n, isym;
--- 2716,2732 ----
            const auto& L = *cbl_label_of(e);
            auto isym = e - symbols_begin();
            switch(L.type) {
!           case LblSection:
!             update_set(sects, isym);
              break;
            case LblParagraph:
!             update_set(paras, isym);
              break;
            default:
              continue;
            }
          }
        }
        // insert paragraph procedures
        struct stat_t {
          size_t n, isym;
*************** namespace match_proc {
*** 2749,2806 ****
            return *this;
          }
        };
-       std::map<proc_t, stat_t> nprocs;
-       for( const auto& proc : all ) {
-         auto& stat = nprocs[proc];
-         stat.update( proc.isym );
-       }
-       std::transform(nprocs.begin(), nprocs.end(), std::inserter(procs, procs.begin()),
-                      []( const auto& elem ) {
-                        proc_t proc ( elem.second.n, elem.second.isym,
-                                      elem.first.para, elem.first.sect );
-                        return proc;
-                      } );
        // insert section procedures
        std::map<sect_t, stat_t> nsects;
        for( const auto& sect : sects ) {
          auto& stat = nsects[sect];
          stat.update( sect.isym );
        }
-       std::transform(nsects.begin(), nsects.end(), std::inserter(procs, procs.begin()),
-                      []( const auto& elem ) {
-                        proc_t proc ( elem.second.n, elem.second.isym,
-                                      std::string(), elem.first.name );
-                        return proc;
-                      } );
      }
  
      stmt_t::found_t
      find( const stmt_t& stmt, const stmt_t::tgt_t& tgt ) {
        if( tgt.empty() ) return stmt_t::found_t();
        std::string curr ( lcase( cbl_label_of(symbol_at(stmt.curr))->name ) );
  
!       auto p = std::find_if(procs.cbegin(), procs.cend(),
!                             [curr, tgt](auto proc) {
!                               return match(proc, tgt, curr);
!                             });
!       size_t n = std::count_if(p, procs.end(),
!                                [curr, tgt](const auto& proc) {
!                                  return match(proc, tgt, curr);
!                                });
        stmt_t::found_t found = {n, 0};
        if( n ) {
!         assert(p != procs.end());
!         found.isym = p->isym;
        }
        return found;
      }
    protected:
!     static bool match( const proc_t& proc, const stmt_t::tgt_t& tgt, const std::string& curr ) {
!       return ( proc.para == tgt.name && tgt.qual.empty() )
!         ||   ( proc.sect == tgt.name && tgt.qual.empty() )
!         ||   ( proc.para == tgt.name && proc.sect == tgt.qual )
!         ||   ( proc.para == tgt.name && proc.sect == curr );
!     }    
  
      void dump(const stmt_t& stmt) {
        std::string target( stmt.tgts.first.name );
--- 2737,2830 ----
            return *this;
          }
        };
        // insert section procedures
        std::map<sect_t, stat_t> nsects;
        for( const auto& sect : sects ) {
          auto& stat = nsects[sect];
          stat.update( sect.isym );
        }
      }
  
      stmt_t::found_t
      find( const stmt_t& stmt, const stmt_t::tgt_t& tgt ) {
        if( tgt.empty() ) return stmt_t::found_t();
        std::string curr ( lcase( cbl_label_of(symbol_at(stmt.curr))->name ) );
+       std::set<para_t> matched;
  
!       // Match a paragraph name tgt.proc within curr, the current section.
!       std::copy_if(paras.cbegin(), paras.cend(),
!                    std::inserter(matched, matched.begin()),
!                    [curr, tgt](const auto& para) {
!                      return match_in_section(para, tgt, curr);
!                    });
!       // Match a section name if unqualified and unique.
!       if( matched.empty() && tgt.qual.empty() ) {
!         // target does not name a paragraph
!         if( std::none_of(paras.cbegin(), paras.cend(),
!                          [tgt](const auto& para) {
!                            return match_any_paragraph(para, tgt);
!                          }) ) {
!           // target may name a section
!           if( ! sects.empty() ) {
!             auto fake = *sects.begin();
!             fake.isym = 0;
!             fake.name = tgt.name;
!             auto p = sects.find(fake); // matches by name only, not isym
!             if( p != sects.end() && p->is_unique()) {
!               para_t para( p->isym );
!               matched.insert(para);
!             }
!           }
!         }
!       }
!       if( matched.empty() ){
!         // Match a paragraph or section anywhere in the program.
!         std::copy_if(paras.cbegin(), paras.cend(),
!                      std::inserter(matched, matched.begin()),
!                      [tgt](const auto& para) {
!                        return match(para, tgt);
!                    });
!       };
! 
!       size_t n = matched.size();
        stmt_t::found_t found = {n, 0};
        if( n ) {
!         const para_t& para(*matched.begin());
!         found.isym = para.isym;
!         if( yydebug && 1 < n ) {
!           for( const auto& para : matched ) {
!             fprintf(stderr, "procedures_t::find:%d: ambig: %s of #%lu, %s\n", __LINE__,
!                     para.name.c_str(), (unsigned long)para.parent, 
!                     para.parent_name().c_str());
!           }
!         }
        }
        return found;
      }
    protected:
!     static bool match_in_section( const para_t& para,
!                                   const stmt_t::tgt_t& tgt,
!                                   const std::string& curr )
!     {
!       return para.name == tgt.name && para.parent_name() == curr
!         &&   (tgt.qual == curr || tgt.qual.empty());
!     }
!     static bool match_any_paragraph( const para_t& para,
!                                      const stmt_t::tgt_t& tgt )
!     {
!       assert( tgt.qual.empty() ); 
!       return para.name == tgt.name;
!     }
!     static bool match( const para_t& para,
!                        const stmt_t::tgt_t& tgt )
!     {
!       if( tgt.qual.empty() ) {
!         return para.parent_name() == tgt.name
!           ||   para.name == tgt.name;
!       } 
!       return para.name == tgt.name
!         &&   para.parent_name() == tgt.qual;
!     }
  
      void dump(const stmt_t& stmt) {
        std::string target( stmt.tgts.first.name );
*************** namespace match_proc {
*** 2825,2837 ****
          fprintf(stderr, "\t" "#%lu %s of #%lu\n",
                  (unsigned long)para.isym, para.name.c_str(), (unsigned long)para.parent);
        }
-       fprintf(stderr, "%lu Procedures:\n", (unsigned long)procs.size());
-       for( auto proc : procs ) {
-         std::string section("");
-         if( ! proc.sect.empty() ) section += "of " + proc.sect;
-         fprintf(stderr, "\t" "n=%lu %s %s\n",
-                 (unsigned long)proc.isym, proc.para.c_str(), section.c_str());
-       }
        return;
      }
    }; // procedures
--- 2849,2854 ----
*************** namespace match_proc {
*** 2850,2860 ****
  
      // Verify each PERFORM statement target is a unique reference
      for( const auto& stmt : stmts ) {
        stmt_t::found_t found = procedures.find(stmt, stmt.tgts.first.lcase());
        stmt_t::found_t thru  = procedures.find(stmt, stmt.tgts.second.lcase());
  
        if( found.n == 1 && (thru.n == 1 || stmt.tgts.second.empty()) ) {
-         // update proc call list
          if( stmt.tgts.first.qual.empty() ) {
            dbgmsg("%s:%d PERFORM %s is ok", program_name, stmt.line,
                   stmt.tgts.first.name.c_str());
--- 2867,2877 ----
  
      // Verify each PERFORM statement target is a unique reference
      for( const auto& stmt : stmts ) {
+       if( symbol_at(stmt.curr)->program != iprog ) continue;
        stmt_t::found_t found = procedures.find(stmt, stmt.tgts.first.lcase());
        stmt_t::found_t thru  = procedures.find(stmt, stmt.tgts.second.lcase());
  
        if( found.n == 1 && (thru.n == 1 || stmt.tgts.second.empty()) ) {
          if( stmt.tgts.first.qual.empty() ) {
            dbgmsg("%s:%d PERFORM %s is ok", program_name, stmt.line,
                   stmt.tgts.first.name.c_str());
*************** namespace match_proc {
*** 2866,2880 ****
          continue;
        }
        nerr++;
!       
        if( found.n != 1 ) {
!         stmt.error(program_name, stmt.tgts.first, found);
          if( nerr == 1 && yydebug ) {
            procedures.dump(stmt);
          }
        }
        if( thru.n != 1 && ! stmt.tgts.second.empty() ) {
!         stmt.error(program_name, stmt.tgts.second, thru);
        }
      }
      return nerr == 0;
--- 2883,2897 ----
          continue;
        }
        nerr++;
!       cbl_loc_t loc(stmt.line);
        if( found.n != 1 ) {
!         stmt.error(loc, stmt.tgts.first, found);
          if( nerr == 1 && yydebug ) {
            procedures.dump(stmt);
          }
        }
        if( thru.n != 1 && ! stmt.tgts.second.empty() ) {
!         stmt.error(loc, stmt.tgts.second, thru);
        }
      }
      return nerr == 0;
*************** void cobol_trunc_binary( int cobol_trunc
*** 3401,3407 ****
   * to enforce uniqueness, and the scanner to maintain line numbers.
   */
  bool cobol_filename( const char *name, ino_t inode ) {
-   //const line_map *lines = NULL;
    if( inode == 0 ) {
      auto p = old_filenames.find(name);
      if( p == old_filenames.end() ) {
--- 3418,3423 ----
*************** bool cobol_filename( const char *name, i
*** 3416,3425 ****
        assert(inode != 0);
      }
    }
    linemap_add(line_table, LC_ENTER, sysp, name, 1);
    input_filename_vestige = name;
    bool pushed = input_filenames.push( input_file_t(name, inode, 1) );
!   dbgmsg("%s: %s %s", __func__, pushed? "pushed" : "set to", name);
    return pushed;
  }
  
--- 3432,3445 ----
        assert(inode != 0);
      }
    }
+   
    linemap_add(line_table, LC_ENTER, sysp, name, 1);
    input_filename_vestige = name;
    bool pushed = input_filenames.push( input_file_t(name, inode, 1) );
!   dbgmsg("%s: %s %s line %d-%d inode %ld", __func__,
!          pushed? "pushed" : "set to", name,
!          cobol_location().first_line,
!          cobol_location().last_line, inode);
    return pushed;
  }
  
*************** void current_location_minus_one_clear()
*** 3505,3512 ****
   * with start and caret at the first line/column of LOC, and finishing at the
   * last line/column of LOC.
   */
! static void
! gcc_location_set_impl( const cbl_loc_t& loc ) {
    // Set the position to the first line & column in the location.
   static location_t loc_m_1 = 0;
   const location_t
--- 3525,3532 ----
   * with start and caret at the first line/column of LOC, and finishing at the
   * last line/column of LOC.
   */
! void
! gcc_location_set( const cbl_loc_t& loc ) {
    // Set the position to the first line & column in the location.
   static location_t loc_m_1 = 0;
   const location_t
*************** gcc_location_set_impl( const cbl_loc_t&
*** 3532,3547 ****
    location_dump(__func__, __LINE__, "parser", loc);
  }
  
- void gcc_location_set( const cbl_loc_t& loc ) {
-   gcc_location_set_impl(loc);
- }
- 
- #if 0
- void gcc_location_set( const YDFLTYPE& loc ) {
-   gcc_location_set_impl(loc);
- }
- #endif
- 
  #ifdef NDEBUG
  # define verify_format(M)
  #else
--- 3552,3557 ----
*************** static const diagnostics::option_id opti
*** 3575,3580 ****
--- 3585,3591 ----
  
  void gcc_location_dump() {
      linemap_dump_location( line_table, token_location, stderr );
+     fprintf(stderr, "\n");
  }
  
  
diff -Nrcpad gcc-17-20260705/gcc/common/config/riscv/riscv-common.cc gcc-17-20260712/gcc/common/config/riscv/riscv-common.cc
*** gcc-17-20260705/gcc/common/config/riscv/riscv-common.cc	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/common/config/riscv/riscv-common.cc	Sun Jul 12 22:32:07 2026
*************** riscv_multi_lib_info_t::parse (
*** 1927,1938 ****
  	  multi_lib_info->arch_str = itr->c_str () + strlen ("march=");
  	else if (prefixed_with (*itr, "mabi="))
  	  multi_lib_info->abi_str = itr->c_str () + strlen ("mabi=");
- 
- 	/* Skip this multi-lib if this configuration is exactly same as
- 	   default multi-lib settings.  */
-       if (multi_lib_info->arch_str == default_arch_str
- 	  && multi_lib_info->abi_str == default_abi_str)
- 	return false;
      }
  
    multi_lib_info->subset_list =
--- 1927,1932 ----
*************** static const struct default_options risc
*** 2351,2356 ****
--- 2345,2354 ----
      /* Enable -fsched-pressure starting at -O1.  */
      { OPT_LEVELS_1_PLUS, OPT_fsched_pressure, NULL, 1 },
      { OPT_LEVELS_2_PLUS, OPT_free, NULL, 1 },
+     /* Turn on -funroll-loops with -munroll-only-small-loops to enable small
+        loop unrolling at -O2 and above.  */
+     { OPT_LEVELS_2_PLUS_SPEED_ONLY, OPT_funroll_loops, NULL, 1 },
+     { OPT_LEVELS_2_PLUS_SPEED_ONLY, OPT_munroll_only_small_loops, NULL, 1 },
  #if TARGET_DEFAULT_ASYNC_UNWIND_TABLES == 1
      { OPT_LEVELS_ALL, OPT_fasynchronous_unwind_tables, NULL, 1 },
      { OPT_LEVELS_ALL, OPT_funwind_tables, NULL, 1},
diff -Nrcpad gcc-17-20260705/gcc/common.opt gcc-17-20260712/gcc/common.opt
*** gcc-17-20260705/gcc/common.opt	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/common.opt	Sun Jul 12 22:32:07 2026
*************** fomit-frame-pointer
*** 2503,2508 ****
--- 2503,2516 ----
  Common Var(flag_omit_frame_pointer) Optimization
  When possible do not generate stack frames.
  
+ fopenmp-ompt
+ Common Var(flag_openmp_ompt) EnabledBy(fopenmp-ompt-detailed)
+ Emit additional calls into libgomp, enabling OMPT callbacks before and after some OpenMP worksharing constructs.
+ 
+ fopenmp-ompt-detailed
+ Common Var(flag_openmp_ompt_detailed)
+ Like -fopenmp-ompt, and emit additional calls into libgomp, enabling OMPT dispatch callbacks.
+ 
  fopenmp-target-simd-clone
  Common Alias(fopenmp-target-simd-clone=,any,none)
  
*************** Common Var(flag_tree_vrp) Init(0) Optimi
*** 3388,3395 ****
  Perform Value Range Propagation on trees.
  
  fsplit-paths
! Common Var(flag_split_paths) Init(0) Optimization
! Split paths leading to loop backedges.
  
  funconstrained-commons
  Common Var(flag_unconstrained_commons) Optimization
--- 3396,3403 ----
  Perform Value Range Propagation on trees.
  
  fsplit-paths
! Common Ignore
! Does nothing.  Preserved for backward compatibility.
  
  funconstrained-commons
  Common Var(flag_unconstrained_commons) Optimization
diff -Nrcpad gcc-17-20260705/gcc/common.opt.urls gcc-17-20260712/gcc/common.opt.urls
*** gcc-17-20260705/gcc/common.opt.urls	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/common.opt.urls	Sun Jul 12 22:32:07 2026
*************** UrlSuffix(gcc/OpenMP-and-OpenACC-Options
*** 1336,1341 ****
--- 1336,1347 ----
  fomit-frame-pointer
  UrlSuffix(gcc/Optimize-Options.html#index-fno-omit-frame-pointer)
  
+ fopenmp-ompt
+ UrlSuffix(gcc/OpenMP-and-OpenACC-Options.html#index-fno-openmp-ompt)
+ 
+ fopenmp-ompt-detailed
+ UrlSuffix(gcc/OpenMP-and-OpenACC-Options.html#index-fno-openmp-ompt-detailed)
+ 
  fopenmp-target-simd-clone
  UrlSuffix(gcc/OpenMP-and-OpenACC-Options.html#index-fno-openmp-target-simd-clone)
  
diff -Nrcpad gcc-17-20260705/gcc/config/aarch64/aarch64-acle-builtins.cc gcc-17-20260712/gcc/config/aarch64/aarch64-acle-builtins.cc
*** gcc-17-20260705/gcc/config/aarch64/aarch64-acle-builtins.cc	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/aarch64/aarch64-acle-builtins.cc	Sun Jul 12 22:32:07 2026
*************** struct registered_function_hasher : ggc_
*** 105,111 ****
  };
  
  /* Information about each single-predicate or single-vector type.  */
! static CONSTEXPR const vector_type_info vector_types[] = {
  #define DEF_SVE_TYPE(ACLE_NAME, NCHARS, ABI_NAME, SCALAR_TYPE) \
    { #ACLE_NAME, #ABI_NAME, "u" #NCHARS #ABI_NAME },
  #include "aarch64-sve-builtins.def"
--- 105,111 ----
  };
  
  /* Information about each single-predicate or single-vector type.  */
! static constexpr const vector_type_info vector_types[] = {
  #define DEF_SVE_TYPE(ACLE_NAME, NCHARS, ABI_NAME, SCALAR_TYPE) \
    { #ACLE_NAME, #ABI_NAME, "u" #NCHARS #ABI_NAME },
  #include "aarch64-sve-builtins.def"
*************** static const char *const pred_suffixes[N
*** 123,139 ****
  };
  
  /* Static information about each mode_suffix_index.  */
! CONSTEXPR const mode_suffix_info mode_suffixes[] = {
  #define VECTOR_TYPE_none NUM_VECTOR_TYPES
  #define DEF_SVE_MODE(NAME, BASE, DISPLACEMENT, UNITS) \
    { "_" #NAME, VECTOR_TYPE_##BASE, VECTOR_TYPE_##DISPLACEMENT, UNITS_##UNITS },
  #include "aarch64-sve-builtins.def"
  #undef VECTOR_TYPE_none
!   { "", NUM_VECTOR_TYPES, NUM_VECTOR_TYPES, UNITS_none }
! };
  
  /* Static information about each type_suffix_index.  */
! CONSTEXPR const type_suffix_info type_suffixes[NUM_TYPE_SUFFIXES + 1] = {
  #define DEF_SVE_NEON_TYPE_SUFFIX(NAME, ACLE_TYPE, CLASS, BITS, MODE, \
  				 NEON64, NEON128) \
    { "_" #NAME, \
--- 123,138 ----
  };
  
  /* Static information about each mode_suffix_index.  */
! constexpr const mode_suffix_info mode_suffixes[] = {
  #define VECTOR_TYPE_none NUM_VECTOR_TYPES
  #define DEF_SVE_MODE(NAME, BASE, DISPLACEMENT, UNITS) \
    { "_" #NAME, VECTOR_TYPE_##BASE, VECTOR_TYPE_##DISPLACEMENT, UNITS_##UNITS },
  #include "aarch64-sve-builtins.def"
  #undef VECTOR_TYPE_none
!   {"", NUM_VECTOR_TYPES, NUM_VECTOR_TYPES, UNITS_none}};
  
  /* Static information about each type_suffix_index.  */
! constexpr const type_suffix_info type_suffixes[NUM_TYPE_SUFFIXES + 1] = {
  #define DEF_SVE_NEON_TYPE_SUFFIX(NAME, ACLE_TYPE, CLASS, BITS, MODE, \
  				 NEON64, NEON128) \
    { "_" #NAME, \
*************** CONSTEXPR const type_suffix_info type_su
*** 175,181 ****
      false, false, 0, VOIDmode, ARM_NEON_H_TYPES_LAST, ARM_NEON_H_TYPES_LAST }
  };
  
! CONSTEXPR const group_suffix_info group_suffixes[] = {
  #define DEF_SVE_GROUP_SUFFIX(NAME, VG, VECTORS_PER_TUPLE) \
    { "_" #NAME, VG, VECTORS_PER_TUPLE },
  #include "aarch64-sve-builtins.def"
--- 174,180 ----
      false, false, 0, VOIDmode, ARM_NEON_H_TYPES_LAST, ARM_NEON_H_TYPES_LAST }
  };
  
! constexpr const group_suffix_info group_suffixes[] = {
  #define DEF_SVE_GROUP_SUFFIX(NAME, VG, VECTORS_PER_TUPLE) \
    { "_" #NAME, VG, VECTORS_PER_TUPLE },
  #include "aarch64-sve-builtins.def"
*************** constexpr const aarch64_acle::function_g
*** 198,204 ****
  };
  
  /* A list of all arm_sve.h functions.  */
! static CONSTEXPR const function_group_info function_groups[] = {
  #define DEF_SVE_FUNCTION_GS_FPM(NAME, SHAPE, TYPES, GROUPS, PREDS, FPM_MODE) \
    { #NAME, &functions::NAME, &shapes::SHAPE, types_##TYPES, groups_##GROUPS, \
      preds_##PREDS, aarch64_required_extensions::REQUIRED_EXTENSIONS, \
--- 197,203 ----
  };
  
  /* A list of all arm_sve.h functions.  */
! static constexpr const function_group_info function_groups[] = {
  #define DEF_SVE_FUNCTION_GS_FPM(NAME, SHAPE, TYPES, GROUPS, PREDS, FPM_MODE) \
    { #NAME, &functions::NAME, &shapes::SHAPE, types_##TYPES, groups_##GROUPS, \
      preds_##PREDS, aarch64_required_extensions::REQUIRED_EXTENSIONS, \
*************** static CONSTEXPR const function_group_in
*** 207,213 ****
  };
  
  /* A list of all arm_neon_sve_bridge.h ACLE functions.  */
! static CONSTEXPR const function_group_info neon_sve_function_groups[] = {
  #define DEF_NEON_SVE_FUNCTION(NAME, SHAPE, TYPES, GROUPS, PREDS) \
    { #NAME, &neon_sve_bridge_functions::NAME, &shapes::SHAPE, types_##TYPES, \
      groups_##GROUPS, preds_##PREDS, aarch64_required_extensions::ssve (0), \
--- 206,212 ----
  };
  
  /* A list of all arm_neon_sve_bridge.h ACLE functions.  */
! static constexpr const function_group_info neon_sve_function_groups[] = {
  #define DEF_NEON_SVE_FUNCTION(NAME, SHAPE, TYPES, GROUPS, PREDS) \
    { #NAME, &neon_sve_bridge_functions::NAME, &shapes::SHAPE, types_##TYPES, \
      groups_##GROUPS, preds_##PREDS, aarch64_required_extensions::ssve (0), \
*************** static CONSTEXPR const function_group_in
*** 216,222 ****
  };
  
  /* 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, \
--- 215,221 ----
  };
  
  /* 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, \
diff -Nrcpad gcc-17-20260705/gcc/config/aarch64/aarch64-builtins.cc gcc-17-20260712/gcc/config/aarch64/aarch64-builtins.cc
*** gcc-17-20260705/gcc/config/aarch64/aarch64-builtins.cc	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/aarch64/aarch64-builtins.cc	Sun Jul 12 22:32:07 2026
*************** struct aarch64_pragma_builtins_data
*** 1502,1508 ****
    unsigned int flags;
  };
  
! static CONSTEXPR aarch64_pragma_builtins_data aarch64_pragma_builtins[] = {
  #include "aarch64-simd-pragma-builtins.def"
  };
  
--- 1502,1508 ----
    unsigned int flags;
  };
  
! static constexpr aarch64_pragma_builtins_data aarch64_pragma_builtins[] = {
  #include "aarch64-simd-pragma-builtins.def"
  };
  
diff -Nrcpad gcc-17-20260705/gcc/config/aarch64/aarch64-cores.def gcc-17-20260712/gcc/config/aarch64/aarch64-cores.def
*** gcc-17-20260705/gcc/config/aarch64/aarch64-cores.def	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/aarch64/aarch64-cores.def	Sun Jul 12 22:32:07 2026
*************** AARCH64_CORE("demeter", demeter, cortexa
*** 245,250 ****
--- 245,251 ----
  
  /* NVIDIA ('N') cores. */
  AARCH64_CORE("olympus", olympus, cortexa57, V9_2A, (SVE2_BITPERM, RNG, LS64, MEMTAG, PROFILE, FAMINMAX, FP8FMA, FP8DOT2, FP8DOT4, LUT, SVE2_AES, SVE2_SHA3, SVE2_SM4), olympus, 0x4e, 0x10, -1)
+ AARCH64_CORE("rigel", rigel, cortexa57, V9_2A, (SVE2_BITPERM, RNG, LS64, MEMTAG, PROFILE, FAMINMAX, FP8FMA, FP8DOT2, FP8DOT4, LUT, SVE2_AES, SVE2_SHA3, SVE2_SM4), olympus, 0x4e, 0x11, -1)
  
  /* Armv9-A big.LITTLE processors.  */
  AARCH64_CORE("gb10",  gb10, cortexa57, V9_2A,  (SVE2_BITPERM, SVE2_AES, SVE2_SHA3, SVE2_SM4, MEMTAG, PROFILE), cortexx925, 0x41, AARCH64_BIG_LITTLE (0xd85, 0xd87), -1)
diff -Nrcpad gcc-17-20260705/gcc/config/aarch64/aarch64-option-extensions.def gcc-17-20260712/gcc/config/aarch64/aarch64-option-extensions.def
*** gcc-17-20260705/gcc/config/aarch64/aarch64-option-extensions.def	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/aarch64/aarch64-option-extensions.def	Sun Jul 12 22:32:07 2026
*************** AARCH64_OPT_EXTENSION("tlbid", TLBID, ()
*** 359,366 ****
  
  AARCH64_OPT_EXTENSION("gcie", GCIE, (), (), (), "")
  
- AARCH64_OPT_EXTENSION("mpamv2", MPAMv2, (), (), (), "")
- 
  AARCH64_OPT_EXTENSION("lscp", LSCP, (), (), (), "")
  
  AARCH64_OPT_EXTENSION("mops-go", MOPS_GO, (MOPS, MEMTAG), (), (), "")
--- 359,364 ----
diff -Nrcpad gcc-17-20260705/gcc/config/aarch64/aarch64-protos.h gcc-17-20260712/gcc/config/aarch64/aarch64-protos.h
*** gcc-17-20260705/gcc/config/aarch64/aarch64-protos.h	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/aarch64/aarch64-protos.h	Sun Jul 12 22:32:07 2026
*************** struct sve_vec_cost : simd_vec_cost
*** 257,263 ****
  {
    sve_vec_cost () = default;
  
!   CONSTEXPR sve_vec_cost (const simd_vec_cost &base,
  			  unsigned int clast_cost,
  			  unsigned int fadda_f16_cost,
  			  unsigned int fadda_f32_cost,
--- 257,263 ----
  {
    sve_vec_cost () = default;
  
!   constexpr sve_vec_cost (const simd_vec_cost &base,
  			  unsigned int clast_cost,
  			  unsigned int fadda_f16_cost,
  			  unsigned int fadda_f32_cost,
*************** struct aarch64_simd_vec_issue_info : aar
*** 369,375 ****
  {
    aarch64_simd_vec_issue_info () = default;
  
!   CONSTEXPR aarch64_simd_vec_issue_info (aarch64_base_vec_issue_info base,
  					 unsigned int ld2_st2_general_ops,
  					 unsigned int ld3_st3_general_ops,
  					 unsigned int ld4_st4_general_ops)
--- 369,375 ----
  {
    aarch64_simd_vec_issue_info () = default;
  
!   constexpr aarch64_simd_vec_issue_info (aarch64_base_vec_issue_info base,
  					 unsigned int ld2_st2_general_ops,
  					 unsigned int ld3_st3_general_ops,
  					 unsigned int ld4_st4_general_ops)
*************** struct aarch64_sve_vec_issue_info : aarc
*** 399,405 ****
  {
    aarch64_sve_vec_issue_info () = default;
  
!   CONSTEXPR aarch64_sve_vec_issue_info
      (aarch64_simd_vec_issue_info base,
       unsigned int pred_ops_per_cycle,
       unsigned int while_pred_ops,
--- 399,405 ----
  {
    aarch64_sve_vec_issue_info () = default;
  
!   constexpr aarch64_sve_vec_issue_info
      (aarch64_simd_vec_issue_info base,
       unsigned int pred_ops_per_cycle,
       unsigned int while_pred_ops,
*************** struct aarch64_required_extensions
*** 771,777 ****
  {
    /* Return a requirement that includes FLAGS on top of any existing
       requirements.  */
!   inline CONSTEXPR aarch64_required_extensions
    and_also (aarch64_feature_flags flags)
    {
      return { sm_off ? sm_off | flags : 0,
--- 771,777 ----
  {
    /* Return a requirement that includes FLAGS on top of any existing
       requirements.  */
!   inline constexpr aarch64_required_extensions
    and_also (aarch64_feature_flags flags)
    {
      return { sm_off ? sm_off | flags : 0,
*************** struct aarch64_required_extensions
*** 780,786 ****
  
    /* Return a requirement that is as restrictive as possible while still being
       no more restrictive than THIS and no more restrictive than OTHER.  */
!   inline CONSTEXPR aarch64_required_extensions
    common_denominator (const aarch64_required_extensions &other)
    {
      return { sm_off && other.sm_off
--- 780,786 ----
  
    /* Return a requirement that is as restrictive as possible while still being
       no more restrictive than THIS and no more restrictive than OTHER.  */
!   inline constexpr aarch64_required_extensions
    common_denominator (const aarch64_required_extensions &other)
    {
      return { sm_off && other.sm_off
*************** struct aarch64_required_extensions
*** 792,805 ****
    }
  
    /* Require non-streaming mode and the features in FLAGS.  */
!   static inline CONSTEXPR aarch64_required_extensions
    nonstreaming_only (aarch64_feature_flags flags)
    {
      return { AARCH64_FL_SM_OFF | flags, 0 };
    }
  
    /* Likewise, and also require SVE.  */
!   static inline CONSTEXPR aarch64_required_extensions
    nonstreaming_sve (aarch64_feature_flags flags)
    {
      return nonstreaming_only (AARCH64_FL_SVE | flags);
--- 792,805 ----
    }
  
    /* Require non-streaming mode and the features in FLAGS.  */
!   static inline constexpr aarch64_required_extensions
    nonstreaming_only (aarch64_feature_flags flags)
    {
      return { AARCH64_FL_SM_OFF | flags, 0 };
    }
  
    /* Likewise, and also require SVE.  */
!   static inline constexpr aarch64_required_extensions
    nonstreaming_sve (aarch64_feature_flags flags)
    {
      return nonstreaming_only (AARCH64_FL_SVE | flags);
*************** struct aarch64_required_extensions
*** 807,820 ****
  
    /* Allow both streaming and non-streaming mode, requiring the features
       in FLAGS for both cases.  */
!   static inline CONSTEXPR aarch64_required_extensions
    streaming_compatible (aarch64_feature_flags flags)
    {
      return { AARCH64_FL_SM_OFF | flags, AARCH64_FL_SM_ON | flags };
    }
  
    /* Likewise, and also require SVE for non-streaming mode.  */
!   static inline CONSTEXPR aarch64_required_extensions
    ssve (aarch64_feature_flags flags)
    {
      return streaming_compatible (AARCH64_FL_SVE | flags, flags);
--- 807,820 ----
  
    /* Allow both streaming and non-streaming mode, requiring the features
       in FLAGS for both cases.  */
!   static inline constexpr aarch64_required_extensions
    streaming_compatible (aarch64_feature_flags flags)
    {
      return { AARCH64_FL_SM_OFF | flags, AARCH64_FL_SM_ON | flags };
    }
  
    /* Likewise, and also require SVE for non-streaming mode.  */
!   static inline constexpr aarch64_required_extensions
    ssve (aarch64_feature_flags flags)
    {
      return streaming_compatible (AARCH64_FL_SVE | flags, flags);
*************** struct aarch64_required_extensions
*** 823,829 ****
    /* Allow both streaming and non-streaming mode, requiring the features
       in SM_OFF for non-streaming mode and the features in SM_ON for
       streaming mode.  */
!   static inline CONSTEXPR aarch64_required_extensions
    streaming_compatible (aarch64_feature_flags sm_off,
  			aarch64_feature_flags sm_on)
    {
--- 823,829 ----
    /* Allow both streaming and non-streaming mode, requiring the features
       in SM_OFF for non-streaming mode and the features in SM_ON for
       streaming mode.  */
!   static inline constexpr aarch64_required_extensions
    streaming_compatible (aarch64_feature_flags sm_off,
  			aarch64_feature_flags sm_on)
    {
*************** struct aarch64_required_extensions
*** 831,844 ****
    }
  
    /* Likewise, and also require SVE for non-streaming mode.  */
!   static inline CONSTEXPR aarch64_required_extensions
    sve_and_sme (aarch64_feature_flags sm_off, aarch64_feature_flags sm_on)
    {
      return streaming_compatible (AARCH64_FL_SVE | sm_off, sm_on);
    }
  
    /* Require streaming mode and the features in FLAGS.  */
!   static inline CONSTEXPR aarch64_required_extensions
    streaming_only (aarch64_feature_flags flags)
    {
      return { 0, AARCH64_FL_SM_ON | flags };
--- 831,844 ----
    }
  
    /* Likewise, and also require SVE for non-streaming mode.  */
!   static inline constexpr aarch64_required_extensions
    sve_and_sme (aarch64_feature_flags sm_off, aarch64_feature_flags sm_on)
    {
      return streaming_compatible (AARCH64_FL_SVE | sm_off, sm_on);
    }
  
    /* Require streaming mode and the features in FLAGS.  */
!   static inline constexpr aarch64_required_extensions
    streaming_only (aarch64_feature_flags flags)
    {
      return { 0, AARCH64_FL_SM_ON | flags };
diff -Nrcpad gcc-17-20260705/gcc/config/aarch64/aarch64-simd.md gcc-17-20260712/gcc/config/aarch64/aarch64-simd.md
*** gcc-17-20260705/gcc/config/aarch64/aarch64-simd.md	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/aarch64/aarch64-simd.md	Sun Jul 12 22:32:07 2026
***************
*** 1252,1257 ****
--- 1252,1277 ----
    [(set_attr "type" "neon_arith_acc<q>")]
  )
  
+ ;; C = ADD (ABS (A), B) -> C = ABA (A, B, 0)
+ (define_insn_and_split "*aarch64_abs_plus<mode>"
+   [(set (match_operand:VDQ_BHSI 0 "register_operand" "=&w")
+ 	(plus:VDQ_BHSI
+ 	  (unspec:VDQ_BHSI
+ 	    [(match_operand:VDQ_BHSI 1 "register_operand" "w")]
+ 	    UNSPEC_ABS)
+ 	  (match_operand:VDQ_BHSI 2 "register_operand" "w")))]
+   "TARGET_SIMD && can_create_pseudo_p ()"
+   "#"
+   "&& 1"
+   [(const_int 0)]
+   {
+     rtx zero = aarch64_gen_shareable_zero (<MODE>mode);
+     emit_insn (gen_aarch64_saba<mode> (operands[0], operands[2],
+ 				       operands[1], zero));
+     DONE;
+   }
+ )
+ 
  (define_insn "fabd<mode>3<vczle><vczbe>"
    [(set (match_operand:VHSDF_HSDF 0 "register_operand" "=w")
  	(abs:VHSDF_HSDF
diff -Nrcpad gcc-17-20260705/gcc/config/aarch64/aarch64-sve-builtins-base.cc gcc-17-20260712/gcc/config/aarch64/aarch64-sve-builtins-base.cc
*** gcc-17-20260705/gcc/config/aarch64/aarch64-sve-builtins-base.cc	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/aarch64/aarch64-sve-builtins-base.cc	Sun Jul 12 22:32:07 2026
*************** public:
*** 199,205 ****
  class svac_impl : public function_base
  {
  public:
!   CONSTEXPR svac_impl (int unspec) : m_unspec (unspec) {}
  
    gimple *
    fold (gimple_folder &f) const override
--- 199,205 ----
  class svac_impl : public function_base
  {
  public:
!   constexpr svac_impl (int unspec) : m_unspec (unspec) {}
  
    gimple *
    fold (gimple_folder &f) const override
*************** public:
*** 248,254 ****
  class svaddv_impl : public reduction
  {
  public:
!   CONSTEXPR svaddv_impl ()
      : reduction (UNSPEC_SADDV, UNSPEC_UADDV, UNSPEC_FADDV) {}
  
    gimple *
--- 248,254 ----
  class svaddv_impl : public reduction
  {
  public:
!   constexpr svaddv_impl ()
      : reduction (UNSPEC_SADDV, UNSPEC_UADDV, UNSPEC_FADDV) {}
  
    gimple *
*************** public:
*** 264,270 ****
  class svadr_bhwd_impl : public function_base
  {
  public:
!   CONSTEXPR svadr_bhwd_impl (unsigned int shift) : m_shift (shift) {}
  
    rtx
    expand (function_expander &e) const override
--- 264,270 ----
  class svadr_bhwd_impl : public function_base
  {
  public:
!   constexpr svadr_bhwd_impl (unsigned int shift) : m_shift (shift) {}
  
    rtx
    expand (function_expander &e) const override
*************** public:
*** 286,292 ****
  class svandv_impl : public reduction
  {
  public:
!   CONSTEXPR svandv_impl () : reduction (UNSPEC_ANDV) {}
  
    gimple *
    fold (gimple_folder &f) const override
--- 286,292 ----
  class svandv_impl : public reduction
  {
  public:
!   constexpr svandv_impl () : reduction (UNSPEC_ANDV) {}
  
    gimple *
    fold (gimple_folder &f) const override
*************** public:
*** 328,334 ****
  class svbrk_binary_impl : public function_base
  {
  public:
!   CONSTEXPR svbrk_binary_impl (int unspec) : m_unspec (unspec) {}
  
    rtx
    expand (function_expander &e) const override
--- 328,334 ----
  class svbrk_binary_impl : public function_base
  {
  public:
!   constexpr svbrk_binary_impl (int unspec) : m_unspec (unspec) {}
  
    rtx
    expand (function_expander &e) const override
*************** public:
*** 344,350 ****
  class svbrk_unary_impl : public function_base
  {
  public:
!   CONSTEXPR svbrk_unary_impl (int unspec) : m_unspec (unspec) {}
  
    rtx
    expand (function_expander &e) const override
--- 344,350 ----
  class svbrk_unary_impl : public function_base
  {
  public:
!   constexpr svbrk_unary_impl (int unspec) : m_unspec (unspec) {}
  
    rtx
    expand (function_expander &e) const override
*************** public:
*** 378,384 ****
  class svclast_impl : public quiet<function_base>
  {
  public:
!   CONSTEXPR svclast_impl (int unspec) : m_unspec (unspec) {}
  
    gimple *
    fold (gimple_folder &f) const override
--- 378,384 ----
  class svclast_impl : public quiet<function_base>
  {
  public:
!   constexpr svclast_impl (int unspec) : m_unspec (unspec) {}
  
    gimple *
    fold (gimple_folder &f) const override
*************** public:
*** 458,464 ****
  class svcmp_impl : public function_base
  {
  public:
!   CONSTEXPR svcmp_impl (tree_code code, int unspec_for_fp)
      : m_code (code), m_unspec_for_fp (unspec_for_fp) {}
  
    gimple *
--- 458,464 ----
  class svcmp_impl : public function_base
  {
  public:
!   constexpr svcmp_impl (tree_code code, int unspec_for_fp)
      : m_code (code), m_unspec_for_fp (unspec_for_fp) {}
  
    gimple *
*************** public:
*** 516,522 ****
  class svcmp_wide_impl : public function_base
  {
  public:
!   CONSTEXPR svcmp_wide_impl (tree_code code, int unspec_for_sint,
  			     int unspec_for_uint)
      : m_code (code), m_unspec_for_sint (unspec_for_sint),
        m_unspec_for_uint (unspec_for_uint) {}
--- 516,522 ----
  class svcmp_wide_impl : public function_base
  {
  public:
!   constexpr svcmp_wide_impl (tree_code code, int unspec_for_sint,
  			     int unspec_for_uint)
      : m_code (code), m_unspec_for_sint (unspec_for_sint),
        m_unspec_for_uint (unspec_for_uint) {}
*************** public:
*** 618,624 ****
  class svcnt_bhwd_impl : public function_base
  {
  public:
!   CONSTEXPR svcnt_bhwd_impl (machine_mode ref_mode) : m_ref_mode (ref_mode) {}
  
    gimple *
    fold (gimple_folder &f) const override
--- 618,624 ----
  class svcnt_bhwd_impl : public function_base
  {
  public:
!   constexpr svcnt_bhwd_impl (machine_mode ref_mode) : m_ref_mode (ref_mode) {}
  
    gimple *
    fold (gimple_folder &f) const override
*************** public:
*** 858,864 ****
  class svdiv_impl : public rtx_code_function
  {
  public:
!   CONSTEXPR svdiv_impl ()
      : rtx_code_function (DIV, UDIV, UNSPEC_COND_FDIV) {}
  
    gimple *
--- 858,864 ----
  class svdiv_impl : public rtx_code_function
  {
  public:
!   constexpr svdiv_impl ()
      : rtx_code_function (DIV, UDIV, UNSPEC_COND_FDIV) {}
  
    gimple *
*************** public:
*** 1280,1286 ****
  class sveorv_impl : public reduction
  {
  public:
!   CONSTEXPR sveorv_impl () : reduction (UNSPEC_XORV) {}
  
    gimple *
    fold (gimple_folder &f) const override
--- 1280,1286 ----
  class sveorv_impl : public reduction
  {
  public:
!   constexpr sveorv_impl () : reduction (UNSPEC_XORV) {}
  
    gimple *
    fold (gimple_folder &f) const override
*************** public:
*** 1308,1314 ****
  class svext_bhw_impl : public function_base
  {
  public:
!   CONSTEXPR svext_bhw_impl (scalar_int_mode from_mode)
      : m_from_mode (from_mode) {}
  
    gimple *
--- 1308,1314 ----
  class svext_bhw_impl : public function_base
  {
  public:
!   constexpr svext_bhw_impl (scalar_int_mode from_mode)
      : m_from_mode (from_mode) {}
  
    gimple *
*************** public:
*** 1556,1562 ****
  class svlast_impl : public quiet<function_base>
  {
  public:
!   CONSTEXPR svlast_impl (int unspec) : m_unspec (unspec) {}
  
    bool is_lasta () const { return m_unspec == UNSPEC_LASTA; }
    bool is_lastb () const { return m_unspec == UNSPEC_LASTB; }
--- 1556,1562 ----
  class svlast_impl : public quiet<function_base>
  {
  public:
!   constexpr svlast_impl (int unspec) : m_unspec (unspec) {}
  
    bool is_lasta () const { return m_unspec == UNSPEC_LASTA; }
    bool is_lastb () const { return m_unspec == UNSPEC_LASTB; }
*************** public:
*** 2059,2065 ****
  class svldxf1_impl : public full_width_access
  {
  public:
!   CONSTEXPR svldxf1_impl (int unspec) : m_unspec (unspec) {}
  
    unsigned int
    call_properties (const function_instance &) const override
--- 2059,2065 ----
  class svldxf1_impl : public full_width_access
  {
  public:
!   constexpr svldxf1_impl (int unspec) : m_unspec (unspec) {}
  
    unsigned int
    call_properties (const function_instance &) const override
*************** public:
*** 2086,2092 ****
  class svldxf1_extend_impl : public extending_load
  {
  public:
!   CONSTEXPR svldxf1_extend_impl (type_suffix_index memory_type, int unspec)
      : extending_load (memory_type), m_unspec (unspec) {}
  
    unsigned int
--- 2086,2092 ----
  class svldxf1_extend_impl : public extending_load
  {
  public:
!   constexpr svldxf1_extend_impl (type_suffix_index memory_type, int unspec)
      : extending_load (memory_type), m_unspec (unspec) {}
  
    unsigned int
*************** public:
*** 2136,2142 ****
  class svlsl_impl : public rtx_code_function
  {
  public:
!   CONSTEXPR svlsl_impl ()
      : rtx_code_function (ASHIFT, ASHIFT) {}
  
    gimple *
--- 2136,2142 ----
  class svlsl_impl : public rtx_code_function
  {
  public:
!   constexpr svlsl_impl ()
      : rtx_code_function (ASHIFT, ASHIFT) {}
  
    gimple *
*************** public:
*** 2159,2165 ****
  class svminv_impl : public reduction
  {
  public:
!   CONSTEXPR svminv_impl ()
      : reduction (UNSPEC_SMINV, UNSPEC_UMINV, UNSPEC_FMINV) {}
  
    gimple *
--- 2159,2165 ----
  class svminv_impl : public reduction
  {
  public:
!   constexpr svminv_impl ()
      : reduction (UNSPEC_SMINV, UNSPEC_UMINV, UNSPEC_FMINV) {}
  
    gimple *
*************** public:
*** 2179,2185 ****
  class svmaxnmv_impl : public reduction
  {
  public:
!   CONSTEXPR svmaxnmv_impl () : reduction (UNSPEC_FMAXNMV) {}
    gimple *
    fold (gimple_folder &f) const override
    {
--- 2179,2185 ----
  class svmaxnmv_impl : public reduction
  {
  public:
!   constexpr svmaxnmv_impl () : reduction (UNSPEC_FMAXNMV) {}
    gimple *
    fold (gimple_folder &f) const override
    {
*************** public:
*** 2196,2202 ****
  class svmaxv_impl : public reduction
  {
  public:
!   CONSTEXPR svmaxv_impl ()
      : reduction (UNSPEC_SMAXV, UNSPEC_UMAXV, UNSPEC_FMAXV) {}
  
    gimple *
--- 2196,2202 ----
  class svmaxv_impl : public reduction
  {
  public:
!   constexpr svmaxv_impl ()
      : reduction (UNSPEC_SMAXV, UNSPEC_UMAXV, UNSPEC_FMAXV) {}
  
    gimple *
*************** public:
*** 2216,2222 ****
  class svminnmv_impl : public reduction
  {
  public:
!   CONSTEXPR svminnmv_impl () : reduction (UNSPEC_FMINNMV) {}
    gimple *
    fold (gimple_folder &f) const override
    {
--- 2216,2222 ----
  class svminnmv_impl : public reduction
  {
  public:
!   constexpr svminnmv_impl () : reduction (UNSPEC_FMINNMV) {}
    gimple *
    fold (gimple_folder &f) const override
    {
*************** public:
*** 2348,2354 ****
  class svmul_impl : public rtx_code_function
  {
  public:
!   CONSTEXPR svmul_impl ()
      : rtx_code_function (MULT, MULT, UNSPEC_COND_FMUL, UNSPEC_FMUL) {}
  
    gimple *
--- 2348,2354 ----
  class svmul_impl : public rtx_code_function
  {
  public:
!   constexpr svmul_impl ()
      : rtx_code_function (MULT, MULT, UNSPEC_COND_FMUL, UNSPEC_FMUL) {}
  
    gimple *
*************** public:
*** 2481,2487 ****
  class svnot_impl : public rtx_code_function
  {
  public:
!   CONSTEXPR svnot_impl () : rtx_code_function (NOT, NOT, -1) {}
  
    rtx
    expand (function_expander &e) const override
--- 2481,2487 ----
  class svnot_impl : public rtx_code_function
  {
  public:
!   constexpr svnot_impl () : rtx_code_function (NOT, NOT, -1) {}
  
    rtx
    expand (function_expander &e) const override
*************** public:
*** 2512,2518 ****
  class svorv_impl : public reduction
  {
  public:
!   CONSTEXPR svorv_impl () : reduction (UNSPEC_IORV) {}
  
    gimple *
    fold (gimple_folder &f) const override
--- 2512,2518 ----
  class svorv_impl : public reduction
  {
  public:
!   constexpr svorv_impl () : reduction (UNSPEC_IORV) {}
  
    gimple *
    fold (gimple_folder &f) const override
*************** public:
*** 2546,2552 ****
  class svpfirst_svpnext_impl : public function_base
  {
  public:
!   CONSTEXPR svpfirst_svpnext_impl (int unspec) : m_unspec (unspec) {}
    gimple *
    fold (gimple_folder &f) const override
    {
--- 2546,2552 ----
  class svpfirst_svpnext_impl : public function_base
  {
  public:
!   constexpr svpfirst_svpnext_impl (int unspec) : m_unspec (unspec) {}
    gimple *
    fold (gimple_folder &f) const override
    {
*************** public:
*** 2574,2580 ****
  class svprf_bhwd_impl : public function_base
  {
  public:
!   CONSTEXPR svprf_bhwd_impl (machine_mode mode) : m_mode (mode) {}
  
    unsigned int
    call_properties (const function_instance &) const override
--- 2574,2580 ----
  class svprf_bhwd_impl : public function_base
  {
  public:
!   constexpr svprf_bhwd_impl (machine_mode mode) : m_mode (mode) {}
  
    unsigned int
    call_properties (const function_instance &) const override
*************** public:
*** 2598,2604 ****
  class svprf_bhwd_gather_impl : public function_base
  {
  public:
!   CONSTEXPR svprf_bhwd_gather_impl (machine_mode mode) : m_mode (mode) {}
  
    unsigned int
    call_properties (const function_instance &) const override
--- 2598,2604 ----
  class svprf_bhwd_gather_impl : public function_base
  {
  public:
!   constexpr svprf_bhwd_gather_impl (machine_mode mode) : m_mode (mode) {}
  
    unsigned int
    call_properties (const function_instance &) const override
*************** public:
*** 2636,2642 ****
  class svptest_impl : public function_base
  {
  public:
!   CONSTEXPR svptest_impl (rtx_code compare) : m_compare (compare) {}
    gimple *
    fold (gimple_folder &f) const override
    {
--- 2636,2642 ----
  class svptest_impl : public function_base
  {
  public:
!   constexpr svptest_impl (rtx_code compare) : m_compare (compare) {}
    gimple *
    fold (gimple_folder &f) const override
    {
*************** public:
*** 2755,2761 ****
  class svqdec_svqinc_bhwd_impl : public function_base
  {
  public:
!   CONSTEXPR svqdec_svqinc_bhwd_impl (rtx_code code_for_sint,
  				     rtx_code code_for_uint,
  				     scalar_int_mode elem_mode)
      : m_code_for_sint (code_for_sint),
--- 2755,2761 ----
  class svqdec_svqinc_bhwd_impl : public function_base
  {
  public:
!   constexpr svqdec_svqinc_bhwd_impl (rtx_code code_for_sint,
  				     rtx_code code_for_uint,
  				     scalar_int_mode elem_mode)
      : m_code_for_sint (code_for_sint),
*************** public:
*** 2802,2808 ****
  class svqdec_bhwd_impl : public svqdec_svqinc_bhwd_impl
  {
  public:
!   CONSTEXPR svqdec_bhwd_impl (scalar_int_mode elem_mode)
      : svqdec_svqinc_bhwd_impl (SS_MINUS, US_MINUS, elem_mode) {}
  };
  
--- 2802,2808 ----
  class svqdec_bhwd_impl : public svqdec_svqinc_bhwd_impl
  {
  public:
!   constexpr svqdec_bhwd_impl (scalar_int_mode elem_mode)
      : svqdec_svqinc_bhwd_impl (SS_MINUS, US_MINUS, elem_mode) {}
  };
  
*************** public:
*** 2810,2816 ****
  class svqinc_bhwd_impl : public svqdec_svqinc_bhwd_impl
  {
  public:
!   CONSTEXPR svqinc_bhwd_impl (scalar_int_mode elem_mode)
      : svqdec_svqinc_bhwd_impl (SS_PLUS, US_PLUS, elem_mode) {}
  };
  
--- 2810,2816 ----
  class svqinc_bhwd_impl : public svqdec_svqinc_bhwd_impl
  {
  public:
!   constexpr svqinc_bhwd_impl (scalar_int_mode elem_mode)
      : svqdec_svqinc_bhwd_impl (SS_PLUS, US_PLUS, elem_mode) {}
  };
  
*************** public:
*** 2818,2824 ****
  class svqdecp_svqincp_impl : public function_base
  {
  public:
!   CONSTEXPR svqdecp_svqincp_impl (rtx_code code_for_sint,
  				  rtx_code code_for_uint)
      : m_code_for_sint (code_for_sint),
        m_code_for_uint (code_for_uint)
--- 2818,2824 ----
  class svqdecp_svqincp_impl : public function_base
  {
  public:
!   constexpr svqdecp_svqincp_impl (rtx_code code_for_sint,
  				  rtx_code code_for_uint)
      : m_code_for_sint (code_for_sint),
        m_code_for_uint (code_for_uint)
*************** public:
*** 2941,2947 ****
  class svrint_impl : public function_base
  {
  public:
!   CONSTEXPR svrint_impl (optab_tag optab, int cond_unspec)
      : m_optab (optab), m_cond_unspec (cond_unspec)
    {}
  
--- 2941,2947 ----
  class svrint_impl : public function_base
  {
  public:
!   constexpr svrint_impl (optab_tag optab, int cond_unspec)
      : m_optab (optab), m_cond_unspec (cond_unspec)
    {}
  
*************** public:
*** 3240,3246 ****
  class svsub_impl : public rtx_code_function
  {
  public:
!   CONSTEXPR svsub_impl ()
      : rtx_code_function (MINUS, MINUS, UNSPEC_COND_FSUB) {}
  
    rtx
--- 3240,3246 ----
  class svsub_impl : public rtx_code_function
  {
  public:
!   constexpr svsub_impl ()
      : rtx_code_function (MINUS, MINUS, UNSPEC_COND_FSUB) {}
  
    rtx
*************** public:
*** 3259,3265 ****
  class svtrn_impl : public binary_permute
  {
  public:
!   CONSTEXPR svtrn_impl (int base)
      : binary_permute (base ? UNSPEC_TRN2 : UNSPEC_TRN1), m_base (base) {}
  
    gimple *
--- 3259,3265 ----
  class svtrn_impl : public binary_permute
  {
  public:
!   constexpr svtrn_impl (int base)
      : binary_permute (base ? UNSPEC_TRN2 : UNSPEC_TRN1), m_base (base) {}
  
    gimple *
*************** public:
*** 3300,3306 ****
  class svunpk_impl : public quiet<function_base>
  {
  public:
!   CONSTEXPR svunpk_impl (bool high_p) : m_high_p (high_p) {}
  
    gimple *
    fold (gimple_folder &f) const override
--- 3300,3306 ----
  class svunpk_impl : public quiet<function_base>
  {
  public:
!   constexpr svunpk_impl (bool high_p) : m_high_p (high_p) {}
  
    gimple *
    fold (gimple_folder &f) const override
*************** public:
*** 3342,3348 ****
  class svusdot_impl : public function_base
  {
  public:
!   CONSTEXPR svusdot_impl (bool su) : m_su (su) {}
  
    rtx
    expand (function_expander &e) const override
--- 3342,3348 ----
  class svusdot_impl : public function_base
  {
  public:
!   constexpr svusdot_impl (bool su) : m_su (su) {}
  
    rtx
    expand (function_expander &e) const override
*************** private:
*** 3370,3376 ****
  class svuzp_impl : public binary_permute
  {
  public:
!   CONSTEXPR svuzp_impl (unsigned int base)
      : binary_permute (base ? UNSPEC_UZP2 : UNSPEC_UZP1), m_base (base) {}
  
    gimple *
--- 3370,3376 ----
  class svuzp_impl : public binary_permute
  {
  public:
!   constexpr svuzp_impl (unsigned int base)
      : binary_permute (base ? UNSPEC_UZP2 : UNSPEC_UZP1), m_base (base) {}
  
    gimple *
*************** public:
*** 3393,3399 ****
  class svwhilelx_impl : public while_comparison
  {
  public:
!   CONSTEXPR svwhilelx_impl (int unspec_for_sint, int unspec_for_uint, bool eq_p)
      : while_comparison (unspec_for_sint, unspec_for_uint), m_eq_p (eq_p)
    {}
  
--- 3393,3399 ----
  class svwhilelx_impl : public while_comparison
  {
  public:
!   constexpr svwhilelx_impl (int unspec_for_sint, int unspec_for_uint, bool eq_p)
      : while_comparison (unspec_for_sint, unspec_for_uint), m_eq_p (eq_p)
    {}
  
*************** public:
*** 3492,3498 ****
  class svzip_impl : public binary_permute
  {
  public:
!   CONSTEXPR svzip_impl (unsigned int base)
      : binary_permute (base ? UNSPEC_ZIP2 : UNSPEC_ZIP1), m_base (base) {}
  
    gimple *
--- 3492,3498 ----
  class svzip_impl : public binary_permute
  {
  public:
!   constexpr svzip_impl (unsigned int base)
      : binary_permute (base ? UNSPEC_ZIP2 : UNSPEC_ZIP1), m_base (base) {}
  
    gimple *
diff -Nrcpad gcc-17-20260705/gcc/config/aarch64/aarch64-sve-builtins-functions.h gcc-17-20260712/gcc/config/aarch64/aarch64-sve-builtins-functions.h
*** gcc-17-20260705/gcc/config/aarch64/aarch64-sve-builtins-functions.h	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/aarch64/aarch64-sve-builtins-functions.h	Sun Jul 12 22:32:07 2026
*************** using write_zt0 = add_call_properties<T,
*** 71,77 ****
  class multi_vector_function : public function_base
  {
  public:
!   CONSTEXPR multi_vector_function (unsigned int vectors_per_tuple)
      : m_vectors_per_tuple (vectors_per_tuple) {}
  
    unsigned int
--- 71,77 ----
  class multi_vector_function : public function_base
  {
  public:
!   constexpr multi_vector_function (unsigned int vectors_per_tuple)
      : m_vectors_per_tuple (vectors_per_tuple) {}
  
    unsigned int
*************** public:
*** 95,101 ****
  class full_width_access : public multi_vector_function
  {
  public:
!   CONSTEXPR full_width_access (unsigned int vectors_per_tuple = 1)
      : multi_vector_function (vectors_per_tuple) {}
  
    tree
--- 95,101 ----
  class full_width_access : public multi_vector_function
  {
  public:
!   constexpr full_width_access (unsigned int vectors_per_tuple = 1)
      : multi_vector_function (vectors_per_tuple) {}
  
    tree
*************** public:
*** 121,127 ****
  class extending_load : public function_base
  {
  public:
!   CONSTEXPR extending_load (type_suffix_index memory_type)
      : m_memory_type (memory_type) {}
  
    unsigned int
--- 121,127 ----
  class extending_load : public function_base
  {
  public:
!   constexpr extending_load (type_suffix_index memory_type)
      : m_memory_type (memory_type) {}
  
    unsigned int
*************** public:
*** 164,170 ****
  class truncating_store : public function_base
  {
  public:
!   CONSTEXPR truncating_store (scalar_int_mode to_mode) : m_to_mode (to_mode) {}
  
    unsigned int
    call_properties (const function_instance &) const override
--- 164,170 ----
  class truncating_store : public function_base
  {
  public:
!   constexpr truncating_store (scalar_int_mode to_mode) : m_to_mode (to_mode) {}
  
    unsigned int
    call_properties (const function_instance &) const override
*************** public:
*** 201,207 ****
  class rtx_code_function_base : public function_base
  {
  public:
!   CONSTEXPR rtx_code_function_base (rtx_code code_for_sint,
  				    rtx_code code_for_uint,
  				    int unspec_for_cond_fp = -1,
  				    int unspec_for_uncond_fp = -1)
--- 201,207 ----
  class rtx_code_function_base : public function_base
  {
  public:
!   constexpr rtx_code_function_base (rtx_code code_for_sint,
  				    rtx_code code_for_uint,
  				    int unspec_for_cond_fp = -1,
  				    int unspec_for_uncond_fp = -1)
*************** public:
*** 267,273 ****
  class unspec_based_function_base : public function_base
  {
  public:
!   CONSTEXPR unspec_based_function_base (int unspec_for_sint,
  					int unspec_for_uint,
  					int unspec_for_fp,
  					int unspec_for_mfp8 = -1,
--- 267,273 ----
  class unspec_based_function_base : public function_base
  {
  public:
!   constexpr unspec_based_function_base (int unspec_for_sint,
  					int unspec_for_uint,
  					int unspec_for_fp,
  					int unspec_for_mfp8 = -1,
*************** typedef unspec_based_function_exact_insn
*** 402,408 ****
  class cond_or_uncond_unspec_function : public function_base
  {
  public:
!   CONSTEXPR cond_or_uncond_unspec_function (int cond_unspec, int uncond_unspec)
      : m_cond_unspec (cond_unspec), m_uncond_unspec (uncond_unspec) {}
  
    rtx
--- 402,408 ----
  class cond_or_uncond_unspec_function : public function_base
  {
  public:
!   constexpr cond_or_uncond_unspec_function (int cond_unspec, int uncond_unspec)
      : m_cond_unspec (cond_unspec), m_uncond_unspec (uncond_unspec) {}
  
    rtx
*************** class sme_1mode_function : public read_w
*** 431,437 ****
  public:
    using parent = read_write_za<unspec_based_function_base>;
  
!   CONSTEXPR sme_1mode_function (int unspec_for_sint, int unspec_for_uint,
  				int unspec_for_fp)
      : parent (unspec_for_sint, unspec_for_uint, unspec_for_fp, -1, 1)
    {}
--- 431,437 ----
  public:
    using parent = read_write_za<unspec_based_function_base>;
  
!   constexpr sme_1mode_function (int unspec_for_sint, int unspec_for_uint,
  				int unspec_for_fp)
      : parent (unspec_for_sint, unspec_for_uint, unspec_for_fp, -1, 1)
    {}
*************** class sme_2mode_function_t : public read
*** 461,467 ****
  public:
    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)
--- 461,467 ----
  public:
    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)
*************** class svvdot_half_impl : public read_wri
*** 488,494 ****
  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)
--- 488,494 ----
  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)
*************** public:
*** 602,608 ****
  class fixed_insn_function : public function_base
  {
  public:
!   CONSTEXPR fixed_insn_function (insn_code code) : m_code (code) {}
  
    rtx
    expand (function_expander &e) const override
--- 602,608 ----
  class fixed_insn_function : public function_base
  {
  public:
!   constexpr fixed_insn_function (insn_code code) : m_code (code) {}
  
    rtx
    expand (function_expander &e) const override
*************** public:
*** 644,650 ****
  class binary_permute : public permute
  {
  public:
!   CONSTEXPR binary_permute (int unspec) : m_unspec (unspec) {}
  
    rtx
    expand (function_expander &e) const override
--- 644,650 ----
  class binary_permute : public permute
  {
  public:
!   constexpr binary_permute (int unspec) : m_unspec (unspec) {}
  
    rtx
    expand (function_expander &e) const override
*************** public:
*** 666,672 ****
  class multireg_permute : public function_base
  {
  public:
!   CONSTEXPR multireg_permute (int unspec) : m_unspec (unspec) {}
  
    rtx
    expand (function_expander &e) const override
--- 666,672 ----
  class multireg_permute : public function_base
  {
  public:
!   constexpr multireg_permute (int unspec) : m_unspec (unspec) {}
  
    rtx
    expand (function_expander &e) const override
*************** public:
*** 693,699 ****
  class integer_conversion : public function_base
  {
  public:
!   CONSTEXPR integer_conversion (int unspec_for_sint, int unspec_for_sintu,
  				int unspec_for_uint, int unspec_for_uints)
      : m_unspec_for_sint (unspec_for_sint),
        m_unspec_for_sintu (unspec_for_sintu),
--- 693,699 ----
  class integer_conversion : public function_base
  {
  public:
!   constexpr integer_conversion (int unspec_for_sint, int unspec_for_sintu,
  				int unspec_for_uint, int unspec_for_uints)
      : m_unspec_for_sint (unspec_for_sint),
        m_unspec_for_sintu (unspec_for_sintu),
*************** public:
*** 735,747 ****
  class reduction : public function_base
  {
  public:
!   CONSTEXPR reduction (int unspec)
      : m_unspec_for_sint (unspec),
        m_unspec_for_uint (unspec),
        m_unspec_for_fp (unspec)
    {}
  
!   CONSTEXPR reduction (int unspec_for_sint, int unspec_for_uint,
  		       int unspec_for_fp)
      : m_unspec_for_sint (unspec_for_sint),
        m_unspec_for_uint (unspec_for_uint),
--- 735,747 ----
  class reduction : public function_base
  {
  public:
!   constexpr reduction (int unspec)
      : m_unspec_for_sint (unspec),
        m_unspec_for_uint (unspec),
        m_unspec_for_fp (unspec)
    {}
  
!   constexpr reduction (int unspec_for_sint, int unspec_for_uint,
  		       int unspec_for_fp)
      : m_unspec_for_sint (unspec_for_sint),
        m_unspec_for_uint (unspec_for_uint),
*************** public:
*** 774,780 ****
  class shift_wide : public function_base
  {
  public:
!   CONSTEXPR shift_wide (rtx_code code, int wide_unspec)
      : m_code (code), m_wide_unspec (wide_unspec) {}
  
    rtx
--- 774,780 ----
  class shift_wide : public function_base
  {
  public:
!   constexpr shift_wide (rtx_code code, int wide_unspec)
      : m_code (code), m_wide_unspec (wide_unspec) {}
  
    rtx
*************** public:
*** 809,815 ****
  class unary_count : public quiet<function_base>
  {
  public:
!   CONSTEXPR unary_count (rtx_code code) : m_code (code) {}
  
    rtx
    expand (function_expander &e) const override
--- 809,815 ----
  class unary_count : public quiet<function_base>
  {
  public:
!   constexpr unary_count (rtx_code code) : m_code (code) {}
  
    rtx
    expand (function_expander &e) const override
*************** public:
*** 832,838 ****
  class while_comparison : public function_base
  {
  public:
!   CONSTEXPR while_comparison (int unspec_for_sint, int unspec_for_uint)
      : m_unspec_for_sint (unspec_for_sint),
        m_unspec_for_uint (unspec_for_uint)
    {}
--- 832,838 ----
  class while_comparison : public function_base
  {
  public:
!   constexpr while_comparison (int unspec_for_sint, int unspec_for_uint)
      : m_unspec_for_sint (unspec_for_sint),
        m_unspec_for_uint (unspec_for_uint)
    {}
*************** public:
*** 916,926 ****
  /* Declare the global function base NAME, creating it from an instance
     of class CLASS with constructor arguments ARGS.  */
  #define FUNCTION(NAME, CLASS, ARGS) \
!   namespace { static CONSTEXPR const CLASS NAME##_obj ARGS; } \
    namespace functions { const function_base *const NAME = &NAME##_obj; }
  
  #define NEON_SVE_BRIDGE_FUNCTION(NAME, CLASS, ARGS) \
!   namespace { static CONSTEXPR const CLASS NAME##_obj ARGS; } \
    namespace neon_sve_bridge_functions { const function_base *const NAME = &NAME##_obj; }
  
  #endif
--- 916,926 ----
  /* Declare the global function base NAME, creating it from an instance
     of class CLASS with constructor arguments ARGS.  */
  #define FUNCTION(NAME, CLASS, ARGS) \
!   namespace { static constexpr const CLASS NAME##_obj ARGS; } \
    namespace functions { const function_base *const NAME = &NAME##_obj; }
  
  #define NEON_SVE_BRIDGE_FUNCTION(NAME, CLASS, ARGS) \
!   namespace { static constexpr const CLASS NAME##_obj ARGS; } \
    namespace neon_sve_bridge_functions { const function_base *const NAME = &NAME##_obj; }
  
  #endif
diff -Nrcpad gcc-17-20260705/gcc/config/aarch64/aarch64-sve-builtins-shapes.cc gcc-17-20260712/gcc/config/aarch64/aarch64-sve-builtins-shapes.cc
*** gcc-17-20260705/gcc/config/aarch64/aarch64-sve-builtins-shapes.cc	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/aarch64/aarch64-sve-builtins-shapes.cc	Sun Jul 12 22:32:07 2026
*************** long_type_suffix (function_resolver &r,
*** 580,586 ****
  /* Declare the function shape NAME, pointing it to an instance
     of class <NAME>_def.  */
  #define SHAPE(NAME)							\
!   static CONSTEXPR const NAME##_def NAME##_obj;				\
    namespace shapes { const function_shape *const NAME = &NAME##_obj; }	\
    extern int __require_trailing_semicolon ATTRIBUTE_UNUSED
  
--- 580,586 ----
  /* Declare the function shape NAME, pointing it to an instance
     of class <NAME>_def.  */
  #define SHAPE(NAME)							\
!   static constexpr const NAME##_def NAME##_obj;				\
    namespace shapes { const function_shape *const NAME = &NAME##_obj; }	\
    extern int __require_trailing_semicolon ATTRIBUTE_UNUSED
  
*************** struct ext_base : public overloaded_base
*** 822,828 ****
  /* Base class for inc_dec and inc_dec_pat.  */
  struct inc_dec_base : public overloaded_base<0>
  {
!   CONSTEXPR inc_dec_base (bool pat_p) : m_pat_p (pat_p) {}
  
    /* Resolve based on the first argument only, which must be either a
       scalar or a vector.  If it's a scalar, it must be a 32-bit or
--- 822,828 ----
  /* Base class for inc_dec and inc_dec_pat.  */
  struct inc_dec_base : public overloaded_base<0>
  {
!   constexpr inc_dec_base (bool pat_p) : m_pat_p (pat_p) {}
  
    /* Resolve based on the first argument only, which must be either a
       scalar or a vector.  If it's a scalar, it must be a 32-bit or
*************** SHAPE (dup_neonq);
*** 2819,2825 ****
     whose size is tied to the [bhwd] suffix of "svfoo".  */
  struct inc_dec_def : public inc_dec_base
  {
!   CONSTEXPR inc_dec_def () : inc_dec_base (false) {}
  
    void
    build (function_builder &b, const function_group_info &group) const override
--- 2819,2825 ----
     whose size is tied to the [bhwd] suffix of "svfoo".  */
  struct inc_dec_def : public inc_dec_base
  {
!   constexpr inc_dec_def () : inc_dec_base (false) {}
  
    void
    build (function_builder &b, const function_group_info &group) const override
*************** SHAPE (inc_dec);
*** 2844,2850 ****
     whose size is tied to the [bhwd] suffix of "svfoo".  */
  struct inc_dec_pat_def : public inc_dec_base
  {
!   CONSTEXPR inc_dec_pat_def () : inc_dec_base (true) {}
  
    void
    build (function_builder &b, const function_group_info &group) const override
--- 2844,2850 ----
     whose size is tied to the [bhwd] suffix of "svfoo".  */
  struct inc_dec_pat_def : public inc_dec_base
  {
!   constexpr inc_dec_pat_def () : inc_dec_base (true) {}
  
    void
    build (function_builder &b, const function_group_info &group) const override
diff -Nrcpad gcc-17-20260705/gcc/config/aarch64/aarch64-sve-builtins-sme.cc gcc-17-20260712/gcc/config/aarch64/aarch64-sve-builtins-sme.cc
*** gcc-17-20260705/gcc/config/aarch64/aarch64-sve-builtins-sme.cc	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/aarch64/aarch64-sve-builtins-sme.cc	Sun Jul 12 22:32:07 2026
*************** public:
*** 339,345 ****
  class svluti_lane_zt_impl : public read_zt0<function_base>
  {
  public:
!   CONSTEXPR svluti_lane_zt_impl (unsigned int bits) : m_bits (bits) {}
  
    rtx
    expand (function_expander &e) const override
--- 339,345 ----
  class svluti_lane_zt_impl : public read_zt0<function_base>
  {
  public:
!   constexpr svluti_lane_zt_impl (unsigned int bits) : m_bits (bits) {}
  
    rtx
    expand (function_expander &e) const override
*************** public:
*** 359,365 ****
  class svluti_zt_impl : public read_zt0<function_base>
  {
  public:
!   CONSTEXPR svluti_zt_impl (unsigned int bits) : m_bits (bits) {}
  
    unsigned int call_properties (const function_instance &) const override
    {
--- 359,365 ----
  class svluti_zt_impl : public read_zt0<function_base>
  {
  public:
!   constexpr svluti_zt_impl (unsigned int bits) : m_bits (bits) {}
  
    unsigned int call_properties (const function_instance &) const override
    {
diff -Nrcpad gcc-17-20260705/gcc/config/aarch64/aarch64-sve-builtins-sve2.cc gcc-17-20260712/gcc/config/aarch64/aarch64-sve-builtins-sve2.cc
*** gcc-17-20260705/gcc/config/aarch64/aarch64-sve-builtins-sve2.cc	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/aarch64/aarch64-sve-builtins-sve2.cc	Sun Jul 12 22:32:07 2026
*************** unspec_sqrdcmlah (int rot)
*** 81,87 ****
  class ld1uxq_st1xq_base : public function_base
  {
  public:
!   CONSTEXPR ld1uxq_st1xq_base (machine_mode memory_mode)
      : m_memory_mode (memory_mode) {}
  
    tree
--- 81,87 ----
  class ld1uxq_st1xq_base : public function_base
  {
  public:
!   constexpr ld1uxq_st1xq_base (machine_mode memory_mode)
      : m_memory_mode (memory_mode) {}
  
    tree
*************** protected:
*** 103,109 ****
  class ld234q_st234q_base : public full_width_access
  {
  public:
!   CONSTEXPR ld234q_st234q_base (unsigned int vector_count, machine_mode mode)
      : full_width_access (vector_count), m_mode (mode)
    {}
  
--- 103,109 ----
  class ld234q_st234q_base : public full_width_access
  {
  public:
!   constexpr ld234q_st234q_base (unsigned int vector_count, machine_mode mode)
      : full_width_access (vector_count), m_mode (mode)
    {}
  
*************** public:
*** 224,231 ****
  class svcvt_fp8_impl : public function_base
  {
  public:
!   CONSTEXPR
!   svcvt_fp8_impl (int unspec) : m_unspec (unspec) {}
  
    rtx
    expand (function_expander &e) const override
--- 224,230 ----
  class svcvt_fp8_impl : public function_base
  {
  public:
!   constexpr svcvt_fp8_impl (int unspec) : m_unspec (unspec) {}
  
    rtx
    expand (function_expander &e) const override
*************** public:
*** 294,302 ****
  class svfirst_lastp_impl : public function_base
  {
  public:
!   CONSTEXPR svfirst_lastp_impl (bool first)
!     : m_first (first)
!   {}
  
    gimple *
    fold (gimple_folder &f) const override
--- 293,300 ----
  class svfirst_lastp_impl : public function_base
  {
  public:
!   constexpr svfirst_lastp_impl (bool first)
!     : m_first (first) {}
  
    gimple *
    fold (gimple_folder &f) const override
*************** public:
*** 448,454 ****
  class svmatch_svnmatch_impl : public function_base
  {
  public:
!   CONSTEXPR svmatch_svnmatch_impl (int unspec) : m_unspec (unspec) {}
    gimple *
    fold (gimple_folder &f) const override
    {
--- 446,452 ----
  class svmatch_svnmatch_impl : public function_base
  {
  public:
!   constexpr svmatch_svnmatch_impl (int unspec) : m_unspec (unspec) {}
    gimple *
    fold (gimple_folder &f) const override
    {
*************** public:
*** 587,593 ****
  class svqrshl_impl : public unspec_based_function
  {
  public:
!   CONSTEXPR svqrshl_impl ()
      : unspec_based_function (UNSPEC_SQRSHL, UNSPEC_UQRSHL, -1) {}
  
    gimple *
--- 585,591 ----
  class svqrshl_impl : public unspec_based_function
  {
  public:
!   constexpr svqrshl_impl ()
      : unspec_based_function (UNSPEC_SQRSHL, UNSPEC_UQRSHL, -1) {}
  
    gimple *
*************** public:
*** 623,629 ****
  class svqshl_impl : public unspec_based_function
  {
  public:
!   CONSTEXPR svqshl_impl ()
      : unspec_based_function (UNSPEC_SQSHL, UNSPEC_UQSHL, -1) {}
  
    gimple *
--- 621,627 ----
  class svqshl_impl : public unspec_based_function
  {
  public:
!   constexpr svqshl_impl ()
      : unspec_based_function (UNSPEC_SQSHL, UNSPEC_UQSHL, -1) {}
  
    gimple *
*************** public:
*** 660,666 ****
  class svrshl_impl : public unspec_based_function
  {
  public:
!   CONSTEXPR svrshl_impl ()
      : unspec_based_function (UNSPEC_SRSHL, UNSPEC_URSHL, -1) {}
  
    gimple *
--- 658,664 ----
  class svrshl_impl : public unspec_based_function
  {
  public:
!   constexpr svrshl_impl ()
      : unspec_based_function (UNSPEC_SRSHL, UNSPEC_URSHL, -1) {}
  
    gimple *
*************** public:
*** 852,858 ****
  class svtbl2_impl : public quiet<multi_vector_function>
  {
  public:
!   CONSTEXPR svtbl2_impl () : quiet<multi_vector_function> (2) {}
  
    rtx
    expand (function_expander &e) const override
--- 850,856 ----
  class svtbl2_impl : public quiet<multi_vector_function>
  {
  public:
!   constexpr svtbl2_impl () : quiet<multi_vector_function> (2) {}
  
    rtx
    expand (function_expander &e) const override
*************** public:
*** 892,898 ****
  class svuzpq_impl : public binary_permute
  {
  public:
!   CONSTEXPR svuzpq_impl (unsigned int base)
      : binary_permute (base ? UNSPEC_UZPQ2 : UNSPEC_UZPQ1), m_base (base) {}
  
    gimple *
--- 890,896 ----
  class svuzpq_impl : public binary_permute
  {
  public:
!   constexpr svuzpq_impl (unsigned int base)
      : binary_permute (base ? UNSPEC_UZPQ2 : UNSPEC_UZPQ1), m_base (base) {}
  
    gimple *
*************** public:
*** 921,927 ****
  class svwhilerw_svwhilewr_impl : public full_width_access
  {
  public:
!   CONSTEXPR svwhilerw_svwhilewr_impl (int unspec) : m_unspec (unspec) {}
  
    rtx
    expand (function_expander &e) const override
--- 919,925 ----
  class svwhilerw_svwhilewr_impl : public full_width_access
  {
  public:
!   constexpr svwhilerw_svwhilewr_impl (int unspec) : m_unspec (unspec) {}
  
    rtx
    expand (function_expander &e) const override
*************** public:
*** 940,946 ****
  class svzipq_impl : public binary_permute
  {
  public:
!   CONSTEXPR svzipq_impl (unsigned int base)
      : binary_permute (base ? UNSPEC_ZIPQ2 : UNSPEC_ZIPQ1), m_base (base) {}
  
    gimple *
--- 938,944 ----
  class svzipq_impl : public binary_permute
  {
  public:
!   constexpr svzipq_impl (unsigned int base)
      : binary_permute (base ? UNSPEC_ZIPQ2 : UNSPEC_ZIPQ1), m_base (base) {}
  
    gimple *
*************** public:
*** 967,974 ****
  class svluti_lane_impl : public function_base
  {
  public:
!   CONSTEXPR svluti_lane_impl (unsigned int bits) : m_bits (bits)
!   {}
  
    rtx expand (function_expander &e) const override
    {
--- 965,971 ----
  class svluti_lane_impl : public function_base
  {
  public:
!   constexpr svluti_lane_impl (unsigned int bits) : m_bits (bits) {}
  
    rtx expand (function_expander &e) const override
    {
*************** public:
*** 984,992 ****
  class faminmaximpl : public function_base
  {
  public:
!   CONSTEXPR faminmaximpl (int cond_unspec, int uncond_unspec)
!     : m_cond_unspec (cond_unspec), m_uncond_unspec (uncond_unspec)
!     {}
  
    rtx
    expand (function_expander &e) const override
--- 981,988 ----
  class faminmaximpl : public function_base
  {
  public:
!   constexpr faminmaximpl (int cond_unspec, int uncond_unspec)
!     : m_cond_unspec (cond_unspec), m_uncond_unspec (uncond_unspec) {}
  
    rtx
    expand (function_expander &e) const override
diff -Nrcpad gcc-17-20260705/gcc/config/aarch64/aarch64-sys-regs.def gcc-17-20260712/gcc/config/aarch64/aarch64-sys-regs.def
*** gcc-17-20260705/gcc/config/aarch64/aarch64-sys-regs.def	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/aarch64/aarch64-sys-regs.def	Sun Jul 12 22:32:07 2026
***************
*** 922,937 ****
    SYSREG ("mpambwcap_el2",	CPENC (3,4,10,5,6),	0,		AARCH64_FEATURE (V9_3A)) /* MPAM_PE_BW_CTRL */
    SYSREG ("mpambwidr_el1",	CPENC (3,0,10,4,5),	F_REG_READ,	AARCH64_FEATURE (V9_3A)) /* MPAM_PE_BW_CTRL */
    SYSREG ("mpambwsm_el1",	CPENC (3,0,10,5,7),	0,		AARCH64_FEATURES (2, SME, V9_3A)) /* SME && MPAM_PE_BW_CTRL */
!   SYSREG ("mpamctl_el1",	CPENC (3,0,10,5,2),	0,		AARCH64_FEATURE (MPAMv2))
!   SYSREG ("mpamctl_el12",	CPENC (3,5,10,5,2),	0,		AARCH64_FEATURE (MPAMv2))
!   SYSREG ("mpamctl_el2",	CPENC (3,4,10,5,2),	0,		AARCH64_FEATURE (MPAMv2))
!   SYSREG ("mpamctl_el3",	CPENC (3,6,10,5,2),	0,		AARCH64_FEATURE (MPAMv2))
    SYSREG ("mpamhcr_el2",	CPENC (3,4,10,4,0),	0,		AARCH64_FEATURE (V8_2A)) /* MPAM */
    SYSREG ("mpamidr_el1",	CPENC (3,0,10,4,4),	F_REG_READ,	AARCH64_FEATURE (V8_2A)) /* MPAM */
    SYSREG ("mpamsm_el1",		CPENC (3,0,10,5,3),	0,		AARCH64_FEATURES (2, SME, V8_2A)) /* SME && MPAM */
-   SYSREG ("mpamvidcr_el2",	CPENC (3,4,10,7,0),	0,		AARCH64_FEATURE (MPAMv2))
-   SYSREG ("mpamvidsr_el2",	CPENC (3,4,10,7,1),	0,		AARCH64_FEATURE (MPAMv2))
-   SYSREG ("mpamvidsr_el3",	CPENC (3,6,10,7,1),	0,		AARCH64_FEATURE (MPAMv2))
    SYSREG ("mpamvpm0_el2",	CPENC (3,4,10,6,0),	0,		AARCH64_FEATURE (V8_2A)) /* MPAM */
    SYSREG ("mpamvpm1_el2",	CPENC (3,4,10,6,1),	0,		AARCH64_FEATURE (V8_2A)) /* MPAM */
    SYSREG ("mpamvpm2_el2",	CPENC (3,4,10,6,2),	0,		AARCH64_FEATURE (V8_2A)) /* MPAM */
--- 922,934 ----
    SYSREG ("mpambwcap_el2",	CPENC (3,4,10,5,6),	0,		AARCH64_FEATURE (V9_3A)) /* MPAM_PE_BW_CTRL */
    SYSREG ("mpambwidr_el1",	CPENC (3,0,10,4,5),	F_REG_READ,	AARCH64_FEATURE (V9_3A)) /* MPAM_PE_BW_CTRL */
    SYSREG ("mpambwsm_el1",	CPENC (3,0,10,5,7),	0,		AARCH64_FEATURES (2, SME, V9_3A)) /* SME && MPAM_PE_BW_CTRL */
!   SYSREG ("mpamctl_el1",	CPENC (3,0,10,5,2),	0,		AARCH64_FEATURE (V9_3A)) /* MPAMv2 */
!   SYSREG ("mpamctl_el12",	CPENC (3,5,10,5,2),	0,		AARCH64_FEATURE (V9_3A)) /* MPAMv2 */
!   SYSREG ("mpamctl_el2",	CPENC (3,4,10,5,2),	0,		AARCH64_FEATURE (V9_3A)) /* MPAMv2 */
!   SYSREG ("mpamctl_el3",	CPENC (3,6,10,5,2),	0,		AARCH64_FEATURE (V9_3A)) /* MPAMv2 */
    SYSREG ("mpamhcr_el2",	CPENC (3,4,10,4,0),	0,		AARCH64_FEATURE (V8_2A)) /* MPAM */
    SYSREG ("mpamidr_el1",	CPENC (3,0,10,4,4),	F_REG_READ,	AARCH64_FEATURE (V8_2A)) /* MPAM */
    SYSREG ("mpamsm_el1",		CPENC (3,0,10,5,3),	0,		AARCH64_FEATURES (2, SME, V8_2A)) /* SME && MPAM */
    SYSREG ("mpamvpm0_el2",	CPENC (3,4,10,6,0),	0,		AARCH64_FEATURE (V8_2A)) /* MPAM */
    SYSREG ("mpamvpm1_el2",	CPENC (3,4,10,6,1),	0,		AARCH64_FEATURE (V8_2A)) /* MPAM */
    SYSREG ("mpamvpm2_el2",	CPENC (3,4,10,6,2),	0,		AARCH64_FEATURE (V8_2A)) /* MPAM */
diff -Nrcpad gcc-17-20260705/gcc/config/aarch64/aarch64-tune.md gcc-17-20260712/gcc/config/aarch64/aarch64-tune.md
*** gcc-17-20260705/gcc/config/aarch64/aarch64-tune.md	Sun Jul  5 22:32:21 2026
--- gcc-17-20260712/gcc/config/aarch64/aarch64-tune.md	Sun Jul 12 22:32:22 2026
***************
*** 1,5 ****
  ;; -*- buffer-read-only: t -*-
  ;; Generated automatically by gentune.sh from aarch64-cores.def
  (define_attr "tune"
! 	"cortexa34,cortexa35,cortexa53,cortexa57,cortexa72,cortexa73,thunderx,thunderxt88,thunderxt88p1,octeontx,octeontxt81,octeontxt83,thunderxt81,thunderxt83,ampere1,ampere1a,ampere1b,ampere1c,emag,xgene1,falkor,qdf24xx,exynosm1,phecda,thunderx2t99p1,vulcan,thunderx2t99,cortexa55,cortexa75,cortexa76,cortexa76ae,cortexa77,cortexa78,cortexa78ae,cortexa78c,cortexa65,cortexa65ae,cortexx1,cortexx1c,neoversen1,ares,neoversee1,octeontx2,octeontx2t98,octeontx2t96,octeontx2t93,octeontx2f95,octeontx2f95n,octeontx2f95mm,a64fx,fujitsu_monaka,hip12,tsv110,thunderx3t110,neoversev1,zeus,neoverse512tvb,saphira,oryon1,cortexa57cortexa53,cortexa72cortexa53,cortexa73cortexa35,cortexa73cortexa53,cortexa75cortexa55,cortexa76cortexa55,cortexr82,cortexr82ae,applea12,applem1_0,applem1_1,applem1_2,applem1_3,applem2_0,applem2_1,applem2_2,applem2_3,applem3_0,applem3_1,applem3_2,applem4_0,applem4_1,applem4_2,applem5_0,applem5_1,applem5_2,cortexa510,cortexa520,cortexa520ae,cortexa710,cortexa715,cortexa720,cortexa720ae,cortexa725,cortexa320,cortexx2,cortexx3,cortexx4,cortexx925,neoversen2,cobalt100,neoversen3,neoversev2,grace,neoversev3,neoversev3ae,armagicpu,c1nano,c1pro,c1premium,c1ultra,demeter,olympus,gb10,generic,generic_armv8_a,generic_armv9_a"
  	(const (symbol_ref "((enum attr_tune) aarch64_tune)")))
--- 1,5 ----
  ;; -*- buffer-read-only: t -*-
  ;; Generated automatically by gentune.sh from aarch64-cores.def
  (define_attr "tune"
! 	"cortexa34,cortexa35,cortexa53,cortexa57,cortexa72,cortexa73,thunderx,thunderxt88,thunderxt88p1,octeontx,octeontxt81,octeontxt83,thunderxt81,thunderxt83,ampere1,ampere1a,ampere1b,ampere1c,emag,xgene1,falkor,qdf24xx,exynosm1,phecda,thunderx2t99p1,vulcan,thunderx2t99,cortexa55,cortexa75,cortexa76,cortexa76ae,cortexa77,cortexa78,cortexa78ae,cortexa78c,cortexa65,cortexa65ae,cortexx1,cortexx1c,neoversen1,ares,neoversee1,octeontx2,octeontx2t98,octeontx2t96,octeontx2t93,octeontx2f95,octeontx2f95n,octeontx2f95mm,a64fx,fujitsu_monaka,hip12,tsv110,thunderx3t110,neoversev1,zeus,neoverse512tvb,saphira,oryon1,cortexa57cortexa53,cortexa72cortexa53,cortexa73cortexa35,cortexa73cortexa53,cortexa75cortexa55,cortexa76cortexa55,cortexr82,cortexr82ae,applea12,applem1_0,applem1_1,applem1_2,applem1_3,applem2_0,applem2_1,applem2_2,applem2_3,applem3_0,applem3_1,applem3_2,applem4_0,applem4_1,applem4_2,applem5_0,applem5_1,applem5_2,cortexa510,cortexa520,cortexa520ae,cortexa710,cortexa715,cortexa720,cortexa720ae,cortexa725,cortexa320,cortexx2,cortexx3,cortexx4,cortexx925,neoversen2,cobalt100,neoversen3,neoversev2,grace,neoversev3,neoversev3ae,armagicpu,c1nano,c1pro,c1premium,c1ultra,demeter,olympus,rigel,gb10,generic,generic_armv8_a,generic_armv9_a"
  	(const (symbol_ref "((enum attr_tune) aarch64_tune)")))
diff -Nrcpad gcc-17-20260705/gcc/config/aarch64/aarch64-tuning-flags.def gcc-17-20260712/gcc/config/aarch64/aarch64-tuning-flags.def
*** gcc-17-20260705/gcc/config/aarch64/aarch64-tuning-flags.def	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/aarch64/aarch64-tuning-flags.def	Sun Jul 12 22:32:07 2026
*************** AARCH64_EXTRA_TUNING_OPTION ("cse_sve_vl
*** 40,45 ****
--- 40,49 ----
  
  AARCH64_EXTRA_TUNING_OPTION ("matched_vector_throughput", MATCHED_VECTOR_THROUGHPUT)
  
+ /* For cores whose pipeline disfavours loop-carried serial FMAs: set
+    avoid-fma-max-bits to its maximum (512, i.e. all FMA widths) to enable
+    the reassoc reorder for 3+ operand chains, and set widening-mul-defer-fma
+    to 0 to suppress the widening-mul pass's FMA deferring.  */
  AARCH64_EXTRA_TUNING_OPTION ("avoid_cross_loop_fma", AVOID_CROSS_LOOP_FMA)
  
  AARCH64_EXTRA_TUNING_OPTION ("fully_pipelined_fma", FULLY_PIPELINED_FMA)
diff -Nrcpad gcc-17-20260705/gcc/config/aarch64/aarch64.cc gcc-17-20260712/gcc/config/aarch64/aarch64.cc
*** gcc-17-20260705/gcc/config/aarch64/aarch64.cc	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/aarch64/aarch64.cc	Sun Jul 12 22:32:07 2026
*************** struct processor
*** 482,488 ****
  };
  
  /* Architectures implementing AArch64.  */
! static CONSTEXPR const processor all_architectures[] =
  {
  #define AARCH64_ARCH(NAME, CORE, ARCH_IDENT, D, E) \
    {NAME, AARCH64_CPU_##CORE, AARCH64_CPU_##CORE, AARCH64_ARCH_##ARCH_IDENT, \
--- 482,488 ----
  };
  
  /* Architectures implementing AArch64.  */
! static constexpr const processor all_architectures[] =
  {
  #define AARCH64_ARCH(NAME, CORE, ARCH_IDENT, D, E) \
    {NAME, AARCH64_CPU_##CORE, AARCH64_CPU_##CORE, AARCH64_ARCH_##ARCH_IDENT, \
*************** aarch64_function_arg_alignment (machine_
*** 7601,7607 ****
  	  *abi_break_gcc_14 = TYPE_ALIGN (type);
  	  type = TYPE_MAIN_VARIANT (TREE_TYPE (type));
  	}
!       gcc_assert (!TYPE_USER_ALIGN (type));
        return TYPE_ALIGN (type);
      }
  
--- 7601,7615 ----
  	  *abi_break_gcc_14 = TYPE_ALIGN (type);
  	  type = TYPE_MAIN_VARIANT (TREE_TYPE (type));
  	}
!       /* Ignore any user-specified alignment: the AAPCS64 uses the
! 	 type's natural alignment for scalars and vectors.  We normally
! 	 strip user alignment by taking the TYPE_MAIN_VARIANT above, but
! 	 an attribute that affects type identity (such as may_alias) can
! 	 make a type its own main variant while still recording the user
! 	 alignment, so handle that case explicitly here (PR124146).  For
! 	 a scalar or vector the natural alignment is that of its mode.  */
!       if (TYPE_USER_ALIGN (type))
! 	return GET_MODE_ALIGNMENT (mode);
        return TYPE_ALIGN (type);
      }
  
*************** aarch64_override_options_internal (struc
*** 20087,20097 ****
        && opts->x_optimize >= aarch64_tune_params.prefetch->default_opt_level)
      opts->x_flag_prefetch_loop_arrays = 1;
  
!   /* Avoid loop-dependant FMA chains.  */
    if (aarch64_tune_params.extra_tuning_flags
        & AARCH64_EXTRA_TUNE_AVOID_CROSS_LOOP_FMA)
!     SET_OPTION_IF_UNSET (opts, opts_set, param_avoid_fma_max_bits,
! 			 512);
  
    /* Consider fully pipelined FMA in reassociation.  */
    if (aarch64_tune_params.extra_tuning_flags
--- 20095,20111 ----
        && opts->x_optimize >= aarch64_tune_params.prefetch->default_opt_level)
      opts->x_flag_prefetch_loop_arrays = 1;
  
!   /* Avoid loop-dependant FMA chains.  The reassoc-side reorder helper
!      keeps using --param=avoid-fma-max-bits; the widening-mul-side
!      deferring is gated separately by --param=widening-mul-defer-fma, so we
!      suppress only the deferring on these cores while leaving the reassoc
!      reorder active.  */
    if (aarch64_tune_params.extra_tuning_flags
        & AARCH64_EXTRA_TUNE_AVOID_CROSS_LOOP_FMA)
!     {
!       SET_OPTION_IF_UNSET (opts, opts_set, param_avoid_fma_max_bits, 512);
!       SET_OPTION_IF_UNSET (opts, opts_set, param_widening_mul_defer_fma, 0);
!     }
  
    /* Consider fully pipelined FMA in reassociation.  */
    if (aarch64_tune_params.extra_tuning_flags
diff -Nrcpad gcc-17-20260705/gcc/config/aarch64/aarch64.h gcc-17-20260712/gcc/config/aarch64/aarch64.h
*** gcc-17-20260705/gcc/config/aarch64/aarch64.h	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/aarch64/aarch64.h	Sun Jul 12 22:32:07 2026
***************
*** 96,103 ****
  
  #define LONG_LONG_TYPE_SIZE	64
  
- #define WIDEST_HARDWARE_FP_SIZE	64
- 
  /* This value is the amount of bytes a caller is allowed to drop the stack
     before probing has to be done for stack clash protection.  */
  #define STACK_CLASH_CALLER_GUARD 1024
--- 96,101 ----
diff -Nrcpad gcc-17-20260705/gcc/config/aarch64/driver-aarch64.cc gcc-17-20260712/gcc/config/aarch64/driver-aarch64.cc
*** gcc-17-20260705/gcc/config/aarch64/driver-aarch64.cc	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/aarch64/driver-aarch64.cc	Sun Jul 12 22:32:07 2026
*************** struct aarch64_core_data
*** 65,71 ****
  #define AARCH64_CORE(CORE_NAME, CORE_IDENT, SCHED, ARCH, FLAGS, COSTS, IMP, PART, VARIANT) \
    { CORE_NAME, #ARCH, IMP, PART, unsigned(VARIANT), feature_deps::cpu_##CORE_IDENT },
  
! static CONSTEXPR const aarch64_core_data aarch64_cpu_data[] =
  {
  #include "aarch64-cores.def"
    { NULL, NULL, INVALID_IMP, INVALID_CORE, ALL_VARIANTS, 0 }
--- 65,71 ----
  #define AARCH64_CORE(CORE_NAME, CORE_IDENT, SCHED, ARCH, FLAGS, COSTS, IMP, PART, VARIANT) \
    { CORE_NAME, #ARCH, IMP, PART, unsigned(VARIANT), feature_deps::cpu_##CORE_IDENT },
  
! static constexpr const aarch64_core_data aarch64_cpu_data[] =
  {
  #include "aarch64-cores.def"
    { NULL, NULL, INVALID_IMP, INVALID_CORE, ALL_VARIANTS, 0 }
*************** struct aarch64_arch_driver_info
*** 83,89 ****
  #define AARCH64_ARCH(NAME, CORE, ARCH_IDENT, ARCH_REV, FLAGS) \
    { #ARCH_IDENT + 1, NAME, feature_deps::ARCH_IDENT ().enable },
  
! static CONSTEXPR const aarch64_arch_driver_info aarch64_arches[] =
  {
  #include "aarch64-arches.def"
    {NULL, NULL, 0}
--- 83,89 ----
  #define AARCH64_ARCH(NAME, CORE, ARCH_IDENT, ARCH_REV, FLAGS) \
    { #ARCH_IDENT + 1, NAME, feature_deps::ARCH_IDENT ().enable },
  
! static constexpr const aarch64_arch_driver_info aarch64_arches[] =
  {
  #include "aarch64-arches.def"
    {NULL, NULL, 0}
diff -Nrcpad gcc-17-20260705/gcc/config/aarch64/tuning_models/ampere1.h gcc-17-20260712/gcc/config/aarch64/tuning_models/ampere1.h
*** gcc-17-20260705/gcc/config/aarch64/tuning_models/ampere1.h	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/aarch64/tuning_models/ampere1.h	Sun Jul 12 22:32:07 2026
*************** static const advsimd_vec_cost ampere1_ad
*** 46,51 ****
--- 46,81 ----
    1  /* store_cost  */
  };
  
+ static const aarch64_scalar_vec_issue_info ampere1_scalar_issue_info =
+ {
+   3, /* loads_stores_per_cycle  */
+   1, /* stores_per_cycle  */
+   4, /* general_ops_per_cycle  */
+   0, /* fp_simd_load_general_ops  */
+   1 /* fp_simd_store_general_ops  */
+ };
+ 
+ static const aarch64_advsimd_vec_issue_info ampere1_advsimd_issue_info =
+ {
+   {
+     2, /* loads_stores_per_cycle  */
+     2, /* stores_per_cycle  */
+     4, /* general_ops_per_cycle  */
+     0, /* fp_simd_load_general_ops  */
+     1 /* fp_simd_store_general_ops  */
+   },
+   2, /* ld2_st2_general_ops  */
+   2, /* ld3_st3_general_ops  */
+   3 /* ld4_st4_general_ops  */
+ };
+ 
+ static const aarch64_vec_issue_info ampere1_vec_issue_info =
+ {
+   &ampere1_scalar_issue_info,
+   &ampere1_advsimd_issue_info,
+   nullptr /* sve  */
+ };
+ 
  /* Ampere-1 costs for vector insn classes.  */
  static const struct cpu_vector_cost ampere1_vector_cost =
  {
*************** static const struct cpu_vector_cost ampe
*** 57,63 ****
    1, /* cond_not_taken_branch_cost  */
    &ampere1_advsimd_vector_cost, /* advsimd  */
    nullptr, /* sve  */
!   nullptr  /* issue_info  */
  };
  
  static const cpu_prefetch_tune ampere1_prefetch_tune =
--- 87,93 ----
    1, /* cond_not_taken_branch_cost  */
    &ampere1_advsimd_vector_cost, /* advsimd  */
    nullptr, /* sve  */
!   &ampere1_vec_issue_info /* issue_info  */
  };
  
  static const cpu_prefetch_tune ampere1_prefetch_tune =
diff -Nrcpad gcc-17-20260705/gcc/config/aarch64/tuning_models/ampere1b.h gcc-17-20260712/gcc/config/aarch64/tuning_models/ampere1b.h
*** gcc-17-20260705/gcc/config/aarch64/tuning_models/ampere1b.h	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/aarch64/tuning_models/ampere1b.h	Sun Jul 12 22:32:07 2026
*************** static const advsimd_vec_cost ampere1b_a
*** 57,62 ****
--- 57,92 ----
    1  /* store_cost  */
  };
  
+ static const aarch64_scalar_vec_issue_info ampere1b_scalar_issue_info =
+ {
+   3, /* loads_stores_per_cycle  */
+   1, /* stores_per_cycle  */
+   4, /* general_ops_per_cycle  */
+   0, /* fp_simd_load_general_ops  */
+   1 /* fp_simd_store_general_ops  */
+ };
+ 
+ static const aarch64_advsimd_vec_issue_info ampere1b_advsimd_issue_info =
+ {
+   {
+     2, /* loads_stores_per_cycle  */
+     2, /* stores_per_cycle  */
+     4, /* general_ops_per_cycle  */
+     0, /* fp_simd_load_general_ops  */
+     1 /* fp_simd_store_general_ops  */
+   },
+   2, /* ld2_st2_general_ops  */
+   2, /* ld3_st3_general_ops  */
+   3 /* ld4_st4_general_ops  */
+ };
+ 
+ static const aarch64_vec_issue_info ampere1b_vec_issue_info =
+ {
+   &ampere1b_scalar_issue_info,
+   &ampere1b_advsimd_issue_info,
+   nullptr /* sve  */
+ };
+ 
  /* Ampere-1B costs for vector insn classes.  */
  static const struct cpu_vector_cost ampere1b_vector_cost =
  {
*************** static const struct cpu_vector_cost ampe
*** 68,74 ****
    1, /* cond_not_taken_branch_cost  */
    &ampere1b_advsimd_vector_cost, /* advsimd  */
    nullptr, /* sve  */
!   nullptr  /* issue_info  */
  };
  
  static const struct tune_params ampere1b_tunings =
--- 98,104 ----
    1, /* cond_not_taken_branch_cost  */
    &ampere1b_advsimd_vector_cost, /* advsimd  */
    nullptr, /* sve  */
!   &ampere1b_vec_issue_info /* issue_info  */
  };
  
  static const struct tune_params ampere1b_tunings =
diff -Nrcpad gcc-17-20260705/gcc/config/alpha/alpha.h gcc-17-20260712/gcc/config/alpha/alpha.h
*** gcc-17-20260705/gcc/config/alpha/alpha.h	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/alpha/alpha.h	Sun Jul 12 22:32:07 2026
*************** extern enum alpha_fp_trap_mode alpha_fpt
*** 195,203 ****
  /* Define the size of `long long'.  The default is the twice the word size.  */
  #define LONG_LONG_TYPE_SIZE 64
  
- /* Work around target_flags dependency in ada/targtyps.cc.  */
- #define WIDEST_HARDWARE_FP_SIZE 64
- 
  #define	WCHAR_TYPE "unsigned int"
  #define	WCHAR_TYPE_SIZE 32
  
--- 195,200 ----
diff -Nrcpad gcc-17-20260705/gcc/config/arm/arm-mve-builtins-base.cc gcc-17-20260712/gcc/config/arm/arm-mve-builtins-base.cc
*** gcc-17-20260705/gcc/config/arm/arm-mve-builtins-base.cc	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/arm/arm-mve-builtins-base.cc	Sun Jul 12 22:32:07 2026
*************** namespace {
*** 44,50 ****
  class vdupq_impl : public quiet<function_base>
  {
  public:
!   CONSTEXPR vdupq_impl (int unspec_for_m_n_sint,
  			int unspec_for_m_n_uint,
  			int unspec_for_m_n_fp)
      : m_unspec_for_m_n_sint (unspec_for_m_n_sint),
--- 44,50 ----
  class vdupq_impl : public quiet<function_base>
  {
  public:
!   constexpr vdupq_impl (int unspec_for_m_n_sint,
  			int unspec_for_m_n_uint,
  			int unspec_for_m_n_fp)
      : m_unspec_for_m_n_sint (unspec_for_m_n_sint),
*************** class vstrq_scatter_impl : public store_
*** 240,246 ****
  public:
    using store_truncating::store_truncating;
  
!   CONSTEXPR vstrq_scatter_impl (bool shifted,
  				scalar_mode to_int_mode,
  				opt_scalar_mode to_float_mode)
      : store_truncating (to_int_mode, to_float_mode),
--- 240,246 ----
  public:
    using store_truncating::store_truncating;
  
!   constexpr vstrq_scatter_impl (bool shifted,
  				scalar_mode to_int_mode,
  				opt_scalar_mode to_float_mode)
      : store_truncating (to_int_mode, to_float_mode),
*************** public:
*** 290,296 ****
  class vstrq_scatter_base_impl : public function_base
  {
  public:
!   CONSTEXPR vstrq_scatter_base_impl (scalar_mode to_int_mode)
      : m_to_int_mode (to_int_mode)
    {}
  
--- 290,296 ----
  class vstrq_scatter_base_impl : public function_base
  {
  public:
!   constexpr vstrq_scatter_base_impl (scalar_mode to_int_mode)
      : m_to_int_mode (to_int_mode)
    {}
  
*************** class vldrq_gather_impl : public load_ex
*** 410,416 ****
  public:
    using load_extending::load_extending;
  
!   CONSTEXPR vldrq_gather_impl (bool shifted,
  			       type_suffix_index signed_memory_type,
  			       type_suffix_index unsigned_memory_type,
  			       type_suffix_index float_memory_type)
--- 410,416 ----
  public:
    using load_extending::load_extending;
  
!   constexpr vldrq_gather_impl (bool shifted,
  			       type_suffix_index signed_memory_type,
  			       type_suffix_index unsigned_memory_type,
  			       type_suffix_index float_memory_type)
*************** public:
*** 418,424 ****
        m_shifted (shifted)
    {}
  
!   CONSTEXPR vldrq_gather_impl (bool shifted,
  			       type_suffix_index signed_memory_type,
  			       type_suffix_index unsigned_memory_type)
      : load_extending (signed_memory_type, unsigned_memory_type, NUM_TYPE_SUFFIXES),
--- 418,424 ----
        m_shifted (shifted)
    {}
  
!   constexpr vldrq_gather_impl (bool shifted,
  			       type_suffix_index signed_memory_type,
  			       type_suffix_index unsigned_memory_type)
      : load_extending (signed_memory_type, unsigned_memory_type, NUM_TYPE_SUFFIXES),
*************** public:
*** 545,551 ****
  class vctpq_impl : public function_base
  {
  public:
!   CONSTEXPR vctpq_impl (machine_mode mode)
      : m_mode (mode)
    {}
  
--- 545,551 ----
  class vctpq_impl : public function_base
  {
  public:
!   constexpr vctpq_impl (machine_mode mode)
      : m_mode (mode)
    {}
  
*************** public:
*** 702,708 ****
  class vcvtxq_impl : public function_base
  {
  public:
!   CONSTEXPR vcvtxq_impl (int unspec_f16_f32, int unspec_for_m_f16_f32,
  			 int unspec_f32_f16, int unspec_for_m_f32_f16)
      : m_unspec_f16_f32 (unspec_f16_f32),
        m_unspec_for_m_f16_f32 (unspec_for_m_f16_f32),
--- 702,708 ----
  class vcvtxq_impl : public function_base
  {
  public:
!   constexpr vcvtxq_impl (int unspec_f16_f32, int unspec_for_m_f16_f32,
  			 int unspec_f32_f16, int unspec_for_m_f32_f16)
      : m_unspec_f16_f32 (unspec_f16_f32),
        m_unspec_for_m_f16_f32 (unspec_for_m_f16_f32),
*************** public:
*** 760,766 ****
  class viddup_impl : public function_base
  {
  public:
!   CONSTEXPR viddup_impl (bool inc_dec, bool wrap)
      : m_inc_dec (inc_dec), m_wrap (wrap)
    {}
  
--- 760,766 ----
  class viddup_impl : public function_base
  {
  public:
!   constexpr viddup_impl (bool inc_dec, bool wrap)
      : m_inc_dec (inc_dec), m_wrap (wrap)
    {}
  
*************** public:
*** 960,966 ****
  class vadc_vsbc_impl : public function_base
  {
  public:
!   CONSTEXPR vadc_vsbc_impl (bool init_carry, bool add)
      : m_init_carry (init_carry), m_add (add)
    {}
  
--- 960,966 ----
  class vadc_vsbc_impl : public function_base
  {
  public:
!   constexpr vadc_vsbc_impl (bool init_carry, bool add)
      : m_init_carry (init_carry), m_add (add)
    {}
  
*************** enum which_scalar_shift {
*** 1202,1208 ****
  class mve_function_scalar_shift : public function_base
  {
  public:
!   CONSTEXPR mve_function_scalar_shift (enum which_scalar_shift shl)
      : m_scalar_shift (shl)
    {}
  
--- 1202,1208 ----
  class mve_function_scalar_shift : public function_base
  {
  public:
!   constexpr mve_function_scalar_shift (enum which_scalar_shift shl)
      : m_scalar_shift (shl)
    {}
  
*************** public:
*** 1296,1302 ****
  class mve_function_vpnot : public function_base
  {
  public:
!   CONSTEXPR mve_function_vpnot (void)
    {}
  
    rtx
--- 1296,1302 ----
  class mve_function_vpnot : public function_base
  {
  public:
!   constexpr mve_function_vpnot (void)
    {}
  
    rtx
*************** public:
*** 1315,1321 ****
  class mve_function_vsetq_vgetq_lane : public function_base
  {
  public:
!   CONSTEXPR mve_function_vsetq_vgetq_lane (bool is_get)
      : m_is_get (is_get)
    {}
  
--- 1315,1321 ----
  class mve_function_vsetq_vgetq_lane : public function_base
  {
  public:
!   constexpr mve_function_vsetq_vgetq_lane (bool is_get)
      : m_is_get (is_get)
    {}
  
diff -Nrcpad gcc-17-20260705/gcc/config/arm/arm-mve-builtins-functions.h gcc-17-20260712/gcc/config/arm/arm-mve-builtins-functions.h
*** gcc-17-20260705/gcc/config/arm/arm-mve-builtins-functions.h	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/arm/arm-mve-builtins-functions.h	Sun Jul 12 22:32:07 2026
*************** template<typename T>
*** 32,38 ****
  class quiet : public T
  {
  public:
!   CONSTEXPR quiet () : T () {}
  
    unsigned int
    call_properties (const function_instance &) const override
--- 32,38 ----
  class quiet : public T
  {
  public:
!   constexpr quiet () : T () {}
  
    unsigned int
    call_properties (const function_instance &) const override
*************** public:
*** 53,59 ****
  class unspec_based_mve_function_base : public function_base
  {
  public:
!   CONSTEXPR unspec_based_mve_function_base (rtx_code code_for_sint,
  					    rtx_code code_for_uint,
  					    rtx_code code_for_fp,
  					    int unspec_for_sint,
--- 53,59 ----
  class unspec_based_mve_function_base : public function_base
  {
  public:
!   constexpr unspec_based_mve_function_base (rtx_code code_for_sint,
  					    rtx_code code_for_uint,
  					    rtx_code code_for_fp,
  					    int unspec_for_sint,
*************** unspec_based_mve_function_base::expand_u
*** 209,215 ****
  class unspec_based_mve_function_exact_insn : public unspec_based_mve_function_base
  {
  public:
!   CONSTEXPR unspec_based_mve_function_exact_insn (rtx_code code_for_sint,
  						  rtx_code code_for_uint,
  						  rtx_code code_for_fp,
  						  int unspec_for_n_sint,
--- 209,215 ----
  class unspec_based_mve_function_exact_insn : public unspec_based_mve_function_base
  {
  public:
!   constexpr unspec_based_mve_function_exact_insn (rtx_code code_for_sint,
  						  rtx_code code_for_uint,
  						  rtx_code code_for_fp,
  						  int unspec_for_n_sint,
*************** public:
*** 256,262 ****
  class unspec_mve_function_exact_insn : public unspec_based_mve_function_base
  {
  public:
!   CONSTEXPR unspec_mve_function_exact_insn (int unspec_for_sint,
  					    int unspec_for_uint,
  					    int unspec_for_fp,
  					    int unspec_for_n_sint,
--- 256,262 ----
  class unspec_mve_function_exact_insn : public unspec_based_mve_function_base
  {
  public:
!   constexpr unspec_mve_function_exact_insn (int unspec_for_sint,
  					    int unspec_for_uint,
  					    int unspec_for_fp,
  					    int unspec_for_n_sint,
*************** public:
*** 297,303 ****
  class unspec_mve_function_exact_insn_pred_p : public unspec_based_mve_function_base
  {
  public:
!   CONSTEXPR unspec_mve_function_exact_insn_pred_p (int unspec_for_sint,
  						   int unspec_for_uint,
  						   int unspec_for_fp,
  						   int unspec_for_p_sint,
--- 297,303 ----
  class unspec_mve_function_exact_insn_pred_p : public unspec_based_mve_function_base
  {
  public:
!   constexpr unspec_mve_function_exact_insn_pred_p (int unspec_for_sint,
  						   int unspec_for_uint,
  						   int unspec_for_fp,
  						   int unspec_for_p_sint,
*************** public:
*** 389,395 ****
  class unspec_mve_function_exact_insn_vshl : public unspec_based_mve_function_base
  {
  public:
!   CONSTEXPR unspec_mve_function_exact_insn_vshl (int unspec_for_sint,
  						 int unspec_for_uint,
  						 int unspec_for_n_sint,
  						 int unspec_for_n_uint,
--- 389,395 ----
  class unspec_mve_function_exact_insn_vshl : public unspec_based_mve_function_base
  {
  public:
!   constexpr unspec_mve_function_exact_insn_vshl (int unspec_for_sint,
  						 int unspec_for_uint,
  						 int unspec_for_n_sint,
  						 int unspec_for_n_uint,
*************** public:
*** 477,483 ****
  class unspec_based_mve_function_exact_insn_vbic : public unspec_based_mve_function_base
  {
  public:
!   CONSTEXPR unspec_based_mve_function_exact_insn_vbic (int unspec_for_n_sint,
  						       int unspec_for_n_uint,
  						       int unspec_for_m_sint,
  						       int unspec_for_m_uint,
--- 477,483 ----
  class unspec_based_mve_function_exact_insn_vbic : public unspec_based_mve_function_base
  {
  public:
!   constexpr unspec_based_mve_function_exact_insn_vbic (int unspec_for_n_sint,
  						       int unspec_for_n_uint,
  						       int unspec_for_m_sint,
  						       int unspec_for_m_uint,
*************** public:
*** 531,537 ****
  class unspec_based_mve_function_exact_insn_vorn : public unspec_based_mve_function_base
  {
  public:
!   CONSTEXPR unspec_based_mve_function_exact_insn_vorn (int unspec_for_n_sint,
  						       int unspec_for_n_uint,
  						       int unspec_for_m_sint,
  						       int unspec_for_m_uint,
--- 531,537 ----
  class unspec_based_mve_function_exact_insn_vorn : public unspec_based_mve_function_base
  {
  public:
!   constexpr unspec_based_mve_function_exact_insn_vorn (int unspec_for_n_sint,
  						       int unspec_for_n_uint,
  						       int unspec_for_m_sint,
  						       int unspec_for_m_uint,
*************** public:
*** 581,587 ****
  class unspec_based_mve_function_exact_insn_vcmp : public unspec_based_mve_function_base
  {
  public:
!   CONSTEXPR unspec_based_mve_function_exact_insn_vcmp (rtx_code code_for_sint,
  						       rtx_code code_for_uint,
  						       rtx_code code_for_fp,
  						       int unspec_for_m_sint,
--- 581,587 ----
  class unspec_based_mve_function_exact_insn_vcmp : public unspec_based_mve_function_base
  {
  public:
!   constexpr unspec_based_mve_function_exact_insn_vcmp (rtx_code code_for_sint,
  						       rtx_code code_for_uint,
  						       rtx_code code_for_fp,
  						       int unspec_for_m_sint,
*************** public:
*** 707,713 ****
  class unspec_mve_function_exact_insn_rot : public function_base
  {
  public:
!   CONSTEXPR unspec_mve_function_exact_insn_rot (int unspec_for_sint,
  						int unspec_for_uint,
  						int unspec_for_fp,
  						int unspec_for_m_sint,
--- 707,713 ----
  class unspec_mve_function_exact_insn_rot : public function_base
  {
  public:
!   constexpr unspec_mve_function_exact_insn_rot (int unspec_for_sint,
  						int unspec_for_uint,
  						int unspec_for_fp,
  						int unspec_for_m_sint,
*************** public:
*** 802,808 ****
  class unspec_mve_function_exact_insn_vmull : public function_base
  {
  public:
!   CONSTEXPR unspec_mve_function_exact_insn_vmull (int unspec_for_sint,
  						  int unspec_for_uint,
  						  int unspec_for_m_sint,
  						  int unspec_for_m_uint)
--- 802,808 ----
  class unspec_mve_function_exact_insn_vmull : public function_base
  {
  public:
!   constexpr unspec_mve_function_exact_insn_vmull (int unspec_for_sint,
  						  int unspec_for_uint,
  						  int unspec_for_m_sint,
  						  int unspec_for_m_uint)
*************** public:
*** 872,878 ****
  class unspec_mve_function_exact_insn_vmull_poly : public function_base
  {
  public:
!   CONSTEXPR unspec_mve_function_exact_insn_vmull_poly (int unspec_for_poly,
  						       int unspec_for_m_poly)
      : m_unspec_for_poly (unspec_for_poly),
        m_unspec_for_m_poly (unspec_for_m_poly)
--- 872,878 ----
  class unspec_mve_function_exact_insn_vmull_poly : public function_base
  {
  public:
!   constexpr unspec_mve_function_exact_insn_vmull_poly (int unspec_for_poly,
  						       int unspec_for_m_poly)
      : m_unspec_for_poly (unspec_for_poly),
        m_unspec_for_m_poly (unspec_for_m_poly)
*************** public:
*** 926,932 ****
  class multi_vector_function : public function_base
  {
  public:
!   CONSTEXPR multi_vector_function (unsigned int vectors_per_tuple)
      : m_vectors_per_tuple (vectors_per_tuple) {}
  
    unsigned int
--- 926,932 ----
  class multi_vector_function : public function_base
  {
  public:
!   constexpr multi_vector_function (unsigned int vectors_per_tuple)
      : m_vectors_per_tuple (vectors_per_tuple) {}
  
    unsigned int
*************** public:
*** 945,951 ****
  class full_width_access : public multi_vector_function
  {
  public:
!   CONSTEXPR full_width_access (unsigned int vectors_per_tuple = 1)
      : multi_vector_function (vectors_per_tuple) {}
  
    tree
--- 945,951 ----
  class full_width_access : public multi_vector_function
  {
  public:
!   constexpr full_width_access (unsigned int vectors_per_tuple = 1)
      : multi_vector_function (vectors_per_tuple) {}
  
    tree
*************** public:
*** 972,985 ****
  class load_extending : public function_base
  {
  public:
!   CONSTEXPR load_extending (type_suffix_index signed_memory_type,
  			    type_suffix_index unsigned_memory_type,
  			    type_suffix_index float_memory_type)
      : m_signed_memory_type (signed_memory_type),
        m_unsigned_memory_type (unsigned_memory_type),
        m_float_memory_type (float_memory_type)
    {}
!   CONSTEXPR load_extending (type_suffix_index signed_memory_type,
  			    type_suffix_index unsigned_memory_type)
      : m_signed_memory_type (signed_memory_type),
        m_unsigned_memory_type (unsigned_memory_type),
--- 972,985 ----
  class load_extending : public function_base
  {
  public:
!   constexpr load_extending (type_suffix_index signed_memory_type,
  			    type_suffix_index unsigned_memory_type,
  			    type_suffix_index float_memory_type)
      : m_signed_memory_type (signed_memory_type),
        m_unsigned_memory_type (unsigned_memory_type),
        m_float_memory_type (float_memory_type)
    {}
!   constexpr load_extending (type_suffix_index signed_memory_type,
  			    type_suffix_index unsigned_memory_type)
      : m_signed_memory_type (signed_memory_type),
        m_unsigned_memory_type (unsigned_memory_type),
*************** public:
*** 1029,1035 ****
  class store_truncating : public function_base
  {
  public:
!   CONSTEXPR store_truncating (scalar_mode to_int_mode,
  			      opt_scalar_mode to_float_mode)
      : m_to_int_mode (to_int_mode), m_to_float_mode (to_float_mode)
    {}
--- 1029,1035 ----
  class store_truncating : public function_base
  {
  public:
!   constexpr store_truncating (scalar_mode to_int_mode,
  			      opt_scalar_mode to_float_mode)
      : m_to_int_mode (to_int_mode), m_to_float_mode (to_float_mode)
    {}
*************** public:
*** 1072,1078 ****
  /* Declare the global function base NAME, creating it from an instance
     of class CLASS with constructor arguments ARGS.  */
  #define FUNCTION(NAME, CLASS, ARGS) \
!   namespace { static CONSTEXPR const CLASS NAME##_obj ARGS; } \
    namespace functions { const function_base *const NAME = &NAME##_obj; }
  
  #endif
--- 1072,1078 ----
  /* Declare the global function base NAME, creating it from an instance
     of class CLASS with constructor arguments ARGS.  */
  #define FUNCTION(NAME, CLASS, ARGS) \
!   namespace { static constexpr const CLASS NAME##_obj ARGS; } \
    namespace functions { const function_base *const NAME = &NAME##_obj; }
  
  #endif
diff -Nrcpad gcc-17-20260705/gcc/config/arm/arm-mve-builtins-shapes.cc gcc-17-20260712/gcc/config/arm/arm-mve-builtins-shapes.cc
*** gcc-17-20260705/gcc/config/arm/arm-mve-builtins-shapes.cc	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/arm/arm-mve-builtins-shapes.cc	Sun Jul 12 22:32:07 2026
*************** half_type_suffix (function_resolver &r,
*** 373,379 ****
  /* Declare the function shape NAME, pointing it to an instance
     of class <NAME>_def.  */
  #define SHAPE(NAME)							\
!   static CONSTEXPR const NAME##_def NAME##_obj;				\
    namespace shapes { const function_shape *const NAME = &NAME##_obj; }	\
    extern int __require_trailing_semicolon ATTRIBUTE_UNUSED
  
--- 373,379 ----
  /* Declare the function shape NAME, pointing it to an instance
     of class <NAME>_def.  */
  #define SHAPE(NAME)							\
!   static constexpr const NAME##_def NAME##_obj;				\
    namespace shapes { const function_shape *const NAME = &NAME##_obj; }	\
    extern int __require_trailing_semicolon ATTRIBUTE_UNUSED
  
diff -Nrcpad gcc-17-20260705/gcc/config/arm/arm-mve-builtins.cc gcc-17-20260712/gcc/config/arm/arm-mve-builtins.cc
*** gcc-17-20260705/gcc/config/arm/arm-mve-builtins.cc	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/arm/arm-mve-builtins.cc	Sun Jul 12 22:32:07 2026
*************** struct registered_function_hasher : nofr
*** 93,99 ****
  static bool handle_arm_mve_types_p;
  
  /* Information about each single-predicate or single-vector type.  */
! static CONSTEXPR const vector_type_info vector_types[] = {
  #define DEF_MVE_TYPE(ACLE_NAME, SCALAR_TYPE) \
    { #ACLE_NAME, REQUIRES_FLOAT },
  #include "arm-mve-builtins.def"
--- 93,99 ----
  static bool handle_arm_mve_types_p;
  
  /* Information about each single-predicate or single-vector type.  */
! static constexpr const vector_type_info vector_types[] = {
  #define DEF_MVE_TYPE(ACLE_NAME, SCALAR_TYPE) \
    { #ACLE_NAME, REQUIRES_FLOAT },
  #include "arm-mve-builtins.def"
*************** static const char *const pred_suffixes[N
*** 110,116 ****
  };
  
  /* Static information about each mode_suffix_index.  */
! CONSTEXPR const mode_suffix_info mode_suffixes[] = {
  #define VECTOR_TYPE_none NUM_VECTOR_TYPES
  #define DEF_MVE_MODE(NAME, BASE, DISPLACEMENT, UNITS) \
    { "_" #NAME, VECTOR_TYPE_##BASE, VECTOR_TYPE_##DISPLACEMENT, UNITS_##UNITS },
--- 110,116 ----
  };
  
  /* Static information about each mode_suffix_index.  */
! constexpr const mode_suffix_info mode_suffixes[] = {
  #define VECTOR_TYPE_none NUM_VECTOR_TYPES
  #define DEF_MVE_MODE(NAME, BASE, DISPLACEMENT, UNITS) \
    { "_" #NAME, VECTOR_TYPE_##BASE, VECTOR_TYPE_##DISPLACEMENT, UNITS_##UNITS },
*************** CONSTEXPR const mode_suffix_info mode_su
*** 120,126 ****
  };
  
  /* Static information about each type_suffix_index.  */
! CONSTEXPR const type_suffix_info type_suffixes[NUM_TYPE_SUFFIXES + 1] = {
  #define DEF_MVE_TYPE_SUFFIX(NAME, ACLE_TYPE, CLASS, BITS, MODE)	\
    { "_" #NAME, \
      VECTOR_TYPE_##ACLE_TYPE, \
--- 120,126 ----
  };
  
  /* Static information about each type_suffix_index.  */
! constexpr const type_suffix_info type_suffixes[NUM_TYPE_SUFFIXES + 1] = {
  #define DEF_MVE_TYPE_SUFFIX(NAME, ACLE_TYPE, CLASS, BITS, MODE)	\
    { "_" #NAME, \
      VECTOR_TYPE_##ACLE_TYPE, \
*************** static const predication_index preds_z_o
*** 357,363 ****
    = {PRED_z, PRED_none, NUM_PREDS};
  
  /* A list of all MVE ACLE functions.  */
! static CONSTEXPR const function_group_info function_groups[] = {
  #define DEF_MVE_FUNCTION(NAME, SHAPE, TYPES, PREDS)			\
    { #NAME, &functions::NAME, &shapes::SHAPE, types_##TYPES, preds_##PREDS, \
      REQUIRES_FLOAT },
--- 357,363 ----
    = {PRED_z, PRED_none, NUM_PREDS};
  
  /* A list of all MVE ACLE functions.  */
! static constexpr const function_group_info function_groups[] = {
  #define DEF_MVE_FUNCTION(NAME, SHAPE, TYPES, PREDS)			\
    { #NAME, &functions::NAME, &shapes::SHAPE, types_##TYPES, preds_##PREDS, \
      REQUIRES_FLOAT },
diff -Nrcpad gcc-17-20260705/gcc/config/gcn/gcn-valu.md gcc-17-20260712/gcc/config/gcn/gcn-valu.md
*** gcc-17-20260705/gcc/config/gcn/gcn-valu.md	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/gcn/gcn-valu.md	Sun Jul 12 22:32:07 2026
***************
*** 697,704 ****
     (set_attr "exec" "none")
     (set_attr "laneselect" "write")])
  
- ; FIXME: 64bit operations really should be splitters, but I am not sure how
- ; to represent vertical subregs.
  (define_insn "*vec_set<mode>"
    [(set (match_operand:V_2REG 0 "register_operand"		   "= v")
  	(vec_merge:V_2REG
--- 697,702 ----
***************
*** 714,719 ****
--- 712,732 ----
     (set_attr "exec" "none")
     (set_attr "laneselect" "write")])
  
+ (define_insn "*vec_set<mode>"
+   [(set (match_operand:V_4REG 0 "register_operand"		   "= v")
+ 	(vec_merge:V_4REG
+ 	  (vec_duplicate:V_4REG
+ 	    (match_operand:<SCALAR_MODE> 1 "register_operand"	   " Sv"))
+ 	  (match_operand:V_4REG 3 "gcn_register_or_unspec_operand" " U0")
+ 	  (ashift (const_int 1)
+ 		  (match_operand:SI 2 "gcn_alu_operand"		   "SvB"))))]
+   ""
+   "v_writelane_b32 %L0, %L1, %2\;v_writelane_b32 %H0, %H1, %2\;v_writelane_b32 %J0, %J1, %2\;v_writelane_b32 %K0, %K1, %2"
+   [(set_attr "type" "vmult")
+    (set_attr "length" "32")
+    (set_attr "exec" "none")
+    (set_attr "laneselect" "write")])
+ 
  (define_expand "vec_set<mode>"
    [(set (match_operand:V_MOV 0 "register_operand")
  	(vec_merge:V_MOV
diff -Nrcpad gcc-17-20260705/gcc/config/host-linux.cc gcc-17-20260712/gcc/config/host-linux.cc
*** gcc-17-20260705/gcc/config/host-linux.cc	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/host-linux.cc	Sun Jul 12 22:32:07 2026
***************
*** 78,85 ****
  # define TRY_EMPTY_VM_SPACE	0x60000000
  #elif defined(__s390x__)
  # define TRY_EMPTY_VM_SPACE	0x8000000000
- #elif defined(__s390__)
- # define TRY_EMPTY_VM_SPACE	0x60000000
  #elif defined(__sparc__) && defined(__LP64__)
  # define TRY_EMPTY_VM_SPACE	0x8000000000
  #elif defined(__sparc__)
--- 78,83 ----
diff -Nrcpad gcc-17-20260705/gcc/config/i386/cygming.h gcc-17-20260712/gcc/config/i386/cygming.h
*** gcc-17-20260705/gcc/config/i386/cygming.h	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/i386/cygming.h	Sun Jul 12 22:32:07 2026
*************** along with GCC; see the file COPYING3.
*** 47,58 ****
  #undef  TARGET_ASM_UNWIND_EMIT_BEFORE_INSN
  #define TARGET_ASM_UNWIND_EMIT_BEFORE_INSN  false
  #undef  TARGET_ASM_FUNCTION_END_PROLOGUE
! #define TARGET_ASM_FUNCTION_END_PROLOGUE  i386_pe_seh_end_prologue
  #undef  TARGET_ASM_EMIT_EXCEPT_PERSONALITY
! #define TARGET_ASM_EMIT_EXCEPT_PERSONALITY i386_pe_seh_emit_except_personality
  #undef  TARGET_ASM_INIT_SECTIONS
! #define TARGET_ASM_INIT_SECTIONS  i386_pe_seh_init_sections
! #define SUBTARGET_ASM_UNWIND_INIT  i386_pe_seh_init
  
  #undef DEFAULT_ABI
  #define DEFAULT_ABI (TARGET_64BIT ? MS_ABI : SYSV_ABI)
--- 47,58 ----
  #undef  TARGET_ASM_UNWIND_EMIT_BEFORE_INSN
  #define TARGET_ASM_UNWIND_EMIT_BEFORE_INSN  false
  #undef  TARGET_ASM_FUNCTION_END_PROLOGUE
! #define TARGET_ASM_FUNCTION_END_PROLOGUE  mingw_pe_seh_end_prologue
  #undef  TARGET_ASM_EMIT_EXCEPT_PERSONALITY
! #define TARGET_ASM_EMIT_EXCEPT_PERSONALITY mingw_pe_seh_emit_except_personality
  #undef  TARGET_ASM_INIT_SECTIONS
! #define TARGET_ASM_INIT_SECTIONS  mingw_pe_seh_init_sections
! #define SUBTARGET_ASM_UNWIND_INIT  mingw_pe_seh_init
  
  #undef DEFAULT_ABI
  #define DEFAULT_ABI (TARGET_64BIT ? MS_ABI : SYSV_ABI)
*************** do {						\
*** 314,331 ****
    do								\
      {								\
        mingw_pe_declare_type (FILE, NAME, 0, 1);		\
!       i386_pe_seh_cold_init (FILE, NAME);			\
        ASM_OUTPUT_LABEL (FILE, NAME);				\
      }								\
    while (0)
  
  #undef ASM_DECLARE_FUNCTION_SIZE
  #define ASM_DECLARE_FUNCTION_SIZE(FILE,NAME,DECL) \
!   i386_pe_end_function (FILE, NAME, DECL)
  
  #undef ASM_DECLARE_COLD_FUNCTION_SIZE
  #define ASM_DECLARE_COLD_FUNCTION_SIZE(FILE,NAME,DECL) \
!   i386_pe_end_cold_function (FILE, NAME, DECL)
  
  /* Add an external function to the list of functions to be declared at
     the end of the file.  */
--- 314,331 ----
    do								\
      {								\
        mingw_pe_declare_type (FILE, NAME, 0, 1);		\
!       mingw_pe_seh_cold_init (FILE, NAME);			\
        ASM_OUTPUT_LABEL (FILE, NAME);				\
      }								\
    while (0)
  
  #undef ASM_DECLARE_FUNCTION_SIZE
  #define ASM_DECLARE_FUNCTION_SIZE(FILE,NAME,DECL) \
!   mingw_pe_end_function (FILE, NAME, DECL)
  
  #undef ASM_DECLARE_COLD_FUNCTION_SIZE
  #define ASM_DECLARE_COLD_FUNCTION_SIZE(FILE,NAME,DECL) \
!   mingw_pe_end_cold_function (FILE, NAME, DECL)
  
  /* Add an external function to the list of functions to be declared at
     the end of the file.  */
diff -Nrcpad gcc-17-20260705/gcc/config/i386/i386-expand.cc gcc-17-20260712/gcc/config/i386/i386-expand.cc
*** gcc-17-20260705/gcc/config/i386/i386-expand.cc	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/i386/i386-expand.cc	Sun Jul 12 22:32:07 2026
*************** along with GCC; see the file COPYING3.
*** 94,99 ****
--- 94,100 ----
  #include "i386-builtins.h"
  #include "i386-expand.h"
  #include "asan.h"
+ #include "function-abi.h"
  
  /* Split one or more double-mode RTL references into pairs of half-mode
     references.  The RTL can be REG, offsettable MEM, integer constant, or
*************** construct_plt_address (rtx symbol)
*** 11329,11345 ****
    return tmp;
  }
  
- /* Additional registers that are clobbered by SYSV calls.  */
- 
- static int const x86_64_ms_sysv_extra_clobbered_registers
- 		 [NUM_X86_64_MS_CLOBBERED_REGS] =
- {
-   SI_REG, DI_REG,
-   XMM6_REG, XMM7_REG,
-   XMM8_REG, XMM9_REG, XMM10_REG, XMM11_REG,
-   XMM12_REG, XMM13_REG, XMM14_REG, XMM15_REG
- };
- 
  rtx_insn *
  ix86_expand_call (rtx retval, rtx fnaddr, rtx callarg1,
  		  rtx callarg2,
--- 11330,11335 ----
*************** ix86_expand_call (rtx retval, rtx fnaddr
*** 11349,11355 ****
    rtx use = NULL, call;
    unsigned int vec_len = 0;
    tree fndecl;
-   bool call_no_callee_saved_registers = false;
  
    if (SYMBOL_REF_P (XEXP (fnaddr, 0)))
      {
--- 11339,11344 ----
*************** ix86_expand_call (rtx retval, rtx fnaddr
*** 11359,11384 ****
  	  if (lookup_attribute ("interrupt",
  				TYPE_ATTRIBUTES (TREE_TYPE (fndecl))))
  	    error ("interrupt service routine cannot be called directly");
- 	  else if (ix86_type_no_callee_saved_registers_p (TREE_TYPE (fndecl)))
- 	    call_no_callee_saved_registers = true;
  	  if (fndecl == current_function_decl
  	      && decl_binds_to_current_def_p (fndecl))
  	    cfun->machine->recursive_function = true;
  	}
      }
    else
!     {
!       if (MEM_P (fnaddr))
! 	{
! 	  tree mem_expr = MEM_EXPR (fnaddr);
! 	  if (mem_expr != nullptr
! 	      && TREE_CODE (mem_expr) == MEM_REF
! 	      && ix86_type_no_callee_saved_registers_p (TREE_TYPE (mem_expr)))
! 	    call_no_callee_saved_registers = true;
! 	}
! 
!       fndecl = NULL_TREE;
!     }
  
    if (pop == const0_rtx)
      pop = NULL;
--- 11348,11360 ----
  	  if (lookup_attribute ("interrupt",
  				TYPE_ATTRIBUTES (TREE_TYPE (fndecl))))
  	    error ("interrupt service routine cannot be called directly");
  	  if (fndecl == current_function_decl
  	      && decl_binds_to_current_def_p (fndecl))
  	    cfun->machine->recursive_function = true;
  	}
      }
    else
!     fndecl = NULL_TREE;
  
    if (pop == const0_rtx)
      pop = NULL;
*************** ix86_expand_call (rtx retval, rtx fnaddr
*** 11515,11576 ****
        vec[vec_len++] = pop;
      }
  
!   static const char ix86_call_used_regs[] = CALL_USED_REGISTERS;
! 
!   if ((cfun->machine->call_saved_registers
!        == TYPE_NO_CALLER_SAVED_REGISTERS)
!       && (!fndecl
! 	  || (!TREE_THIS_VOLATILE (fndecl)
! 	      && !lookup_attribute ("no_caller_saved_registers",
! 				    TYPE_ATTRIBUTES (TREE_TYPE (fndecl))))))
!     {
!       bool is_64bit_ms_abi = (TARGET_64BIT
! 			      && ix86_function_abi (fndecl) == MS_ABI);
!       char c_mask = CALL_USED_REGISTERS_MASK (is_64bit_ms_abi);
! 
!       /* If there are no caller-saved registers, add all registers
! 	 that are clobbered by the call which returns.  */
!       for (int i = 0; i < FIRST_PSEUDO_REGISTER; i++)
! 	if (!fixed_regs[i]
! 	    && (ix86_call_used_regs[i] == 1
! 		|| (ix86_call_used_regs[i] & c_mask))
! 	    && !STACK_REGNO_P (i)
! 	    && !MMX_REGNO_P (i))
! 	  clobber_reg (&use,
! 		       gen_rtx_REG (GET_MODE (regno_reg_rtx[i]), i));
!     }
!   else if (TARGET_64BIT_MS_ABI
! 	   && (!callarg2 || INTVAL (callarg2) != -2))
      {
!       unsigned i;
  
!       for (i = 0; i < NUM_X86_64_MS_CLOBBERED_REGS; i++)
! 	{
! 	  int regno = x86_64_ms_sysv_extra_clobbered_registers[i];
! 	  machine_mode mode = SSE_REGNO_P (regno) ? TImode : DImode;
  
! 	  clobber_reg (&use, gen_rtx_REG (mode, regno));
! 	}
  
!       /* Set here, but it may get cleared later.  */
!       if (TARGET_CALL_MS2SYSV_XLOGUES)
  	{
! 	  if (!TARGET_SSE)
! 	    ;
! 
! 	  /* Don't break hot-patched functions.  */
! 	  else if (ix86_function_ms_hook_prologue (current_function_decl))
! 	    ;
! 
! 	  /* TODO: Cases not yet examined.  */
! 	  else if (flag_split_stack)
! 	    warn_once_call_ms2sysv_xlogues ("-fsplit-stack");
! 
! 	  else
! 	    {
! 	      gcc_assert (!reload_completed);
! 	      cfun->machine->call_ms2sysv = true;
! 	    }
  	}
      }
  
--- 11491,11516 ----
        vec[vec_len++] = pop;
      }
  
!   /* Set here, but it may get cleared later.  */
!   if (TARGET_64BIT_MS_ABI
!       && (!callarg2 || INTVAL (callarg2) != -2)
!       && TARGET_CALL_MS2SYSV_XLOGUES)
      {
!       if (!TARGET_SSE)
! 	;
  
!       /* Don't break hot-patched functions.  */
!       else if (ix86_function_ms_hook_prologue (current_function_decl))
! 	;
  
!       /* TODO: Cases not yet examined.  */
!       else if (flag_split_stack)
! 	warn_once_call_ms2sysv_xlogues ("-fsplit-stack");
  
!       else
  	{
! 	  gcc_assert (!reload_completed);
! 	  cfun->machine->call_ms2sysv = true;
  	}
      }
  
*************** ix86_expand_call (rtx retval, rtx fnaddr
*** 11588,11612 ****
        clobber_reg (&use, gen_rtx_REG (DImode, R10_REG));
      }
  
-   if (call_no_callee_saved_registers)
-     {
-       /* After calling a no_callee_saved_registers function, all
- 	 registers may be clobbered.  Clobber all registers that are
- 	 not used by the callee.  */
-       bool is_64bit_ms_abi = (TARGET_64BIT
- 			      && ix86_function_abi (fndecl) == MS_ABI);
-       char c_mask = CALL_USED_REGISTERS_MASK (is_64bit_ms_abi);
-       for (int i = 0; i < FIRST_PSEUDO_REGISTER; i++)
- 	if (!fixed_regs[i]
- 	    && i != HARD_FRAME_POINTER_REGNUM
- 	    && !(ix86_call_used_regs[i] == 1
- 		 || (ix86_call_used_regs[i] & c_mask))
- 	    && !STACK_REGNO_P (i)
- 	    && !MMX_REGNO_P (i))
- 	  clobber_reg (&use,
- 		       gen_rtx_REG (GET_MODE (regno_reg_rtx[i]), i));
-     }
- 
    if (vec_len > 1)
      call = gen_rtx_PARALLEL (VOIDmode, gen_rtvec_v (vec_len, vec));
    rtx_insn *call_insn = emit_call_insn (call);
--- 11528,11533 ----
*************** ix86_gen_ccmp_first (rtx_insn **prep_seq
*** 27373,27384 ****
      op_mode = GET_MODE (op1);
  
    /* We only supports following scalar comparisons that use just 1
!      instruction: DI/SI/QI/HI/DF/SF/HF.
       Unordered/Ordered compare cannot be correctly identified by
       ccmp so they are not supported.  */
!   if (!(op_mode == DImode || op_mode == SImode || op_mode == HImode
! 	|| op_mode == QImode || op_mode == DFmode || op_mode == SFmode
! 	|| op_mode == HFmode)
        || code == ORDERED
        || code == UNORDERED)
      {
--- 27294,27308 ----
      op_mode = GET_MODE (op1);
  
    /* We only supports following scalar comparisons that use just 1
!      instruction: DI/SI/HI/QI/XF/DF/SF/HF.
       Unordered/Ordered compare cannot be correctly identified by
       ccmp so they are not supported.  */
!   if (!(op_mode == DImode || op_mode == SImode
! 	|| op_mode == HImode || op_mode == QImode
! 	|| ((op_mode == XFmode || op_mode == DFmode || op_mode == SFmode)
! 	    && (TARGET_80387
! 		|| (SSE_FLOAT_MODE_P (op_mode) && TARGET_SSE_MATH)))
! 	|| (op_mode == HFmode && TARGET_AVX512FP16))
        || code == ORDERED
        || code == UNORDERED)
      {
diff -Nrcpad gcc-17-20260705/gcc/config/i386/i386-features.cc gcc-17-20260712/gcc/config/i386/i386-features.cc
*** gcc-17-20260705/gcc/config/i386/i386-features.cc	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/i386/i386-features.cc	Sun Jul 12 22:32:07 2026
*************** along with GCC; see the file COPYING3.
*** 90,95 ****
--- 90,96 ----
  #include "tree-vector-builder.h"
  #include "debug.h"
  #include "dwarf2out.h"
+ #include "function-abi.h"
  #include "i386-builtins.h"
  #include "i386-features.h"
  #include "i386-expand.h"
*************** ix86_emit_tls_call (rtx tls_set, x86_cse
*** 4348,4358 ****
        /* Get all live caller-saved registers for TLS_GD and TLS_LD_BASE
  	 instructions.  */
        if (kind != X86_CSE_TLSDESC)
! 	for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
! 	  if (call_used_regs[i]
! 	      && !fixed_regs[i]
! 	      && bitmap_bit_p (in, i))
! 	    bitmap_set_bit (live_caller_saved_regs, i);
  
        if (bitmap_empty_p (live_caller_saved_regs))
  	{
--- 4349,4363 ----
        /* Get all live caller-saved registers for TLS_GD and TLS_LD_BASE
  	 instructions.  */
        if (kind != X86_CSE_TLSDESC)
! 	{
! 	  const predefined_function_abi &tls_abi
! 	    = ix86_tls_get_addr_abi ();
! 	  for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
! 	    if (tls_abi.clobbers_full_reg_p (i)
! 		&& !fixed_regs[i]
! 		&& bitmap_bit_p (in, i))
! 	      bitmap_set_bit (live_caller_saved_regs, i);
! 	}
  
        if (bitmap_empty_p (live_caller_saved_regs))
  	{
*************** ix86_place_single_tls_call (rtx dest, rt
*** 4525,4530 ****
--- 4530,4536 ----
  
        symbol = XVECEXP (val, 0, 0);
        tls = gen_tls_global_dynamic_64 (Pmode, rax, symbol, caddr, rdi);
+       CALL_INSN_ABI_ID (tls) = ix86_tls_get_addr_abi ().id ();
  
        if (GET_MODE (symbol) != Pmode)
  	symbol = gen_rtx_ZERO_EXTEND (Pmode, symbol);
*************** ix86_place_single_tls_call (rtx dest, rt
*** 4537,4542 ****
--- 4543,4549 ----
        caddr = ix86_tls_get_addr ();
  
        tls = gen_tls_local_dynamic_base_64 (Pmode, rax, caddr, rdi);
+       CALL_INSN_ABI_ID (tls) = ix86_tls_get_addr_abi ().id ();
  
        /* Attach a unique REG_EQUAL to DEST, to allow the RTL optimizers
  	 to share the LD_BASE result with other LD model accesses.  */
diff -Nrcpad gcc-17-20260705/gcc/config/i386/i386-options.cc gcc-17-20260712/gcc/config/i386/i386-options.cc
*** gcc-17-20260705/gcc/config/i386/i386-options.cc	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/i386/i386-options.cc	Sun Jul 12 22:32:07 2026
*************** ix86_simd_clone_adjust (struct cgraph_no
*** 3265,3277 ****
--- 3265,3317 ----
    ix86_set_current_function (node->decl);
  }
  
+ /* Return the call_saved_registers_type for function type FNTYPE.
+    If LOC is nonnull, report incompatible attributes against that
+    location, otherwise remain silent.  */
+ 
+ call_saved_registers_type
+ ix86_fntype_call_saved_registers (const_tree fntype, location_t *loc)
+ {
+   auto call_saved_registers = TYPE_DEFAULT_CALL_SAVED_REGISTERS;
+   const char *interrupt_conflict = nullptr;
+   if (lookup_attribute ("preserve_none", TYPE_ATTRIBUTES (fntype)))
+     {
+       call_saved_registers = TYPE_PRESERVE_NONE;
+       interrupt_conflict = "preserve_none";
+     }
+   else if (lookup_attribute ("no_callee_saved_registers",
+ 			     TYPE_ATTRIBUTES (fntype)))
+     {
+       call_saved_registers = TYPE_NO_CALLEE_SAVED_REGISTERS;
+       interrupt_conflict = "no_callee_saved_registers";
+     }
+   else if (lookup_attribute ("no_caller_saved_registers",
+ 			     TYPE_ATTRIBUTES (fntype)))
+     call_saved_registers = TYPE_NO_CALLER_SAVED_REGISTERS;
+ 
+   if (lookup_attribute ("interrupt", TYPE_ATTRIBUTES (fntype)))
+     {
+       if (loc && interrupt_conflict)
+ 	error_at (*loc, "%qs and %qs attributes are not compatible",
+ 		  "interrupt", interrupt_conflict);
+       return TYPE_NO_CALLER_SAVED_REGISTERS;
+     }
  
+   return call_saved_registers;
+ }
  
  /* Set the func_type field from the function FNDECL.  */
  
  static void
  ix86_set_func_type (tree fndecl)
  {
+   if (cfun->machine->func_type != TYPE_UNKNOWN)
+     return;
+ 
+   cfun->machine->call_saved_registers
+     = ix86_fntype_call_saved_registers (TREE_TYPE (fndecl),
+ 					&DECL_SOURCE_LOCATION (fndecl));
+ 
    /* No need to save and restore callee-saved registers for a noreturn
       function with nothrow or compiled with -fno-exceptions unless when
       compiling with -O0 or -Og, except that it interferes with debugging
*************** ix86_set_func_type (tree fndecl)
*** 3287,3360 ****
       function is marked with TREE_THIS_VOLATILE in the IR output, which
       leads to the incompatible attribute error in LTO1.  Ignore the
       interrupt function in this case.  */
!   enum call_saved_registers_type no_callee_saved_registers
!     = TYPE_DEFAULT_CALL_SAVED_REGISTERS;
!   if (lookup_attribute ("preserve_none",
! 			     TYPE_ATTRIBUTES (TREE_TYPE (fndecl))))
!     no_callee_saved_registers = TYPE_PRESERVE_NONE;
!   else if ((lookup_attribute ("no_callee_saved_registers",
! 			      TYPE_ATTRIBUTES (TREE_TYPE (fndecl))))
! 	   || (ix86_noreturn_no_callee_saved_registers
! 	       && TREE_THIS_VOLATILE (fndecl)
! 	       && optimize
! 	       && !optimize_debug
! 	       && (TREE_NOTHROW (fndecl) || !flag_exceptions)
! 	       && !lookup_attribute ("interrupt",
! 				     TYPE_ATTRIBUTES (TREE_TYPE (fndecl)))
! 	       && !lookup_attribute ("no_caller_saved_registers",
! 				 TYPE_ATTRIBUTES (TREE_TYPE (fndecl)))))
!     no_callee_saved_registers = TYPE_NO_CALLEE_SAVED_REGISTERS;
  
!   if (cfun->machine->func_type == TYPE_UNKNOWN)
      {
!       if (lookup_attribute ("interrupt",
! 			    TYPE_ATTRIBUTES (TREE_TYPE (fndecl))))
! 	{
! 	  if (ix86_function_naked (fndecl))
! 	    error_at (DECL_SOURCE_LOCATION (fndecl),
! 		      "interrupt and naked attributes are not compatible");
! 
! 	  if (no_callee_saved_registers)
! 	    {
! 	      const char *attr;
! 	      if (no_callee_saved_registers == TYPE_PRESERVE_NONE)
! 		attr = "preserve_none";
! 	      else
! 		attr = "no_callee_saved_registers";
! 	      error_at (DECL_SOURCE_LOCATION (fndecl),
! 			"%qs and %qs attributes are not compatible",
! 			"interrupt", attr);
! 	    }
  
! 	  int nargs = 0;
! 	  for (tree arg = DECL_ARGUMENTS (fndecl);
! 	       arg;
! 	       arg = TREE_CHAIN (arg))
! 	    nargs++;
! 	  cfun->machine->call_saved_registers
! 	    = TYPE_NO_CALLER_SAVED_REGISTERS;
! 	  cfun->machine->func_type
! 	    = nargs == 2 ? TYPE_EXCEPTION : TYPE_INTERRUPT;
  
! 	  ix86_optimize_mode_switching[X86_DIRFLAG] = 1;
  
! 	  /* Only dwarf2out.cc can handle -WORD(AP) as a pointer argument.  */
! 	  if (write_symbols != NO_DEBUG && write_symbols != DWARF2_DEBUG)
! 	    sorry ("only DWARF debug format is supported for interrupt "
! 		   "service routine");
! 	}
!       else
! 	{
! 	  cfun->machine->func_type = TYPE_NORMAL;
! 	  if (no_callee_saved_registers)
! 	    cfun->machine->call_saved_registers
! 	      = no_callee_saved_registers;
! 	  else if (lookup_attribute ("no_caller_saved_registers",
! 				     TYPE_ATTRIBUTES (TREE_TYPE (fndecl))))
! 	    cfun->machine->call_saved_registers
! 	      = TYPE_NO_CALLER_SAVED_REGISTERS;
! 	}
      }
  }
  
  /* Set the indirect_branch_type field from the function FNDECL.  */
--- 3327,3363 ----
       function is marked with TREE_THIS_VOLATILE in the IR output, which
       leads to the incompatible attribute error in LTO1.  Ignore the
       interrupt function in this case.  */
!   if (cfun->machine->call_saved_registers == TYPE_DEFAULT_CALL_SAVED_REGISTERS
!       && ix86_noreturn_no_callee_saved_registers
!       && TREE_THIS_VOLATILE (fndecl)
!       && optimize
!       && !optimize_debug
!       && (TREE_NOTHROW (fndecl) || !flag_exceptions))
!     cfun->machine->call_saved_registers = TYPE_NO_CALLEE_SAVED_REGISTERS;
  
!   if (lookup_attribute ("interrupt",
! 			TYPE_ATTRIBUTES (TREE_TYPE (fndecl))))
      {
!       if (ix86_function_naked (fndecl))
! 	error_at (DECL_SOURCE_LOCATION (fndecl),
! 		  "interrupt and naked attributes are not compatible");
  
!       int nargs = 0;
!       for (tree arg = DECL_ARGUMENTS (fndecl);
! 	   arg;
! 	   arg = TREE_CHAIN (arg))
! 	nargs++;
!       cfun->machine->func_type = nargs == 2 ? TYPE_EXCEPTION : TYPE_INTERRUPT;
  
!       ix86_optimize_mode_switching[X86_DIRFLAG] = 1;
  
!       /* Only dwarf2out.cc can handle -WORD(AP) as a pointer argument.  */
!       if (write_symbols != NO_DEBUG && write_symbols != DWARF2_DEBUG)
! 	sorry ("only DWARF debug format is supported for interrupt "
! 	       "service routine");
      }
+   else
+     cfun->machine->func_type = TYPE_NORMAL;
  }
  
  /* Set the indirect_branch_type field from the function FNDECL.  */
*************** ix86_set_current_function (tree fndecl)
*** 3522,3542 ****
      }
    ix86_previous_fndecl = fndecl;
  
-   static call_saved_registers_type prev_call_saved_registers;
- 
-   /* 64-bit MS and SYSV ABI have different set of call used registers.
-      Avoid expensive re-initialization of init_regs each time we switch
-      function context.  */
-   if (TARGET_64BIT
-       && (call_used_or_fixed_reg_p (SI_REG)
- 	  == (cfun->machine->call_abi == MS_ABI)))
-     reinit_regs ();
-   /* Need to re-initialize init_regs if caller-saved registers are
-      changed.  */
-   else if (prev_call_saved_registers
- 	   != cfun->machine->call_saved_registers)
-     reinit_regs ();
- 
    if (cfun->machine->func_type != TYPE_NORMAL
        || (cfun->machine->call_saved_registers
  	  == TYPE_NO_CALLER_SAVED_REGISTERS))
--- 3525,3530 ----
*************** ix86_set_current_function (tree fndecl)
*** 3584,3591 ****
  	    = TYPE_DEFAULT_CALL_SAVED_REGISTERS;
  	}
      }
- 
-   prev_call_saved_registers = cfun->machine->call_saved_registers;
  }
  
  /* Implement the TARGET_OFFLOAD_OPTIONS hook.  */
--- 3572,3577 ----
diff -Nrcpad gcc-17-20260705/gcc/config/i386/i386-protos.h gcc-17-20260712/gcc/config/i386/i386-protos.h
*** gcc-17-20260705/gcc/config/i386/i386-protos.h	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/i386/i386-protos.h	Sun Jul 12 22:32:07 2026
*************** extern enum calling_abi ix86_function_ty
*** 47,52 ****
--- 47,54 ----
  extern bool ix86_use_pseudo_pic_reg (void);
  
  extern void ix86_reset_previous_fndecl (void);
+ extern call_saved_registers_type
+   ix86_fntype_call_saved_registers (const_tree, location_t * = nullptr);
  
  extern bool ix86_using_red_zone (void);
  
*************** extern tree ix86_valid_target_attribute_
*** 284,290 ****
  					      struct gcc_options *,
  					      struct gcc_options *, bool);
  extern unsigned int ix86_get_callcvt (const_tree);
- extern bool ix86_type_no_callee_saved_registers_p (const_tree);
  
  #endif
  
--- 286,291 ----
*************** extern bool ix86_gpr_tls_address_pattern
*** 293,298 ****
--- 294,301 ----
  extern bool ix86_tls_address_pattern_p (rtx);
  extern rtx ix86_rewrite_tls_address (rtx);
  extern rtx ix86_tls_get_addr (void);
+ class predefined_function_abi;
+ extern const predefined_function_abi & ix86_tls_get_addr_abi (void);
  
  extern void ix86_expand_vector_init (bool, rtx, rtx);
  extern void ix86_expand_vector_set (bool, rtx, rtx, int);
*************** extern void i386_pe_asm_output_aligned_d
*** 329,346 ****
  						    HOST_WIDE_INT,
  						    HOST_WIDE_INT);
  extern void i386_pe_start_function (FILE *, const char *, tree);
- extern void i386_pe_end_function (FILE *, const char *, tree);
- extern void i386_pe_end_cold_function (FILE *, const char *, tree);
  extern void i386_pe_assemble_visibility (tree, int);
  extern tree i386_pe_mangle_decl_assembler_name (tree, tree);
  extern tree i386_pe_mangle_assembler_name (const char *);
  
- extern void i386_pe_seh_init (FILE *);
- extern void i386_pe_seh_end_prologue (FILE *);
- extern void i386_pe_seh_cold_init (FILE *, const char *);
  extern void i386_pe_seh_unwind_emit (FILE *, rtx_insn *);
- extern void i386_pe_seh_emit_except_personality (rtx);
- extern void i386_pe_seh_init_sections (void);
  
  /* In winnt-cxx.cc and winnt-stubs.cc  */
  extern void i386_pe_adjust_class_at_definition (tree);
--- 332,342 ----
diff -Nrcpad gcc-17-20260705/gcc/config/i386/i386.cc gcc-17-20260712/gcc/config/i386/i386.cc
*** gcc-17-20260705/gcc/config/i386/i386.cc	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/i386/i386.cc	Sun Jul 12 22:32:07 2026
*************** along with GCC; see the file COPYING3.
*** 107,112 ****
--- 107,113 ----
  
  static void ix86_print_operand_address_as (FILE *, rtx, addr_space_t, bool);
  static void ix86_emit_restore_reg_using_pop (rtx, bool = false);
+ static const predefined_function_abi & ix86_alternate_abi (void);
  
  
  #ifndef CHECK_STACK_LIMIT
*************** ix86_conditional_register_usage (void)
*** 503,519 ****
  {
    int i, c_mask;
  
-   /* If there are no caller-saved registers, preserve all registers.
-      except fixed_regs and registers used for function return value
-      since aggregate_value_p checks call_used_regs[regno] on return
-      value.  */
-   if (cfun
-       && (cfun->machine->call_saved_registers
- 	  == TYPE_NO_CALLER_SAVED_REGISTERS))
-     for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
-       if (!fixed_regs[i] && !ix86_function_value_regno_p (i))
- 	call_used_regs[i] = 0;
- 
    /* For 32-bit targets, disable the REX registers.  */
    if (! TARGET_64BIT)
      {
--- 504,509 ----
*************** ix86_conditional_register_usage (void)
*** 525,532 ****
  	CLEAR_HARD_REG_BIT (accessible_reg_set, i);
      }
  
!   /*  See the definition of CALL_USED_REGISTERS in i386.h.  */
!   c_mask = CALL_USED_REGISTERS_MASK (TARGET_64BIT_MS_ABI);
  
    CLEAR_HARD_REG_SET (reg_class_contents[(int)CLOBBERED_REGS]);
  
--- 515,524 ----
  	CLEAR_HARD_REG_BIT (accessible_reg_set, i);
      }
  
!   /* Set up the call-used registers based on the system ABI (ix86_abi).
! 
!      See the definition of CALL_USED_REGISTERS in i386.h.  */
!   c_mask = CALL_USED_REGISTERS_MASK (TARGET_64BIT && ix86_abi == MS_ABI);
  
    CLEAR_HARD_REG_SET (reg_class_contents[(int)CLOBBERED_REGS]);
  
*************** x86_64_elf_unique_section (tree decl, in
*** 932,944 ****
  /* Return true if TYPE has no_callee_saved_registers or preserve_none
     attribute.  */
  
! bool
! ix86_type_no_callee_saved_registers_p (const_tree type)
  {
!   return (lookup_attribute ("no_callee_saved_registers",
! 			    TYPE_ATTRIBUTES (type)) != NULL
! 	  || lookup_attribute ("preserve_none",
! 			       TYPE_ATTRIBUTES (type)) != NULL);
  }
  
  #ifdef COMMON_ASM_OP
--- 924,934 ----
  /* Return true if TYPE has no_callee_saved_registers or preserve_none
     attribute.  */
  
! static bool
! ix86_type_no_callee_saved_registers_p (const_tree fntype)
  {
!   auto type = ix86_fntype_call_saved_registers (fntype);
!   return type == TYPE_PRESERVE_NONE || type == TYPE_NO_CALLEE_SAVED_REGISTERS;
  }
  
  #ifdef COMMON_ASM_OP
*************** ix86_function_arg (cumulative_args_t cum
*** 3603,3611 ****
  
    if (TARGET_64BIT)
      {
!       enum calling_abi call_abi = cum ? cum->call_abi : ix86_abi;
! 
!       if (call_abi == MS_ABI)
  	reg = function_arg_ms_64 (cum, mode, arg.mode, arg.named,
  				  arg.type, bytes);
        else
--- 3593,3599 ----
  
    if (TARGET_64BIT)
      {
!       if (cum->call_abi == MS_ABI)
  	reg = function_arg_ms_64 (cum, mode, arg.mode, arg.named,
  				  arg.type, bytes);
        else
*************** ix86_function_value_regno_p (const unsig
*** 3875,3884 ****
        /* Complex values are returned in %st(0)/%st(1) pair.  */
      case ST0_REG:
      case ST1_REG:
!       /* TODO: The function should depend on current function ABI but
!        builtins.cc would need updating then. Therefore we use the
!        default ABI.  */
!       if (TARGET_64BIT && ix86_cfun_abi () == MS_ABI)
  	return false;
        return TARGET_FLOAT_RETURNS_IN_80387;
  
--- 3863,3872 ----
        /* Complex values are returned in %st(0)/%st(1) pair.  */
      case ST0_REG:
      case ST1_REG:
!       /* TODO: An ABI identifier should be passed as a parameter.
! 	 For now, most callers, including those in builtins.cc,
! 	 expect us to use the default ABI.  */
!       if (TARGET_64BIT && ix86_abi == MS_ABI)
  	return false;
        return TARGET_FLOAT_RETURNS_IN_80387;
  
*************** ix86_hard_regno_scratch_ok (unsigned int
*** 6787,6794 ****
  bool
  ix86_save_reg (unsigned int regno, bool maybe_eh_return, bool ignore_outlined)
  {
-   rtx reg;
- 
    /* Save and restore DRAP register between prologue and epilogue so
       that stack pointer can be restored.  */
    if (crtl->drap_reg
--- 6775,6780 ----
*************** ix86_save_reg (unsigned int regno, bool
*** 6796,6836 ****
        && !cfun->machine->no_drap_save_restore)
      return true;
  
!   switch (cfun->machine->call_saved_registers)
!     {
!     case TYPE_DEFAULT_CALL_SAVED_REGISTERS:
!       break;
! 
!     case TYPE_NO_CALLER_SAVED_REGISTERS:
!       /* If there are no caller-saved registers, we preserve all
! 	 registers, except for MMX and x87 registers which aren't
! 	 supported when saving and restoring registers.  Don't
! 	 explicitly save SP register since it is always preserved.
! 
! 	 Don't preserve registers used for function return value.  */
!       reg = crtl->return_rtx;
!       if (reg)
! 	{
! 	  unsigned int i = REGNO (reg);
! 	  unsigned int nregs = REG_NREGS (reg);
! 	  while (nregs-- > 0)
! 	    if ((i + nregs) == regno)
! 	      return false;
! 	}
! 
!       return (df_regs_ever_live_p (regno)
! 	      && !fixed_regs[regno]
! 	      && !STACK_REGNO_P (regno)
! 	      && !MMX_REGNO_P (regno)
! 	      && (regno != HARD_FRAME_POINTER_REGNUM
! 		  || !frame_pointer_needed));
! 
!     case TYPE_NO_CALLEE_SAVED_REGISTERS:
!     case TYPE_PRESERVE_NONE:
!       if (regno != HARD_FRAME_POINTER_REGNUM)
! 	return false;
!       break;
!     }
  
    if (regno == REAL_PIC_OFFSET_TABLE_REGNUM
        && pic_offset_table_rtx)
--- 6782,6793 ----
        && !cfun->machine->no_drap_save_restore)
      return true;
  
!   /* ??? Treat no_callee_saved_registers as a special case in order
!      to cope with -mnoreturn-no-callee-saved-registers, which is not
!      reflected in crtl->abi.  */
!   if (cfun->machine->call_saved_registers == TYPE_NO_CALLEE_SAVED_REGISTERS
!       && regno != HARD_FRAME_POINTER_REGNUM)
!     return false;
  
    if (regno == REAL_PIC_OFFSET_TABLE_REGNUM
        && pic_offset_table_rtx)
*************** ix86_save_reg (unsigned int regno, bool
*** 6872,6878 ****
      }
  
    return (df_regs_ever_live_p (regno)
! 	  && !call_used_or_fixed_reg_p (regno)
  	  && (regno != HARD_FRAME_POINTER_REGNUM || !frame_pointer_needed));
  }
  
--- 6829,6836 ----
      }
  
    return (df_regs_ever_live_p (regno)
! 	  && !fixed_regs[regno]
! 	  && !crtl->abi->clobbers_full_reg_p (regno)
  	  && (regno != HARD_FRAME_POINTER_REGNUM || !frame_pointer_needed));
  }
  
*************** output_probe_stack_range (rtx reg, rtx e
*** 8628,8848 ****
    return "";
  }
  
! /* Data passed to ix86_update_stack_alignment.  */
! struct stack_access_data
! {
!   /* The stack access register.  */
!   const_rtx reg;
!   /* Pointer to stack alignment.  */
!   unsigned int *stack_alignment;
! };
! 
! /* Return true if OP references an argument passed on stack.  */
! 
! static bool
! ix86_argument_passed_on_stack_p (const_rtx op)
! {
!   tree mem_expr = MEM_EXPR (op);
!   if (mem_expr)
!     {
!       tree var = get_base_address (mem_expr);
!       return TREE_CODE (var) == PARM_DECL;
!     }
!   return false;
! }
! 
! /* Update the maximum stack slot alignment from memory alignment in PAT.  */
! 
! static void
! ix86_update_stack_alignment (rtx, const_rtx pat, void *data)
! {
!   /* This insn may reference stack slot.  Update the maximum stack slot
!      alignment if the memory is referenced by the stack access register. */
!   stack_access_data *p = (stack_access_data *) data;
! 
!   subrtx_iterator::array_type array;
!   FOR_EACH_SUBRTX (iter, array, pat, ALL)
!     {
!       auto op = *iter;
!       if (MEM_P (op))
! 	{
! 	  /* NB: Ignore arguments passed on stack since caller is
! 	     responsible to align the outgoing stack for arguments
! 	     passed on stack.  */
! 	  if (reg_mentioned_p (p->reg, XEXP (op, 0))
! 	      && !ix86_argument_passed_on_stack_p (op))
! 	    {
! 	      unsigned int alignment = MEM_ALIGN (op);
! 
! 	      if (alignment > *p->stack_alignment)
! 		*p->stack_alignment = alignment;
! 	      break;
! 	    }
! 	  else
! 	    iter.skip_subrtxes ();
! 	}
!     }
! }
! 
! /* Helper function for ix86_find_all_reg_uses.  */
  
  static void
! ix86_find_all_reg_uses_1 (HARD_REG_SET &regset,
! 			  rtx set, unsigned int regno,
! 			  auto_bitmap &worklist)
  {
!   rtx dest = SET_DEST (set);
! 
!   if (!REG_P (dest))
      return;
  
!   /* Reject non-Pmode modes.  */
!   if (GET_MODE (dest) != Pmode)
!     return;
  
!   unsigned int dst_regno = REGNO (dest);
  
!   if (TEST_HARD_REG_BIT (regset, dst_regno))
      return;
  
!   const_rtx src = SET_SRC (set);
  
!   subrtx_iterator::array_type array;
!   FOR_EACH_SUBRTX (iter, array, src, ALL)
      {
!       auto op = *iter;
  
!       if (MEM_P (op))
! 	iter.skip_subrtxes ();
  
!       if (REG_P (op) && REGNO (op) == regno)
! 	{
! 	  /* Add this register to register set.  */
! 	  add_to_hard_reg_set (&regset, Pmode, dst_regno);
! 	  bitmap_set_bit (worklist, dst_regno);
! 	  break;
! 	}
!     }
! }
  
! /* Find all registers defined with register REGNO.  */
  
! static void
! ix86_find_all_reg_uses (HARD_REG_SET &regset,
! 			unsigned int regno, auto_bitmap &worklist)
! {
!   for (df_ref ref = DF_REG_USE_CHAIN (regno);
!        ref != NULL;
!        ref = DF_REF_NEXT_REG (ref))
      {
!       if (DF_REF_IS_ARTIFICIAL (ref))
! 	continue;
  
!       rtx_insn *insn = DF_REF_INSN (ref);
  
!       if (!NONJUMP_INSN_P (insn))
! 	continue;
  
!       unsigned int ref_regno = DF_REF_REGNO (ref);
  
!       rtx set = single_set (insn);
!       if (set)
! 	{
! 	  ix86_find_all_reg_uses_1 (regset, set,
! 				    ref_regno, worklist);
! 	  continue;
! 	}
  
!       rtx pat = PATTERN (insn);
!       if (GET_CODE (pat) != PARALLEL)
! 	continue;
  
!       for (int i = 0; i < XVECLEN (pat, 0); i++)
  	{
! 	  rtx exp = XVECEXP (pat, 0, i);
! 
! 	  if (GET_CODE (exp) == SET)
! 	    ix86_find_all_reg_uses_1 (regset, exp,
! 				      ref_regno, worklist);
! 	}
!     }
! }
! 
! /* Return true if the hard register REGNO used for a stack access is
!    defined in a basic block that dominates the block where it is used.  */
! 
! static bool
! ix86_access_stack_p (unsigned int regno, basic_block bb,
! 		     HARD_REG_SET &set_up_by_prologue,
! 		     HARD_REG_SET &prologue_used,
! 		     auto_bitmap reg_dominate_bbs_known[],
! 		     auto_bitmap reg_dominate_bbs[])
! {
!   if (bitmap_bit_p (reg_dominate_bbs_known[regno], bb->index))
!     return bitmap_bit_p (reg_dominate_bbs[regno], bb->index);
  
!   bitmap_set_bit (reg_dominate_bbs_known[regno], bb->index);
  
!   /* Get all BBs which set REGNO and dominate the current BB from all
!      DEFs of REGNO.  */
!   for (df_ref def = DF_REG_DEF_CHAIN (regno);
!        def;
!        def = DF_REF_NEXT_REG (def))
!     if (!DF_REF_IS_ARTIFICIAL (def)
! 	&& !DF_REF_FLAGS_IS_SET (def, DF_REF_MAY_CLOBBER)
! 	&& !DF_REF_FLAGS_IS_SET (def, DF_REF_MUST_CLOBBER))
!       {
! 	basic_block set_bb = DF_REF_BB (def);
! 	if (dominated_by_p (CDI_DOMINATORS, bb, set_bb))
! 	  {
! 	    rtx_insn *insn = DF_REF_INSN (def);
! 	    /* Return true if INSN requires stack.  */
! 	    if (requires_stack_frame_p (insn, prologue_used,
! 					set_up_by_prologue))
! 	      {
! 		bitmap_set_bit (reg_dominate_bbs[regno], bb->index);
! 		return true;
! 	      }
! 	  }
!       }
  
!   /* When we get here, REGNO used in the current BB doesn't access
!      stack.  */
!   return false;
! }
  
! /* Return true if OP isn't a memory operand with SYMBOLIC_CONST and
!    needs alignment > ALIGNMENT.  */
  
! static bool
! ix86_need_alignment_p_2 (const_rtx op, unsigned int alignment)
! {
!   bool need_alignment = MEM_ALIGN (op) > alignment;
!   tree mem_expr = MEM_EXPR (op);
!   if (!mem_expr)
!     return need_alignment;
  
!   tree var = get_base_address (mem_expr);
!   if (!VAR_P (var) || !DECL_RTL_SET_P (var))
!     return need_alignment;
  
!   rtx x = DECL_RTL (var);
!   if (!MEM_P (x))
!     return need_alignment;
  
!   x = XEXP (x, 0);
!   return !SYMBOLIC_CONST (x) && need_alignment;
  }
  
! /* Return true if SET needs alignment > ALIGNMENT.  */
  
! static bool
! ix86_need_alignment_p_1 (rtx set, unsigned int alignment)
  {
    rtx dest = SET_DEST (set);
  
    if (MEM_P (dest))
!     return ix86_need_alignment_p_2 (dest, alignment);
  
    const_rtx src = SET_SRC (set);
  
--- 8586,8720 ----
    return "";
  }
  
! /* Update the maximum stack slot alignment from memory alignment if
!    OP is stack memory.  */
  
  static void
! ix86_update_stack_alignment_2 (const_rtx op, unsigned int &alignment)
  {
!   unsigned int mem_align = MEM_ALIGN (op);
!   if (mem_align <= alignment)
      return;
  
!   /* Skip if OP is a memory operand with CONST_INT in
  
!      (set (mem/v:SI (const_int 0 [0]) [14 MEM[(int *)0B]+0 S4 A256])
! 	  (const_int 0 [0]))
  
!      or SYMBOLIC_CONST in
! 
!      (set (reg:SI 0 ax [orig:118 _2 ] [118])
! 	  (sign_extend:SI (mem/c:QI (symbol_ref:DI ("c") [flags 0x2] <var_decl 0x7fffe960de40 c>) [0 c+0 S1 A8])))
!    */
!   rtx x = XEXP (op, 0);
!   if (CONST_INT_P (x) || SYMBOLIC_CONST (x))
      return;
  
!   /* Skip if OP is function result on stack in
  
!      (set (mem/c:TI (reg/f:SI 0 ax [orig:99 .result_ptr ] [99]) [2 <retval>+0 S16 A128])
! 	  (reg:TI 20 xmm0 [orig:100 x ] [100]))
!   */
!   tree result_decl = DECL_RESULT (current_function_decl);
!   if (result_decl && DECL_RTL_SET_P (result_decl))
      {
!       rtx result_rtl = DECL_RTL (result_decl);
!       if (MEM_P (result_rtl) && XEXP (result_rtl, 0) == x)
! 	return;
!     }
  
!   /* All stack is in the generic address space.  Skip
  
!      (mem:DI (reg:DI 2 cx [103]) [4 MEM[(<address-space-1> __int128 *)0B]+0 S8 A128 AS1])
  
!      from from gcc.target/i386/apx-ndd-seg-1.c.  */
!   if (MEM_ADDR_SPACE (op) != ADDR_SPACE_GENERIC)
!     return;
  
!   rtx base = find_base_term (x);
!   if (base)
      {
!       /* Update ALIGNMENT if RTL points-to says OP accesses stack.  */
!       if (base == static_reg_base_value[STACK_POINTER_REGNUM]
! 	  || base == static_reg_base_value[FRAME_POINTER_REGNUM])
! 	alignment = mem_align;
!       return;
!     }
  
!   /* RTL points-to isn't available.  */
!   bool ok;
!   struct ix86_address parts;
!   ok = ix86_decompose_address (x, &parts);
!   gcc_assert (ok);
  
!   /* Skip if displacement is SYMBOLIC_CONST in
  
!      (set (mem:V16QI (plus:SI (reg:SI 2 cx [orig:105 niters_vector_mult_vf.6 ] [105])
! 			      (symbol_ref:SI ("perm") [flags 0x2] <var_decl 0x7fffe9613130 perm>)) [0 MEM <vector(16) char> [(char *)vectp_perm.21_69]+0 S16 A256])
! 	  (reg:V16QI 20 xmm0 [orig:179 vect__13.18_68 ] [179]))
  
!      from gcc.target/i386/pr109780-1.c.  */
!   if (parts.disp && SYMBOLIC_CONST (parts.disp))
!     return;
  
!   tree mem_expr = MEM_EXPR (op);
!   if (mem_expr)
!     {
!       tree var = get_base_address (mem_expr);
  
!       if (TREE_CODE (var) == MEM_REF
! 	  || TREE_CODE (var) == TARGET_MEM_REF)
  	{
! 	   tree ptr = TREE_OPERAND (var, 0);
! 	   if (TREE_CODE (ptr) == BIT_AND_EXPR)
! 	     ptr = TREE_OPERAND (ptr, 0);
  
! 	   /* Skip if OP is a memory operand of non-local reference in
  
! 	      (set (mem:V4DI (reg:DI 0 ax [orig:112 ivtmp.23 ] [112]) [1 MEM <vector(4) unsigned long> [(_BitInt(2048) *)_34]+0 S32 A256])
! 		   (reg:V4DI 20 xmm0 [117]))
  
! 	      from gcc.target/i386/pr124098.c.  */
! 	   if (!ptr_deref_may_alias_auto_p (ptr)
! 	       /* An access based on an incoming pointer cannot point to
! 		  local stack as in
  
! 		  (set (reg:V2DI 20 xmm0 [orig:103 MEM[(const __m128i * {ref-all})s_1(D) & 4294967280B] ] [103])
! 		       (mem:V2DI (reg:SI 0 ax [102]) [0 MEM[(const __m128i * {ref-all})s_1(D) & 4294967280B]+0 S16 A128]))
  
! 		  from gcc.target/i386/pr53907.  */
! 	       || (TREE_CODE (ptr) == SSA_NAME
! 		   && SSA_NAME_IS_DEFAULT_DEF (ptr)
! 		   && TREE_CODE (SSA_NAME_VAR (ptr)) == PARM_DECL))
! 	     return;
! 	}
!       /* Skip if OP isn't a local stack variable in
  
! 	 (set (mem/c:DI (plus:DI (reg/f:DI 1 dx [157])
! 				 (reg:DI 0 ax [98])) [2 __gcov8.foo.strub.0[0]+0 S8 A256])
! 	      (ior:DI (mem/c:DI (plus:DI (reg/f:DI 1 dx [157])
! 				(reg:DI 0 ax [98])) [2 __gcov8.foo.strub.0[0]+0 S8 A256])
! 		      (const_int 1 [0x1])))
  
! 	 from gcc.target/i386/pr123210.c.  */
!       else if (VAR_P (var)
! 	       && !auto_var_in_fn_p (var, current_function_decl))
! 	return;
!     }
  
!   alignment = mem_align;
  }
  
! /* Update the maximum stack slot alignment from memory alignment if
!    SET references stack memory.  */
  
! static void
! ix86_update_stack_alignment_1 (rtx set, unsigned int &alignment)
  {
    rtx dest = SET_DEST (set);
  
    if (MEM_P (dest))
!     return ix86_update_stack_alignment_2 (dest, alignment);
  
    const_rtx src = SET_SRC (set);
  
*************** ix86_need_alignment_p_1 (rtx set, unsign
*** 8852,8886 ****
        auto op = *iter;
  
        if (MEM_P (op))
! 	return ix86_need_alignment_p_2 (op, alignment);
      }
- 
-   return false;
  }
  
! /* Return true if INSN needs alignment > ALIGNMENT.  */
  
! static bool
! ix86_need_alignment_p (rtx_insn *insn, unsigned int alignment)
  {
    rtx set = single_set (insn);
    if (set)
!     return ix86_need_alignment_p_1 (set, alignment);
  
    rtx pat = PATTERN (insn);
    if (GET_CODE (pat) != PARALLEL)
!     return false;
  
    for (int i = 0; i < XVECLEN (pat, 0); i++)
      {
        rtx exp = XVECEXP (pat, 0, i);
  
!       if (GET_CODE (exp) == SET
! 	  && ix86_need_alignment_p_1 (exp, alignment))
! 	return true;
      }
- 
-   return false;
  }
  
  /* Set stack_frame_required to false if stack frame isn't required.
--- 8724,8754 ----
        auto op = *iter;
  
        if (MEM_P (op))
! 	return ix86_update_stack_alignment_2 (op, alignment);
      }
  }
  
! /* Update the maximum stack slot alignment from memory alignment if
!    INSN references stack memory.  */
  
! static void
! ix86_update_stack_alignment (rtx_insn *insn, unsigned int &alignment)
  {
    rtx set = single_set (insn);
    if (set)
!     return ix86_update_stack_alignment_1 (set, alignment);
  
    rtx pat = PATTERN (insn);
    if (GET_CODE (pat) != PARALLEL)
!     return;
  
    for (int i = 0; i < XVECLEN (pat, 0); i++)
      {
        rtx exp = XVECEXP (pat, 0, i);
  
!       if (GET_CODE (exp) == SET)
! 	ix86_update_stack_alignment_1 (exp, alignment);
      }
  }
  
  /* Set stack_frame_required to false if stack frame isn't required.
*************** ix86_find_max_used_stack_alignment (unsi
*** 8901,9003 ****
    add_to_hard_reg_set (&set_up_by_prologue, Pmode,
  		       HARD_FRAME_POINTER_REGNUM);
  
!   bool require_stack_frame = false;
  
    FOR_EACH_BB_FN (bb, cfun)
      {
        rtx_insn *insn;
        FOR_BB_INSNS (bb, insn)
! 	if (NONDEBUG_INSN_P (insn)
! 	    && requires_stack_frame_p (insn, prologue_used,
! 				       set_up_by_prologue))
  	  {
! 	    require_stack_frame = true;
! 	    break;
! 	  }
!     }
! 
!   cfun->machine->stack_frame_required = require_stack_frame;
! 
!   /* Stop if we don't need to check stack slot.  */
!   if (!check_stack_slot)
!     return;
! 
!   /* The preferred stack alignment is the minimum stack alignment.  */
!   if (stack_alignment > crtl->preferred_stack_boundary)
!     stack_alignment = crtl->preferred_stack_boundary;
! 
!   HARD_REG_SET stack_slot_access;
!   CLEAR_HARD_REG_SET (stack_slot_access);
! 
!   /* Stack slot can be accessed by stack pointer, frame pointer or
!      registers defined by stack pointer or frame pointer.  */
!   auto_bitmap worklist;
! 
!   add_to_hard_reg_set (&stack_slot_access, Pmode, STACK_POINTER_REGNUM);
!   bitmap_set_bit (worklist, STACK_POINTER_REGNUM);
! 
!   if (frame_pointer_needed)
!     {
!       add_to_hard_reg_set (&stack_slot_access, Pmode,
! 			   HARD_FRAME_POINTER_REGNUM);
!       bitmap_set_bit (worklist, HARD_FRAME_POINTER_REGNUM);
!     }
! 
!   /* Registers on HARD_STACK_SLOT_ACCESS always access stack.  */
!   HARD_REG_SET hard_stack_slot_access = stack_slot_access;
! 
!   calculate_dominance_info (CDI_DOMINATORS);
! 
!   unsigned int regno;
! 
!   do
!     {
!       regno = bitmap_clear_first_set_bit (worklist);
!       ix86_find_all_reg_uses (stack_slot_access, regno, worklist);
!     }
!   while (!bitmap_empty_p (worklist));
! 
!   hard_reg_set_iterator hrsi;
!   stack_access_data data;
! 
!   auto_bitmap reg_dominate_bbs_known[FIRST_PSEUDO_REGISTER];
!   auto_bitmap reg_dominate_bbs[FIRST_PSEUDO_REGISTER];
! 
!   data.stack_alignment = &stack_alignment;
! 
!   EXECUTE_IF_SET_IN_HARD_REG_SET (stack_slot_access, 0, regno, hrsi)
!     {
!       for (df_ref ref = DF_REG_USE_CHAIN (regno);
! 	   ref != NULL;
! 	   ref = DF_REF_NEXT_REG (ref))
! 	{
! 	  if (DF_REF_IS_ARTIFICIAL (ref))
! 	    continue;
  
! 	  rtx_insn *insn = DF_REF_INSN (ref);
  
! 	  if (!NONJUMP_INSN_P (insn))
! 	    continue;
  
! 	  /* Call ix86_access_stack_p only if INSN needs alignment >
! 	     STACK_ALIGNMENT.  */
! 	  if (ix86_need_alignment_p (insn, stack_alignment)
! 	      && (TEST_HARD_REG_BIT (hard_stack_slot_access, regno)
! 		  || ix86_access_stack_p (regno, BLOCK_FOR_INSN (insn),
! 					  set_up_by_prologue,
! 					  prologue_used,
! 					  reg_dominate_bbs_known,
! 					  reg_dominate_bbs)))
! 	    {
! 	      /* Update stack alignment if REGNO is used for stack
! 		 access.  */
! 	      data.reg = DF_REF_REG (ref);
! 	      note_stores (insn, ix86_update_stack_alignment, &data);
! 	    }
! 	}
      }
- 
-   free_dominance_info (CDI_DOMINATORS);
  }
  
  /* Finalize stack_realign_needed and frame_pointer_needed flags, which
--- 8769,8806 ----
    add_to_hard_reg_set (&set_up_by_prologue, Pmode,
  		       HARD_FRAME_POINTER_REGNUM);
  
!   cfun->machine->stack_frame_required = false;
! 
!   /* The preferred stack alignment is the minimum stack alignment.  */
!   if (check_stack_slot
!       && stack_alignment > crtl->preferred_stack_boundary)
!     stack_alignment = crtl->preferred_stack_boundary;
  
    FOR_EACH_BB_FN (bb, cfun)
      {
        rtx_insn *insn;
        FOR_BB_INSNS (bb, insn)
! 	if (NONDEBUG_INSN_P (insn))
  	  {
! 	    if (!cfun->machine->stack_frame_required
! 		&& requires_stack_frame_p (insn, prologue_used,
! 					   set_up_by_prologue))
! 	      {
! 		/* Set stack_frame_required before calling
! 		   ix86_update_stack_alignment.  */
! 		cfun->machine->stack_frame_required = true;
  
! 		/* Stop if we don't need to check stack slot.  */
! 		if (!check_stack_slot)
! 		  break;
! 	      }
  
! 	    if (!check_stack_slot || !NONJUMP_INSN_P (insn))
! 	      continue;
  
! 	    ix86_update_stack_alignment (insn, stack_alignment);
! 	  }
      }
  }
  
  /* Finalize stack_realign_needed and frame_pointer_needed flags, which
*************** ix86_tls_get_addr (void)
*** 12719,12724 ****
--- 12522,12539 ----
    return ix86_tls_symbol;
  }
  
+ /* Return the descriptor of the function ABI type for the tls_get_addr
+    function.  */
+ 
+ const predefined_function_abi &
+ ix86_tls_get_addr_abi (void)
+ {
+   if (ix86_abi == SYSV_ABI)
+     return default_function_abi;
+   else
+     return ix86_alternate_abi ();
+ }
+ 
  /* Construct the SYMBOL_REF for the _TLS_MODULE_BASE_ symbol.  */
  
  static GTY(()) rtx ix86_tls_module_base_symbol;
*************** legitimize_tls_address (rtx x, enum tls_
*** 12829,12836 ****
  	      rtx_insn *insns;
  
  	      start_sequence ();
! 	      emit_call_insn
  		(gen_tls_global_dynamic_64 (Pmode, rax, x, caddr, rdi));
  	      insns = end_sequence ();
  
  	      if (GET_MODE (x) != Pmode)
--- 12644,12653 ----
  	      rtx_insn *insns;
  
  	      start_sequence ();
! 	      rtx_insn *call_insn = emit_call_insn
  		(gen_tls_global_dynamic_64 (Pmode, rax, x, caddr, rdi));
+ 	      CALL_INSN_ABI_ID (call_insn)
+ 		= ix86_tls_get_addr_abi ().id ();
  	      insns = end_sequence ();
  
  	      if (GET_MODE (x) != Pmode)
*************** legitimize_tls_address (rtx x, enum tls_
*** 12884,12891 ****
  	      rtx eqv;
  
  	      start_sequence ();
! 	      emit_call_insn
  		(gen_tls_local_dynamic_base_64 (Pmode, rax, caddr, rdi));
  	      insns = end_sequence ();
  
  	      /* Attach a unique REG_EQUAL, to allow the RTL optimizers to
--- 12701,12710 ----
  	      rtx eqv;
  
  	      start_sequence ();
! 	      rtx_insn *call_insn = emit_call_insn
  		(gen_tls_local_dynamic_base_64 (Pmode, rax, caddr, rdi));
+ 	      CALL_INSN_ABI_ID (call_insn)
+ 		= ix86_tls_get_addr_abi ().id ();
  	      insns = end_sequence ();
  
  	      /* Attach a unique REG_EQUAL, to allow the RTL optimizers to
*************** ix86_hard_regno_mode_ok (unsigned int re
*** 21871,21876 ****
--- 21690,21932 ----
    return false;
  }
  
+ /* Initialize function_abis[ABI_ID] with the set of register clobbers
+    in FULL_REG_CLOBBERS, adjusting for rules that apply to all ABIs.  */
+ 
+ static void
+ ix86_initialize_abi (unsigned int abi_id, HARD_REG_SET full_reg_clobbers)
+ {
+   /* The general rule is that fixed registers should be marked as
+      call-clobbered.  This includes global registers, inaccessible
+      registers, the flags register, and the FPSR.
+ 
+      Handle the exceptions below.  */
+   full_reg_clobbers |= fixed_reg_set;
+ 
+   /* Every ABI (even preserve_none) preserves EBP/RBP.  */
+   CLEAR_HARD_REG_BIT (full_reg_clobbers, HARD_FRAME_POINTER_REGNUM);
+ 
+   /* Treat GCC's internal frame-related registers as call-preserved.  */
+   CLEAR_HARD_REG_BIT (full_reg_clobbers, FRAME_POINTER_REGNUM);
+   CLEAR_HARD_REG_BIT (full_reg_clobbers, ARG_POINTER_REGNUM);
+ 
+   /* MMX registers aren't preserved.  */
+   if (TARGET_MMX)
+     full_reg_clobbers |= reg_class_contents[MMX_REGS];
+ 
+   /* X87 registers aren't preserved.  */
+   if (TARGET_80387 || TARGET_FLOAT_RETURNS_IN_80387)
+     full_reg_clobbers |= reg_class_contents[FLOAT_REGS];
+ 
+   function_abis[abi_id].initialize (abi_id, full_reg_clobbers);
+ }
+ 
+ /* Return the descriptor of no_callee_saved_registers function type.
+    None of the enabled registers are preserved, except for the common
+    rules applied by ix86_initialize_abi.  */
+ 
+ static const predefined_function_abi &
+ ix86_no_callee_saved_abi (void)
+ {
+   auto &no_callee_saved_abi = function_abis[ABI_NO_CALLEE_SAVED];
+   if (!no_callee_saved_abi.initialized_p ())
+     ix86_initialize_abi (ABI_NO_CALLEE_SAVED, accessible_reg_set);
+   return no_callee_saved_abi;
+ }
+ 
+ /* Return the descriptor of the no_caller_saved_registers function type
+    with ABI identifier ABI_ID.  All registers are preserved, except for:
+ 
+    - the return registers, which are enumerated in ABI_ID.
+ 
+    - the common rules applied by ix86_initialize_abi.  */
+ 
+ static const predefined_function_abi &
+ ix86_no_caller_saved_abi (unsigned int abi_id)
+ {
+   auto &abi = function_abis[abi_id];
+   if (!abi.initialized_p ())
+     {
+       HARD_REG_SET full_reg_clobbers = {};
+ 
+       switch (abi_id)
+ 	{
+ 	case ABI_NO_CALLER_SAVED_RETURN_VOID:
+ 	  break;
+ 
+ 	case ABI_NO_CALLER_SAVED_RETURN_AX_DX:
+ 	  SET_HARD_REG_BIT (full_reg_clobbers, DX_REG);
+ 	  /* Fall through.  */
+ 	case ABI_NO_CALLER_SAVED_RETURN_AX:
+ 	  SET_HARD_REG_BIT (full_reg_clobbers, AX_REG);
+ 	  break;
+ 
+ 	case ABI_NO_CALLER_SAVED_RETURN_AX_XMM0:
+ 	  SET_HARD_REG_BIT (full_reg_clobbers, AX_REG);
+ 	  SET_HARD_REG_BIT (full_reg_clobbers, XMM0_REG);
+ 	  break;
+ 
+ 	case ABI_NO_CALLER_SAVED_RETURN_XMM0_XMM1:
+ 	  SET_HARD_REG_BIT (full_reg_clobbers, XMM1_REG);
+ 	  /* Fall through.  */
+ 	case ABI_NO_CALLER_SAVED_RETURN_XMM0:
+ 	  SET_HARD_REG_BIT (full_reg_clobbers, XMM0_REG);
+ 	  break;
+ 
+ 	default:
+ 	  gcc_unreachable ();
+ 	}
+ 
+       ix86_initialize_abi (abi_id, full_reg_clobbers);
+     }
+   return abi;
+ }
+ 
+ /* Return the descriptor of the standard function ABI type.  If
+    ABI_TYPE == ABI_ALTERNATE, return the function alternate ABI type.  */
+ 
+ static const predefined_function_abi &
+ ix86_standard_abi (int abi_type)
+ {
+   static const char ix86_call_used_regs[] = CALL_USED_REGISTERS;
+   auto &standard_abi = function_abis[abi_type];
+   if (!standard_abi.initialized_p ())
+     {
+       HARD_REG_SET full_reg_clobbers = {};
+ 
+       /* Add all registers that are clobbered by the call.  NB: If the
+ 	 current ABI is SYSV_ABI, the alternate ABI is MS_ABI.   */
+       bool is_64bit_ms_abi = (TARGET_64BIT
+ 			      && ix86_abi == (abi_type == ABI_ALTERNATE
+ 					      ? SYSV_ABI : MS_ABI));
+       char c_mask = CALL_USED_REGISTERS_MASK (is_64bit_ms_abi);
+       for (int i = 0; i < FIRST_PSEUDO_REGISTER; i++)
+ 	if (ix86_call_used_regs[i] == 1
+ 	    || (ix86_call_used_regs[i] & c_mask))
+ 	  SET_HARD_REG_BIT (full_reg_clobbers, i);
+ 
+       ix86_initialize_abi (abi_type, full_reg_clobbers);
+     }
+   return standard_abi;
+ }
+ 
+ /* Return the descriptor of the function alternate ABI type.  */
+ 
+ static const predefined_function_abi &
+ ix86_alternate_abi (void)
+ {
+   return ix86_standard_abi (ABI_ALTERNATE);
+ }
+ 
+ /* Return the function ABI ID based on FNTYPE.  */
+ 
+ static int
+ ix86_function_abi_id (const_tree fntype)
+ {
+   auto call_saved_registers = ix86_fntype_call_saved_registers (fntype);
+   if (call_saved_registers == TYPE_PRESERVE_NONE
+       || call_saved_registers == TYPE_NO_CALLEE_SAVED_REGISTERS)
+     return ABI_NO_CALLEE_SAVED;
+ 
+   if (call_saved_registers == TYPE_NO_CALLER_SAVED_REGISTERS)
+     {
+       tree type = TREE_TYPE (fntype);
+       if (VOID_TYPE_P (type))
+ 	return ABI_NO_CALLER_SAVED_RETURN_VOID;
+       /* AX register contains the address of the return value location
+ 	 passed in by the caller.  */
+       else if (ix86_return_in_memory (type, fntype))
+ 	return ABI_NO_CALLER_SAVED_RETURN_AX;
+       rtx ret = ix86_function_value (type, fntype, false);
+       unsigned int nregs;
+       if (REG_P (ret))
+ 	{
+ 	  unsigned int regno = REGNO (ret);
+ 	  if (STACK_REGNO_P (regno) || MMX_REGNO_P (regno))
+ 	    return ABI_NO_CALLER_SAVED_RETURN_VOID;
+ 	  else
+ 	    switch (regno)
+ 	      {
+ 	      case AX_REG:
+ 		nregs = REG_NREGS (ret);
+ 		if (nregs == 1)
+ 		  return ABI_NO_CALLER_SAVED_RETURN_AX;
+ 		else if (nregs == 2)
+ 		  return ABI_NO_CALLER_SAVED_RETURN_AX_DX;
+ 		gcc_unreachable ();
+ 	      case XMM0_REG:
+ 		return ABI_NO_CALLER_SAVED_RETURN_XMM0;
+ 	      default:
+ 		gcc_unreachable ();
+ 	      }
+ 	}
+       else if (GET_CODE (ret) == PARALLEL && XVECLEN (ret, 0) == 2)
+ 	{
+ 	  rtx x0 = XVECEXP (ret, 0, 0);
+ 	  rtx x1 = XVECEXP (ret, 0, 1);
+ 	  if (GET_CODE (x0) == EXPR_LIST
+ 	      && GET_CODE (x1) == EXPR_LIST)
+ 	    {
+ 	      x0 = XEXP (x0, 0);
+ 	      x1 = XEXP (x1, 0);
+ 	      if (REG_P (x0) && REGNO (x0) == AX_REG)
+ 		{
+ 		  if (REG_P (x1) && REGNO (x1) == XMM0_REG)
+ 		    return ABI_NO_CALLER_SAVED_RETURN_AX_XMM0;
+ 		}
+ 	      if (REG_P (x0) && REGNO (x0) == XMM0_REG && REG_P (x1))
+ 		{
+ 		  if (REGNO (x1) == AX_REG)
+ 		    return ABI_NO_CALLER_SAVED_RETURN_AX_XMM0;
+ 		  else if (REGNO (x1) == XMM1_REG)
+ 		    return ABI_NO_CALLER_SAVED_RETURN_XMM0_XMM1;
+ 		}
+ 	    }
+ 
+ 	  gcc_unreachable ();
+ 	}
+     }
+ 
+   /* NB: This must be the last since other attributes change the
+      function ABI.  */
+   if (ix86_function_type_abi (fntype) != ix86_abi)
+     return ABI_ALTERNATE;
+ 
+   return ABI_DEFAULT;
+ }
+ 
+ /* Implement TARGET_FNTYPE_ABI.  */
+ 
+ static const predefined_function_abi &
+ ix86_fntype_abi (const_tree fntype)
+ {
+   unsigned int abi_id = ix86_function_abi_id (fntype);
+   switch (abi_id)
+     {
+     case ABI_DEFAULT:
+       return default_function_abi;
+ 
+     case ABI_ALTERNATE:
+       return ix86_alternate_abi ();
+ 
+     case ABI_NO_CALLEE_SAVED:
+       return ix86_no_callee_saved_abi ();
+ 
+     case ABI_NO_CALLER_SAVED_RETURN_VOID:
+     case ABI_NO_CALLER_SAVED_RETURN_AX:
+     case ABI_NO_CALLER_SAVED_RETURN_AX_DX:
+     case ABI_NO_CALLER_SAVED_RETURN_AX_XMM0:
+     case ABI_NO_CALLER_SAVED_RETURN_XMM0:
+     case ABI_NO_CALLER_SAVED_RETURN_XMM0_XMM1:
+       return ix86_no_caller_saved_abi (abi_id);
+ 
+     default:
+       gcc_unreachable ();
+     }
+ 
+   return default_function_abi;
+ }
+ 
  /* Initialize function_abis with corresponding abi_id,
     currently only handle vzeroupper.  */
  void
*************** static bool
*** 21909,21920 ****
  ix86_hard_regno_call_part_clobbered (unsigned int abi_id, unsigned int regno,
  				     machine_mode mode)
  {
!   /* Special ABI for vzeroupper which only clobber higher part of sse regs.  */
!   if (abi_id == ABI_VZEROUPPER)
        return (GET_MODE_SIZE (mode) > 16
  	      && ((TARGET_64BIT && REX_SSE_REGNO_P (regno))
  		  || LEGACY_SSE_REGNO_P (regno)));
  
    return SSE_REGNO_P (regno) && GET_MODE_SIZE (mode) > 16;
  }
  
--- 21965,22002 ----
  ix86_hard_regno_call_part_clobbered (unsigned int abi_id, unsigned int regno,
  				     machine_mode mode)
  {
!   switch (abi_id)
!     {
!     case ABI_VZEROUPPER:
!       /* Special ABI for vzeroupper which only clobbers higher part of
! 	 SSE registers.  */
        return (GET_MODE_SIZE (mode) > 16
  	      && ((TARGET_64BIT && REX_SSE_REGNO_P (regno))
  		  || LEGACY_SSE_REGNO_P (regno)));
  
+     case ABI_DEFAULT:
+     case ABI_ALTERNATE:
+     case ABI_NO_CALLEE_SAVED:
+       break;
+ 
+     case ABI_NO_CALLER_SAVED_RETURN_VOID:
+     case ABI_NO_CALLER_SAVED_RETURN_AX:
+     case ABI_NO_CALLER_SAVED_RETURN_AX_DX:
+       /* These ABIs don't clobber SSE registers.  */
+       return false;
+ 
+     case ABI_NO_CALLER_SAVED_RETURN_AX_XMM0:
+     case ABI_NO_CALLER_SAVED_RETURN_XMM0:
+     case ABI_NO_CALLER_SAVED_RETURN_XMM0_XMM1:
+       /* These ABIs return some values in SSE registers and preserve
+ 	 the rest.  The return value registers (XMM0 and possibly XMM1)
+ 	 are fully rather than partially call-clobbered.  */
+       return false;
+ 
+     default:
+       gcc_unreachable ();
+     }
+ 
    return SSE_REGNO_P (regno) && GET_MODE_SIZE (mode) > 16;
  }
  
*************** x86_order_regs_for_local_alloc (void)
*** 23681,23693 ****
  
     /* First allocate the local general purpose registers.  */
     for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
!      if (GENERAL_REGNO_P (i) && call_used_or_fixed_reg_p (i))
! 	reg_alloc_order [pos++] = i;
  
     /* Global general purpose registers.  */
     for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
!      if (GENERAL_REGNO_P (i) && !call_used_or_fixed_reg_p (i))
! 	reg_alloc_order [pos++] = i;
  
     /* x87 registers come first in case we are doing FP math
        using them.  */
--- 23763,23775 ----
  
     /* First allocate the local general purpose registers.  */
     for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
!      if (GENERAL_REGNO_P (i) && default_function_abi.clobbers_full_reg_p (i))
!        reg_alloc_order [pos++] = i;
  
     /* Global general purpose registers.  */
     for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
!      if (GENERAL_REGNO_P (i) && !default_function_abi.clobbers_full_reg_p (i))
!        reg_alloc_order [pos++] = i;
  
     /* x87 registers come first in case we are doing FP math
        using them.  */
*************** x86_64_select_profile_regnum (bool r11_o
*** 24149,24155 ****
  #endif
  	&& TEST_HARD_REG_BIT (accessible_reg_set, i)
  	&& (ix86_save_reg (i, true, true)
! 	    || (call_used_regs[i]
  		&& !fixed_regs[i]
  		&& !REGNO_REG_SET_P (reg_live, i))))
        return i;
--- 24231,24237 ----
  #endif
  	&& TEST_HARD_REG_BIT (accessible_reg_set, i)
  	&& (ix86_save_reg (i, true, true)
! 	    || (crtl->abi->clobbers_full_reg_p (i)
  		&& !fixed_regs[i]
  		&& !REGNO_REG_SET_P (reg_live, i))))
        return i;
*************** ix86_libgcc_floating_mode_supported_p
*** 28838,28843 ****
--- 28920,28928 ----
  #define TARGET_HARD_REGNO_CALL_PART_CLOBBERED \
    ix86_hard_regno_call_part_clobbered
  
+ #undef TARGET_FNTYPE_ABI
+ #define TARGET_FNTYPE_ABI ix86_fntype_abi
+ 
  #undef TARGET_CAN_CHANGE_MODE_CLASS
  #define TARGET_CAN_CHANGE_MODE_CLASS ix86_can_change_mode_class
  
diff -Nrcpad gcc-17-20260705/gcc/config/i386/i386.h gcc-17-20260712/gcc/config/i386/i386.h
*** gcc-17-20260705/gcc/config/i386/i386.h	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/i386/i386.h	Sun Jul 12 22:32:07 2026
*************** extern const char *host_detect_local_cpu
*** 743,750 ****
  #define POINTER_SIZE (TARGET_X32 ? 32 : BITS_PER_WORD)
  #define LONG_LONG_TYPE_SIZE 64
  
- #define WIDEST_HARDWARE_FP_SIZE 80
- 
  #if defined (TARGET_BI_ARCH) || TARGET_64BIT_DEFAULT
  #define MAX_BITS_PER_WORD 64
  #else
--- 743,748 ----
diff -Nrcpad gcc-17-20260705/gcc/config/i386/i386.md gcc-17-20260712/gcc/config/i386/i386.md
*** gcc-17-20260705/gcc/config/i386/i386.md	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/i386/i386.md	Sun Jul 12 22:32:07 2026
***************
*** 513,521 ****
  
  ;; Insn callee abi index.
  (define_constants
!   [(ABI_DEFAULT		0)
!    (ABI_VZEROUPPER	1)
!    (ABI_UNKNOWN		2)])
  
  ;; Insns whose names begin with "x86_" are emitted by gen_FOO calls
  ;; from i386.cc.
--- 513,547 ----
  
  ;; Insn callee abi index.
  (define_constants
!   [;; The system ABI; that is, the ABI associated with ix86_abi, and the
!    ;; ABI that an undecorated "void foo()" would have.
!    (ABI_DEFAULT                             0)
!    ;; An ABI that describes the effect of vzeroupper.  vzeroupper is
!    ;; represented as a call because calls are the main mechanism for
!    ;; expression partial register clobbers.
!    (ABI_VZEROUPPER                          1)
!    ;; ABI_ALTERNATE is the Windows function ABI if ix86_abi == SYSV_ABI
!    ;; and is the SYSV function ABI if ix86_abi == MS_ABI.
!    (ABI_ALTERNATE                           2)
!    (ABI_NO_CALLEE_SAVED                     3)
!    ;; Return void.
!    (ABI_NO_CALLER_SAVED_RETURN_VOID         4)
!    ;; Return char, short, int in 32-bit/64-bit.
!    ;; Return int64 and _Complex int in 64-bit.
!    ;; Return _Complex float in MS 32-bit/64-bit.
!    (ABI_NO_CALLER_SAVED_RETURN_AX           5)
!    ;; Return int64 and _Complex int in 32-bit.
!    ;; Return _Complex int64 in 64-bit.
!    (ABI_NO_CALLER_SAVED_RETURN_AX_DX        6)
!    ;; Return struct pair with int64 and double in 64-bit.
!    (ABI_NO_CALLER_SAVED_RETURN_AX_XMM0      7)
!    ;; Return float and double in 64-bit.
!    ;; Return _Complex float in SYSV 64-bit.
!    ;; Return int28, _Complex double in MS 64-bit.
!    (ABI_NO_CALLER_SAVED_RETURN_XMM0         8)
!    ;; Return _Complex double in SYSV 64-bit.
!    (ABI_NO_CALLER_SAVED_RETURN_XMM0_XMM1    9)
!    (ABI_UNKNOWN                            10)])
  
  ;; Insns whose names begin with "x86_" are emitted by gen_FOO calls
  ;; from i386.cc.
***************
*** 11869,11874 ****
--- 11895,11915 ----
  	      (set (match_dup 5)
  		   (umul_highpart:DWIH (match_dup 2) (match_dup 3)))])])
  
+ ;; BMI2 MULX highpart-only pattern.  Uses MULX to get only the high part.
+ ;; When both output operands are identical, MULX writes the high half to that
+ ;; register, so no scratch register is needed.  This avoids the mov from rdx
+ ;; after mulq when only the high part is needed.
+ (define_insn "*bmi2_umul<mode>3_highpart"
+   [(set (match_operand:DWIH 0 "register_operand" "=r")
+ 	(umul_highpart:DWIH
+ 	  (match_operand:DWIH 1 "register_operand" "d")
+ 	  (match_operand:DWIH 2 "nonimmediate_operand" "rm")))]
+   "TARGET_BMI2"
+   "mulx\t{%2, %0, %0|%0, %0, %2}"
+   [(set_attr "type" "imulx")
+    (set_attr "prefix" "vex")
+    (set_attr "mode" "<MODE>")])
+ 
  ;; Highpart multiplication patterns
  (define_insn "<s>mul<mode>3_highpart"
    [(set (match_operand:DWIH 0 "register_operand" "=d")
diff -Nrcpad gcc-17-20260705/gcc/config/i386/i386.opt.urls gcc-17-20260712/gcc/config/i386/i386.opt.urls
*** gcc-17-20260705/gcc/config/i386/i386.opt.urls	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/i386/i386.opt.urls	Sun Jul 12 22:32:07 2026
*************** mraoint
*** 576,582 ****
  UrlSuffix(gcc/x86-Options.html#index-mraoint)
  
  munroll-only-small-loops
! UrlSuffix(gcc/x86-Options.html#index-munroll-only-small-loops)
  
  mlam=
  UrlSuffix(gcc/x86-Options.html#index-mlam)
--- 576,582 ----
  UrlSuffix(gcc/x86-Options.html#index-mraoint)
  
  munroll-only-small-loops
! UrlSuffix(gcc/x86-Options.html#index-munroll-only-small-loops-1)
  
  mlam=
  UrlSuffix(gcc/x86-Options.html#index-mlam)
diff -Nrcpad gcc-17-20260705/gcc/config/i386/sse.md gcc-17-20260712/gcc/config/i386/sse.md
*** gcc-17-20260705/gcc/config/i386/sse.md	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/i386/sse.md	Sun Jul 12 22:32:07 2026
***************
*** 631,640 ****
  (define_mode_iterator VI1_AVX512VNNI
    [(V64QI "TARGET_AVX512VNNI") (V32QI "TARGET_AVX2") V16QI])
  
- (define_mode_iterator VI1_AVX512VNNIBW
-   [(V64QI "TARGET_AVX512BW || TARGET_AVX512VNNI")
-    (V32QI "TARGET_AVX2") V16QI])
- 
  (define_mode_iterator VI12_256_512_AVX512VL
    [V64QI (V32QI "TARGET_AVX512VL")
     V32HI (V16HI "TARGET_AVX512VL")])
--- 631,636 ----
***************
*** 32542,32549 ****
  
  (define_expand "sdot_prod<ssedvecmodelower><mode>"
    [(match_operand:<ssedvecmode> 0 "register_operand")
!    (match_operand:VI1_AVX512VNNIBW 1 "register_operand")
!    (match_operand:VI1_AVX512VNNIBW 2 "register_operand")
     (match_operand:<ssedvecmode> 3 "register_operand")]
    "TARGET_SSE2"
  {
--- 32538,32545 ----
  
  (define_expand "sdot_prod<ssedvecmodelower><mode>"
    [(match_operand:<ssedvecmode> 0 "register_operand")
!    (match_operand:VI1_AVX512 1 "register_operand")
!    (match_operand:VI1_AVX512 2 "register_operand")
     (match_operand:<ssedvecmode> 3 "register_operand")]
    "TARGET_SSE2"
  {
***************
*** 32590,32597 ****
  
  (define_expand "udot_prod<ssedvecmodelower><mode>"
    [(match_operand:<ssedvecmode> 0 "register_operand")
!    (match_operand:VI1_AVX512VNNIBW 1 "register_operand")
!    (match_operand:VI1_AVX512VNNIBW 2 "register_operand")
     (match_operand:<ssedvecmode> 3 "register_operand")]
    "TARGET_SSE2"
  {
--- 32586,32593 ----
  
  (define_expand "udot_prod<ssedvecmodelower><mode>"
    [(match_operand:<ssedvecmode> 0 "register_operand")
!    (match_operand:VI1_AVX512 1 "register_operand")
!    (match_operand:VI1_AVX512 2 "register_operand")
     (match_operand:<ssedvecmode> 3 "register_operand")]
    "TARGET_SSE2"
  {
diff -Nrcpad gcc-17-20260705/gcc/config/ia64/vms.h gcc-17-20260712/gcc/config/ia64/vms.h
*** gcc-17-20260705/gcc/config/ia64/vms.h	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/ia64/vms.h	Sun Jul 12 22:32:07 2026
*************** along with GCC; see the file COPYING3.
*** 33,42 ****
  #undef MAX_OFILE_ALIGNMENT
  #define MAX_OFILE_ALIGNMENT 524288  /* 8 x 2^16 by DEC Ada Test CD40VRA */
  
- /* Widest floating-point type efficiently supported by hardware and OS.  */
- #undef WIDEST_HARDWARE_FP_SIZE
- #define WIDEST_HARDWARE_FP_SIZE 64
- 
  /* The structure return address arrives as an "argument" on VMS.  */
  #undef PCC_STATIC_STRUCT_RETURN
  
--- 33,38 ----
diff -Nrcpad gcc-17-20260705/gcc/config/m68k/m68k.h gcc-17-20260712/gcc/config/m68k/m68k.h
*** gcc-17-20260705/gcc/config/m68k/m68k.h	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/m68k/m68k.h	Sun Jul 12 22:32:07 2026
*************** __transfer_from_trampoline ()					\
*** 777,783 ****
  #define ASM_PREFERRED_EH_DATA_FORMAT(CODE, GLOBAL)			   \
    (flag_pic								   \
     && !((TARGET_ID_SHARED_LIBRARY || TARGET_SEP_DATA)			   \
! 	&& ((GLOBAL) || (!!CODE)))					   \
     ? ((GLOBAL) ? DW_EH_PE_indirect : 0) | DW_EH_PE_pcrel | DW_EH_PE_sdata4 \
     : DW_EH_PE_absptr)
  
--- 777,783 ----
  #define ASM_PREFERRED_EH_DATA_FORMAT(CODE, GLOBAL)			   \
    (flag_pic								   \
     && !((TARGET_ID_SHARED_LIBRARY || TARGET_SEP_DATA)			   \
! 	&& ((GLOBAL) || !!(CODE)))					   \
     ? ((GLOBAL) ? DW_EH_PE_indirect : 0) | DW_EH_PE_pcrel | DW_EH_PE_sdata4 \
     : DW_EH_PE_absptr)
  
diff -Nrcpad gcc-17-20260705/gcc/config/m68k/m68k.md gcc-17-20260712/gcc/config/m68k/m68k.md
*** gcc-17-20260705/gcc/config/m68k/m68k.md	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/m68k/m68k.md	Sun Jul 12 22:32:07 2026
***************
*** 5387,5393 ****
  (define_insn "bsetmemqi"
    [(set (match_operand:QI 0 "memory_operand" "+m")
  	(ior:QI (subreg:QI (ashift:SI (const_int 1)
! 		(match_operand:SI 1 "general_operand" "d")) 3)
  	(match_dup 0)))]
    ""
    "bset %1,%0"
--- 5387,5394 ----
  (define_insn "bsetmemqi"
    [(set (match_operand:QI 0 "memory_operand" "+m")
  	(ior:QI (subreg:QI (ashift:SI (const_int 1)
! 		(and:SI (match_operand:SI 1 "general_operand" "d")
! 			(const_int 7))) 3)
  	(match_dup 0)))]
    ""
    "bset %1,%0"
***************
*** 5397,5404 ****
  (define_insn "*bsetmemqi_ext"
    [(set (match_operand:QI 0 "memory_operand" "+m")
  	(ior:QI (subreg:QI (ashift:SI (const_int 1)
! 	    (match_operator:SI 2 "extend_operator"
! 		[(match_operand 1 "general_operand" "d")])) 3)
  	(match_dup 0)))]
    ""
    "bset %1,%0"
--- 5398,5406 ----
  (define_insn "*bsetmemqi_ext"
    [(set (match_operand:QI 0 "memory_operand" "+m")
  	(ior:QI (subreg:QI (ashift:SI (const_int 1)
! 	    (and:SI (match_operator:SI 2 "extend_operator"
! 			[(match_operand 1 "general_operand" "d")])
! 		    (const_int 7))) 3)
  	(match_dup 0)))]
    ""
    "bset %1,%0"
***************
*** 5438,5445 ****
  (define_insn "bclrmemqi"
    [(set (zero_extract:SI (match_operand:QI 0 "memory_operand" "+m")
  	(const_int 1)
! 	(minus:SI (const_int 7)
! 	    (match_operand:SI 1 "general_operand" "d")))
      (const_int 0))]
    ""
    "bclr %1,%0"
--- 5440,5448 ----
  (define_insn "bclrmemqi"
    [(set (zero_extract:SI (match_operand:QI 0 "memory_operand" "+m")
  	(const_int 1)
! 	(and:SI (minus:SI (const_int 7)
! 		    (match_operand:SI 1 "general_operand" "d"))
! 		(const_int 7)))
      (const_int 0))]
    ""
    "bclr %1,%0"
***************
*** 5449,5457 ****
  (define_insn "*bclrmemqi_ext"
    [(set (zero_extract:SI (match_operand:QI 0 "memory_operand" "+m")
  	(const_int 1)
! 	(minus:SI (const_int 7)
! 	    (match_operator:SI 2 "extend_operator"
! 		[(match_operand 1 "general_operand" "d")])))
      (const_int 0))]
    ""
    "bclr %1,%0"
--- 5452,5461 ----
  (define_insn "*bclrmemqi_ext"
    [(set (zero_extract:SI (match_operand:QI 0 "memory_operand" "+m")
  	(const_int 1)
! 	(and:SI (minus:SI (const_int 7)
! 		    (match_operator:SI 2 "extend_operator"
! 			[(match_operand 1 "general_operand" "d")]))
! 		(const_int 7)))
      (const_int 0))]
    ""
    "bclr %1,%0"
diff -Nrcpad gcc-17-20260705/gcc/config/mingw/winnt.cc gcc-17-20260712/gcc/config/mingw/winnt.cc
*** gcc-17-20260705/gcc/config/mingw/winnt.cc	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/mingw/winnt.cc	Sun Jul 12 22:32:07 2026
*************** mingw_pe_valid_dllimport_attribute_p (co
*** 169,174 ****
--- 169,176 ----
     return true;
  }
  
+ #if !defined (TARGET_AARCH64_MS_ABI)
+ 
  /* Return string which is the function name, identified by ID, modified
     with a suffix consisting of an atsign (@) followed by the number of
     bytes of arguments.  If ID is NULL use the DECL_NAME as base. If
*************** gen_stdcall_or_fastcall_suffix (tree dec
*** 224,231 ****
    return get_identifier (new_str);
  }
  
- #if !defined (TARGET_AARCH64_MS_ABI)
- 
  /* Maybe decorate and get a new identifier for the DECL of a stdcall or
     fastcall function. The original identifier is supplied in ID. */
  
--- 226,231 ----
*************** mingw_pe_asm_lto_end (void)
*** 884,928 ****
    debug_info_level = saved_debug_info_level;
  }
  
- 
- /* x64 Structured Exception Handling unwind info.  */
- 
- struct seh_frame_state
- {
-   /* SEH records offsets relative to the lowest address of the fixed stack
-      allocation.  If there is no frame pointer, these offsets are from the
-      stack pointer; if there is a frame pointer, these offsets are from the
-      value of the stack pointer when the frame pointer was established, i.e.
-      the frame pointer minus the offset in the .seh_setframe directive.
- 
-      We do not distinguish these two cases, i.e. we consider that the offsets
-      are always relative to the "current" stack pointer.  This means that we
-      need to perform the fixed stack allocation before establishing the frame
-      pointer whenever there are registers to be saved, and this is guaranteed
-      by the prologue provided that we force the frame pointer to point at or
-      below the lowest used register save area, see ix86_compute_frame_layout.
- 
-      This tracks the current stack pointer offset from the CFA.  */
-   HOST_WIDE_INT sp_offset;
- 
-   /* The CFA is located at CFA_REG + CFA_OFFSET.  */
-   HOST_WIDE_INT cfa_offset;
-   rtx cfa_reg;
- 
-   /* The offset wrt the CFA where register N has been saved.  */
-   HOST_WIDE_INT reg_offset[FIRST_PSEUDO_REGISTER];
- 
-   /* True if we are past the end of the epilogue.  */
-   bool after_prologue;
- 
-   /* True if we are in the cold section.  */
-   bool in_cold_section;
- };
- 
  /* Set up data structures beginning output for SEH.  */
  
  void
! i386_pe_seh_init (FILE *f)
  {
    struct seh_frame_state *seh;
  
--- 884,893 ----
    debug_info_level = saved_debug_info_level;
  }
  
  /* Set up data structures beginning output for SEH.  */
  
  void
! mingw_pe_seh_init (FILE *f)
  {
    struct seh_frame_state *seh;
  
*************** i386_pe_seh_init (FILE *f)
*** 950,956 ****
  /* Emit an assembler directive for the end of the prologue.  */
  
  void
! i386_pe_seh_end_prologue (FILE *f)
  {
    if (!TARGET_SEH)
      return;
--- 915,921 ----
  /* Emit an assembler directive for the end of the prologue.  */
  
  void
! mingw_pe_seh_end_prologue (FILE *f)
  {
    if (!TARGET_SEH)
      return;
*************** i386_pe_seh_end_prologue (FILE *f)
*** 963,969 ****
  /* Emit assembler directives to reconstruct the SEH state.  */
  
  void
! i386_pe_seh_cold_init (FILE *f, const char *name)
  {
    struct seh_frame_state *seh;
    HOST_WIDE_INT alloc_offset, offset;
--- 928,934 ----
  /* Emit assembler directives to reconstruct the SEH state.  */
  
  void
! mingw_pe_seh_cold_init (FILE *f, const char *name)
  {
    struct seh_frame_state *seh;
    HOST_WIDE_INT alloc_offset, offset;
*************** i386_pe_seh_cold_init (FILE *f, const ch
*** 1046,1052 ****
  /* Emit an assembler directive for the end of the function.  */
  
  static void
! i386_pe_seh_fini (FILE *f, bool cold)
  {
    struct seh_frame_state *seh;
  
--- 1011,1017 ----
  /* Emit an assembler directive for the end of the function.  */
  
  static void
! mingw_pe_seh_fini (FILE *f, bool cold)
  {
    struct seh_frame_state *seh;
  
*************** seh_emit_save (FILE *f, struct seh_frame
*** 1106,1113 ****
  
  /* Emit an assembler directive to adjust RSP by OFFSET.  */
  
! static void
! seh_emit_stackalloc (FILE *f, struct seh_frame_state *seh,
  		     HOST_WIDE_INT offset)
  {
    /* We're only concerned with prologue stack allocations, which all
--- 1071,1078 ----
  
  /* Emit an assembler directive to adjust RSP by OFFSET.  */
  
! void
! mingw_pe_seh_emit_stackalloc (FILE *f, struct seh_frame_state *seh,
  		     HOST_WIDE_INT offset)
  {
    /* We're only concerned with prologue stack allocations, which all
*************** seh_cfa_adjust_cfa (FILE *f, struct seh_
*** 1152,1158 ****
    dest_regno = REGNO (dest);
  
    if (dest_regno == STACK_POINTER_REGNUM)
!     seh_emit_stackalloc (f, seh, reg_offset);
    else if (dest_regno == HARD_FRAME_POINTER_REGNUM)
      {
        HOST_WIDE_INT offset;
--- 1117,1123 ----
    dest_regno = REGNO (dest);
  
    if (dest_regno == STACK_POINTER_REGNUM)
!     mingw_pe_seh_emit_stackalloc (f, seh, reg_offset);
    else if (dest_regno == HARD_FRAME_POINTER_REGNUM)
      {
        HOST_WIDE_INT offset;
*************** seh_frame_related_expr (FILE *f, struct
*** 1258,1264 ****
  	  else if (dest == stack_pointer_rtx)
  	    {
  	      gcc_assert (src == stack_pointer_rtx);
! 	      seh_emit_stackalloc (f, seh, addend);
  	    }
  	  else
  	    gcc_unreachable ();
--- 1223,1229 ----
  	  else if (dest == stack_pointer_rtx)
  	    {
  	      gcc_assert (src == stack_pointer_rtx);
! 	      mingw_pe_seh_emit_stackalloc (f, seh, addend);
  	    }
  	  else
  	    gcc_unreachable ();
*************** i386_pe_seh_unwind_emit (FILE *out_file,
*** 1370,1376 ****
  }
  
  void
! i386_pe_seh_emit_except_personality (rtx personality)
  {
    int flags = 0;
  
--- 1335,1341 ----
  }
  
  void
! mingw_pe_seh_emit_except_personality (rtx personality)
  {
    int flags = 0;
  
*************** i386_pe_seh_emit_except_personality (rtx
*** 1404,1410 ****
  }
  
  void
! i386_pe_seh_init_sections (void)
  {
    if (TARGET_SEH)
      exception_section = get_unnamed_section (0, output_section_asm_op,
--- 1369,1375 ----
  }
  
  void
! mingw_pe_seh_init_sections (void)
  {
    if (TARGET_SEH)
      exception_section = get_unnamed_section (0, output_section_asm_op,
*************** i386_pe_start_function (FILE *f, const c
*** 1423,1437 ****
  }
  
  void
! i386_pe_end_function (FILE *f, const char *, tree)
  {
!   i386_pe_seh_fini (f, false);
  }
! 
  void
! i386_pe_end_cold_function (FILE *f, const char *, tree)
  {
!   i386_pe_seh_fini (f, true);
  }
  
  #include "gt-winnt.h"
--- 1388,1402 ----
  }
  
  void
! mingw_pe_end_function (FILE *f, const char *, tree)
  {
!   mingw_pe_seh_fini (f, false);
  }
! 
  void
! mingw_pe_end_cold_function (FILE *f, const char *, tree)
  {
!   mingw_pe_seh_fini (f, true);
  }
  
  #include "gt-winnt.h"
diff -Nrcpad gcc-17-20260705/gcc/config/mingw/winnt.h gcc-17-20260712/gcc/config/mingw/winnt.h
*** gcc-17-20260705/gcc/config/mingw/winnt.h	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/mingw/winnt.h	Sun Jul 12 22:32:07 2026
*************** http://www.gnu.org/licenses/.  */
*** 20,25 ****
--- 20,59 ----
  
  #ifndef USED_FOR_TARGET
  
+ /* Structured Exception Handling unwind info.  */
+ 
+ struct seh_frame_state
+ {
+   /* SEH records offsets relative to the lowest address of the fixed stack
+      allocation.  If there is no frame pointer, these offsets are from the
+      stack pointer; if there is a frame pointer, these offsets are from the
+      value of the stack pointer when the frame pointer was established, i.e.
+      the frame pointer minus the offset in the .seh_setframe directive.
+ 
+      We do not distinguish these two cases, i.e. we consider that the offsets
+      are always relative to the "current" stack pointer.  This means that we
+      need to perform the fixed stack allocation before establishing the frame
+      pointer whenever there are registers to be saved, and this is guaranteed
+      by the prologue provided that we force the frame pointer to point at or
+      below the lowest used register save area, see ix86_compute_frame_layout.
+ 
+      This tracks the current stack pointer offset from the CFA.  */
+   HOST_WIDE_INT sp_offset;
+ 
+   /* The CFA is located at CFA_REG + CFA_OFFSET.  */
+   HOST_WIDE_INT cfa_offset;
+   rtx cfa_reg;
+ 
+   /* The offset wrt the CFA where register N has been saved.  */
+   HOST_WIDE_INT reg_offset[FIRST_PSEUDO_REGISTER];
+ 
+   /* True if we are past the end of the epilogue.  */
+   bool after_prologue;
+ 
+   /* True if we are in the cold section.  */
+   bool in_cold_section;
+ };
+ 
  extern tree aarch64_handle_ms_abi_attribute (tree *, tree, tree, int, bool *);
  extern tree mingw_handle_selectany_attribute (tree *, tree, tree, int, bool *);
  
*************** extern void mingw_pe_asm_lto_start (void
*** 28,33 ****
--- 62,69 ----
  extern void mingw_pe_asm_lto_end (void);
  extern void mingw_pe_declare_type (FILE *, const char *, bool, bool);
  extern void mingw_pe_encode_section_info (tree, rtx, int);
+ extern void mingw_pe_end_cold_function (FILE *, const char *, tree);
+ extern void mingw_pe_end_function (FILE *, const char *, tree);
  extern void mingw_pe_file_end (void);
  extern void mingw_pe_maybe_record_exported_symbol (tree, const char *, int);
  extern void mingw_pe_record_stub (const char *, bool);
*************** extern section *mingw_pe_select_section
*** 36,41 ****
--- 72,85 ----
  extern void mingw_pe_unique_section (tree, int);
  extern bool mingw_pe_valid_dllimport_attribute_p (const_tree);
  
+ extern void mingw_pe_seh_init (FILE *);
+ extern void mingw_pe_seh_init_sections (void);
+ extern void mingw_pe_seh_cold_init (FILE *, const char *);
+ extern void mingw_pe_seh_emit_except_personality (rtx);
+ extern void mingw_pe_seh_emit_stackalloc (FILE *, struct seh_frame_state *,
+ 					  HOST_WIDE_INT);
+ extern void mingw_pe_seh_end_prologue (FILE *);
+ 
  #endif /* not USED_FOR_TARGET.  */
  
  #endif /* GCC_MINGW_WINNT_H.  */
diff -Nrcpad gcc-17-20260705/gcc/config/nvptx/nvptx.cc gcc-17-20260712/gcc/config/nvptx/nvptx.cc
*** gcc-17-20260705/gcc/config/nvptx/nvptx.cc	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/nvptx/nvptx.cc	Sun Jul 12 22:32:07 2026
*************** nvptx_output_ascii (FILE *, const char *
*** 2482,2488 ****
     given dimension.  */
  
  static bool
! flexible_array_member_type_p (const_tree type)
  {
    if (TREE_CODE (type) != RECORD_TYPE)
      return false;
--- 2482,2488 ----
     given dimension.  */
  
  static bool
! nvptx_flexible_array_member_type_p (const_tree type)
  {
    if (TREE_CODE (type) != RECORD_TYPE)
      return false;
*************** nvptx_assemble_decl_begin (FILE *file, c
*** 2520,2526 ****
    bool atype = (TREE_CODE (type) == ARRAY_TYPE)
      && (TYPE_DOMAIN (type) == NULL_TREE);
  
!   if (undefined && flexible_array_member_type_p (type))
      {
        size = 0;
        atype = true;
--- 2520,2526 ----
    bool atype = (TREE_CODE (type) == ARRAY_TYPE)
      && (TYPE_DOMAIN (type) == NULL_TREE);
  
!   if (undefined && nvptx_flexible_array_member_type_p (type))
      {
        size = 0;
        atype = true;
diff -Nrcpad gcc-17-20260705/gcc/config/or1k/or1k.cc gcc-17-20260712/gcc/config/or1k/or1k.cc
*** gcc-17-20260705/gcc/config/or1k/or1k.cc	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/or1k/or1k.cc	Sun Jul 12 22:32:07 2026
*************** or1k_hard_regno_mode_ok (unsigned int re
*** 1393,1399 ****
       really single bits within SP[SR].  Also allow condition flag register
       in SImode to match or1k_can_change_mode_class.  */
    if (REGNO_REG_CLASS (regno) == FLAG_REGS)
!     return mode == BImode || mode == SImode;
    return true;
  }
  
--- 1393,1399 ----
       really single bits within SP[SR].  Also allow condition flag register
       in SImode to match or1k_can_change_mode_class.  */
    if (REGNO_REG_CLASS (regno) == FLAG_REGS)
!     return mode == BImode;
    return true;
  }
  
*************** or1k_can_change_mode_class (machine_mode
*** 1411,1417 ****
  {
    /* Allow cnoverting special flags to SI mode subregs.  */
    if (rclass == FLAG_REGS)
!     return from == to || (from == BImode && to == SImode);
    return true;
  }
  
--- 1411,1417 ----
  {
    /* Allow cnoverting special flags to SI mode subregs.  */
    if (rclass == FLAG_REGS)
!     return from == to;
    return true;
  }
  
*************** or1k_is_cmov_insn (rtx_insn *seq)
*** 1697,1711 ****
  }
  
  /* Implement TARGET_NOCE_CONVERSION_PROFITABLE_P.  We detect if the conversion
!    resulted in a l.cmov instruction and if so we consider it more profitable than
!    branch instructions.  */
  
  static bool
  or1k_noce_conversion_profitable_p (rtx_insn *seq,
  				    struct noce_if_info *if_info)
  {
!   if (TARGET_CMOV)
!     return or1k_is_cmov_insn (seq);
  
    return default_noce_conversion_profitable_p (seq, if_info);
  }
--- 1697,1713 ----
  }
  
  /* Implement TARGET_NOCE_CONVERSION_PROFITABLE_P.  We detect if the conversion
!    resulted in a l.cmov like instruction and if so we consider it more
!    profitable than branch instructions.  Even if we do not support l.cmov this
!    allows the *cmov instruction sequnce to be expanded and then later lowered
!    with the *cmov split logic.  */
  
  static bool
  or1k_noce_conversion_profitable_p (rtx_insn *seq,
  				    struct noce_if_info *if_info)
  {
!   if (or1k_is_cmov_insn (seq))
!     return true;
  
    return default_noce_conversion_profitable_p (seq, if_info);
  }
diff -Nrcpad gcc-17-20260705/gcc/config/pa/pa.h gcc-17-20260712/gcc/config/pa/pa.h
*** gcc-17-20260705/gcc/config/pa/pa.h	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/pa/pa.h	Sun Jul 12 22:32:07 2026
*************** typedef struct GTY(()) machine_function
*** 269,279 ****
  #define MIN_UNITS_PER_WORD      4
  #endif
  
- /* The widest floating point format supported by the hardware.  Note that
-    setting this influences some Ada floating point type sizes, currently
-    required for GNAT to operate properly.  */
- #define WIDEST_HARDWARE_FP_SIZE 64
- 
  /* Allocation boundary (in *bits*) for storing arguments in argument list.  */
  #define PARM_BOUNDARY BITS_PER_WORD
  
--- 269,274 ----
diff -Nrcpad gcc-17-20260705/gcc/config/riscv/andes-vector-builtins-bases.cc gcc-17-20260712/gcc/config/riscv/andes-vector-builtins-bases.cc
*** gcc-17-20260705/gcc/config/riscv/andes-vector-builtins-bases.cc	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/riscv/andes-vector-builtins-bases.cc	Sun Jul 12 22:32:07 2026
*************** public:
*** 150,167 ****
    }
  };
  
! static CONSTEXPR const nds_vfwcvtbf16_f nds_vfwcvt_s_obj;
! static CONSTEXPR const nds_vfncvtbf16_f<NO_FRM> nds_vfncvt_bf16_obj;
! static CONSTEXPR const nds_vfncvtbf16_f<HAS_FRM> nds_vfncvt_bf16_frm_obj;
! static CONSTEXPR const nds_nibbleload<true> nds_vln8_obj;
! static CONSTEXPR const nds_nibbleload<false> nds_vlnu8_obj;
! static CONSTEXPR const nds_vfpmad <UNSPEC_NDS_VFPMADT, NO_FRM> nds_vfpmadt_obj;
! static CONSTEXPR const nds_vfpmad <UNSPEC_NDS_VFPMADB, NO_FRM> nds_vfpmadb_obj;
! static CONSTEXPR const nds_vfpmad <UNSPEC_NDS_VFPMADT, HAS_FRM> nds_vfpmadt_frm_obj;
! static CONSTEXPR const nds_vfpmad <UNSPEC_NDS_VFPMADB, HAS_FRM> nds_vfpmadb_frm_obj;
! static CONSTEXPR const nds_vd4dot<SIGN_EXTEND> nds_vd4dots_obj;
! static CONSTEXPR const nds_vd4dot<ZERO_EXTEND> nds_vd4dotu_obj;
! static CONSTEXPR const nds_vd4dotsu nds_vd4dotsu_obj;
  
  /* Declare the function base NAME, pointing it to an instance
     of class <NAME>_obj.  */
--- 150,167 ----
    }
  };
  
! static constexpr const nds_vfwcvtbf16_f nds_vfwcvt_s_obj;
! static constexpr const nds_vfncvtbf16_f<NO_FRM> nds_vfncvt_bf16_obj;
! static constexpr const nds_vfncvtbf16_f<HAS_FRM> nds_vfncvt_bf16_frm_obj;
! static constexpr const nds_nibbleload<true> nds_vln8_obj;
! static constexpr const nds_nibbleload<false> nds_vlnu8_obj;
! static constexpr const nds_vfpmad <UNSPEC_NDS_VFPMADT, NO_FRM> nds_vfpmadt_obj;
! static constexpr const nds_vfpmad <UNSPEC_NDS_VFPMADB, NO_FRM> nds_vfpmadb_obj;
! static constexpr const nds_vfpmad <UNSPEC_NDS_VFPMADT, HAS_FRM> nds_vfpmadt_frm_obj;
! static constexpr const nds_vfpmad <UNSPEC_NDS_VFPMADB, HAS_FRM> nds_vfpmadb_frm_obj;
! static constexpr const nds_vd4dot<SIGN_EXTEND> nds_vd4dots_obj;
! static constexpr const nds_vd4dot<ZERO_EXTEND> nds_vd4dotu_obj;
! static constexpr const nds_vd4dotsu nds_vd4dotsu_obj;
  
  /* Declare the function base NAME, pointing it to an instance
     of class <NAME>_obj.  */
diff -Nrcpad gcc-17-20260705/gcc/config/riscv/constraints.md gcc-17-20260712/gcc/config/riscv/constraints.md
*** gcc-17-20260705/gcc/config/riscv/constraints.md	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/riscv/constraints.md	Sun Jul 12 22:32:07 2026
***************
*** 184,195 ****
  (define_register_constraint "vm" "TARGET_VECTOR ? VM_REGS : NO_REGS"
    "A vector mask register (if available).")
  
! ;; Dependent (dynamic) constraint:
! ;; "The source group must overlap the highest-numbered part of the
! ;; "destination group", i.e. this operand depends on operand 0.
! (define_register_constraint "Wtt" "TARGET_VECTOR ? V_REGS : NO_REGS"
!   "Vector widening overlap"
!   "riscv_widen_overlap_ok (regno, mode, ref_regno, ref_mode)"
    "0")
  
  ;; This constraint is used to match instruction "csrr %0, vlenb" which is generated in "mov<mode>".
--- 184,220 ----
  (define_register_constraint "vm" "TARGET_VECTOR ? VM_REGS : NO_REGS"
    "A vector mask register (if available).")
  
! ;; Dependent (dynamic) constraint for widening overlap:
! ;; The RVV widening constraints for register overlap, aka dest EEW > src EEW.
! ;; Quote from RVV spec 1.0:
! ;;
! ;; The destination EEW is greater than the source EEW, the source EMUL is at
! ;; least 1, and the overlap is in the highest-numbered part of the destination
! ;; register group (e.g., when LMUL=8, vzext.vf4 v0, v6 is legal, but a source
! ;; of v0, v2, or v4 is not).
! ;;
! ;; Take vzext.vfN for example, only below cases are valid.
! ;; Source EMUL = LMUL * (Source EEW / SEW) = LMUL * SEW / (N * SEW) = LMUL / N
! ;;
! ;; +-----------+------------+------------+----------+
! ;; |           | LMUL = 8   | LMUL = 4   | LMUL = 2 |
! ;; +-----------+------------+------------+----------+
! ;; | vzext.vf2 | EMUL = 4   | EMUL = 2   | EMUL = 1 |
! ;; +-----------+------------+------------+----------+
! ;; |           | v0-7, v4-7 | v0-3, v2-3 | v0-1, v1 |
! ;; +-----------+------------+------------+----------+
! ;; | vzext.vf4 | EMUL = 2   | EMUL = 1   |          |
! ;; +-----------+------------+------------+----------+
! ;; |           | v0-7, v6-7 | v0-3, v3   |          |
! ;; +-----------+------------+------------+----------+
! ;; | vzext.vf8 | EMUL = 1   |            |          |
! ;; +-----------+------------+------------+----------+
! ;; |           | v0-7, v7   |            |          |
! ;; +-----------+------------+------------+----------+
! ;;
! (define_register_constraint "Wvr" "TARGET_VECTOR ? V_REGS : NO_REGS"
!   "Widening vector reg constraint"
!   "riscv_vector::riscv_v_widen_constraint_ok (regno, mode, ref_regno, ref_mode)"
    "0")
  
  ;; This constraint is used to match instruction "csrr %0, vlenb" which is generated in "mov<mode>".
diff -Nrcpad gcc-17-20260705/gcc/config/riscv/riscv-cores.def gcc-17-20260712/gcc/config/riscv/riscv-cores.def
*** gcc-17-20260705/gcc/config/riscv/riscv-cores.def	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/riscv/riscv-cores.def	Sun Jul 12 22:32:07 2026
*************** RISCV_CORE("andes-nx45",      "rv64imc_z
*** 219,226 ****
  RISCV_CORE("andes-a45",       "rv32imafdc_zicsr_zifencei_xandesperf", "andes-45-series")
  RISCV_CORE("andes-ax45",      "rv64imafdc_zicsr_zifencei_xandesperf", "andes-45-series")
  
! RISCV_CORE("spacemit-x60",    "rv64imafdcv_zba_zbb_zbc_zbs_zicboz_zicond_"
! 			      "zbkc_zfh_zvfh_zvkt_zvl256b_sscofpmf_xsmtvdot",
  			      "spacemit-x60")
  
  RISCV_CORE("spacemit-x100",   "rva23s64_smepmp_smnpm_smstateen_sspm_zbc_zbkc_"
--- 219,227 ----
  RISCV_CORE("andes-a45",       "rv32imafdc_zicsr_zifencei_xandesperf", "andes-45-series")
  RISCV_CORE("andes-ax45",      "rv64imafdc_zicsr_zifencei_xandesperf", "andes-45-series")
  
! RISCV_CORE("spacemit-x60",    "rva22u64_v_zicond_zifencei_zihintntl_zihpm_zfh_zbc_"
! 			      "zbkc_zvfh_zvfhmin_zvkt_zvl256b_smepmp_sscofpmf_sstc_"
! 			      "svinval_svnapot_svpbmt_xsmtvdot",
  			      "spacemit-x60")
  
  RISCV_CORE("spacemit-x100",   "rva23s64_smepmp_smnpm_smstateen_sspm_zbc_zbkc_"
diff -Nrcpad gcc-17-20260705/gcc/config/riscv/riscv-protos.h gcc-17-20260712/gcc/config/riscv/riscv-protos.h
*** gcc-17-20260705/gcc/config/riscv/riscv-protos.h	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/riscv/riscv-protos.h	Sun Jul 12 22:32:07 2026
*************** extern poly_uint64 riscv_regmode_natural
*** 175,182 ****
  extern bool riscv_vla_mode_p (machine_mode);
  extern bool riscv_tuple_mode_p (machine_mode);
  extern bool riscv_vls_mode_p (machine_mode);
- extern bool riscv_widen_overlap_ok (unsigned int, machine_mode,
- 				    unsigned int, machine_mode);
  extern int riscv_get_v_regno_alignment (machine_mode);
  extern bool riscv_shamt_matches_mask_p (int, HOST_WIDE_INT);
  extern void riscv_subword_address (rtx, rtx *, rtx *, rtx *, rtx *);
--- 175,180 ----
*************** extern std::string riscv_arch_str (bool
*** 206,211 ****
--- 204,211 ----
  extern void riscv_parse_arch_string (const char *, struct gcc_options *, location_t);
  
  extern bool riscv_hard_regno_rename_ok (unsigned, unsigned);
+ extern bool riscv_vector_mode_p (machine_mode);
+ extern unsigned int riscv_hard_regno_nregs (unsigned int, machine_mode);
  
  rtl_opt_pass * make_pass_shorten_memrefs (gcc::context *ctxt);
  rtl_opt_pass * make_pass_avlprop (gcc::context *ctxt);
*************** struct common_vector_cost
*** 304,310 ****
  /* scalable vectorization (VLA) specific cost.  */
  struct scalable_vector_cost : common_vector_cost
  {
!   CONSTEXPR scalable_vector_cost (const common_vector_cost &base)
      : common_vector_cost (base)
    {}
  
--- 304,310 ----
  /* scalable vectorization (VLA) specific cost.  */
  struct scalable_vector_cost : common_vector_cost
  {
!   constexpr scalable_vector_cost (const common_vector_cost &base)
      : common_vector_cost (base)
    {}
  
*************** void emit_nonvlmax_insn (unsigned, unsig
*** 642,647 ****
--- 642,648 ----
  void emit_avltype_insn (unsigned, unsigned, rtx *, avl_type, rtx = nullptr);
  void emit_vlmax_insn_lra (unsigned, unsigned, rtx *, rtx);
  enum vlmul_type get_vlmul (machine_mode);
+ bool is_frac_vlmul_p (machine_mode);
  rtx get_vlmax_rtx (machine_mode);
  unsigned int get_ratio (machine_mode);
  unsigned int get_nf (machine_mode);
*************** bool whole_reg_loadstore_p (rtx dest, rt
*** 825,830 ****
--- 826,833 ----
  			    avl_type);
  bool splat_to_scalar_move_p (rtx *);
  rtx get_fp_rounding_coefficient (machine_mode);
+ bool riscv_v_widen_constraint_ok (unsigned int, machine_mode, unsigned int,
+ 				  machine_mode);
  }
  
  /* We classify builtin types into two classes:
diff -Nrcpad gcc-17-20260705/gcc/config/riscv/riscv-string.cc gcc-17-20260712/gcc/config/riscv/riscv-string.cc
*** gcc-17-20260705/gcc/config/riscv/riscv-string.cc	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/riscv/riscv-string.cc	Sun Jul 12 22:32:07 2026
*************** expand_block_move (rtx dst_in, rtx src_i
*** 1255,1261 ****
  	  && length > riscv_memmove_size_threshold)
  	return false;
        else if (!movmem_p
! 	       && riscv_memmove_size_threshold >= 0
  	       && length > riscv_memcpy_size_threshold)
  	return false;
      }
--- 1255,1261 ----
  	  && length > riscv_memmove_size_threshold)
  	return false;
        else if (!movmem_p
! 	       && riscv_memcpy_size_threshold >= 0
  	       && length > riscv_memcpy_size_threshold)
  	return false;
      }
diff -Nrcpad gcc-17-20260705/gcc/config/riscv/riscv-v.cc gcc-17-20260712/gcc/config/riscv/riscv-v.cc
*** gcc-17-20260705/gcc/config/riscv/riscv-v.cc	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/riscv/riscv-v.cc	Sun Jul 12 22:32:07 2026
*************** get_vlmul (machine_mode mode)
*** 2054,2059 ****
--- 2054,2080 ----
    return mode_vtype_infos.vlmul[mode];
  }
  
+ bool
+ is_frac_vlmul_p (machine_mode mode)
+ {
+   switch (get_vlmul (mode))
+     {
+     case LMUL_1:
+     case LMUL_2:
+     case LMUL_4:
+     case LMUL_8:
+       return false;
+     case LMUL_F8:
+     case LMUL_F4:
+     case LMUL_F2:
+       return true;
+     default:
+       break;
+     }
+ 
+   gcc_unreachable ();
+ }
+ 
  /* Return the VLMAX rtx of vector mode MODE.  */
  rtx
  get_vlmax_rtx (machine_mode mode)
*************** splat_to_scalar_move_p (rtx *ops)
*** 6473,6476 ****
--- 6494,6551 ----
  	 && known_ge (GET_MODE_SIZE (Pmode), GET_MODE_SIZE (GET_MODE (ops[3])));
  }
  
+ /* Return true if REGNO in MODE can be used as source in a widening
+    instruction with destination WIDE_REGNO in WIDE_MODE.
+    This is true if either there is no overlap at all, or the overlap
+    is in the highest-numbered part of the destination group.  */
+ 
+ bool
+ riscv_v_widen_constraint_ok (unsigned int regno, machine_mode mode,
+ 			     unsigned int wide_regno, machine_mode wide_mode)
+ {
+   /* If the referenced regno is no hard reg, allow everything.
+      Note: Even if we don't have a wide_regno yet, here we could also decline
+ 	   operands based on just regno alone.  If we decided to accept only
+ 	   overlapping registers in this constraint, we'd might need to e.g.
+ 	   decline a regno = v0 right away, even if we don't know wide_regno
+ 	   yet.  Otherwise, the return true here could get us into unsatisfiable
+ 	   situations in LRA later, as no wide reg can overlap v0 in the high
+ 	   part.  */
+   if (wide_regno == INVALID_REGNUM)
+     return true;
+ 
+   if (!V_REG_P (regno) || !V_REG_P (wide_regno) || regno == wide_regno)
+     return false;
+ 
+   gcc_checking_assert (riscv_vector_mode_p (mode)
+ 		       && riscv_vector_mode_p (wide_mode));
+ 
+   if (riscv_tuple_mode_p (mode))
+      return false;
+ 
+   unsigned int wide_nregs = riscv_hard_regno_nregs (wide_regno, wide_mode);
+   unsigned int nregs = riscv_hard_regno_nregs (regno, mode);
+ 
+   if (wide_nregs == nregs) /* Dest LMUL <= 1.  */
+     {
+       gcc_checking_assert (nregs == 1);
+ 
+       return true;
+     }
+ 
+   gcc_checking_assert (wide_nregs > nregs);
+   gcc_checking_assert ((wide_nregs % nregs) == 0);
+ 
+   /* No overlap.  */
+   if (regno + nregs <= wide_regno || wide_regno + wide_nregs <= regno)
+     return true;
+ 
+   if (is_frac_vlmul_p (mode)) /* Source LMUL < 1.  */
+     return false;
+ 
+   unsigned int highest_num = wide_nregs - nregs;
+ 
+   return (regno % wide_nregs) == highest_num;
+ }
+ 
  } // namespace riscv_vector
diff -Nrcpad gcc-17-20260705/gcc/config/riscv/riscv-vector-builtins-bases.cc gcc-17-20260712/gcc/config/riscv/riscv-vector-builtins-bases.cc
*** gcc-17-20260705/gcc/config/riscv/riscv-vector-builtins-bases.cc	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/riscv/riscv-vector-builtins-bases.cc	Sun Jul 12 22:32:07 2026
*************** public:
*** 2462,2791 ****
    }
  };
  
! static CONSTEXPR const vsetvl<false> vsetvl_obj;
! static CONSTEXPR const vsetvl<true> vsetvlmax_obj;
! static CONSTEXPR const loadstore<false, LST_UNIT_STRIDE, false> vle_obj;
! static CONSTEXPR const loadstore<true, LST_UNIT_STRIDE, false> vse_obj;
! static CONSTEXPR const loadstore<false, LST_UNIT_STRIDE, false> vlm_obj;
! static CONSTEXPR const loadstore<true, LST_UNIT_STRIDE, false> vsm_obj;
! static CONSTEXPR const loadstore<false, LST_STRIDED, false> vlse_obj;
! static CONSTEXPR const loadstore<true, LST_STRIDED, false> vsse_obj;
! static CONSTEXPR const loadstore<false, LST_INDEXED, false> vluxei8_obj;
! static CONSTEXPR const loadstore<false, LST_INDEXED, false> vluxei16_obj;
! static CONSTEXPR const loadstore<false, LST_INDEXED, false> vluxei32_obj;
! static CONSTEXPR const loadstore<false, LST_INDEXED, false> vluxei64_obj;
! static CONSTEXPR const loadstore<false, LST_INDEXED, true> vloxei8_obj;
! static CONSTEXPR const loadstore<false, LST_INDEXED, true> vloxei16_obj;
! static CONSTEXPR const loadstore<false, LST_INDEXED, true> vloxei32_obj;
! static CONSTEXPR const loadstore<false, LST_INDEXED, true> vloxei64_obj;
! static CONSTEXPR const loadstore<true, LST_INDEXED, false> vsuxei8_obj;
! static CONSTEXPR const loadstore<true, LST_INDEXED, false> vsuxei16_obj;
! static CONSTEXPR const loadstore<true, LST_INDEXED, false> vsuxei32_obj;
! static CONSTEXPR const loadstore<true, LST_INDEXED, false> vsuxei64_obj;
! static CONSTEXPR const loadstore<true, LST_INDEXED, true> vsoxei8_obj;
! static CONSTEXPR const loadstore<true, LST_INDEXED, true> vsoxei16_obj;
! static CONSTEXPR const loadstore<true, LST_INDEXED, true> vsoxei32_obj;
! static CONSTEXPR const loadstore<true, LST_INDEXED, true> vsoxei64_obj;
! static CONSTEXPR const binop<PLUS> vadd_obj;
! static CONSTEXPR const binop<MINUS> vsub_obj;
! static CONSTEXPR const vrsub vrsub_obj;
! static CONSTEXPR const binop<AND> vand_obj;
! static CONSTEXPR const binop<IOR> vor_obj;
! static CONSTEXPR const binop<XOR> vxor_obj;
! static CONSTEXPR const binop<ASHIFT> vsll_obj;
! static CONSTEXPR const binop<ASHIFTRT> vsra_obj;
! static CONSTEXPR const binop<LSHIFTRT> vsrl_obj;
! static CONSTEXPR const binop<SMIN> vmin_obj;
! static CONSTEXPR const binop<SMAX> vmax_obj;
! static CONSTEXPR const binop<UMIN> vminu_obj;
! static CONSTEXPR const binop<UMAX> vmaxu_obj;
! static CONSTEXPR const binop<MULT> vmul_obj;
! static CONSTEXPR const vmulh<UNSPEC_VMULHS> vmulh_obj;
! static CONSTEXPR const vmulh<UNSPEC_VMULHU> vmulhu_obj;
! static CONSTEXPR const vmulh<UNSPEC_VMULHSU> vmulhsu_obj;
! static CONSTEXPR const binop<DIV> vdiv_obj;
! static CONSTEXPR const binop<MOD> vrem_obj;
! static CONSTEXPR const binop<UDIV> vdivu_obj;
! static CONSTEXPR const binop<UMOD> vremu_obj;
! static CONSTEXPR const unop<NEG> vneg_obj;
! static CONSTEXPR const unop<NOT> vnot_obj;
! static CONSTEXPR const ext<SIGN_EXTEND> vsext_obj;
! static CONSTEXPR const ext<ZERO_EXTEND> vzext_obj;
! static CONSTEXPR const widen_binop<PLUS, SIGN_EXTEND>vwadd_obj;
! static CONSTEXPR const widen_binop<MINUS, SIGN_EXTEND>vwsub_obj;
! static CONSTEXPR const widen_binop<MULT, SIGN_EXTEND>vwmul_obj;
! static CONSTEXPR const widen_binop<PLUS, ZERO_EXTEND>vwaddu_obj;
! static CONSTEXPR const widen_binop<MINUS, ZERO_EXTEND>vwsubu_obj;
! static CONSTEXPR const widen_binop<MULT, ZERO_EXTEND>vwmulu_obj;
! static CONSTEXPR const vwmulsu vwmulsu_obj;
! static CONSTEXPR const vwcvt<SIGN_EXTEND> vwcvt_x_obj;
! static CONSTEXPR const vwcvt<ZERO_EXTEND> vwcvtu_x_obj;
! static CONSTEXPR const vadc vadc_obj;
! static CONSTEXPR const vsbc vsbc_obj;
! static CONSTEXPR const vmadc vmadc_obj;
! static CONSTEXPR const vmsbc vmsbc_obj;
! static CONSTEXPR const vnshift<LSHIFTRT> vnsrl_obj;
! static CONSTEXPR const vnshift<ASHIFTRT> vnsra_obj;
! static CONSTEXPR const vncvt_x vncvt_x_obj;
! static CONSTEXPR const vmerge vmerge_obj;
! static CONSTEXPR const vmv_v vmv_v_obj;
! static CONSTEXPR const icmp<EQ> vmseq_obj;
! static CONSTEXPR const icmp<NE> vmsne_obj;
! static CONSTEXPR const icmp<LT> vmslt_obj;
! static CONSTEXPR const icmp<GT> vmsgt_obj;
! static CONSTEXPR const icmp<LE> vmsle_obj;
! static CONSTEXPR const icmp<GE> vmsge_obj;
! static CONSTEXPR const icmp<LTU> vmsltu_obj;
! static CONSTEXPR const icmp<GTU> vmsgtu_obj;
! static CONSTEXPR const icmp<LEU> vmsleu_obj;
! static CONSTEXPR const icmp<GEU> vmsgeu_obj;
! static CONSTEXPR const vmacc vmacc_obj;
! static CONSTEXPR const vnmsac vnmsac_obj;
! static CONSTEXPR const vmadd vmadd_obj;
! static CONSTEXPR const vnmsub vnmsub_obj;
! static CONSTEXPR const vwmacc vwmacc_obj;
! static CONSTEXPR const vwmaccu vwmaccu_obj;
! static CONSTEXPR const vwmaccsu vwmaccsu_obj;
! static CONSTEXPR const vwmaccus vwmaccus_obj;
! static CONSTEXPR const binop<SS_PLUS> vsadd_obj;
! static CONSTEXPR const binop<SS_MINUS> vssub_obj;
! static CONSTEXPR const binop<US_PLUS> vsaddu_obj;
! static CONSTEXPR const binop<US_MINUS> vssubu_obj;
! static CONSTEXPR const sat_op<UNSPEC_VAADDU> vaaddu_obj;
! static CONSTEXPR const sat_op<UNSPEC_VAADD> vaadd_obj;
! static CONSTEXPR const sat_op<UNSPEC_VASUBU> vasubu_obj;
! static CONSTEXPR const sat_op<UNSPEC_VASUB> vasub_obj;
! static CONSTEXPR const sat_op<UNSPEC_VSMUL> vsmul_obj;
! static CONSTEXPR const sat_op<UNSPEC_VSSRL> vssrl_obj;
! static CONSTEXPR const sat_op<UNSPEC_VSSRA> vssra_obj;
! static CONSTEXPR const vnclip<UNSPEC_VNCLIP> vnclip_obj;
! static CONSTEXPR const vnclip<UNSPEC_VNCLIPU> vnclipu_obj;
! static CONSTEXPR const mask_logic<AND> vmand_obj;
! static CONSTEXPR const mask_nlogic<AND> vmnand_obj;
! static CONSTEXPR const mask_notlogic<AND> vmandn_obj;
! static CONSTEXPR const mask_logic<XOR> vmxor_obj;
! static CONSTEXPR const mask_logic<IOR> vmor_obj;
! static CONSTEXPR const mask_nlogic<IOR> vmnor_obj;
! static CONSTEXPR const mask_notlogic<IOR> vmorn_obj;
! static CONSTEXPR const mask_nlogic<XOR> vmxnor_obj;
! static CONSTEXPR const vmmv vmmv_obj;
! static CONSTEXPR const vmclr vmclr_obj;
! static CONSTEXPR const vmset vmset_obj;
! static CONSTEXPR const vmnot vmnot_obj;
! static CONSTEXPR const vcpop vcpop_obj;
! static CONSTEXPR const vfirst vfirst_obj;
! static CONSTEXPR const mask_misc<UNSPEC_VMSBF> vmsbf_obj;
! static CONSTEXPR const mask_misc<UNSPEC_VMSIF> vmsif_obj;
! static CONSTEXPR const mask_misc<UNSPEC_VMSOF> vmsof_obj;
! static CONSTEXPR const viota viota_obj;
! static CONSTEXPR const vid vid_obj;
! static CONSTEXPR const binop<PLUS, true> vfadd_obj;
! static CONSTEXPR const binop<MINUS, true> vfsub_obj;
! static CONSTEXPR const binop<PLUS, true, HAS_FRM> vfadd_frm_obj;
! static CONSTEXPR const binop<MINUS, true, HAS_FRM> vfsub_frm_obj;
! static CONSTEXPR const reverse_binop<MINUS> vfrsub_obj;
! static CONSTEXPR const reverse_binop<MINUS, HAS_FRM> vfrsub_frm_obj;
! static CONSTEXPR const widen_binop_fp<PLUS> vfwadd_obj;
! static CONSTEXPR const widen_binop_fp<PLUS, HAS_FRM> vfwadd_frm_obj;
! static CONSTEXPR const widen_binop_fp<MINUS> vfwsub_obj;
! static CONSTEXPR const widen_binop_fp<MINUS, HAS_FRM> vfwsub_frm_obj;
! static CONSTEXPR const binop<MULT, true> vfmul_obj;
! static CONSTEXPR const binop<MULT,  true, HAS_FRM> vfmul_frm_obj;
! static CONSTEXPR const binop<DIV, true> vfdiv_obj;
! static CONSTEXPR const binop<DIV,  true, HAS_FRM> vfdiv_frm_obj;
! static CONSTEXPR const reverse_binop<DIV> vfrdiv_obj;
! static CONSTEXPR const reverse_binop<DIV, HAS_FRM> vfrdiv_frm_obj;
! static CONSTEXPR const widen_binop_fp<MULT> vfwmul_obj;
! static CONSTEXPR const widen_binop_fp<MULT, HAS_FRM> vfwmul_frm_obj;
! static CONSTEXPR const vfmacc<NO_FRM> vfmacc_obj;
! static CONSTEXPR const vfmacc<HAS_FRM> vfmacc_frm_obj;
! static CONSTEXPR const vfnmsac<NO_FRM> vfnmsac_obj;
! static CONSTEXPR const vfnmsac<HAS_FRM> vfnmsac_frm_obj;
! static CONSTEXPR const vfmadd<NO_FRM> vfmadd_obj;
! static CONSTEXPR const vfmadd<HAS_FRM> vfmadd_frm_obj;
! static CONSTEXPR const vfnmsub<NO_FRM> vfnmsub_obj;
! static CONSTEXPR const vfnmsub<HAS_FRM> vfnmsub_frm_obj;
! static CONSTEXPR const vfnmacc<NO_FRM> vfnmacc_obj;
! static CONSTEXPR const vfnmacc<HAS_FRM> vfnmacc_frm_obj;
! static CONSTEXPR const vfmsac<NO_FRM> vfmsac_obj;
! static CONSTEXPR const vfmsac<HAS_FRM> vfmsac_frm_obj;
! static CONSTEXPR const vfnmadd<NO_FRM> vfnmadd_obj;
! static CONSTEXPR const vfnmadd<HAS_FRM> vfnmadd_frm_obj;
! static CONSTEXPR const vfmsub<NO_FRM> vfmsub_obj;
! static CONSTEXPR const vfmsub<HAS_FRM> vfmsub_frm_obj;
! static CONSTEXPR const vfwmacc<NO_FRM> vfwmacc_obj;
! static CONSTEXPR const vfwmacc<HAS_FRM> vfwmacc_frm_obj;
! static CONSTEXPR const vfwnmacc<NO_FRM> vfwnmacc_obj;
! static CONSTEXPR const vfwnmacc<HAS_FRM> vfwnmacc_frm_obj;
! static CONSTEXPR const vfwmsac<NO_FRM> vfwmsac_obj;
! static CONSTEXPR const vfwmsac<HAS_FRM> vfwmsac_frm_obj;
! static CONSTEXPR const vfwnmsac<NO_FRM> vfwnmsac_obj;
! static CONSTEXPR const vfwnmsac<HAS_FRM> vfwnmsac_frm_obj;
! static CONSTEXPR const unop<SQRT> vfsqrt_obj;
! static CONSTEXPR const unop<SQRT, HAS_FRM> vfsqrt_frm_obj;
! static CONSTEXPR const float_misc<UNSPEC_VFRSQRT7> vfrsqrt7_obj;
! static CONSTEXPR const float_misc<UNSPEC_VFREC7> vfrec7_obj;
! static CONSTEXPR const float_misc<UNSPEC_VFREC7, HAS_FRM> vfrec7_frm_obj;
! static CONSTEXPR const binop<SMIN> vfmin_obj;
! static CONSTEXPR const binop<SMAX> vfmax_obj;
! static CONSTEXPR const float_misc<UNSPEC_VCOPYSIGN> vfsgnj_obj;
! static CONSTEXPR const vfsgnjn vfsgnjn_obj;
! static CONSTEXPR const float_misc<UNSPEC_VXORSIGN> vfsgnjx_obj;
! static CONSTEXPR const unop<NEG> vfneg_obj;
! static CONSTEXPR const unop<ABS> vfabs_obj;
! static CONSTEXPR const fcmp<EQ> vmfeq_obj;
! static CONSTEXPR const fcmp<NE> vmfne_obj;
! static CONSTEXPR const fcmp<LT> vmflt_obj;
! static CONSTEXPR const fcmp<GT> vmfgt_obj;
! static CONSTEXPR const fcmp<LE> vmfle_obj;
! static CONSTEXPR const fcmp<GE> vmfge_obj;
! static CONSTEXPR const vfclass vfclass_obj;
! static CONSTEXPR const vmerge vfmerge_obj;
! static CONSTEXPR const vmv_v vfmv_v_obj;
! static CONSTEXPR const vfcvt_x<UNSPEC_VFCVT> vfcvt_x_obj;
! static CONSTEXPR const vfcvt_x<UNSPEC_VFCVT, HAS_FRM> vfcvt_x_frm_obj;
! static CONSTEXPR const vfcvt_x<UNSPEC_UNSIGNED_VFCVT> vfcvt_xu_obj;
! static CONSTEXPR const vfcvt_x<UNSPEC_UNSIGNED_VFCVT, HAS_FRM> vfcvt_xu_frm_obj;
! static CONSTEXPR const vfcvt_rtz_x<FIX> vfcvt_rtz_x_obj;
! static CONSTEXPR const vfcvt_rtz_x<UNSIGNED_FIX> vfcvt_rtz_xu_obj;
! static CONSTEXPR const vfcvt_f<NO_FRM> vfcvt_f_obj;
! static CONSTEXPR const vfcvt_f<HAS_FRM> vfcvt_f_frm_obj;
! static CONSTEXPR const vfwcvt_x<UNSPEC_VFCVT> vfwcvt_x_obj;
! static CONSTEXPR const vfwcvt_x<UNSPEC_VFCVT, HAS_FRM> vfwcvt_x_frm_obj;
! static CONSTEXPR const vfwcvt_x<UNSPEC_UNSIGNED_VFCVT> vfwcvt_xu_obj;
! static CONSTEXPR const vfwcvt_x<UNSPEC_UNSIGNED_VFCVT, HAS_FRM> vfwcvt_xu_frm_obj;
! static CONSTEXPR const vfwcvt_rtz_x<FIX> vfwcvt_rtz_x_obj;
! static CONSTEXPR const vfwcvt_rtz_x<UNSIGNED_FIX> vfwcvt_rtz_xu_obj;
! static CONSTEXPR const vfwcvt_f vfwcvt_f_obj;
! static CONSTEXPR const vfncvt_x<UNSPEC_VFCVT> vfncvt_x_obj;
! static CONSTEXPR const vfncvt_x<UNSPEC_VFCVT, HAS_FRM> vfncvt_x_frm_obj;
! static CONSTEXPR const vfncvt_x<UNSPEC_UNSIGNED_VFCVT> vfncvt_xu_obj;
! static CONSTEXPR const vfncvt_x<UNSPEC_UNSIGNED_VFCVT, HAS_FRM> vfncvt_xu_frm_obj;
! static CONSTEXPR const vfncvt_rtz_x<FIX> vfncvt_rtz_x_obj;
! static CONSTEXPR const vfncvt_rtz_x<UNSIGNED_FIX> vfncvt_rtz_xu_obj;
! static CONSTEXPR const vfncvt_f<NO_FRM> vfncvt_f_obj;
! static CONSTEXPR const vfncvt_f<HAS_FRM> vfncvt_f_frm_obj;
! static CONSTEXPR const vfncvt_rod_f vfncvt_rod_f_obj;
! static CONSTEXPR const reducop<UNSPEC_REDUC_SUM> vredsum_obj;
! static CONSTEXPR const reducop<UNSPEC_REDUC_MAXU> vredmaxu_obj;
! static CONSTEXPR const reducop<UNSPEC_REDUC_MAX> vredmax_obj;
! static CONSTEXPR const reducop<UNSPEC_REDUC_MINU> vredminu_obj;
! static CONSTEXPR const reducop<UNSPEC_REDUC_MIN> vredmin_obj;
! static CONSTEXPR const reducop<UNSPEC_REDUC_AND> vredand_obj;
! static CONSTEXPR const reducop<UNSPEC_REDUC_OR> vredor_obj;
! static CONSTEXPR const reducop<UNSPEC_REDUC_XOR> vredxor_obj;
! static CONSTEXPR const reducop<UNSPEC_WREDUC_SUM> vwredsum_obj;
! static CONSTEXPR const reducop<UNSPEC_WREDUC_SUMU> vwredsumu_obj;
! static CONSTEXPR const freducop<UNSPEC_REDUC_SUM_UNORDERED> vfredusum_obj;
! static CONSTEXPR const freducop<UNSPEC_REDUC_SUM_UNORDERED, HAS_FRM> vfredusum_frm_obj;
! static CONSTEXPR const freducop<UNSPEC_REDUC_SUM_ORDERED> vfredosum_obj;
! static CONSTEXPR const freducop<UNSPEC_REDUC_SUM_ORDERED, HAS_FRM> vfredosum_frm_obj;
! static CONSTEXPR const reducop<UNSPEC_REDUC_MAX> vfredmax_obj;
! static CONSTEXPR const reducop<UNSPEC_REDUC_MIN> vfredmin_obj;
! static CONSTEXPR const freducop<UNSPEC_WREDUC_SUM_UNORDERED> vfwredusum_obj;
! static CONSTEXPR const freducop<UNSPEC_WREDUC_SUM_UNORDERED, HAS_FRM> vfwredusum_frm_obj;
! static CONSTEXPR const freducop<UNSPEC_WREDUC_SUM_ORDERED> vfwredosum_obj;
! static CONSTEXPR const freducop<UNSPEC_WREDUC_SUM_ORDERED, HAS_FRM> vfwredosum_frm_obj;
! static CONSTEXPR const vmv vmv_x_obj;
! static CONSTEXPR const vmv_s vmv_s_obj;
! static CONSTEXPR const vmv vfmv_f_obj;
! static CONSTEXPR const vmv_s vfmv_s_obj;
! static CONSTEXPR const slideop<UNSPEC_VSLIDEUP> vslideup_obj;
! static CONSTEXPR const slideop<UNSPEC_VSLIDEDOWN> vslidedown_obj;
! static CONSTEXPR const slideop<UNSPEC_VSLIDE1UP> vslide1up_obj;
! static CONSTEXPR const slideop<UNSPEC_VSLIDE1DOWN> vslide1down_obj;
! static CONSTEXPR const slideop<UNSPEC_VFSLIDE1UP> vfslide1up_obj;
! static CONSTEXPR const slideop<UNSPEC_VFSLIDE1DOWN> vfslide1down_obj;
! static CONSTEXPR const vrgather vrgather_obj;
! static CONSTEXPR const vrgatherei16 vrgatherei16_obj;
! static CONSTEXPR const vcompress vcompress_obj;
! static CONSTEXPR const vundefined vundefined_obj;
! static CONSTEXPR const vreinterpret vreinterpret_obj;
! static CONSTEXPR const vlmul_ext vlmul_ext_obj;
! static CONSTEXPR const vlmul_trunc vlmul_trunc_obj;
! static CONSTEXPR const vset vset_obj;
! static CONSTEXPR const vget vget_obj;
! static CONSTEXPR const vcreate vcreate_obj;
! static CONSTEXPR const read_vl read_vl_obj;
! static CONSTEXPR const vleff vleff_obj;
! static CONSTEXPR const vlenb vlenb_obj;
! static CONSTEXPR const vlseg vlseg_obj;
! static CONSTEXPR const vsseg vsseg_obj;
! static CONSTEXPR const vlsseg vlsseg_obj;
! static CONSTEXPR const vssseg vssseg_obj;
! static CONSTEXPR const seg_indexed_load<UNSPEC_UNORDERED> vluxseg_obj;
! static CONSTEXPR const seg_indexed_load<UNSPEC_ORDERED> vloxseg_obj;
! static CONSTEXPR const seg_indexed_store<UNSPEC_UNORDERED> vsuxseg_obj;
! static CONSTEXPR const seg_indexed_store<UNSPEC_ORDERED> vsoxseg_obj;
! static CONSTEXPR const vlsegff vlsegff_obj;
! static CONSTEXPR const th_loadstore_width<false, LST_UNIT_STRIDE, UNSPEC_TH_VLB> vlb_obj;
! static CONSTEXPR const th_loadstore_width<false, LST_UNIT_STRIDE, UNSPEC_TH_VLBU> vlbu_obj;
! static CONSTEXPR const th_loadstore_width<false, LST_UNIT_STRIDE, UNSPEC_TH_VLH> vlh_obj;
! static CONSTEXPR const th_loadstore_width<false, LST_UNIT_STRIDE, UNSPEC_TH_VLHU> vlhu_obj;
! static CONSTEXPR const th_loadstore_width<false, LST_UNIT_STRIDE, UNSPEC_TH_VLW> vlw_obj;
! static CONSTEXPR const th_loadstore_width<false, LST_UNIT_STRIDE, UNSPEC_TH_VLWU> vlwu_obj;
! static CONSTEXPR const th_loadstore_width<true, LST_UNIT_STRIDE, UNSPEC_TH_VLB> vsb_obj;
! static CONSTEXPR const th_loadstore_width<true, LST_UNIT_STRIDE, UNSPEC_TH_VLH> vsh_obj;
! static CONSTEXPR const th_loadstore_width<true, LST_UNIT_STRIDE, UNSPEC_TH_VLW> vsw_obj;
! static CONSTEXPR const th_loadstore_width<false, LST_STRIDED, UNSPEC_TH_VLSB> vlsb_obj;
! static CONSTEXPR const th_loadstore_width<false, LST_STRIDED, UNSPEC_TH_VLSBU> vlsbu_obj;
! static CONSTEXPR const th_loadstore_width<false, LST_STRIDED, UNSPEC_TH_VLSH> vlsh_obj;
! static CONSTEXPR const th_loadstore_width<false, LST_STRIDED, UNSPEC_TH_VLSHU> vlshu_obj;
! static CONSTEXPR const th_loadstore_width<false, LST_STRIDED, UNSPEC_TH_VLSW> vlsw_obj;
! static CONSTEXPR const th_loadstore_width<false, LST_STRIDED, UNSPEC_TH_VLSWU> vlswu_obj;
! static CONSTEXPR const th_loadstore_width<true, LST_STRIDED, UNSPEC_TH_VLSB> vssb_obj;
! static CONSTEXPR const th_loadstore_width<true, LST_STRIDED, UNSPEC_TH_VLSH> vssh_obj;
! static CONSTEXPR const th_loadstore_width<true, LST_STRIDED, UNSPEC_TH_VLSW> vssw_obj;
! static CONSTEXPR const th_loadstore_width<false, LST_INDEXED, UNSPEC_TH_VLXB> vlxb_obj;
! static CONSTEXPR const th_loadstore_width<false, LST_INDEXED, UNSPEC_TH_VLXBU> vlxbu_obj;
! static CONSTEXPR const th_loadstore_width<false, LST_INDEXED, UNSPEC_TH_VLXH> vlxh_obj;
! static CONSTEXPR const th_loadstore_width<false, LST_INDEXED, UNSPEC_TH_VLXHU> vlxhu_obj;
! static CONSTEXPR const th_loadstore_width<false, LST_INDEXED, UNSPEC_TH_VLXW> vlxw_obj;
! static CONSTEXPR const th_loadstore_width<false, LST_INDEXED, UNSPEC_TH_VLXWU> vlxwu_obj;
! static CONSTEXPR const th_loadstore_width<true, LST_INDEXED, UNSPEC_TH_VLXB> vsxb_obj;
! static CONSTEXPR const th_loadstore_width<true, LST_INDEXED, UNSPEC_TH_VLXH> vsxh_obj;
! static CONSTEXPR const th_loadstore_width<true, LST_INDEXED, UNSPEC_TH_VLXW> vsxw_obj;
! static CONSTEXPR const th_loadstore_width<true, LST_INDEXED, UNSPEC_TH_VSUXB> vsuxb_obj;
! static CONSTEXPR const th_loadstore_width<true, LST_INDEXED, UNSPEC_TH_VSUXH> vsuxh_obj;
! static CONSTEXPR const th_loadstore_width<true, LST_INDEXED, UNSPEC_TH_VSUXW> vsuxw_obj;
! static CONSTEXPR const th_extract vext_x_v_obj;
  
  /* Crypto Vector */
! static CONSTEXPR const vandn vandn_obj;
! static CONSTEXPR const bitmanip<ROTATE>   vrol_obj;
! static CONSTEXPR const bitmanip<ROTATERT> vror_obj;
! static CONSTEXPR const b_reverse<UNSPEC_VBREV>   vbrev_obj;
! static CONSTEXPR const b_reverse<UNSPEC_VBREV8>  vbrev8_obj;
! static CONSTEXPR const b_reverse<UNSPEC_VREV8>   vrev8_obj;
! static CONSTEXPR const bitmanip<CLZ> vclz_obj;
! static CONSTEXPR const bitmanip<CTZ> vctz_obj;
! static CONSTEXPR const vwsll vwsll_obj;
! static CONSTEXPR const clmul<UNSPEC_VCLMUL>      vclmul_obj;
! static CONSTEXPR const clmul<UNSPEC_VCLMULH>     vclmulh_obj;
! static CONSTEXPR const vg_nhab<UNSPEC_VGHSH>     vghsh_obj;
! static CONSTEXPR const crypto_vv<UNSPEC_VGMUL>   vgmul_obj;
! static CONSTEXPR const crypto_vv<UNSPEC_VAESEF>  vaesef_obj;
! static CONSTEXPR const crypto_vv<UNSPEC_VAESEM>  vaesem_obj;
! static CONSTEXPR const crypto_vv<UNSPEC_VAESDF>  vaesdf_obj;
! static CONSTEXPR const crypto_vv<UNSPEC_VAESDM>  vaesdm_obj;
! static CONSTEXPR const crypto_vv<UNSPEC_VAESZ>   vaesz_obj;
! static CONSTEXPR const crypto_vi<UNSPEC_VAESKF1> vaeskf1_obj;
! static CONSTEXPR const vaeskf2_vsm3c<UNSPEC_VAESKF2> vaeskf2_obj;
! static CONSTEXPR const vg_nhab<UNSPEC_VSHA2MS>   vsha2ms_obj;
! static CONSTEXPR const vg_nhab<UNSPEC_VSHA2CH>   vsha2ch_obj;
! static CONSTEXPR const vg_nhab<UNSPEC_VSHA2CL>   vsha2cl_obj;
! static CONSTEXPR const crypto_vi<UNSPEC_VSM4K>   vsm4k_obj;
! static CONSTEXPR const crypto_vv<UNSPEC_VSM4R>   vsm4r_obj;
! static CONSTEXPR const vsm3me vsm3me_obj;
! static CONSTEXPR const vaeskf2_vsm3c<UNSPEC_VSM3C>   vsm3c_obj;
  
  /* Zvfbfmin */
! static CONSTEXPR const vfncvtbf16_f<NO_FRM> vfncvtbf16_f_obj;
! static CONSTEXPR const vfncvtbf16_f<HAS_FRM> vfncvtbf16_f_frm_obj;
! static CONSTEXPR const vfwcvtbf16_f vfwcvtbf16_f_obj;
  /* Zvfbfwma; */
! static CONSTEXPR const vfwmaccbf16<NO_FRM> vfwmaccbf16_obj;
! static CONSTEXPR const vfwmaccbf16<HAS_FRM> vfwmaccbf16_frm_obj;
  
  /* Declare the function base NAME, pointing it to an instance
     of class <NAME>_obj.  */
--- 2462,2791 ----
    }
  };
  
! static constexpr const vsetvl<false> vsetvl_obj;
! static constexpr const vsetvl<true> vsetvlmax_obj;
! static constexpr const loadstore<false, LST_UNIT_STRIDE, false> vle_obj;
! static constexpr const loadstore<true, LST_UNIT_STRIDE, false> vse_obj;
! static constexpr const loadstore<false, LST_UNIT_STRIDE, false> vlm_obj;
! static constexpr const loadstore<true, LST_UNIT_STRIDE, false> vsm_obj;
! static constexpr const loadstore<false, LST_STRIDED, false> vlse_obj;
! static constexpr const loadstore<true, LST_STRIDED, false> vsse_obj;
! static constexpr const loadstore<false, LST_INDEXED, false> vluxei8_obj;
! static constexpr const loadstore<false, LST_INDEXED, false> vluxei16_obj;
! static constexpr const loadstore<false, LST_INDEXED, false> vluxei32_obj;
! static constexpr const loadstore<false, LST_INDEXED, false> vluxei64_obj;
! static constexpr const loadstore<false, LST_INDEXED, true> vloxei8_obj;
! static constexpr const loadstore<false, LST_INDEXED, true> vloxei16_obj;
! static constexpr const loadstore<false, LST_INDEXED, true> vloxei32_obj;
! static constexpr const loadstore<false, LST_INDEXED, true> vloxei64_obj;
! static constexpr const loadstore<true, LST_INDEXED, false> vsuxei8_obj;
! static constexpr const loadstore<true, LST_INDEXED, false> vsuxei16_obj;
! static constexpr const loadstore<true, LST_INDEXED, false> vsuxei32_obj;
! static constexpr const loadstore<true, LST_INDEXED, false> vsuxei64_obj;
! static constexpr const loadstore<true, LST_INDEXED, true> vsoxei8_obj;
! static constexpr const loadstore<true, LST_INDEXED, true> vsoxei16_obj;
! static constexpr const loadstore<true, LST_INDEXED, true> vsoxei32_obj;
! static constexpr const loadstore<true, LST_INDEXED, true> vsoxei64_obj;
! static constexpr const binop<PLUS> vadd_obj;
! static constexpr const binop<MINUS> vsub_obj;
! static constexpr const vrsub vrsub_obj;
! static constexpr const binop<AND> vand_obj;
! static constexpr const binop<IOR> vor_obj;
! static constexpr const binop<XOR> vxor_obj;
! static constexpr const binop<ASHIFT> vsll_obj;
! static constexpr const binop<ASHIFTRT> vsra_obj;
! static constexpr const binop<LSHIFTRT> vsrl_obj;
! static constexpr const binop<SMIN> vmin_obj;
! static constexpr const binop<SMAX> vmax_obj;
! static constexpr const binop<UMIN> vminu_obj;
! static constexpr const binop<UMAX> vmaxu_obj;
! static constexpr const binop<MULT> vmul_obj;
! static constexpr const vmulh<UNSPEC_VMULHS> vmulh_obj;
! static constexpr const vmulh<UNSPEC_VMULHU> vmulhu_obj;
! static constexpr const vmulh<UNSPEC_VMULHSU> vmulhsu_obj;
! static constexpr const binop<DIV> vdiv_obj;
! static constexpr const binop<MOD> vrem_obj;
! static constexpr const binop<UDIV> vdivu_obj;
! static constexpr const binop<UMOD> vremu_obj;
! static constexpr const unop<NEG> vneg_obj;
! static constexpr const unop<NOT> vnot_obj;
! static constexpr const ext<SIGN_EXTEND> vsext_obj;
! static constexpr const ext<ZERO_EXTEND> vzext_obj;
! static constexpr const widen_binop<PLUS, SIGN_EXTEND>vwadd_obj;
! static constexpr const widen_binop<MINUS, SIGN_EXTEND>vwsub_obj;
! static constexpr const widen_binop<MULT, SIGN_EXTEND>vwmul_obj;
! static constexpr const widen_binop<PLUS, ZERO_EXTEND>vwaddu_obj;
! static constexpr const widen_binop<MINUS, ZERO_EXTEND>vwsubu_obj;
! static constexpr const widen_binop<MULT, ZERO_EXTEND>vwmulu_obj;
! static constexpr const vwmulsu vwmulsu_obj;
! static constexpr const vwcvt<SIGN_EXTEND> vwcvt_x_obj;
! static constexpr const vwcvt<ZERO_EXTEND> vwcvtu_x_obj;
! static constexpr const vadc vadc_obj;
! static constexpr const vsbc vsbc_obj;
! static constexpr const vmadc vmadc_obj;
! static constexpr const vmsbc vmsbc_obj;
! static constexpr const vnshift<LSHIFTRT> vnsrl_obj;
! static constexpr const vnshift<ASHIFTRT> vnsra_obj;
! static constexpr const vncvt_x vncvt_x_obj;
! static constexpr const vmerge vmerge_obj;
! static constexpr const vmv_v vmv_v_obj;
! static constexpr const icmp<EQ> vmseq_obj;
! static constexpr const icmp<NE> vmsne_obj;
! static constexpr const icmp<LT> vmslt_obj;
! static constexpr const icmp<GT> vmsgt_obj;
! static constexpr const icmp<LE> vmsle_obj;
! static constexpr const icmp<GE> vmsge_obj;
! static constexpr const icmp<LTU> vmsltu_obj;
! static constexpr const icmp<GTU> vmsgtu_obj;
! static constexpr const icmp<LEU> vmsleu_obj;
! static constexpr const icmp<GEU> vmsgeu_obj;
! static constexpr const vmacc vmacc_obj;
! static constexpr const vnmsac vnmsac_obj;
! static constexpr const vmadd vmadd_obj;
! static constexpr const vnmsub vnmsub_obj;
! static constexpr const vwmacc vwmacc_obj;
! static constexpr const vwmaccu vwmaccu_obj;
! static constexpr const vwmaccsu vwmaccsu_obj;
! static constexpr const vwmaccus vwmaccus_obj;
! static constexpr const binop<SS_PLUS> vsadd_obj;
! static constexpr const binop<SS_MINUS> vssub_obj;
! static constexpr const binop<US_PLUS> vsaddu_obj;
! static constexpr const binop<US_MINUS> vssubu_obj;
! static constexpr const sat_op<UNSPEC_VAADDU> vaaddu_obj;
! static constexpr const sat_op<UNSPEC_VAADD> vaadd_obj;
! static constexpr const sat_op<UNSPEC_VASUBU> vasubu_obj;
! static constexpr const sat_op<UNSPEC_VASUB> vasub_obj;
! static constexpr const sat_op<UNSPEC_VSMUL> vsmul_obj;
! static constexpr const sat_op<UNSPEC_VSSRL> vssrl_obj;
! static constexpr const sat_op<UNSPEC_VSSRA> vssra_obj;
! static constexpr const vnclip<UNSPEC_VNCLIP> vnclip_obj;
! static constexpr const vnclip<UNSPEC_VNCLIPU> vnclipu_obj;
! static constexpr const mask_logic<AND> vmand_obj;
! static constexpr const mask_nlogic<AND> vmnand_obj;
! static constexpr const mask_notlogic<AND> vmandn_obj;
! static constexpr const mask_logic<XOR> vmxor_obj;
! static constexpr const mask_logic<IOR> vmor_obj;
! static constexpr const mask_nlogic<IOR> vmnor_obj;
! static constexpr const mask_notlogic<IOR> vmorn_obj;
! static constexpr const mask_nlogic<XOR> vmxnor_obj;
! static constexpr const vmmv vmmv_obj;
! static constexpr const vmclr vmclr_obj;
! static constexpr const vmset vmset_obj;
! static constexpr const vmnot vmnot_obj;
! static constexpr const vcpop vcpop_obj;
! static constexpr const vfirst vfirst_obj;
! static constexpr const mask_misc<UNSPEC_VMSBF> vmsbf_obj;
! static constexpr const mask_misc<UNSPEC_VMSIF> vmsif_obj;
! static constexpr const mask_misc<UNSPEC_VMSOF> vmsof_obj;
! static constexpr const viota viota_obj;
! static constexpr const vid vid_obj;
! static constexpr const binop<PLUS, true> vfadd_obj;
! static constexpr const binop<MINUS, true> vfsub_obj;
! static constexpr const binop<PLUS, true, HAS_FRM> vfadd_frm_obj;
! static constexpr const binop<MINUS, true, HAS_FRM> vfsub_frm_obj;
! static constexpr const reverse_binop<MINUS> vfrsub_obj;
! static constexpr const reverse_binop<MINUS, HAS_FRM> vfrsub_frm_obj;
! static constexpr const widen_binop_fp<PLUS> vfwadd_obj;
! static constexpr const widen_binop_fp<PLUS, HAS_FRM> vfwadd_frm_obj;
! static constexpr const widen_binop_fp<MINUS> vfwsub_obj;
! static constexpr const widen_binop_fp<MINUS, HAS_FRM> vfwsub_frm_obj;
! static constexpr const binop<MULT, true> vfmul_obj;
! static constexpr const binop<MULT,  true, HAS_FRM> vfmul_frm_obj;
! static constexpr const binop<DIV, true> vfdiv_obj;
! static constexpr const binop<DIV,  true, HAS_FRM> vfdiv_frm_obj;
! static constexpr const reverse_binop<DIV> vfrdiv_obj;
! static constexpr const reverse_binop<DIV, HAS_FRM> vfrdiv_frm_obj;
! static constexpr const widen_binop_fp<MULT> vfwmul_obj;
! static constexpr const widen_binop_fp<MULT, HAS_FRM> vfwmul_frm_obj;
! static constexpr const vfmacc<NO_FRM> vfmacc_obj;
! static constexpr const vfmacc<HAS_FRM> vfmacc_frm_obj;
! static constexpr const vfnmsac<NO_FRM> vfnmsac_obj;
! static constexpr const vfnmsac<HAS_FRM> vfnmsac_frm_obj;
! static constexpr const vfmadd<NO_FRM> vfmadd_obj;
! static constexpr const vfmadd<HAS_FRM> vfmadd_frm_obj;
! static constexpr const vfnmsub<NO_FRM> vfnmsub_obj;
! static constexpr const vfnmsub<HAS_FRM> vfnmsub_frm_obj;
! static constexpr const vfnmacc<NO_FRM> vfnmacc_obj;
! static constexpr const vfnmacc<HAS_FRM> vfnmacc_frm_obj;
! static constexpr const vfmsac<NO_FRM> vfmsac_obj;
! static constexpr const vfmsac<HAS_FRM> vfmsac_frm_obj;
! static constexpr const vfnmadd<NO_FRM> vfnmadd_obj;
! static constexpr const vfnmadd<HAS_FRM> vfnmadd_frm_obj;
! static constexpr const vfmsub<NO_FRM> vfmsub_obj;
! static constexpr const vfmsub<HAS_FRM> vfmsub_frm_obj;
! static constexpr const vfwmacc<NO_FRM> vfwmacc_obj;
! static constexpr const vfwmacc<HAS_FRM> vfwmacc_frm_obj;
! static constexpr const vfwnmacc<NO_FRM> vfwnmacc_obj;
! static constexpr const vfwnmacc<HAS_FRM> vfwnmacc_frm_obj;
! static constexpr const vfwmsac<NO_FRM> vfwmsac_obj;
! static constexpr const vfwmsac<HAS_FRM> vfwmsac_frm_obj;
! static constexpr const vfwnmsac<NO_FRM> vfwnmsac_obj;
! static constexpr const vfwnmsac<HAS_FRM> vfwnmsac_frm_obj;
! static constexpr const unop<SQRT> vfsqrt_obj;
! static constexpr const unop<SQRT, HAS_FRM> vfsqrt_frm_obj;
! static constexpr const float_misc<UNSPEC_VFRSQRT7> vfrsqrt7_obj;
! static constexpr const float_misc<UNSPEC_VFREC7> vfrec7_obj;
! static constexpr const float_misc<UNSPEC_VFREC7, HAS_FRM> vfrec7_frm_obj;
! static constexpr const binop<SMIN> vfmin_obj;
! static constexpr const binop<SMAX> vfmax_obj;
! static constexpr const float_misc<UNSPEC_VCOPYSIGN> vfsgnj_obj;
! static constexpr const vfsgnjn vfsgnjn_obj;
! static constexpr const float_misc<UNSPEC_VXORSIGN> vfsgnjx_obj;
! static constexpr const unop<NEG> vfneg_obj;
! static constexpr const unop<ABS> vfabs_obj;
! static constexpr const fcmp<EQ> vmfeq_obj;
! static constexpr const fcmp<NE> vmfne_obj;
! static constexpr const fcmp<LT> vmflt_obj;
! static constexpr const fcmp<GT> vmfgt_obj;
! static constexpr const fcmp<LE> vmfle_obj;
! static constexpr const fcmp<GE> vmfge_obj;
! static constexpr const vfclass vfclass_obj;
! static constexpr const vmerge vfmerge_obj;
! static constexpr const vmv_v vfmv_v_obj;
! static constexpr const vfcvt_x<UNSPEC_VFCVT> vfcvt_x_obj;
! static constexpr const vfcvt_x<UNSPEC_VFCVT, HAS_FRM> vfcvt_x_frm_obj;
! static constexpr const vfcvt_x<UNSPEC_UNSIGNED_VFCVT> vfcvt_xu_obj;
! static constexpr const vfcvt_x<UNSPEC_UNSIGNED_VFCVT, HAS_FRM> vfcvt_xu_frm_obj;
! static constexpr const vfcvt_rtz_x<FIX> vfcvt_rtz_x_obj;
! static constexpr const vfcvt_rtz_x<UNSIGNED_FIX> vfcvt_rtz_xu_obj;
! static constexpr const vfcvt_f<NO_FRM> vfcvt_f_obj;
! static constexpr const vfcvt_f<HAS_FRM> vfcvt_f_frm_obj;
! static constexpr const vfwcvt_x<UNSPEC_VFCVT> vfwcvt_x_obj;
! static constexpr const vfwcvt_x<UNSPEC_VFCVT, HAS_FRM> vfwcvt_x_frm_obj;
! static constexpr const vfwcvt_x<UNSPEC_UNSIGNED_VFCVT> vfwcvt_xu_obj;
! static constexpr const vfwcvt_x<UNSPEC_UNSIGNED_VFCVT, HAS_FRM> vfwcvt_xu_frm_obj;
! static constexpr const vfwcvt_rtz_x<FIX> vfwcvt_rtz_x_obj;
! static constexpr const vfwcvt_rtz_x<UNSIGNED_FIX> vfwcvt_rtz_xu_obj;
! static constexpr const vfwcvt_f vfwcvt_f_obj;
! static constexpr const vfncvt_x<UNSPEC_VFCVT> vfncvt_x_obj;
! static constexpr const vfncvt_x<UNSPEC_VFCVT, HAS_FRM> vfncvt_x_frm_obj;
! static constexpr const vfncvt_x<UNSPEC_UNSIGNED_VFCVT> vfncvt_xu_obj;
! static constexpr const vfncvt_x<UNSPEC_UNSIGNED_VFCVT, HAS_FRM> vfncvt_xu_frm_obj;
! static constexpr const vfncvt_rtz_x<FIX> vfncvt_rtz_x_obj;
! static constexpr const vfncvt_rtz_x<UNSIGNED_FIX> vfncvt_rtz_xu_obj;
! static constexpr const vfncvt_f<NO_FRM> vfncvt_f_obj;
! static constexpr const vfncvt_f<HAS_FRM> vfncvt_f_frm_obj;
! static constexpr const vfncvt_rod_f vfncvt_rod_f_obj;
! static constexpr const reducop<UNSPEC_REDUC_SUM> vredsum_obj;
! static constexpr const reducop<UNSPEC_REDUC_MAXU> vredmaxu_obj;
! static constexpr const reducop<UNSPEC_REDUC_MAX> vredmax_obj;
! static constexpr const reducop<UNSPEC_REDUC_MINU> vredminu_obj;
! static constexpr const reducop<UNSPEC_REDUC_MIN> vredmin_obj;
! static constexpr const reducop<UNSPEC_REDUC_AND> vredand_obj;
! static constexpr const reducop<UNSPEC_REDUC_OR> vredor_obj;
! static constexpr const reducop<UNSPEC_REDUC_XOR> vredxor_obj;
! static constexpr const reducop<UNSPEC_WREDUC_SUM> vwredsum_obj;
! static constexpr const reducop<UNSPEC_WREDUC_SUMU> vwredsumu_obj;
! static constexpr const freducop<UNSPEC_REDUC_SUM_UNORDERED> vfredusum_obj;
! static constexpr const freducop<UNSPEC_REDUC_SUM_UNORDERED, HAS_FRM> vfredusum_frm_obj;
! static constexpr const freducop<UNSPEC_REDUC_SUM_ORDERED> vfredosum_obj;
! static constexpr const freducop<UNSPEC_REDUC_SUM_ORDERED, HAS_FRM> vfredosum_frm_obj;
! static constexpr const reducop<UNSPEC_REDUC_MAX> vfredmax_obj;
! static constexpr const reducop<UNSPEC_REDUC_MIN> vfredmin_obj;
! static constexpr const freducop<UNSPEC_WREDUC_SUM_UNORDERED> vfwredusum_obj;
! static constexpr const freducop<UNSPEC_WREDUC_SUM_UNORDERED, HAS_FRM> vfwredusum_frm_obj;
! static constexpr const freducop<UNSPEC_WREDUC_SUM_ORDERED> vfwredosum_obj;
! static constexpr const freducop<UNSPEC_WREDUC_SUM_ORDERED, HAS_FRM> vfwredosum_frm_obj;
! static constexpr const vmv vmv_x_obj;
! static constexpr const vmv_s vmv_s_obj;
! static constexpr const vmv vfmv_f_obj;
! static constexpr const vmv_s vfmv_s_obj;
! static constexpr const slideop<UNSPEC_VSLIDEUP> vslideup_obj;
! static constexpr const slideop<UNSPEC_VSLIDEDOWN> vslidedown_obj;
! static constexpr const slideop<UNSPEC_VSLIDE1UP> vslide1up_obj;
! static constexpr const slideop<UNSPEC_VSLIDE1DOWN> vslide1down_obj;
! static constexpr const slideop<UNSPEC_VFSLIDE1UP> vfslide1up_obj;
! static constexpr const slideop<UNSPEC_VFSLIDE1DOWN> vfslide1down_obj;
! static constexpr const vrgather vrgather_obj;
! static constexpr const vrgatherei16 vrgatherei16_obj;
! static constexpr const vcompress vcompress_obj;
! static constexpr const vundefined vundefined_obj;
! static constexpr const vreinterpret vreinterpret_obj;
! static constexpr const vlmul_ext vlmul_ext_obj;
! static constexpr const vlmul_trunc vlmul_trunc_obj;
! static constexpr const vset vset_obj;
! static constexpr const vget vget_obj;
! static constexpr const vcreate vcreate_obj;
! static constexpr const read_vl read_vl_obj;
! static constexpr const vleff vleff_obj;
! static constexpr const vlenb vlenb_obj;
! static constexpr const vlseg vlseg_obj;
! static constexpr const vsseg vsseg_obj;
! static constexpr const vlsseg vlsseg_obj;
! static constexpr const vssseg vssseg_obj;
! static constexpr const seg_indexed_load<UNSPEC_UNORDERED> vluxseg_obj;
! static constexpr const seg_indexed_load<UNSPEC_ORDERED> vloxseg_obj;
! static constexpr const seg_indexed_store<UNSPEC_UNORDERED> vsuxseg_obj;
! static constexpr const seg_indexed_store<UNSPEC_ORDERED> vsoxseg_obj;
! static constexpr const vlsegff vlsegff_obj;
! static constexpr const th_loadstore_width<false, LST_UNIT_STRIDE, UNSPEC_TH_VLB> vlb_obj;
! static constexpr const th_loadstore_width<false, LST_UNIT_STRIDE, UNSPEC_TH_VLBU> vlbu_obj;
! static constexpr const th_loadstore_width<false, LST_UNIT_STRIDE, UNSPEC_TH_VLH> vlh_obj;
! static constexpr const th_loadstore_width<false, LST_UNIT_STRIDE, UNSPEC_TH_VLHU> vlhu_obj;
! static constexpr const th_loadstore_width<false, LST_UNIT_STRIDE, UNSPEC_TH_VLW> vlw_obj;
! static constexpr const th_loadstore_width<false, LST_UNIT_STRIDE, UNSPEC_TH_VLWU> vlwu_obj;
! static constexpr const th_loadstore_width<true, LST_UNIT_STRIDE, UNSPEC_TH_VLB> vsb_obj;
! static constexpr const th_loadstore_width<true, LST_UNIT_STRIDE, UNSPEC_TH_VLH> vsh_obj;
! static constexpr const th_loadstore_width<true, LST_UNIT_STRIDE, UNSPEC_TH_VLW> vsw_obj;
! static constexpr const th_loadstore_width<false, LST_STRIDED, UNSPEC_TH_VLSB> vlsb_obj;
! static constexpr const th_loadstore_width<false, LST_STRIDED, UNSPEC_TH_VLSBU> vlsbu_obj;
! static constexpr const th_loadstore_width<false, LST_STRIDED, UNSPEC_TH_VLSH> vlsh_obj;
! static constexpr const th_loadstore_width<false, LST_STRIDED, UNSPEC_TH_VLSHU> vlshu_obj;
! static constexpr const th_loadstore_width<false, LST_STRIDED, UNSPEC_TH_VLSW> vlsw_obj;
! static constexpr const th_loadstore_width<false, LST_STRIDED, UNSPEC_TH_VLSWU> vlswu_obj;
! static constexpr const th_loadstore_width<true, LST_STRIDED, UNSPEC_TH_VLSB> vssb_obj;
! static constexpr const th_loadstore_width<true, LST_STRIDED, UNSPEC_TH_VLSH> vssh_obj;
! static constexpr const th_loadstore_width<true, LST_STRIDED, UNSPEC_TH_VLSW> vssw_obj;
! static constexpr const th_loadstore_width<false, LST_INDEXED, UNSPEC_TH_VLXB> vlxb_obj;
! static constexpr const th_loadstore_width<false, LST_INDEXED, UNSPEC_TH_VLXBU> vlxbu_obj;
! static constexpr const th_loadstore_width<false, LST_INDEXED, UNSPEC_TH_VLXH> vlxh_obj;
! static constexpr const th_loadstore_width<false, LST_INDEXED, UNSPEC_TH_VLXHU> vlxhu_obj;
! static constexpr const th_loadstore_width<false, LST_INDEXED, UNSPEC_TH_VLXW> vlxw_obj;
! static constexpr const th_loadstore_width<false, LST_INDEXED, UNSPEC_TH_VLXWU> vlxwu_obj;
! static constexpr const th_loadstore_width<true, LST_INDEXED, UNSPEC_TH_VLXB> vsxb_obj;
! static constexpr const th_loadstore_width<true, LST_INDEXED, UNSPEC_TH_VLXH> vsxh_obj;
! static constexpr const th_loadstore_width<true, LST_INDEXED, UNSPEC_TH_VLXW> vsxw_obj;
! static constexpr const th_loadstore_width<true, LST_INDEXED, UNSPEC_TH_VSUXB> vsuxb_obj;
! static constexpr const th_loadstore_width<true, LST_INDEXED, UNSPEC_TH_VSUXH> vsuxh_obj;
! static constexpr const th_loadstore_width<true, LST_INDEXED, UNSPEC_TH_VSUXW> vsuxw_obj;
! static constexpr const th_extract vext_x_v_obj;
  
  /* Crypto Vector */
! static constexpr const vandn vandn_obj;
! static constexpr const bitmanip<ROTATE>   vrol_obj;
! static constexpr const bitmanip<ROTATERT> vror_obj;
! static constexpr const b_reverse<UNSPEC_VBREV>   vbrev_obj;
! static constexpr const b_reverse<UNSPEC_VBREV8>  vbrev8_obj;
! static constexpr const b_reverse<UNSPEC_VREV8>   vrev8_obj;
! static constexpr const bitmanip<CLZ> vclz_obj;
! static constexpr const bitmanip<CTZ> vctz_obj;
! static constexpr const vwsll vwsll_obj;
! static constexpr const clmul<UNSPEC_VCLMUL>      vclmul_obj;
! static constexpr const clmul<UNSPEC_VCLMULH>     vclmulh_obj;
! static constexpr const vg_nhab<UNSPEC_VGHSH>     vghsh_obj;
! static constexpr const crypto_vv<UNSPEC_VGMUL>   vgmul_obj;
! static constexpr const crypto_vv<UNSPEC_VAESEF>  vaesef_obj;
! static constexpr const crypto_vv<UNSPEC_VAESEM>  vaesem_obj;
! static constexpr const crypto_vv<UNSPEC_VAESDF>  vaesdf_obj;
! static constexpr const crypto_vv<UNSPEC_VAESDM>  vaesdm_obj;
! static constexpr const crypto_vv<UNSPEC_VAESZ>   vaesz_obj;
! static constexpr const crypto_vi<UNSPEC_VAESKF1> vaeskf1_obj;
! static constexpr const vaeskf2_vsm3c<UNSPEC_VAESKF2> vaeskf2_obj;
! static constexpr const vg_nhab<UNSPEC_VSHA2MS>   vsha2ms_obj;
! static constexpr const vg_nhab<UNSPEC_VSHA2CH>   vsha2ch_obj;
! static constexpr const vg_nhab<UNSPEC_VSHA2CL>   vsha2cl_obj;
! static constexpr const crypto_vi<UNSPEC_VSM4K>   vsm4k_obj;
! static constexpr const crypto_vv<UNSPEC_VSM4R>   vsm4r_obj;
! static constexpr const vsm3me vsm3me_obj;
! static constexpr const vaeskf2_vsm3c<UNSPEC_VSM3C>   vsm3c_obj;
  
  /* Zvfbfmin */
! static constexpr const vfncvtbf16_f<NO_FRM> vfncvtbf16_f_obj;
! static constexpr const vfncvtbf16_f<HAS_FRM> vfncvtbf16_f_frm_obj;
! static constexpr const vfwcvtbf16_f vfwcvtbf16_f_obj;
  /* Zvfbfwma; */
! static constexpr const vfwmaccbf16<NO_FRM> vfwmaccbf16_obj;
! static constexpr const vfwmaccbf16<HAS_FRM> vfwmaccbf16_frm_obj;
  
  /* Declare the function base NAME, pointing it to an instance
     of class <NAME>_obj.  */
diff -Nrcpad gcc-17-20260705/gcc/config/riscv/riscv-vector-builtins-shapes.cc gcc-17-20260712/gcc/config/riscv/riscv-vector-builtins-shapes.cc
*** gcc-17-20260705/gcc/config/riscv/riscv-vector-builtins-shapes.cc	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/riscv/riscv-vector-builtins-shapes.cc	Sun Jul 12 22:32:07 2026
*************** build_all (function_builder &b, const fu
*** 124,130 ****
  /* Declare the function shape NAME, pointing it to an instance
     of class <NAME>_def.  */
  #define SHAPE(DEF, VAR) \
!   static CONSTEXPR const DEF##_def VAR##_obj; \
    namespace shapes { const function_shape *const VAR = &VAR##_obj; }
  
  #define BASE_NAME_MAX_LEN 20
--- 124,130 ----
  /* Declare the function shape NAME, pointing it to an instance
     of class <NAME>_def.  */
  #define SHAPE(DEF, VAR) \
!   static constexpr const DEF##_def VAR##_obj; \
    namespace shapes { const function_shape *const VAR = &VAR##_obj; }
  
  #define BASE_NAME_MAX_LEN 20
diff -Nrcpad gcc-17-20260705/gcc/config/riscv/riscv-vector-builtins.cc gcc-17-20260712/gcc/config/riscv/riscv-vector-builtins.cc
*** gcc-17-20260705/gcc/config/riscv/riscv-vector-builtins.cc	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/riscv/riscv-vector-builtins.cc	Sun Jul 12 22:32:07 2026
*************** struct non_overloaded_registered_functio
*** 131,137 ****
  };
  
  /* Static information about each RVV type.  */
! static CONSTEXPR const vector_type_info vector_types[] = {
  #define DEF_RVV_TYPE(NAME, NCHARS, ABI_NAME, ARGS...)                          \
    {#NAME, #ABI_NAME, "u" #NCHARS #ABI_NAME},
  #define DEF_RVV_TUPLE_TYPE(NAME, NCHARS, ABI_NAME, ARGS...)                    \
--- 131,137 ----
  };
  
  /* Static information about each RVV type.  */
! static constexpr const vector_type_info vector_types[] = {
  #define DEF_RVV_TYPE(NAME, NCHARS, ABI_NAME, ARGS...)                          \
    {#NAME, #ABI_NAME, "u" #NCHARS #ABI_NAME},
  #define DEF_RVV_TUPLE_TYPE(NAME, NCHARS, ABI_NAME, ARGS...)                    \
*************** static const rvv_type_info f16_ops[] = {
*** 590,708 ****
  #include "riscv-vector-builtins-types.def"
    {NUM_VECTOR_TYPES, 0}};
  
! static CONSTEXPR const rvv_arg_type_info rvv_arg_type_info_end
    = rvv_arg_type_info (NUM_BASE_TYPES);
  
  /* A list of args for size_t func () function.  */
! static CONSTEXPR const rvv_arg_type_info void_args[] = {rvv_arg_type_info_end};
  
  /* A list of args for size_t func () function.  */
! static CONSTEXPR const rvv_arg_type_info end_args[]
    = {rvv_arg_type_info_end};
  
  /* A list of args for size_t func (size_t) function.  */
! static CONSTEXPR const rvv_arg_type_info size_args[]
    = {rvv_arg_type_info (RVV_BASE_size), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (const scalar_type *) function.  */
! static CONSTEXPR const rvv_arg_type_info scalar_const_ptr_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar_const_ptr), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (const scalar_type *, size_t *) function.
   */
! static CONSTEXPR const rvv_arg_type_info scalar_const_ptr_size_ptr_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar_const_ptr),
       rvv_arg_type_info (RVV_BASE_size_ptr), rvv_arg_type_info_end};
  
  /* A list of args for void func (scalar_type *, vector_type) function.  */
! static CONSTEXPR const rvv_arg_type_info scalar_ptr_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar_ptr),
       rvv_arg_type_info (RVV_BASE_vector), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (const scalar_type *, ptrdiff_t)
   * function.  */
! static CONSTEXPR const rvv_arg_type_info scalar_const_ptr_ptrdiff_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar_const_ptr),
       rvv_arg_type_info (RVV_BASE_ptrdiff), rvv_arg_type_info_end};
  
  /* A list of args for void func (scalar_type *, ptrdiff_t, vector_type)
   * function.  */
! static CONSTEXPR const rvv_arg_type_info scalar_ptr_ptrdiff_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar_ptr),
       rvv_arg_type_info (RVV_BASE_ptrdiff), rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (const scalar_type *, eew8_index_type)
   * function.  */
! static CONSTEXPR const rvv_arg_type_info scalar_const_ptr_eew8_index_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar_const_ptr),
       rvv_arg_type_info (RVV_BASE_eew8_index), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (const scalar_type *, eew16_index_type)
   * function.  */
! static CONSTEXPR const rvv_arg_type_info scalar_const_ptr_eew16_index_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar_const_ptr),
       rvv_arg_type_info (RVV_BASE_eew16_index), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (const scalar_type *, eew32_index_type)
   * function.  */
! static CONSTEXPR const rvv_arg_type_info scalar_const_ptr_eew32_index_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar_const_ptr),
       rvv_arg_type_info (RVV_BASE_eew32_index), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (const scalar_type *, eew64_index_type)
   * function.  */
! static CONSTEXPR const rvv_arg_type_info scalar_const_ptr_eew64_index_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar_const_ptr),
       rvv_arg_type_info (RVV_BASE_eew64_index), rvv_arg_type_info_end};
  
  /* A list of args for void func (scalar_type *, eew8_index_type, vector_type)
   * function.  */
! static CONSTEXPR const rvv_arg_type_info scalar_ptr_eew8_index_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar_ptr),
       rvv_arg_type_info (RVV_BASE_eew8_index),
       rvv_arg_type_info (RVV_BASE_vector), rvv_arg_type_info_end};
  
  /* A list of args for void func (scalar_type *, eew16_index_type, vector_type)
   * function.  */
! static CONSTEXPR const rvv_arg_type_info scalar_ptr_eew16_index_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar_ptr),
       rvv_arg_type_info (RVV_BASE_eew16_index),
       rvv_arg_type_info (RVV_BASE_vector), rvv_arg_type_info_end};
  
  /* A list of args for void func (scalar_type *, eew32_index_type, vector_type)
   * function.  */
! static CONSTEXPR const rvv_arg_type_info scalar_ptr_eew32_index_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar_ptr),
       rvv_arg_type_info (RVV_BASE_eew32_index),
       rvv_arg_type_info (RVV_BASE_vector), rvv_arg_type_info_end};
  
  /* A list of args for void func (scalar_type *, eew64_index_type, vector_type)
   * function.  */
! static CONSTEXPR const rvv_arg_type_info scalar_ptr_eew64_index_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar_ptr),
       rvv_arg_type_info (RVV_BASE_eew64_index),
       rvv_arg_type_info (RVV_BASE_vector), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type, vector_type) function.  */
! static CONSTEXPR const rvv_arg_type_info vv_args[]
    = {rvv_arg_type_info (RVV_BASE_vector), rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type, vector_type, vector_type)
   * function.  */
! static CONSTEXPR const rvv_arg_type_info vvv_args[]
    = {rvv_arg_type_info (RVV_BASE_vector), rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_vector), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type, vector_type, vector_type)
   * function.  */
! static CONSTEXPR const rvv_arg_type_info vqq_args[]
    = {rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_quad_fixed_vector),
       rvv_arg_type_info (RVV_BASE_quad_fixed_vector), rvv_arg_type_info_end};
  
! static CONSTEXPR const rvv_arg_type_info su_vqq_args[]
    = {rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_quad_fixed_vector),
       rvv_arg_type_info (RVV_BASE_quad_fixed_unsigned_vector),
--- 590,708 ----
  #include "riscv-vector-builtins-types.def"
    {NUM_VECTOR_TYPES, 0}};
  
! static constexpr const rvv_arg_type_info rvv_arg_type_info_end
    = rvv_arg_type_info (NUM_BASE_TYPES);
  
  /* A list of args for size_t func () function.  */
! static constexpr const rvv_arg_type_info void_args[] = {rvv_arg_type_info_end};
  
  /* A list of args for size_t func () function.  */
! static constexpr const rvv_arg_type_info end_args[]
    = {rvv_arg_type_info_end};
  
  /* A list of args for size_t func (size_t) function.  */
! static constexpr const rvv_arg_type_info size_args[]
    = {rvv_arg_type_info (RVV_BASE_size), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (const scalar_type *) function.  */
! static constexpr const rvv_arg_type_info scalar_const_ptr_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar_const_ptr), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (const scalar_type *, size_t *) function.
   */
! static constexpr const rvv_arg_type_info scalar_const_ptr_size_ptr_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar_const_ptr),
       rvv_arg_type_info (RVV_BASE_size_ptr), rvv_arg_type_info_end};
  
  /* A list of args for void func (scalar_type *, vector_type) function.  */
! static constexpr const rvv_arg_type_info scalar_ptr_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar_ptr),
       rvv_arg_type_info (RVV_BASE_vector), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (const scalar_type *, ptrdiff_t)
   * function.  */
! static constexpr const rvv_arg_type_info scalar_const_ptr_ptrdiff_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar_const_ptr),
       rvv_arg_type_info (RVV_BASE_ptrdiff), rvv_arg_type_info_end};
  
  /* A list of args for void func (scalar_type *, ptrdiff_t, vector_type)
   * function.  */
! static constexpr const rvv_arg_type_info scalar_ptr_ptrdiff_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar_ptr),
       rvv_arg_type_info (RVV_BASE_ptrdiff), rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (const scalar_type *, eew8_index_type)
   * function.  */
! static constexpr const rvv_arg_type_info scalar_const_ptr_eew8_index_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar_const_ptr),
       rvv_arg_type_info (RVV_BASE_eew8_index), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (const scalar_type *, eew16_index_type)
   * function.  */
! static constexpr const rvv_arg_type_info scalar_const_ptr_eew16_index_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar_const_ptr),
       rvv_arg_type_info (RVV_BASE_eew16_index), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (const scalar_type *, eew32_index_type)
   * function.  */
! static constexpr const rvv_arg_type_info scalar_const_ptr_eew32_index_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar_const_ptr),
       rvv_arg_type_info (RVV_BASE_eew32_index), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (const scalar_type *, eew64_index_type)
   * function.  */
! static constexpr const rvv_arg_type_info scalar_const_ptr_eew64_index_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar_const_ptr),
       rvv_arg_type_info (RVV_BASE_eew64_index), rvv_arg_type_info_end};
  
  /* A list of args for void func (scalar_type *, eew8_index_type, vector_type)
   * function.  */
! static constexpr const rvv_arg_type_info scalar_ptr_eew8_index_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar_ptr),
       rvv_arg_type_info (RVV_BASE_eew8_index),
       rvv_arg_type_info (RVV_BASE_vector), rvv_arg_type_info_end};
  
  /* A list of args for void func (scalar_type *, eew16_index_type, vector_type)
   * function.  */
! static constexpr const rvv_arg_type_info scalar_ptr_eew16_index_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar_ptr),
       rvv_arg_type_info (RVV_BASE_eew16_index),
       rvv_arg_type_info (RVV_BASE_vector), rvv_arg_type_info_end};
  
  /* A list of args for void func (scalar_type *, eew32_index_type, vector_type)
   * function.  */
! static constexpr const rvv_arg_type_info scalar_ptr_eew32_index_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar_ptr),
       rvv_arg_type_info (RVV_BASE_eew32_index),
       rvv_arg_type_info (RVV_BASE_vector), rvv_arg_type_info_end};
  
  /* A list of args for void func (scalar_type *, eew64_index_type, vector_type)
   * function.  */
! static constexpr const rvv_arg_type_info scalar_ptr_eew64_index_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar_ptr),
       rvv_arg_type_info (RVV_BASE_eew64_index),
       rvv_arg_type_info (RVV_BASE_vector), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type, vector_type) function.  */
! static constexpr const rvv_arg_type_info vv_args[]
    = {rvv_arg_type_info (RVV_BASE_vector), rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type, vector_type, vector_type)
   * function.  */
! static constexpr const rvv_arg_type_info vvv_args[]
    = {rvv_arg_type_info (RVV_BASE_vector), rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_vector), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type, vector_type, vector_type)
   * function.  */
! static constexpr const rvv_arg_type_info vqq_args[]
    = {rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_quad_fixed_vector),
       rvv_arg_type_info (RVV_BASE_quad_fixed_vector), rvv_arg_type_info_end};
  
! static constexpr const rvv_arg_type_info su_vqq_args[]
    = {rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_quad_fixed_vector),
       rvv_arg_type_info (RVV_BASE_quad_fixed_unsigned_vector),
*************** static CONSTEXPR const rvv_arg_type_info
*** 710,903 ****
  
  /* A list of args for vector_type func (vector_type, vector_type, vector_type)
   * function.  */
! static CONSTEXPR const rvv_arg_type_info vxv_args[]
    = {rvv_arg_type_info (RVV_BASE_vector), rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info (RVV_BASE_vector), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type, vector_type, mask_type)
   * function.  */
! static CONSTEXPR const rvv_arg_type_info vvm_args[]
    = {rvv_arg_type_info (RVV_BASE_vector), rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_mask), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type, mask_type)
   * function.  */
! static CONSTEXPR const rvv_arg_type_info vm_args[]
    = {rvv_arg_type_info (RVV_BASE_vector), rvv_arg_type_info (RVV_BASE_mask),
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type, scalar_type, mask_type)
   * function.  */
! static CONSTEXPR const rvv_arg_type_info vxm_args[]
    = {rvv_arg_type_info (RVV_BASE_vector), rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info (RVV_BASE_mask), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (signed vector_type, unsigned
   * vector_type) function.  */
! static CONSTEXPR const rvv_arg_type_info su_vv_args[]
    = {rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_unsigned_vector), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type, scalar_type) function.  */
! static CONSTEXPR const rvv_arg_type_info vx_args[]
    = {rvv_arg_type_info (RVV_BASE_vector), rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (signed vector_type, unsigned
   * scalar_type) function.  */
! static CONSTEXPR const rvv_arg_type_info su_vx_args[]
    = {rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_unsigned_scalar), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type, shift_type) function.  */
! static CONSTEXPR const rvv_arg_type_info shift_vv_args[]
    = {rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_shift_vector), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type, shift_type) function.  */
! static CONSTEXPR const rvv_arg_type_info gather_vv_args[]
    = {rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_unsigned_vector), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type, shift_type) function.  */
! static CONSTEXPR const rvv_arg_type_info gatherei16_vv_args[]
    = {rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_eew16_index), rvv_arg_type_info_end};
  
  /* A list of args for double demote type func (vector_type, shift_type)
   * function.  */
! static CONSTEXPR const rvv_arg_type_info shift_wv_args[]
    = {rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_double_trunc_unsigned_vector),
       rvv_arg_type_info_end};
  
! static CONSTEXPR const rvv_arg_type_info clip_args[]
    = {rvv_arg_type_info (RVV_BASE_xfqf_vector),
       rvv_arg_type_info (RVV_BASE_xfqf_float),
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type) function.  */
! static CONSTEXPR const rvv_arg_type_info v_args[]
    = {rvv_arg_type_info (RVV_BASE_vector), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type) function.  */
! static CONSTEXPR const rvv_arg_type_info v_x2_trunc_args[]
    = {rvv_arg_type_info (RVV_BASE_vlmul_ext_x2), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type) function.  */
! static CONSTEXPR const rvv_arg_type_info v_x4_trunc_args[]
    = {rvv_arg_type_info (RVV_BASE_vlmul_ext_x4), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type) function.  */
! static CONSTEXPR const rvv_arg_type_info v_x8_trunc_args[]
    = {rvv_arg_type_info (RVV_BASE_vlmul_ext_x8), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type) function.  */
! static CONSTEXPR const rvv_arg_type_info v_x16_trunc_args[]
    = {rvv_arg_type_info (RVV_BASE_vlmul_ext_x16), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type) function.  */
! static CONSTEXPR const rvv_arg_type_info v_x32_trunc_args[]
    = {rvv_arg_type_info (RVV_BASE_vlmul_ext_x32), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type) function.  */
! static CONSTEXPR const rvv_arg_type_info v_x64_trunc_args[]
    = {rvv_arg_type_info (RVV_BASE_vlmul_ext_x64), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type, lmul1_type) function.  */
! static CONSTEXPR const rvv_arg_type_info vs_args[]
    = {rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_lmul1_vector), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type, widen_lmul1_type) function.
   */
! static CONSTEXPR const rvv_arg_type_info wvs_args[]
    = {rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_widen_lmul1_vector), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type) function.  */
! static CONSTEXPR const rvv_arg_type_info f_v_args[]
    = {rvv_arg_type_info (RVV_BASE_float_vector), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type) function.  */
! static CONSTEXPR const rvv_arg_type_info trunc_f_v_args[]
    = {rvv_arg_type_info (RVV_BASE_double_trunc_float_vector),
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type) function.  */
! static CONSTEXPR const rvv_arg_type_info w_v_args[]
    = {rvv_arg_type_info (RVV_BASE_double_trunc_vector), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type) function.  */
! static CONSTEXPR const rvv_arg_type_info bf_w_v_args[]
    = {rvv_arg_type_info (RVV_BASE_double_trunc_bfloat_vector),
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type) function.  */
! static CONSTEXPR const rvv_arg_type_info bf_wwvv_args[]
    = {rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_double_trunc_bfloat_vector),
       rvv_arg_type_info (RVV_BASE_double_trunc_bfloat_vector),
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type) function.  */
! static CONSTEXPR const rvv_arg_type_info bf_wwxv_args[]
    = {rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_double_trunc_bfloat_scalar),
       rvv_arg_type_info (RVV_BASE_double_trunc_bfloat_vector),
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type) function.  */
! static CONSTEXPR const rvv_arg_type_info m_args[]
    = {rvv_arg_type_info (RVV_BASE_mask), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (scalar_type/sf.vc) function.  */
! static CONSTEXPR const rvv_arg_type_info x_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type, size) function.  */
! static CONSTEXPR const rvv_arg_type_info v_size_args[]
    = {rvv_arg_type_info (RVV_BASE_vector), rvv_arg_type_info (RVV_BASE_size),
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (double demote_type, size_t) function.  */
! static CONSTEXPR const rvv_arg_type_info wv_size_args[]
    = {rvv_arg_type_info (RVV_BASE_double_trunc_vector),
      rvv_arg_type_info (RVV_BASE_size),rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type, vector_type, size)
   * function.  */
! static CONSTEXPR const rvv_arg_type_info vv_size_args[]
    = {rvv_arg_type_info (RVV_BASE_vector), rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_size), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (double demote type) function.  */
! static CONSTEXPR const rvv_arg_type_info vf2_args[]
    = {rvv_arg_type_info (RVV_BASE_double_trunc_vector), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (double demote type, double demote type)
   * function.  */
! static CONSTEXPR const rvv_arg_type_info wvv_args[]
    = {rvv_arg_type_info (RVV_BASE_double_trunc_vector),
       rvv_arg_type_info (RVV_BASE_double_trunc_vector), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type, double demote type, double
   * demote type) function.  */
! static CONSTEXPR const rvv_arg_type_info wwvv_args[]
    = {rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_double_trunc_vector),
       rvv_arg_type_info (RVV_BASE_double_trunc_vector), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type, double demote type, double
   * demote type) function.  */
! static CONSTEXPR const rvv_arg_type_info wwxv_args[]
    = {rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_double_trunc_scalar),
       rvv_arg_type_info (RVV_BASE_double_trunc_vector), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type, double demote type, double
   * demote type) function.  */
! static CONSTEXPR const rvv_arg_type_info su_wwvv_args[]
    = {rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_double_trunc_vector),
       rvv_arg_type_info (RVV_BASE_double_trunc_unsigned_vector),
--- 710,903 ----
  
  /* A list of args for vector_type func (vector_type, vector_type, vector_type)
   * function.  */
! static constexpr const rvv_arg_type_info vxv_args[]
    = {rvv_arg_type_info (RVV_BASE_vector), rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info (RVV_BASE_vector), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type, vector_type, mask_type)
   * function.  */
! static constexpr const rvv_arg_type_info vvm_args[]
    = {rvv_arg_type_info (RVV_BASE_vector), rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_mask), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type, mask_type)
   * function.  */
! static constexpr const rvv_arg_type_info vm_args[]
    = {rvv_arg_type_info (RVV_BASE_vector), rvv_arg_type_info (RVV_BASE_mask),
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type, scalar_type, mask_type)
   * function.  */
! static constexpr const rvv_arg_type_info vxm_args[]
    = {rvv_arg_type_info (RVV_BASE_vector), rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info (RVV_BASE_mask), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (signed vector_type, unsigned
   * vector_type) function.  */
! static constexpr const rvv_arg_type_info su_vv_args[]
    = {rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_unsigned_vector), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type, scalar_type) function.  */
! static constexpr const rvv_arg_type_info vx_args[]
    = {rvv_arg_type_info (RVV_BASE_vector), rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (signed vector_type, unsigned
   * scalar_type) function.  */
! static constexpr const rvv_arg_type_info su_vx_args[]
    = {rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_unsigned_scalar), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type, shift_type) function.  */
! static constexpr const rvv_arg_type_info shift_vv_args[]
    = {rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_shift_vector), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type, shift_type) function.  */
! static constexpr const rvv_arg_type_info gather_vv_args[]
    = {rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_unsigned_vector), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type, shift_type) function.  */
! static constexpr const rvv_arg_type_info gatherei16_vv_args[]
    = {rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_eew16_index), rvv_arg_type_info_end};
  
  /* A list of args for double demote type func (vector_type, shift_type)
   * function.  */
! static constexpr const rvv_arg_type_info shift_wv_args[]
    = {rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_double_trunc_unsigned_vector),
       rvv_arg_type_info_end};
  
! static constexpr const rvv_arg_type_info clip_args[]
    = {rvv_arg_type_info (RVV_BASE_xfqf_vector),
       rvv_arg_type_info (RVV_BASE_xfqf_float),
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type) function.  */
! static constexpr const rvv_arg_type_info v_args[]
    = {rvv_arg_type_info (RVV_BASE_vector), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type) function.  */
! static constexpr const rvv_arg_type_info v_x2_trunc_args[]
    = {rvv_arg_type_info (RVV_BASE_vlmul_ext_x2), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type) function.  */
! static constexpr const rvv_arg_type_info v_x4_trunc_args[]
    = {rvv_arg_type_info (RVV_BASE_vlmul_ext_x4), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type) function.  */
! static constexpr const rvv_arg_type_info v_x8_trunc_args[]
    = {rvv_arg_type_info (RVV_BASE_vlmul_ext_x8), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type) function.  */
! static constexpr const rvv_arg_type_info v_x16_trunc_args[]
    = {rvv_arg_type_info (RVV_BASE_vlmul_ext_x16), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type) function.  */
! static constexpr const rvv_arg_type_info v_x32_trunc_args[]
    = {rvv_arg_type_info (RVV_BASE_vlmul_ext_x32), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type) function.  */
! static constexpr const rvv_arg_type_info v_x64_trunc_args[]
    = {rvv_arg_type_info (RVV_BASE_vlmul_ext_x64), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type, lmul1_type) function.  */
! static constexpr const rvv_arg_type_info vs_args[]
    = {rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_lmul1_vector), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type, widen_lmul1_type) function.
   */
! static constexpr const rvv_arg_type_info wvs_args[]
    = {rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_widen_lmul1_vector), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type) function.  */
! static constexpr const rvv_arg_type_info f_v_args[]
    = {rvv_arg_type_info (RVV_BASE_float_vector), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type) function.  */
! static constexpr const rvv_arg_type_info trunc_f_v_args[]
    = {rvv_arg_type_info (RVV_BASE_double_trunc_float_vector),
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type) function.  */
! static constexpr const rvv_arg_type_info w_v_args[]
    = {rvv_arg_type_info (RVV_BASE_double_trunc_vector), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type) function.  */
! static constexpr const rvv_arg_type_info bf_w_v_args[]
    = {rvv_arg_type_info (RVV_BASE_double_trunc_bfloat_vector),
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type) function.  */
! static constexpr const rvv_arg_type_info bf_wwvv_args[]
    = {rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_double_trunc_bfloat_vector),
       rvv_arg_type_info (RVV_BASE_double_trunc_bfloat_vector),
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type) function.  */
! static constexpr const rvv_arg_type_info bf_wwxv_args[]
    = {rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_double_trunc_bfloat_scalar),
       rvv_arg_type_info (RVV_BASE_double_trunc_bfloat_vector),
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type) function.  */
! static constexpr const rvv_arg_type_info m_args[]
    = {rvv_arg_type_info (RVV_BASE_mask), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (scalar_type/sf.vc) function.  */
! static constexpr const rvv_arg_type_info x_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type, size) function.  */
! static constexpr const rvv_arg_type_info v_size_args[]
    = {rvv_arg_type_info (RVV_BASE_vector), rvv_arg_type_info (RVV_BASE_size),
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (double demote_type, size_t) function.  */
! static constexpr const rvv_arg_type_info wv_size_args[]
    = {rvv_arg_type_info (RVV_BASE_double_trunc_vector),
      rvv_arg_type_info (RVV_BASE_size),rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type, vector_type, size)
   * function.  */
! static constexpr const rvv_arg_type_info vv_size_args[]
    = {rvv_arg_type_info (RVV_BASE_vector), rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_size), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (double demote type) function.  */
! static constexpr const rvv_arg_type_info vf2_args[]
    = {rvv_arg_type_info (RVV_BASE_double_trunc_vector), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (double demote type, double demote type)
   * function.  */
! static constexpr const rvv_arg_type_info wvv_args[]
    = {rvv_arg_type_info (RVV_BASE_double_trunc_vector),
       rvv_arg_type_info (RVV_BASE_double_trunc_vector), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type, double demote type, double
   * demote type) function.  */
! static constexpr const rvv_arg_type_info wwvv_args[]
    = {rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_double_trunc_vector),
       rvv_arg_type_info (RVV_BASE_double_trunc_vector), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type, double demote type, double
   * demote type) function.  */
! static constexpr const rvv_arg_type_info wwxv_args[]
    = {rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_double_trunc_scalar),
       rvv_arg_type_info (RVV_BASE_double_trunc_vector), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type, double demote type, double
   * demote type) function.  */
! static constexpr const rvv_arg_type_info su_wwvv_args[]
    = {rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_double_trunc_vector),
       rvv_arg_type_info (RVV_BASE_double_trunc_unsigned_vector),
*************** static CONSTEXPR const rvv_arg_type_info
*** 905,911 ****
  
  /* A list of args for vector_type func (vector_type, double demote type, double
   * demote type) function.  */
! static CONSTEXPR const rvv_arg_type_info su_wwxv_args[]
    = {rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_double_trunc_scalar),
       rvv_arg_type_info (RVV_BASE_double_trunc_unsigned_vector),
--- 905,911 ----
  
  /* A list of args for vector_type func (vector_type, double demote type, double
   * demote type) function.  */
! static constexpr const rvv_arg_type_info su_wwxv_args[]
    = {rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_double_trunc_scalar),
       rvv_arg_type_info (RVV_BASE_double_trunc_unsigned_vector),
*************** static CONSTEXPR const rvv_arg_type_info
*** 913,919 ****
  
  /* A list of args for vector_type func (vector_type, double demote type, double
   * demote type) function.  */
! static CONSTEXPR const rvv_arg_type_info us_wwxv_args[]
    = {rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_double_trunc_unsigned_scalar),
       rvv_arg_type_info (RVV_BASE_double_trunc_vector),
--- 913,919 ----
  
  /* A list of args for vector_type func (vector_type, double demote type, double
   * demote type) function.  */
! static constexpr const rvv_arg_type_info us_wwxv_args[]
    = {rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_double_trunc_unsigned_scalar),
       rvv_arg_type_info (RVV_BASE_double_trunc_vector),
*************** static CONSTEXPR const rvv_arg_type_info
*** 921,1108 ****
  
  /* A static operand information for vector_type func (vector_type, quad lmul1
   * type, quad half lmul type) function registration. */
! static CONSTEXPR const rvv_arg_type_info qqvv_args[]
    = {rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_quad_lmul1_vector),
       rvv_arg_type_info (RVV_BASE_quad_emul_vector), rvv_arg_type_info_end};
  
! static CONSTEXPR const rvv_arg_type_info uqqvv_args[]
    = {rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_quad_lmul1_unsigned_vector),
       rvv_arg_type_info (RVV_BASE_quad_emul_unsigned_vector),
       rvv_arg_type_info_end};
  
! static CONSTEXPR const rvv_arg_type_info su_qqvv_args[]
    = {rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_quad_lmul1_vector),
       rvv_arg_type_info (RVV_BASE_quad_emul_unsigned_vector),
       rvv_arg_type_info_end};
  
! static CONSTEXPR const rvv_arg_type_info us_qqvv_args[]
    = {rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_quad_lmul1_unsigned_vector),
       rvv_arg_type_info (RVV_BASE_quad_emul_vector), rvv_arg_type_info_end};
  
  /* A static operand information for vector_type func (vector_type, quad lmul1
   * type, quad emul type) function registration. */
! static CONSTEXPR const rvv_arg_type_info qdvv_args[]
    = {rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_quad_lmul1_vector),
       rvv_arg_type_info (RVV_BASE_quad_fixed_vector), rvv_arg_type_info_end};
  
! static CONSTEXPR const rvv_arg_type_info uqdvv_args[]
    = {rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_quad_lmul1_unsigned_vector),
       rvv_arg_type_info (RVV_BASE_quad_fixed_unsigned_vector),
       rvv_arg_type_info_end};
  
! static CONSTEXPR const rvv_arg_type_info su_qdvv_args[]
    = {rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_quad_lmul1_vector),
       rvv_arg_type_info (RVV_BASE_quad_fixed_unsigned_vector),
       rvv_arg_type_info_end};
  
! static CONSTEXPR const rvv_arg_type_info us_qdvv_args[]
    = {rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_quad_lmul1_unsigned_vector),
       rvv_arg_type_info (RVV_BASE_quad_fixed_vector), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (signed double demote type,
   * unsigneddouble demote type) function.  */
! static CONSTEXPR const rvv_arg_type_info su_wvv_args[]
    = {rvv_arg_type_info (RVV_BASE_double_trunc_vector),
       rvv_arg_type_info (RVV_BASE_double_trunc_unsigned_vector), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (double demote type, double demote type)
   * function.  */
! static CONSTEXPR const rvv_arg_type_info wvx_args[]
    = {rvv_arg_type_info (RVV_BASE_double_trunc_vector),
       rvv_arg_type_info (RVV_BASE_double_trunc_scalar), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (signed double demote type, unsigned
   * double demote type) function.  */
! static CONSTEXPR const rvv_arg_type_info su_wvx_args[]
    = {rvv_arg_type_info (RVV_BASE_double_trunc_vector),
       rvv_arg_type_info (RVV_BASE_double_trunc_unsigned_scalar),
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (double demote type, double demote type)
   * function.  */
! static CONSTEXPR const rvv_arg_type_info wwv_args[]
    = {rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_double_trunc_vector), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (double demote type, double demote type)
   * function.  */
! static CONSTEXPR const rvv_arg_type_info wwx_args[]
    = {rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_double_trunc_scalar), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (quad demote type) function.  */
! static CONSTEXPR const rvv_arg_type_info vf4_args[]
    = {rvv_arg_type_info (RVV_BASE_quad_trunc_vector), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (oct demote type) function.  */
! static CONSTEXPR const rvv_arg_type_info vf8_args[]
    = {rvv_arg_type_info (RVV_BASE_oct_trunc_vector), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (double demote type) function.  */
! static CONSTEXPR const rvv_arg_type_info x_x_v_args[]
    = {rvv_arg_type_info (RVV_BASE_double_trunc_vector), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type) function.  */
! static CONSTEXPR const rvv_arg_type_info x_v_args[]
    = {rvv_arg_type_info (RVV_BASE_signed_vector), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type) function.  */
! static CONSTEXPR const rvv_arg_type_info xu_v_args[]
    = {rvv_arg_type_info (RVV_BASE_unsigned_vector), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type) function.  */
! static CONSTEXPR const rvv_arg_type_info w_x_v_args[]
    = {rvv_arg_type_info (RVV_BASE_double_trunc_signed_vector),
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type) function.  */
! static CONSTEXPR const rvv_arg_type_info w_xu_v_args[]
    = {rvv_arg_type_info (RVV_BASE_double_trunc_unsigned_vector),
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type) function.  */
! static CONSTEXPR const rvv_arg_type_info ext_x2_vset_args[]
    = {rvv_arg_type_info (RVV_BASE_vlmul_ext_x2),
       rvv_arg_type_info (RVV_BASE_size), rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type) function.  */
! static CONSTEXPR const rvv_arg_type_info ext_x4_vset_args[]
    = {rvv_arg_type_info (RVV_BASE_vlmul_ext_x4),
       rvv_arg_type_info (RVV_BASE_size), rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type) function.  */
! static CONSTEXPR const rvv_arg_type_info ext_x8_vset_args[]
    = {rvv_arg_type_info (RVV_BASE_vlmul_ext_x8),
       rvv_arg_type_info (RVV_BASE_size), rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type) function.  */
! static CONSTEXPR const rvv_arg_type_info ext_x2_vget_args[]
    = {rvv_arg_type_info (RVV_BASE_vlmul_ext_x2),
       rvv_arg_type_info (RVV_BASE_size), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type) function.  */
! static CONSTEXPR const rvv_arg_type_info ext_x4_vget_args[]
    = {rvv_arg_type_info (RVV_BASE_vlmul_ext_x4),
       rvv_arg_type_info (RVV_BASE_size), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type) function.  */
! static CONSTEXPR const rvv_arg_type_info ext_x8_vget_args[]
    = {rvv_arg_type_info (RVV_BASE_vlmul_ext_x8),
       rvv_arg_type_info (RVV_BASE_size), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type) function.  */
! static CONSTEXPR const rvv_arg_type_info tuple_vset_args[]
    = {rvv_arg_type_info (RVV_BASE_vector), rvv_arg_type_info (RVV_BASE_size),
       rvv_arg_type_info (RVV_BASE_tuple_subpart), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type) function.  */
! static CONSTEXPR const rvv_arg_type_info tuple_vcreate_args[]
    = {rvv_arg_type_info (RVV_BASE_tuple_subpart), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type) function.  */
! static CONSTEXPR const rvv_arg_type_info ext_vcreate_args[]
    = {rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (const scalar_type *, size_t)
   * function.  */
! static CONSTEXPR const rvv_arg_type_info scalar_const_ptr_size_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar_const_ptr),
       rvv_arg_type_info (RVV_BASE_size), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (const scalar_type *, eew8_index_type)
   * function.  */
! static CONSTEXPR const rvv_arg_type_info scalar_const_ptr_index_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar_const_ptr),
       rvv_arg_type_info (RVV_BASE_unsigned_vector), rvv_arg_type_info_end};
  
  /* A list of args for void func (scalar_type *, eew8_index_type, vector_type)
   * function.  */
! static CONSTEXPR const rvv_arg_type_info scalar_ptr_index_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar_ptr),
       rvv_arg_type_info (RVV_BASE_unsigned_vector),
       rvv_arg_type_info (RVV_BASE_vector), rvv_arg_type_info_end};
  
  /* A list of args for void func (scalar_type *, size_t, vector_type)
   * function.  */
! static CONSTEXPR const rvv_arg_type_info scalar_ptr_size_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar_ptr),
       rvv_arg_type_info (RVV_BASE_size), rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (sf.vc.x) function.  */
! static CONSTEXPR const rvv_arg_type_info sf_vc_x_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info (RVV_BASE_scalar),
--- 921,1108 ----
  
  /* A static operand information for vector_type func (vector_type, quad lmul1
   * type, quad half lmul type) function registration. */
! static constexpr const rvv_arg_type_info qqvv_args[]
    = {rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_quad_lmul1_vector),
       rvv_arg_type_info (RVV_BASE_quad_emul_vector), rvv_arg_type_info_end};
  
! static constexpr const rvv_arg_type_info uqqvv_args[]
    = {rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_quad_lmul1_unsigned_vector),
       rvv_arg_type_info (RVV_BASE_quad_emul_unsigned_vector),
       rvv_arg_type_info_end};
  
! static constexpr const rvv_arg_type_info su_qqvv_args[]
    = {rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_quad_lmul1_vector),
       rvv_arg_type_info (RVV_BASE_quad_emul_unsigned_vector),
       rvv_arg_type_info_end};
  
! static constexpr const rvv_arg_type_info us_qqvv_args[]
    = {rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_quad_lmul1_unsigned_vector),
       rvv_arg_type_info (RVV_BASE_quad_emul_vector), rvv_arg_type_info_end};
  
  /* A static operand information for vector_type func (vector_type, quad lmul1
   * type, quad emul type) function registration. */
! static constexpr const rvv_arg_type_info qdvv_args[]
    = {rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_quad_lmul1_vector),
       rvv_arg_type_info (RVV_BASE_quad_fixed_vector), rvv_arg_type_info_end};
  
! static constexpr const rvv_arg_type_info uqdvv_args[]
    = {rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_quad_lmul1_unsigned_vector),
       rvv_arg_type_info (RVV_BASE_quad_fixed_unsigned_vector),
       rvv_arg_type_info_end};
  
! static constexpr const rvv_arg_type_info su_qdvv_args[]
    = {rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_quad_lmul1_vector),
       rvv_arg_type_info (RVV_BASE_quad_fixed_unsigned_vector),
       rvv_arg_type_info_end};
  
! static constexpr const rvv_arg_type_info us_qdvv_args[]
    = {rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_quad_lmul1_unsigned_vector),
       rvv_arg_type_info (RVV_BASE_quad_fixed_vector), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (signed double demote type,
   * unsigneddouble demote type) function.  */
! static constexpr const rvv_arg_type_info su_wvv_args[]
    = {rvv_arg_type_info (RVV_BASE_double_trunc_vector),
       rvv_arg_type_info (RVV_BASE_double_trunc_unsigned_vector), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (double demote type, double demote type)
   * function.  */
! static constexpr const rvv_arg_type_info wvx_args[]
    = {rvv_arg_type_info (RVV_BASE_double_trunc_vector),
       rvv_arg_type_info (RVV_BASE_double_trunc_scalar), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (signed double demote type, unsigned
   * double demote type) function.  */
! static constexpr const rvv_arg_type_info su_wvx_args[]
    = {rvv_arg_type_info (RVV_BASE_double_trunc_vector),
       rvv_arg_type_info (RVV_BASE_double_trunc_unsigned_scalar),
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (double demote type, double demote type)
   * function.  */
! static constexpr const rvv_arg_type_info wwv_args[]
    = {rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_double_trunc_vector), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (double demote type, double demote type)
   * function.  */
! static constexpr const rvv_arg_type_info wwx_args[]
    = {rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_double_trunc_scalar), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (quad demote type) function.  */
! static constexpr const rvv_arg_type_info vf4_args[]
    = {rvv_arg_type_info (RVV_BASE_quad_trunc_vector), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (oct demote type) function.  */
! static constexpr const rvv_arg_type_info vf8_args[]
    = {rvv_arg_type_info (RVV_BASE_oct_trunc_vector), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (double demote type) function.  */
! static constexpr const rvv_arg_type_info x_x_v_args[]
    = {rvv_arg_type_info (RVV_BASE_double_trunc_vector), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type) function.  */
! static constexpr const rvv_arg_type_info x_v_args[]
    = {rvv_arg_type_info (RVV_BASE_signed_vector), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type) function.  */
! static constexpr const rvv_arg_type_info xu_v_args[]
    = {rvv_arg_type_info (RVV_BASE_unsigned_vector), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type) function.  */
! static constexpr const rvv_arg_type_info w_x_v_args[]
    = {rvv_arg_type_info (RVV_BASE_double_trunc_signed_vector),
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type) function.  */
! static constexpr const rvv_arg_type_info w_xu_v_args[]
    = {rvv_arg_type_info (RVV_BASE_double_trunc_unsigned_vector),
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type) function.  */
! static constexpr const rvv_arg_type_info ext_x2_vset_args[]
    = {rvv_arg_type_info (RVV_BASE_vlmul_ext_x2),
       rvv_arg_type_info (RVV_BASE_size), rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type) function.  */
! static constexpr const rvv_arg_type_info ext_x4_vset_args[]
    = {rvv_arg_type_info (RVV_BASE_vlmul_ext_x4),
       rvv_arg_type_info (RVV_BASE_size), rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type) function.  */
! static constexpr const rvv_arg_type_info ext_x8_vset_args[]
    = {rvv_arg_type_info (RVV_BASE_vlmul_ext_x8),
       rvv_arg_type_info (RVV_BASE_size), rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type) function.  */
! static constexpr const rvv_arg_type_info ext_x2_vget_args[]
    = {rvv_arg_type_info (RVV_BASE_vlmul_ext_x2),
       rvv_arg_type_info (RVV_BASE_size), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type) function.  */
! static constexpr const rvv_arg_type_info ext_x4_vget_args[]
    = {rvv_arg_type_info (RVV_BASE_vlmul_ext_x4),
       rvv_arg_type_info (RVV_BASE_size), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type) function.  */
! static constexpr const rvv_arg_type_info ext_x8_vget_args[]
    = {rvv_arg_type_info (RVV_BASE_vlmul_ext_x8),
       rvv_arg_type_info (RVV_BASE_size), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type) function.  */
! static constexpr const rvv_arg_type_info tuple_vset_args[]
    = {rvv_arg_type_info (RVV_BASE_vector), rvv_arg_type_info (RVV_BASE_size),
       rvv_arg_type_info (RVV_BASE_tuple_subpart), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type) function.  */
! static constexpr const rvv_arg_type_info tuple_vcreate_args[]
    = {rvv_arg_type_info (RVV_BASE_tuple_subpart), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type) function.  */
! static constexpr const rvv_arg_type_info ext_vcreate_args[]
    = {rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (const scalar_type *, size_t)
   * function.  */
! static constexpr const rvv_arg_type_info scalar_const_ptr_size_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar_const_ptr),
       rvv_arg_type_info (RVV_BASE_size), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (const scalar_type *, eew8_index_type)
   * function.  */
! static constexpr const rvv_arg_type_info scalar_const_ptr_index_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar_const_ptr),
       rvv_arg_type_info (RVV_BASE_unsigned_vector), rvv_arg_type_info_end};
  
  /* A list of args for void func (scalar_type *, eew8_index_type, vector_type)
   * function.  */
! static constexpr const rvv_arg_type_info scalar_ptr_index_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar_ptr),
       rvv_arg_type_info (RVV_BASE_unsigned_vector),
       rvv_arg_type_info (RVV_BASE_vector), rvv_arg_type_info_end};
  
  /* A list of args for void func (scalar_type *, size_t, vector_type)
   * function.  */
! static constexpr const rvv_arg_type_info scalar_ptr_size_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar_ptr),
       rvv_arg_type_info (RVV_BASE_size), rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (sf.vc.x) function.  */
! static constexpr const rvv_arg_type_info sf_vc_x_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info (RVV_BASE_scalar),
*************** static CONSTEXPR const rvv_arg_type_info
*** 1110,1123 ****
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (sf.vc.v.x) function.  */
! static CONSTEXPR const rvv_arg_type_info sf_vc_v_x_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (sf.vc.i) function.  */
! static CONSTEXPR const rvv_arg_type_info sf_vc_i_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info (RVV_BASE_scalar),
--- 1110,1123 ----
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (sf.vc.v.x) function.  */
! static constexpr const rvv_arg_type_info sf_vc_v_x_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (sf.vc.i) function.  */
! static constexpr const rvv_arg_type_info sf_vc_i_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info (RVV_BASE_scalar),
*************** static CONSTEXPR const rvv_arg_type_info
*** 1126,1139 ****
  
  
  /* A list of args for vector_type func (sf.vc.i) function.  */
! static CONSTEXPR const rvv_arg_type_info sf_vc_v_i_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (sf.vc.vv) function.  */
! static CONSTEXPR const rvv_arg_type_info sf_vc_vv_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info (RVV_BASE_vector),
--- 1126,1139 ----
  
  
  /* A list of args for vector_type func (sf.vc.i) function.  */
! static constexpr const rvv_arg_type_info sf_vc_v_i_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (sf.vc.vv) function.  */
! static constexpr const rvv_arg_type_info sf_vc_vv_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info (RVV_BASE_vector),
*************** static CONSTEXPR const rvv_arg_type_info
*** 1141,1154 ****
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (sf.vc.v.vv) function.  */
! static CONSTEXPR const rvv_arg_type_info sf_vc_v_vv_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (sf.vc.xv) function.  */
! static CONSTEXPR const rvv_arg_type_info sf_vc_xv_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info (RVV_BASE_vector),
--- 1141,1154 ----
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (sf.vc.v.vv) function.  */
! static constexpr const rvv_arg_type_info sf_vc_v_vv_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (sf.vc.xv) function.  */
! static constexpr const rvv_arg_type_info sf_vc_xv_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info (RVV_BASE_vector),
*************** static CONSTEXPR const rvv_arg_type_info
*** 1156,1169 ****
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (sf.vc.v.xv) function.  */
! static CONSTEXPR const rvv_arg_type_info sf_vc_v_xv_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (sf.vc.iv) function.  */
! static CONSTEXPR const rvv_arg_type_info sf_vc_iv_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info (RVV_BASE_vector),
--- 1156,1169 ----
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (sf.vc.v.xv) function.  */
! static constexpr const rvv_arg_type_info sf_vc_v_xv_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (sf.vc.iv) function.  */
! static constexpr const rvv_arg_type_info sf_vc_iv_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info (RVV_BASE_vector),
*************** static CONSTEXPR const rvv_arg_type_info
*** 1171,1184 ****
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (sf.vc.v.iv) function.  */
! static CONSTEXPR const rvv_arg_type_info sf_vc_v_iv_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (sf.vc.fv) function.  */
! static CONSTEXPR const rvv_arg_type_info sf_vc_fv_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info (RVV_BASE_vector),
--- 1171,1184 ----
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (sf.vc.v.iv) function.  */
! static constexpr const rvv_arg_type_info sf_vc_v_iv_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (sf.vc.fv) function.  */
! static constexpr const rvv_arg_type_info sf_vc_fv_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info (RVV_BASE_vector),
*************** static CONSTEXPR const rvv_arg_type_info
*** 1186,1199 ****
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (sf.vc.v.fv) function.  */
! static CONSTEXPR const rvv_arg_type_info sf_vc_v_fv_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_scalar_float),
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (sf.vc.vvv/sf.vc.v.vvv) function.  */
! static CONSTEXPR const rvv_arg_type_info sf_vc_vvv_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_vector),
--- 1186,1199 ----
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (sf.vc.v.fv) function.  */
! static constexpr const rvv_arg_type_info sf_vc_v_fv_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_scalar_float),
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (sf.vc.vvv/sf.vc.v.vvv) function.  */
! static constexpr const rvv_arg_type_info sf_vc_vvv_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_vector),
*************** static CONSTEXPR const rvv_arg_type_info
*** 1201,1207 ****
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (sf.vc.xvv/sf.vc.v.xvv) function.  */
! static CONSTEXPR const rvv_arg_type_info sf_vc_xvv_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_vector),
--- 1201,1207 ----
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (sf.vc.xvv/sf.vc.v.xvv) function.  */
! static constexpr const rvv_arg_type_info sf_vc_xvv_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_vector),
*************** static CONSTEXPR const rvv_arg_type_info
*** 1209,1215 ****
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (sf.vc.ivv/sf.vc.v.ivv) function.  */
! static CONSTEXPR const rvv_arg_type_info sf_vc_ivv_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info (RVV_BASE_unsigned_vector),
       rvv_arg_type_info (RVV_BASE_unsigned_vector),
--- 1209,1215 ----
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (sf.vc.ivv/sf.vc.v.ivv) function.  */
! static constexpr const rvv_arg_type_info sf_vc_ivv_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info (RVV_BASE_unsigned_vector),
       rvv_arg_type_info (RVV_BASE_unsigned_vector),
*************** static CONSTEXPR const rvv_arg_type_info
*** 1217,1223 ****
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (sf.vc.fvv/sf.vc.v.fvv) function.  */
! static CONSTEXPR const rvv_arg_type_info sf_vc_fvv_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_vector),
--- 1217,1223 ----
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (sf.vc.fvv/sf.vc.v.fvv) function.  */
! static constexpr const rvv_arg_type_info sf_vc_fvv_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_vector),
*************** static CONSTEXPR const rvv_arg_type_info
*** 1225,1231 ****
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (sf.vc.vvw/sf.vc.v.vvw) function.  */
! static CONSTEXPR const rvv_arg_type_info sf_vc_vvw_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info (RVV_BASE_x2_vector),
       rvv_arg_type_info (RVV_BASE_vector),
--- 1225,1231 ----
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (sf.vc.vvw/sf.vc.v.vvw) function.  */
! static constexpr const rvv_arg_type_info sf_vc_vvw_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info (RVV_BASE_x2_vector),
       rvv_arg_type_info (RVV_BASE_vector),
*************** static CONSTEXPR const rvv_arg_type_info
*** 1233,1239 ****
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (sf.vc.xvw/sf.vc.v.xvw) function.  */
! static CONSTEXPR const rvv_arg_type_info sf_vc_xvw_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info (RVV_BASE_x2_vector),
       rvv_arg_type_info (RVV_BASE_vector),
--- 1233,1239 ----
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (sf.vc.xvw/sf.vc.v.xvw) function.  */
! static constexpr const rvv_arg_type_info sf_vc_xvw_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info (RVV_BASE_x2_vector),
       rvv_arg_type_info (RVV_BASE_vector),
*************** static CONSTEXPR const rvv_arg_type_info
*** 1241,1247 ****
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (sf.vc.ivw/sf.vc.v.ivw) function.  */
! static CONSTEXPR const rvv_arg_type_info sf_vc_ivw_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info (RVV_BASE_x2_vector),
       rvv_arg_type_info (RVV_BASE_vector),
--- 1241,1247 ----
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (sf.vc.ivw/sf.vc.v.ivw) function.  */
! static constexpr const rvv_arg_type_info sf_vc_ivw_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info (RVV_BASE_x2_vector),
       rvv_arg_type_info (RVV_BASE_vector),
*************** static CONSTEXPR const rvv_arg_type_info
*** 1249,1255 ****
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (sf.vc.fvw/sf.vc.v.fvw) function.  */
! static CONSTEXPR const rvv_arg_type_info sf_vc_fvw_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info (RVV_BASE_x2_vector),
       rvv_arg_type_info (RVV_BASE_vector),
--- 1249,1255 ----
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (sf.vc.fvw/sf.vc.v.fvw) function.  */
! static constexpr const rvv_arg_type_info sf_vc_fvw_args[]
    = {rvv_arg_type_info (RVV_BASE_scalar),
       rvv_arg_type_info (RVV_BASE_x2_vector),
       rvv_arg_type_info (RVV_BASE_vector),
*************** static CONSTEXPR const rvv_arg_type_info
*** 1257,1298 ****
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (const void_type *) function.  */
! static CONSTEXPR const rvv_arg_type_info void_const_ptr_args[]
    = {rvv_arg_type_info (RVV_BASE_void_const_ptr), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type, widen_lmul1_scalar)
     function.  */
! static CONSTEXPR const rvv_arg_type_info vw_args[]
    = {rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_float32), rvv_arg_type_info_end};
  
  /* A list of none preds that will be registered for intrinsic functions.  */
! static CONSTEXPR const predication_type_index none_preds[]
    = {PRED_TYPE_none, NUM_PRED_TYPES};
  
  /* vop/vop_m/vop_tu/vop_tum/vop_tumu/vop_mu will be registered.  */
! static CONSTEXPR const predication_type_index full_preds[]
    = {PRED_TYPE_none, PRED_TYPE_m,  PRED_TYPE_tu,  PRED_TYPE_tum,
       PRED_TYPE_tumu, PRED_TYPE_mu, NUM_PRED_TYPES};
  
  /* vop/vop_m/vop_tu/vop_tum/ will be registered.  */
! static CONSTEXPR const predication_type_index no_mu_preds[]
    = {PRED_TYPE_none, PRED_TYPE_m, PRED_TYPE_tu, PRED_TYPE_tum, NUM_PRED_TYPES};
  
  /* vop/vop_tu will be registered.  */
! static CONSTEXPR const predication_type_index none_tu_preds[]
    = {PRED_TYPE_none, PRED_TYPE_tu, NUM_PRED_TYPES};
  
  /* vop/vop_m will be registered.  */
! static CONSTEXPR const predication_type_index none_m_preds[]
    = {PRED_TYPE_none, PRED_TYPE_m, NUM_PRED_TYPES};
  
  /* vop/vop_m/vop_mu will be registered.  */
! static CONSTEXPR const predication_type_index none_m_mu_preds[]
    = {PRED_TYPE_none, PRED_TYPE_m, PRED_TYPE_mu, NUM_PRED_TYPES};
  
  /* A static operand information for size_t func () function registration. */
! static CONSTEXPR const rvv_op_info i_none_size_void_ops
    = {i_ops,				/* Types */
       OP_TYPE_none,			/* Suffix */
       rvv_arg_type_info (RVV_BASE_size), /* Return type */
--- 1257,1298 ----
       rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (const void_type *) function.  */
! static constexpr const rvv_arg_type_info void_const_ptr_args[]
    = {rvv_arg_type_info (RVV_BASE_void_const_ptr), rvv_arg_type_info_end};
  
  /* A list of args for vector_type func (vector_type, widen_lmul1_scalar)
     function.  */
! static constexpr const rvv_arg_type_info vw_args[]
    = {rvv_arg_type_info (RVV_BASE_vector),
       rvv_arg_type_info (RVV_BASE_float32), rvv_arg_type_info_end};
  
  /* A list of none preds that will be registered for intrinsic functions.  */
! static constexpr const predication_type_index none_preds[]
    = {PRED_TYPE_none, NUM_PRED_TYPES};
  
  /* vop/vop_m/vop_tu/vop_tum/vop_tumu/vop_mu will be registered.  */
! static constexpr const predication_type_index full_preds[]
    = {PRED_TYPE_none, PRED_TYPE_m,  PRED_TYPE_tu,  PRED_TYPE_tum,
       PRED_TYPE_tumu, PRED_TYPE_mu, NUM_PRED_TYPES};
  
  /* vop/vop_m/vop_tu/vop_tum/ will be registered.  */
! static constexpr const predication_type_index no_mu_preds[]
    = {PRED_TYPE_none, PRED_TYPE_m, PRED_TYPE_tu, PRED_TYPE_tum, NUM_PRED_TYPES};
  
  /* vop/vop_tu will be registered.  */
! static constexpr const predication_type_index none_tu_preds[]
    = {PRED_TYPE_none, PRED_TYPE_tu, NUM_PRED_TYPES};
  
  /* vop/vop_m will be registered.  */
! static constexpr const predication_type_index none_m_preds[]
    = {PRED_TYPE_none, PRED_TYPE_m, NUM_PRED_TYPES};
  
  /* vop/vop_m/vop_mu will be registered.  */
! static constexpr const predication_type_index none_m_mu_preds[]
    = {PRED_TYPE_none, PRED_TYPE_m, PRED_TYPE_mu, NUM_PRED_TYPES};
  
  /* A static operand information for size_t func () function registration. */
! static constexpr const rvv_op_info i_none_size_void_ops
    = {i_ops,				/* Types */
       OP_TYPE_none,			/* Suffix */
       rvv_arg_type_info (RVV_BASE_size), /* Return type */
*************** static CONSTEXPR const rvv_op_info i_non
*** 1300,1306 ****
  
  /* A static operand information for size_t func (size_t) function registration.
   */
! static CONSTEXPR const rvv_op_info i_none_size_size_ops
    = {i_ops,				/* Types */
       OP_TYPE_none,			/* Suffix */
       rvv_arg_type_info (RVV_BASE_size), /* Return type */
--- 1300,1306 ----
  
  /* A static operand information for size_t func (size_t) function registration.
   */
! static constexpr const rvv_op_info i_none_size_size_ops
    = {i_ops,				/* Types */
       OP_TYPE_none,			/* Suffix */
       rvv_arg_type_info (RVV_BASE_size), /* Return type */
*************** static CONSTEXPR const rvv_op_info i_non
*** 1308,1314 ****
  
  /* A static operand information for vector_type func () function registration.
   */
! static CONSTEXPR const rvv_op_info all_none_void_ops
    = {all_ops,				  /* Types */
       OP_TYPE_none,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 1308,1314 ----
  
  /* A static operand information for vector_type func () function registration.
   */
! static constexpr const rvv_op_info all_none_void_ops
    = {all_ops,				  /* Types */
       OP_TYPE_none,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info all_n
*** 1316,1322 ****
  
  /* A static operand information for vector_type func (const scalar_type *)
   * function registration. */
! static CONSTEXPR const rvv_op_info all_v_scalar_const_ptr_ops
    = {all_ops,				  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 1316,1322 ----
  
  /* A static operand information for vector_type func (const scalar_type *)
   * function registration. */
! static constexpr const rvv_op_info all_v_scalar_const_ptr_ops
    = {all_ops,				  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info all_v
*** 1324,1330 ****
  
  /* A static operand information for vector_type func (const scalar_type *)
   * function registration. */
! static CONSTEXPR const rvv_op_info all_v_scalar_const_ptr_size_ptr_ops
    = {all_ops,				  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 1324,1330 ----
  
  /* A static operand information for vector_type func (const scalar_type *)
   * function registration. */
! static constexpr const rvv_op_info all_v_scalar_const_ptr_size_ptr_ops
    = {all_ops,				  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info all_v
*** 1332,1338 ****
  
  /* A static operand information for void func (scalar_type *, vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info all_v_scalar_ptr_ops
    = {all_ops,				/* Types */
       OP_TYPE_v,				/* Suffix */
       rvv_arg_type_info (RVV_BASE_void), /* Return type */
--- 1332,1338 ----
  
  /* A static operand information for void func (scalar_type *, vector_type)
   * function registration. */
! static constexpr const rvv_op_info all_v_scalar_ptr_ops
    = {all_ops,				/* Types */
       OP_TYPE_v,				/* Suffix */
       rvv_arg_type_info (RVV_BASE_void), /* Return type */
*************** static CONSTEXPR const rvv_op_info all_v
*** 1340,1346 ****
  
  /* A static operand information for vector_type func (const scalar_type *)
   * function registration. */
! static CONSTEXPR const rvv_op_info b_v_scalar_const_ptr_ops
    = {b_ops,				  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 1340,1346 ----
  
  /* A static operand information for vector_type func (const scalar_type *)
   * function registration. */
! static constexpr const rvv_op_info b_v_scalar_const_ptr_ops
    = {b_ops,				  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info b_v_s
*** 1348,1354 ****
  
  /* A static operand information for void func (scalar_type *, vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info b_v_scalar_ptr_ops
    = {b_ops,				/* Types */
       OP_TYPE_v,				/* Suffix */
       rvv_arg_type_info (RVV_BASE_void), /* Return type */
--- 1348,1354 ----
  
  /* A static operand information for void func (scalar_type *, vector_type)
   * function registration. */
! static constexpr const rvv_op_info b_v_scalar_ptr_ops
    = {b_ops,				/* Types */
       OP_TYPE_v,				/* Suffix */
       rvv_arg_type_info (RVV_BASE_void), /* Return type */
*************** static CONSTEXPR const rvv_op_info b_v_s
*** 1356,1362 ****
  
  /* A static operand information for vector_type func (vector_type, vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info b_mmm_ops
    = {b_ops,				  /* Types */
       OP_TYPE_mm,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 1356,1362 ----
  
  /* A static operand information for vector_type func (vector_type, vector_type)
   * function registration. */
! static constexpr const rvv_op_info b_mmm_ops
    = {b_ops,				  /* Types */
       OP_TYPE_mm,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info b_mmm
*** 1364,1370 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info b_mm_ops
    = {b_ops,				  /* Types */
       OP_TYPE_m,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 1364,1370 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info b_mm_ops
    = {b_ops,				  /* Types */
       OP_TYPE_m,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info b_mm_
*** 1372,1378 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info u_vm_ops
    = {u_ops,				  /* Types */
       OP_TYPE_m,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 1372,1378 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info u_vm_ops
    = {u_ops,				  /* Types */
       OP_TYPE_m,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info u_vm_
*** 1380,1386 ****
  
  /* A static operand information for vector_type func ()
   * function registration. */
! static CONSTEXPR const rvv_op_info b_m_ops
    = {b_ops,				  /* Types */
       OP_TYPE_m,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 1380,1386 ----
  
  /* A static operand information for vector_type func ()
   * function registration. */
! static constexpr const rvv_op_info b_m_ops
    = {b_ops,				  /* Types */
       OP_TYPE_m,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info b_m_o
*** 1388,1394 ****
  
  /* A static operand information for vector_type func ()
   * function registration. */
! static CONSTEXPR const rvv_op_info u_v_ops
    = {u_ops,				  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 1388,1394 ----
  
  /* A static operand information for vector_type func ()
   * function registration. */
! static constexpr const rvv_op_info u_v_ops
    = {u_ops,				  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info u_v_o
*** 1396,1402 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info u_vv_ops
    = {u_ops,					/* Types */
       OP_TYPE_v,					/* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 1396,1402 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info u_vv_ops
    = {u_ops,					/* Types */
       OP_TYPE_v,					/* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info u_vv_
*** 1404,1410 ****
  
  /* A static operand information for unsigned long func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info b_ulong_m_ops
    = {b_ops,					 /* Types */
       OP_TYPE_m,					 /* Suffix */
       rvv_arg_type_info (RVV_BASE_unsigned_long), /* Return type */
--- 1404,1410 ----
  
  /* A static operand information for unsigned long func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info b_ulong_m_ops
    = {b_ops,					 /* Types */
       OP_TYPE_m,					 /* Suffix */
       rvv_arg_type_info (RVV_BASE_unsigned_long), /* Return type */
*************** static CONSTEXPR const rvv_op_info b_ulo
*** 1412,1418 ****
  
  /* A static operand information for long func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info b_long_m_ops
    = {b_ops,				/* Types */
       OP_TYPE_m,				/* Suffix */
       rvv_arg_type_info (RVV_BASE_long), /* Return type */
--- 1412,1418 ----
  
  /* A static operand information for long func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info b_long_m_ops
    = {b_ops,				/* Types */
       OP_TYPE_m,				/* Suffix */
       rvv_arg_type_info (RVV_BASE_long), /* Return type */
*************** static CONSTEXPR const rvv_op_info b_lon
*** 1420,1426 ****
  
  /* A static operand information for vector_type func (const scalar_type *,
   * ptrdiff_t) function registration. */
! static CONSTEXPR const rvv_op_info all_v_scalar_const_ptr_ptrdiff_ops
    = {all_ops,				  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 1420,1426 ----
  
  /* A static operand information for vector_type func (const scalar_type *,
   * ptrdiff_t) function registration. */
! static constexpr const rvv_op_info all_v_scalar_const_ptr_ptrdiff_ops
    = {all_ops,				  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info all_v
*** 1428,1434 ****
  
  /* A static operand information for vector_type func (const scalar_type *,
   * eew8_index_type) function registration. */
! static CONSTEXPR const rvv_op_info all_v_scalar_const_ptr_eew8_index_ops
    = {all_ops,				  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 1428,1434 ----
  
  /* A static operand information for vector_type func (const scalar_type *,
   * eew8_index_type) function registration. */
! static constexpr const rvv_op_info all_v_scalar_const_ptr_eew8_index_ops
    = {all_ops,				  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info all_v
*** 1436,1442 ****
  
  /* A static operand information for vector_type func (const scalar_type *,
   * eew16_index_type) function registration. */
! static CONSTEXPR const rvv_op_info all_v_scalar_const_ptr_eew16_index_ops
    = {all_ops,				  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 1436,1442 ----
  
  /* A static operand information for vector_type func (const scalar_type *,
   * eew16_index_type) function registration. */
! static constexpr const rvv_op_info all_v_scalar_const_ptr_eew16_index_ops
    = {all_ops,				  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info all_v
*** 1444,1450 ****
  
  /* A static operand information for vector_type func (const scalar_type *,
   * eew32_index_type) function registration. */
! static CONSTEXPR const rvv_op_info all_v_scalar_const_ptr_eew32_index_ops
    = {all_ops,				  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 1444,1450 ----
  
  /* A static operand information for vector_type func (const scalar_type *,
   * eew32_index_type) function registration. */
! static constexpr const rvv_op_info all_v_scalar_const_ptr_eew32_index_ops
    = {all_ops,				  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info all_v
*** 1452,1458 ****
  
  /* A static operand information for vector_type func (const scalar_type *,
   * eew64_index_type) function registration. */
! static CONSTEXPR const rvv_op_info all_v_scalar_const_ptr_eew64_index_ops
    = {all_ops,				  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 1452,1458 ----
  
  /* A static operand information for vector_type func (const scalar_type *,
   * eew64_index_type) function registration. */
! static constexpr const rvv_op_info all_v_scalar_const_ptr_eew64_index_ops
    = {all_ops,				  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info all_v
*** 1460,1466 ****
  
  /* A static operand information for void func (scalar_type *, ptrdiff_t,
   * vector_type) function registration. */
! static CONSTEXPR const rvv_op_info all_v_scalar_ptr_ptrdiff_ops
    = {all_ops,				/* Types */
       OP_TYPE_v,				/* Suffix */
       rvv_arg_type_info (RVV_BASE_void), /* Return type */
--- 1460,1466 ----
  
  /* A static operand information for void func (scalar_type *, ptrdiff_t,
   * vector_type) function registration. */
! static constexpr const rvv_op_info all_v_scalar_ptr_ptrdiff_ops
    = {all_ops,				/* Types */
       OP_TYPE_v,				/* Suffix */
       rvv_arg_type_info (RVV_BASE_void), /* Return type */
*************** static CONSTEXPR const rvv_op_info all_v
*** 1468,1474 ****
  
  /* A static operand information for void func (scalar_type *, eew8_index_type,
   * vector_type) function registration. */
! static CONSTEXPR const rvv_op_info all_v_scalar_ptr_eew8_index_ops
    = {all_ops,				/* Types */
       OP_TYPE_v,				/* Suffix */
       rvv_arg_type_info (RVV_BASE_void), /* Return type */
--- 1468,1474 ----
  
  /* A static operand information for void func (scalar_type *, eew8_index_type,
   * vector_type) function registration. */
! static constexpr const rvv_op_info all_v_scalar_ptr_eew8_index_ops
    = {all_ops,				/* Types */
       OP_TYPE_v,				/* Suffix */
       rvv_arg_type_info (RVV_BASE_void), /* Return type */
*************** static CONSTEXPR const rvv_op_info all_v
*** 1476,1482 ****
  
  /* A static operand information for void func (scalar_type *, eew16_index_type,
   * vector_type) function registration. */
! static CONSTEXPR const rvv_op_info all_v_scalar_ptr_eew16_index_ops
    = {all_ops,				/* Types */
       OP_TYPE_v,				/* Suffix */
       rvv_arg_type_info (RVV_BASE_void), /* Return type */
--- 1476,1482 ----
  
  /* A static operand information for void func (scalar_type *, eew16_index_type,
   * vector_type) function registration. */
! static constexpr const rvv_op_info all_v_scalar_ptr_eew16_index_ops
    = {all_ops,				/* Types */
       OP_TYPE_v,				/* Suffix */
       rvv_arg_type_info (RVV_BASE_void), /* Return type */
*************** static CONSTEXPR const rvv_op_info all_v
*** 1484,1490 ****
  
  /* A static operand information for void func (scalar_type *, eew32_index_type,
   * vector_type) function registration. */
! static CONSTEXPR const rvv_op_info all_v_scalar_ptr_eew32_index_ops
    = {all_ops,				/* Types */
       OP_TYPE_v,				/* Suffix */
       rvv_arg_type_info (RVV_BASE_void), /* Return type */
--- 1484,1490 ----
  
  /* A static operand information for void func (scalar_type *, eew32_index_type,
   * vector_type) function registration. */
! static constexpr const rvv_op_info all_v_scalar_ptr_eew32_index_ops
    = {all_ops,				/* Types */
       OP_TYPE_v,				/* Suffix */
       rvv_arg_type_info (RVV_BASE_void), /* Return type */
*************** static CONSTEXPR const rvv_op_info all_v
*** 1492,1498 ****
  
  /* A static operand information for void func (scalar_type *, eew64_index_type,
   * vector_type) function registration. */
! static CONSTEXPR const rvv_op_info all_v_scalar_ptr_eew64_index_ops
    = {all_ops,				/* Types */
       OP_TYPE_v,				/* Suffix */
       rvv_arg_type_info (RVV_BASE_void), /* Return type */
--- 1492,1498 ----
  
  /* A static operand information for void func (scalar_type *, eew64_index_type,
   * vector_type) function registration. */
! static constexpr const rvv_op_info all_v_scalar_ptr_eew64_index_ops
    = {all_ops,				/* Types */
       OP_TYPE_v,				/* Suffix */
       rvv_arg_type_info (RVV_BASE_void), /* Return type */
*************** static CONSTEXPR const rvv_op_info all_v
*** 1500,1506 ****
  
  /* A static operand information for vector_type func (vector_type, vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info iu_vvv_ops
    = {iu_ops,				/* Types */
       OP_TYPE_vv,			/* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 1500,1506 ----
  
  /* A static operand information for vector_type func (vector_type, vector_type)
   * function registration. */
! static constexpr const rvv_op_info iu_vvv_ops
    = {iu_ops,				/* Types */
       OP_TYPE_vv,			/* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info iu_vv
*** 1508,1514 ****
  
  /* A static operand information for vector_type func (vector_type, vector_type,
   * vector_type) function registration. */
! static CONSTEXPR const rvv_op_info iu_vvvv_ops
    = {iu_ops,				  /* Types */
       OP_TYPE_vv,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 1508,1514 ----
  
  /* A static operand information for vector_type func (vector_type, vector_type,
   * vector_type) function registration. */
! static constexpr const rvv_op_info iu_vvvv_ops
    = {iu_ops,				  /* Types */
       OP_TYPE_vv,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info iu_vv
*** 1516,1522 ****
  
  /* A static operand information for vector_type func (vector_type, scalar_type,
   * vector_type) function registration. */
! static CONSTEXPR const rvv_op_info iu_vvxv_ops
    = {iu_ops,				  /* Types */
       OP_TYPE_vx,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 1516,1522 ----
  
  /* A static operand information for vector_type func (vector_type, scalar_type,
   * vector_type) function registration. */
! static constexpr const rvv_op_info iu_vvxv_ops
    = {iu_ops,				  /* Types */
       OP_TYPE_vx,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info iu_vv
*** 1524,1530 ****
  
  /* A static operand information for vector_type func (vector_type, vector_type,
   * vector_type) function registration. */
! static CONSTEXPR const rvv_op_info f_vvvv_ops
    = {f_ops,				  /* Types */
       OP_TYPE_vv,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 1524,1530 ----
  
  /* A static operand information for vector_type func (vector_type, vector_type,
   * vector_type) function registration. */
! static constexpr const rvv_op_info f_vvvv_ops
    = {f_ops,				  /* Types */
       OP_TYPE_vv,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info f_vvv
*** 1532,1538 ****
  
  /* A static operand information for vector_type func (vector_type, scalar_type,
   * vector_type) function registration. */
! static CONSTEXPR const rvv_op_info f_vvfv_ops
    = {f_ops,				  /* Types */
       OP_TYPE_vf,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 1532,1538 ----
  
  /* A static operand information for vector_type func (vector_type, scalar_type,
   * vector_type) function registration. */
! static constexpr const rvv_op_info f_vvfv_ops
    = {f_ops,				  /* Types */
       OP_TYPE_vf,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info f_vvf
*** 1540,1546 ****
  
  /* A static operand information for vector_type func (vector_type, vector_type,
   * mask_type) function registration. */
! static CONSTEXPR const rvv_op_info iu_vvvm_ops
    = {iu_ops,				  /* Types */
       OP_TYPE_vvm,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 1540,1546 ----
  
  /* A static operand information for vector_type func (vector_type, vector_type,
   * mask_type) function registration. */
! static constexpr const rvv_op_info iu_vvvm_ops
    = {iu_ops,				  /* Types */
       OP_TYPE_vvm,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info iu_vv
*** 1548,1554 ****
  
  /* A static operand information for vector_type func (vector_type, vector_type,
   * mask_type) function registration. */
! static CONSTEXPR const rvv_op_info all_vvvm_ops
    = {all_ops,				  /* Types */
       OP_TYPE_vvm,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 1548,1554 ----
  
  /* A static operand information for vector_type func (vector_type, vector_type,
   * mask_type) function registration. */
! static constexpr const rvv_op_info all_vvvm_ops
    = {all_ops,				  /* Types */
       OP_TYPE_vvm,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info all_v
*** 1556,1562 ****
  
  /* A static operand information for vector_type func (vector_type, vector_type,
   * mask_type) function registration. */
! static CONSTEXPR const rvv_op_info all_vvm_ops
    = {all_ops,				  /* Types */
       OP_TYPE_vm,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 1556,1562 ----
  
  /* A static operand information for vector_type func (vector_type, vector_type,
   * mask_type) function registration. */
! static constexpr const rvv_op_info all_vvm_ops
    = {all_ops,				  /* Types */
       OP_TYPE_vm,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info all_v
*** 1564,1570 ****
  
  /* A static operand information for vector_type func (vector_type, scalar_type,
   * mask_type) function registration. */
! static CONSTEXPR const rvv_op_info iu_vvxm_ops
    = {iu_ops,				  /* Types */
       OP_TYPE_vxm,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 1564,1570 ----
  
  /* A static operand information for vector_type func (vector_type, scalar_type,
   * mask_type) function registration. */
! static constexpr const rvv_op_info iu_vvxm_ops
    = {iu_ops,				  /* Types */
       OP_TYPE_vxm,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info iu_vv
*** 1572,1578 ****
  
  /* A static operand information for vector_type func (vector_type, scalar_type,
   * mask_type) function registration. */
! static CONSTEXPR const rvv_op_info f_vvfm_ops
    = {f_ops,				  /* Types */
       OP_TYPE_vfm,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 1572,1578 ----
  
  /* A static operand information for vector_type func (vector_type, scalar_type,
   * mask_type) function registration. */
! static constexpr const rvv_op_info f_vvfm_ops
    = {f_ops,				  /* Types */
       OP_TYPE_vfm,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info f_vvf
*** 1580,1586 ****
  
  /* A static operand information for mask_type func (vector_type, vector_type,
   * mask_type) function registration. */
! static CONSTEXPR const rvv_op_info iu_mvvm_ops
    = {iu_ops,				  /* Types */
       OP_TYPE_vvm,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_mask), /* Return type */
--- 1580,1586 ----
  
  /* A static operand information for mask_type func (vector_type, vector_type,
   * mask_type) function registration. */
! static constexpr const rvv_op_info iu_mvvm_ops
    = {iu_ops,				  /* Types */
       OP_TYPE_vvm,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_mask), /* Return type */
*************** static CONSTEXPR const rvv_op_info iu_mv
*** 1588,1594 ****
  
  /* A static operand information for mask_type func (vector_type, scalar_type,
   * mask_type) function registration. */
! static CONSTEXPR const rvv_op_info iu_mvxm_ops
    = {iu_ops,				  /* Types */
       OP_TYPE_vxm,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_mask), /* Return type */
--- 1588,1594 ----
  
  /* A static operand information for mask_type func (vector_type, scalar_type,
   * mask_type) function registration. */
! static constexpr const rvv_op_info iu_mvxm_ops
    = {iu_ops,				  /* Types */
       OP_TYPE_vxm,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_mask), /* Return type */
*************** static CONSTEXPR const rvv_op_info iu_mv
*** 1596,1602 ****
  
  /* A static operand information for mask_type func (vector_type, vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info iu_mvv_ops
    = {iu_ops,				/* Types */
       OP_TYPE_vv,			/* Suffix */
       rvv_arg_type_info (RVV_BASE_mask), /* Return type */
--- 1596,1602 ----
  
  /* A static operand information for mask_type func (vector_type, vector_type)
   * function registration. */
! static constexpr const rvv_op_info iu_mvv_ops
    = {iu_ops,				/* Types */
       OP_TYPE_vv,			/* Suffix */
       rvv_arg_type_info (RVV_BASE_mask), /* Return type */
*************** static CONSTEXPR const rvv_op_info iu_mv
*** 1604,1610 ****
  
  /* A static operand information for mask_type func (vector_type, vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info i_mvv_ops
    = {i_ops,				/* Types */
       OP_TYPE_vv,			/* Suffix */
       rvv_arg_type_info (RVV_BASE_mask), /* Return type */
--- 1604,1610 ----
  
  /* A static operand information for mask_type func (vector_type, vector_type)
   * function registration. */
! static constexpr const rvv_op_info i_mvv_ops
    = {i_ops,				/* Types */
       OP_TYPE_vv,			/* Suffix */
       rvv_arg_type_info (RVV_BASE_mask), /* Return type */
*************** static CONSTEXPR const rvv_op_info i_mvv
*** 1612,1618 ****
  
  /* A static operand information for mask_type func (vector_type, vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info u_mvv_ops
    = {u_ops,				/* Types */
       OP_TYPE_vv,			/* Suffix */
       rvv_arg_type_info (RVV_BASE_mask), /* Return type */
--- 1612,1618 ----
  
  /* A static operand information for mask_type func (vector_type, vector_type)
   * function registration. */
! static constexpr const rvv_op_info u_mvv_ops
    = {u_ops,				/* Types */
       OP_TYPE_vv,			/* Suffix */
       rvv_arg_type_info (RVV_BASE_mask), /* Return type */
*************** static CONSTEXPR const rvv_op_info u_mvv
*** 1620,1626 ****
  
  /* A static operand information for mask_type func (vector_type, vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info f_mvv_ops
    = {f_ops,				/* Types */
       OP_TYPE_vv,			/* Suffix */
       rvv_arg_type_info (RVV_BASE_mask), /* Return type */
--- 1620,1626 ----
  
  /* A static operand information for mask_type func (vector_type, vector_type)
   * function registration. */
! static constexpr const rvv_op_info f_mvv_ops
    = {f_ops,				/* Types */
       OP_TYPE_vv,			/* Suffix */
       rvv_arg_type_info (RVV_BASE_mask), /* Return type */
*************** static CONSTEXPR const rvv_op_info f_mvv
*** 1628,1634 ****
  
  /* A static operand information for mask_type func (vector_type, scalar_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info iu_mvx_ops
    = {iu_ops,				/* Types */
       OP_TYPE_vx,			/* Suffix */
       rvv_arg_type_info (RVV_BASE_mask), /* Return type */
--- 1628,1634 ----
  
  /* A static operand information for mask_type func (vector_type, scalar_type)
   * function registration. */
! static constexpr const rvv_op_info iu_mvx_ops
    = {iu_ops,				/* Types */
       OP_TYPE_vx,			/* Suffix */
       rvv_arg_type_info (RVV_BASE_mask), /* Return type */
*************** static CONSTEXPR const rvv_op_info iu_mv
*** 1636,1642 ****
  
  /* A static operand information for mask_type func (vector_type, scalar_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info i_mvx_ops
    = {i_ops,				/* Types */
       OP_TYPE_vx,			/* Suffix */
       rvv_arg_type_info (RVV_BASE_mask), /* Return type */
--- 1636,1642 ----
  
  /* A static operand information for mask_type func (vector_type, scalar_type)
   * function registration. */
! static constexpr const rvv_op_info i_mvx_ops
    = {i_ops,				/* Types */
       OP_TYPE_vx,			/* Suffix */
       rvv_arg_type_info (RVV_BASE_mask), /* Return type */
*************** static CONSTEXPR const rvv_op_info i_mvx
*** 1644,1650 ****
  
  /* A static operand information for mask_type func (vector_type, scalar_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info u_mvx_ops
    = {u_ops,				/* Types */
       OP_TYPE_vx,			/* Suffix */
       rvv_arg_type_info (RVV_BASE_mask), /* Return type */
--- 1644,1650 ----
  
  /* A static operand information for mask_type func (vector_type, scalar_type)
   * function registration. */
! static constexpr const rvv_op_info u_mvx_ops
    = {u_ops,				/* Types */
       OP_TYPE_vx,			/* Suffix */
       rvv_arg_type_info (RVV_BASE_mask), /* Return type */
*************** static CONSTEXPR const rvv_op_info u_mvx
*** 1652,1658 ****
  
  /* A static operand information for mask_type func (vector_type, scalar_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info f_mvf_ops
    = {f_ops,				/* Types */
       OP_TYPE_vf,			/* Suffix */
       rvv_arg_type_info (RVV_BASE_mask), /* Return type */
--- 1652,1658 ----
  
  /* A static operand information for mask_type func (vector_type, scalar_type)
   * function registration. */
! static constexpr const rvv_op_info f_mvf_ops
    = {f_ops,				/* Types */
       OP_TYPE_vf,			/* Suffix */
       rvv_arg_type_info (RVV_BASE_mask), /* Return type */
*************** static CONSTEXPR const rvv_op_info f_mvf
*** 1660,1666 ****
  
  /* A static operand information for vector_type func (vector_type, vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info i_vvv_ops
    = {i_ops,				/* Types */
       OP_TYPE_vv,			/* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 1660,1666 ----
  
  /* A static operand information for vector_type func (vector_type, vector_type)
   * function registration. */
! static constexpr const rvv_op_info i_vvv_ops
    = {i_ops,				/* Types */
       OP_TYPE_vv,			/* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info i_vvv
*** 1668,1674 ****
  
  /* A static operand information for vector_type func (vector_type, vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info u_vvv_ops
    = {u_ops,				/* Types */
       OP_TYPE_vv,			/* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 1668,1674 ----
  
  /* A static operand information for vector_type func (vector_type, vector_type)
   * function registration. */
! static constexpr const rvv_op_info u_vvv_ops
    = {u_ops,				/* Types */
       OP_TYPE_vv,			/* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info u_vvv
*** 1676,1682 ****
  
  /* A static operand information for vector_type func (vector_type, vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info f_vvv_ops
    = {f_ops,				/* Types */
       OP_TYPE_vv,			/* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 1676,1682 ----
  
  /* A static operand information for vector_type func (vector_type, vector_type)
   * function registration. */
! static constexpr const rvv_op_info f_vvv_ops
    = {f_ops,				/* Types */
       OP_TYPE_vv,			/* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info f_vvv
*** 1684,1690 ****
  
  /* A static operand information for vector_type func (vector_type, vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info f_vvf_ops
    = {f_ops,				/* Types */
       OP_TYPE_vf,			/* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 1684,1690 ----
  
  /* A static operand information for vector_type func (vector_type, vector_type)
   * function registration. */
! static constexpr const rvv_op_info f_vvf_ops
    = {f_ops,				/* Types */
       OP_TYPE_vf,			/* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info f_vvf
*** 1692,1698 ****
  
  /* A static operand information for vector_type func (vector_type, vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info full_v_i_vvv_ops
    = {full_v_i_ops,			/* Types */
       OP_TYPE_vv,			/* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 1692,1698 ----
  
  /* A static operand information for vector_type func (vector_type, vector_type)
   * function registration. */
! static constexpr const rvv_op_info full_v_i_vvv_ops
    = {full_v_i_ops,			/* Types */
       OP_TYPE_vv,			/* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info full_
*** 1700,1706 ****
  
  /* A static operand information for vector_type func (vector_type, vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info full_v_u_vvv_ops
    = {full_v_u_ops,			/* Types */
       OP_TYPE_vv,			/* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 1700,1706 ----
  
  /* A static operand information for vector_type func (vector_type, vector_type)
   * function registration. */
! static constexpr const rvv_op_info full_v_u_vvv_ops
    = {full_v_u_ops,			/* Types */
       OP_TYPE_vv,			/* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info full_
*** 1708,1714 ****
  
  /* A static operand information for vector_type func (signed vector_type,
   * unsigned vector_type) function registration. */
! static CONSTEXPR const rvv_op_info full_v_i_su_vvv_ops
    = {full_v_i_ops,			  /* Types */
       OP_TYPE_vv,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 1708,1714 ----
  
  /* A static operand information for vector_type func (signed vector_type,
   * unsigned vector_type) function registration. */
! static constexpr const rvv_op_info full_v_i_su_vvv_ops
    = {full_v_i_ops,			  /* Types */
       OP_TYPE_vv,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info full_
*** 1716,1722 ****
  
  /* A static operand information for vector_type func (vector_type, scalar_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info iu_vvx_ops
    = {iu_ops,				/* Types */
       OP_TYPE_vx,			/* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 1716,1722 ----
  
  /* A static operand information for vector_type func (vector_type, scalar_type)
   * function registration. */
! static constexpr const rvv_op_info iu_vvx_ops
    = {iu_ops,				/* Types */
       OP_TYPE_vx,			/* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info iu_vv
*** 1724,1730 ****
  
  /* A static operand information for vector_type func (vector_type, scalar_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info all_vvx_ops
    = {all_ops,				  /* Types */
       OP_TYPE_vx,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 1724,1730 ----
  
  /* A static operand information for vector_type func (vector_type, scalar_type)
   * function registration. */
! static constexpr const rvv_op_info all_vvx_ops
    = {all_ops,				  /* Types */
       OP_TYPE_vx,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info all_v
*** 1732,1738 ****
  
  /* A static operand information for vector_type func (vector_type, vector_type,
   * scalar_type) function registration. */
! static CONSTEXPR const rvv_op_info all_vvvx_ops
    = {all_ops,				  /* Types */
       OP_TYPE_vx,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 1732,1738 ----
  
  /* A static operand information for vector_type func (vector_type, vector_type,
   * scalar_type) function registration. */
! static constexpr const rvv_op_info all_vvvx_ops
    = {all_ops,				  /* Types */
       OP_TYPE_vx,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info all_v
*** 1740,1746 ****
  
  /* A static operand information for vector_type func (vector_type, scalar_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info i_vvx_ops
    = {i_ops,				/* Types */
       OP_TYPE_vx,			/* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 1740,1746 ----
  
  /* A static operand information for vector_type func (vector_type, scalar_type)
   * function registration. */
! static constexpr const rvv_op_info i_vvx_ops
    = {i_ops,				/* Types */
       OP_TYPE_vx,			/* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info i_vvx
*** 1748,1754 ****
  
  /* A static operand information for vector_type func (vector_type, scalar_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info u_vvx_ops
    = {u_ops,				/* Types */
       OP_TYPE_vx,			/* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 1748,1754 ----
  
  /* A static operand information for vector_type func (vector_type, scalar_type)
   * function registration. */
! static constexpr const rvv_op_info u_vvx_ops
    = {u_ops,				/* Types */
       OP_TYPE_vx,			/* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info u_vvx
*** 1756,1762 ****
  
  /* A static operand information for vector_type func (vector_type, scalar_type)
   * function registration that require full 'V' extension. */
! static CONSTEXPR const rvv_op_info full_v_i_vvx_ops
    = {full_v_i_ops,			  /* Types */
       OP_TYPE_vx,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 1756,1762 ----
  
  /* A static operand information for vector_type func (vector_type, scalar_type)
   * function registration that require full 'V' extension. */
! static constexpr const rvv_op_info full_v_i_vvx_ops
    = {full_v_i_ops,			  /* Types */
       OP_TYPE_vx,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info full_
*** 1764,1770 ****
  
  /* A static operand information for vector_type func (vector_type, scalar_type)
   * function registration that require full 'V' extension. */
! static CONSTEXPR const rvv_op_info full_v_u_vvx_ops
    = {full_v_u_ops,			  /* Types */
       OP_TYPE_vx,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 1764,1770 ----
  
  /* A static operand information for vector_type func (vector_type, scalar_type)
   * function registration that require full 'V' extension. */
! static constexpr const rvv_op_info full_v_u_vvx_ops
    = {full_v_u_ops,			  /* Types */
       OP_TYPE_vx,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info full_
*** 1773,1779 ****
  /* A static operand information for vector_type func (signed vector_type,
   * unsigned scalar_type) function registration that require full 'V' extension.
   */
! static CONSTEXPR const rvv_op_info full_v_i_su_vvx_ops
    = {full_v_i_ops,			  /* Types */
       OP_TYPE_vx,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 1773,1779 ----
  /* A static operand information for vector_type func (signed vector_type,
   * unsigned scalar_type) function registration that require full 'V' extension.
   */
! static constexpr const rvv_op_info full_v_i_su_vvx_ops
    = {full_v_i_ops,			  /* Types */
       OP_TYPE_vx,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info full_
*** 1781,1787 ****
  
  /* A static operand information for vector_type func (vector_type, shift_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info iu_shift_vvv_ops
    = {iu_ops,				/* Types */
       OP_TYPE_vv,			/* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 1781,1787 ----
  
  /* A static operand information for vector_type func (vector_type, shift_type)
   * function registration. */
! static constexpr const rvv_op_info iu_shift_vvv_ops
    = {iu_ops,				/* Types */
       OP_TYPE_vv,			/* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info iu_sh
*** 1789,1795 ****
  
  /* A static operand information for scalar_type func (vector_type, size_t)
   * function registration. */
! static CONSTEXPR const rvv_op_info iu_x_s_u_ops
    = {iu_ops,          /* Types */
       OP_TYPE_vx,        /* Suffix */
       rvv_arg_type_info (RVV_BASE_scalar), /* Return type */
--- 1789,1795 ----
  
  /* A static operand information for scalar_type func (vector_type, size_t)
   * function registration. */
! static constexpr const rvv_op_info iu_x_s_u_ops
    = {iu_ops,          /* Types */
       OP_TYPE_vx,        /* Suffix */
       rvv_arg_type_info (RVV_BASE_scalar), /* Return type */
*************** static CONSTEXPR const rvv_op_info iu_x_
*** 1797,1803 ****
  
  /* A static operand information for vector_type func (vector_type, size_t)
   * function registration. */
! static CONSTEXPR const rvv_op_info iu_shift_vvx_ops
    = {iu_ops,				  /* Types */
       OP_TYPE_vx,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 1797,1803 ----
  
  /* A static operand information for vector_type func (vector_type, size_t)
   * function registration. */
! static constexpr const rvv_op_info iu_shift_vvx_ops
    = {iu_ops,				  /* Types */
       OP_TYPE_vx,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info iu_sh
*** 1805,1811 ****
  
  /* A static operand information for vector_type func (vector_type, shift_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info i_shift_vvv_ops
    = {i_ops,				/* Types */
       OP_TYPE_vv,			/* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 1805,1811 ----
  
  /* A static operand information for vector_type func (vector_type, shift_type)
   * function registration. */
! static constexpr const rvv_op_info i_shift_vvv_ops
    = {i_ops,				/* Types */
       OP_TYPE_vv,			/* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info i_shi
*** 1813,1819 ****
  
  /* A static operand information for vector_type func (vector_type, size_t)
   * function registration. */
! static CONSTEXPR const rvv_op_info i_shift_vvx_ops
    = {i_ops,				  /* Types */
       OP_TYPE_vx,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 1813,1819 ----
  
  /* A static operand information for vector_type func (vector_type, size_t)
   * function registration. */
! static constexpr const rvv_op_info i_shift_vvx_ops
    = {i_ops,				  /* Types */
       OP_TYPE_vx,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info i_shi
*** 1821,1827 ****
  
  /* A static operand information for vector_type func (vector_type, shift_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info u_shift_vvv_ops
    = {u_ops,				/* Types */
       OP_TYPE_vv,			/* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 1821,1827 ----
  
  /* A static operand information for vector_type func (vector_type, shift_type)
   * function registration. */
! static constexpr const rvv_op_info u_shift_vvv_ops
    = {u_ops,				/* Types */
       OP_TYPE_vv,			/* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info u_shi
*** 1829,1835 ****
  
  /* A static operand information for vector_type func (vector_type, size_t)
   * function registration. */
! static CONSTEXPR const rvv_op_info u_shift_vvx_ops
    = {u_ops,				  /* Types */
       OP_TYPE_vx,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 1829,1835 ----
  
  /* A static operand information for vector_type func (vector_type, size_t)
   * function registration. */
! static constexpr const rvv_op_info u_shift_vvx_ops
    = {u_ops,				  /* Types */
       OP_TYPE_vx,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info u_shi
*** 1837,1843 ****
  
  /* A static operand information for vector_type func (vector_type, index_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info all_gather_vvv_ops
    = {all_ops,				  /* Types */
       OP_TYPE_vv,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 1837,1843 ----
  
  /* A static operand information for vector_type func (vector_type, index_type)
   * function registration. */
! static constexpr const rvv_op_info all_gather_vvv_ops
    = {all_ops,				  /* Types */
       OP_TYPE_vv,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info all_g
*** 1845,1851 ****
  
  /* A static operand information for vector_type func (vector_type, size_t)
   * function registration. */
! static CONSTEXPR const rvv_op_info all_gather_vvx_ops
    = {all_ops,				  /* Types */
       OP_TYPE_vx,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 1845,1851 ----
  
  /* A static operand information for vector_type func (vector_type, size_t)
   * function registration. */
! static constexpr const rvv_op_info all_gather_vvx_ops
    = {all_ops,				  /* Types */
       OP_TYPE_vx,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info all_g
*** 1853,1859 ****
  
  /* A static operand information for vector_type func (vector_type, index_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info all_gatherei16_vvv_ops
    = {ei16_ops,				  /* Types */
       OP_TYPE_vv,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 1853,1859 ----
  
  /* A static operand information for vector_type func (vector_type, index_type)
   * function registration. */
! static constexpr const rvv_op_info all_gatherei16_vvv_ops
    = {ei16_ops,				  /* Types */
       OP_TYPE_vv,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info all_g
*** 1861,1867 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info iu_v_ops
    = {iu_ops,			/* Types */
       OP_TYPE_v,			/* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 1861,1867 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info iu_v_ops
    = {iu_ops,			/* Types */
       OP_TYPE_v,			/* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info iu_v_
*** 1869,1875 ****
  
  /* A static operand information for scalar_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info iu_x_s_ops
    = {iu_ops,				  /* Types */
       OP_TYPE_s,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_scalar), /* Return type */
--- 1869,1875 ----
  
  /* A static operand information for scalar_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info iu_x_s_ops
    = {iu_ops,				  /* Types */
       OP_TYPE_s,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_scalar), /* Return type */
*************** static CONSTEXPR const rvv_op_info iu_x_
*** 1877,1883 ****
  
  /* A static operand information for scalar_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info f_f_s_ops
    = {f_ops,				  /* Types */
       OP_TYPE_s,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_scalar), /* Return type */
--- 1877,1883 ----
  
  /* A static operand information for scalar_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info f_f_s_ops
    = {f_ops,				  /* Types */
       OP_TYPE_s,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_scalar), /* Return type */
*************** static CONSTEXPR const rvv_op_info f_f_s
*** 1885,1891 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info iu_vs_ops
    = {iu_ops,					/* Types */
       OP_TYPE_vs,				/* Suffix */
       rvv_arg_type_info (RVV_BASE_lmul1_vector), /* Return type */
--- 1885,1891 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info iu_vs_ops
    = {iu_ops,					/* Types */
       OP_TYPE_vs,				/* Suffix */
       rvv_arg_type_info (RVV_BASE_lmul1_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info iu_vs
*** 1893,1899 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info f_vs_ops
    = {f_ops,					/* Types */
       OP_TYPE_vs,				/* Suffix */
       rvv_arg_type_info (RVV_BASE_lmul1_vector), /* Return type */
--- 1893,1899 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info f_vs_ops
    = {f_ops,					/* Types */
       OP_TYPE_vs,				/* Suffix */
       rvv_arg_type_info (RVV_BASE_lmul1_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info f_vs_
*** 1901,1907 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info wi_vs_ops
    = {wi_ops,					      /* Types */
       OP_TYPE_vs,				      /* Suffix */
       rvv_arg_type_info (RVV_BASE_widen_lmul1_vector), /* Return type */
--- 1901,1907 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info wi_vs_ops
    = {wi_ops,					      /* Types */
       OP_TYPE_vs,				      /* Suffix */
       rvv_arg_type_info (RVV_BASE_widen_lmul1_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info wi_vs
*** 1909,1915 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info wu_vs_ops
    = {wu_ops,					      /* Types */
       OP_TYPE_vs,				      /* Suffix */
       rvv_arg_type_info (RVV_BASE_widen_lmul1_vector), /* Return type */
--- 1909,1915 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info wu_vs_ops
    = {wu_ops,					      /* Types */
       OP_TYPE_vs,				      /* Suffix */
       rvv_arg_type_info (RVV_BASE_widen_lmul1_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info wu_vs
*** 1917,1923 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info wf_vs_ops
    = {wf_ops,					      /* Types */
       OP_TYPE_vs,				      /* Suffix */
       rvv_arg_type_info (RVV_BASE_widen_lmul1_vector), /* Return type */
--- 1917,1923 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info wf_vs_ops
    = {wf_ops,					      /* Types */
       OP_TYPE_vs,				      /* Suffix */
       rvv_arg_type_info (RVV_BASE_widen_lmul1_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info wf_vs
*** 1925,1931 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info f_v_ops
    = {f_ops,				  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 1925,1931 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info f_v_ops
    = {f_ops,				  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info f_v_o
*** 1933,1939 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info f_to_u_v_ops
    = {convert_u_ops,			  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 1933,1939 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info f_to_u_v_ops
    = {convert_u_ops,			  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info f_to_
*** 1941,1947 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info f_to_i_f_v_ops
    = {convert_i_ops,			  /* Types */
       OP_TYPE_f_v,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 1941,1947 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info f_to_i_f_v_ops
    = {convert_i_ops,			  /* Types */
       OP_TYPE_f_v,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info f_to_
*** 1949,1955 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info f_to_wi_f_v_ops
    = {wconvert_i_ops,			  /* Types */
       OP_TYPE_f_v,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 1949,1955 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info f_to_wi_f_v_ops
    = {wconvert_i_ops,			  /* Types */
       OP_TYPE_f_v,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info f_to_
*** 1957,1963 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info f_to_ni_f_w_ops
    = {f_ops,						      /* Types */
       OP_TYPE_f_w,					      /* Suffix */
       rvv_arg_type_info (RVV_BASE_double_trunc_signed_vector), /* Return type */
--- 1957,1963 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info f_to_ni_f_w_ops
    = {f_ops,						      /* Types */
       OP_TYPE_f_w,					      /* Suffix */
       rvv_arg_type_info (RVV_BASE_double_trunc_signed_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info f_to_
*** 1965,1971 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info f_to_nu_f_w_ops
    = {f_ops,	  /* Types */
       OP_TYPE_f_w, /* Suffix */
       rvv_arg_type_info (
--- 1965,1971 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info f_to_nu_f_w_ops
    = {f_ops,	  /* Types */
       OP_TYPE_f_w, /* Suffix */
       rvv_arg_type_info (
*************** static CONSTEXPR const rvv_op_info f_to_
*** 1974,1980 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info i_to_f_x_v_ops
    = {f_ops,				  /* Types */
       OP_TYPE_x_v,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 1974,1980 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info i_to_f_x_v_ops
    = {f_ops,				  /* Types */
       OP_TYPE_x_v,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info i_to_
*** 1982,1988 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info u_to_f_xu_v_ops
    = {f_ops,				  /* Types */
       OP_TYPE_xu_v,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 1982,1988 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info u_to_f_xu_v_ops
    = {f_ops,				  /* Types */
       OP_TYPE_xu_v,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info u_to_
*** 1990,1996 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info i_to_wf_x_v_ops
    = {f_ops,				  /* Types */
       OP_TYPE_x_v,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 1990,1996 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info i_to_wf_x_v_ops
    = {f_ops,				  /* Types */
       OP_TYPE_x_v,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info i_to_
*** 1998,2004 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info u_to_wf_xu_v_ops
    = {f_ops,				  /* Types */
       OP_TYPE_xu_v,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 1998,2004 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info u_to_wf_xu_v_ops
    = {f_ops,				  /* Types */
       OP_TYPE_xu_v,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info u_to_
*** 2006,2012 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info i_to_nf_x_w_ops
    = {wconvert_i_ops,					     /* Types */
       OP_TYPE_x_w,					     /* Suffix */
       rvv_arg_type_info (RVV_BASE_double_trunc_float_vector), /* Return type */
--- 2006,2012 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info i_to_nf_x_w_ops
    = {wconvert_i_ops,					     /* Types */
       OP_TYPE_x_w,					     /* Suffix */
       rvv_arg_type_info (RVV_BASE_double_trunc_float_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info i_to_
*** 2014,2020 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info u_to_nf_xu_w_ops
    = {wconvert_u_ops,					     /* Types */
       OP_TYPE_xu_w,					     /* Suffix */
       rvv_arg_type_info (RVV_BASE_double_trunc_float_vector), /* Return type */
--- 2014,2020 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info u_to_nf_xu_w_ops
    = {wconvert_u_ops,					     /* Types */
       OP_TYPE_xu_w,					     /* Suffix */
       rvv_arg_type_info (RVV_BASE_double_trunc_float_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info u_to_
*** 2022,2028 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info f_to_u_f_v_ops
    = {convert_u_ops,			  /* Types */
       OP_TYPE_f_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2022,2028 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info f_to_u_f_v_ops
    = {convert_u_ops,			  /* Types */
       OP_TYPE_f_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info f_to_
*** 2030,2036 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info f_to_wu_f_v_ops
    = {wconvert_u_ops,			  /* Types */
       OP_TYPE_f_v,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2030,2036 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info f_to_wu_f_v_ops
    = {wconvert_u_ops,			  /* Types */
       OP_TYPE_f_v,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info f_to_
*** 2038,2044 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info f_to_wf_f_v_ops
    = {f_ops,				  /* Types */
       OP_TYPE_f_v,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2038,2044 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info f_to_wf_f_v_ops
    = {f_ops,				  /* Types */
       OP_TYPE_f_v,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info f_to_
*** 2046,2052 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info f_to_nf_f_w_ops
    = {wconvert_f_ops,					     /* Types */
       OP_TYPE_f_w,					     /* Suffix */
       rvv_arg_type_info (RVV_BASE_double_trunc_float_vector), /* Return type */
--- 2046,2052 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info f_to_nf_f_w_ops
    = {wconvert_f_ops,					     /* Types */
       OP_TYPE_f_w,					     /* Suffix */
       rvv_arg_type_info (RVV_BASE_double_trunc_float_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info f_to_
*** 2054,2060 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info f32_to_bf16_f_w_ops
    = {f32_ops,						      /* Types */
       OP_TYPE_f_w,					      /* Suffix */
       rvv_arg_type_info (RVV_BASE_double_trunc_bfloat_vector), /* Return type */
--- 2054,2060 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info f32_to_bf16_f_w_ops
    = {f32_ops,						      /* Types */
       OP_TYPE_f_w,					      /* Suffix */
       rvv_arg_type_info (RVV_BASE_double_trunc_bfloat_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info f32_t
*** 2062,2068 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info bf16_to_f32_f_v_ops
    = {f32_ops,				  /* Types */
       OP_TYPE_f_v,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2062,2068 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info bf16_to_f32_f_v_ops
    = {f32_ops,				  /* Types */
       OP_TYPE_f_v,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info bf16_
*** 2070,2076 ****
  
  /* A static operand information for vector_type func (vector_type, double demote
   * type, double demote type) function registration. */
! static CONSTEXPR const rvv_op_info f32_wwvv_ops
    = {f32_ops,				  /* Types */
       OP_TYPE_vv,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2070,2076 ----
  
  /* A static operand information for vector_type func (vector_type, double demote
   * type, double demote type) function registration. */
! static constexpr const rvv_op_info f32_wwvv_ops
    = {f32_ops,				  /* Types */
       OP_TYPE_vv,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info f32_w
*** 2078,2084 ****
  
  /* A static operand information for vector_type func (vector_type, double demote
   * scalar_type, double demote type) function registration. */
! static CONSTEXPR const rvv_op_info f32_wwfv_ops
    = {f32_ops,				  /* Types */
       OP_TYPE_vf,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2078,2084 ----
  
  /* A static operand information for vector_type func (vector_type, double demote
   * scalar_type, double demote type) function registration. */
! static constexpr const rvv_op_info f32_wwfv_ops
    = {f32_ops,				  /* Types */
       OP_TYPE_vf,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info f32_w
*** 2086,2092 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info all_v_ops
    = {all_ops,			/* Types */
       OP_TYPE_v,			/* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2086,2092 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info all_v_ops
    = {all_ops,			/* Types */
       OP_TYPE_v,			/* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info all_v
*** 2094,2100 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info i_v_u_ops
    = {i_ops,					/* Types */
       OP_TYPE_v,					/* Suffix */
       rvv_arg_type_info (RVV_BASE_unsigned_vector), /* Return type */
--- 2094,2100 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info i_v_u_ops
    = {i_ops,					/* Types */
       OP_TYPE_v,					/* Suffix */
       rvv_arg_type_info (RVV_BASE_unsigned_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info i_v_u
*** 2102,2108 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info u_v_i_ops
    = {u_ops,					/* Types */
       OP_TYPE_v,					/* Suffix */
       rvv_arg_type_info (RVV_BASE_signed_vector), /* Return type */
--- 2102,2108 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info u_v_i_ops
    = {u_ops,					/* Types */
       OP_TYPE_v,					/* Suffix */
       rvv_arg_type_info (RVV_BASE_signed_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info u_v_i
*** 2110,2116 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info iu_v_eew8_interpret_ops
    = {eew8_interpret_ops,			  /* Types */
       OP_TYPE_v,					  /* Suffix */
       rvv_arg_type_info (RVV_BASE_eew8_interpret), /* Return type */
--- 2110,2116 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info iu_v_eew8_interpret_ops
    = {eew8_interpret_ops,			  /* Types */
       OP_TYPE_v,					  /* Suffix */
       rvv_arg_type_info (RVV_BASE_eew8_interpret), /* Return type */
*************** static CONSTEXPR const rvv_op_info iu_v_
*** 2118,2124 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info iu_v_eew16_interpret_ops
    = {eew16_interpret_ops,			   /* Types */
       OP_TYPE_v,					   /* Suffix */
       rvv_arg_type_info (RVV_BASE_eew16_interpret), /* Return type */
--- 2118,2124 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info iu_v_eew16_interpret_ops
    = {eew16_interpret_ops,			   /* Types */
       OP_TYPE_v,					   /* Suffix */
       rvv_arg_type_info (RVV_BASE_eew16_interpret), /* Return type */
*************** static CONSTEXPR const rvv_op_info iu_v_
*** 2126,2132 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info iu_v_eew32_interpret_ops
    = {eew32_interpret_ops,			   /* Types */
       OP_TYPE_v,					   /* Suffix */
       rvv_arg_type_info (RVV_BASE_eew32_interpret), /* Return type */
--- 2126,2132 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info iu_v_eew32_interpret_ops
    = {eew32_interpret_ops,			   /* Types */
       OP_TYPE_v,					   /* Suffix */
       rvv_arg_type_info (RVV_BASE_eew32_interpret), /* Return type */
*************** static CONSTEXPR const rvv_op_info iu_v_
*** 2134,2140 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info iu_v_eew64_interpret_ops
    = {eew64_interpret_ops,			   /* Types */
       OP_TYPE_v,					   /* Suffix */
       rvv_arg_type_info (RVV_BASE_eew64_interpret), /* Return type */
--- 2134,2140 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info iu_v_eew64_interpret_ops
    = {eew64_interpret_ops,			   /* Types */
       OP_TYPE_v,					   /* Suffix */
       rvv_arg_type_info (RVV_BASE_eew64_interpret), /* Return type */
*************** static CONSTEXPR const rvv_op_info iu_v_
*** 2142,2148 ****
  
  /* A static operand information for vbool1_t func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info iu_v_bool1_interpret_ops
    = {bool1_interpret_ops,			   /* Types */
       OP_TYPE_v,					   /* Suffix */
       rvv_arg_type_info (RVV_BASE_bool1_interpret), /* Return type */
--- 2142,2148 ----
  
  /* A static operand information for vbool1_t func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info iu_v_bool1_interpret_ops
    = {bool1_interpret_ops,			   /* Types */
       OP_TYPE_v,					   /* Suffix */
       rvv_arg_type_info (RVV_BASE_bool1_interpret), /* Return type */
*************** static CONSTEXPR const rvv_op_info iu_v_
*** 2150,2156 ****
  
  /* A static operand information for vbool2_t func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info iu_v_bool2_interpret_ops
    = {bool2_interpret_ops,			   /* Types */
       OP_TYPE_v,					   /* Suffix */
       rvv_arg_type_info (RVV_BASE_bool2_interpret), /* Return type */
--- 2150,2156 ----
  
  /* A static operand information for vbool2_t func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info iu_v_bool2_interpret_ops
    = {bool2_interpret_ops,			   /* Types */
       OP_TYPE_v,					   /* Suffix */
       rvv_arg_type_info (RVV_BASE_bool2_interpret), /* Return type */
*************** static CONSTEXPR const rvv_op_info iu_v_
*** 2158,2164 ****
  
  /* A static operand information for vbool4_t func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info iu_v_bool4_interpret_ops
    = {bool4_interpret_ops,			   /* Types */
       OP_TYPE_v,					   /* Suffix */
       rvv_arg_type_info (RVV_BASE_bool4_interpret), /* Return type */
--- 2158,2164 ----
  
  /* A static operand information for vbool4_t func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info iu_v_bool4_interpret_ops
    = {bool4_interpret_ops,			   /* Types */
       OP_TYPE_v,					   /* Suffix */
       rvv_arg_type_info (RVV_BASE_bool4_interpret), /* Return type */
*************** static CONSTEXPR const rvv_op_info iu_v_
*** 2166,2172 ****
  
  /* A static operand information for vbool8_t func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info iu_v_bool8_interpret_ops
    = {bool8_interpret_ops,			   /* Types */
       OP_TYPE_v,					   /* Suffix */
       rvv_arg_type_info (RVV_BASE_bool8_interpret), /* Return type */
--- 2166,2172 ----
  
  /* A static operand information for vbool8_t func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info iu_v_bool8_interpret_ops
    = {bool8_interpret_ops,			   /* Types */
       OP_TYPE_v,					   /* Suffix */
       rvv_arg_type_info (RVV_BASE_bool8_interpret), /* Return type */
*************** static CONSTEXPR const rvv_op_info iu_v_
*** 2174,2180 ****
  
  /* A static operand information for vbool16_t func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info iu_v_bool16_interpret_ops
    = {bool16_interpret_ops,			    /* Types */
       OP_TYPE_v,					    /* Suffix */
       rvv_arg_type_info (RVV_BASE_bool16_interpret), /* Return type */
--- 2174,2180 ----
  
  /* A static operand information for vbool16_t func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info iu_v_bool16_interpret_ops
    = {bool16_interpret_ops,			    /* Types */
       OP_TYPE_v,					    /* Suffix */
       rvv_arg_type_info (RVV_BASE_bool16_interpret), /* Return type */
*************** static CONSTEXPR const rvv_op_info iu_v_
*** 2182,2188 ****
  
  /* A static operand information for vbool32_t func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info iu_v_bool32_interpret_ops
    = {bool32_interpret_ops,			    /* Types */
       OP_TYPE_v,					    /* Suffix */
       rvv_arg_type_info (RVV_BASE_bool32_interpret), /* Return type */
--- 2182,2188 ----
  
  /* A static operand information for vbool32_t func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info iu_v_bool32_interpret_ops
    = {bool32_interpret_ops,			    /* Types */
       OP_TYPE_v,					    /* Suffix */
       rvv_arg_type_info (RVV_BASE_bool32_interpret), /* Return type */
*************** static CONSTEXPR const rvv_op_info iu_v_
*** 2190,2196 ****
  
  /* A static operand information for vbool64_t func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info iu_v_bool64_interpret_ops
    = {bool64_interpret_ops,			    /* Types */
       OP_TYPE_v,					    /* Suffix */
       rvv_arg_type_info (RVV_BASE_bool64_interpret), /* Return type */
--- 2190,2196 ----
  
  /* A static operand information for vbool64_t func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info iu_v_bool64_interpret_ops
    = {bool64_interpret_ops,			    /* Types */
       OP_TYPE_v,					    /* Suffix */
       rvv_arg_type_info (RVV_BASE_bool64_interpret), /* Return type */
*************** static CONSTEXPR const rvv_op_info iu_v_
*** 2198,2204 ****
  
  /* A static operand information for vint8_t func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info b_v_signed_eew8_lmul1_interpret_ops
    = {signed_eew8_lmul1_interpret_ops,			      /* Types */
       OP_TYPE_v,						      /* Suffix */
       rvv_arg_type_info (RVV_BASE_signed_eew8_lmul1_interpret),/* Return type */
--- 2198,2204 ----
  
  /* A static operand information for vint8_t func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info b_v_signed_eew8_lmul1_interpret_ops
    = {signed_eew8_lmul1_interpret_ops,			      /* Types */
       OP_TYPE_v,						      /* Suffix */
       rvv_arg_type_info (RVV_BASE_signed_eew8_lmul1_interpret),/* Return type */
*************** static CONSTEXPR const rvv_op_info b_v_s
*** 2206,2212 ****
  
  /* A static operand information for vint16_t func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info b_v_signed_eew16_lmul1_interpret_ops
    = {signed_eew16_lmul1_interpret_ops,			       /* Types */
       OP_TYPE_v,						       /* Suffix */
       rvv_arg_type_info (RVV_BASE_signed_eew16_lmul1_interpret),/* Return type */
--- 2206,2212 ----
  
  /* A static operand information for vint16_t func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info b_v_signed_eew16_lmul1_interpret_ops
    = {signed_eew16_lmul1_interpret_ops,			       /* Types */
       OP_TYPE_v,						       /* Suffix */
       rvv_arg_type_info (RVV_BASE_signed_eew16_lmul1_interpret),/* Return type */
*************** static CONSTEXPR const rvv_op_info b_v_s
*** 2214,2220 ****
  
  /* A static operand information for vint32_t func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info b_v_signed_eew32_lmul1_interpret_ops
    = {signed_eew32_lmul1_interpret_ops,			       /* Types */
       OP_TYPE_v,						       /* Suffix */
       rvv_arg_type_info (RVV_BASE_signed_eew32_lmul1_interpret),/* Return type */
--- 2214,2220 ----
  
  /* A static operand information for vint32_t func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info b_v_signed_eew32_lmul1_interpret_ops
    = {signed_eew32_lmul1_interpret_ops,			       /* Types */
       OP_TYPE_v,						       /* Suffix */
       rvv_arg_type_info (RVV_BASE_signed_eew32_lmul1_interpret),/* Return type */
*************** static CONSTEXPR const rvv_op_info b_v_s
*** 2222,2228 ****
  
  /* A static operand information for vint64_t func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info b_v_signed_eew64_lmul1_interpret_ops
    = {signed_eew64_lmul1_interpret_ops,			       /* Types */
       OP_TYPE_v,						       /* Suffix */
       rvv_arg_type_info (RVV_BASE_signed_eew64_lmul1_interpret),/* Return type */
--- 2222,2228 ----
  
  /* A static operand information for vint64_t func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info b_v_signed_eew64_lmul1_interpret_ops
    = {signed_eew64_lmul1_interpret_ops,			       /* Types */
       OP_TYPE_v,						       /* Suffix */
       rvv_arg_type_info (RVV_BASE_signed_eew64_lmul1_interpret),/* Return type */
*************** static CONSTEXPR const rvv_op_info b_v_s
*** 2230,2236 ****
  
  /* A static operand information for vuint8_t func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info b_v_unsigned_eew8_lmul1_interpret_ops
    = {unsigned_eew8_lmul1_interpret_ops,				/* Types */
       OP_TYPE_v,							/* Suffix */
       rvv_arg_type_info (RVV_BASE_unsigned_eew8_lmul1_interpret),/* Return type */
--- 2230,2236 ----
  
  /* A static operand information for vuint8_t func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info b_v_unsigned_eew8_lmul1_interpret_ops
    = {unsigned_eew8_lmul1_interpret_ops,				/* Types */
       OP_TYPE_v,							/* Suffix */
       rvv_arg_type_info (RVV_BASE_unsigned_eew8_lmul1_interpret),/* Return type */
*************** static CONSTEXPR const rvv_op_info b_v_u
*** 2238,2244 ****
  
  /* A static operand information for vuint16_t func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info b_v_unsigned_eew16_lmul1_interpret_ops
    = {unsigned_eew16_lmul1_interpret_ops,			 /* Types */
       OP_TYPE_v,							 /* Suffix */
       rvv_arg_type_info (RVV_BASE_unsigned_eew16_lmul1_interpret),/* Return type */
--- 2238,2244 ----
  
  /* A static operand information for vuint16_t func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info b_v_unsigned_eew16_lmul1_interpret_ops
    = {unsigned_eew16_lmul1_interpret_ops,			 /* Types */
       OP_TYPE_v,							 /* Suffix */
       rvv_arg_type_info (RVV_BASE_unsigned_eew16_lmul1_interpret),/* Return type */
*************** static CONSTEXPR const rvv_op_info b_v_u
*** 2246,2252 ****
  
  /* A static operand information for vuint32_t func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info b_v_unsigned_eew32_lmul1_interpret_ops
    = {unsigned_eew32_lmul1_interpret_ops,			 /* Types */
       OP_TYPE_v,							 /* Suffix */
       rvv_arg_type_info (RVV_BASE_unsigned_eew32_lmul1_interpret),/* Return type */
--- 2246,2252 ----
  
  /* A static operand information for vuint32_t func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info b_v_unsigned_eew32_lmul1_interpret_ops
    = {unsigned_eew32_lmul1_interpret_ops,			 /* Types */
       OP_TYPE_v,							 /* Suffix */
       rvv_arg_type_info (RVV_BASE_unsigned_eew32_lmul1_interpret),/* Return type */
*************** static CONSTEXPR const rvv_op_info b_v_u
*** 2254,2260 ****
  
  /* A static operand information for vuint64_t func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info b_v_unsigned_eew64_lmul1_interpret_ops
    = {unsigned_eew64_lmul1_interpret_ops,			 /* Types */
       OP_TYPE_v,							 /* Suffix */
       rvv_arg_type_info (RVV_BASE_unsigned_eew64_lmul1_interpret),/* Return type */
--- 2254,2260 ----
  
  /* A static operand information for vuint64_t func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info b_v_unsigned_eew64_lmul1_interpret_ops
    = {unsigned_eew64_lmul1_interpret_ops,			 /* Types */
       OP_TYPE_v,							 /* Suffix */
       rvv_arg_type_info (RVV_BASE_unsigned_eew64_lmul1_interpret),/* Return type */
*************** static CONSTEXPR const rvv_op_info b_v_u
*** 2262,2268 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info all_v_vlmul_ext_x2_ops
    = {vlmul_ext_x2_ops,				/* Types */
       OP_TYPE_v,					/* Suffix */
       rvv_arg_type_info (RVV_BASE_vlmul_ext_x2), /* Return type */
--- 2262,2268 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info all_v_vlmul_ext_x2_ops
    = {vlmul_ext_x2_ops,				/* Types */
       OP_TYPE_v,					/* Suffix */
       rvv_arg_type_info (RVV_BASE_vlmul_ext_x2), /* Return type */
*************** static CONSTEXPR const rvv_op_info all_v
*** 2270,2276 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info all_v_vlmul_ext_x4_ops
    = {vlmul_ext_x4_ops,				/* Types */
       OP_TYPE_v,					/* Suffix */
       rvv_arg_type_info (RVV_BASE_vlmul_ext_x4), /* Return type */
--- 2270,2276 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info all_v_vlmul_ext_x4_ops
    = {vlmul_ext_x4_ops,				/* Types */
       OP_TYPE_v,					/* Suffix */
       rvv_arg_type_info (RVV_BASE_vlmul_ext_x4), /* Return type */
*************** static CONSTEXPR const rvv_op_info all_v
*** 2278,2284 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info all_v_vlmul_ext_x8_ops
    = {vlmul_ext_x8_ops,				/* Types */
       OP_TYPE_v,					/* Suffix */
       rvv_arg_type_info (RVV_BASE_vlmul_ext_x8), /* Return type */
--- 2278,2284 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info all_v_vlmul_ext_x8_ops
    = {vlmul_ext_x8_ops,				/* Types */
       OP_TYPE_v,					/* Suffix */
       rvv_arg_type_info (RVV_BASE_vlmul_ext_x8), /* Return type */
*************** static CONSTEXPR const rvv_op_info all_v
*** 2286,2292 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info all_v_vlmul_ext_x16_ops
    = {vlmul_ext_x16_ops,				 /* Types */
       OP_TYPE_v,					 /* Suffix */
       rvv_arg_type_info (RVV_BASE_vlmul_ext_x16), /* Return type */
--- 2286,2292 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info all_v_vlmul_ext_x16_ops
    = {vlmul_ext_x16_ops,				 /* Types */
       OP_TYPE_v,					 /* Suffix */
       rvv_arg_type_info (RVV_BASE_vlmul_ext_x16), /* Return type */
*************** static CONSTEXPR const rvv_op_info all_v
*** 2294,2300 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info all_v_vlmul_ext_x32_ops
    = {vlmul_ext_x32_ops,				 /* Types */
       OP_TYPE_v,					 /* Suffix */
       rvv_arg_type_info (RVV_BASE_vlmul_ext_x32), /* Return type */
--- 2294,2300 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info all_v_vlmul_ext_x32_ops
    = {vlmul_ext_x32_ops,				 /* Types */
       OP_TYPE_v,					 /* Suffix */
       rvv_arg_type_info (RVV_BASE_vlmul_ext_x32), /* Return type */
*************** static CONSTEXPR const rvv_op_info all_v
*** 2302,2308 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info all_v_vlmul_ext_x64_ops
    = {vlmul_ext_x64_ops,				 /* Types */
       OP_TYPE_v,					 /* Suffix */
       rvv_arg_type_info (RVV_BASE_vlmul_ext_x64), /* Return type */
--- 2302,2308 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info all_v_vlmul_ext_x64_ops
    = {vlmul_ext_x64_ops,				 /* Types */
       OP_TYPE_v,					 /* Suffix */
       rvv_arg_type_info (RVV_BASE_vlmul_ext_x64), /* Return type */
*************** static CONSTEXPR const rvv_op_info all_v
*** 2310,2316 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info all_v_vlmul_trunc_x2_ops
    = {vlmul_ext_x2_ops,			  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2310,2316 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info all_v_vlmul_trunc_x2_ops
    = {vlmul_ext_x2_ops,			  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info all_v
*** 2318,2324 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info all_v_vlmul_trunc_x4_ops
    = {vlmul_ext_x4_ops,			  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2318,2324 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info all_v_vlmul_trunc_x4_ops
    = {vlmul_ext_x4_ops,			  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info all_v
*** 2326,2332 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info all_v_vlmul_trunc_x8_ops
    = {vlmul_ext_x8_ops,			  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2326,2332 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info all_v_vlmul_trunc_x8_ops
    = {vlmul_ext_x8_ops,			  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info all_v
*** 2334,2340 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info all_v_vlmul_trunc_x16_ops
    = {vlmul_ext_x16_ops,			  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2334,2340 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info all_v_vlmul_trunc_x16_ops
    = {vlmul_ext_x16_ops,			  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info all_v
*** 2342,2348 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info all_v_vlmul_trunc_x32_ops
    = {vlmul_ext_x32_ops,			  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2342,2348 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info all_v_vlmul_trunc_x32_ops
    = {vlmul_ext_x32_ops,			  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info all_v
*** 2350,2356 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info all_v_vlmul_trunc_x64_ops
    = {vlmul_ext_x64_ops,			  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2350,2356 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info all_v_vlmul_trunc_x64_ops
    = {vlmul_ext_x64_ops,			  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info all_v
*** 2358,2364 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info f_v_i_ops
    = {f_ops,					 /* Types */
       OP_TYPE_v,					 /* Suffix */
       rvv_arg_type_info (RVV_BASE_signed_vector), /* Return type */
--- 2358,2364 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info f_v_i_ops
    = {f_ops,					 /* Types */
       OP_TYPE_v,					 /* Suffix */
       rvv_arg_type_info (RVV_BASE_signed_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info f_v_i
*** 2366,2372 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info f_v_u_ops
    = {f_ops,					   /* Types */
       OP_TYPE_v,					   /* Suffix */
       rvv_arg_type_info (RVV_BASE_unsigned_vector), /* Return type */
--- 2366,2372 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info f_v_u_ops
    = {f_ops,					   /* Types */
       OP_TYPE_v,					   /* Suffix */
       rvv_arg_type_info (RVV_BASE_unsigned_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info f_v_u
*** 2374,2380 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info i_v_f_ops
    = {f_ops,				  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2374,2380 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info i_v_f_ops
    = {f_ops,				  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info i_v_f
*** 2382,2388 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info u_v_f_ops
    = {f_ops,				  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2382,2388 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info u_v_f_ops
    = {f_ops,				  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info u_v_f
*** 2390,2396 ****
  
  /* A static operand information for vector_type func (scalar_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info iu_x_ops
    = {iu_ops,			/* Types */
       OP_TYPE_x,			/* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2390,2396 ----
  
  /* A static operand information for vector_type func (scalar_type)
   * function registration. */
! static constexpr const rvv_op_info iu_x_ops
    = {iu_ops,			/* Types */
       OP_TYPE_x,			/* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info iu_x_
*** 2398,2404 ****
  
  /* A static operand information for vector_type func (scalar_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info iu_s_x_ops
    = {iu_ops,				  /* Types */
       OP_TYPE_x,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2398,2404 ----
  
  /* A static operand information for vector_type func (scalar_type)
   * function registration. */
! static constexpr const rvv_op_info iu_s_x_ops
    = {iu_ops,				  /* Types */
       OP_TYPE_x,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info iu_s_
*** 2406,2412 ****
  
  /* A static operand information for vector_type func (scalar_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info f_f_ops
    = {f_ops,			/* Types */
       OP_TYPE_f,			/* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2406,2412 ----
  
  /* A static operand information for vector_type func (scalar_type)
   * function registration. */
! static constexpr const rvv_op_info f_f_ops
    = {f_ops,			/* Types */
       OP_TYPE_f,			/* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info f_f_o
*** 2414,2420 ****
  
  /* A static operand information for vector_type func (scalar_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info f_s_f_ops
    = {f_ops,				  /* Types */
       OP_TYPE_f,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2414,2420 ----
  
  /* A static operand information for vector_type func (scalar_type)
   * function registration. */
! static constexpr const rvv_op_info f_s_f_ops
    = {f_ops,				  /* Types */
       OP_TYPE_f,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info f_s_f
*** 2422,2428 ****
  
  /* A static operand information for vector_type func (double demote type)
   * function registration. */
! static CONSTEXPR const rvv_op_info i_vf2_ops
    = {wexti_ops,				  /* Types */
       OP_TYPE_vf2,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2422,2428 ----
  
  /* A static operand information for vector_type func (double demote type)
   * function registration. */
! static constexpr const rvv_op_info i_vf2_ops
    = {wexti_ops,				  /* Types */
       OP_TYPE_vf2,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info i_vf2
*** 2430,2436 ****
  
  /* A static operand information for vector_type func (quad demote type)
   * function registration. */
! static CONSTEXPR const rvv_op_info i_vf4_ops
    = {qexti_ops,				  /* Types */
       OP_TYPE_vf4,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2430,2436 ----
  
  /* A static operand information for vector_type func (quad demote type)
   * function registration. */
! static constexpr const rvv_op_info i_vf4_ops
    = {qexti_ops,				  /* Types */
       OP_TYPE_vf4,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info i_vf4
*** 2438,2444 ****
  
  /* A static operand information for vector_type func (oct demote type)
   * function registration. */
! static CONSTEXPR const rvv_op_info i_vf8_ops
    = {oexti_ops,				  /* Types */
       OP_TYPE_vf8,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2438,2444 ----
  
  /* A static operand information for vector_type func (oct demote type)
   * function registration. */
! static constexpr const rvv_op_info i_vf8_ops
    = {oexti_ops,				  /* Types */
       OP_TYPE_vf8,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info i_vf8
*** 2446,2452 ****
  
  /* A static operand information for vector_type func (double demote type)
   * function registration. */
! static CONSTEXPR const rvv_op_info u_vf2_ops
    = {wextu_ops,				  /* Types */
       OP_TYPE_vf2,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2446,2452 ----
  
  /* A static operand information for vector_type func (double demote type)
   * function registration. */
! static constexpr const rvv_op_info u_vf2_ops
    = {wextu_ops,				  /* Types */
       OP_TYPE_vf2,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info u_vf2
*** 2454,2460 ****
  
  /* A static operand information for vector_type func (quad demote type)
   * function registration. */
! static CONSTEXPR const rvv_op_info u_vf4_ops
    = {qextu_ops,				  /* Types */
       OP_TYPE_vf4,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2454,2460 ----
  
  /* A static operand information for vector_type func (quad demote type)
   * function registration. */
! static constexpr const rvv_op_info u_vf4_ops
    = {qextu_ops,				  /* Types */
       OP_TYPE_vf4,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info u_vf4
*** 2462,2468 ****
  
  /* A static operand information for vector_type func (oct demote type)
   * function registration. */
! static CONSTEXPR const rvv_op_info u_vf8_ops
    = {oextu_ops,				  /* Types */
       OP_TYPE_vf8,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2462,2468 ----
  
  /* A static operand information for vector_type func (oct demote type)
   * function registration. */
! static constexpr const rvv_op_info u_vf8_ops
    = {oextu_ops,				  /* Types */
       OP_TYPE_vf8,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info u_vf8
*** 2470,2476 ****
  
  /* A static operand information for vector_type func (double demote type, double
   * demote type) function registration. */
! static CONSTEXPR const rvv_op_info i_wvv_ops
    = {wexti_ops,				  /* Types */
       OP_TYPE_vv,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2470,2476 ----
  
  /* A static operand information for vector_type func (double demote type, double
   * demote type) function registration. */
! static constexpr const rvv_op_info i_wvv_ops
    = {wexti_ops,				  /* Types */
       OP_TYPE_vv,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info i_wvv
*** 2478,2484 ****
  
  /* A static operand information for vector_type func (double demote type, double
   * demote type) function registration. */
! static CONSTEXPR const rvv_op_info f_wvv_ops
    = {wextf_ops,				  /* Types */
       OP_TYPE_vv,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2478,2484 ----
  
  /* A static operand information for vector_type func (double demote type, double
   * demote type) function registration. */
! static constexpr const rvv_op_info f_wvv_ops
    = {wextf_ops,				  /* Types */
       OP_TYPE_vv,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info f_wvv
*** 2486,2492 ****
  
  /* A static operand information for vector_type func (vector_type, double demote
   * type, double demote type) function registration. */
! static CONSTEXPR const rvv_op_info i_wwvv_ops
    = {wexti_ops,				  /* Types */
       OP_TYPE_vv,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2486,2492 ----
  
  /* A static operand information for vector_type func (vector_type, double demote
   * type, double demote type) function registration. */
! static constexpr const rvv_op_info i_wwvv_ops
    = {wexti_ops,				  /* Types */
       OP_TYPE_vv,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info i_wwv
*** 2494,2500 ****
  
  /* A static operand information for vector_type func (vector_type, double demote
   * scalar_type, double demote type) function registration. */
! static CONSTEXPR const rvv_op_info i_wwxv_ops
    = {wexti_ops,				  /* Types */
       OP_TYPE_vx,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2494,2500 ----
  
  /* A static operand information for vector_type func (vector_type, double demote
   * scalar_type, double demote type) function registration. */
! static constexpr const rvv_op_info i_wwxv_ops
    = {wexti_ops,				  /* Types */
       OP_TYPE_vx,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info i_wwx
*** 2502,2508 ****
  
  /* A static operand information for vector_type func (vector_type, double demote
   * type, double demote type) function registration. */
! static CONSTEXPR const rvv_op_info f_wwvv_ops
    = {wextf_ops,				  /* Types */
       OP_TYPE_vv,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2502,2508 ----
  
  /* A static operand information for vector_type func (vector_type, double demote
   * type, double demote type) function registration. */
! static constexpr const rvv_op_info f_wwvv_ops
    = {wextf_ops,				  /* Types */
       OP_TYPE_vv,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info f_wwv
*** 2510,2516 ****
  
  /* A static operand information for vector_type func (vector_type, double demote
   * scalar_type, double demote type) function registration. */
! static CONSTEXPR const rvv_op_info f_wwfv_ops
    = {wextf_ops,				  /* Types */
       OP_TYPE_vf,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2510,2516 ----
  
  /* A static operand information for vector_type func (vector_type, double demote
   * scalar_type, double demote type) function registration. */
! static constexpr const rvv_op_info f_wwfv_ops
    = {wextf_ops,				  /* Types */
       OP_TYPE_vf,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info f_wwf
*** 2518,2524 ****
  
  /* A static operand information for vector_type func (vector_type, double demote
   * type, double demote type) function registration. */
! static CONSTEXPR const rvv_op_info u_wwvv_ops
    = {wextu_ops,				  /* Types */
       OP_TYPE_vv,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2518,2524 ----
  
  /* A static operand information for vector_type func (vector_type, double demote
   * type, double demote type) function registration. */
! static constexpr const rvv_op_info u_wwvv_ops
    = {wextu_ops,				  /* Types */
       OP_TYPE_vv,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info u_wwv
*** 2526,2532 ****
  
  /* A static operand information for vector_type func (vector_type, double demote
   * scalar_type, double demote type) function registration. */
! static CONSTEXPR const rvv_op_info u_wwxv_ops
    = {wextu_ops,				  /* Types */
       OP_TYPE_vx,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2526,2532 ----
  
  /* A static operand information for vector_type func (vector_type, double demote
   * scalar_type, double demote type) function registration. */
! static constexpr const rvv_op_info u_wwxv_ops
    = {wextu_ops,				  /* Types */
       OP_TYPE_vx,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info u_wwx
*** 2534,2540 ****
  
  /* A static operand information for vector_type func (vector_type, double demote
   * type, double demote type) function registration. */
! static CONSTEXPR const rvv_op_info i_su_wwvv_ops
    = {wexti_ops,				  /* Types */
       OP_TYPE_vv,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2534,2540 ----
  
  /* A static operand information for vector_type func (vector_type, double demote
   * type, double demote type) function registration. */
! static constexpr const rvv_op_info i_su_wwvv_ops
    = {wexti_ops,				  /* Types */
       OP_TYPE_vv,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info i_su_
*** 2542,2548 ****
  
  /* A static operand information for vector_type func (vector_type, double demote
   * scalar_type, double demote type) function registration. */
! static CONSTEXPR const rvv_op_info i_su_wwxv_ops
    = {wexti_ops,				  /* Types */
       OP_TYPE_vx,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2542,2548 ----
  
  /* A static operand information for vector_type func (vector_type, double demote
   * scalar_type, double demote type) function registration. */
! static constexpr const rvv_op_info i_su_wwxv_ops
    = {wexti_ops,				  /* Types */
       OP_TYPE_vx,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info i_su_
*** 2550,2556 ****
  
  /* A static operand information for vector_type func (vector_type, double demote
   * scalar_type, double demote type) function registration. */
! static CONSTEXPR const rvv_op_info i_us_wwxv_ops
    = {wexti_ops,				  /* Types */
       OP_TYPE_vx,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2550,2556 ----
  
  /* A static operand information for vector_type func (vector_type, double demote
   * scalar_type, double demote type) function registration. */
! static constexpr const rvv_op_info i_us_wwxv_ops
    = {wexti_ops,				  /* Types */
       OP_TYPE_vx,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info i_us_
*** 2558,2564 ****
  
  /* A static operand information for vector_type func (vector_type, quad demote
   * type, quad demote type) function registration. */
! static CONSTEXPR const rvv_op_info i_qqvv_ops
    = {qmacc_ops,				  /* Types */
       OP_TYPE_4x8x4,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2558,2564 ----
  
  /* A static operand information for vector_type func (vector_type, quad demote
   * type, quad demote type) function registration. */
! static constexpr const rvv_op_info i_qqvv_ops
    = {qmacc_ops,				  /* Types */
       OP_TYPE_4x8x4,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info i_qqv
*** 2566,2572 ****
  
  /* A static operand information for vector_type func (vector_type, quad demote
   * type, quad demote type) function registration. */
! static CONSTEXPR const rvv_op_info u_qqvv_ops
    = {qmacc_ops,				  /* Types */
       OP_TYPE_4x8x4,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2566,2572 ----
  
  /* A static operand information for vector_type func (vector_type, quad demote
   * type, quad demote type) function registration. */
! static constexpr const rvv_op_info u_qqvv_ops
    = {qmacc_ops,				  /* Types */
       OP_TYPE_4x8x4,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info u_qqv
*** 2574,2580 ****
  
  /* A static operand information for vector_type func (vector_type, quad demote
   * type, quad demote type) function registration. */
! static CONSTEXPR const rvv_op_info i_su_qqvv_ops
    = {qmacc_ops,				  /* Types */
       OP_TYPE_4x8x4,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2574,2580 ----
  
  /* A static operand information for vector_type func (vector_type, quad demote
   * type, quad demote type) function registration. */
! static constexpr const rvv_op_info i_su_qqvv_ops
    = {qmacc_ops,				  /* Types */
       OP_TYPE_4x8x4,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info i_su_
*** 2582,2588 ****
  
  /* A static operand information for vector_type func (vector_type, quad demote
   * type, quad demote type) function registration. */
! static CONSTEXPR const rvv_op_info i_us_qqvv_ops
    = {qmacc_ops,				  /* Types */
       OP_TYPE_4x8x4,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2582,2588 ----
  
  /* A static operand information for vector_type func (vector_type, quad demote
   * type, quad demote type) function registration. */
! static constexpr const rvv_op_info i_us_qqvv_ops
    = {qmacc_ops,				  /* Types */
       OP_TYPE_4x8x4,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info i_us_
*** 2590,2596 ****
  
  /* A static operand information for vector_type func (vector_type, quad demote
   * type, quad demote type) function registration. */
! static CONSTEXPR const rvv_op_info i_qdvv_ops
    = {qmacc_ops,				  /* Types */
       OP_TYPE_2x8x2,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2590,2596 ----
  
  /* A static operand information for vector_type func (vector_type, quad demote
   * type, quad demote type) function registration. */
! static constexpr const rvv_op_info i_qdvv_ops
    = {qmacc_ops,				  /* Types */
       OP_TYPE_2x8x2,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info i_qdv
*** 2598,2604 ****
  
  /* A static operand information for vector_type func (vector_type, quad demote
   * type, quad demote type) function registration. */
! static CONSTEXPR const rvv_op_info u_qdvv_ops
    = {qmacc_ops,				  /* Types */
       OP_TYPE_2x8x2,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2598,2604 ----
  
  /* A static operand information for vector_type func (vector_type, quad demote
   * type, quad demote type) function registration. */
! static constexpr const rvv_op_info u_qdvv_ops
    = {qmacc_ops,				  /* Types */
       OP_TYPE_2x8x2,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info u_qdv
*** 2606,2612 ****
  
  /* A static operand information for vector_type func (vector_type, quad demote
   * type, quad demote type) function registration. */
! static CONSTEXPR const rvv_op_info i_su_qdvv_ops
    = {qmacc_ops,				  /* Types */
       OP_TYPE_2x8x2,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2606,2612 ----
  
  /* A static operand information for vector_type func (vector_type, quad demote
   * type, quad demote type) function registration. */
! static constexpr const rvv_op_info i_su_qdvv_ops
    = {qmacc_ops,				  /* Types */
       OP_TYPE_2x8x2,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info i_su_
*** 2614,2620 ****
  
  /* A static operand information for vector_type func (vector_type, quad demote
   * type, quad demote type) function registration. */
! static CONSTEXPR const rvv_op_info i_us_qdvv_ops
    = {qmacc_ops,				  /* Types */
       OP_TYPE_2x8x2,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2614,2620 ----
  
  /* A static operand information for vector_type func (vector_type, quad demote
   * type, quad demote type) function registration. */
! static constexpr const rvv_op_info i_us_qdvv_ops
    = {qmacc_ops,				  /* Types */
       OP_TYPE_2x8x2,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info i_us_
*** 2622,2628 ****
  
  /* A static operand information for vector_type func (signed double demote type,
   * unsigned double demote type) function registration. */
! static CONSTEXPR const rvv_op_info i_su_wvv_ops
    = {wexti_ops,				  /* Types */
       OP_TYPE_vv,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2622,2628 ----
  
  /* A static operand information for vector_type func (signed double demote type,
   * unsigned double demote type) function registration. */
! static constexpr const rvv_op_info i_su_wvv_ops
    = {wexti_ops,				  /* Types */
       OP_TYPE_vv,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info i_su_
*** 2630,2636 ****
  
  /* A static operand information for vector_type func (double demote type, double
   * demote type) function registration. */
! static CONSTEXPR const rvv_op_info u_wvv_ops
    = {wextu_ops,				  /* Types */
       OP_TYPE_vv,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2630,2636 ----
  
  /* A static operand information for vector_type func (double demote type, double
   * demote type) function registration. */
! static constexpr const rvv_op_info u_wvv_ops
    = {wextu_ops,				  /* Types */
       OP_TYPE_vv,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info u_wvv
*** 2638,2644 ****
  
  /* A static operand information for vector_type func (double demote type, size type)
   * function registration. */
! static CONSTEXPR const rvv_op_info u_shift_wvx_ops
    = {wextu_ops,				  /* Types */
       OP_TYPE_vx,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2638,2644 ----
  
  /* A static operand information for vector_type func (double demote type, size type)
   * function registration. */
! static constexpr const rvv_op_info u_shift_wvx_ops
    = {wextu_ops,				  /* Types */
       OP_TYPE_vx,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info u_shi
*** 2646,2652 ****
  
  /* A static operand information for vector_type func (double demote type, double
   * demote scalar_type) function registration. */
! static CONSTEXPR const rvv_op_info i_wvx_ops
    = {wexti_ops,				  /* Types */
       OP_TYPE_vx,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2646,2652 ----
  
  /* A static operand information for vector_type func (double demote type, double
   * demote scalar_type) function registration. */
! static constexpr const rvv_op_info i_wvx_ops
    = {wexti_ops,				  /* Types */
       OP_TYPE_vx,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info i_wvx
*** 2654,2660 ****
  
  /* A static operand information for vector_type func (double demote type, double
   * demote scalar_type) function registration. */
! static CONSTEXPR const rvv_op_info f_wvf_ops
    = {wextf_ops,				  /* Types */
       OP_TYPE_vf,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2654,2660 ----
  
  /* A static operand information for vector_type func (double demote type, double
   * demote scalar_type) function registration. */
! static constexpr const rvv_op_info f_wvf_ops
    = {wextf_ops,				  /* Types */
       OP_TYPE_vf,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info f_wvf
*** 2662,2668 ****
  
  /* A static operand information for vector_type func (signed double demote type,
   * unsigned double demote scalar_type) function registration. */
! static CONSTEXPR const rvv_op_info i_su_wvx_ops
    = {wexti_ops,				  /* Types */
       OP_TYPE_vx,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2662,2668 ----
  
  /* A static operand information for vector_type func (signed double demote type,
   * unsigned double demote scalar_type) function registration. */
! static constexpr const rvv_op_info i_su_wvx_ops
    = {wexti_ops,				  /* Types */
       OP_TYPE_vx,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info i_su_
*** 2670,2676 ****
  
  /* A static operand information for vector_type func (vector_type, double
   * demote type) function registration. */
! static CONSTEXPR const rvv_op_info i_wwv_ops
    = {wexti_ops,				  /* Types */
       OP_TYPE_wv,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2670,2676 ----
  
  /* A static operand information for vector_type func (vector_type, double
   * demote type) function registration. */
! static constexpr const rvv_op_info i_wwv_ops
    = {wexti_ops,				  /* Types */
       OP_TYPE_wv,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info i_wwv
*** 2678,2684 ****
  
  /* A static operand information for vector_type func (vector_type, double
   * demote type) function registration. */
! static CONSTEXPR const rvv_op_info f_wwv_ops
    = {wextf_ops,				  /* Types */
       OP_TYPE_wv,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2678,2684 ----
  
  /* A static operand information for vector_type func (vector_type, double
   * demote type) function registration. */
! static constexpr const rvv_op_info f_wwv_ops
    = {wextf_ops,				  /* Types */
       OP_TYPE_wv,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info f_wwv
*** 2686,2692 ****
  
  /* A static operand information for vector_type func (vector_type, double
   * demote scalar_type) function registration. */
! static CONSTEXPR const rvv_op_info i_wwx_ops
    = {wexti_ops,				  /* Types */
       OP_TYPE_wx,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2686,2692 ----
  
  /* A static operand information for vector_type func (vector_type, double
   * demote scalar_type) function registration. */
! static constexpr const rvv_op_info i_wwx_ops
    = {wexti_ops,				  /* Types */
       OP_TYPE_wx,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info i_wwx
*** 2694,2700 ****
  
  /* A static operand information for vector_type func (vector_type, double
   * demote scalar_type) function registration. */
! static CONSTEXPR const rvv_op_info f_wwf_ops
    = {wextf_ops,				  /* Types */
       OP_TYPE_wf,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2694,2700 ----
  
  /* A static operand information for vector_type func (vector_type, double
   * demote scalar_type) function registration. */
! static constexpr const rvv_op_info f_wwf_ops
    = {wextf_ops,				  /* Types */
       OP_TYPE_wf,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info f_wwf
*** 2702,2708 ****
  
  /* A static operand information for vector_type func (vector_type, double
   * demote type) function registration. */
! static CONSTEXPR const rvv_op_info u_wwv_ops
    = {wextu_ops,				  /* Types */
       OP_TYPE_wv,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2702,2708 ----
  
  /* A static operand information for vector_type func (vector_type, double
   * demote type) function registration. */
! static constexpr const rvv_op_info u_wwv_ops
    = {wextu_ops,				  /* Types */
       OP_TYPE_wv,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info u_wwv
*** 2710,2716 ****
  
  /* A static operand information for vector_type func (vector_type, double
   * demote scalar_type) function registration. */
! static CONSTEXPR const rvv_op_info u_wwx_ops
    = {wextu_ops,				  /* Types */
       OP_TYPE_wx,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2710,2716 ----
  
  /* A static operand information for vector_type func (vector_type, double
   * demote scalar_type) function registration. */
! static constexpr const rvv_op_info u_wwx_ops
    = {wextu_ops,				  /* Types */
       OP_TYPE_wx,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info u_wwx
*** 2718,2724 ****
  
  /* A static operand information for vector_type func (double demote type, double
   * demote scalar_type) function registration. */
! static CONSTEXPR const rvv_op_info u_wvx_ops
    = {wextu_ops,				  /* Types */
       OP_TYPE_vx,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2718,2724 ----
  
  /* A static operand information for vector_type func (double demote type, double
   * demote scalar_type) function registration. */
! static constexpr const rvv_op_info u_wvx_ops
    = {wextu_ops,				  /* Types */
       OP_TYPE_vx,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info u_wvx
*** 2726,2732 ****
  
  /* A static operand information for vector_type func (double demote type)
   * function registration. */
! static CONSTEXPR const rvv_op_info i_x_x_v_ops
    = {wexti_ops,				  /* Types */
       OP_TYPE_x_v,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2726,2732 ----
  
  /* A static operand information for vector_type func (double demote type)
   * function registration. */
! static constexpr const rvv_op_info i_x_x_v_ops
    = {wexti_ops,				  /* Types */
       OP_TYPE_x_v,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info i_x_x
*** 2734,2740 ****
  
  /* A static operand information for vector_type func (unsigned double demote
   * type) function registration. */
! static CONSTEXPR const rvv_op_info u_x_x_v_ops
    = {wextu_ops,				  /* Types */
       OP_TYPE_x_v,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2734,2740 ----
  
  /* A static operand information for vector_type func (unsigned double demote
   * type) function registration. */
! static constexpr const rvv_op_info u_x_x_v_ops
    = {wextu_ops,				  /* Types */
       OP_TYPE_x_v,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info u_x_x
*** 2742,2748 ****
  
  /* A static operand information for double demote type func (vector_type,
   * shift_type) function registration. */
! static CONSTEXPR const rvv_op_info i_narrow_shift_vwv_ops
    = {wexti_ops,					       /* Types */
       OP_TYPE_wv,				       /* Suffix */
       rvv_arg_type_info (RVV_BASE_double_trunc_vector), /* Return type */
--- 2742,2748 ----
  
  /* A static operand information for double demote type func (vector_type,
   * shift_type) function registration. */
! static constexpr const rvv_op_info i_narrow_shift_vwv_ops
    = {wexti_ops,					       /* Types */
       OP_TYPE_wv,				       /* Suffix */
       rvv_arg_type_info (RVV_BASE_double_trunc_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info i_nar
*** 2750,2756 ****
  
  /* A static operand information for double demote type func (vector_type,
   * shift_type) function registration. */
! static CONSTEXPR const rvv_op_info u_narrow_shift_vwv_ops
    = {wextu_ops,					       /* Types */
       OP_TYPE_wv,				       /* Suffix */
       rvv_arg_type_info (RVV_BASE_double_trunc_vector), /* Return type */
--- 2750,2756 ----
  
  /* A static operand information for double demote type func (vector_type,
   * shift_type) function registration. */
! static constexpr const rvv_op_info u_narrow_shift_vwv_ops
    = {wextu_ops,					       /* Types */
       OP_TYPE_wv,				       /* Suffix */
       rvv_arg_type_info (RVV_BASE_double_trunc_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info u_nar
*** 2758,2764 ****
  
  /* A static operand information for double demote type func (vector_type,
   * size_t) function registration. */
! static CONSTEXPR const rvv_op_info i_narrow_shift_vwx_ops
    = {wexti_ops,					       /* Types */
       OP_TYPE_wx,				       /* Suffix */
       rvv_arg_type_info (RVV_BASE_double_trunc_vector), /* Return type */
--- 2758,2764 ----
  
  /* A static operand information for double demote type func (vector_type,
   * size_t) function registration. */
! static constexpr const rvv_op_info i_narrow_shift_vwx_ops
    = {wexti_ops,					       /* Types */
       OP_TYPE_wx,				       /* Suffix */
       rvv_arg_type_info (RVV_BASE_double_trunc_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info i_nar
*** 2766,2772 ****
  
  /* A static operand information for double demote type func (vector_type,
   * shift_type) function registration. */
! static CONSTEXPR const rvv_op_info u_clip_qf_ops
    = {xfqf_ops,				      /* Types */
       OP_TYPE_none,			      /* Suffix */
       rvv_arg_type_info (RVV_BASE_unsigned_vector), /* Return type */
--- 2766,2772 ----
  
  /* A static operand information for double demote type func (vector_type,
   * shift_type) function registration. */
! static constexpr const rvv_op_info u_clip_qf_ops
    = {xfqf_ops,				      /* Types */
       OP_TYPE_none,			      /* Suffix */
       rvv_arg_type_info (RVV_BASE_unsigned_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info u_cli
*** 2774,2780 ****
  
  /* A static operand information for double demote type func (vector_type,
   * shift_type) function registration. */
! static CONSTEXPR const rvv_op_info i_clip_qf_ops
    = {xfqf_ops,					     /* Types */
       OP_TYPE_none,				     /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2774,2780 ----
  
  /* A static operand information for double demote type func (vector_type,
   * shift_type) function registration. */
! static constexpr const rvv_op_info i_clip_qf_ops
    = {xfqf_ops,					     /* Types */
       OP_TYPE_none,				     /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info i_cli
*** 2782,2788 ****
  
  /* A static operand information for double demote type func (vector_type,
   * size_t) function registration. */
! static CONSTEXPR const rvv_op_info u_narrow_shift_vwx_ops
    = {wextu_ops,					       /* Types */
       OP_TYPE_wx,				       /* Suffix */
       rvv_arg_type_info (RVV_BASE_double_trunc_vector), /* Return type */
--- 2782,2788 ----
  
  /* A static operand information for double demote type func (vector_type,
   * size_t) function registration. */
! static constexpr const rvv_op_info u_narrow_shift_vwx_ops
    = {wextu_ops,					       /* Types */
       OP_TYPE_wx,				       /* Suffix */
       rvv_arg_type_info (RVV_BASE_double_trunc_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info u_nar
*** 2790,2796 ****
  
  /* A static operand information for double demote type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info iu_trunc_ops
    = {wextiu_ops,				       /* Types */
       OP_TYPE_x_w,				       /* Suffix */
       rvv_arg_type_info (RVV_BASE_double_trunc_vector), /* Return type */
--- 2790,2796 ----
  
  /* A static operand information for double demote type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info iu_trunc_ops
    = {wextiu_ops,				       /* Types */
       OP_TYPE_x_w,				       /* Suffix */
       rvv_arg_type_info (RVV_BASE_double_trunc_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info iu_tr
*** 2798,2804 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info all_v_vset_lmul1_x2_ops
    = {lmul1_ops,					/* Types */
       OP_TYPE_v,					/* Suffix */
       rvv_arg_type_info (RVV_BASE_vlmul_ext_x2), /* Return type */
--- 2798,2804 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info all_v_vset_lmul1_x2_ops
    = {lmul1_ops,					/* Types */
       OP_TYPE_v,					/* Suffix */
       rvv_arg_type_info (RVV_BASE_vlmul_ext_x2), /* Return type */
*************** static CONSTEXPR const rvv_op_info all_v
*** 2806,2812 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info all_v_vset_lmul1_x4_ops
    = {lmul1_ops,					/* Types */
       OP_TYPE_v,					/* Suffix */
       rvv_arg_type_info (RVV_BASE_vlmul_ext_x4), /* Return type */
--- 2806,2812 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info all_v_vset_lmul1_x4_ops
    = {lmul1_ops,					/* Types */
       OP_TYPE_v,					/* Suffix */
       rvv_arg_type_info (RVV_BASE_vlmul_ext_x4), /* Return type */
*************** static CONSTEXPR const rvv_op_info all_v
*** 2814,2820 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info all_v_vset_lmul1_x8_ops
    = {lmul1_ops,					/* Types */
       OP_TYPE_v,					/* Suffix */
       rvv_arg_type_info (RVV_BASE_vlmul_ext_x8), /* Return type */
--- 2814,2820 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info all_v_vset_lmul1_x8_ops
    = {lmul1_ops,					/* Types */
       OP_TYPE_v,					/* Suffix */
       rvv_arg_type_info (RVV_BASE_vlmul_ext_x8), /* Return type */
*************** static CONSTEXPR const rvv_op_info all_v
*** 2822,2828 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info all_v_vset_lmul2_x2_ops
    = {lmul2_ops,					/* Types */
       OP_TYPE_v,					/* Suffix */
       rvv_arg_type_info (RVV_BASE_vlmul_ext_x2), /* Return type */
--- 2822,2828 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info all_v_vset_lmul2_x2_ops
    = {lmul2_ops,					/* Types */
       OP_TYPE_v,					/* Suffix */
       rvv_arg_type_info (RVV_BASE_vlmul_ext_x2), /* Return type */
*************** static CONSTEXPR const rvv_op_info all_v
*** 2830,2836 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info all_v_vset_lmul2_x4_ops
    = {lmul2_ops,					/* Types */
       OP_TYPE_v,					/* Suffix */
       rvv_arg_type_info (RVV_BASE_vlmul_ext_x4), /* Return type */
--- 2830,2836 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info all_v_vset_lmul2_x4_ops
    = {lmul2_ops,					/* Types */
       OP_TYPE_v,					/* Suffix */
       rvv_arg_type_info (RVV_BASE_vlmul_ext_x4), /* Return type */
*************** static CONSTEXPR const rvv_op_info all_v
*** 2838,2844 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info all_v_vset_lmul4_x2_ops
    = {lmul4_ops,					/* Types */
       OP_TYPE_v,					/* Suffix */
       rvv_arg_type_info (RVV_BASE_vlmul_ext_x2), /* Return type */
--- 2838,2844 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info all_v_vset_lmul4_x2_ops
    = {lmul4_ops,					/* Types */
       OP_TYPE_v,					/* Suffix */
       rvv_arg_type_info (RVV_BASE_vlmul_ext_x2), /* Return type */
*************** static CONSTEXPR const rvv_op_info all_v
*** 2846,2852 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info all_v_vget_lmul1_x2_ops
    = {lmul1_ops,				  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2846,2852 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info all_v_vget_lmul1_x2_ops
    = {lmul1_ops,				  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info all_v
*** 2854,2860 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info all_v_vget_lmul1_x4_ops
    = {lmul1_ops,				  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2854,2860 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info all_v_vget_lmul1_x4_ops
    = {lmul1_ops,				  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info all_v
*** 2862,2868 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info all_v_vget_lmul1_x8_ops
    = {lmul1_ops,				  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2862,2868 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info all_v_vget_lmul1_x8_ops
    = {lmul1_ops,				  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info all_v
*** 2870,2876 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info all_v_vget_lmul2_x2_ops
    = {lmul2_ops,				  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2870,2876 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info all_v_vget_lmul2_x2_ops
    = {lmul2_ops,				  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info all_v
*** 2878,2884 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info all_v_vget_lmul2_x4_ops
    = {lmul2_ops,				  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2878,2884 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info all_v_vget_lmul2_x4_ops
    = {lmul2_ops,				  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info all_v
*** 2886,2906 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info all_v_vget_lmul4_x2_ops
    = {lmul4_ops,				  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
       ext_x2_vget_args /* Args */};
  
  /* A static operand information for size_t func () function registration. */
! static CONSTEXPR const rvv_op_info p_none_void_ops
    = {none_ops,				/* Types */
       OP_TYPE_none,			/* Suffix */
       rvv_arg_type_info (RVV_BASE_size), /* Return type */
       void_args /* Args */};
  
  /* A static operand information for unsigned long func () function registration. */
! static CONSTEXPR const rvv_op_info ul_none_void_ops
    = {none_ops,				/* Types */
       OP_TYPE_none,			/* Suffix */
       rvv_arg_type_info (RVV_BASE_unsigned_long), /* Return type */
--- 2886,2906 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info all_v_vget_lmul4_x2_ops
    = {lmul4_ops,				  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
       ext_x2_vget_args /* Args */};
  
  /* A static operand information for size_t func () function registration. */
! static constexpr const rvv_op_info p_none_void_ops
    = {none_ops,				/* Types */
       OP_TYPE_none,			/* Suffix */
       rvv_arg_type_info (RVV_BASE_size), /* Return type */
       void_args /* Args */};
  
  /* A static operand information for unsigned long func () function registration. */
! static constexpr const rvv_op_info ul_none_void_ops
    = {none_ops,				/* Types */
       OP_TYPE_none,			/* Suffix */
       rvv_arg_type_info (RVV_BASE_unsigned_long), /* Return type */
*************** static CONSTEXPR const rvv_op_info ul_no
*** 2908,2914 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info all_v_vset_tuple_ops
    = {tuple_ops,				  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2908,2914 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info all_v_vset_tuple_ops
    = {tuple_ops,				  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info all_v
*** 2916,2922 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info all_v_vget_tuple_ops
    = {tuple_ops,					 /* Types */
       OP_TYPE_v,					 /* Suffix */
       rvv_arg_type_info (RVV_BASE_tuple_subpart), /* Return type */
--- 2916,2922 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info all_v_vget_tuple_ops
    = {tuple_ops,					 /* Types */
       OP_TYPE_v,					 /* Suffix */
       rvv_arg_type_info (RVV_BASE_tuple_subpart), /* Return type */
*************** static CONSTEXPR const rvv_op_info all_v
*** 2924,2930 ****
  
  /* A static operand information for vector_type func (const scalar_type *)
   * function registration. */
! static CONSTEXPR const rvv_op_info tuple_v_scalar_const_ptr_ops
    = {tuple_ops,				  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2924,2930 ----
  
  /* A static operand information for vector_type func (const scalar_type *)
   * function registration. */
! static constexpr const rvv_op_info tuple_v_scalar_const_ptr_ops
    = {tuple_ops,				  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info tuple
*** 2932,2938 ****
  
  /* A static operand information for void func (scalar_type *, vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info tuple_v_scalar_ptr_ops
    = {tuple_ops,				/* Types */
       OP_TYPE_v,				/* Suffix */
       rvv_arg_type_info (RVV_BASE_void), /* Return type */
--- 2932,2938 ----
  
  /* A static operand information for void func (scalar_type *, vector_type)
   * function registration. */
! static constexpr const rvv_op_info tuple_v_scalar_ptr_ops
    = {tuple_ops,				/* Types */
       OP_TYPE_v,				/* Suffix */
       rvv_arg_type_info (RVV_BASE_void), /* Return type */
*************** static CONSTEXPR const rvv_op_info tuple
*** 2940,2946 ****
  
  /* A static operand information for vector_type func (const scalar_type *,
   * ptrdiff_t) function registration. */
! static CONSTEXPR const rvv_op_info tuple_v_scalar_const_ptr_ptrdiff_ops
    = {tuple_ops,				  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2940,2946 ----
  
  /* A static operand information for vector_type func (const scalar_type *,
   * ptrdiff_t) function registration. */
! static constexpr const rvv_op_info tuple_v_scalar_const_ptr_ptrdiff_ops
    = {tuple_ops,				  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info tuple
*** 2948,2954 ****
  
  /* A static operand information for void func (scalar_type *, ptrdiff_t,
   * vector_type) function registration. */
! static CONSTEXPR const rvv_op_info tuple_v_scalar_ptr_ptrdiff_ops
    = {tuple_ops,				/* Types */
       OP_TYPE_v,				/* Suffix */
       rvv_arg_type_info (RVV_BASE_void), /* Return type */
--- 2948,2954 ----
  
  /* A static operand information for void func (scalar_type *, ptrdiff_t,
   * vector_type) function registration. */
! static constexpr const rvv_op_info tuple_v_scalar_ptr_ptrdiff_ops
    = {tuple_ops,				/* Types */
       OP_TYPE_v,				/* Suffix */
       rvv_arg_type_info (RVV_BASE_void), /* Return type */
*************** static CONSTEXPR const rvv_op_info tuple
*** 2956,2962 ****
  
  /* A static operand information for vector_type func (const scalar_type *,
   * eew8_index_type) function registration. */
! static CONSTEXPR const rvv_op_info tuple_v_scalar_const_ptr_eew8_index_ops
    = {tuple_ops,				  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2956,2962 ----
  
  /* A static operand information for vector_type func (const scalar_type *,
   * eew8_index_type) function registration. */
! static constexpr const rvv_op_info tuple_v_scalar_const_ptr_eew8_index_ops
    = {tuple_ops,				  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info tuple
*** 2964,2970 ****
  
  /* A static operand information for vector_type func (const scalar_type *,
   * eew16_index_type) function registration. */
! static CONSTEXPR const rvv_op_info tuple_v_scalar_const_ptr_eew16_index_ops
    = {tuple_ops,				  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2964,2970 ----
  
  /* A static operand information for vector_type func (const scalar_type *,
   * eew16_index_type) function registration. */
! static constexpr const rvv_op_info tuple_v_scalar_const_ptr_eew16_index_ops
    = {tuple_ops,				  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info tuple
*** 2972,2978 ****
  
  /* A static operand information for vector_type func (const scalar_type *,
   * eew32_index_type) function registration. */
! static CONSTEXPR const rvv_op_info tuple_v_scalar_const_ptr_eew32_index_ops
    = {tuple_ops,				  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2972,2978 ----
  
  /* A static operand information for vector_type func (const scalar_type *,
   * eew32_index_type) function registration. */
! static constexpr const rvv_op_info tuple_v_scalar_const_ptr_eew32_index_ops
    = {tuple_ops,				  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info tuple
*** 2980,2986 ****
  
  /* A static operand information for vector_type func (const scalar_type *,
   * eew64_index_type) function registration. */
! static CONSTEXPR const rvv_op_info tuple_v_scalar_const_ptr_eew64_index_ops
    = {tuple_ops,				  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 2980,2986 ----
  
  /* A static operand information for vector_type func (const scalar_type *,
   * eew64_index_type) function registration. */
! static constexpr const rvv_op_info tuple_v_scalar_const_ptr_eew64_index_ops
    = {tuple_ops,				  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info tuple
*** 2988,2994 ****
  
  /* A static operand information for void func (scalar_type *, eew8_index_type,
   * vector_type) function registration. */
! static CONSTEXPR const rvv_op_info tuple_v_scalar_ptr_eew8_index_ops
    = {tuple_ops,				/* Types */
       OP_TYPE_v,				/* Suffix */
       rvv_arg_type_info (RVV_BASE_void), /* Return type */
--- 2988,2994 ----
  
  /* A static operand information for void func (scalar_type *, eew8_index_type,
   * vector_type) function registration. */
! static constexpr const rvv_op_info tuple_v_scalar_ptr_eew8_index_ops
    = {tuple_ops,				/* Types */
       OP_TYPE_v,				/* Suffix */
       rvv_arg_type_info (RVV_BASE_void), /* Return type */
*************** static CONSTEXPR const rvv_op_info tuple
*** 2996,3002 ****
  
  /* A static operand information for void func (scalar_type *, eew16_index_type,
   * vector_type) function registration. */
! static CONSTEXPR const rvv_op_info tuple_v_scalar_ptr_eew16_index_ops
    = {tuple_ops,				/* Types */
       OP_TYPE_v,				/* Suffix */
       rvv_arg_type_info (RVV_BASE_void), /* Return type */
--- 2996,3002 ----
  
  /* A static operand information for void func (scalar_type *, eew16_index_type,
   * vector_type) function registration. */
! static constexpr const rvv_op_info tuple_v_scalar_ptr_eew16_index_ops
    = {tuple_ops,				/* Types */
       OP_TYPE_v,				/* Suffix */
       rvv_arg_type_info (RVV_BASE_void), /* Return type */
*************** static CONSTEXPR const rvv_op_info tuple
*** 3004,3010 ****
  
  /* A static operand information for void func (scalar_type *, eew32_index_type,
   * vector_type) function registration. */
! static CONSTEXPR const rvv_op_info tuple_v_scalar_ptr_eew32_index_ops
    = {tuple_ops,				/* Types */
       OP_TYPE_v,				/* Suffix */
       rvv_arg_type_info (RVV_BASE_void), /* Return type */
--- 3004,3010 ----
  
  /* A static operand information for void func (scalar_type *, eew32_index_type,
   * vector_type) function registration. */
! static constexpr const rvv_op_info tuple_v_scalar_ptr_eew32_index_ops
    = {tuple_ops,				/* Types */
       OP_TYPE_v,				/* Suffix */
       rvv_arg_type_info (RVV_BASE_void), /* Return type */
*************** static CONSTEXPR const rvv_op_info tuple
*** 3012,3018 ****
  
  /* A static operand information for void func (scalar_type *, eew64_index_type,
   * vector_type) function registration. */
! static CONSTEXPR const rvv_op_info tuple_v_scalar_ptr_eew64_index_ops
    = {tuple_ops,				/* Types */
       OP_TYPE_v,				/* Suffix */
       rvv_arg_type_info (RVV_BASE_void), /* Return type */
--- 3012,3018 ----
  
  /* A static operand information for void func (scalar_type *, eew64_index_type,
   * vector_type) function registration. */
! static constexpr const rvv_op_info tuple_v_scalar_ptr_eew64_index_ops
    = {tuple_ops,				/* Types */
       OP_TYPE_v,				/* Suffix */
       rvv_arg_type_info (RVV_BASE_void), /* Return type */
*************** static CONSTEXPR const rvv_op_info tuple
*** 3020,3026 ****
  
  /* A static operand information for vector_type func (const scalar_type *)
   * function registration. */
! static CONSTEXPR const rvv_op_info tuple_v_scalar_const_ptr_size_ptr_ops
    = {tuple_ops,				  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 3020,3026 ----
  
  /* A static operand information for vector_type func (const scalar_type *)
   * function registration. */
! static constexpr const rvv_op_info tuple_v_scalar_const_ptr_size_ptr_ops
    = {tuple_ops,				  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info tuple
*** 3028,3034 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info all_v_vcreate_tuple_ops
    = {tuple_ops,				  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 3028,3034 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info all_v_vcreate_tuple_ops
    = {tuple_ops,				  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info all_v
*** 3036,3042 ****
  
  /* A static operand information for vector_type func () function registration.
   */
! static CONSTEXPR const rvv_op_info all_none_void_tuple_ops
    = {tuple_ops,				  /* Types */
       OP_TYPE_none,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 3036,3042 ----
  
  /* A static operand information for vector_type func () function registration.
   */
! static constexpr const rvv_op_info all_none_void_tuple_ops
    = {tuple_ops,				  /* Types */
       OP_TYPE_none,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info all_n
*** 3044,3050 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info all_v_vcreate_lmul1_x2_ops
    = {lmul1_ops,					/* Types */
       OP_TYPE_v,					/* Suffix */
       rvv_arg_type_info (RVV_BASE_vlmul_ext_x2), /* Return type */
--- 3044,3050 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info all_v_vcreate_lmul1_x2_ops
    = {lmul1_ops,					/* Types */
       OP_TYPE_v,					/* Suffix */
       rvv_arg_type_info (RVV_BASE_vlmul_ext_x2), /* Return type */
*************** static CONSTEXPR const rvv_op_info all_v
*** 3052,3058 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info all_v_vcreate_lmul1_x4_ops
    = {lmul1_ops,					/* Types */
       OP_TYPE_v,					/* Suffix */
       rvv_arg_type_info (RVV_BASE_vlmul_ext_x4), /* Return type */
--- 3052,3058 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info all_v_vcreate_lmul1_x4_ops
    = {lmul1_ops,					/* Types */
       OP_TYPE_v,					/* Suffix */
       rvv_arg_type_info (RVV_BASE_vlmul_ext_x4), /* Return type */
*************** static CONSTEXPR const rvv_op_info all_v
*** 3060,3066 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info all_v_vcreate_lmul1_x8_ops
    = {lmul1_ops,					/* Types */
       OP_TYPE_v,					/* Suffix */
       rvv_arg_type_info (RVV_BASE_vlmul_ext_x8), /* Return type */
--- 3060,3066 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info all_v_vcreate_lmul1_x8_ops
    = {lmul1_ops,					/* Types */
       OP_TYPE_v,					/* Suffix */
       rvv_arg_type_info (RVV_BASE_vlmul_ext_x8), /* Return type */
*************** static CONSTEXPR const rvv_op_info all_v
*** 3068,3074 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info all_v_vcreate_lmul2_x2_ops
    = {lmul2_ops,					/* Types */
       OP_TYPE_v,					/* Suffix */
       rvv_arg_type_info (RVV_BASE_vlmul_ext_x2), /* Return type */
--- 3068,3074 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info all_v_vcreate_lmul2_x2_ops
    = {lmul2_ops,					/* Types */
       OP_TYPE_v,					/* Suffix */
       rvv_arg_type_info (RVV_BASE_vlmul_ext_x2), /* Return type */
*************** static CONSTEXPR const rvv_op_info all_v
*** 3076,3082 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info all_v_vcreate_lmul2_x4_ops
    = {lmul2_ops,					/* Types */
       OP_TYPE_v,					/* Suffix */
       rvv_arg_type_info (RVV_BASE_vlmul_ext_x4), /* Return type */
--- 3076,3082 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info all_v_vcreate_lmul2_x4_ops
    = {lmul2_ops,					/* Types */
       OP_TYPE_v,					/* Suffix */
       rvv_arg_type_info (RVV_BASE_vlmul_ext_x4), /* Return type */
*************** static CONSTEXPR const rvv_op_info all_v
*** 3084,3090 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static CONSTEXPR const rvv_op_info all_v_vcreate_lmul4_x2_ops
    = {lmul4_ops,					/* Types */
       OP_TYPE_v,					/* Suffix */
       rvv_arg_type_info (RVV_BASE_vlmul_ext_x2), /* Return type */
--- 3084,3090 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration. */
! static constexpr const rvv_op_info all_v_vcreate_lmul4_x2_ops
    = {lmul4_ops,					/* Types */
       OP_TYPE_v,					/* Suffix */
       rvv_arg_type_info (RVV_BASE_vlmul_ext_x2), /* Return type */
*************** static CONSTEXPR const rvv_op_info all_v
*** 3092,3098 ****
  
  /* A static operand information for vector_type func (const scalar_type *,
   * size_t) function registration.  */
! static CONSTEXPR const rvv_op_info all_v_scalar_const_ptr_size_ops
    = {all_ops,				  /* Types  */
       OP_TYPE_v,				  /* Suffix  */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type  */
--- 3092,3098 ----
  
  /* A static operand information for vector_type func (const scalar_type *,
   * size_t) function registration.  */
! static constexpr const rvv_op_info all_v_scalar_const_ptr_size_ops
    = {all_ops,				  /* Types  */
       OP_TYPE_v,				  /* Suffix  */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type  */
*************** static CONSTEXPR const rvv_op_info all_v
*** 3100,3106 ****
  
  /* A static operand information for void func (scalar_type *, size_t,
   * vector_type) function registration.  */
! static CONSTEXPR const rvv_op_info all_v_scalar_ptr_size_ops
    = {all_ops,				/* Types  */
       OP_TYPE_v,				/* Suffix  */
       rvv_arg_type_info (RVV_BASE_void), /* Return type  */
--- 3100,3106 ----
  
  /* A static operand information for void func (scalar_type *, size_t,
   * vector_type) function registration.  */
! static constexpr const rvv_op_info all_v_scalar_ptr_size_ops
    = {all_ops,				/* Types  */
       OP_TYPE_v,				/* Suffix  */
       rvv_arg_type_info (RVV_BASE_void), /* Return type  */
*************** static CONSTEXPR const rvv_op_info all_v
*** 3108,3114 ****
  
  /* A static operand information for vector_type func (const scalar_type *,
   * index_type) function registration.  */
! static CONSTEXPR const rvv_op_info all_v_scalar_const_ptr_index_ops
    = {all_ops,				  /* Types  */
       OP_TYPE_v,				  /* Suffix  */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type  */
--- 3108,3114 ----
  
  /* A static operand information for vector_type func (const scalar_type *,
   * index_type) function registration.  */
! static constexpr const rvv_op_info all_v_scalar_const_ptr_index_ops
    = {all_ops,				  /* Types  */
       OP_TYPE_v,				  /* Suffix  */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type  */
*************** static CONSTEXPR const rvv_op_info all_v
*** 3116,3122 ****
  
  /* A static operand information for void func (scalar_type *, index_type,
   * vector_type) function registration.  */
! static CONSTEXPR const rvv_op_info all_v_scalar_ptr_index_ops
    = {all_ops,				/* Types  */
       OP_TYPE_v,				/* Suffix  */
       rvv_arg_type_info (RVV_BASE_void), /* Return type  */
--- 3116,3122 ----
  
  /* A static operand information for void func (scalar_type *, index_type,
   * vector_type) function registration.  */
! static constexpr const rvv_op_info all_v_scalar_ptr_index_ops
    = {all_ops,				/* Types  */
       OP_TYPE_v,				/* Suffix  */
       rvv_arg_type_info (RVV_BASE_void), /* Return type  */
*************** static CONSTEXPR const rvv_op_info all_v
*** 3124,3130 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration.  */
! static CONSTEXPR const rvv_op_info f32_to_bf16_nf_w_ops
    = {f32_ops,						      /* Types */
       OP_TYPE_s,						      /* Suffix */
       rvv_arg_type_info (RVV_BASE_double_trunc_bfloat_vector), /* Return type */
--- 3124,3130 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration.  */
! static constexpr const rvv_op_info f32_to_bf16_nf_w_ops
    = {f32_ops,						      /* Types */
       OP_TYPE_s,						      /* Suffix */
       rvv_arg_type_info (RVV_BASE_double_trunc_bfloat_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info f32_t
*** 3132,3138 ****
  
  /* A static operand information for vector_type func (vector_type)
   * function registration.  */
! static CONSTEXPR const rvv_op_info bf16_to_f32_wf_v_ops
    = {f32_ops,				  /* Types */
       OP_TYPE_bf16,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 3132,3138 ----
  
  /* A static operand information for vector_type func (vector_type)
   * function registration.  */
! static constexpr const rvv_op_info bf16_to_f32_wf_v_ops
    = {f32_ops,				  /* Types */
       OP_TYPE_bf16,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info bf16_
*** 3140,3146 ****
  
  /* A static operand information for vector_type func (const void_type *)
   * function registration. */
! static CONSTEXPR const rvv_op_info q_v_void_const_ptr_ops
    = {q_ops,				  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 3140,3146 ----
  
  /* A static operand information for vector_type func (const void_type *)
   * function registration. */
! static constexpr const rvv_op_info q_v_void_const_ptr_ops
    = {q_ops,				  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info q_v_v
*** 3148,3178 ****
  
  /* A static operand information for vector_type func (const void_type *)
   * function registration. */
! static CONSTEXPR const rvv_op_info qu_v_void_const_ptr_ops
    = {qu_ops,				  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
       void_const_ptr_args /* Args */};
  
! static CONSTEXPR const rvv_op_info f16_vvw_ops
    = {f16_ops,				  /* Types */
       OP_TYPE_vf,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
       vw_args /* Args */};
  
! static CONSTEXPR const rvv_op_info qexti_vvvv_ops
    = {qexti_ops,				  /* Types */
       OP_TYPE_vv,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
       vqq_args /* Args */};
  
! static CONSTEXPR const rvv_op_info qexti_su_vvvv_ops
    = {qexti_ops,				  /* Types */
       OP_TYPE_vv,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
       su_vqq_args /* Args */};
  
! static CONSTEXPR const rvv_op_info qextu_vvvv_ops
    = {qextu_ops,				  /* Types */
       OP_TYPE_vv,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
--- 3148,3178 ----
  
  /* A static operand information for vector_type func (const void_type *)
   * function registration. */
! static constexpr const rvv_op_info qu_v_void_const_ptr_ops
    = {qu_ops,				  /* Types */
       OP_TYPE_v,				  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
       void_const_ptr_args /* Args */};
  
! static constexpr const rvv_op_info f16_vvw_ops
    = {f16_ops,				  /* Types */
       OP_TYPE_vf,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
       vw_args /* Args */};
  
! static constexpr const rvv_op_info qexti_vvvv_ops
    = {qexti_ops,				  /* Types */
       OP_TYPE_vv,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
       vqq_args /* Args */};
  
! static constexpr const rvv_op_info qexti_su_vvvv_ops
    = {qexti_ops,				  /* Types */
       OP_TYPE_vv,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
       su_vqq_args /* Args */};
  
! static constexpr const rvv_op_info qextu_vvvv_ops
    = {qextu_ops,				  /* Types */
       OP_TYPE_vv,			  /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
*************** static CONSTEXPR const rvv_op_info qextu
*** 3181,3251 ****
  /* A static operand information for vector_type func (vector_type).
     Some insns just supports SEW=32, such as the crypto vector Zvkg extension.
   * function registration.  */
! static CONSTEXPR const rvv_arg_type_info vs_lmul_x2_args[]
    = {rvv_arg_type_info (RVV_BASE_vlmul_ext_x2),
       rvv_arg_type_info (RVV_BASE_vector), rvv_arg_type_info_end};
  
! static CONSTEXPR const rvv_arg_type_info vs_lmul_x4_args[]
    = {rvv_arg_type_info (RVV_BASE_vlmul_ext_x4),
       rvv_arg_type_info (RVV_BASE_vector), rvv_arg_type_info_end};
  
! static CONSTEXPR const rvv_arg_type_info vs_lmul_x8_args[]
    = {rvv_arg_type_info (RVV_BASE_vlmul_ext_x8),
       rvv_arg_type_info (RVV_BASE_vector), rvv_arg_type_info_end};
  
! static CONSTEXPR const rvv_arg_type_info vs_lmul_x16_args[]
    = {rvv_arg_type_info (RVV_BASE_vlmul_ext_x16),
       rvv_arg_type_info (RVV_BASE_vector), rvv_arg_type_info_end};
  
! static CONSTEXPR const rvv_op_info u_vvv_crypto_sew32_ops
    = {crypto_sew32_ops,			   /* Types */
       OP_TYPE_vv,					   /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
       vv_args /* Args */};
  
! static CONSTEXPR const rvv_op_info u_vvvv_crypto_sew32_ops
    = {crypto_sew32_ops,			   /* Types */
       OP_TYPE_vv,					   /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
       vvv_args /* Args */};
  
! static CONSTEXPR const rvv_op_info u_vvv_size_crypto_sew32_ops
    = {crypto_sew32_ops,			   /* Types */
       OP_TYPE_vi,					   /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
       vv_size_args /* Args */};
  
! static CONSTEXPR const rvv_op_info u_vv_size_crypto_sew32_ops
    = {crypto_sew32_ops,			   /* Types */
       OP_TYPE_vi,					   /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
       v_size_args /* Args */};
  
! static CONSTEXPR const rvv_op_info u_vvs_crypto_sew32_ops
    = {crypto_sew32_ops,			   /* Types */
       OP_TYPE_vs,					   /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
       vv_args /* Args */};
  
! static CONSTEXPR const rvv_op_info u_vvs_crypto_sew32_lmul_x2_ops
    = {crypto_sew32_ops,			   /* Types */
       OP_TYPE_vs,					   /* Suffix */
       rvv_arg_type_info (RVV_BASE_vlmul_ext_x2), /* Return type */
       vs_lmul_x2_args /* Args */};
  
! static CONSTEXPR const rvv_op_info u_vvs_crypto_sew32_lmul_x4_ops
    = {crypto_sew32_ops,			   /* Types */
       OP_TYPE_vs,					   /* Suffix */
       rvv_arg_type_info (RVV_BASE_vlmul_ext_x4), /* Return type */
       vs_lmul_x4_args /* Args */};
  
! static CONSTEXPR const rvv_op_info u_vvs_crypto_sew32_lmul_x8_ops
    = {crypto_sew32_ops,			   /* Types */
       OP_TYPE_vs,					   /* Suffix */
       rvv_arg_type_info (RVV_BASE_vlmul_ext_x8), /* Return type */
       vs_lmul_x8_args /* Args */};
  
! static CONSTEXPR const rvv_op_info u_vvs_crypto_sew32_lmul_x16_ops
    = {crypto_sew32_ops,			   /* Types */
       OP_TYPE_vs,					   /* Suffix */
       rvv_arg_type_info (RVV_BASE_vlmul_ext_x16), /* Return type */
--- 3181,3251 ----
  /* A static operand information for vector_type func (vector_type).
     Some insns just supports SEW=32, such as the crypto vector Zvkg extension.
   * function registration.  */
! static constexpr const rvv_arg_type_info vs_lmul_x2_args[]
    = {rvv_arg_type_info (RVV_BASE_vlmul_ext_x2),
       rvv_arg_type_info (RVV_BASE_vector), rvv_arg_type_info_end};
  
! static constexpr const rvv_arg_type_info vs_lmul_x4_args[]
    = {rvv_arg_type_info (RVV_BASE_vlmul_ext_x4),
       rvv_arg_type_info (RVV_BASE_vector), rvv_arg_type_info_end};
  
! static constexpr const rvv_arg_type_info vs_lmul_x8_args[]
    = {rvv_arg_type_info (RVV_BASE_vlmul_ext_x8),
       rvv_arg_type_info (RVV_BASE_vector), rvv_arg_type_info_end};
  
! static constexpr const rvv_arg_type_info vs_lmul_x16_args[]
    = {rvv_arg_type_info (RVV_BASE_vlmul_ext_x16),
       rvv_arg_type_info (RVV_BASE_vector), rvv_arg_type_info_end};
  
! static constexpr const rvv_op_info u_vvv_crypto_sew32_ops
    = {crypto_sew32_ops,			   /* Types */
       OP_TYPE_vv,					   /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
       vv_args /* Args */};
  
! static constexpr const rvv_op_info u_vvvv_crypto_sew32_ops
    = {crypto_sew32_ops,			   /* Types */
       OP_TYPE_vv,					   /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
       vvv_args /* Args */};
  
! static constexpr const rvv_op_info u_vvv_size_crypto_sew32_ops
    = {crypto_sew32_ops,			   /* Types */
       OP_TYPE_vi,					   /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
       vv_size_args /* Args */};
  
! static constexpr const rvv_op_info u_vv_size_crypto_sew32_ops
    = {crypto_sew32_ops,			   /* Types */
       OP_TYPE_vi,					   /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
       v_size_args /* Args */};
  
! static constexpr const rvv_op_info u_vvs_crypto_sew32_ops
    = {crypto_sew32_ops,			   /* Types */
       OP_TYPE_vs,					   /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
       vv_args /* Args */};
  
! static constexpr const rvv_op_info u_vvs_crypto_sew32_lmul_x2_ops
    = {crypto_sew32_ops,			   /* Types */
       OP_TYPE_vs,					   /* Suffix */
       rvv_arg_type_info (RVV_BASE_vlmul_ext_x2), /* Return type */
       vs_lmul_x2_args /* Args */};
  
! static constexpr const rvv_op_info u_vvs_crypto_sew32_lmul_x4_ops
    = {crypto_sew32_ops,			   /* Types */
       OP_TYPE_vs,					   /* Suffix */
       rvv_arg_type_info (RVV_BASE_vlmul_ext_x4), /* Return type */
       vs_lmul_x4_args /* Args */};
  
! static constexpr const rvv_op_info u_vvs_crypto_sew32_lmul_x8_ops
    = {crypto_sew32_ops,			   /* Types */
       OP_TYPE_vs,					   /* Suffix */
       rvv_arg_type_info (RVV_BASE_vlmul_ext_x8), /* Return type */
       vs_lmul_x8_args /* Args */};
  
! static constexpr const rvv_op_info u_vvs_crypto_sew32_lmul_x16_ops
    = {crypto_sew32_ops,			   /* Types */
       OP_TYPE_vs,					   /* Suffix */
       rvv_arg_type_info (RVV_BASE_vlmul_ext_x16), /* Return type */
*************** static CONSTEXPR const rvv_op_info u_vvs
*** 3255,3448 ****
     Some insns just supports SEW=64, such as the crypto vector Zvbc extension
     vclmul.vv, vclmul.vx.
   * function registration.  */
! static CONSTEXPR const rvv_op_info u_vvv_crypto_sew64_ops
    = {crypto_sew64_ops,			   /* Types */
       OP_TYPE_vv,					   /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
       vv_args /* Args */};
  
! static CONSTEXPR const rvv_op_info u_vvx_crypto_sew64_ops
    = {crypto_sew64_ops,			   /* Types */
       OP_TYPE_vx,					   /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
       vx_args /* Args */};
  
! static CONSTEXPR const rvv_op_info u_vvvv_crypto_sew64_ops
    = {crypto_sew64_ops,			   /* Types */
       OP_TYPE_vv,					   /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
       vvv_args /* Args */};
  
! static CONSTEXPR const rvv_op_info sf_vc_x_ops
    = {full_v_u_ops,					     /* Types */
       OP_TYPE_x,					     /* Suffix */
       rvv_arg_type_info (RVV_BASE_void), /* Return type */
       sf_vc_x_args /* Args */};
  
! static CONSTEXPR const rvv_op_info sf_vc_v_x_ops
    = {full_v_u_ops,					     /* Types */
       OP_TYPE_v_x,					     /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
       sf_vc_v_x_args /* Args */};
  
! static CONSTEXPR const rvv_op_info sf_vc_i_ops
    = {full_v_u_ops,					     /* Types */
       OP_TYPE_i,					     /* Suffix */
       rvv_arg_type_info (RVV_BASE_void), /* Return type */
       sf_vc_i_args /* Args */};
  
! static CONSTEXPR const rvv_op_info sf_vc_v_i_ops
    = {full_v_u_ops,					     /* Types */
       OP_TYPE_v_i,					     /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
       sf_vc_v_i_args /* Args */};
  
! static CONSTEXPR const rvv_op_info sf_vc_vv_ops
    = {full_v_u_ops,					     /* Types */
       OP_TYPE_vv,					     /* Suffix */
       rvv_arg_type_info (RVV_BASE_void), /* Return type */
       sf_vc_vv_args /* Args */};
  
! static CONSTEXPR const rvv_op_info sf_vc_v_vv_ops
    = {full_v_u_ops,					     /* Types */
       OP_TYPE_v_vv,					     /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
       sf_vc_v_vv_args /* Args */};
  
! static CONSTEXPR const rvv_op_info sf_vc_xv_ops
    = {full_v_u_ops,					     /* Types */
       OP_TYPE_xv,					     /* Suffix */
       rvv_arg_type_info (RVV_BASE_void), /* Return type */
       sf_vc_xv_args /* Args */};
  
! static CONSTEXPR const rvv_op_info sf_vc_v_xv_ops
    = {full_v_u_ops,					     /* Types */
       OP_TYPE_v_xv,					     /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
       sf_vc_v_xv_args /* Args */};
  
! static CONSTEXPR const rvv_op_info sf_vc_iv_ops
    = {full_v_u_ops,					     /* Types */
       OP_TYPE_iv,					     /* Suffix */
       rvv_arg_type_info (RVV_BASE_void), /* Return type */
       sf_vc_iv_args /* Args */};
  
! static CONSTEXPR const rvv_op_info sf_vc_v_iv_ops
    = {full_v_u_ops,					     /* Types */
       OP_TYPE_v_iv,					     /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
       sf_vc_v_iv_args /* Args */};
  
! static CONSTEXPR const rvv_op_info sf_vc_fv_ops
    = {wextu_ops,					     /* Types */
       OP_TYPE_fv,					     /* Suffix */
       rvv_arg_type_info (RVV_BASE_void), /* Return type */
       sf_vc_fv_args /* Args */};
  
! static CONSTEXPR const rvv_op_info sf_vc_v_fv_ops
    = {wextu_ops,					     /* Types */
       OP_TYPE_v_fv,					     /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
       sf_vc_v_fv_args /* Args */};
  
! static CONSTEXPR const rvv_op_info sf_vc_vvv_ops
    = {full_v_u_ops,					     /* Types */
       OP_TYPE_vvv,					     /* Suffix */
       rvv_arg_type_info (RVV_BASE_void), /* Return type */
       sf_vc_vvv_args /* Args */};
  
! static CONSTEXPR const rvv_op_info sf_vc_v_vvv_ops
    = {full_v_u_ops,					     /* Types */
       OP_TYPE_v_vvv,					     /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
       sf_vc_vvv_args /* Args */};
  
! static CONSTEXPR const rvv_op_info sf_vc_xvv_ops
    = {full_v_u_ops,					     /* Types */
       OP_TYPE_xvv,					     /* Suffix */
       rvv_arg_type_info (RVV_BASE_void), /* Return type */
       sf_vc_xvv_args /* Args */};
  
! static CONSTEXPR const rvv_op_info sf_vc_v_xvv_ops
    = {full_v_u_ops,					     /* Types */
       OP_TYPE_v_xvv,					     /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
       sf_vc_xvv_args /* Args */};
  
! static CONSTEXPR const rvv_op_info sf_vc_ivv_ops
    = {full_v_u_ops,					     /* Types */
       OP_TYPE_ivv,					     /* Suffix */
       rvv_arg_type_info (RVV_BASE_void), /* Return type */
       sf_vc_ivv_args /* Args */};
  
! static CONSTEXPR const rvv_op_info sf_vc_v_ivv_ops
    = {full_v_u_ops,					     /* Types */
       OP_TYPE_v_ivv,					     /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
       sf_vc_ivv_args /* Args */};
  
! static CONSTEXPR const rvv_op_info sf_vc_fvv_ops
    = {wextu_ops,					     /* Types */
       OP_TYPE_fvv,					     /* Suffix */
       rvv_arg_type_info (RVV_BASE_void), /* Return type */
       sf_vc_fvv_args /* Args */};
  
! static CONSTEXPR const rvv_op_info sf_vc_v_fvv_ops
    = {wextu_ops,					     /* Types */
       OP_TYPE_v_fvv,					     /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
       sf_vc_fvv_args /* Args */};
  
! static CONSTEXPR const rvv_op_info sf_vc_vvw_ops
    = {x2_u_ops,					     /* Types */
       OP_TYPE_vvw,					     /* Suffix */
       rvv_arg_type_info (RVV_BASE_void), /* Return type */
       sf_vc_vvw_args /* Args */};
  
! static CONSTEXPR const rvv_op_info sf_vc_v_vvw_ops
    = {x2_u_ops,					     /* Types */
       OP_TYPE_v_vvw,					     /* Suffix */
       rvv_arg_type_info (RVV_BASE_x2_vector), /* Return type */
       sf_vc_vvw_args /* Args */};
  
! static CONSTEXPR const rvv_op_info sf_vc_xvw_ops
    = {x2_u_ops,					     /* Types */
       OP_TYPE_xvw,					     /* Suffix */
       rvv_arg_type_info (RVV_BASE_void), /* Return type */
       sf_vc_xvw_args /* Args */};
  
! static CONSTEXPR const rvv_op_info sf_vc_v_xvw_ops
    = {x2_u_ops,					     /* Types */
       OP_TYPE_v_xvw,					     /* Suffix */
       rvv_arg_type_info (RVV_BASE_x2_vector), /* Return type */
       sf_vc_xvw_args /* Args */};
  
! static CONSTEXPR const rvv_op_info sf_vc_ivw_ops
    = {x2_u_ops,					     /* Types */
       OP_TYPE_ivw,					     /* Suffix */
       rvv_arg_type_info (RVV_BASE_void), /* Return type */
       sf_vc_ivw_args /* Args */};
  
! static CONSTEXPR const rvv_op_info sf_vc_v_ivw_ops
    = {x2_u_ops,					     /* Types */
       OP_TYPE_v_ivw,					     /* Suffix */
       rvv_arg_type_info (RVV_BASE_x2_vector), /* Return type */
       sf_vc_ivw_args /* Args */};
  
! static CONSTEXPR const rvv_op_info sf_vc_fvw_ops
    = {x2_wu_ops,					     /* Types */
       OP_TYPE_fvw,					     /* Suffix */
       rvv_arg_type_info (RVV_BASE_void), /* Return type */
       sf_vc_fvw_args /* Args */};
  
! static CONSTEXPR const rvv_op_info sf_vc_v_fvw_ops
    = {x2_wu_ops,					     /* Types */
       OP_TYPE_v_fvw,					     /* Suffix */
       rvv_arg_type_info (RVV_BASE_x2_vector), /* Return type */
       sf_vc_fvw_args /* Args */};
  
  /* A list of all RVV base function types.  */
! static CONSTEXPR const function_type_info function_types[] = {
  #define DEF_RVV_TYPE_INDEX(                                                    \
    VECTOR, MASK, SIGNED, UNSIGNED, SIGNED_EEW8_INDEX, EEW8_INDEX, EEW16_INDEX,  \
    EEW32_INDEX, EEW64_INDEX, SHIFT, DOUBLE_TRUNC, QUAD_TRUNC, QUAD_EMUL,        \
--- 3255,3448 ----
     Some insns just supports SEW=64, such as the crypto vector Zvbc extension
     vclmul.vv, vclmul.vx.
   * function registration.  */
! static constexpr const rvv_op_info u_vvv_crypto_sew64_ops
    = {crypto_sew64_ops,			   /* Types */
       OP_TYPE_vv,					   /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
       vv_args /* Args */};
  
! static constexpr const rvv_op_info u_vvx_crypto_sew64_ops
    = {crypto_sew64_ops,			   /* Types */
       OP_TYPE_vx,					   /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
       vx_args /* Args */};
  
! static constexpr const rvv_op_info u_vvvv_crypto_sew64_ops
    = {crypto_sew64_ops,			   /* Types */
       OP_TYPE_vv,					   /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
       vvv_args /* Args */};
  
! static constexpr const rvv_op_info sf_vc_x_ops
    = {full_v_u_ops,					     /* Types */
       OP_TYPE_x,					     /* Suffix */
       rvv_arg_type_info (RVV_BASE_void), /* Return type */
       sf_vc_x_args /* Args */};
  
! static constexpr const rvv_op_info sf_vc_v_x_ops
    = {full_v_u_ops,					     /* Types */
       OP_TYPE_v_x,					     /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
       sf_vc_v_x_args /* Args */};
  
! static constexpr const rvv_op_info sf_vc_i_ops
    = {full_v_u_ops,					     /* Types */
       OP_TYPE_i,					     /* Suffix */
       rvv_arg_type_info (RVV_BASE_void), /* Return type */
       sf_vc_i_args /* Args */};
  
! static constexpr const rvv_op_info sf_vc_v_i_ops
    = {full_v_u_ops,					     /* Types */
       OP_TYPE_v_i,					     /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
       sf_vc_v_i_args /* Args */};
  
! static constexpr const rvv_op_info sf_vc_vv_ops
    = {full_v_u_ops,					     /* Types */
       OP_TYPE_vv,					     /* Suffix */
       rvv_arg_type_info (RVV_BASE_void), /* Return type */
       sf_vc_vv_args /* Args */};
  
! static constexpr const rvv_op_info sf_vc_v_vv_ops
    = {full_v_u_ops,					     /* Types */
       OP_TYPE_v_vv,					     /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
       sf_vc_v_vv_args /* Args */};
  
! static constexpr const rvv_op_info sf_vc_xv_ops
    = {full_v_u_ops,					     /* Types */
       OP_TYPE_xv,					     /* Suffix */
       rvv_arg_type_info (RVV_BASE_void), /* Return type */
       sf_vc_xv_args /* Args */};
  
! static constexpr const rvv_op_info sf_vc_v_xv_ops
    = {full_v_u_ops,					     /* Types */
       OP_TYPE_v_xv,					     /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
       sf_vc_v_xv_args /* Args */};
  
! static constexpr const rvv_op_info sf_vc_iv_ops
    = {full_v_u_ops,					     /* Types */
       OP_TYPE_iv,					     /* Suffix */
       rvv_arg_type_info (RVV_BASE_void), /* Return type */
       sf_vc_iv_args /* Args */};
  
! static constexpr const rvv_op_info sf_vc_v_iv_ops
    = {full_v_u_ops,					     /* Types */
       OP_TYPE_v_iv,					     /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
       sf_vc_v_iv_args /* Args */};
  
! static constexpr const rvv_op_info sf_vc_fv_ops
    = {wextu_ops,					     /* Types */
       OP_TYPE_fv,					     /* Suffix */
       rvv_arg_type_info (RVV_BASE_void), /* Return type */
       sf_vc_fv_args /* Args */};
  
! static constexpr const rvv_op_info sf_vc_v_fv_ops
    = {wextu_ops,					     /* Types */
       OP_TYPE_v_fv,					     /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
       sf_vc_v_fv_args /* Args */};
  
! static constexpr const rvv_op_info sf_vc_vvv_ops
    = {full_v_u_ops,					     /* Types */
       OP_TYPE_vvv,					     /* Suffix */
       rvv_arg_type_info (RVV_BASE_void), /* Return type */
       sf_vc_vvv_args /* Args */};
  
! static constexpr const rvv_op_info sf_vc_v_vvv_ops
    = {full_v_u_ops,					     /* Types */
       OP_TYPE_v_vvv,					     /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
       sf_vc_vvv_args /* Args */};
  
! static constexpr const rvv_op_info sf_vc_xvv_ops
    = {full_v_u_ops,					     /* Types */
       OP_TYPE_xvv,					     /* Suffix */
       rvv_arg_type_info (RVV_BASE_void), /* Return type */
       sf_vc_xvv_args /* Args */};
  
! static constexpr const rvv_op_info sf_vc_v_xvv_ops
    = {full_v_u_ops,					     /* Types */
       OP_TYPE_v_xvv,					     /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
       sf_vc_xvv_args /* Args */};
  
! static constexpr const rvv_op_info sf_vc_ivv_ops
    = {full_v_u_ops,					     /* Types */
       OP_TYPE_ivv,					     /* Suffix */
       rvv_arg_type_info (RVV_BASE_void), /* Return type */
       sf_vc_ivv_args /* Args */};
  
! static constexpr const rvv_op_info sf_vc_v_ivv_ops
    = {full_v_u_ops,					     /* Types */
       OP_TYPE_v_ivv,					     /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
       sf_vc_ivv_args /* Args */};
  
! static constexpr const rvv_op_info sf_vc_fvv_ops
    = {wextu_ops,					     /* Types */
       OP_TYPE_fvv,					     /* Suffix */
       rvv_arg_type_info (RVV_BASE_void), /* Return type */
       sf_vc_fvv_args /* Args */};
  
! static constexpr const rvv_op_info sf_vc_v_fvv_ops
    = {wextu_ops,					     /* Types */
       OP_TYPE_v_fvv,					     /* Suffix */
       rvv_arg_type_info (RVV_BASE_vector), /* Return type */
       sf_vc_fvv_args /* Args */};
  
! static constexpr const rvv_op_info sf_vc_vvw_ops
    = {x2_u_ops,					     /* Types */
       OP_TYPE_vvw,					     /* Suffix */
       rvv_arg_type_info (RVV_BASE_void), /* Return type */
       sf_vc_vvw_args /* Args */};
  
! static constexpr const rvv_op_info sf_vc_v_vvw_ops
    = {x2_u_ops,					     /* Types */
       OP_TYPE_v_vvw,					     /* Suffix */
       rvv_arg_type_info (RVV_BASE_x2_vector), /* Return type */
       sf_vc_vvw_args /* Args */};
  
! static constexpr const rvv_op_info sf_vc_xvw_ops
    = {x2_u_ops,					     /* Types */
       OP_TYPE_xvw,					     /* Suffix */
       rvv_arg_type_info (RVV_BASE_void), /* Return type */
       sf_vc_xvw_args /* Args */};
  
! static constexpr const rvv_op_info sf_vc_v_xvw_ops
    = {x2_u_ops,					     /* Types */
       OP_TYPE_v_xvw,					     /* Suffix */
       rvv_arg_type_info (RVV_BASE_x2_vector), /* Return type */
       sf_vc_xvw_args /* Args */};
  
! static constexpr const rvv_op_info sf_vc_ivw_ops
    = {x2_u_ops,					     /* Types */
       OP_TYPE_ivw,					     /* Suffix */
       rvv_arg_type_info (RVV_BASE_void), /* Return type */
       sf_vc_ivw_args /* Args */};
  
! static constexpr const rvv_op_info sf_vc_v_ivw_ops
    = {x2_u_ops,					     /* Types */
       OP_TYPE_v_ivw,					     /* Suffix */
       rvv_arg_type_info (RVV_BASE_x2_vector), /* Return type */
       sf_vc_ivw_args /* Args */};
  
! static constexpr const rvv_op_info sf_vc_fvw_ops
    = {x2_wu_ops,					     /* Types */
       OP_TYPE_fvw,					     /* Suffix */
       rvv_arg_type_info (RVV_BASE_void), /* Return type */
       sf_vc_fvw_args /* Args */};
  
! static constexpr const rvv_op_info sf_vc_v_fvw_ops
    = {x2_wu_ops,					     /* Types */
       OP_TYPE_v_fvw,					     /* Suffix */
       rvv_arg_type_info (RVV_BASE_x2_vector), /* Return type */
       sf_vc_fvw_args /* Args */};
  
  /* A list of all RVV base function types.  */
! static constexpr const function_type_info function_types[] = {
  #define DEF_RVV_TYPE_INDEX(                                                    \
    VECTOR, MASK, SIGNED, UNSIGNED, SIGNED_EEW8_INDEX, EEW8_INDEX, EEW16_INDEX,  \
    EEW32_INDEX, EEW64_INDEX, SHIFT, DOUBLE_TRUNC, QUAD_TRUNC, QUAD_EMUL,        \
diff -Nrcpad gcc-17-20260705/gcc/config/riscv/riscv-vector-builtins.h gcc-17-20260712/gcc/config/riscv/riscv-vector-builtins.h
*** gcc-17-20260705/gcc/config/riscv/riscv-vector-builtins.h	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/riscv/riscv-vector-builtins.h	Sun Jul 12 22:32:07 2026
*************** struct function_type_info
*** 361,367 ****
  /* RVV Builtin argument information.  */
  struct rvv_arg_type_info
  {
!   CONSTEXPR rvv_arg_type_info (rvv_base_type base_type_in)
      : base_type (base_type_in)
    {}
    enum rvv_base_type base_type;
--- 361,367 ----
  /* RVV Builtin argument information.  */
  struct rvv_arg_type_info
  {
!   constexpr rvv_arg_type_info (rvv_base_type base_type_in)
      : base_type (base_type_in)
    {}
    enum rvv_base_type base_type;
diff -Nrcpad gcc-17-20260705/gcc/config/riscv/riscv.cc gcc-17-20260712/gcc/config/riscv/riscv.cc
*** gcc-17-20260705/gcc/config/riscv/riscv.cc	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/riscv/riscv.cc	Sun Jul 12 22:32:07 2026
*************** struct riscv_tune_param
*** 300,305 ****
--- 300,307 ----
    const char *jump_align;
    const char *loop_align;
    bool prefer_agnostic;
+   unsigned int small_loop_unroll_ninsns = 4;
+   unsigned int small_loop_unroll_factor = 2;
  };
  
  
*************** static const struct riscv_tune_param xt_
*** 734,739 ****
--- 736,743 ----
    "8",						/* jump_align */
    "16",						/* loop_align */
    true,						/* prefer-agnostic.  */
+   4,	/* small_loop_unroll_ninsns.  */
+   8,	/* small_loop_unroll_factor.  */
  };
  
  /* Costs to use when optimizing for Tenstorrent Ascalon 8 wide.  */
*************** riscv_vls_mode_p (machine_mode mode)
*** 2531,2537 ****
     2. RVV tuple mode.
     3. RVV vls mode.  */
  
! static bool
  riscv_vector_mode_p (machine_mode mode)
  {
    return riscv_vla_mode_p (mode) || riscv_tuple_mode_p (mode)
--- 2535,2541 ----
     2. RVV tuple mode.
     3. RVV vls mode.  */
  
! bool
  riscv_vector_mode_p (machine_mode mode)
  {
    return riscv_vla_mode_p (mode) || riscv_tuple_mode_p (mode)
*************** riscv_insn_cost (rtx_insn *insn, bool sp
*** 5080,5085 ****
--- 5084,5105 ----
    return cost;
  }
  
+ /* This function adjusts the unroll factor based on
+    the current tune parameters.  */
+ 
+ static unsigned
+ riscv_loop_unroll_adjust (unsigned nunroll, class loop *loop)
+ {
+   if (riscv_unroll_only_small_loops && !loop->unroll)
+     {
+       if (loop->ninsns <= tune_param->small_loop_unroll_ninsns)
+ 	return MIN (tune_param->small_loop_unroll_factor, nunroll);
+       else
+ 	return 1;
+     }
+   return nunroll;
+ }
+ 
  /* Implement TARGET_MAX_NOCE_IFCVT_SEQ_COST.  Like the default implementation,
     but we consider cost units of branch instructions equal to cost units of
     other instructions.  */
*************** riscv_vector_type_p (const_tree type)
*** 6922,6930 ****
    return riscv_vector::builtin_type_p (type);
  }
  
- static unsigned int
- riscv_hard_regno_nregs (unsigned int regno, machine_mode mode);
- 
  /* Subroutine of riscv_get_arg_info.  */
  
  static rtx
--- 6942,6947 ----
*************** riscv_register_move_cost (machine_mode m
*** 11186,11192 ****
  
  /* Implement TARGET_HARD_REGNO_NREGS.  */
  
! static unsigned int
  riscv_hard_regno_nregs (unsigned int regno, machine_mode mode)
  {
    if (riscv_vla_mode_p (mode))
--- 11203,11209 ----
  
  /* Implement TARGET_HARD_REGNO_NREGS.  */
  
! unsigned int
  riscv_hard_regno_nregs (unsigned int regno, machine_mode mode)
  {
    if (riscv_vla_mode_p (mode))
*************** riscv_hard_regno_nregs (unsigned int reg
*** 11242,11284 ****
    return (GET_MODE_SIZE (mode).to_constant () + UNITS_PER_WORD - 1) / UNITS_PER_WORD;
  }
  
- /* Return true if REGNO in MODE can be used as source in a widening
-    instruction with destination WIDE_REGNO in WIDE_MODE.
-    This is true if either there is no overlap at all, or the overlap
-    is in the highest-numbered part of the destination group.  */
- 
- bool
- riscv_widen_overlap_ok (unsigned int regno, machine_mode mode,
- 			unsigned int wide_regno, machine_mode wide_mode)
- {
-   /* If the referenced regno is no hard reg, allow everything.  */
-   if (wide_regno == INVALID_REGNUM)
-     return true;
- 
-   if (!V_REG_P (regno) || !V_REG_P (wide_regno))
-     return false;
- 
-   gcc_checking_assert (riscv_vector_mode_p (mode)
- 		       && riscv_vector_mode_p (wide_mode));
- 
-   unsigned int wide_nregs = riscv_hard_regno_nregs (wide_regno, wide_mode);
-   unsigned int nregs = riscv_hard_regno_nregs (regno, mode);
- 
-   /* Overlap is only allowed in the highest-numbered part of the wider
-      destination.  */
-   if (regno == wide_regno)
-     return false;
- 
-   if (regno >= wide_regno + (wide_nregs - nregs))
-     return true;
- 
-   /* No overlap is OK.  */
-   if (regno < wide_regno)
-     return true;
- 
-   return false;
- }
- 
  /* Implement TARGET_HARD_REGNO_MODE_OK.  */
  
  static bool
--- 11259,11264 ----
*************** riscv_option_override (void)
*** 12164,12169 ****
--- 12144,12159 ----
  
    flag_pcc_struct_return = 0;
  
+   /* Explicit -funroll-loops or -funroll-all-loops turns
+      -munroll-only-small-loops off, allowing the unroller to handle
+      all loops without the conservative small-loop restriction.  */
+   if ((OPTION_SET_P (flag_unroll_loops) && flag_unroll_loops)
+       || (OPTION_SET_P (flag_unroll_all_loops) && flag_unroll_all_loops))
+     {
+       if (!OPTION_SET_P (riscv_unroll_only_small_loops))
+ 	riscv_unroll_only_small_loops = 0;
+     }
+ 
    if (flag_pic)
      g_switch_value = 0;
  
*************** riscv_memtag_tag_bitsize ()
*** 16575,16580 ****
--- 16565,16572 ----
  #define TARGET_RTX_COSTS riscv_rtx_costs
  #undef TARGET_ADDRESS_COST
  #define TARGET_ADDRESS_COST riscv_address_cost
+ #undef TARGET_LOOP_UNROLL_ADJUST
+ #define TARGET_LOOP_UNROLL_ADJUST riscv_loop_unroll_adjust
  #undef TARGET_INSN_COST
  #define TARGET_INSN_COST riscv_insn_cost
  
diff -Nrcpad gcc-17-20260705/gcc/config/riscv/riscv.h gcc-17-20260712/gcc/config/riscv/riscv.h
*** gcc-17-20260705/gcc/config/riscv/riscv.h	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/riscv/riscv.h	Sun Jul 12 22:32:07 2026
*************** extern enum riscv_cc get_riscv_cc (const
*** 974,980 ****
  #define TARGET_SFB_ALU \
   ((riscv_microarchitecture == sifive_7) \
    || (riscv_microarchitecture == sifive_p400) \
!   || (riscv_microarchitecture == sifive_p600))
  
  /* True if the target supports misaligned vector loads and stores.  */
  #define TARGET_VECTOR_MISALIGN_SUPPORTED \
--- 974,981 ----
  #define TARGET_SFB_ALU \
   ((riscv_microarchitecture == sifive_7) \
    || (riscv_microarchitecture == sifive_p400) \
!   || (riscv_microarchitecture == sifive_p600) \
!   || (riscv_microarchitecture == andes_45_series))
  
  /* True if the target supports misaligned vector loads and stores.  */
  #define TARGET_VECTOR_MISALIGN_SUPPORTED \
diff -Nrcpad gcc-17-20260705/gcc/config/riscv/riscv.md gcc-17-20260712/gcc/config/riscv/riscv.md
*** gcc-17-20260705/gcc/config/riscv/riscv.md	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/riscv/riscv.md	Sun Jul 12 22:32:07 2026
***************
*** 3157,3164 ****
  	 (any_extract:GPR
         (match_operand:GPR 1 "register_operand" " r")
         (match_operand     2 "const_int_operand")
!        (match_operand     3 "const_int_operand")))
!    (clobber (match_scratch:GPR  4 "=&r"))]
    "!((TARGET_ZBS || TARGET_XTHEADBS || TARGET_ZICOND
        || TARGET_XVENTANACONDOPS || TARGET_SFB_ALU)
       && (INTVAL (operands[2]) == 1))
--- 3157,3163 ----
  	 (any_extract:GPR
         (match_operand:GPR 1 "register_operand" " r")
         (match_operand     2 "const_int_operand")
!        (match_operand     3 "const_int_operand")))]
    "!((TARGET_ZBS || TARGET_XTHEADBS || TARGET_ZICOND
        || TARGET_XVENTANACONDOPS || TARGET_SFB_ALU)
       && (INTVAL (operands[2]) == 1))
***************
*** 3169,3178 ****
          && (INTVAL (operands[2]) + INTVAL (operands[3]) == 32))"
    "#"
    "&& reload_completed"
!   [(set (match_dup 4)
       (ashift:GPR (match_dup 1) (match_dup 2)))
     (set (match_dup 0)
!      (<extract_shift>:GPR (match_dup 4) (match_dup 3)))]
  {
    int regbits = GET_MODE_BITSIZE (GET_MODE (operands[0])).to_constant ();
    int sizebits = INTVAL (operands[2]);
--- 3168,3177 ----
          && (INTVAL (operands[2]) + INTVAL (operands[3]) == 32))"
    "#"
    "&& reload_completed"
!   [(set (match_dup 0)
       (ashift:GPR (match_dup 1) (match_dup 2)))
     (set (match_dup 0)
!      (<extract_shift>:GPR (match_dup 0) (match_dup 3)))]
  {
    int regbits = GET_MODE_BITSIZE (GET_MODE (operands[0])).to_constant ();
    int sizebits = INTVAL (operands[2]);
diff -Nrcpad gcc-17-20260705/gcc/config/riscv/riscv.opt gcc-17-20260712/gcc/config/riscv/riscv.opt
*** gcc-17-20260705/gcc/config/riscv/riscv.opt	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/riscv/riscv.opt	Sun Jul 12 22:32:07 2026
*************** Enum(arcv_mpy_option) String(10c) Value(
*** 454,456 ****
--- 454,460 ----
  mmpy-option=
  Target RejectNegative Joined Enum(arcv_mpy_option) Var(arcv_mpy_option) Init(ARCV_MPY_OPTION_2C)
  The type of MPY unit used by the RMX-100 core (to be used in combination with -mtune=arc-v-rmx-100-series) (default: 2c).
+ 
+ munroll-only-small-loops
+ Target Var(riscv_unroll_only_small_loops) Init(0) Save
+ Enable conservative small loop unrolling.
diff -Nrcpad gcc-17-20260705/gcc/config/riscv/riscv.opt.urls gcc-17-20260712/gcc/config/riscv/riscv.opt.urls
*** gcc-17-20260705/gcc/config/riscv/riscv.opt.urls	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/riscv/riscv.opt.urls	Sun Jul 12 22:32:07 2026
*************** UrlSuffix(gcc/RISC-V-Options.html#index-
*** 129,131 ****
--- 129,134 ----
  
  ; skipping UrlSuffix for 'mmpy-option=' due to finding no URLs
  
+ munroll-only-small-loops
+ UrlSuffix(gcc/RISC-V-Options.html#index-munroll-only-small-loops)
+ 
diff -Nrcpad gcc-17-20260705/gcc/config/riscv/sifive-vector-builtins-bases.cc gcc-17-20260712/gcc/config/riscv/sifive-vector-builtins-bases.cc
*** gcc-17-20260705/gcc/config/riscv/sifive-vector-builtins-bases.cc	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/riscv/sifive-vector-builtins-bases.cc	Sun Jul 12 22:32:07 2026
*************** public:
*** 271,283 ****
    }
  };
  
! static CONSTEXPR const sf_vqmacc sf_vqmacc_obj;
! static CONSTEXPR const sf_vqmaccu sf_vqmaccu_obj;
! static CONSTEXPR const sf_vqmaccsu sf_vqmaccsu_obj;
! static CONSTEXPR const sf_vqmaccus sf_vqmaccus_obj;
! static CONSTEXPR const sf_vfnrclip_x_f_qf<UNSPEC_SF_VFNRCLIP> sf_vfnrclip_x_f_qf_obj;
! static CONSTEXPR const sf_vfnrclip_xu_f_qf<UNSPEC_SF_VFNRCLIPU> sf_vfnrclip_xu_f_qf_obj;
! static CONSTEXPR const sf_vc sf_vc_obj;
  
  /* Declare the function base NAME, pointing it to an instance
     of class <NAME>_obj.  */
--- 271,283 ----
    }
  };
  
! static constexpr const sf_vqmacc sf_vqmacc_obj;
! static constexpr const sf_vqmaccu sf_vqmaccu_obj;
! static constexpr const sf_vqmaccsu sf_vqmaccsu_obj;
! static constexpr const sf_vqmaccus sf_vqmaccus_obj;
! static constexpr const sf_vfnrclip_x_f_qf<UNSPEC_SF_VFNRCLIP> sf_vfnrclip_x_f_qf_obj;
! static constexpr const sf_vfnrclip_xu_f_qf<UNSPEC_SF_VFNRCLIPU> sf_vfnrclip_xu_f_qf_obj;
! static constexpr const sf_vc sf_vc_obj;
  
  /* Declare the function base NAME, pointing it to an instance
     of class <NAME>_obj.  */
diff -Nrcpad gcc-17-20260705/gcc/config/riscv/spacemit-x60.md gcc-17-20260712/gcc/config/riscv/spacemit-x60.md
*** gcc-17-20260705/gcc/config/riscv/spacemit-x60.md	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/riscv/spacemit-x60.md	Sun Jul 12 22:32:07 2026
***************
*** 116,122 ****
    (and (eq_attr "tune" "spacemit_x60")
         (eq_attr "type" "unknown,const,arith,shift,slt,multi,auipc,nop,logical,\
  			move,bitmanip,min,max,minu,maxu,clz,ctz,rotate,\
! 			condmove,crypto,mvpair,zicond,cpop"))
    "spacemit_x60_alu")
  
  (define_insn_reservation "spacemit_x60_alu2c" 2
--- 116,122 ----
    (and (eq_attr "tune" "spacemit_x60")
         (eq_attr "type" "unknown,const,arith,shift,slt,multi,auipc,nop,logical,\
  			move,bitmanip,min,max,minu,maxu,clz,ctz,rotate,\
! 			condmove,crypto,mvpair,zicond"))
    "spacemit_x60_alu")
  
  (define_insn_reservation "spacemit_x60_alu2c" 2
diff -Nrcpad gcc-17-20260705/gcc/config/riscv/t-riscv gcc-17-20260712/gcc/config/riscv/t-riscv
*** gcc-17-20260705/gcc/config/riscv/t-riscv	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/riscv/t-riscv	Sun Jul 12 22:32:07 2026
*************** $(common_out_file): $(srcdir)/config/ris
*** 203,212 ****
  build/genrvv-type-indexer.o: $(srcdir)/config/riscv/genrvv-type-indexer.cc $(BCONFIG_H) $(SYSTEM_H)	\
    $(CORETYPES_H) $(GTM_H) errors.h $(GENSUPPORT_H)
  
- build/genrvv-type-indexer$(build_exeext): build/genrvv-type-indexer.o
- 	+$(LINKER_FOR_BUILD) $(BUILD_LINKERFLAGS) $(BUILD_LDFLAGS) -o $@ \
- 	    $(filter-out $(BUILD_LIBDEPS), $^) $(BUILD_LIBS)
- 
  $(srcdir)/config/riscv/riscv-vector-builtins.def: riscv-vector-type-indexer.gen.def
  $(srcdir)/config/riscv/riscv-vector-builtins.h: $(srcdir)/config/riscv/riscv-vector-builtins.def
  $(srcdir)/config/riscv/sifive-vector-builtins-functions.def: riscv-vector-type-indexer.gen.def
--- 203,208 ----
*************** s-riscv-vector-type-indexer.gen.defs: bu
*** 219,225 ****
  	$(SHELL) $(srcdir)/../move-if-change tmp-riscv-vector-type-indexer.gen.def    riscv-vector-type-indexer.gen.def
  	$(STAMP) s-riscv-vector-type-indexer.gen.defs
  
! genprog+=rvv-type-indexer
  
  RISCV_EXT_DEFS = \
    $(srcdir)/config/riscv/riscv-ext.def \
--- 215,221 ----
  	$(SHELL) $(srcdir)/../move-if-change tmp-riscv-vector-type-indexer.gen.def    riscv-vector-type-indexer.gen.def
  	$(STAMP) s-riscv-vector-type-indexer.gen.defs
  
! genprog += rvv-type-indexer
  
  RISCV_EXT_DEFS = \
    $(srcdir)/config/riscv/riscv-ext.def \
diff -Nrcpad gcc-17-20260705/gcc/config/riscv/vector.md gcc-17-20260712/gcc/config/riscv/vector.md
*** gcc-17-20260705/gcc/config/riscv/vector.md	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/riscv/vector.md	Sun Jul 12 22:32:07 2026
***************
*** 4101,4107 ****
  	     (reg:SI VL_REGNUM)
  	     (reg:SI VTYPE_REGNUM)] UNSPEC_VPREDICATE)
  	  (any_extend:VWEXTI
! 	    (match_operand:<V_DOUBLE_TRUNC> 3 "register_operand" "Wtt,Wtt,Wtt,Wtt"))
  	  (match_operand:VWEXTI 2 "vector_merge_operand"         " vu,  0, vu,  0")))]
    "TARGET_VECTOR && !TARGET_XTHEADVECTOR"
    "v<sz>ext.vf2\t%0,%3%p1"
--- 4101,4107 ----
  	     (reg:SI VL_REGNUM)
  	     (reg:SI VTYPE_REGNUM)] UNSPEC_VPREDICATE)
  	  (any_extend:VWEXTI
! 	    (match_operand:<V_DOUBLE_TRUNC> 3 "register_operand" "Wvr,Wvr,Wvr,Wvr"))
  	  (match_operand:VWEXTI 2 "vector_merge_operand"         " vu,  0, vu,  0")))]
    "TARGET_VECTOR && !TARGET_XTHEADVECTOR"
    "v<sz>ext.vf2\t%0,%3%p1"
***************
*** 4110,4128 ****
  
  ;; Vector Quad-Widening Sign-extend and Zero-extend.
  (define_insn "@pred_<optab><mode>_vf4"
!   [(set (match_operand:VQEXTI 0 "register_operand"          "=&vr,&vr")
  	(if_then_else:VQEXTI
  	  (unspec:<VM>
! 	    [(match_operand:<VM> 1 "vector_mask_operand"       "vmWc1,vmWc1")
! 	     (match_operand 4 "vector_length_operand"          "  rvl,  rvl")
! 	     (match_operand 5 "const_int_operand"              "    i,    i")
! 	     (match_operand 6 "const_int_operand"              "    i,    i")
! 	     (match_operand 7 "const_int_operand"              "    i,    i")
  	     (reg:SI VL_REGNUM)
  	     (reg:SI VTYPE_REGNUM)] UNSPEC_VPREDICATE)
  	  (any_extend:VQEXTI
! 	    (match_operand:<V_QUAD_TRUNC> 3 "register_operand" "   vr,   vr"))
! 	  (match_operand:VQEXTI 2 "vector_merge_operand"       "   vu,    0")))]
    "TARGET_VECTOR && !TARGET_XTHEADVECTOR"
    "v<sz>ext.vf4\t%0,%3%p1"
    [(set_attr "type" "vext")
--- 4110,4128 ----
  
  ;; Vector Quad-Widening Sign-extend and Zero-extend.
  (define_insn "@pred_<optab><mode>_vf4"
!   [(set (match_operand:VQEXTI 0 "register_operand"             "=vr,  vr,  vd,  vd")
  	(if_then_else:VQEXTI
  	  (unspec:<VM>
! 	    [(match_operand:<VM> 1 "vector_mask_operand"       "Wc1, Wc1,  vm,  vm")
! 	     (match_operand 4 "vector_length_operand"          "rvl, rvl, rvl, rvl")
! 	     (match_operand 5 "const_int_operand"              "  i,   i,   i,   i")
! 	     (match_operand 6 "const_int_operand"              "  i,   i,   i,   i")
! 	     (match_operand 7 "const_int_operand"              "  i,   i,   i,   i")
  	     (reg:SI VL_REGNUM)
  	     (reg:SI VTYPE_REGNUM)] UNSPEC_VPREDICATE)
  	  (any_extend:VQEXTI
! 	    (match_operand:<V_QUAD_TRUNC> 3 "register_operand" "Wvr, Wvr, Wvr, Wvr"))
! 	  (match_operand:VQEXTI 2 "vector_merge_operand"       " vu,   0,  vu,   0")))]
    "TARGET_VECTOR && !TARGET_XTHEADVECTOR"
    "v<sz>ext.vf4\t%0,%3%p1"
    [(set_attr "type" "vext")
diff -Nrcpad gcc-17-20260705/gcc/config/rs6000/altivec.md gcc-17-20260712/gcc/config/rs6000/altivec.md
*** gcc-17-20260705/gcc/config/rs6000/altivec.md	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/rs6000/altivec.md	Sun Jul 12 22:32:07 2026
***************
*** 171,176 ****
--- 171,188 ----
     UNSPEC_SLDB
     UNSPEC_SRDB
     UNSPEC_VECTOR_SHIFT
+    UNSPEC_VUCMPRHN
+    UNSPEC_VUCMPRLN
+    UNSPEC_VUCMPRHB
+    UNSPEC_VUCMPRLB
+    UNSPEC_VUCMPRHH
+    UNSPEC_VUCMPRLH
+    UNSPEC_VUPKHSNTOB
+    UNSPEC_VUPKLSNTOB
+    UNSPEC_VUPKINT4TOBF16
+    UNSPEC_VUPKINT8TOBF16
+    UNSPEC_VUPKINT4TOFP32
+    UNSPEC_VUPKINT8TOFP32
  ])
  
  (define_c_enum "unspecv"
***************
*** 4850,4852 ****
--- 4862,5214 ----
  				  (match_dup 3)]
  				 UNSPEC_BCD_ADD_SUB)
  		    (match_dup 4)))])])
+ 
+ (define_int_attr vu_hl [(UNSPEC_VUPKHSNTOB "h") (UNSPEC_VUPKLSNTOB "l")
+ 			(UNSPEC_VUCMPRHN "h") (UNSPEC_VUCMPRLN "l")
+ 			(UNSPEC_VUCMPRHB "h") (UNSPEC_VUCMPRLB "l")
+ 			(UNSPEC_VUCMPRHH "h") (UNSPEC_VUCMPRLH "l")])
+ 
+ (define_int_attr vu_lh [(UNSPEC_VUPKHSNTOB "l") (UNSPEC_VUPKLSNTOB "h")
+ 			(UNSPEC_VUCMPRHN "l") (UNSPEC_VUCMPRLN "h")
+ 			(UNSPEC_VUCMPRHB "l") (UNSPEC_VUCMPRLB "h")
+ 			(UNSPEC_VUCMPRHH "l") (UNSPEC_VUCMPRLH "h")])
+ 
+ ;; Vector unpack instructions for future.
+ 
+ (define_int_iterator VUPKNTOB [UNSPEC_VUPKHSNTOB UNSPEC_VUPKLSNTOB])
+ 
+ (define_insn "altivec_vupk<vu_hl>sntob_direct"
+   [(set (match_operand:V16QI 0 "altivec_register_operand" "=v")
+ 	(unspec:V16QI [(match_operand:V2DI 1 "altivec_register_operand" "v")]
+ 		      VUPKNTOB))]
+   "TARGET_FUTURE && TARGET_VSX"
+   "vupk<vu_hl>sntob %0, %1"
+   [(set_attr "type" "vecperm")])
+ 
+ ;; Unpack signed nibbles to bytes.
+ ;; For big-endian, generates:
+ ;;   vupk<vu_hl>sntob operands[0], operands[1]
+ ;; For little-endian, generates (requires VSX for xxbrq):
+ ;;   vupk<vu_lh>sntob operands[0], operands[1]
+ ;;   xxbrq operands[0], operands[0]
+ ;; TARGET_VSX is required because the builtin operates on V2DI (vector
+ ;; unsigned long long), which requires -mvsx. On little-endian systems,
+ ;; the endian compensation also uses the VSX xxbrq instruction.
+ 
+ (define_expand "altivec_vupk<vu_hl>sntob"
+   [(set (match_operand:V16QI 0 "altivec_register_operand")
+ 	(unspec:V16QI [(match_operand:V2DI 1 "altivec_register_operand")]
+ 		      VUPKNTOB))]
+   "TARGET_FUTURE && TARGET_VSX"
+ {
+   if (BYTES_BIG_ENDIAN)
+     emit_insn (gen_altivec_vupk<vu_hl>sntob_direct (operands[0],
+ 						    operands[1]));
+   else
+     {
+       emit_insn (gen_altivec_vupk<vu_lh>sntob_direct (operands[0],
+ 						      operands[1]));
+       emit_insn (gen_p9_xxbrq_v16qi (operands[0], operands[0]));
+     }
+   DONE;
+ })
+ 
+ (define_insn "altivec_vupkint4tobf16"
+   [(set (match_operand:V16QI 0 "altivec_register_operand" "=v")
+ 	(unspec:V16QI [(match_operand:V8HI 1 "altivec_register_operand" "v")
+ 		       (match_operand:QI 2 "const_0_to_3_operand" "i")]
+ 		      UNSPEC_VUPKINT4TOBF16))]
+   "TARGET_FUTURE"
+   "vupkint4tobf16 %0, %1, %2"
+   [(set_attr "type" "vecperm")])
+ 
+ (define_insn "altivec_vupkint8tobf16"
+   [(set (match_operand:V16QI 0 "altivec_register_operand" "=v")
+ 	(unspec:V16QI [(match_operand:V8HI 1 "altivec_register_operand" "v")
+ 		       (match_operand:QI 2 "const_0_to_1_operand" "i")]
+ 		      UNSPEC_VUPKINT8TOBF16))]
+   "TARGET_FUTURE"
+   "vupkint8tobf16 %0, %1, %2"
+   [(set_attr "type" "vecperm")])
+ 
+ (define_insn "altivec_vupkint4tofp32"
+   [(set (match_operand:V4SF 0 "altivec_register_operand" "=v")
+         (unspec:V4SF [(match_operand:V4SI 1 "altivec_register_operand" "v")
+ 		      (match_operand:QI 2 "const_0_to_7_operand" "i")]
+ 		     UNSPEC_VUPKINT4TOFP32))]
+   "TARGET_FUTURE"
+   "vupkint4tofp32 %0, %1, %2"
+   [(set_attr "type" "vecperm")])
+ 
+ (define_insn "altivec_vupkint8tofp32"
+   [(set (match_operand:V4SF 0 "altivec_register_operand" "=v")
+ 	(unspec:V4SF [(match_operand:V4SI 1 "altivec_register_operand" "v")
+ 		      (match_operand:QI 2 "const_0_to_3_operand" "i")]
+ 		     UNSPEC_VUPKINT8TOFP32))]
+   "TARGET_FUTURE"
+   "vupkint8tofp32 %0, %1, %2"
+   [(set_attr "type" "vecperm")])
+ 
+ ;; Vector uncompress instructions for future.
+ 
+ ;; VSX splat values for vector uncompress instructions for little endian.
+ (define_int_attr vucmpr_splat [(UNSPEC_VUCMPRHN "3")
+ 			       (UNSPEC_VUCMPRLN "2")
+ 			       (UNSPEC_VUCMPRHB "7")
+ 			       (UNSPEC_VUCMPRLB "6")
+ 			       (UNSPEC_VUCMPRHH "15")
+ 			       (UNSPEC_VUCMPRLH "14")])
+ 
+ ;; Altivec PCV(Permute Control Vector) mask values for vperm used in
+ ;; little endian.
+ (define_int_attr vucmpr_pcv [(UNSPEC_VUCMPRHN "0x0f0e0d0c")
+ 			     (UNSPEC_VUCMPRLN "0x0b0a0908")
+ 			     (UNSPEC_VUCMPRHB "0x0f0e0000")
+ 			     (UNSPEC_VUCMPRLB "0x0d0c0000")])
+ 
+ ;; Values for UIM which are used in vinsw instruction which will be used in
+ ;; little-endian, to know in vector.
+ (define_int_attr vucmpr_uim [(UNSPEC_VUCMPRHN "4") (UNSPEC_VUCMPRLN "0")
+ 			     (UNSPEC_VUCMPRHB "2") (UNSPEC_VUCMPRLB "0")])
+ 
+ /* On little-endian systems, the selector/mask layout does not match
+    the architectural element ordering used by the vector uncompress
+    instructions. Byte-wise reverse the selector layout and swap the high/low
+    nibbles so that the resulting vector matches big-endian semantics.  */
+ 
+ ;; Vector Uncompress Nibbles
+ 
+ (define_int_iterator VUCMPR_N [UNSPEC_VUCMPRHN UNSPEC_VUCMPRLN])
+ 
+ (define_insn "altivec_vucmpr<vu_hl>n_direct"
+   [(set (match_operand:V8HI 0 "altivec_register_operand" "=v")
+ 	(unspec:V8HI [(match_operand:V16QI 1 "altivec_register_operand" "v")
+ 		      (match_operand:V4SI 2 "altivec_register_operand" "v")]
+ 		     VUCMPR_N))]
+   "TARGET_FUTURE"
+   "vucmpr<vu_hl>n %0, %1, %2")
+ 
+ ;; Vector uncompress nibbles.
+ ;; For big-endian, generates:
+ ;;   vucmpr<vu_hl>n operands[0], operands[1], operands[2]
+ ;; For little-endian with VSX, generates:
+ ;;   vspltw splat, operands[2], <vucmpr_splat>
+ ;;   xxbrw splat, splat
+ ;;   vspltisb shift, 4
+ ;;   vrlb rotated, bytes, shift
+ ;;   vucmpr<vu_lh>n operands[0], operands[1], selector
+ ;; For little-endian without VSX (Altivec-only), generates:
+ ;;   pli mask, <vucmpr_pcv>
+ ;;   vinsw pcv, mask, <vucmpr_uim>
+ ;;   vperm operands[2], operands[2], operands[2], perm
+ ;;   vspltisb shift, 4
+ ;;   vrlb rotated, bytes, shift
+ ;;   vucmpr<vu_lh>n operands[0], operands[1], selector
+ ;;
+ ;; Uncompress builtins require special handling on little-endian systems because
+ ;; the selector/mask layout does not match the architectural element ordering
+ ;; used by the vector uncompress instructions. The selector must be byte-wise
+ ;; reversed and the high/low nibbles swapped (via rotation) so that the
+ ;; resulting vector matches big-endian semantics.
+ 
+ (define_expand "altivec_vucmpr<vu_hl>n"
+   [(set (match_operand:V8HI 0 "altivec_register_operand")
+ 	(unspec:V8HI [(match_operand:V16QI 1 "altivec_register_operand")
+ 		      (match_operand:V4SI 2 "altivec_register_operand")]
+ 		     VUCMPR_N))]
+   "TARGET_FUTURE"
+ {
+   if (BYTES_BIG_ENDIAN)
+     {
+       emit_insn (gen_altivec_vucmpr<vu_hl>n_direct(operands[0], operands[1],
+ 						   operands[2]));
+       DONE;
+     }
+   if (TARGET_VSX)
+     {
+       rtx splat = gen_reg_rtx (V4SImode);
+       rtx shift = gen_reg_rtx (V16QImode);
+       rtx bytes = gen_reg_rtx (V16QImode);
+       rtx rotated = gen_reg_rtx (V16QImode);
+       rtx selector = gen_reg_rtx (V4SImode);
+ 
+       emit_insn (gen_altivec_vspltw_direct (splat, operands[2],
+ 					    GEN_INT (<vucmpr_splat>)));
+       emit_insn (gen_p9_xxbrw_v4si (splat, splat));
+       emit_move_insn (bytes, gen_lowpart (V16QImode, splat));
+       emit_insn (gen_altivec_vspltisb (shift, GEN_INT (4)));
+       emit_insn (gen_altivec_vrlb (rotated, bytes, shift));
+       emit_move_insn (selector, gen_lowpart (V4SImode, rotated));
+       emit_insn (gen_altivec_vucmpr<vu_lh>n_direct (operands[0], operands[1],
+ 						    selector));
+     }
+   else
+     {
+       rtx pcv = gen_reg_rtx (V4SImode);
+       rtx perm = gen_reg_rtx (V16QImode);
+       rtx mask = gen_reg_rtx (SImode);
+       rtx shift = gen_reg_rtx (V16QImode);
+       rtx bytes = gen_reg_rtx (V16QImode);
+       rtx rotated = gen_reg_rtx (V16QImode);
+       rtx selector = gen_reg_rtx (V4SImode);
+ 
+       emit_move_insn (mask, GEN_INT (<vucmpr_pcv>));
+       emit_insn (gen_vreplace_elt_v4si_inst (pcv, pcv, mask,
+ 					     GEN_INT (<vucmpr_uim>)));
+       emit_move_insn (perm, gen_lowpart (V16QImode, pcv));
+       emit_insn (gen_altivec_vperm_v4si_direct (operands[2], operands[2],
+ 						operands[2], perm));
+       emit_insn (gen_altivec_vspltisb (shift, GEN_INT (4)));
+       emit_move_insn (bytes, gen_lowpart (V16QImode, operands[2]));
+       emit_insn (gen_altivec_vrlb (rotated, bytes, shift));
+       emit_move_insn (selector, gen_lowpart (V4SImode, rotated));
+       emit_insn (gen_altivec_vucmpr<vu_lh>n_direct (operands[0], operands[1],
+ 						    selector));
+     }
+ 
+   DONE;
+ })
+ 
+ ;; Vector Uncompress Bytes
+ 
+ (define_int_iterator VUCMPR_B [UNSPEC_VUCMPRHB UNSPEC_VUCMPRLB])
+ 
+ (define_insn "altivec_vucmpr<vu_hl>b_direct"
+   [(set (match_operand:V4SI 0 "altivec_register_operand" "=v")
+ 	(unspec:V4SI [(match_operand:V8HI 1 "altivec_register_operand" "v")
+ 		      (match_operand:V8HI 2 "altivec_register_operand" "v")]
+ 		     VUCMPR_B))]
+   "TARGET_FUTURE"
+   "vucmpr<vu_hl>b %0, %1, %2"
+   [(set_attr "type" "vecperm")])
+ 
+ ;; Vector uncompress bytes.
+ ;; For big-endian, generates:
+ ;;   vucmpr<vu_hl>b operands[0], operands[1], operands[2]
+ ;; For little-endian with VSX, generates:
+ ;;   vsplth splat, operands[2], <vucmpr_splat>
+ ;;   xxbrh splat, splat
+ ;;   vspltisb shift, 4
+ ;;   vrlb rotated, bytes, shift
+ ;;   vucmpr<vu_lh>b operands[0], operands[1], selector
+ ;; For little-endian without VSX (Altivec-only), generates:
+ ;;   pli mask, <vucmpr_pcv>
+ ;;   vinsw pcv, mask, <vucmpr_uim>
+ ;;   vperm bytes, bytes, bytes, perm
+ ;;   vspltisb shift, 4
+ ;;   vrlb rotated, bytes, shift
+ ;;   vucmpr<vu_lh>b operands[0], operands[1], selector
+ ;;
+ ;; Below builtins require special handling on little-endian systems similar
+ ;; to nibbles, with selector byte-reversal and nibble swapping via rotation.
+ 
+ (define_expand "altivec_vucmpr<vu_hl>b"
+   [(set (match_operand:V4SI 0 "altivec_register_operand")
+ 	(unspec:V4SI [(match_operand:V8HI 1 "altivec_register_operand")
+ 		      (match_operand:V8HI 2 "altivec_register_operand")]
+ 		     VUCMPR_B))]
+   "TARGET_FUTURE"
+ {
+   if (BYTES_BIG_ENDIAN)
+     {
+       emit_insn (gen_altivec_vucmpr<vu_hl>b_direct (operands[0], operands[1],
+ 						    operands[2]));
+       DONE;
+     }
+   if (TARGET_VSX)
+     {
+       rtx splat = gen_reg_rtx (V8HImode);
+       rtx shift = gen_reg_rtx (V16QImode);
+       rtx bytes = gen_reg_rtx (V16QImode);
+       rtx rotated = gen_reg_rtx (V16QImode);
+       rtx selector = gen_reg_rtx (V8HImode);
+ 
+       emit_insn (gen_altivec_vsplth_direct (splat, operands[2],
+ 					    GEN_INT (<vucmpr_splat>)));
+       emit_insn (gen_p9_xxbrh_v8hi (splat, splat));
+       emit_move_insn (bytes, gen_lowpart (V16QImode, splat));
+       emit_insn (gen_altivec_vspltisb (shift, GEN_INT (4)));
+       emit_insn (gen_altivec_vrlb (rotated, bytes, shift));
+       emit_move_insn (selector, gen_lowpart (V8HImode, rotated));
+       emit_insn (gen_altivec_vucmpr<vu_lh>b_direct (operands[0], operands[1],
+ 						    selector));
+     }
+   else
+     {
+       rtx pcv = gen_reg_rtx (V4SImode);
+       rtx perm = gen_reg_rtx (V16QImode);
+       rtx mask = gen_reg_rtx (SImode);
+       rtx shift = gen_reg_rtx (V16QImode);
+       rtx bytes = gen_reg_rtx (V16QImode);
+       rtx rotated = gen_reg_rtx (V16QImode);
+       rtx selector = gen_reg_rtx (V8HImode);
+ 
+       emit_move_insn (mask, GEN_INT (<vucmpr_pcv>));
+       emit_insn (gen_vreplace_elt_v4si_inst (pcv, pcv, mask,
+ 					     GEN_INT (<vucmpr_uim>)));
+       emit_move_insn (perm, gen_lowpart (V16QImode, pcv));
+       emit_move_insn (bytes, gen_lowpart (V16QImode, operands[2]));
+       emit_insn (gen_altivec_vperm_v16qi_direct (bytes, bytes, bytes, perm));
+       emit_insn (gen_altivec_vspltisb (shift, GEN_INT (4)));
+       emit_insn (gen_altivec_vrlb (rotated, bytes, shift));
+       emit_move_insn (selector, gen_lowpart (V8HImode, rotated));
+       emit_insn (gen_altivec_vucmpr<vu_lh>b_direct (operands[0], operands[1],
+ 						    selector));
+     }
+ 
+   DONE;
+ })
+ 
+ ;; Vector Uncompress Halfwords
+ 
+ (define_int_iterator VUCMPR_H [UNSPEC_VUCMPRHH UNSPEC_VUCMPRLH])
+ 
+ (define_insn "altivec_vucmpr<vu_hl>h_direct"
+   [(set (match_operand:V2DI 0 "altivec_register_operand" "=v")
+         (unspec:V2DI [(match_operand:V4SI 1 "altivec_register_operand" "v")
+ 		      (match_operand:V16QI 2 "altivec_register_operand" "v")]
+ 		     VUCMPR_H))]
+   "TARGET_FUTURE && TARGET_VSX"
+   "vucmpr<vu_hl>h %0, %1, %2"
+   [(set_attr "type" "vecperm")])
+ 
+ ;; Vector uncompress halfwords.
+ ;; For big-endian, generates:
+ ;;   vucmpr<vu_hl>h operands[0], operands[1], operands[2]
+ ;; For little-endian, generates:
+ ;;   vspltb splat, operands[2], <vucmpr_splat>
+ ;;   vspltisb shift, 4
+ ;;   vrlb rotated, splat, shift
+ ;;   vucmpr<vu_lh>h operands[0], operands[1], rotated
+ ;;
+ ;; TARGET_VSX is required because the builtin operates on V2DI (vector
+ ;; unsigned long long), which requires -mvsx.
+ 
+ (define_expand "altivec_vucmpr<vu_hl>h"
+   [(set (match_operand:V2DI 0 "altivec_register_operand")
+         (unspec:V2DI [(match_operand:V4SI 1 "altivec_register_operand")
+ 		      (match_operand:V16QI 2 "altivec_register_operand")]
+ 		     VUCMPR_H))]
+   "TARGET_FUTURE && TARGET_VSX"
+ {
+   if (BYTES_BIG_ENDIAN)
+     {
+       emit_insn (gen_altivec_vucmpr<vu_hl>h_direct (operands[0], operands[1],
+ 						    operands[2]));
+     }
+   else
+     {
+       rtx splat = gen_reg_rtx (V16QImode);
+       rtx shift = gen_reg_rtx (V16QImode);
+       rtx rotated = gen_reg_rtx (V16QImode);
+ 
+       emit_insn (gen_altivec_vspltb_direct (splat, operands[2],
+ 					    GEN_INT (<vucmpr_splat>)));
+       emit_insn (gen_altivec_vspltisb (shift, GEN_INT (4)));
+       emit_insn (gen_altivec_vrlb (rotated, splat, shift));
+       emit_insn (gen_altivec_vucmpr<vu_lh>h_direct (operands[0], operands[1],
+ 						    rotated));
+     }
+   DONE;
+ })
+ 
diff -Nrcpad gcc-17-20260705/gcc/config/rs6000/rs6000-builtins.def gcc-17-20260712/gcc/config/rs6000/rs6000-builtins.def
*** gcc-17-20260705/gcc/config/rs6000/rs6000-builtins.def	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/rs6000/rs6000-builtins.def	Sun Jul 12 22:32:07 2026
***************
*** 3942,3993 ****
    void __builtin_vsx_stxvp (v256, unsigned long, const v256 *);
      STXVP nothing {mma,pair}
  
- [future]
-   const v256 __builtin_aes_encrypt_paired (v256, v256, const int<2>);
-     XXAESENCP xxaesencp {}
- 
-   const v256 __builtin_aes128_encrypt_paired (v256, v256);
-     XXAES128ENCP xxaes128encp {}
- 
-   const v256 __builtin_aes192_encrypt_paired (v256, v256);
-     XXAES192ENCP xxaes192encp {}
- 
-   const v256 __builtin_aes256_encrypt_paired (v256, v256);
-     XXAES256ENCP xxaes256encp {}
- 
-   const v256 __builtin_aes_decrypt_paired (v256, v256, const int<2>);
-     XXAESDECP xxaesdecp {}
- 
-   const v256 __builtin_aes128_decrypt_paired (v256, v256);
-     XXAES128DECP xxaes128decp {}
- 
-   const v256 __builtin_aes192_decrypt_paired (v256, v256);
-     XXAES192DECP xxaes192decp {}
- 
-   const v256 __builtin_aes256_decrypt_paired (v256, v256);
-     XXAES256DECP xxaes256decp {}
- 
-   const v256 __builtin_aes_genlastkey_paired (v256, const int<2>);
-     XXAESGENLKP xxaesgenlkp {}
- 
-   const v256 __builtin_aes128_genlastkey_paired (v256);
-     XXAES128GENLKP xxaes128genlkp {}
- 
-   const v256 __builtin_aes192_genlastkey_paired (v256);
-     XXAES192GENLKP xxaes192genlkp {}
- 
-   const v256 __builtin_aes256_genlastkey_paired (v256);
-     XXAES256GENLKP xxaes256genlkp {}
- 
-   const vuc __builtin_galois_field_mult (vuc, vuc, const int<1>);
-     XXGFMUL128 xxgfmul128 {}
- 
-   const vuc __builtin_galois_field_mult_gcm (vuc, vuc);
-     XXGFMUL128GCM xxgfmul128gcm {}
- 
-   const vuc __builtin_galois_field_mult_xts (vuc, vuc);
-     XXGFMUL128XTS xxgfmul128xts {}
- 
  [future-vsx]
    const vus __builtin_vsx_xvmulhuh (vus, vus);
      XVMULHUH umulv8hi3_highpart {}
--- 3942,3947 ----
***************
*** 4059,4061 ****
--- 4013,4097 ----
  
    const vuq __builtin_vsx_xsrebase3t3uqm (vuq, vuq, vuq);
      XSREBASE3T3UQM vsx_xsrebase3t3uqm {}
+ 
+   const vull __builtin_altivec_uncompresshh (vui, vuc);
+     VUCMPRHH altivec_vucmprhh {}
+ 
+   const vull __builtin_altivec_uncompresslh (vui, vuc);
+     VUCMPRLH altivec_vucmprlh {}
+ 
+   const vsc __builtin_altivec_unpack_hsn_to_byte (vull);
+     VUPKHSNTOB altivec_vupkhsntob {}
+ 
+   const vsc __builtin_altivec_unpack_lsn_to_byte (vull);
+     VUPKLSNTOB altivec_vupklsntob {}
+ 
+   const v256 __builtin_aes_encrypt_paired (v256, v256, const int<2>);
+     XXAESENCP xxaesencp {}
+ 
+   const v256 __builtin_aes128_encrypt_paired (v256, v256);
+     XXAES128ENCP xxaes128encp {}
+ 
+   const v256 __builtin_aes192_encrypt_paired (v256, v256);
+     XXAES192ENCP xxaes192encp {}
+ 
+   const v256 __builtin_aes256_encrypt_paired (v256, v256);
+     XXAES256ENCP xxaes256encp {}
+ 
+   const v256 __builtin_aes_decrypt_paired (v256, v256, const int<2>);
+     XXAESDECP xxaesdecp {}
+ 
+   const v256 __builtin_aes128_decrypt_paired (v256, v256);
+     XXAES128DECP xxaes128decp {}
+ 
+   const v256 __builtin_aes192_decrypt_paired (v256, v256);
+     XXAES192DECP xxaes192decp {}
+ 
+   const v256 __builtin_aes256_decrypt_paired (v256, v256);
+     XXAES256DECP xxaes256decp {}
+ 
+   const v256 __builtin_aes_genlastkey_paired (v256, const int<2>);
+     XXAESGENLKP xxaesgenlkp {}
+ 
+   const v256 __builtin_aes128_genlastkey_paired (v256);
+     XXAES128GENLKP xxaes128genlkp {}
+ 
+   const v256 __builtin_aes192_genlastkey_paired (v256);
+     XXAES192GENLKP xxaes192genlkp {}
+ 
+   const v256 __builtin_aes256_genlastkey_paired (v256);
+     XXAES256GENLKP xxaes256genlkp {}
+ 
+   const vuc __builtin_galois_field_mult (vuc, vuc, const int<1>);
+     XXGFMUL128 xxgfmul128 {}
+ 
+   const vuc __builtin_galois_field_mult_gcm (vuc, vuc);
+     XXGFMUL128GCM xxgfmul128gcm {}
+ 
+   const vuc __builtin_galois_field_mult_xts (vuc, vuc);
+     XXGFMUL128XTS xxgfmul128xts {}
+ 
+ [future-altivec]
+   const vus __builtin_altivec_uncompresshn (vuc, vui);
+     VUCMPRHN altivec_vucmprhn {}
+ 
+   const vui __builtin_altivec_uncompresshb (vus, vus);
+     VUCMPRHB altivec_vucmprhb {}
+ 
+   const vus __builtin_altivec_uncompressln (vuc, vui);
+     VUCMPRLN altivec_vucmprln {}
+ 
+   const vui __builtin_altivec_uncompresslb (vus, vus);
+     VUCMPRLB altivec_vucmprlb {}
+ 
+   const vuc __builtin_altivec_unpack_int4_to_bf16 (vus, const int<2>);
+     VUPKINT4TOBF16 altivec_vupkint4tobf16 {}
+ 
+   const vuc __builtin_altivec_unpack_int8_to_bf16 (vus, const int<1>);
+     VUPKINT8TOBF16 altivec_vupkint8tobf16 {}
+ 
+   const vf __builtin_altivec_unpack_int4_to_fp32 (vui, const int<3>);
+     VUPKINT4TOFP32 altivec_vupkint4tofp32 {}
+ 
+   const vf __builtin_altivec_unpack_int8_to_fp32 (vui, const int<2>);
+     VUPKINT8TOFP32 altivec_vupkint8tofp32 {}
diff -Nrcpad gcc-17-20260705/gcc/config/rs6000/rs6000-cpus.def gcc-17-20260712/gcc/config/rs6000/rs6000-cpus.def
*** gcc-17-20260705/gcc/config/rs6000/rs6000-cpus.def	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/rs6000/rs6000-cpus.def	Sun Jul 12 22:32:07 2026
***************
*** 85,91 ****
  
  /* -mcpu=future flags.  */
  #define FUTURE_MASKS_SERVER	(POWER11_MASKS_SERVER			\
! 				 | OPTION_MASK_FUTURE)
  
  /* Flags that need to be turned off if -mno-vsx.  */
  #define OTHER_VSX_VECTOR_MASKS	(OPTION_MASK_EFFICIENT_UNALIGNED_VSX	\
--- 85,92 ----
  
  /* -mcpu=future flags.  */
  #define FUTURE_MASKS_SERVER	(POWER11_MASKS_SERVER			\
! 				 | OPTION_MASK_FUTURE			\
! 				 | OPTION_MASK_DMF)
  
  /* Flags that need to be turned off if -mno-vsx.  */
  #define OTHER_VSX_VECTOR_MASKS	(OPTION_MASK_EFFICIENT_UNALIGNED_VSX	\
***************
*** 126,131 ****
--- 127,133 ----
  				 | OPTION_MASK_POWER10			\
  				 | OPTION_MASK_POWER11			\
  				 | OPTION_MASK_FUTURE			\
+ 				 | OPTION_MASK_DMF			\
  				 | OPTION_MASK_P10_FUSION		\
  				 | OPTION_MASK_HTM			\
  				 | OPTION_MASK_ISEL			\
diff -Nrcpad gcc-17-20260705/gcc/config/rs6000/rs6000-overload.def gcc-17-20260712/gcc/config/rs6000/rs6000-overload.def
*** gcc-17-20260705/gcc/config/rs6000/rs6000-overload.def	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/rs6000/rs6000-overload.def	Sun Jul 12 22:32:07 2026
***************
*** 5027,5032 ****
--- 5027,5079 ----
    vd __builtin_vsx_xxsldwi (vd, vd, const int);
      XXSLDWI_2DF  XXSLDWI_VD2
  
+ [VEC_UCMPRHN, vec_uncompresshn, __builtin_vec_uncompresshn]
+   vus __builtin_vec_uncompresshn (vuc, vui);
+     VUCMPRHN
+ 
+ [VEC_UCMPRHB, vec_uncompresshb, __builtin_vec_uncomresshb]
+   vui __builtin_vec_uncomresshb (vus, vus);
+     VUCMPRHB
+ 
+ [VEC_UCMPRHH, vec_uncompresshh, __builtin_vec_uncomresshh]
+   vull __builtin_vec_uncomresshh (vui, vuc);
+     VUCMPRHH
+ 
+ [VEC_UCMPRLN, vec_uncompressln, __builtin_vec_uncomressln]
+   vus __builtin_vec_uncomressln (vuc, vui);
+     VUCMPRLN
+ 
+ [VEC_UCMPRLB, vec_uncompresslb, __builtin_vec_uncomresslb]
+   vui __builtin_vec_uncomresslb (vus, vus);
+     VUCMPRLB
+ 
+ [VEC_UCMPRLH, vec_uncompresslh, __builtin_vec_uncomresslh]
+   vull __builtin_vec_uncomresslh (vui, vuc);
+     VUCMPRLH
+ 
+ [VEC_UNPACK_HSN_TO_BYTE, vec_unpack_hsn_to_byte, __builtin_vec_unpack_hsn_to_byte]
+   vsc __builtin_vec_unpack_hsn_to_byte (vull);
+     VUPKHSNTOB
+ 
+ [VEC_UNPACK_LSN_TO_BYTE, vec_unpack_lsn_to_byte, __builtin_vec_unpack_lsn_to_byte]
+   vsc __builtin_vec_unpack_lsn_to_byte (vull);
+     VUPKLSNTOB
+ 
+ [VEC_UNPACK_INT4_TO_BF16, vec_unpack_int4_to_bf16, __builtin_vec_unpack_int4_to_bf16]
+   vuc __builtin_vec_unpack_int4_to_bf16 (vus, const int<2>);
+     VUPKINT4TOBF16
+ 
+ [VEC_UNPACK_INT8_TO_BF16, vec_unpack_int8_to_bf16, __builtin_vec_unpack_int8_to_bf16]
+   vuc __builtin_vec_unpack_int8_to_bf16 (vus, const int<1>);
+     VUPKINT8TOBF16
+ 
+ [VEC_UNPACK_INT4_TO_FP32, vec_unpack_int4_to_fp32, __builtin_vec_unpack_int4_to_fp32]
+   vf __builtin_vec_unpack_int4_to_fp32 (vui, const int<3>);
+     VUPKINT4TOFP32
+ 
+ [VEC_UNPACK_INT8_TO_FP32, vec_unpack_int8_to_fp32, __builtin_vec_unpack_int8_to_fp32]
+   vf __builtin_vec_unpack_int8_to_fp32 (vui, const int<2>);
+     VUPKINT8TOFP32
  
  ; **************************************************************************
  ; **************************************************************************
diff -Nrcpad gcc-17-20260705/gcc/config/rs6000/rs6000.cc gcc-17-20260712/gcc/config/rs6000/rs6000.cc
*** gcc-17-20260705/gcc/config/rs6000/rs6000.cc	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/rs6000/rs6000.cc	Sun Jul 12 22:32:07 2026
*************** rs6000_option_override_internal (bool gl
*** 4381,4386 ****
--- 4381,4399 ----
        rs6000_isa_flags &= ~OPTION_MASK_MMA;
      }
  
+   /* Enable -mdense_math by default on future systems.  */
+   if (TARGET_FUTURE && (rs6000_isa_flags_explicit & OPTION_MASK_DMF) == 0)
+     rs6000_isa_flags |= OPTION_MASK_DMF;
+ 
+   /* Turn off DMF options on non-future systems.  */
+   else if (!TARGET_FUTURE && TARGET_DMF)
+     {
+       if ((rs6000_isa_flags_explicit & OPTION_MASK_DMF) != 0)
+ 	error ("%qs requires %qs", "-mdense_math", "-mcpu=future");
+ 
+       rs6000_isa_flags &= ~OPTION_MASK_DMF;
+     }
+ 
    /* Enable power10 fusion if we are tuning for power10, even if we aren't
       generating power10 instructions.  */
    if (!(rs6000_isa_flags_explicit & OPTION_MASK_P10_FUSION))
*************** static struct rs6000_opt_mask const rs60
*** 24470,24475 ****
--- 24483,24489 ----
    { "power10",			OPTION_MASK_POWER10,		false, true  },
    { "power11",			OPTION_MASK_POWER11,		false, false },
    { "future",			OPTION_MASK_FUTURE,		false, false },
+   { "dense-math",		OPTION_MASK_DMF,		false, true  },
    { "hard-dfp",			OPTION_MASK_DFP,		false, true  },
    { "htm",			OPTION_MASK_HTM,		false, true  },
    { "isel",			OPTION_MASK_ISEL,		false, true  },
diff -Nrcpad gcc-17-20260705/gcc/config/rs6000/rs6000.h gcc-17-20260712/gcc/config/rs6000/rs6000.h
*** gcc-17-20260705/gcc/config/rs6000/rs6000.h	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/rs6000/rs6000.h	Sun Jul 12 22:32:07 2026
*************** extern unsigned char rs6000_recip_bits[]
*** 691,699 ****
     words.  */
  #define LONG_LONG_TYPE_SIZE 64
  
- /* Work around rs6000_long_double_type_size dependency in ada/targtyps.cc.  */
- #define WIDEST_HARDWARE_FP_SIZE 64
- 
  /* Width in bits of a pointer.
     See also the macro `Pmode' defined below.  */
  extern unsigned rs6000_pointer_size;
--- 691,696 ----
diff -Nrcpad gcc-17-20260705/gcc/config/rs6000/rs6000.opt gcc-17-20260712/gcc/config/rs6000/rs6000.opt
*** gcc-17-20260705/gcc/config/rs6000/rs6000.opt	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/rs6000/rs6000.opt	Sun Jul 12 22:32:07 2026
*************** Target Undocumented Mask(POWER11) Var(rs
*** 599,604 ****
--- 599,608 ----
  mfuture
  Target Undocumented Mask(FUTURE) Var(rs6000_isa_flags) Warn(Do not use %<-mfuture>, use %<-mcpu=future>)
  
+ mdense-math
+ Target Mask(DMF) Var(rs6000_isa_flags)
+ Generate (do not generate) DMF (Dense Math Facility) instructions.
+ 
  mprefixed
  Target Mask(PREFIXED) Var(rs6000_isa_flags)
  Generate (do not generate) prefixed memory instructions.
diff -Nrcpad gcc-17-20260705/gcc/config/rs6000/rs6000.opt.urls gcc-17-20260712/gcc/config/rs6000/rs6000.opt.urls
*** gcc-17-20260705/gcc/config/rs6000/rs6000.opt.urls	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/rs6000/rs6000.opt.urls	Sun Jul 12 22:32:07 2026
*************** UrlSuffix(gcc/RS_002f6000-and-PowerPC-Op
*** 209,214 ****
--- 209,217 ----
  mstack-protector-guard-offset=
  UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mstack-protector-guard-offset-3)
  
+ mdense-math
+ UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mdense-math)
+ 
  mprefixed
  UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mprefixed)
  
diff -Nrcpad gcc-17-20260705/gcc/config/s390/2827.md gcc-17-20260712/gcc/config/s390/2827.md
*** gcc-17-20260705/gcc/config/s390/2827.md	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/s390/2827.md	Sun Jul 12 22:32:07 2026
***************
*** 19,29 ****
  ;; <http://www.gnu.org/licenses/>.
  
  (define_attr "zEC12_cracked" ""
!   (cond [(eq_attr "mnemonic" "cgdbr,clfxtr,cdgtr,celfbr,cxgtr,clfebr,clc,lngfr,cs,cfxbr,xc,clfdbr,basr,ex,cxlgtr,clfdtr,srdl,lpgfr,cdlgbr,cgxtr,cxlftr,nc,cxftr,cdfbr,clfxbr,cdftr,clgxbr,cgdtr,cxlgbr,mvc,clgdtr,cegbr,cfebr,cdlftr,sldl,cdlgtr,csg,chhsi,clgebr,cxgbr,cxfbr,cdlfbr,cgebr,lzxr,oc,cdgbr,brasl,cgxbr,cxlfbr,clgxtr,exrl,cfdbr,celgbr,clgdbr,lxr,cpsdr,lcgfr,bras,srda,cefbr") (const_int 1)]
          (const_int 0)))
  
  (define_attr "zEC12_expanded" ""
!   (cond [(eq_attr "mnemonic" "dlr,dsgr,d,dsgf,stam,dsgfr,dlgr,dsg,cds,dr,stm,mvc,dl,cdsg,stmy,dlg,stmg,lam") (const_int 1)]
          (const_int 0)))
  
  (define_attr "zEC12_endgroup" ""
--- 19,29 ----
  ;; <http://www.gnu.org/licenses/>.
  
  (define_attr "zEC12_cracked" ""
!   (cond [(eq_attr "mnemonic" "cgdbr,clfxtr,cdgtr,celfbr,cxgtr,clfebr,clc,lngfr,cs,cfxbr,xc,clfdbr,basr,ex,cxlgtr,clfdtr,lpgfr,cdlgbr,cgxtr,cxlftr,nc,cxftr,cdfbr,clfxbr,cdftr,clgxbr,cgdtr,cxlgbr,mvc,clgdtr,cegbr,cfebr,cdlftr,cdlgtr,csg,chhsi,clgebr,cxgbr,cxfbr,cdlfbr,cgebr,lzxr,oc,cdgbr,brasl,cgxbr,cxlfbr,clgxtr,exrl,cfdbr,celgbr,clgdbr,lxr,cpsdr,lcgfr,bras,cefbr") (const_int 1)]
          (const_int 0)))
  
  (define_attr "zEC12_expanded" ""
!   (cond [(eq_attr "mnemonic" "dsgr,dsgf,stam,dsgfr,dlgr,dsg,mvc,cdsg,dlg,stmg,lam") (const_int 1)]
          (const_int 0)))
  
  (define_attr "zEC12_endgroup" ""
***************
*** 31,42 ****
          (const_int 0)))
  
  (define_attr "zEC12_groupalone" ""
!   (cond [(eq_attr "mnemonic" "lnxbr,madb,ltxtr,clc,axtr,msebr,slbgr,xc,alcr,lpxbr,slbr,maebr,mlg,mfy,lxdtr,maeb,lxeb,nc,mxtr,sxtr,dxbr,alc,msdbr,ltxbr,lxdb,madbr,lxdbr,lxebr,mvc,m,mseb,mlr,mlgr,slb,tcxb,msdb,sqxbr,alcgr,oc,flogr,alcg,mxbr,dxtr,axbr,mr,sxbr,slbg,ml,lcxbr,bcr_flush") (const_int 1)]
          (const_int 0)))
  
  (define_insn_reservation "zEC12_simple_int" 0
    (and (eq_attr "cpu" "zEC12")
!        (eq_attr "mnemonic" "ltg,ogrk,lr,lghrl,x,asi,lhr,ar,lhrl,llgfr,clghrl,cgr,cli,agrk,ic,lrv,clg,cy,cghi,sy,clgfr,al,tm,lang,lghr,laa,ark,lh,or,icy,xi,n,llihl,afi,cs,nrk,sth,lgr,l,lcr,stey,xg,crt,slgfr,ny,ld,j,llihh,slgr,clfhsi,slg,lb,lgrl,lrl,llihf,llcr,laxg,mvghi,rllg,xrk,laag,alhsik,algfi,algr,aly,agfi,lrvr,d,crl,llgc,tmhl,algsi,lgh,icmh,clhrl,xgrk,icm,iilf,ork,cg,ldgr,lgf,iihf,llghr,sg,stam,tmhh,slgf,basr,lgb,cgfi,lax,clfit,lrvgr,nihl,ni,srdl,srk,xihf,stgrl,sthrl,algf,cgit,ng,lat,llghrl,ltgr,nihh,clgfrl,srlk,agr,ler,bcr_flush,stcy,cds,clfi,nihf,ly,clt,lgat,alg,lhy,lgfrl,clghsi,clrt,tmll,srlg,ay,sty,clr,lgfi,lan,clgt,ahik,sra,algrk,clgr,tmy,tmlh,alghsik,lcgr,mvi,ltgf,xr,larl,ldr,llgcr,clgrt,clrl,cghsi,cliy,oy,ogr,llgt,slr,chi,s,icmy,llc,ngr,clhhsi,ltgfr,llill,lhi,o,sll,clgrl,clgf,mviy,algfr,rll,sldl,lg,niy,st,sgr,ag,le,xgr,cr,stg,llilh,sr,cdsg,sllk,stoc,csg,clgit,chhsi,strl,llilf,lndfr,ngrk,clgfi,llgh,oill,la,llhrl,stc,lghi,oihl,xiy,sllg,llgf,cgrt,cl,sl,oi,oilh,nr,srak,oihh,ear,slgrk,og,c,slgfi,sthy,oilf,oiy,oihf,a,cfi,srag,brasl,alr,cgrl,llgfrl,cit,ley,exrl,lcdfr,lay,xilf,alsi,mvhhi,srl,chsi,lgfr,lrvg,cly,sgrk,ahi,nill,jg,slrk,lxr,sar,slfi,cpsdr,lcgfr,aghik,nilh,mvhi,lpdfr,xy,alrk,lao,agsi,ldy,nilf,llhr,alfi,laog,sly,aghi,bras,srda,lt,lbr,lzxr,lzdr,lzer")) "nothing")
  
  (define_insn_reservation "zEC12_simple_fp" 0
    (and (eq_attr "cpu" "zEC12")
--- 31,42 ----
          (const_int 0)))
  
  (define_attr "zEC12_groupalone" ""
!   (cond [(eq_attr "mnemonic" "lnxbr,madb,ltxtr,clc,axtr,msebr,slbgr,xc,alcr,lpxbr,slbr,maebr,mlg,lxdtr,maeb,lxeb,nc,mxtr,sxtr,dxbr,alc,msdbr,ltxbr,lxdb,madbr,lxdbr,lxebr,mvc,mseb,mlgr,slb,tcxb,msdb,sqxbr,alcgr,oc,flogr,alcg,mxbr,dxtr,axbr,sxbr,slbg,lcxbr,bcr_flush") (const_int 1)]
          (const_int 0)))
  
  (define_insn_reservation "zEC12_simple_int" 0
    (and (eq_attr "cpu" "zEC12")
!        (eq_attr "mnemonic" "ltg,ogrk,lr,lghrl,x,asi,lhr,ar,lhrl,llgfr,clghrl,cgr,cli,agrk,ic,lrv,clg,cy,cghi,sy,clgfr,al,tm,lang,lghr,laa,ark,lh,or,icy,xi,n,llihl,afi,cs,nrk,sth,lgr,l,lcr,stey,xg,crt,slgfr,ny,ld,j,llihh,slgr,clfhsi,slg,lb,lgrl,lrl,llihf,llcr,laxg,mvghi,rllg,xrk,laag,alhsik,algfi,algr,aly,agfi,lrvr,crl,llgc,tmhl,algsi,lgh,icmh,clhrl,xgrk,icm,iilf,ork,cg,ldgr,lgf,iihf,llghr,sg,stam,tmhh,slgf,basr,lgb,cgfi,lax,clfit,lrvgr,nihl,ni,srk,xihf,stgrl,sthrl,algf,cgit,ng,lat,llghrl,ltgr,nihh,clgfrl,srlk,agr,ler,bcr_flush,stcy,clfi,nihf,ly,clt,lgat,alg,lhy,lgfrl,clghsi,clrt,tmll,srlg,ay,sty,clr,lgfi,lan,clgt,ahik,sra,algrk,clgr,tmy,tmlh,alghsik,lcgr,mvi,ltgf,xr,larl,ldr,llgcr,clgrt,clrl,cghsi,cliy,oy,ogr,llgt,slr,chi,s,icmy,llc,ngr,clhhsi,ltgfr,llill,lhi,o,sll,clgrl,clgf,mviy,algfr,rll,lg,niy,st,sgr,ag,le,xgr,cr,stg,llilh,sr,cdsg,sllk,stoc,csg,clgit,chhsi,strl,llilf,lndfr,ngrk,clgfi,llgh,oill,la,llhrl,stc,lghi,oihl,xiy,sllg,llgf,cgrt,cl,sl,oi,oilh,nr,srak,oihh,ear,slgrk,og,c,slgfi,sthy,oilf,oiy,oihf,a,cfi,srag,brasl,alr,cgrl,llgfrl,cit,ley,exrl,lcdfr,lay,xilf,alsi,mvhhi,srl,chsi,lgfr,lrvg,cly,sgrk,ahi,nill,jg,slrk,lxr,sar,slfi,cpsdr,lcgfr,aghik,nilh,mvhi,lpdfr,xy,alrk,lao,agsi,ldy,nilf,llhr,alfi,laog,sly,aghi,bras,lt,lbr,lzxr,lzdr,lzer")) "nothing")
  
  (define_insn_reservation "zEC12_simple_fp" 0
    (and (eq_attr "cpu" "zEC12")
***************
*** 74,83 ****
    (and (eq_attr "cpu" "zEC12")
         (eq_attr "mnemonic" "mhy")) "nothing")
  
- (define_insn_reservation "zEC12_dlr" 25
-   (and (eq_attr "cpu" "zEC12")
-        (eq_attr "mnemonic" "dlr")) "nothing")
- 
  (define_insn_reservation "zEC12_ltxtr" 18
    (and (eq_attr "cpu" "zEC12")
         (eq_attr "mnemonic" "ltxtr")) "nothing")
--- 74,79 ----
***************
*** 142,151 ****
    (and (eq_attr "cpu" "zEC12")
         (eq_attr "mnemonic" "cgf")) "nothing")
  
- (define_insn_reservation "zEC12_lmy" 0
-   (and (eq_attr "cpu" "zEC12")
-        (eq_attr "mnemonic" "lmy")) "nothing")
- 
  (define_insn_reservation "zEC12_std" 3
    (and (eq_attr "cpu" "zEC12")
         (eq_attr "mnemonic" "std")) "nothing")
--- 138,143 ----
***************
*** 222,231 ****
    (and (eq_attr "cpu" "zEC12")
         (eq_attr "mnemonic" "ex")) "nothing")
  
- (define_insn_reservation "zEC12_mfy" 7
-   (and (eq_attr "cpu" "zEC12")
-        (eq_attr "mnemonic" "mfy")) "nothing")
- 
  (define_insn_reservation "zEC12_cxlgtr" 4
    (and (eq_attr "cpu" "zEC12")
         (eq_attr "mnemonic" "cxlgtr")) "nothing")
--- 214,219 ----
***************
*** 338,347 ****
    (and (eq_attr "cpu" "zEC12")
         (eq_attr "mnemonic" "ltxbr")) "nothing")
  
- (define_insn_reservation "zEC12_dr" 16
-   (and (eq_attr "cpu" "zEC12")
-        (eq_attr "mnemonic" "dr")) "nothing")
- 
  (define_insn_reservation "zEC12_lxdb" 3
    (and (eq_attr "cpu" "zEC12")
         (eq_attr "mnemonic" "lxdb")) "nothing")
--- 326,331 ----
***************
*** 362,371 ****
    (and (eq_attr "cpu" "zEC12")
         (eq_attr "mnemonic" "agf")) "nothing")
  
- (define_insn_reservation "zEC12_lm" 0
-   (and (eq_attr "cpu" "zEC12")
-        (eq_attr "mnemonic" "lm")) "nothing")
- 
  (define_insn_reservation "zEC12_msgfr" 6
    (and (eq_attr "cpu" "zEC12")
         (eq_attr "mnemonic" "msgfr")) "nothing")
--- 346,351 ----
***************
*** 374,383 ****
    (and (eq_attr "cpu" "zEC12")
         (eq_attr "mnemonic" "lxdbr")) "nothing")
  
- (define_insn_reservation "zEC12_stm" 0
-   (and (eq_attr "cpu" "zEC12")
-        (eq_attr "mnemonic" "stm")) "nothing")
- 
  (define_insn_reservation "zEC12_cgdtr" 2
    (and (eq_attr "cpu" "zEC12")
         (eq_attr "mnemonic" "cgdtr")) "nothing")
--- 354,359 ----
***************
*** 398,407 ****
    (and (eq_attr "cpu" "zEC12")
         (eq_attr "mnemonic" "sqdbr")) "nothing")
  
- (define_insn_reservation "zEC12_dl" 25
-   (and (eq_attr "cpu" "zEC12")
-        (eq_attr "mnemonic" "dl")) "nothing")
- 
  (define_insn_reservation "zEC12_cfebr" 2
    (and (eq_attr "cpu" "zEC12")
         (eq_attr "mnemonic" "cfebr")) "nothing")
--- 374,379 ----
***************
*** 414,423 ****
    (and (eq_attr "cpu" "zEC12")
         (eq_attr "mnemonic" "lnr")) "nothing")
  
- (define_insn_reservation "zEC12_m" 7
-   (and (eq_attr "cpu" "zEC12")
-        (eq_attr "mnemonic" "m")) "nothing")
- 
  (define_insn_reservation "zEC12_ipm" 3
    (and (eq_attr "cpu" "zEC12")
         (eq_attr "mnemonic" "ipm")) "nothing")
--- 386,391 ----
***************
*** 434,443 ****
    (and (eq_attr "cpu" "zEC12")
         (eq_attr "mnemonic" "ddbr")) "nothing")
  
- (define_insn_reservation "zEC12_stmy" 0
-   (and (eq_attr "cpu" "zEC12")
-        (eq_attr "mnemonic" "stmy")) "nothing")
- 
  (define_insn_reservation "zEC12_ste" 4
    (and (eq_attr "cpu" "zEC12")
         (eq_attr "mnemonic" "ste")) "nothing")
--- 402,407 ----
***************
*** 446,455 ****
    (and (eq_attr "cpu" "zEC12")
         (eq_attr "mnemonic" "ahy")) "nothing")
  
- (define_insn_reservation "zEC12_mlr" 7
-   (and (eq_attr "cpu" "zEC12")
-        (eq_attr "mnemonic" "mlr")) "nothing")
- 
  (define_insn_reservation "zEC12_sqeb" 29
    (and (eq_attr "cpu" "zEC12")
         (eq_attr "mnemonic" "sqeb")) "nothing")
--- 410,415 ----
***************
*** 562,571 ****
    (and (eq_attr "cpu" "zEC12")
         (eq_attr "mnemonic" "axbr")) "nothing")
  
- (define_insn_reservation "zEC12_mr" 7
-   (and (eq_attr "cpu" "zEC12")
-        (eq_attr "mnemonic" "mr")) "nothing")
- 
  (define_insn_reservation "zEC12_stmg" 0
    (and (eq_attr "cpu" "zEC12")
         (eq_attr "mnemonic" "stmg")) "nothing")
--- 522,527 ----
***************
*** 598,607 ****
    (and (eq_attr "cpu" "zEC12")
         (eq_attr "mnemonic" "slbg")) "nothing")
  
- (define_insn_reservation "zEC12_ml" 7
-   (and (eq_attr "cpu" "zEC12")
-        (eq_attr "mnemonic" "ml")) "nothing")
- 
  (define_insn_reservation "zEC12_lam" 0
    (and (eq_attr "cpu" "zEC12")
         (eq_attr "mnemonic" "lam")) "nothing")
--- 554,559 ----
diff -Nrcpad gcc-17-20260705/gcc/config/s390/2964.md gcc-17-20260712/gcc/config/s390/2964.md
*** gcc-17-20260705/gcc/config/s390/2964.md	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/s390/2964.md	Sun Jul 12 22:32:07 2026
*************** icmy,icy,iihf,iilf,ipm,la,larl,lay,lb,lb
*** 31,37 ****
  lgfrl,lgh,lghi,lghr,lghrl,lgr,lh,lhi,lhr,lhrl,lhy,llcr,llgfr,llghr,llgtr,\
  llhr,llihf,llihh,llihl,llilf,llilh,llill,lngr,lnr,loc,locg,locghi,locgr,\
  lochi,locr,lpgr,lpr,lr,lrv,lrvg,lrvgr,lrvh,lrvr,lt,ltg,ltgf,ltgfr,ltgr,ltr,\
! m,mfy,mghi,mh,mhi,mhy,ml,mlg,mlgr,mlr,mr,ms,msfi,msg,msgf,msgfi,msgfr,\
  msgr,msr,msy,n,ng,ngr,ngrk,nihf,nihh,nihl,nilf,nilh,nill,nr,nrk,ny,o,og,\
  ogr,ogrk,oihf,oihh,oihl,oilf,oilh,oill,or,ork,oy,pfpo,popcnt,ppa,risbg,\
  risbgn,rll,rllg,s,sg,sgf,sgfr,sgr,sgrk,sh,shy,sl,slb,slbg,slbgr,slbr,slfi,\
--- 31,37 ----
  lgfrl,lgh,lghi,lghr,lghrl,lgr,lh,lhi,lhr,lhrl,lhy,llcr,llgfr,llghr,llgtr,\
  llhr,llihf,llihh,llihl,llilf,llilh,llill,lngr,lnr,loc,locg,locghi,locgr,\
  lochi,locr,lpgr,lpr,lr,lrv,lrvg,lrvgr,lrvh,lrvr,lt,ltg,ltgf,ltgfr,ltgr,ltr,\
! mghi,mh,mhi,mhy,mlg,mlgr,ms,msfi,msg,msgf,msgfi,msgfr,\
  msgr,msr,msy,n,ng,ngr,ngrk,nihf,nihh,nihl,nilf,nilh,nill,nr,nrk,ny,o,og,\
  ogr,ogrk,oihf,oihh,oihl,oilf,oilh,oill,or,ork,oy,pfpo,popcnt,ppa,risbg,\
  risbgn,rll,rllg,s,sg,sgf,sgfr,sgr,sgrk,sh,shy,sl,slb,slbg,slbgr,slbr,slfi,\
*************** xiy")
*** 53,59 ****
   (const_int 1)] (const_int 0)))
  
  (define_attr "z13_unit_fxd" ""
! (cond [(eq_attr "mnemonic" "dlgr,dlr,dr,dsgfr,dsgr")
   (const_int 1)] (const_int 0)))
  
  (define_attr "z13_unit_lsu" ""
--- 53,59 ----
   (const_int 1)] (const_int 0)))
  
  (define_attr "z13_unit_fxd" ""
! (cond [(eq_attr "mnemonic" "dlgr,dsgfr,dsgr")
   (const_int 1)] (const_int 0)))
  
  (define_attr "z13_unit_lsu" ""
*************** chsi,chy,cl,clc,clfhsi,clg,clgf,clgfrl,c
*** 63,70 ****
  cliy,clm,clmy,clrl,clt,cly,crl,cy,ddb,deb,ear,ic,icm,icmh,icmy,icy,l,laa,\
  laag,lan,lang,lao,laog,lat,lax,laxg,lb,lcbb,ld,lde,ldeb,ldy,le,ley,lg,lgat,\
  lgb,lgf,lgfrl,lgh,lghrl,lgrl,lh,lhrl,lhy,llc,llgc,llgf,llgfrl,llgh,llghrl,\
! llgt,llh,llhrl,loc,locg,lrl,lrv,lrvg,lrvh,lt,ltg,ltgf,ly,m,madb,maeb,meeb,\
! mfy,mh,mhy,ml,mlg,ms,msdb,mseb,msg,msgf,msy,mvghi,mvhhi,mvhi,mvi,mviy,n,\
  ng,ni,niy,ntstg,ny,o,og,oi,oiy,oy,s,sar,sdb,seb,sfpc,sg,sgf,sh,shy,sl,\
  slb,slbg,slg,slgf,sly,sqdb,sqeb,st,stc,stcy,std,stdy,ste,stey,stg,stgrl,\
  sth,sthrl,sthy,stoc,stocg,strl,strv,strvg,strvh,sty,sy,tabort,tm,tmy,vl,\
--- 63,70 ----
  cliy,clm,clmy,clrl,clt,cly,crl,cy,ddb,deb,ear,ic,icm,icmh,icmy,icy,l,laa,\
  laag,lan,lang,lao,laog,lat,lax,laxg,lb,lcbb,ld,lde,ldeb,ldy,le,ley,lg,lgat,\
  lgb,lgf,lgfrl,lgh,lghrl,lgrl,lh,lhrl,lhy,llc,llgc,llgf,llgfrl,llgh,llghrl,\
! llgt,llh,llhrl,loc,locg,lrl,lrv,lrvg,lrvh,lt,ltg,ltgf,ly,madb,maeb,meeb,\
! mh,mhy,mlg,ms,msdb,mseb,msg,msgf,msy,mvghi,mvhhi,mvhi,mvi,mviy,n,\
  ng,ni,niy,ntstg,ny,o,og,oi,oiy,oy,s,sar,sdb,seb,sfpc,sg,sgf,sh,shy,sl,\
  slb,slbg,slg,slgf,sly,sqdb,sqeb,st,stc,stcy,std,stdy,ste,stey,stg,stgrl,\
  sth,sthrl,sthy,stoc,stocg,strl,strv,strvg,strvh,sty,sy,tabort,tm,tmy,vl,\
*************** kdtr,kxtr,wfkdb,wfksb")
*** 117,137 ****
  (cond [(eq_attr "mnemonic" "bas,basr,cdfbr,cdftr,cdgbr,cdgtr,cdlfbr,\
  cdlftr,cdlgbr,cdlgtr,cefbr,cegbr,celfbr,celgbr,cfdbr,cfebr,cfxbr,cgdbr,cgdtr,\
  cgebr,cgxbr,cgxtr,chhsi,clfdbr,clfebr,clfxbr,clfxtr,clgdbr,clgdtr,clgebr,\
! clgxbr,clgxtr,cs,csg,csy,d,efpc,ex,lcgfr,lngfr,lpgfr,lpq,lxr,lzxr,rnsbg,\
  rosbg,rxsbg,stpq,vgef,vgeg,vscef,vsceg,vsteb")
   (const_int 1)] (const_int 0)))
  
  (define_attr "z13_expanded" ""
! (cond [(eq_attr "mnemonic" "cds,cdsg,cdsy,cxfbr,cxftr,cxgbr,cxgtr,\
! cxlftr,cxlgbr,cxlgtr,dl,dlg,dsg,dsgf,lam,lm,lmg,lmy,sldl,srda,srdl,stam,stm,\
! stmg,stmy,tbegin,tbeginc")
   (const_int 1)] (const_int 0)))
  
  (define_attr "z13_groupalone" ""
  (cond [(eq_attr "mnemonic" "alc,alcg,alcgr,alcr,axbr,axtr,clc,cxbr,\
! cxtr,dlgr,dlr,dr,dsgfr,dsgr,dxbr,dxtr,fixbr,fixbra,fixtr,flogr,lcxbr,lnxbr,\
! lpxbr,ltxbr,ltxtr,lxdb,lxdbr,lxdtr,lxeb,lxebr,m,madb,maeb,maebr,mfy,ml,mlg,\
! mlgr,mlr,mr,msdb,mseb,msebr,mvc,mxbr,mxtr,oc,sfpc,slb,slbg,slbgr,slbr,\
  sqxbr,sxbr,sxtr,tabort,tcxb,tdcxt,tend,xc,kxbr,kxtr")
   (const_int 1)] (const_int 0)))
  
--- 117,137 ----
  (cond [(eq_attr "mnemonic" "bas,basr,cdfbr,cdftr,cdgbr,cdgtr,cdlfbr,\
  cdlftr,cdlgbr,cdlgtr,cefbr,cegbr,celfbr,celgbr,cfdbr,cfebr,cfxbr,cgdbr,cgdtr,\
  cgebr,cgxbr,cgxtr,chhsi,clfdbr,clfebr,clfxbr,clfxtr,clgdbr,clgdtr,clgebr,\
! clgxbr,clgxtr,cs,csg,csy,efpc,ex,lcgfr,lngfr,lpgfr,lpq,lxr,lzxr,rnsbg,\
  rosbg,rxsbg,stpq,vgef,vgeg,vscef,vsceg,vsteb")
   (const_int 1)] (const_int 0)))
  
  (define_attr "z13_expanded" ""
! (cond [(eq_attr "mnemonic" "cdsg,cxfbr,cxftr,cxgbr,cxgtr,\
! cxlftr,cxlgbr,cxlgtr,dlg,dsg,dsgf,lam,lmg,stam,\
! stmg,tbegin,tbeginc")
   (const_int 1)] (const_int 0)))
  
  (define_attr "z13_groupalone" ""
  (cond [(eq_attr "mnemonic" "alc,alcg,alcgr,alcr,axbr,axtr,clc,cxbr,\
! cxtr,dlgr,dsgfr,dsgr,dxbr,dxtr,fixbr,fixbra,fixtr,flogr,lcxbr,lnxbr,\
! lpxbr,ltxbr,ltxtr,lxdb,lxdbr,lxdtr,lxeb,lxebr,madb,maeb,maebr,mlg,\
! mlgr,msdb,mseb,msebr,mvc,mxbr,mxtr,oc,sfpc,slb,slbg,slbgr,slbr,\
  sqxbr,sxbr,sxtr,tabort,tcxb,tdcxt,tend,xc,kxbr,kxtr")
   (const_int 1)] (const_int 0)))
  
*************** lgr,lh,lhi,lhr,lhrl,lhy,llcr,llgfr,llghr
*** 159,166 ****
  llilf,llilh,llill,lndfr,lpdfr,lr,lrv,lrvg,lrvgr,lrvh,lrvr,lt,ltg,ltgf,ltgfr,\
  ltgr,ltr,lzdr,lzer,n,ng,ngr,ngrk,nihf,nihh,nihl,nilf,nilh,nill,nop,nopr,nr,\
  nrk,ny,o,og,ogr,ogrk,oihf,oihh,oihl,oilf,oilh,oill,or,ork,oy,pfpo,ppa,\
! risbg,risbgn,rll,rllg,s,sg,sgr,sgrk,sl,sldl,slfi,slg,slgf,slgfi,slgfr,slgr,\
! slgrk,sll,sllg,sllk,slr,slrk,sly,sr,sra,srag,srak,srda,srdl,srl,srlg,srlk,\
  sy,tm,tmh,tmhh,tmhl,tml,tmlh,tmll,tmy,vlr,vlvgb,vlvgf,vlvgg,vlvgh,x,xg,\
  xgr,xgrk,xihf,xilf,xr,xrk,xy")) "nothing")
  
--- 159,166 ----
  llilf,llilh,llill,lndfr,lpdfr,lr,lrv,lrvg,lrvgr,lrvh,lrvr,lt,ltg,ltgf,ltgfr,\
  ltgr,ltr,lzdr,lzer,n,ng,ngr,ngrk,nihf,nihh,nihl,nilf,nilh,nill,nop,nopr,nr,\
  nrk,ny,o,og,ogr,ogrk,oihf,oihh,oihl,oilf,oilh,oill,or,ork,oy,pfpo,ppa,\
! risbg,risbgn,rll,rllg,s,sg,sgr,sgrk,sl,slfi,slg,slgf,slgfi,slgfr,slgr,\
! slgrk,sll,sllg,sllk,slr,slrk,sly,sr,sra,srag,srak,srl,srlg,srlk,\
  sy,tm,tmh,tmhh,tmhl,tml,tmlh,tmll,tmy,vlr,vlvgb,vlvgf,vlvgg,vlvgh,x,xg,\
  xgr,xgrk,xihf,xilf,xr,xrk,xy")) "nothing")
  
*************** wfchxb,wflcdb,wflcsb,wflcxb,wflndb,wflns
*** 192,199 ****
  (define_insn_reservation "z13_2" 2
    (and (eq_attr "cpu" "z13")
  (eq_attr "mnemonic" "cdb,cdbr,cebr,ear,ipm,l,lcbb,lcdbr,lcebr,ld,lde,\
! ldy,lg,lgdr,lgrl,llc,llgc,llgf,llgfrl,llgh,llghrl,llgt,llh,llhrl,lm,lmg,\
! lmy,lndbr,lnebr,lpdbr,lpebr,lrl,ltdbr,ltebr,ly,popcnt,sar,tcdb,tceb,\
  vceqbs,vceqfs,vceqgs,vceqhs,vchbs,vchfs,vchgs,vchhs,vchlbs,vchlfs,vchlgs,\
  vchlhs,vfcedbs,vfcesbs,vfchdbs,vfchedbs,vfchesbs,vfchsbs,vfeeb,vfeef,vfeeh,\
  vfeneb,vfenef,vfeneh,vfenezb,vfenezf,vfenezh,vftcidb,vftcisb,vistrb,vistrf,\
--- 192,199 ----
  (define_insn_reservation "z13_2" 2
    (and (eq_attr "cpu" "z13")
  (eq_attr "mnemonic" "cdb,cdbr,cebr,ear,ipm,l,lcbb,lcdbr,lcebr,ld,lde,\
! ldy,lg,lgdr,lgrl,llc,llgc,llgf,llgfrl,llgh,llghrl,llgt,llh,llhrl,lmg,\
! lndbr,lnebr,lpdbr,lpebr,lrl,ltdbr,ltebr,ly,popcnt,sar,tcdb,tceb,\
  vceqbs,vceqfs,vceqgs,vceqhs,vchbs,vchfs,vchgs,vchhs,vchlbs,vchlfs,vchlgs,\
  vchlhs,vfcedbs,vfcesbs,vfchdbs,vfchedbs,vfchesbs,vfchsbs,vfeeb,vfeef,vfeeh,\
  vfeneb,vfenef,vfeneh,vfenezb,vfenezf,vfenezh,vftcidb,vftcisb,vistrb,vistrf,\
*************** wfchexbs,wfchxbs,wfcsb,kebr,kdb,kdbr,wfk
*** 203,209 ****
  
  (define_insn_reservation "z13_3" 3
    (and (eq_attr "cpu" "z13")
! (eq_attr "mnemonic" "cds,cdsy,std,stdy,ste,stey,vcksm,vfeezbs,\
  vfeezhs,vgfmab,vgfmaf,vgfmag,vgfmah,vgfmb,vgfmf,vgfmg,vgfmh,vistrbs,vistrfs,\
  vl,vlbb,vlgvf,vlgvg,vlgvh,vll,vmaeb,vmaef,vmaeh,vmahb,vmahf,vmahh,vmalb,\
  vmaleb,vmalef,vmaleh,vmalf,vmalhb,vmalhf,vmalhh,vmalhw,vmalob,vmalof,vmaloh,\
--- 203,209 ----
  
  (define_insn_reservation "z13_3" 3
    (and (eq_attr "cpu" "z13")
! (eq_attr "mnemonic" "std,stdy,ste,stey,vcksm,vfeezbs,\
  vfeezhs,vgfmab,vgfmaf,vgfmag,vgfmah,vgfmb,vgfmf,vgfmg,vgfmh,vistrbs,vistrfs,\
  vl,vlbb,vlgvf,vlgvg,vlgvh,vll,vmaeb,vmaef,vmaeh,vmahb,vmahf,vmahh,vmalb,\
  vmaleb,vmalef,vmaleh,vmalf,vmalhb,vmalhf,vmalhh,vmalhw,vmalob,vmalof,vmaloh,\
*************** mh,mhi,mhy,mvc,oc,tabort,tbegin,tbeginc,
*** 219,226 ****
  (define_insn_reservation "z13_5" 5
    (and (eq_attr "cpu" "z13")
  (eq_attr "mnemonic" "alc,alcg,alcgr,alcr,cs,csg,csy,lngfr,lpgfr,ms,\
! msfi,msgf,msgfi,msgfr,msr,msy,rnsbg,rosbg,rxsbg,slb,slbg,slbgr,slbr,stm,\
! stmg,stmy")) "nothing")
  
  (define_insn_reservation "z13_6" 6
    (and (eq_attr "cpu" "z13")
--- 219,226 ----
  (define_insn_reservation "z13_5" 5
    (and (eq_attr "cpu" "z13")
  (eq_attr "mnemonic" "alc,alcg,alcgr,alcr,cs,csg,csy,lngfr,lpgfr,ms,\
! msfi,msgf,msgfi,msgfr,msr,msy,rnsbg,rosbg,rxsbg,slb,slbg,slbgr,slbr,\
! stmg")) "nothing")
  
  (define_insn_reservation "z13_6" 6
    (and (eq_attr "cpu" "z13")
*************** vfmsdb,vfmssb,vfsdb,vfssb,vldeb,vledb,kd
*** 246,252 ****
  (define_insn_reservation "z13_10" 10
    (and (eq_attr "cpu" "z13")
  (eq_attr "mnemonic" "cdfbr,cdgbr,cdlfbr,cdlgbr,cefbr,cegbr,celfbr,\
! celgbr,flogr,m,madb,maeb,maebr,mfy,ml,mlr,mr,msdb,mseb,msebr")) "nothing")
  
  (define_insn_reservation "z13_11" 11
    (and (eq_attr "cpu" "z13")
--- 246,252 ----
  (define_insn_reservation "z13_10" 10
    (and (eq_attr "cpu" "z13")
  (eq_attr "mnemonic" "cdfbr,cdgbr,cdlfbr,cdlgbr,cefbr,cegbr,celfbr,\
! celgbr,flogr,madb,maeb,maebr,msdb,mseb,msebr")) "nothing")
  
  (define_insn_reservation "z13_11" 11
    (and (eq_attr "cpu" "z13")
*************** ltxbr,ltxtr,lxdtr,sxbr,sxtr")) "nothing"
*** 269,275 ****
  (define_insn_reservation "z13_20" 20
    (and (eq_attr "cpu" "z13")
  (eq_attr "mnemonic" "cdftr,cdgtr,cdlftr,cdlgtr,cgdtr,cgxtr,clfxtr,\
! clgdtr,clgxtr,cxftr,cxgtr,cxlftr,cxlgtr,d,ddb,ddbr,ddtr,deb,debr,dl,dlg,dlgr,\
! dlr,dr,dsg,dsgf,dsgfr,dsgr,dxbr,dxtr,efpc,mdtr,mxbr,mxtr,sqdb,sqdbr,sqeb,\
  sqebr,sqxbr,vfddb,vfdsb,vfsqdb,vfsqsb,wfddb,wfdsb,wfdxb,wfsqdb,wfsqxb")) "nothing")
  
--- 269,275 ----
  (define_insn_reservation "z13_20" 20
    (and (eq_attr "cpu" "z13")
  (eq_attr "mnemonic" "cdftr,cdgtr,cdlftr,cdlgtr,cgdtr,cgxtr,clfxtr,\
! clgdtr,clgxtr,cxftr,cxgtr,cxlftr,cxlgtr,ddb,ddbr,ddtr,deb,debr,dlg,dlgr,\
! dsg,dsgf,dsgfr,dsgr,dxbr,dxtr,efpc,mdtr,mxbr,mxtr,sqdb,sqdbr,sqeb,\
  sqebr,sqxbr,vfddb,vfdsb,vfsqdb,vfsqsb,wfddb,wfdsb,wfdxb,wfsqdb,wfsqxb")) "nothing")
  
diff -Nrcpad gcc-17-20260705/gcc/config/s390/3906.md gcc-17-20260712/gcc/config/s390/3906.md
*** gcc-17-20260705/gcc/config/s390/3906.md	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/s390/3906.md	Sun Jul 12 22:32:07 2026
*************** icmh,icmy,icy,iihf,iilf,ipm,la,larl,lay,
*** 31,37 ****
  lgfr,lgfrl,lgh,lghi,lghr,lghrl,lgr,lh,lhi,lhr,lhrl,lhy,llcr,llgfr,llghr,\
  llgtr,llhr,llihf,llihh,llihl,llilf,llilh,llill,lngr,lnr,loc,locg,locghi,\
  locgr,lochi,locr,lpgr,lpr,lr,lrv,lrvg,lrvgr,lrvh,lrvr,lt,ltg,ltgf,ltgfr,\
! ltgr,ltr,m,mfy,mg,mgh,mghi,mgrk,mh,mhi,mhy,ml,mlg,mlgr,mlr,mr,ms,msfi,msg,\
  msgf,msgfi,msgfr,msgr,msgrkc,msr,msrkc,msy,n,ng,ngr,ngrk,nihf,nihh,nihl,\
  nilf,nilh,nill,nr,nrk,ny,o,og,ogr,ogrk,oihf,oihh,oihl,oilf,oilh,oill,or,\
  ork,oy,pfpo,popcnt,risbg,risbgn,rll,rllg,s,sg,sgf,sgfr,sgh,sgr,sgrk,sh,\
--- 31,37 ----
  lgfr,lgfrl,lgh,lghi,lghr,lghrl,lgr,lh,lhi,lhr,lhrl,lhy,llcr,llgfr,llghr,\
  llgtr,llhr,llihf,llihh,llihl,llilf,llilh,llill,lngr,lnr,loc,locg,locghi,\
  locgr,lochi,locr,lpgr,lpr,lr,lrv,lrvg,lrvgr,lrvh,lrvr,lt,ltg,ltgf,ltgfr,\
! ltgr,ltr,mg,mgh,mghi,mgrk,mh,mhi,mhy,mlg,mlgr,ms,msfi,msg,\
  msgf,msgfi,msgfr,msgr,msgrkc,msr,msrkc,msy,n,ng,ngr,ngrk,nihf,nihh,nihl,\
  nilf,nilh,nill,nr,nrk,ny,o,og,ogr,ogrk,oihf,oihh,oihl,oilf,oilh,oill,or,\
  ork,oy,pfpo,popcnt,risbg,risbgn,rll,rllg,s,sg,sgf,sgfr,sgh,sgr,sgrk,sh,\
*************** vstrl,vstrlr,xi,xiy")
*** 54,60 ****
   (const_int 1)] (const_int 0)))
  
  (define_attr "z14_unit_fxd" ""
! (cond [(eq_attr "mnemonic" "dlgr,dlr,dr,dsgfr,dsgr")
   (const_int 1)] (const_int 0)))
  
  (define_attr "z14_unit_lsu" ""
--- 54,60 ----
   (const_int 1)] (const_int 0)))
  
  (define_attr "z14_unit_fxd" ""
! (cond [(eq_attr "mnemonic" "dlgr,dsgfr,dsgr")
   (const_int 1)] (const_int 0)))
  
  (define_attr "z14_unit_lsu" ""
*************** chrl,chsi,chy,cl,clc,clfhsi,clg,clgf,clg
*** 64,71 ****
  cli,cliy,clm,clmy,clrl,clt,cly,crl,cy,ddb,deb,ear,ic,icm,icmh,icmy,icy,l,\
  laa,laag,lan,lang,lao,laog,lat,lax,laxg,lb,lcbb,ld,lde,ldeb,ldy,le,ley,lg,\
  lgat,lgb,lgf,lgfrl,lgh,lghrl,lgrl,lh,lhrl,lhy,llc,llgc,llgf,llgfrl,llgh,\
! llghrl,llgt,llh,llhrl,loc,locg,lrl,lrv,lrvg,lrvh,lt,ltg,ltgf,ly,m,madb,maeb,\
! meeb,mfy,mg,mgh,mh,mhy,ml,mlg,ms,msdb,mseb,msg,msgf,msy,mvghi,mvhhi,mvhi,\
  mvi,mviy,n,ng,ni,niy,ntstg,ny,o,og,oi,oiy,oy,s,sar,sdb,seb,sfpc,sg,sgf,\
  sgh,sh,shy,sl,slb,slbg,slg,slgf,sly,sqdb,sqeb,st,stc,stcy,std,stdy,ste,\
  stey,stg,stgrl,sth,sthrl,sthy,stoc,stocg,strl,strv,strvg,strvh,sty,sy,\
--- 64,71 ----
  cli,cliy,clm,clmy,clrl,clt,cly,crl,cy,ddb,deb,ear,ic,icm,icmh,icmy,icy,l,\
  laa,laag,lan,lang,lao,laog,lat,lax,laxg,lb,lcbb,ld,lde,ldeb,ldy,le,ley,lg,\
  lgat,lgb,lgf,lgfrl,lgh,lghrl,lgrl,lh,lhrl,lhy,llc,llgc,llgf,llgfrl,llgh,\
! llghrl,llgt,llh,llhrl,loc,locg,lrl,lrv,lrvg,lrvh,lt,ltg,ltgf,ly,madb,maeb,\
! meeb,mg,mgh,mh,mhy,mlg,ms,msdb,mseb,msg,msgf,msy,mvghi,mvhhi,mvhi,\
  mvi,mviy,n,ng,ni,niy,ntstg,ny,o,og,oi,oiy,oy,s,sar,sdb,seb,sfpc,sg,sgf,\
  sgh,sh,shy,sl,slb,slbg,slg,slgf,sly,sqdb,sqeb,st,stc,stcy,std,stdy,ste,\
  stey,stg,stgrl,sth,sthrl,sthy,stoc,stocg,strl,strv,strvg,strvh,sty,sy,\
*************** vfkedb,vfkhsb,vfkhdb,wfkhxb,vfkhesb,vfkh
*** 121,141 ****
  (cond [(eq_attr "mnemonic" "bas,basr,cdfbr,cdftr,cdgbr,cdgtr,cdlfbr,\
  cdlftr,cdlgbr,cdlgtr,cefbr,cegbr,celfbr,celgbr,cfdbr,cfebr,cfxbr,cgdbr,cgdtr,\
  cgebr,cgxbr,cgxtr,chhsi,clfdbr,clfebr,clfxbr,clfxtr,clgdbr,clgdtr,clgebr,\
! clgxbr,clgxtr,cs,csg,csy,d,efpc,ex,lcgfr,lngfr,lpgfr,lpq,lxr,lzxr,rxsbg,stpq,\
  vgef,vgeg,vscef,vsceg,vsteb")
   (const_int 1)] (const_int 0)))
  
  (define_attr "z14_expanded" ""
! (cond [(eq_attr "mnemonic" "cds,cdsg,cdsy,cxfbr,cxftr,cxgbr,cxgtr,\
! cxlftr,cxlgbr,cxlgtr,dl,dlg,dsg,dsgf,lam,lm,lmg,lmy,sldl,srda,srdl,stam,stm,\
! stmg,stmy,tbegin,tbeginc")
   (const_int 1)] (const_int 0)))
  
  (define_attr "z14_groupalone" ""
  (cond [(eq_attr "mnemonic" "alc,alcg,alcgr,alcr,axbr,axtr,clc,cxbr,\
! cxtr,dlgr,dlr,dr,dsgfr,dsgr,dxbr,dxtr,fixbr,fixbra,fixtr,flogr,lcxbr,lnxbr,\
! lpxbr,ltxbr,ltxtr,lxdb,lxdbr,lxdtr,lxeb,lxebr,m,madb,maeb,maebr,mfy,mg,mgrk,\
! ml,mlg,mlgr,mlr,mr,msdb,mseb,msebr,mvc,mxbr,mxtr,oc,ppa,sfpc,slb,slbg,\
  slbgr,slbr,sqxbr,sxbr,sxtr,tabort,tcxb,tdcxt,tend,xc,kxbr,kxtr")
   (const_int 1)] (const_int 0)))
  
--- 121,141 ----
  (cond [(eq_attr "mnemonic" "bas,basr,cdfbr,cdftr,cdgbr,cdgtr,cdlfbr,\
  cdlftr,cdlgbr,cdlgtr,cefbr,cegbr,celfbr,celgbr,cfdbr,cfebr,cfxbr,cgdbr,cgdtr,\
  cgebr,cgxbr,cgxtr,chhsi,clfdbr,clfebr,clfxbr,clfxtr,clgdbr,clgdtr,clgebr,\
! clgxbr,clgxtr,cs,csg,csy,efpc,ex,lcgfr,lngfr,lpgfr,lpq,lxr,lzxr,rxsbg,stpq,\
  vgef,vgeg,vscef,vsceg,vsteb")
   (const_int 1)] (const_int 0)))
  
  (define_attr "z14_expanded" ""
! (cond [(eq_attr "mnemonic" "cdsg,cxfbr,cxftr,cxgbr,cxgtr,\
! cxlftr,cxlgbr,cxlgtr,dlg,dsg,dsgf,lam,lmg,stam,\
! stmg,tbegin,tbeginc")
   (const_int 1)] (const_int 0)))
  
  (define_attr "z14_groupalone" ""
  (cond [(eq_attr "mnemonic" "alc,alcg,alcgr,alcr,axbr,axtr,clc,cxbr,\
! cxtr,dlgr,dsgfr,dsgr,dxbr,dxtr,fixbr,fixbra,fixtr,flogr,lcxbr,lnxbr,\
! lpxbr,ltxbr,ltxtr,lxdb,lxdbr,lxdtr,lxeb,lxebr,madb,maeb,maebr,mg,mgrk,\
! mlg,mlgr,msdb,mseb,msebr,mvc,mxbr,mxtr,oc,ppa,sfpc,slb,slbg,\
  slbgr,slbr,sqxbr,sxbr,sxtr,tabort,tcxb,tdcxt,tend,xc,kxbr,kxtr")
   (const_int 1)] (const_int 0)))
  
*************** llihl,llilf,llilh,llill,lndfr,lngr,lnr,l
*** 165,172 ****
  lrvh,lrvr,lt,ltg,ltgf,ltgfr,ltgr,ltr,lzdr,lzer,n,ng,ngr,ngrk,nihf,nihh,\
  nihl,nilf,nilh,nill,nop,nopr,nr,nrk,ny,o,og,ogr,ogrk,oihf,oihh,oihl,oilf,\
  oilh,oill,or,ork,oy,pfpo,risbg,risbgn,rll,rllg,rnsbg,rosbg,s,sg,sgr,sgrk,\
! sl,sldl,slfi,slg,slgf,slgfi,slgfr,slgr,slgrk,sll,sllg,sllk,slr,slrk,sly,\
! sr,sra,srag,srak,srda,srdl,srl,srlg,srlk,sy,tm,tmh,tmhh,tmhl,tml,tmlh,\
  tmll,tmy,vlr,vlvgb,vlvgf,vlvgg,vlvgh,x,xg,xgr,xgrk,xihf,xilf,xr,xrk,xy")) "nothing")
  
  (define_insn_reservation "z14_1" 1
--- 165,172 ----
  lrvh,lrvr,lt,ltg,ltgf,ltgfr,ltgr,ltr,lzdr,lzer,n,ng,ngr,ngrk,nihf,nihh,\
  nihl,nilf,nilh,nill,nop,nopr,nr,nrk,ny,o,og,ogr,ogrk,oihf,oihh,oihl,oilf,\
  oilh,oill,or,ork,oy,pfpo,risbg,risbgn,rll,rllg,rnsbg,rosbg,s,sg,sgr,sgrk,\
! sl,slfi,slg,slgf,slgfi,slgfr,slgr,slgrk,sll,sllg,sllk,slr,slrk,sly,\
! sr,sra,srag,srak,srl,srlg,srlk,sy,tm,tmh,tmhh,tmhl,tml,tmlh,\
  tmll,tmy,vlr,vlvgb,vlvgf,vlvgg,vlvgh,x,xg,xgr,xgrk,xihf,xilf,xr,xrk,xy")) "nothing")
  
  (define_insn_reservation "z14_1" 1
*************** vfkesb,vfkedb,vfkhsb,vfkhdb,wfkhxb,vfkhe
*** 199,206 ****
  (define_insn_reservation "z14_2" 2
    (and (eq_attr "cpu" "z14")
  (eq_attr "mnemonic" "cdb,cdbr,cebr,ear,ipm,l,lcbb,lcdbr,lcebr,ld,lde,\
! ldy,lg,lgdr,lgrl,llc,llgc,llgf,llgfrl,llgh,llghrl,llgt,llh,llhrl,lm,lmg,\
! lmy,lndbr,lnebr,lpdbr,lpebr,lrl,ltdbr,ltebr,ly,popcnt,sar,tcdb,tceb,\
  vceqbs,vceqfs,vceqgs,vceqhs,vchbs,vchfs,vchgs,vchhs,vchlbs,vchlfs,vchlgs,\
  vchlhs,vfcedbs,vfcesbs,vfchdbs,vfchedbs,vfchesbs,vfchsbs,vfeeb,vfeef,vfeeh,\
  vfeneb,vfenef,vfeneh,vfenezb,vfenezf,vfenezh,vftcidb,vftcisb,vistrb,vistrf,\
--- 199,206 ----
  (define_insn_reservation "z14_2" 2
    (and (eq_attr "cpu" "z14")
  (eq_attr "mnemonic" "cdb,cdbr,cebr,ear,ipm,l,lcbb,lcdbr,lcebr,ld,lde,\
! ldy,lg,lgdr,lgrl,llc,llgc,llgf,llgfrl,llgh,llghrl,llgt,llh,llhrl,lmg,\
! lndbr,lnebr,lpdbr,lpebr,lrl,ltdbr,ltebr,ly,popcnt,sar,tcdb,tceb,\
  vceqbs,vceqfs,vceqgs,vceqhs,vchbs,vchfs,vchgs,vchhs,vchlbs,vchlfs,vchlgs,\
  vchlhs,vfcedbs,vfcesbs,vfchdbs,vfchedbs,vfchesbs,vfchsbs,vfeeb,vfeef,vfeeh,\
  vfeneb,vfenef,vfeneh,vfenezb,vfenezf,vfenezh,vftcidb,vftcisb,vistrb,vistrf,\
*************** wfcexbs,wfchexbs,wfchxbs,wfcsb,kebr,kdb,
*** 210,216 ****
  
  (define_insn_reservation "z14_3" 3
    (and (eq_attr "cpu" "z14")
! (eq_attr "mnemonic" "cds,cdsy,mgh,mghi,mh,mhi,mhy,std,stdy,ste,stey,\
  vcksm,vfeezbs,vfeezhs,vgfmab,vgfmaf,vgfmag,vgfmah,vgfmb,vgfmf,vgfmg,vgfmh,\
  vistrbs,vistrfs,vl,vlbb,vll,vlrlr,vmaeb,vmaef,vmaeh,vmahb,vmahf,vmahh,vmalb,\
  vmaleb,vmalef,vmaleh,vmalf,vmalhb,vmalhf,vmalhh,vmalhw,vmalob,vmalof,vmaloh,\
--- 210,216 ----
  
  (define_insn_reservation "z14_3" 3
    (and (eq_attr "cpu" "z14")
! (eq_attr "mnemonic" "mgh,mghi,mh,mhi,mhy,std,stdy,ste,stey,\
  vcksm,vfeezbs,vfeezhs,vgfmab,vgfmaf,vgfmag,vgfmah,vgfmb,vgfmf,vgfmg,vgfmh,\
  vistrbs,vistrfs,vl,vlbb,vll,vlrlr,vmaeb,vmaef,vmaeh,vmahb,vmahf,vmahh,vmalb,\
  vmaleb,vmalef,vmaleh,vmalf,vmalhb,vmalhf,vmalhh,vmalhw,vmalob,vmalof,vmaloh,\
*************** tbeginc,tend,vst,vstl,vstrl,vstrlr,xc"))
*** 227,233 ****
  (define_insn_reservation "z14_5" 5
    (and (eq_attr "cpu" "z14")
  (eq_attr "mnemonic" "alc,alcg,alcgr,alcr,cs,csg,csy,msrkc,slb,slbg,\
! slbgr,slbr,stm,stmg,stmy")) "nothing")
  
  (define_insn_reservation "z14_6" 6
    (and (eq_attr "cpu" "z14")
--- 227,233 ----
  (define_insn_reservation "z14_5" 5
    (and (eq_attr "cpu" "z14")
  (eq_attr "mnemonic" "alc,alcg,alcgr,alcr,cs,csg,csy,msrkc,slb,slbg,\
! slbgr,slbr,stmg")) "nothing")
  
  (define_insn_reservation "z14_6" 6
    (and (eq_attr "cpu" "z14")
*************** vfasb,vfisb,vfmasb,vfmsb,vfmssb,vfnmssb,
*** 249,255 ****
  
  (define_insn_reservation "z14_9" 9
    (and (eq_attr "cpu" "z14")
! (eq_attr "mnemonic" "cxfbr,cxgbr,cxlgbr,m,mfy,ml,mlr,mr,stam,wfaxb,\
  wfixb,wfsxb")) "nothing")
  
  (define_insn_reservation "z14_10" 10
--- 249,255 ----
  
  (define_insn_reservation "z14_9" 9
    (and (eq_attr "cpu" "z14")
! (eq_attr "mnemonic" "cxfbr,cxgbr,cxlgbr,stam,wfaxb,\
  wfixb,wfsxb")) "nothing")
  
  (define_insn_reservation "z14_10" 10
*************** ltxbr,ltxtr,lxdtr,sxbr,sxtr")) "nothing"
*** 278,285 ****
  (define_insn_reservation "z14_20" 20
    (and (eq_attr "cpu" "z14")
  (eq_attr "mnemonic" "cdftr,cdgtr,cdlftr,cdlgtr,cgdtr,cgxtr,clfxtr,\
! clgdtr,clgxtr,cxftr,cxgtr,cxlftr,cxlgtr,d,ddb,ddbr,ddtr,deb,debr,dl,dlg,dlgr,\
! dlr,dr,dsg,dsgf,dsgfr,dsgr,dxbr,dxtr,efpc,mdtr,mxbr,mxtr,sqdb,sqdbr,sqeb,\
  sqebr,sqxbr,vfddb,vfdsb,vfsqdb,vfsqsb,wfddb,wfdsb,wfdxb,wfmaxb,wfmsxb,wfmxb,\
  wfnmaxb,wfnmsxb,wfsqdb,wfsqxb")) "nothing")
  
--- 278,285 ----
  (define_insn_reservation "z14_20" 20
    (and (eq_attr "cpu" "z14")
  (eq_attr "mnemonic" "cdftr,cdgtr,cdlftr,cdlgtr,cgdtr,cgxtr,clfxtr,\
! clgdtr,clgxtr,cxftr,cxgtr,cxlftr,cxlgtr,ddb,ddbr,ddtr,deb,debr,dlg,dlgr,\
! dsg,dsgf,dsgfr,dsgr,dxbr,dxtr,efpc,mdtr,mxbr,mxtr,sqdb,sqdbr,sqeb,\
  sqebr,sqxbr,vfddb,vfdsb,vfsqdb,vfsqsb,wfddb,wfdsb,wfdxb,wfmaxb,wfmsxb,wfmxb,\
  wfnmaxb,wfnmsxb,wfsqdb,wfsqxb")) "nothing")
  
diff -Nrcpad gcc-17-20260705/gcc/config/s390/3931.md gcc-17-20260712/gcc/config/s390/3931.md
*** gcc-17-20260705/gcc/config/s390/3931.md	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/s390/3931.md	Sun Jul 12 22:32:07 2026
*************** ltgf,
*** 149,156 ****
  ltgfr,
  ltgr,
  ltr,
- m,
- mfy,
  mg,
  mgh,
  mghi,
--- 149,154 ----
*************** mgrk,
*** 158,168 ****
  mh,
  mhi,
  mhy,
- ml,
  mlg,
  mlgr,
- mlr,
- mr,
  ms,
  msc,
  msfi,
--- 156,163 ----
*************** xiy"
*** 426,433 ****
  (define_attr "z16_unit_fxd" ""
  (cond [(eq_attr "mnemonic"
  "dlgr,
- dlr,
- dr,
  dsgfr,
  dsgr"
  )
--- 421,426 ----
*************** lt,
*** 547,563 ****
  ltg,
  ltgf,
  ly,
- m,
  madb,
  maeb,
  mdb,
  meeb,
- mfy,
  mg,
  mgh,
  mh,
  mhy,
- ml,
  mlg,
  ms,
  msc,
--- 540,553 ----
*************** clgxtr,
*** 1233,1239 ****
  cs,
  csg,
  csy,
- d,
  efpc,
  ex,
  lcgfr,
--- 1223,1228 ----
*************** vsteh"
*** 1256,1264 ****
  
  (define_attr "z16_expanded" ""
  (cond [(eq_attr "mnemonic"
! "cds,
! cdsg,
! cdsy,
  cxfbr,
  cxftr,
  cxgbr,
--- 1245,1251 ----
  
  (define_attr "z16_expanded" ""
  (cond [(eq_attr "mnemonic"
! "cdsg,
  cxfbr,
  cxftr,
  cxgbr,
*************** cxlfbr,
*** 1267,1287 ****
  cxlftr,
  cxlgbr,
  cxlgtr,
- dl,
  dlg,
  dsg,
  dsgf,
  lam,
- lm,
  lmg,
- lmy,
- sldl,
- srda,
- srdl,
  stam,
- stm,
  stmg,
- stmy,
  tbegin,
  tbeginc"
  )
--- 1254,1266 ----
*************** clc,
*** 1299,1306 ****
  cxbr,
  cxtr,
  dlgr,
- dlr,
- dr,
  dsgfr,
  dsgr,
  dxbr,
--- 1278,1283 ----
*************** lxdbr,
*** 1321,1338 ****
  lxdtr,
  lxeb,
  lxebr,
- m,
  madb,
  maeb,
  maebr,
- mfy,
  mg,
  mgrk,
- ml,
  mlg,
  mlgr,
- mlr,
- mr,
  msdb,
  mseb,
  msebr,
--- 1298,1310 ----
*************** sg,
*** 1620,1626 ****
  sgr,
  sgrk,
  sl,
- sldl,
  slfi,
  slg,
  slgf,
--- 1592,1597 ----
*************** sr,
*** 1638,1645 ****
  sra,
  srag,
  srak,
- srda,
- srdl,
  srk,
  srl,
  srlg,
--- 1609,1614 ----
*************** llghrl,
*** 2028,2036 ****
  llgt,
  llh,
  llhrl,
- lm,
  lmg,
- lmy,
  lndbr,
  lnebr,
  lpdbr,
--- 1997,2003 ----
*************** wftcixb"
*** 2117,2125 ****
  (define_insn_reservation "z16_3" 3
    (and (eq_attr "cpu" "z16")
  (eq_attr "mnemonic"
! "cds,
! cdsy,
! mgh,
  mghi,
  mh,
  mhi,
--- 2084,2090 ----
  (define_insn_reservation "z16_3" 3
    (and (eq_attr "cpu" "z16")
  (eq_attr "mnemonic"
! "mgh,
  mghi,
  mh,
  mhi,
*************** slb,
*** 2290,2298 ****
  slbg,
  slbgr,
  slbr,
- stm,
  stmg,
- stmy,
  vcdgb,
  vcdlgb,
  vcefb,
--- 2255,2261 ----
*************** cxfbr,
*** 2398,2411 ****
  cxgbr,
  cxlfbr,
  cxlgbr,
- m,
  madb,
  maeb,
  maebr,
- mfy,
- ml,
- mlr,
- mr,
  msdb,
  mseb,
  msebr,
--- 2361,2369 ----
*************** clgdtr,
*** 2505,2521 ****
  clgxtr,
  cxgtr,
  cxlgtr,
- d,
  ddb,
  ddbr,
  ddtr,
  deb,
  debr,
- dl,
  dlg,
  dlgr,
- dlr,
- dr,
  dsg,
  dsgf,
  dsgfr,
--- 2463,2475 ----
diff -Nrcpad gcc-17-20260705/gcc/config/s390/8561.md gcc-17-20260712/gcc/config/s390/8561.md
*** gcc-17-20260705/gcc/config/s390/8561.md	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/s390/8561.md	Sun Jul 12 22:32:07 2026
*************** ic,icm,icmh,icmy,icy,iihf,iilf,ipm,la,la
*** 30,37 ****
  lgf,lgfi,lgfr,lgfrl,lgh,lghi,lghr,lghrl,lgr,lh,lhi,lhr,lhrl,lhy,llcr,\
  llgcr,llgfr,llghr,llgtr,llhr,llihf,llihh,llihl,llilf,llilh,llill,lngr,lnr,\
  loc,locg,locghi,locgr,lochi,locr,lpgr,lpr,lr,lrv,lrvg,lrvgr,lrvh,lrvr,lt,\
! ltg,ltgf,ltgfr,ltgr,ltr,m,mfy,mg,mgh,mghi,mgrk,mh,mhi,mhy,ml,mlg,mlgr,mlr,\
! mr,ms,msfi,msg,msgf,msgfi,msgfr,msgr,msgrkc,msr,msrkc,msy,n,ng,ngr,ngrk,\
  nihf,nihh,nihl,nilf,nilh,nill,nr,nrk,ny,o,og,ogr,ogrk,oihf,oihh,oihl,oilf,\
  oilh,oill,or,ork,oy,pfpo,popcnt,risbg,risbgn,rll,rllg,s,sg,sgf,sgfr,sgh,\
  sgr,sgrk,sh,shy,sl,slb,slbg,slbgr,slbr,slfi,slg,slgf,slgfi,slgfr,slgr,\
--- 30,37 ----
  lgf,lgfi,lgfr,lgfrl,lgh,lghi,lghr,lghrl,lgr,lh,lhi,lhr,lhrl,lhy,llcr,\
  llgcr,llgfr,llghr,llgtr,llhr,llihf,llihh,llihl,llilf,llilh,llill,lngr,lnr,\
  loc,locg,locghi,locgr,lochi,locr,lpgr,lpr,lr,lrv,lrvg,lrvgr,lrvh,lrvr,lt,\
! ltg,ltgf,ltgfr,ltgr,ltr,mg,mgh,mghi,mgrk,mh,mhi,mhy,mlg,mlgr,\
! ms,msfi,msg,msgf,msgfi,msgfr,msgr,msgrkc,msr,msrkc,msy,n,ng,ngr,ngrk,\
  nihf,nihh,nihl,nilf,nilh,nill,nr,nrk,ny,o,og,ogr,ogrk,oihf,oihh,oihl,oilf,\
  oilh,oill,or,ork,oy,pfpo,popcnt,risbg,risbgn,rll,rllg,s,sg,sgf,sgfr,sgh,\
  sgr,sgrk,sh,shy,sl,slb,slbg,slbgr,slbr,slfi,slg,slgf,slgfi,slgfr,slgr,\
*************** vlvgp,vst,vstef,vsteg,vstl,vstrl,vstrlr,
*** 53,59 ****
   (const_int 1)] (const_int 0)))
  
  (define_attr "z15_unit_fxd" ""
! (cond [(eq_attr "mnemonic" "dlgr,dlr,dr,dsgfr,dsgr")
   (const_int 1)] (const_int 0)))
  
  (define_attr "z15_unit_lsu" ""
--- 53,59 ----
   (const_int 1)] (const_int 0)))
  
  (define_attr "z15_unit_fxd" ""
! (cond [(eq_attr "mnemonic" "dlgr,dsgfr,dsgr")
   (const_int 1)] (const_int 0)))
  
  (define_attr "z15_unit_lsu" ""
*************** clgt,clhhsi,clhrl,cli,cliy,clm,clmy,clrl
*** 64,70 ****
  icmh,icmy,icy,l,laa,laag,lan,lang,lao,laog,lat,lax,laxg,lb,lcbb,ld,lde,\
  ldeb,ldy,le,ley,lg,lgat,lgb,lgf,lgfrl,lgh,lghrl,lgrl,lh,lhrl,lhy,llc,llgc,\
  llgf,llgfrl,llgh,llghrl,llgt,llh,llhrl,loc,locg,lrl,lrv,lrvg,lrvh,lt,ltg,\
! ltgf,ly,m,madb,maeb,mdb,meeb,mfy,mg,mgh,mh,mhy,ml,mlg,ms,msdb,mseb,msg,\
  msgf,msy,mvghi,mvhhi,mvhi,mvi,mviy,n,ng,ni,niy,ntstg,ny,o,og,oi,oiy,oy,s,\
  sar,sdb,seb,sfpc,sg,sgf,sgh,sh,shy,sl,slb,slbg,slg,slgf,sly,sqdb,sqeb,st,\
  stc,stcy,std,stdy,ste,stey,stg,stgrl,sth,sthrl,sthy,stoc,stocg,strl,strv,\
--- 64,70 ----
  icmh,icmy,icy,l,laa,laag,lan,lang,lao,laog,lat,lax,laxg,lb,lcbb,ld,lde,\
  ldeb,ldy,le,ley,lg,lgat,lgb,lgf,lgfrl,lgh,lghrl,lgrl,lh,lhrl,lhy,llc,llgc,\
  llgf,llgfrl,llgh,llghrl,llgt,llh,llhrl,loc,locg,lrl,lrv,lrvg,lrvh,lt,ltg,\
! ltgf,ly,madb,maeb,mdb,meeb,mg,mgh,mh,mhy,mlg,ms,msdb,mseb,msg,\
  msgf,msy,mvghi,mvhhi,mvhi,mvi,mviy,n,ng,ni,niy,ntstg,ny,o,og,oi,oiy,oy,s,\
  sar,sdb,seb,sfpc,sg,sgf,sgh,sh,shy,sl,slb,slbg,slg,slgf,sly,sqdb,sqeb,st,\
  stc,stcy,std,stdy,ste,stey,stg,stgrl,sth,sthrl,sthy,stoc,stocg,strl,strv,\
*************** vfkhedb,wfkhexb")
*** 121,141 ****
  (cond [(eq_attr "mnemonic" "bas,basr,cdfbr,cdftr,cdgbr,cdgtr,cdlfbr,\
  cdlftr,cdlgbr,cdlgtr,cefbr,cegbr,celfbr,celgbr,cfdbr,cfebr,cfxbr,cgdbr,cgdtr,\
  cgebr,cgxbr,cgxtr,chhsi,clfdbr,clfdtr,clfebr,clfxbr,clfxtr,clgdbr,clgdtr,\
! clgebr,clgxbr,clgxtr,cs,csg,csy,d,efpc,ex,lcgfr,lngfr,lpgfr,lpq,lxr,lzxr,\
  rxsbg,stpq,vgef,vgeg,vscef,vsceg,vsteb,vsteh")
   (const_int 1)] (const_int 0)))
  
  (define_attr "z15_expanded" ""
! (cond [(eq_attr "mnemonic" "cds,cdsg,cdsy,cxfbr,cxftr,cxgbr,cxgtr,\
! cxlfbr,cxlftr,cxlgbr,cxlgtr,dl,dlg,dsg,dsgf,lam,lm,lmg,lmy,sldl,srda,srdl,\
! stam,stm,stmg,stmy,tbegin,tbeginc")
   (const_int 1)] (const_int 0)))
  
  (define_attr "z15_groupalone" ""
  (cond [(eq_attr "mnemonic" "alc,alcg,alcgr,alcr,axbr,axtr,clc,cxbr,\
! cxtr,dlgr,dlr,dr,dsgfr,dsgr,dxbr,dxtr,fixbr,fixbra,fixtr,flogr,lcxbr,lnxbr,\
! lpxbr,ltxbr,ltxtr,lxdb,lxdbr,lxdtr,lxeb,lxebr,m,madb,maeb,maebr,mfy,mg,mgrk,\
! ml,mlg,mlgr,mlr,mr,msdb,mseb,msebr,mvc,mxbr,mxtr,nc,oc,ppa,sfpc,slb,slbg,\
  slbgr,slbr,sqxbr,sxbr,sxtr,tabort,tcxb,tdcxt,tend,xc,kxbr,kxtr")
   (const_int 1)] (const_int 0)))
  
--- 121,141 ----
  (cond [(eq_attr "mnemonic" "bas,basr,cdfbr,cdftr,cdgbr,cdgtr,cdlfbr,\
  cdlftr,cdlgbr,cdlgtr,cefbr,cegbr,celfbr,celgbr,cfdbr,cfebr,cfxbr,cgdbr,cgdtr,\
  cgebr,cgxbr,cgxtr,chhsi,clfdbr,clfdtr,clfebr,clfxbr,clfxtr,clgdbr,clgdtr,\
! clgebr,clgxbr,clgxtr,cs,csg,csy,efpc,ex,lcgfr,lngfr,lpgfr,lpq,lxr,lzxr,\
  rxsbg,stpq,vgef,vgeg,vscef,vsceg,vsteb,vsteh")
   (const_int 1)] (const_int 0)))
  
  (define_attr "z15_expanded" ""
! (cond [(eq_attr "mnemonic" "cdsg,cxfbr,cxftr,cxgbr,cxgtr,\
! cxlfbr,cxlftr,cxlgbr,cxlgtr,dlg,dsg,dsgf,lam,lmg,\
! stam,stmg,tbegin,tbeginc")
   (const_int 1)] (const_int 0)))
  
  (define_attr "z15_groupalone" ""
  (cond [(eq_attr "mnemonic" "alc,alcg,alcgr,alcr,axbr,axtr,clc,cxbr,\
! cxtr,dlgr,dsgfr,dsgr,dxbr,dxtr,fixbr,fixbra,fixtr,flogr,lcxbr,lnxbr,\
! lpxbr,ltxbr,ltxtr,lxdb,lxdbr,lxdtr,lxeb,lxebr,madb,maeb,maebr,mg,mgrk,\
! mlg,mlgr,msdb,mseb,msebr,mvc,mxbr,mxtr,nc,oc,ppa,sfpc,slb,slbg,\
  slbgr,slbr,sqxbr,sxbr,sxtr,tabort,tcxb,tdcxt,tend,xc,kxbr,kxtr")
   (const_int 1)] (const_int 0)))
  
*************** llhr,llihf,llihh,llihl,llilf,llilh,llill
*** 165,172 ****
  lrv,lrvg,lrvgr,lrvh,lrvr,lt,ltg,ltgf,ltgfr,ltgr,ltr,lzdr,lzer,n,ng,ngr,\
  ngrk,nihf,nihh,nihl,nilf,nilh,nill,nop,nopr,nr,nrk,ny,o,og,ogr,ogrk,oihf,\
  oihh,oihl,oilf,oilh,oill,or,ork,oy,pfpo,risbg,risbgn,rll,rllg,rnsbg,rosbg,\
! s,sg,sgr,sgrk,sl,sldl,slfi,slg,slgf,slgfi,slgfr,slgr,slgrk,sll,sllg,\
! sllk,slr,slrk,sly,sr,sra,srag,srak,srda,srdl,srk,srl,srlg,srlk,sy,tm,tmh,\
  tmhh,tmhl,tml,tmlh,tmll,tmy,vlr,vlvgb,vlvgf,vlvgg,vlvgh,x,xg,xgr,xgrk,xihf,\
  xilf,xr,xrk,xy")) "nothing")
  
--- 165,172 ----
  lrv,lrvg,lrvgr,lrvh,lrvr,lt,ltg,ltgf,ltgfr,ltgr,ltr,lzdr,lzer,n,ng,ngr,\
  ngrk,nihf,nihh,nihl,nilf,nilh,nill,nop,nopr,nr,nrk,ny,o,og,ogr,ogrk,oihf,\
  oihh,oihl,oilf,oilh,oill,or,ork,oy,pfpo,risbg,risbgn,rll,rllg,rnsbg,rosbg,\
! s,sg,sgr,sgrk,sl,slfi,slg,slgf,slgfi,slgfr,slgr,slgrk,sll,sllg,\
! sllk,slr,slrk,sly,sr,sra,srag,srak,srk,srl,srlg,srlk,sy,tm,tmh,\
  tmhh,tmhl,tml,tmlh,tmll,tmy,vlr,vlvgb,vlvgf,vlvgg,vlvgh,x,xg,xgr,xgrk,xihf,\
  xilf,xr,xrk,xy")) "nothing")
  
*************** xiy,vfkesb,vfkedb,wfkexb,vfkhsb,vfkhdb,w
*** 202,209 ****
  (define_insn_reservation "z15_2" 2
    (and (eq_attr "cpu" "z15")
  (eq_attr "mnemonic" "cdb,cdbr,ceb,cebr,ear,ipm,l,lcbb,lcdbr,lcebr,ld,\
! lde,ldy,lg,lgdr,lgrl,llc,llgc,llgf,llgfrl,llgh,llghrl,llgt,llh,llhrl,lm,\
! lmg,lmy,lndbr,lnebr,lpdbr,lpebr,lrl,ltdbr,ltebr,ly,popcnt,sar,tcdb,tceb,\
  vceqbs,vceqfs,vceqgs,vceqhs,vchbs,vchfs,vchgs,vchhs,vchlbs,vchlfs,vchlgs,\
  vchlhs,vfcedbs,vfcesbs,vfchdbs,vfchedbs,vfchesbs,vfchsbs,vfeeb,vfeef,vfeeh,\
  vfeneb,vfenef,vfeneh,vfenezb,vfenezf,vfenezh,vftcidb,vftcisb,vistrb,vistrf,\
--- 202,209 ----
  (define_insn_reservation "z15_2" 2
    (and (eq_attr "cpu" "z15")
  (eq_attr "mnemonic" "cdb,cdbr,ceb,cebr,ear,ipm,l,lcbb,lcdbr,lcebr,ld,\
! lde,ldy,lg,lgdr,lgrl,llc,llgc,llgf,llgfrl,llgh,llghrl,llgt,llh,llhrl,\
! lmg,lndbr,lnebr,lpdbr,lpebr,lrl,ltdbr,ltebr,ly,popcnt,sar,tcdb,tceb,\
  vceqbs,vceqfs,vceqgs,vceqhs,vchbs,vchfs,vchgs,vchhs,vchlbs,vchlfs,vchlgs,\
  vchlhs,vfcedbs,vfcesbs,vfchdbs,vfchedbs,vfchesbs,vfchsbs,vfeeb,vfeef,vfeeh,\
  vfeneb,vfenef,vfeneh,vfenezb,vfenezf,vfenezh,vftcidb,vftcisb,vistrb,vistrf,\
*************** wfcdb,wfcexbs,wfchexbs,wfchxbs,wfcsb,keb
*** 214,220 ****
  
  (define_insn_reservation "z15_3" 3
    (and (eq_attr "cpu" "z15")
! (eq_attr "mnemonic" "cds,cdsy,mgh,mghi,mh,mhi,mhy,std,stdy,ste,stey,\
  vcksm,vfeezbs,vfeezfs,vfeezhs,vgfmab,vgfmaf,vgfmag,vgfmah,vgfmb,vgfmf,vgfmg,\
  vgfmh,vistrbs,vistrfs,vistrhs,vl,vlbb,vll,vlrlr,vmaeb,vmaef,vmaeh,vmahb,\
  vmahf,vmahh,vmalb,vmaleb,vmalef,vmaleh,vmalf,vmalhb,vmalhf,vmalhh,vmalhw,\
--- 214,220 ----
  
  (define_insn_reservation "z15_3" 3
    (and (eq_attr "cpu" "z15")
! (eq_attr "mnemonic" "mgh,mghi,mh,mhi,mhy,std,stdy,ste,stey,\
  vcksm,vfeezbs,vfeezfs,vfeezhs,vgfmab,vgfmaf,vgfmag,vgfmah,vgfmb,vgfmf,vgfmg,\
  vgfmh,vistrbs,vistrfs,vistrhs,vl,vlbb,vll,vlrlr,vmaeb,vmaef,vmaeh,vmahb,\
  vmahf,vmahh,vmalb,vmaleb,vmalef,vmaleh,vmalf,vmalhb,vmalhf,vmalhh,vmalhw,\
*************** tbeginc,tend,vst,vstef,vsteg,vstl,vstrl,
*** 232,238 ****
    (and (eq_attr "cpu" "z15")
  (eq_attr "mnemonic" "adb,adbr,aeb,aebr,alc,alcg,alcgr,alcr,cs,csg,\
  csy,fidbr,fidbra,fiebr,fiebra,ldeb,ldebr,ledbr,madbr,mdb,mdbr,meeb,meebr,\
! msdbr,msrkc,sdb,sdbr,seb,sebr,slb,slbg,slbgr,slbr,stm,stmg,stmy,vfadb,vfasb,\
  vfidb,vfisb,vfmadb,vfmasb,vfmdb,vfmsb,vfmsdb,vfmssb,vfnmadb,vfnmasb,vfnmsdb,\
  vfnmssb,vfsdb,vfssb,vldeb,vledb,vmslg,wfadb,wfasb,wfidb,wfisb,wflld,wfmadb,\
  wfmasb,wfmdb,wfmsb,wfmsdb,wfmssb,wfsdb,wfssb,wldeb,wledb")) "nothing")
--- 232,238 ----
    (and (eq_attr "cpu" "z15")
  (eq_attr "mnemonic" "adb,adbr,aeb,aebr,alc,alcg,alcgr,alcr,cs,csg,\
  csy,fidbr,fidbra,fiebr,fiebra,ldeb,ldebr,ledbr,madbr,mdb,mdbr,meeb,meebr,\
! msdbr,msrkc,sdb,sdbr,seb,sebr,slb,slbg,slbgr,slbr,stmg,vfadb,vfasb,\
  vfidb,vfisb,vfmadb,vfmasb,vfmdb,vfmsb,vfmsdb,vfmssb,vfnmadb,vfnmasb,vfnmsdb,\
  vfnmssb,vfsdb,vfssb,vldeb,vledb,vmslg,wfadb,wfasb,wfidb,wfisb,wflld,wfmadb,\
  wfmasb,wfmdb,wfmsb,wfmsdb,wfmssb,wfsdb,wfssb,wldeb,wledb")) "nothing")
*************** tdcet,vgef,vgeg,kdtr")) "nothing")
*** 253,259 ****
  (define_insn_reservation "z15_9" 9
    (and (eq_attr "cpu" "z15")
  (eq_attr "mnemonic" "cdfbr,cdgbr,cdlfbr,cdlgbr,cefbr,cegbr,celfbr,\
! celgbr,cxfbr,cxgbr,cxlfbr,cxlgbr,m,madb,maeb,maebr,mfy,ml,mlr,mr,msdb,mseb,\
  msebr,stam,wfaxb,wfixb,wfsxb")) "nothing")
  
  (define_insn_reservation "z15_10" 10
--- 253,259 ----
  (define_insn_reservation "z15_9" 9
    (and (eq_attr "cpu" "z15")
  (eq_attr "mnemonic" "cdfbr,cdgbr,cdlfbr,cdlgbr,cefbr,cegbr,celfbr,\
! celgbr,cxfbr,cxgbr,cxlfbr,cxlgbr,madb,maeb,maebr,msdb,mseb,\
  msebr,stam,wfaxb,wfixb,wfsxb")) "nothing")
  
  (define_insn_reservation "z15_10" 10
*************** ltxbr,ltxtr,lxdtr,sxbr,sxtr")) "nothing"
*** 286,292 ****
  (define_insn_reservation "z15_20" 20
    (and (eq_attr "cpu" "z15")
  (eq_attr "mnemonic" "cdgtr,cdlgtr,cgdtr,cgxtr,clfdtr,clfxtr,clgdtr,\
! clgxtr,cxgtr,cxlgtr,d,ddb,ddbr,ddtr,deb,debr,dl,dlg,dlgr,dlr,dr,dsg,dsgf,\
  dsgfr,dsgr,dxbr,dxtr,efpc,mdtr,mxbr,mxtr,sqdb,sqdbr,sqeb,sqebr,sqxbr,vfddb,\
  vfdsb,vfsqdb,vfsqsb,wfddb,wfdsb,wfdxb,wfmaxb,wfmsxb,wfmxb,wfnmaxb,wfnmsxb,\
  wfsqdb,wfsqxb")) "nothing")
--- 286,292 ----
  (define_insn_reservation "z15_20" 20
    (and (eq_attr "cpu" "z15")
  (eq_attr "mnemonic" "cdgtr,cdlgtr,cgdtr,cgxtr,clfdtr,clfxtr,clgdtr,\
! clgxtr,cxgtr,cxlgtr,ddb,ddbr,ddtr,deb,debr,dlg,dlgr,dsg,dsgf,\
  dsgfr,dsgr,dxbr,dxtr,efpc,mdtr,mxbr,mxtr,sqdb,sqdbr,sqeb,sqebr,sqxbr,vfddb,\
  vfdsb,vfsqdb,vfsqsb,wfddb,wfdsb,wfdxb,wfmaxb,wfmsxb,wfmxb,wfnmaxb,wfnmsxb,\
  wfsqdb,wfsqxb")) "nothing")
diff -Nrcpad gcc-17-20260705/gcc/config/s390/9175.md gcc-17-20260712/gcc/config/s390/9175.md
*** gcc-17-20260705/gcc/config/s390/9175.md	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/s390/9175.md	Sun Jul 12 22:32:07 2026
*************** icmh,icmy,icy,iihf,iilf,ipm,la,larl,lay,
*** 31,44 ****
  lgfi,lgfr,lgfrl,lgh,lghi,lghr,lghrl,lgr,lh,lhi,lhr,lhrl,lhy,llcr,llgcr,llgfr,\
  llghr,llgtr,llhr,llihf,llihh,llihl,llilf,llilh,llill,llxab,llxaf,llxag,llxah,\
  llxaq,lngfr,lngr,lnr,loc,locg,locghi,locgr,lochi,locr,lpgfr,lpgr,lpr,lr,lrv,\
! lrvg,lrvgr,lrvh,lrvr,lt,ltg,ltgf,ltgfr,ltgr,ltr,lxab,lxaf,lxag,lxah,lxaq,m,mfy,\
! mg,mgh,mghi,mgrk,mh,mhi,mhy,ml,mlg,mlgr,mlr,mr,ms,msc,msfi,msg,msgc,msgf,msgfi,\
  msgfr,msgr,msgrkc,msr,msrkc,msy,n,ncgrk,ncrk,ng,ngr,ngrk,nihf,nihh,nihl,nilf,\
  nilh,nill,nngrk,nnrk,nogrk,nork,nr,nrk,nxgrk,nxrk,ny,o,ocgrk,ocrk,og,ogr,ogrk,\
  oihf,oihh,oihl,oilf,oilh,oill,or,ork,oy,pfpo,popcnt,risbg,risbgn,rll,rllg,\
  rnsbg,rosbg,rxsbg,s,selgr,selr,sg,sgf,sgfr,sgh,sgr,sgrk,sh,shy,sl,slb,slbg,\
! slbgr,slbr,sldl,slfi,slg,slgf,slgfi,slgfr,slgr,slgrk,sll,sllg,sllk,slr,slrk,\
! sly,sr,sra,srag,srak,srda,srdl,srk,srl,srlg,srlk,sy,x,xg,xgr,xgrk,xihf,xilf,xr,\
  xrk,xy")
   (const_int 1)] (const_int 0)))
  
--- 31,44 ----
  lgfi,lgfr,lgfrl,lgh,lghi,lghr,lghrl,lgr,lh,lhi,lhr,lhrl,lhy,llcr,llgcr,llgfr,\
  llghr,llgtr,llhr,llihf,llihh,llihl,llilf,llilh,llill,llxab,llxaf,llxag,llxah,\
  llxaq,lngfr,lngr,lnr,loc,locg,locghi,locgr,lochi,locr,lpgfr,lpgr,lpr,lr,lrv,\
! lrvg,lrvgr,lrvh,lrvr,lt,ltg,ltgf,ltgfr,ltgr,ltr,lxab,lxaf,lxag,lxah,lxaq,\
! mg,mgh,mghi,mgrk,mh,mhi,mhy,mlg,mlgr,ms,msc,msfi,msg,msgc,msgf,msgfi,\
  msgfr,msgr,msgrkc,msr,msrkc,msy,n,ncgrk,ncrk,ng,ngr,ngrk,nihf,nihh,nihl,nilf,\
  nilh,nill,nngrk,nnrk,nogrk,nork,nr,nrk,nxgrk,nxrk,ny,o,ocgrk,ocrk,og,ogr,ogrk,\
  oihf,oihh,oihl,oilf,oilh,oill,or,ork,oy,pfpo,popcnt,risbg,risbgn,rll,rllg,\
  rnsbg,rosbg,rxsbg,s,selgr,selr,sg,sgf,sgfr,sgh,sgr,sgrk,sh,shy,sl,slb,slbg,\
! slbgr,slbr,slfi,slg,slgf,slgfi,slgfr,slgr,slgrk,sll,sllg,sllk,slr,slrk,\
! sly,sr,sra,srag,srak,srk,srl,srlg,srlk,sy,x,xg,xgr,xgrk,xihf,xilf,xr,\
  xrk,xy")
   (const_int 1)] (const_int 0)))
  
*************** xiy")
*** 57,68 ****
   (const_int 1)] (const_int 0)))
  
  (define_attr "z17_unit_fxd" ""
!  (cond [(eq_attr "mnemonic" "dlgr,dlr,dr,dsgfr,dsgr")
   (const_int 1)] (const_int 0)))
  
  (define_attr "z17_unit_lsu" ""
   (cond [(eq_attr "mnemonic" "clc,ear,l,lam,lcbb,ld,lde,ldy,lg,lgrl,llc,llgc,\
! llgf,llgfrl,llgh,llghrl,llgt,llh,llhrl,lm,lmg,lmy,lpq,lrl,ly,mvcrl,sar,sfpc,\
  tabort,vl,vlbb,vlbrf,vlbrg,vlbrh,vlbrq,vlbrrepf,vlbrrepg,vlbrreph,vlerf,vlerg,\
  vlerh,vll,vllebrzf,vllebrzg,vllebrzh,vllezb,vllezf,vllezg,vllezh,vllezlf,\
  vlrepb,vlrepf,vlrepg,vlreph,vlrl,vlrlr")
--- 57,68 ----
   (const_int 1)] (const_int 0)))
  
  (define_attr "z17_unit_fxd" ""
!  (cond [(eq_attr "mnemonic" "dlgr,dsgfr,dsgr")
   (const_int 1)] (const_int 0)))
  
  (define_attr "z17_unit_lsu" ""
   (cond [(eq_attr "mnemonic" "clc,ear,l,lam,lcbb,ld,lde,ldy,lg,lgrl,llc,llgc,\
! llgf,llgfrl,llgh,llghrl,llgt,llh,llhrl,lmg,lpq,lrl,ly,mvcrl,sar,sfpc,\
  tabort,vl,vlbb,vlbrf,vlbrg,vlbrh,vlbrq,vlbrrepf,vlbrrepg,vlbrreph,vlerf,vlerg,\
  vlerh,vll,vllebrzf,vllebrzg,vllebrzh,vllezb,vllezf,vllezg,vllezh,vllezlf,\
  vlrepb,vlrepf,vlrepg,vlreph,vlrl,vlrlr")
*************** mvc,nc,oc,rnsbg,rosbg,rxsbg,stpq,vgef,vg
*** 127,149 ****
   (const_int 1)] (const_int 0)))
  
  (define_attr "z17_expanded" ""
!  (cond [(eq_attr "mnemonic" "cds,cdsg,cdsy,cxfbr,cxftr,cxgbr,cxgtr,cxlfbr,\
! cxlftr,cxlgbr,cxlgtr,d,dl,dlg,dsg,dsgf,lam,lm,lmg,lmy,sldl,srda,srdl,stam,stm,\
! stmg,stmy,tbegin,tbeginc")
   (const_int 1)] (const_int 0)))
  
  (define_attr "z17_groupalone" ""
   (cond [(eq_attr "mnemonic" "alc,alcg,alcgr,alcr,axbr,axtr,clc,cxbr,cxfbr,\
! cxftr,cxgbr,cxgtr,cxlfbr,cxlftr,cxlgbr,cxlgtr,cxtr,d,dl,dlg,dlgr,dlr,dr,dsg,\
  dsgf,dsgfr,dsgr,dxbr,dxtr,ex,exrl,fixbr,fixbra,fixtr,flogr,kxbr,kxtr,lcxbr,\
! lnxbr,lpxbr,ltxbr,ltxtr,lxdb,lxdbr,lxdtr,lxeb,lxebr,m,madb,maeb,maebr,mfy,mg,\
! mgrk,ml,mlg,mlgr,mlr,mr,msdb,mseb,msebr,mvc,mvcrl,mxbr,mxtr,nc,oc,ppa,sfpc,slb,\
  slbg,slbgr,slbr,sqxbr,sxbr,sxtr,tabort,tbegin,tbeginc,tcxb,tdcxt,tend,xc")
   (const_int 1)] (const_int 0)))
  
  (define_attr "z17_endgroup" ""
   (cond [(eq_attr "mnemonic" "bas,basr,bcr,br,bras,brasl,cdsg,clfebr,cs,csg,csy,\
! efpc,ex,exrl,ipm,lam,lpq,lxr,nopr,sldl,srda,srdl,stam,stm,stmg,stmy,tbegin,\
  tbeginc")
   (const_int 1)] (const_int 0)))
  
--- 127,149 ----
   (const_int 1)] (const_int 0)))
  
  (define_attr "z17_expanded" ""
!  (cond [(eq_attr "mnemonic" "cdsg,cxfbr,cxftr,cxgbr,cxgtr,cxlfbr,\
! cxlftr,cxlgbr,cxlgtr,dlg,dsg,dsgf,lam,lmg,stam,\
! stmg,tbegin,tbeginc")
   (const_int 1)] (const_int 0)))
  
  (define_attr "z17_groupalone" ""
   (cond [(eq_attr "mnemonic" "alc,alcg,alcgr,alcr,axbr,axtr,clc,cxbr,cxfbr,\
! cxftr,cxgbr,cxgtr,cxlfbr,cxlftr,cxlgbr,cxlgtr,cxtr,dlg,dlgr,dsg,\
  dsgf,dsgfr,dsgr,dxbr,dxtr,ex,exrl,fixbr,fixbra,fixtr,flogr,kxbr,kxtr,lcxbr,\
! lnxbr,lpxbr,ltxbr,ltxtr,lxdb,lxdbr,lxdtr,lxeb,lxebr,madb,maeb,maebr,mg,\
! mgrk,mlg,mlgr,msdb,mseb,msebr,mvc,mvcrl,mxbr,mxtr,nc,oc,ppa,sfpc,slb,\
  slbg,slbgr,slbr,sqxbr,sxbr,sxtr,tabort,tbegin,tbeginc,tcxb,tdcxt,tend,xc")
   (const_int 1)] (const_int 0)))
  
  (define_attr "z17_endgroup" ""
   (cond [(eq_attr "mnemonic" "bas,basr,bcr,br,bras,brasl,cdsg,clfebr,cs,csg,csy,\
! efpc,ex,exrl,ipm,lam,lpq,lxr,nopr,stam,stmg,tbegin,\
  tbeginc")
   (const_int 1)] (const_int 0)))
  
*************** llcr,llgcr,llgfr,llghr,llgtr,llhr,llihf,
*** 173,181 ****
  lngr,lnr,lpdfr,lpgr,lpr,lr,lrv,lrvg,lrvgr,lrvh,lrvr,lt,ltg,ltgf,ltgfr,ltgr,ltr,\
  lzdr,lzer,n,ncgrk,ncrk,ng,ngr,ngrk,nihf,nihh,nihl,nilf,nilh,nill,nngrk,nnrk,\
  nogrk,nop,nopr,nork,nr,nrk,nxgrk,nxrk,ny,o,ocgrk,ocrk,og,ogr,ogrk,oihf,oihh,\
! oihl,oilf,oilh,oill,or,ork,oy,pfpo,risbg,risbgn,rll,rllg,s,sg,sgr,sgrk,sl,sldl,\
  slfi,slg,slgf,slgfi,slgfr,slgr,slgrk,sll,sllg,sllk,slr,slrk,sly,sr,sra,srag,\
! srak,srda,srdl,srk,srl,srlg,srlk,sy,tm,tmh,tmhh,tmhl,tml,tmlh,tmll,tmy,vlr,\
  vlvgb,vlvgf,vlvgg,vlvgh,x,xg,xgr,xgrk,xihf,xilf,xr,xrk,xy")) "nothing")
  
  (define_insn_reservation "z17_1" 1
--- 173,181 ----
  lngr,lnr,lpdfr,lpgr,lpr,lr,lrv,lrvg,lrvgr,lrvh,lrvr,lt,ltg,ltgf,ltgfr,ltgr,ltr,\
  lzdr,lzer,n,ncgrk,ncrk,ng,ngr,ngrk,nihf,nihh,nihl,nilf,nilh,nill,nngrk,nnrk,\
  nogrk,nop,nopr,nork,nr,nrk,nxgrk,nxrk,ny,o,ocgrk,ocrk,og,ogr,ogrk,oihf,oihh,\
! oihl,oilf,oilh,oill,or,ork,oy,pfpo,risbg,risbgn,rll,rllg,s,sg,sgr,sgrk,sl,\
  slfi,slg,slgf,slgfi,slgfr,slgr,slgrk,sll,sllg,sllk,slr,slrk,sly,sr,sra,srag,\
! srak,srk,srl,srlg,srlk,sy,tm,tmh,tmhh,tmhl,tml,tmlh,tmll,tmy,vlr,\
  vlvgb,vlvgf,vlvgg,vlvgh,x,xg,xgr,xgrk,xihf,xilf,xr,xrk,xy")) "nothing")
  
  (define_insn_reservation "z17_1" 1
*************** xi,xiy")) "nothing")
*** 217,223 ****
   (and (eq_attr "cpu" "z17")
   (eq_attr "mnemonic" "cdb,cdbr,ceb,cebr,clzg,ctzg,ear,ipm,kdb,kdbr,keb,kebr,l,\
  lcbb,lcdbr,lcebr,ld,lde,ldy,lg,lgdr,lgrl,llc,llgc,llgf,llgfrl,llgh,llghrl,llgt,\
! llh,llhrl,lm,lmg,lmy,lndbr,lnebr,lpdbr,lpebr,lrl,ltdbr,ltebr,ly,popcnt,sar,\
  tcdb,tceb,vfeeb,vfeef,vfeeh,vfeezbs,vfeezfs,vfeezhs,vfeneb,vfenef,vfeneh,\
  vfenezb,vfenezf,vfenezh,vftcidb,vftcisb,vistrb,vistrbs,vistrf,vistrfs,vistrh,\
  vistrhs,vlbrrepf,vlbrrepg,vlbrreph,vlgvb,vlgvf,vlgvg,vlgvh,vllebrzf,vllebrzg,\
--- 217,223 ----
   (and (eq_attr "cpu" "z17")
   (eq_attr "mnemonic" "cdb,cdbr,ceb,cebr,clzg,ctzg,ear,ipm,kdb,kdbr,keb,kebr,l,\
  lcbb,lcdbr,lcebr,ld,lde,ldy,lg,lgdr,lgrl,llc,llgc,llgf,llgfrl,llgh,llghrl,llgt,\
! llh,llhrl,lmg,lndbr,lnebr,lpdbr,lpebr,lrl,ltdbr,ltebr,ly,popcnt,sar,\
  tcdb,tceb,vfeeb,vfeef,vfeeh,vfeezbs,vfeezfs,vfeezhs,vfeneb,vfenef,vfeneh,\
  vfenezb,vfenezf,vfenezh,vftcidb,vftcisb,vistrb,vistrbs,vistrf,vistrfs,vistrh,\
  vistrhs,vlbrrepf,vlbrrepg,vlbrreph,vlgvb,vlgvf,vlgvg,vlgvh,vllebrzf,vllebrzg,\
*************** vlvgp,wfcdb,wfcsb,wfcxb,wfkdb,wfksb,wfkx
*** 226,232 ****
  
  (define_insn_reservation "z17_3" 3
   (and (eq_attr "cpu" "z17")
!  (eq_attr "mnemonic" "bdepg,bextg,cds,cdsy,mgh,mghi,mh,mhi,mhy,ms,msc,msfi,msg,\
  msgc,msgf,msgfi,msgfr,msgr,msgrkc,msr,msrkc,msy,std,stdy,ste,stey,vcksm,vgfmab,\
  vgfmaf,vgfmag,vgfmah,vgfmb,vgfmf,vgfmg,vgfmh,vl,vlbb,vlbrf,vlbrg,vlbrh,vlbrq,\
  vlerf,vlerg,vlerh,vll,vlrlr,vmaeb,vmaef,vmaeg,vmaeh,vmahb,vmahf,vmahg,vmahh,\
--- 226,232 ----
  
  (define_insn_reservation "z17_3" 3
   (and (eq_attr "cpu" "z17")
!  (eq_attr "mnemonic" "bdepg,bextg,mgh,mghi,mh,mhi,mhy,ms,msc,msfi,msg,\
  msgc,msgf,msgfi,msgfr,msgr,msgrkc,msr,msrkc,msy,std,stdy,ste,stey,vcksm,vgfmab,\
  vgfmaf,vgfmag,vgfmah,vgfmb,vgfmf,vgfmg,vgfmh,vl,vlbb,vlbrf,vlbrg,vlbrh,vlbrq,\
  vlerf,vlerg,vlerh,vll,vlrlr,vmaeb,vmaef,vmaeg,vmaeh,vmahb,vmahf,vmahg,vmahh,\
*************** vstrlr")) "nothing")
*** 247,253 ****
   (and (eq_attr "cpu" "z17")
   (eq_attr "mnemonic" "adb,adbr,aeb,aebr,alc,alcg,alcgr,alcr,cs,csg,csy,fidbr,\
  fidbra,fiebr,fiebra,ldeb,ldebr,ledbr,madbr,mdb,mdbr,meeb,meebr,msdbr,sdb,sdbr,\
! seb,sebr,slb,slbg,slbgr,slbr,stm,stmg,stmy,vcdgb,vcdlgb,vcefb,vcelfb,vcfeb,\
  vcgdb,vclfeb,vclgdb,vldeb,vledb,vmslg,wcdgb,wcdlgb,wcefb,wcelfb,wcfeb,wcgdb,\
  wclfeb,wclgdb,wflld,wflrx,wldeb,wledb")) "nothing")
  
--- 247,253 ----
   (and (eq_attr "cpu" "z17")
   (eq_attr "mnemonic" "adb,adbr,aeb,aebr,alc,alcg,alcgr,alcr,cs,csg,csy,fidbr,\
  fidbra,fiebr,fiebra,ldeb,ldebr,ledbr,madbr,mdb,mdbr,meeb,meebr,msdbr,sdb,sdbr,\
! seb,sebr,slb,slbg,slbgr,slbr,stmg,vcdgb,vcdlgb,vcefb,vcelfb,vcfeb,\
  vcgdb,vclfeb,vclgdb,vldeb,vledb,vmslg,wcdgb,wcdlgb,wcefb,wcelfb,wcfeb,wcgdb,\
  wclfeb,wclgdb,wflld,wflrx,wldeb,wledb")) "nothing")
  
*************** wfsdb,wfssb,wfsxb")) "nothing")
*** 263,270 ****
  
  (define_insn_reservation "z17_8" 8
   (and (eq_attr "cpu" "z17")
!  (eq_attr "mnemonic" "cdgtr,cdlgtr,cdsg,cxgtr,cxlgtr,flogr,lpq,m,mfy,mg,mgrk,\
! ml,mlg,mlgr,mlr,mr,stpq,vsteb,vstebrh,vsteh")) "nothing")
  
  (define_insn_reservation "z17_9" 9
   (and (eq_attr "cpu" "z17")
--- 263,270 ----
  
  (define_insn_reservation "z17_8" 8
   (and (eq_attr "cpu" "z17")
!  (eq_attr "mnemonic" "cdgtr,cdlgtr,cdsg,cxgtr,cxlgtr,flogr,lpq,mg,mgrk,\
! mlg,mlgr,stpq,vsteb,vstebrh,vsteh")) "nothing")
  
  (define_insn_reservation "z17_9" 9
   (and (eq_attr "cpu" "z17")
*************** maeb,maebr,msdb,mseb,msebr,stam")) "noth
*** 273,279 ****
  
  (define_insn_reservation "z17_10" 10
   (and (eq_attr "cpu" "z17")
!  (eq_attr "mnemonic" "cgdtr,cgxtr,clfdtr,clfxtr,clgdtr,clgxtr,d,dl,dlg,dsg,\
  dsgf,efpc,lxdb,lxdbr,lxeb,lxebr,vscef,vsceg")) "nothing")
  
  (define_insn_reservation "z17_11" 11
--- 273,279 ----
  
  (define_insn_reservation "z17_10" 10
   (and (eq_attr "cpu" "z17")
!  (eq_attr "mnemonic" "cgdtr,cgxtr,clfdtr,clfxtr,clgdtr,clgxtr,dlg,dsg,\
  dsgf,efpc,lxdb,lxdbr,lxeb,lxebr,vscef,vsceg")) "nothing")
  
  (define_insn_reservation "z17_11" 11
*************** lcxbr,lnxbr,lpxbr,ltxbr,ltxtr,lxdtr,sxbr
*** 307,313 ****
  
  (define_insn_reservation "z17_20" 20
   (and (eq_attr "cpu" "z17")
!  (eq_attr "mnemonic" "ddb,ddbr,ddtr,deb,debr,dlgr,dlr,dr,dsgfr,dsgr,dxbr,dxtr,\
  mdtr,mvc,mxbr,mxtr,sqdb,sqdbr,sqeb,sqebr,sqxbr,vdf,vdg,vdlf,vdlg,vdlq,vdq,\
  vfddb,vfdsb,vfmadb,vfmasb,vfmdb,vfmsb,vfmsdb,vfmssb,vfnmadb,vfnmasb,vfnmsdb,\
  vfnmssb,vfsqdb,vfsqsb,vrf,vrg,vrlf,vrlg,vrlq,vrq,wfddb,wfdsb,wfdxb,wfmadb,\
--- 307,313 ----
  
  (define_insn_reservation "z17_20" 20
   (and (eq_attr "cpu" "z17")
!  (eq_attr "mnemonic" "ddb,ddbr,ddtr,deb,debr,dlgr,dsgfr,dsgr,dxbr,dxtr,\
  mdtr,mvc,mxbr,mxtr,sqdb,sqdbr,sqeb,sqebr,sqxbr,vdf,vdg,vdlf,vdlg,vdlq,vdq,\
  vfddb,vfdsb,vfmadb,vfmasb,vfmdb,vfmsb,vfmsdb,vfmssb,vfnmadb,vfnmasb,vfnmsdb,\
  vfnmssb,vfsqdb,vfsqsb,vrf,vrg,vrlf,vrlg,vrlq,vrq,wfddb,wfdsb,wfdxb,wfmadb,\
diff -Nrcpad gcc-17-20260705/gcc/config/s390/constraints.md gcc-17-20260712/gcc/config/s390/constraints.md
*** gcc-17-20260705/gcc/config/s390/constraints.md	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/s390/constraints.md	Sun Jul 12 22:32:07 2026
***************
*** 583,590 ****
    (match_test "s390_mem_constraint (\"ZT\", op)"))
  
  (define_constraint "ZL"
!   "LARL operand when in 64-bit mode, otherwise nothing."
!   (match_test "TARGET_64BIT && larl_operand (op, VOIDmode)"))
  
  ;; This constraint must behave like "i", in particular, the matching values
  ;; must never be placed into registers or memory by
--- 583,590 ----
    (match_test "s390_mem_constraint (\"ZT\", op)"))
  
  (define_constraint "ZL"
!   "LARL operand."
!   (match_test "larl_operand (op, VOIDmode)"))
  
  ;; This constraint must behave like "i", in particular, the matching values
  ;; must never be placed into registers or memory by
diff -Nrcpad gcc-17-20260705/gcc/config/s390/driver-native.cc gcc-17-20260712/gcc/config/s390/driver-native.cc
*** gcc-17-20260705/gcc/config/s390/driver-native.cc	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/s390/driver-native.cc	Sun Jul 12 22:32:07 2026
*************** s390_host_detect_local_cpu (int argc, co
*** 48,59 ****
    unsigned int has_features;
    unsigned int has_processor;
    unsigned int is_cpu_z9_109 = 0;
-   unsigned int has_highgprs = 0;
    unsigned int has_dfp = 0;
    unsigned int has_te = 0;
    unsigned int has_vx = 0;
-   unsigned int has_opt_esa_zarch = 0;
-   int i;
  
    if (argc < 1)
      return NULL;
--- 48,56 ----
*************** s390_host_detect_local_cpu (int argc, co
*** 61,69 ****
    arch = strcmp (argv[0], "arch") == 0;
    if (!arch && strcmp (argv[0], "tune"))
      return NULL;
-   for (i = 1; i < argc; i++)
-     if (strcmp (argv[i], "mesa_mzarch") == 0)
-       has_opt_esa_zarch = 1;
  
    f = fopen ("/proc/cpuinfo", "r");
    if (f == NULL)
--- 58,63 ----
*************** s390_host_detect_local_cpu (int argc, co
*** 158,165 ****
  		has_te = 1;
  	      else if (i == 2 && startswith (p, "vx"))
  		has_vx = 1;
- 	      else if (i == 8 && startswith (p, "highgprs"))
- 		has_highgprs = 1;
  	      p += i;
  	    }
  	  has_features = 1;
--- 152,157 ----
*************** s390_host_detect_local_cpu (int argc, co
*** 175,181 ****
      {
        const char *opt_htm = "";
        const char *opt_vx = "";
-       const char *opt_esa_zarch = "";
  
        /* We may switch off these cpu features but never switch the on
  	 explicitly.  This overrides options specified on the command line.  */
--- 167,172 ----
*************** s390_host_detect_local_cpu (int argc, co
*** 183,194 ****
  	opt_htm = " -mno-htm";
        if (!has_vx)
  	opt_vx = " -mno-vx";
!       /* However, we set -mzarch only if neither -mzarch nor -mesa are used on
! 	 the command line.  This allows the user to switch to -mesa manually.
!       */
!       if (!has_opt_esa_zarch && has_highgprs)
! 	opt_esa_zarch = " -mzarch";
!       options = concat (options, opt_htm, opt_vx, opt_esa_zarch, NULL);
      }
    if (has_dfp && is_cpu_z9_109)
      cpu = "z9-ec";
--- 174,180 ----
  	opt_htm = " -mno-htm";
        if (!has_vx)
  	opt_vx = " -mno-vx";
!       options = concat (options, opt_htm, opt_vx, NULL);
      }
    if (has_dfp && is_cpu_z9_109)
      cpu = "z9-ec";
diff -Nrcpad gcc-17-20260705/gcc/config/s390/htmxlintrin.h gcc-17-20260712/gcc/config/s390/htmxlintrin.h
*** gcc-17-20260705/gcc/config/s390/htmxlintrin.h	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/s390/htmxlintrin.h	Sun Jul 12 22:32:07 2026
*************** extern __inline long __attribute__((__gn
*** 167,177 ****
  __TM_failure_address (void* const tdb_ptr)
  {
    struct __htm_tdb *tdb = (struct __htm_tdb*)tdb_ptr;
- #ifdef __s390x__
    return tdb->atia;
- #else
-   return tdb->atia & 0xffffffff;
- #endif
  }
  
  extern __inline long __attribute__((__gnu_inline__, __always_inline__, __artificial__))
--- 167,173 ----
diff -Nrcpad gcc-17-20260705/gcc/config/s390/linux.h gcc-17-20260712/gcc/config/s390/linux.h
*** gcc-17-20260705/gcc/config/s390/linux.h	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/s390/linux.h	Sun Jul 12 22:32:07 2026
*************** along with GCC; see the file COPYING3.
*** 24,37 ****
  
  /* Target specific type definitions.  */
  
- /* For 31 bit our size type differs from most other targets (where it
-    is "unsigned int").  The difference tends to cause trouble e.g.:
-    Glibc BZ #16712, GCC BZ #79358 but cannot be changed due to ABI
-    issues.  */
  #undef  SIZE_TYPE
  #define SIZE_TYPE "long unsigned int"
  #undef  PTRDIFF_TYPE
! #define PTRDIFF_TYPE (TARGET_64BIT ? "long int" : "int")
  
  #undef  WCHAR_TYPE
  #define WCHAR_TYPE "int"
--- 24,33 ----
  
  /* Target specific type definitions.  */
  
  #undef  SIZE_TYPE
  #define SIZE_TYPE "long unsigned int"
  #undef  PTRDIFF_TYPE
! #define PTRDIFF_TYPE "long int"
  
  #undef  WCHAR_TYPE
  #define WCHAR_TYPE "int"
*************** along with GCC; see the file COPYING3.
*** 51,60 ****
  
  /* Target specific assembler settings.  */
  /* Rewrite -march=arch* options to the original CPU name in order to
!    make it work with older binutils.  */
  #undef  ASM_SPEC
  #define ASM_SPEC					\
!   "%{m31&m64}%{mesa&mzarch}%{march=z*}"			\
    "%{march=arch5:-march=z900}"				\
    "%{march=arch6:-march=z990}"				\
    "%{march=arch7:-march=z9-ec}"				\
--- 47,59 ----
  
  /* Target specific assembler settings.  */
  /* Rewrite -march=arch* options to the original CPU name in order to
!    make it work with older binutils.  The spec is incomplete in the sense that
!    it passes -march=z* but filters -march=archX with X>11 out.  However,
!    starting with binutils 2.22 the .machine pseudo-op is supported which
!    overrides command line option -march anyway.  */
  #undef  ASM_SPEC
  #define ASM_SPEC					\
!   "%{march=z*}"						\
    "%{march=arch5:-march=z900}"				\
    "%{march=arch6:-march=z990}"				\
    "%{march=arch7:-march=z9-ec}"				\
*************** along with GCC; see the file COPYING3.
*** 66,95 ****
  
  /* Target specific linker settings.  */
  
- #ifdef DEFAULT_TARGET_64BIT
  #define MULTILIB_DEFAULTS { "m64" }
- #else
- #define MULTILIB_DEFAULTS { "m31" }
- #endif
  
- #define GLIBC_DYNAMIC_LINKER32 "/lib/ld.so.1"
  #define GLIBC_DYNAMIC_LINKER64 "/lib/ld64.so.1"
  
- #undef MUSL_DYNAMIC_LINKER32
- #define MUSL_DYNAMIC_LINKER32 "/lib/ld-musl-s390.so.1"
  #undef MUSL_DYNAMIC_LINKER64
  #define MUSL_DYNAMIC_LINKER64 "/lib/ld-musl-s390x.so.1"
  
  #undef  LINK_SPEC
  #define LINK_SPEC \
!   "%{m31:-m elf_s390}%{m64:-m elf64_s390} \
     %{shared:-shared} \
     %{!shared: \
        %{static:-static} \
        %{!static:%{!static-pie: \
  	%{rdynamic:-export-dynamic} \
! 	%{m31:-dynamic-linker " GNU_USER_DYNAMIC_LINKER32 "} \
! 	%{m64:-dynamic-linker " GNU_USER_DYNAMIC_LINKER64 "}}}} \
     %{static-pie:-static -pie --no-dynamic-linker -z text}"
  
  #define CPP_SPEC "%{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}"
--- 65,86 ----
  
  /* Target specific linker settings.  */
  
  #define MULTILIB_DEFAULTS { "m64" }
  
  #define GLIBC_DYNAMIC_LINKER64 "/lib/ld64.so.1"
  
  #undef MUSL_DYNAMIC_LINKER64
  #define MUSL_DYNAMIC_LINKER64 "/lib/ld-musl-s390x.so.1"
  
  #undef  LINK_SPEC
  #define LINK_SPEC \
!   "-m elf64_s390 \
     %{shared:-shared} \
     %{!shared: \
        %{static:-static} \
        %{!static:%{!static-pie: \
  	%{rdynamic:-export-dynamic} \
! 	-dynamic-linker " GNU_USER_DYNAMIC_LINKER64 "}}} \
     %{static-pie:-static -pie --no-dynamic-linker -z text}"
  
  #define CPP_SPEC "%{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}"
*************** along with GCC; see the file COPYING3.
*** 97,105 ****
  #define TARGET_ASM_FILE_END file_end_indicate_exec_stack
  
  #ifdef TARGET_LIBC_PROVIDES_SSP
! /* s390 glibc provides __stack_chk_guard in 0x14(tp),
!    s390x glibc provides it at 0x28(tp).  */
! #define TARGET_THREAD_SSP_OFFSET        (TARGET_64BIT ? 0x28 : 0x14)
  #endif
  
  /* Define if long doubles should be mangled as 'g'.  */
--- 88,94 ----
  #define TARGET_ASM_FILE_END file_end_indicate_exec_stack
  
  #ifdef TARGET_LIBC_PROVIDES_SSP
! #define TARGET_THREAD_SSP_OFFSET 0x28
  #endif
  
  /* Define if long doubles should be mangled as 'g'.  */
diff -Nrcpad gcc-17-20260705/gcc/config/s390/predicates.md gcc-17-20260712/gcc/config/s390/predicates.md
*** gcc-17-20260705/gcc/config/s390/predicates.md	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/s390/predicates.md	Sun Jul 12 22:32:07 2026
***************
*** 97,113 ****
  })
  
  ;; Return true if OP is a valid operand for the BRAS instruction.
- ;; Allow SYMBOL_REFs and @PLT stubs.
  
  (define_special_predicate "bras_sym_operand"
!   (ior (and (match_code "symbol_ref")
! 	    (ior (match_test "!flag_pic")
! 		 (match_test "SYMBOL_REF_LOCAL_P (op)")
! 		 (and (match_test "TARGET_64BIT")
! 		      (match_test "SYMBOL_REF_FUNCTION_P (op)"))))
!        (and (match_code "const")
! 	    (and (match_test "GET_CODE (XEXP (op, 0)) == UNSPEC")
! 		 (match_test "XINT (XEXP (op, 0), 1) == UNSPEC_PLT31")))))
  
  ;; Return true if OP is a PLUS that is not a legitimate
  ;; operand for the LA instruction.
--- 97,108 ----
  })
  
  ;; Return true if OP is a valid operand for the BRAS instruction.
  
  (define_special_predicate "bras_sym_operand"
!   (and (match_code "symbol_ref")
!        (ior (match_test "!flag_pic")
! 	    (match_test "SYMBOL_REF_LOCAL_P (op)")
! 	    (match_test "SYMBOL_REF_FUNCTION_P (op)"))))
  
  ;; Return true if OP is a PLUS that is not a legitimate
  ;; operand for the LA instruction.
***************
*** 200,208 ****
        && XINT (op, 1) == UNSPEC_GOTENT)
      return true;
    if (GET_CODE (op) == UNSPEC
-       && XINT (op, 1) == UNSPEC_PLT31)
-     return true;
-   if (GET_CODE (op) == UNSPEC
        && XINT (op, 1) == UNSPEC_INDNTPOFF)
      return true;
  
--- 195,200 ----
diff -Nrcpad gcc-17-20260705/gcc/config/s390/s390-builtins.def gcc-17-20260712/gcc/config/s390/s390-builtins.def
*** gcc-17-20260705/gcc/config/s390/s390-builtins.def	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/s390/s390-builtins.def	Sun Jul 12 22:32:07 2026
*************** OB_DEF_VAR (s390_vec_scatter_element_u64
*** 718,725 ****
  OB_DEF_VAR (s390_vec_scatter_element_flt,s390_vscef,        B_VXE,              O4_U2,              BT_OV_VOID_V4SF_UV4SI_FLTPTR_ULONGLONG)
  OB_DEF_VAR (s390_vec_scatter_element_dbl,s390_vsceg,        0,                  O4_U1,              BT_OV_VOID_V2DF_UV2DI_DBLPTR_ULONGLONG)
  
! B_DEF      (s390_vscef,                 vec_scatter_elementv4si,0,              B_VX,               O4_U2,              BT_FN_VOID_UV4SI_UV4SI_UINTPTR_ULONGLONG)
! B_DEF      (s390_vsceg,                 vec_scatter_elementv2di,0,              B_VX,               O4_U1,              BT_FN_VOID_UV2DI_UV2DI_ULONGLONGPTR_ULONGLONG)
  
  /* First two operands are swapped in s390-c.cc */
  OB_DEF     (s390_vec_sel,               s390_vec_sel_b8_a,  s390_vec_sel_dbl_b, B_VX,               BT_FN_OV4SI_OV4SI_OV4SI_OV4SI)
--- 718,725 ----
  OB_DEF_VAR (s390_vec_scatter_element_flt,s390_vscef,        B_VXE,              O4_U2,              BT_OV_VOID_V4SF_UV4SI_FLTPTR_ULONGLONG)
  OB_DEF_VAR (s390_vec_scatter_element_dbl,s390_vsceg,        0,                  O4_U1,              BT_OV_VOID_V2DF_UV2DI_DBLPTR_ULONGLONG)
  
! B_DEF      (s390_vscef,                 vec_scatter_elementv4si_DI,0,           B_VX,               O4_U2,              BT_FN_VOID_UV4SI_UV4SI_UINTPTR_ULONGLONG)
! B_DEF      (s390_vsceg,                 vec_scatter_elementv2di_DI,0,           B_VX,               O4_U1,              BT_FN_VOID_UV2DI_UV2DI_ULONGLONGPTR_ULONGLONG)
  
  /* First two operands are swapped in s390-c.cc */
  OB_DEF     (s390_vec_sel,               s390_vec_sel_b8_a,  s390_vec_sel_dbl_b, B_VX,               BT_FN_OV4SI_OV4SI_OV4SI_OV4SI)
diff -Nrcpad gcc-17-20260705/gcc/config/s390/s390-c.cc gcc-17-20260712/gcc/config/s390/s390-c.cc
*** gcc-17-20260705/gcc/config/s390/s390-c.cc	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/s390/s390-c.cc	Sun Jul 12 22:32:07 2026
*************** s390_cpu_cpp_builtins (cpp_reader *pfile
*** 420,429 ****
    cpp_assert (pfile, "cpu=s390");
    cpp_assert (pfile, "machine=s390");
    cpp_define (pfile, "__s390__");
!   if (TARGET_ZARCH)
!     cpp_define (pfile, "__zarch__");
!   if (TARGET_64BIT)
!     cpp_define (pfile, "__s390x__");
    if (TARGET_LONG_DOUBLE_128)
      cpp_define (pfile, "__LONG_DOUBLE_128__");
    cl_target_option_save (&opts, &global_options, &global_options_set);
--- 420,427 ----
    cpp_assert (pfile, "cpu=s390");
    cpp_assert (pfile, "machine=s390");
    cpp_define (pfile, "__s390__");
!   cpp_define (pfile, "__zarch__");
!   cpp_define (pfile, "__s390x__");
    if (TARGET_LONG_DOUBLE_128)
      cpp_define (pfile, "__LONG_DOUBLE_128__");
    cl_target_option_save (&opts, &global_options, &global_options_set);
diff -Nrcpad gcc-17-20260705/gcc/config/s390/s390-d.cc gcc-17-20260712/gcc/config/s390/s390-d.cc
*** gcc-17-20260705/gcc/config/s390/s390-d.cc	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/s390/s390-d.cc	Sun Jul 12 22:32:07 2026
*************** along with GCC; see the file COPYING3.
*** 30,42 ****
  void
  s390_d_target_versions (void)
  {
!   if (TARGET_64BIT)
!     {
!       d_add_builtin_version ("S390X");
!       d_add_builtin_version ("SystemZ");
!     }
!   else
!     d_add_builtin_version ("S390");
  
    if (TARGET_SOFT_FLOAT)
      d_add_builtin_version ("D_SoftFloat");
--- 30,37 ----
  void
  s390_d_target_versions (void)
  {
!   d_add_builtin_version ("S390X");
!   d_add_builtin_version ("SystemZ");
  
    if (TARGET_SOFT_FLOAT)
      d_add_builtin_version ("D_SoftFloat");
diff -Nrcpad gcc-17-20260705/gcc/config/s390/s390.cc gcc-17-20260712/gcc/config/s390/s390.cc
*** gcc-17-20260705/gcc/config/s390/s390.cc	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/s390/s390.cc	Sun Jul 12 22:32:07 2026
*************** struct s390_address
*** 398,408 ****
  
  #define cfun_frame_layout (cfun->machine->frame_layout)
  #define cfun_save_high_fprs_p (!!cfun_frame_layout.high_fprs)
! #define cfun_save_arg_fprs_p (!!(TARGET_64BIT				\
! 				 ? cfun_frame_layout.fpr_bitmap & 0x0f	\
! 				 : cfun_frame_layout.fpr_bitmap & 0x03))
  #define cfun_gprs_save_area_size ((cfun_frame_layout.last_save_gpr_slot - \
!   cfun_frame_layout.first_save_gpr_slot + 1) * UNITS_PER_LONG)
  #define cfun_set_fpr_save(REGNO) (cfun->machine->frame_layout.fpr_bitmap |=    \
    (1 << (REGNO - FPR0_REGNUM)))
  #define cfun_fpr_save_p(REGNO) (!!(cfun->machine->frame_layout.fpr_bitmap &    \
--- 398,406 ----
  
  #define cfun_frame_layout (cfun->machine->frame_layout)
  #define cfun_save_high_fprs_p (!!cfun_frame_layout.high_fprs)
! #define cfun_save_arg_fprs_p (!!(cfun_frame_layout.fpr_bitmap & 0x0f))
  #define cfun_gprs_save_area_size ((cfun_frame_layout.last_save_gpr_slot - \
!   cfun_frame_layout.first_save_gpr_slot + 1) * UNITS_PER_WORD)
  #define cfun_set_fpr_save(REGNO) (cfun->machine->frame_layout.fpr_bitmap |=    \
    (1 << (REGNO - FPR0_REGNUM)))
  #define cfun_fpr_save_p(REGNO) (!!(cfun->machine->frame_layout.fpr_bitmap &    \
*************** struct s390_address
*** 412,418 ****
  
  /* Number of GPRs and FPRs used for argument passing.  */
  #define GP_ARG_NUM_REG 5
! #define FP_ARG_NUM_REG (TARGET_64BIT? 4 : 2)
  #define VEC_ARG_NUM_REG 8
  
  /* Return TRUE if GPR REGNO is supposed to be restored in the function
--- 410,416 ----
  
  /* Number of GPRs and FPRs used for argument passing.  */
  #define GP_ARG_NUM_REG 5
! #define FP_ARG_NUM_REG 4
  #define VEC_ARG_NUM_REG 8
  
  /* Return TRUE if GPR REGNO is supposed to be restored in the function
*************** s390_init_builtins (void)
*** 713,722 ****
       uint64_t data type.  What we want is c_uint64_type_node from
       c-common.cc.  But since backend code is not supposed to interface
       with the frontend we recreate it here.  */
!   if (TARGET_64BIT)
!     c_uint64_type_node = long_unsigned_type_node;
!   else
!     c_uint64_type_node = long_long_unsigned_type_node;
  
  #undef DEF_TYPE
  #define DEF_TYPE(INDEX, NODE, CONST_P)			\
--- 711,717 ----
       uint64_t data type.  What we want is c_uint64_type_node from
       c-common.cc.  But since backend code is not supposed to interface
       with the frontend we recreate it here.  */
!   c_uint64_type_node = long_unsigned_type_node;
  
  #undef DEF_TYPE
  #define DEF_TYPE(INDEX, NODE, CONST_P)			\
*************** s390_got_symbol (void)
*** 1358,1391 ****
  static scalar_int_mode
  s390_libgcc_cmp_return_mode (void)
  {
!   return TARGET_64BIT ? DImode : SImode;
  }
  
  static scalar_int_mode
  s390_libgcc_shift_count_mode (void)
  {
!   return TARGET_64BIT ? DImode : SImode;
  }
  
  static scalar_int_mode
  s390_unwind_word_mode (void)
  {
!   return TARGET_64BIT ? DImode : SImode;
  }
  
  /* Return true if the back end supports mode MODE.  */
  static bool
  s390_scalar_mode_supported_p (scalar_mode mode)
  {
-   /* In contrast to the default implementation reject TImode constants on 31bit
-      TARGET_ZARCH for ABI compliance.  */
-   if (!TARGET_64BIT && TARGET_ZARCH && mode == TImode)
-     return false;
- 
    if (DECIMAL_FLOAT_MODE_P (mode))
      return default_decimal_float_supported_p ();
  
!   if (TARGET_64BIT && TARGET_Z10 && mode == HFmode)
      return true;
  
    return default_scalar_mode_supported_p (mode);
--- 1353,1381 ----
  static scalar_int_mode
  s390_libgcc_cmp_return_mode (void)
  {
!   return DImode;
  }
  
  static scalar_int_mode
  s390_libgcc_shift_count_mode (void)
  {
!   return DImode;
  }
  
  static scalar_int_mode
  s390_unwind_word_mode (void)
  {
!   return DImode;
  }
  
  /* Return true if the back end supports mode MODE.  */
  static bool
  s390_scalar_mode_supported_p (scalar_mode mode)
  {
    if (DECIMAL_FLOAT_MODE_P (mode))
      return default_decimal_float_supported_p ();
  
!   if (TARGET_Z10 && mode == HFmode)
      return true;
  
    return default_scalar_mode_supported_p (mode);
*************** s390_select_ccmode (enum rtx_code code,
*** 1665,1672 ****
  	if (GET_CODE (op0) == PLUS && GET_CODE (XEXP (op0, 1)) == CONST_INT
  	    && (CONST_OK_FOR_K (INTVAL (XEXP (op0, 1)))
  		|| (CONST_OK_FOR_CONSTRAINT_P (INTVAL (XEXP (op0, 1)), 'O', "Os")
! 		    /* Avoid INT32_MIN on 32 bit.  */
! 		    && (!TARGET_ZARCH || INTVAL (XEXP (op0, 1)) != -0x7fffffff - 1))))
  	  {
  	    if (INTVAL (XEXP((op0), 1)) < 0)
  	      return CCANmode;
--- 1655,1661 ----
  	if (GET_CODE (op0) == PLUS && GET_CODE (XEXP (op0, 1)) == CONST_INT
  	    && (CONST_OK_FOR_K (INTVAL (XEXP (op0, 1)))
  		|| (CONST_OK_FOR_CONSTRAINT_P (INTVAL (XEXP (op0, 1)), 'O', "Os")
! 		    && INTVAL (XEXP (op0, 1)) != -0x7fffffff - 1)))
  	  {
  	    if (INTVAL (XEXP((op0), 1)) < 0)
  	      return CCANmode;
*************** s390_loadrelative_operand_p (rtx addr, r
*** 3598,3605 ****
  
    if (GET_CODE (addr) == SYMBOL_REF
        || (GET_CODE (addr) == UNSPEC
! 	  && (XINT (addr, 1) == UNSPEC_GOTENT
! 	      || XINT (addr, 1) == UNSPEC_PLT31)))
      {
        if (symref)
  	*symref = addr;
--- 3587,3593 ----
  
    if (GET_CODE (addr) == SYMBOL_REF
        || (GET_CODE (addr) == UNSPEC
! 	  && XINT (addr, 1) == UNSPEC_GOTENT))
      {
        if (symref)
  	*symref = addr;
*************** s390_rtx_costs (rtx x, machine_mode mode
*** 4173,4202 ****
  	  {
  	    rtx left = XEXP (x, 0);
  	    rtx right = XEXP (x, 1);
! 	    if (TARGET_ZARCH)
! 	      {
! 		if (GET_CODE (right) == CONST_INT
! 		    && CONST_OK_FOR_K (INTVAL (right)))
! 		  *total = s390_cost->mghi;
! 		else if (GET_CODE (left) == SIGN_EXTEND)
! 		  *total = s390_cost->msgf;
! 		else
! 		  *total = s390_cost->msg;  /* msgr, msg */
! 	      }
! 	    else /* TARGET_31BIT */
! 	      {
! 		if (GET_CODE (left) == SIGN_EXTEND
! 		    && GET_CODE (right) == SIGN_EXTEND)
! 		  /* mulsidi case: mr, m */
! 		  *total = s390_cost->m;
! 		else if (GET_CODE (left) == ZERO_EXTEND
! 			 && GET_CODE (right) == ZERO_EXTEND)
! 		  /* umulsidi case: ml, mlr */
! 		  *total = s390_cost->ml;
! 		else
! 		  /* Complex calculation is required.  */
! 		  *total = COSTS_N_INSNS (40);
! 	      }
  	    break;
  	  }
  	case E_SFmode:
--- 4161,4173 ----
  	  {
  	    rtx left = XEXP (x, 0);
  	    rtx right = XEXP (x, 1);
! 	    if (GET_CODE (right) == CONST_INT
! 		&& CONST_OK_FOR_K (INTVAL (right)))
! 	      *total = s390_cost->mghi;
! 	    else if (GET_CODE (left) == SIGN_EXTEND)
! 	      *total = s390_cost->msgf;
! 	    else
! 	      *total = s390_cost->msg;  /* msgr, msg */
  	    break;
  	  }
  	case E_SFmode:
*************** s390_rtx_costs (rtx x, machine_mode mode
*** 4255,4264 ****
  	{
  	  rtx right = XEXP (x, 1);
  	  if (GET_CODE (right) == ZERO_EXTEND) /* 64 by 32 bit division */
! 	    if (TARGET_ZARCH)
! 	      *total = s390_cost->dsgfr;
! 	    else
! 	      *total = s390_cost->dr;
  	  else				       /* 64 by 64 bit division */
  	    *total = s390_cost->dsgr;
  	}
--- 4226,4232 ----
  	{
  	  rtx right = XEXP (x, 1);
  	  if (GET_CODE (right) == ZERO_EXTEND) /* 64 by 32 bit division */
! 	    *total = s390_cost->dsgfr;
  	  else				       /* 64 by 64 bit division */
  	    *total = s390_cost->dsgr;
  	}
*************** tls_symbolic_operand (rtx op)
*** 4421,4427 ****
  void
  s390_split_access_reg (rtx reg, rtx *lo, rtx *hi)
  {
-   gcc_assert (TARGET_64BIT);
    gcc_assert (ACCESS_REG_P (reg));
    gcc_assert (GET_MODE (reg) == DImode);
    gcc_assert (!(REGNO (reg) & 1));
--- 4389,4394 ----
*************** legitimate_reload_constant_p (rtx op)
*** 4653,4668 ****
      return true;
  
    /* Accept lliXX operands.  */
!   if (TARGET_ZARCH
!       && GET_CODE (op) == CONST_INT
!       && trunc_int_for_mode (INTVAL (op), word_mode) == INTVAL (op)
!       && s390_single_part (op, word_mode, HImode, 0) >= 0)
      return true;
  
    if (TARGET_EXTIMM
        && GET_CODE (op) == CONST_INT
!       && trunc_int_for_mode (INTVAL (op), word_mode) == INTVAL (op)
!       && s390_single_part (op, word_mode, SImode, 0) >= 0)
      return true;
  
    /* Accept larl operands.  */
--- 4620,4634 ----
      return true;
  
    /* Accept lliXX operands.  */
!   if (GET_CODE (op) == CONST_INT
!       && trunc_int_for_mode (INTVAL (op), DImode) == INTVAL (op)
!       && s390_single_part (op, DImode, HImode, 0) >= 0)
      return true;
  
    if (TARGET_EXTIMM
        && GET_CODE (op) == CONST_INT
!       && trunc_int_for_mode (INTVAL (op), DImode) == INTVAL (op)
!       && s390_single_part (op, DImode, SImode, 0) >= 0)
      return true;
  
    /* Accept larl operands.  */
*************** legitimate_reload_constant_p (rtx op)
*** 4678,4688 ****
    /* Accept double-word operands that can be split.  */
    if (GET_CODE (op) == CONST_WIDE_INT
        || (GET_CODE (op) == CONST_INT
! 	  && trunc_int_for_mode (INTVAL (op), word_mode) != INTVAL (op)))
      {
!       machine_mode dword_mode = word_mode == SImode ? DImode : TImode;
!       rtx hi = operand_subword (op, 0, 0, dword_mode);
!       rtx lo = operand_subword (op, 1, 0, dword_mode);
        return legitimate_reload_constant_p (hi)
  	     && legitimate_reload_constant_p (lo);
      }
--- 4644,4653 ----
    /* Accept double-word operands that can be split.  */
    if (GET_CODE (op) == CONST_WIDE_INT
        || (GET_CODE (op) == CONST_INT
! 	  && trunc_int_for_mode (INTVAL (op), DImode) != INTVAL (op)))
      {
!       rtx hi = operand_subword (op, 0, 0, TImode);
!       rtx lo = operand_subword (op, 1, 0, TImode);
        return legitimate_reload_constant_p (hi)
  	     && legitimate_reload_constant_p (lo);
      }
*************** s390_check_symref_alignment (rtx addr, H
*** 4848,4854 ****
      }
  
    if (GET_CODE (symref) == UNSPEC
!       && alignment <= UNITS_PER_LONG)
      return true;
  
    return false;
--- 4813,4819 ----
      }
  
    if (GET_CODE (symref) == UNSPEC
!       && alignment <= UNITS_PER_WORD)
      return true;
  
    return false;
*************** s390_secondary_reload (bool in_p, rtx x,
*** 4974,4986 ****
  		  && s390_class_max_nregs (FP_REGS, mode) == 1)))
  	{
  	  if (in_p)
! 	    sri->icode = (TARGET_64BIT ?
! 			  CODE_FOR_reloaddi_la_in :
! 			  CODE_FOR_reloadsi_la_in);
  	  else
! 	    sri->icode = (TARGET_64BIT ?
! 			  CODE_FOR_reloaddi_la_out :
! 			  CODE_FOR_reloadsi_la_out);
  	}
      }
  
--- 4939,4947 ----
  		  && s390_class_max_nregs (FP_REGS, mode) == 1)))
  	{
  	  if (in_p)
! 	    sri->icode = CODE_FOR_reloaddi_la_in;
  	  else
! 	    sri->icode = CODE_FOR_reloaddi_la_out;
  	}
      }
  
*************** s390_secondary_reload (bool in_p, rtx x,
*** 4996,5003 ****
  	  && mode == Pmode
  	  && (!SYMBOL_REF_P (symref) || !SYMBOL_FLAG_NOTALIGN2_P (symref))
  	  && (offset & 1) == 1)
! 	sri->icode = ((mode == DImode) ? CODE_FOR_reloaddi_larl_odd_addend_z10
! 		      : CODE_FOR_reloadsi_larl_odd_addend_z10);
  
        /* Handle all the (mem (symref)) accesses we cannot use the z10
  	 instructions for.  */
--- 4957,4963 ----
  	  && mode == Pmode
  	  && (!SYMBOL_REF_P (symref) || !SYMBOL_FLAG_NOTALIGN2_P (symref))
  	  && (offset & 1) == 1)
! 	sri->icode = CODE_FOR_reloaddi_larl_odd_addend_z10;
  
        /* Handle all the (mem (symref)) accesses we cannot use the z10
  	 instructions for.  */
*************** s390_secondary_reload (bool in_p, rtx x,
*** 5011,5022 ****
  	{
  #define __SECONDARY_RELOAD_CASE(M,m)					\
  	  case E_##M##mode:						\
! 	    if (TARGET_64BIT)						\
! 	      sri->icode = in_p ? CODE_FOR_reload##m##di_toreg_z10 :	\
! 				  CODE_FOR_reload##m##di_tomem_z10;	\
! 	    else							\
! 	      sri->icode = in_p ? CODE_FOR_reload##m##si_toreg_z10 :	\
! 				  CODE_FOR_reload##m##si_tomem_z10;	\
  	  break;
  
  	  switch (GET_MODE (x))
--- 4971,4978 ----
  	{
  #define __SECONDARY_RELOAD_CASE(M,m)					\
  	  case E_##M##mode:						\
! 	    sri->icode = in_p ? CODE_FOR_reload##m##di_toreg_z10 :	\
! 				CODE_FOR_reload##m##di_tomem_z10;	\
  	  break;
  
  	  switch (GET_MODE (x))
*************** s390_secondary_reload (bool in_p, rtx x,
*** 5070,5077 ****
    /* LRA can deal with transformation of plus op very well -- so we
       don't need to prompt LRA in this case.  */
    if (! lra_in_progress && in_p && s390_plus_operand (x, mode))
!     sri->icode = (TARGET_64BIT ?
! 		  CODE_FOR_reloaddi_plus : CODE_FOR_reloadsi_plus);
  
    /* Performing a multiword move from or to memory we have to make sure the
       second chunk in memory is addressable without causing a displacement
--- 5026,5032 ----
    /* LRA can deal with transformation of plus op very well -- so we
       don't need to prompt LRA in this case.  */
    if (! lra_in_progress && in_p && s390_plus_operand (x, mode))
!     sri->icode = CODE_FOR_reloaddi_plus;
  
    /* Performing a multiword move from or to memory we have to make sure the
       second chunk in memory is addressable without causing a displacement
*************** s390_secondary_reload (bool in_p, rtx x,
*** 5095,5107 ****
  	      && s390_class_max_nregs (FP_REGS, mode) > 1))
  	{
  	  if (in_p)
! 	    sri->icode = (TARGET_64BIT ?
! 			  CODE_FOR_reloaddi_la_in :
! 			  CODE_FOR_reloadsi_la_in);
  	  else
! 	    sri->icode = (TARGET_64BIT ?
! 			  CODE_FOR_reloaddi_la_out :
! 			  CODE_FOR_reloadsi_la_out);
  	}
      }
  
--- 5050,5058 ----
  	      && s390_class_max_nregs (FP_REGS, mode) > 1))
  	{
  	  if (in_p)
! 	    sri->icode = CODE_FOR_reloaddi_la_in;
  	  else
! 	    sri->icode = CODE_FOR_reloaddi_la_out;
  	}
      }
  
*************** s390_secondary_reload (bool in_p, rtx x,
*** 5109,5117 ****
       copied to r0 compiling with -fPIC.  In other cases the target
       register might be used as temporary (see legitimize_pic_address).  */
    if (in_p && SYMBOLIC_CONST (x) && flag_pic == 2 && rclass != ADDR_REGS)
!     sri->icode = (TARGET_64BIT ?
! 		  CODE_FOR_reloaddi_PIC_addr :
! 		  CODE_FOR_reloadsi_PIC_addr);
  
    /* Either scratch or no register needed.  */
    return NO_REGS;
--- 5060,5066 ----
       copied to r0 compiling with -fPIC.  In other cases the target
       register might be used as temporary (see legitimize_pic_address).  */
    if (in_p && SYMBOLIC_CONST (x) && flag_pic == 2 && rclass != ADDR_REGS)
!     sri->icode = CODE_FOR_reloaddi_PIC_addr;
  
    /* Either scratch or no register needed.  */
    return NO_REGS;
*************** s390_secondary_reload (bool in_p, rtx x,
*** 5122,5130 ****
     We need secondary memory to move data between GPRs and FPRs.
  
     - With DFP the ldgr lgdr instructions are available.  Due to the
!      different alignment we cannot use them for SFmode.  For 31 bit a
!      64 bit value in GPR would be a register pair so here we still
!      need to go via memory.
  
     - With z13 we can do the SF/SImode moves with vlgvf.  Due to the
       overlapping of FPRs and VRs we still disallow TF/TD modes to be
--- 5071,5077 ----
     We need secondary memory to move data between GPRs and FPRs.
  
     - With DFP the ldgr lgdr instructions are available.  Due to the
!      different alignment we cannot use them for SFmode.
  
     - With z13 we can do the SF/SImode moves with vlgvf.  Due to the
       overlapping of FPRs and VRs we still disallow TF/TD modes to be
*************** s390_secondary_memory_needed (machine_mo
*** 5141,5147 ****
       realized via ldgr/lgdr in conjunction with shifts in order satisfy
       alignment requirements, or via vector loads.  Thus, there is no secondary
       memory needed.  */
!   if (TARGET_64BIT && TARGET_Z10 && GET_MODE_SIZE (mode) == 2
        && ((reg_classes_intersect_p (class1, VEC_REGS)
  	   && reg_classes_intersect_p (class2, GENERAL_REGS))
  	  || (reg_classes_intersect_p (class2, VEC_REGS)
--- 5088,5094 ----
       realized via ldgr/lgdr in conjunction with shifts in order satisfy
       alignment requirements, or via vector loads.  Thus, there is no secondary
       memory needed.  */
!   if (TARGET_Z10 && GET_MODE_SIZE (mode) == 2
        && ((reg_classes_intersect_p (class1, VEC_REGS)
  	   && reg_classes_intersect_p (class2, GENERAL_REGS))
  	  || (reg_classes_intersect_p (class2, VEC_REGS)
*************** s390_secondary_memory_needed (machine_mo
*** 5151,5158 ****
  	    && reg_classes_intersect_p (class2, GENERAL_REGS))
  	   || (reg_classes_intersect_p (class1, GENERAL_REGS)
  	       && reg_classes_intersect_p (class2, VEC_REGS)))
! 	  && (TARGET_TPF || !TARGET_DFP || !TARGET_64BIT
! 	      || GET_MODE_SIZE (mode) != 8)
  	  && (!TARGET_VX || (SCALAR_FLOAT_MODE_P (mode)
  			     && GET_MODE_SIZE (mode) > 8)));
  }
--- 5098,5104 ----
  	    && reg_classes_intersect_p (class2, GENERAL_REGS))
  	   || (reg_classes_intersect_p (class1, GENERAL_REGS)
  	       && reg_classes_intersect_p (class2, VEC_REGS)))
! 	  && (TARGET_TPF || !TARGET_DFP || GET_MODE_SIZE (mode) != 8)
  	  && (!TARGET_VX || (SCALAR_FLOAT_MODE_P (mode)
  			     && GET_MODE_SIZE (mode) > 8)));
  }
*************** s390_legitimate_address_p (machine_mode
*** 5282,5290 ****
    return true;
  }
  
! /* Return true if OP is a valid operand for the LA instruction.
!    In 31-bit, we need to prove that the result is used as an
!    address, as LA performs only a 31-bit addition.  */
  
  bool
  legitimate_la_operand_p (rtx op)
--- 5228,5234 ----
    return true;
  }
  
! /* Return true if OP is a valid operand for the LA instruction.  */
  
  bool
  legitimate_la_operand_p (rtx op)
*************** legitimate_la_operand_p (rtx op)
*** 5293,5299 ****
    if (!s390_decompose_address (op, &addr))
      return false;
  
!   return (TARGET_64BIT || addr.pointer);
  }
  
  /* Return true if it is valid *and* preferable to use LA to
--- 5237,5243 ----
    if (!s390_decompose_address (op, &addr))
      return false;
  
!   return true;
  }
  
  /* Return true if it is valid *and* preferable to use LA to
*************** preferred_la_operand_p (rtx op1, rtx op2
*** 5321,5329 ****
    if (addr.indx && s390_tune >= PROCESSOR_2817_Z196)
      return false;
  
-   if (!TARGET_64BIT && !addr.pointer)
-     return false;
- 
    if (addr.pointer)
      return true;
  
--- 5265,5270 ----
*************** preferred_la_operand_p (rtx op1, rtx op2
*** 5341,5350 ****
  void
  s390_load_address (rtx dst, rtx src)
  {
!   if (TARGET_64BIT)
!     emit_move_insn (dst, src);
!   else
!     emit_insn (gen_force_la_31 (dst, src));
  }
  
  /* Return true if it ok to use SYMBOL_REF in a relative address.  */
--- 5282,5288 ----
  void
  s390_load_address (rtx dst, rtx src)
  {
!   emit_move_insn (dst, src);
  }
  
  /* Return true if it ok to use SYMBOL_REF in a relative address.  */
*************** legitimize_pic_address (rtx orig, rtx re
*** 5405,5413 ****
  
    if ((GET_CODE (addr) == LABEL_REF
         || (SYMBOL_REF_P (addr) && s390_rel_address_ok_p (addr))
!        || (GET_CODE (addr) == UNSPEC &&
! 	   (XINT (addr, 1) == UNSPEC_GOTENT
! 	    || XINT (addr, 1) == UNSPEC_PLT31)))
        && GET_CODE (addend) == CONST_INT)
      {
        /* This can be locally addressed.  */
--- 5343,5349 ----
  
    if ((GET_CODE (addr) == LABEL_REF
         || (SYMBOL_REF_P (addr) && s390_rel_address_ok_p (addr))
!        || (GET_CODE (addr) == UNSPEC && XINT (addr, 1) == UNSPEC_GOTENT))
        && GET_CODE (addend) == CONST_INT)
      {
        /* This can be locally addressed.  */
*************** legitimize_pic_address (rtx orig, rtx re
*** 5504,5511 ****
        else if (flag_pic == 1)
  	{
  	  /* Assume GOT offset is a valid displacement operand (< 4k
! 	     or < 512k with z990).  This is handled the same way in
! 	     both 31- and 64-bit code (@GOT).
  	     lg <target>, sym@GOT(r12)  */
  
  	  if (reload_in_progress || reload_completed)
--- 5440,5446 ----
        else if (flag_pic == 1)
  	{
  	  /* Assume GOT offset is a valid displacement operand (< 4k
! 	     or < 512k with z990).
  	     lg <target>, sym@GOT(r12)  */
  
  	  if (reload_in_progress || reload_completed)
*************** legitimize_pic_address (rtx orig, rtx re
*** 5566,5577 ****
  	  gcc_unreachable ();
  	  break;
  
- 	  /* For @PLT larl is used.  This is handled like local
- 	     symbol refs.  */
- 	case UNSPEC_PLT31:
- 	  gcc_unreachable ();
- 	  break;
- 
  	  /* Everything else cannot happen.  */
  	default:
  	  gcc_unreachable ();
--- 5501,5506 ----
*************** s390_get_thread_pointer (void)
*** 5611,5617 ****
  {
    rtx tp = gen_reg_rtx (Pmode);
  
!   emit_insn (gen_get_thread_pointer (Pmode, tp));
  
    mark_reg_pointer (tp, BITS_PER_WORD);
  
--- 5540,5546 ----
  {
    rtx tp = gen_reg_rtx (Pmode);
  
!   emit_insn (gen_get_thread_pointerdi (tp));
  
    mark_reg_pointer (tp, BITS_PER_WORD);
  
*************** legitimize_tls_address (rtx addr, rtx re
*** 5715,5722 ****
        case TLS_MODEL_INITIAL_EXEC:
  	if (flag_pic == 1)
  	  {
! 	    /* Assume GOT offset < 4k.  This is handled the same way
! 	       in both 31- and 64-bit code.  */
  
  	    if (reload_in_progress || reload_completed)
  	      df_set_regs_ever_live (PIC_OFFSET_TABLE_REGNUM, true);
--- 5644,5650 ----
        case TLS_MODEL_INITIAL_EXEC:
  	if (flag_pic == 1)
  	  {
! 	    /* Assume GOT offset < 4k.  */
  
  	    if (reload_in_progress || reload_completed)
  	      df_set_regs_ever_live (PIC_OFFSET_TABLE_REGNUM, true);
*************** s390_expand_setmem (rtx dst, rtx len, rt
*** 6329,6340 ****
    else if (TARGET_MVCLE)
      {
        val = force_not_mem (convert_modes (Pmode, QImode, val, 1));
!       if (TARGET_64BIT)
! 	emit_insn (gen_setmem_long_di (dst, convert_to_mode (Pmode, len, 1),
! 				       val));
!       else
! 	emit_insn (gen_setmem_long_si (dst, convert_to_mode (Pmode, len, 1),
! 				       val));
      }
  
    /* Non-constant length and no loop required.  */
--- 6257,6264 ----
    else if (TARGET_MVCLE)
      {
        val = force_not_mem (convert_modes (Pmode, QImode, val, 1));
!       emit_insn (gen_setmem_long_di (dst, convert_to_mode (Pmode, len, 1),
! 				     val));
      }
  
    /* Non-constant length and no loop required.  */
*************** s390_expand_vec_strlen (rtx target, rtx
*** 6762,6773 ****
    s390_load_address (highest_index_to_load_reg,
  		     gen_rtx_PLUS (Pmode, highest_index_to_load_reg,
  				   const1_rtx));
!   if (TARGET_64BIT)
!     emit_insn (gen_movdicc (str_idx_reg, cond,
! 			    highest_index_to_load_reg, str_idx_reg));
!   else
!     emit_insn (gen_movsicc (str_idx_reg, cond,
! 			    highest_index_to_load_reg, str_idx_reg));
  
    add_reg_br_prob_note (s390_emit_jump (is_aligned_label, cond),
  			profile_probability::very_unlikely ());
--- 6686,6693 ----
    s390_load_address (highest_index_to_load_reg,
  		     gen_rtx_PLUS (Pmode, highest_index_to_load_reg,
  				   const1_rtx));
!   emit_insn (gen_movdicc (str_idx_reg, cond,
! 			  highest_index_to_load_reg, str_idx_reg));
  
    add_reg_br_prob_note (s390_emit_jump (is_aligned_label, cond),
  			profile_probability::very_unlikely ());
*************** s390_expand_insv (rtx dest, rtx op1, rtx
*** 7108,7115 ****
  
    /* Generate INSERT IMMEDIATE (IILL et al).  */
    /* (set (ze (reg)) (const_int)).  */
!   if (TARGET_ZARCH
!       && register_operand (dest, word_mode)
        && (bitpos % 16) == 0
        && (bitsize % 16) == 0
        && const_int_operand (src, VOIDmode))
--- 7028,7034 ----
  
    /* Generate INSERT IMMEDIATE (IILL et al).  */
    /* (set (ze (reg)) (const_int)).  */
!   if (register_operand (dest, DImode)
        && (bitpos % 16) == 0
        && (bitsize % 16) == 0
        && const_int_operand (src, VOIDmode))
*************** s390_expand_insv (rtx dest, rtx op1, rtx
*** 7129,7135 ****
  
  	  putsize = GET_MODE_BITSIZE (putmode);
  	  regpos -= putsize;
! 	  emit_move_insn (gen_rtx_ZERO_EXTRACT (word_mode, dest,
  						GEN_INT (putsize),
  						GEN_INT (regpos)),
  			  gen_int_mode (val, putmode));
--- 7048,7054 ----
  
  	  putsize = GET_MODE_BITSIZE (putmode);
  	  regpos -= putsize;
! 	  emit_move_insn (gen_rtx_ZERO_EXTRACT (DImode, dest,
  						GEN_INT (putsize),
  						GEN_INT (regpos)),
  			  gen_int_mode (val, putmode));
*************** s390_expand_insv (rtx dest, rtx op1, rtx
*** 7147,7153 ****
    if (bitpos == 0
        && (bitsize % BITS_PER_UNIT) == 0
        && MEM_P (dest)
!       && (register_operand (src, word_mode)
  	  || const_int_operand (src, VOIDmode)))
      {
        /* Emit standard pattern if possible.  */
--- 7066,7072 ----
    if (bitpos == 0
        && (bitsize % BITS_PER_UNIT) == 0
        && MEM_P (dest)
!       && (register_operand (src, DImode)
  	  || const_int_operand (src, VOIDmode)))
      {
        /* Emit standard pattern if possible.  */
*************** s390_expand_insv (rtx dest, rtx op1, rtx
*** 7162,7168 ****
        else if (const_int_operand (src, VOIDmode))
  	{
  	  int size = bitsize / BITS_PER_UNIT;
! 	  rtx src_mem = adjust_address (force_const_mem (word_mode, src),
  					BLKmode,
  					UNITS_PER_WORD - size);
  
--- 7081,7087 ----
        else if (const_int_operand (src, VOIDmode))
  	{
  	  int size = bitsize / BITS_PER_UNIT;
! 	  rtx src_mem = adjust_address (force_const_mem (DImode, src),
  					BLKmode,
  					UNITS_PER_WORD - size);
  
*************** s390_expand_insv (rtx dest, rtx op1, rtx
*** 7174,7183 ****
  	}
  
        /* (set (ze (mem)) (reg)).  */
!       else if (register_operand (src, word_mode))
  	{
  	  if (bitsize <= 32)
! 	    emit_move_insn (gen_rtx_ZERO_EXTRACT (word_mode, dest, op1,
  						  const0_rtx), src);
  	  else
  	    {
--- 7093,7102 ----
  	}
  
        /* (set (ze (mem)) (reg)).  */
!       else if (register_operand (src, DImode))
  	{
  	  if (bitsize <= 32)
! 	    emit_move_insn (gen_rtx_ZERO_EXTRACT (DImode, dest, op1,
  						  const0_rtx), src);
  	  else
  	    {
*************** s390_expand_insv (rtx dest, rtx op1, rtx
*** 7188,7197 ****
  	      emit_move_insn (adjust_address (dest, SImode, size),
  			      gen_lowpart (SImode, src));
  	      set_mem_size (dest, size);
! 	      emit_move_insn (gen_rtx_ZERO_EXTRACT (word_mode, dest,
  						    GEN_INT (stcmh_width),
  						    const0_rtx),
! 			      gen_rtx_LSHIFTRT (word_mode, src, GEN_INT (32)));
  	    }
  	  return true;
  	}
--- 7107,7116 ----
  	      emit_move_insn (adjust_address (dest, SImode, size),
  			      gen_lowpart (SImode, src));
  	      set_mem_size (dest, size);
! 	      emit_move_insn (gen_rtx_ZERO_EXTRACT (DImode, dest,
  						    GEN_INT (stcmh_width),
  						    const0_rtx),
! 			      gen_rtx_LSHIFTRT (DImode, src, GEN_INT (32)));
  	    }
  	  return true;
  	}
*************** s390_dwarf_frame_reg_mode (int regno)
*** 8467,8473 ****
  {
    machine_mode save_mode = default_dwarf_frame_reg_mode (regno);
  
-   /* Make sure not to return DImode for any GPR with -m31 -mzarch.  */
    if (GENERAL_REGNO_P (regno))
      save_mode = Pmode;
  
--- 8386,8391 ----
*************** s390_mangle_type (const_tree type)
*** 8506,8512 ****
  static bool
  s390_libgcc_floating_mode_supported_p (scalar_float_mode mode)
  {
!   return (TARGET_64BIT && TARGET_Z10 && mode == HFmode)
  	 || default_libgcc_floating_mode_supported_p (mode);
  }
  
--- 8424,8430 ----
  static bool
  s390_libgcc_floating_mode_supported_p (scalar_float_mode mode)
  {
!   return (TARGET_Z10 && mode == HFmode)
  	 || default_libgcc_floating_mode_supported_p (mode);
  }
  
*************** s390_delegitimize_address (rtx orig_x)
*** 8562,8569 ****
  
        y = XEXP (x, 0);
        if (GET_CODE (y) == UNSPEC
! 	  && (XINT (y, 1) == UNSPEC_GOTENT
! 	      || XINT (y, 1) == UNSPEC_PLT31))
  	return XVECEXP (y, 0, 0);
        else
  	return orig_x;
--- 8480,8486 ----
  
        y = XEXP (x, 0);
        if (GET_CODE (y) == UNSPEC
! 	  && XINT (y, 1) == UNSPEC_GOTENT)
  	return XVECEXP (y, 0, 0);
        else
  	return orig_x;
*************** s390_delegitimize_address (rtx orig_x)
*** 8593,8600 ****
  
        y = XEXP (x, 0);
        if (GET_CODE (y) == UNSPEC
! 	  && (XINT (y, 1) == UNSPEC_GOTENT
! 	      || XINT (y, 1) == UNSPEC_PLT31))
  	y = XVECEXP (y, 0, 0);
        else
  	return orig_x;
--- 8510,8516 ----
  
        y = XEXP (x, 0);
        if (GET_CODE (y) == UNSPEC
! 	  && XINT (y, 1) == UNSPEC_GOTENT)
  	y = XVECEXP (y, 0, 0);
        else
  	return orig_x;
*************** s390_function_num_hotpatch_hw (tree decl
*** 8701,8708 ****
  static void
  s390_asm_output_machine_for_arch (FILE *asm_out_file)
  {
!   fprintf (asm_out_file, "\t.machinemode %s\n",
! 	   (TARGET_ZARCH) ? "zarch" : "esa");
    fprintf (asm_out_file, "\t.machine \"%s",
  	   processor_table[s390_arch].binutils_name);
    if (S390_USE_ARCHITECTURE_MODIFIERS)
--- 8617,8623 ----
  static void
  s390_asm_output_machine_for_arch (FILE *asm_out_file)
  {
!   fprintf (asm_out_file, "\t.machinemode zarch\n");
    fprintf (asm_out_file, "\t.machine \"%s",
  	   processor_table[s390_arch].binutils_name);
    if (S390_USE_ARCHITECTURE_MODIFIERS)
*************** s390_asm_output_function_label (FILE *ou
*** 8779,8788 ****
  
        /* Note:  The function label must be aligned so that (a) the bytes of the
  	 following nop do not cross a cacheline boundary, and (b) a jump address
! 	 (eight bytes for 64 bit targets, 4 bytes for 32 bit targets) can be
! 	 stored directly before the label without crossing a cacheline
! 	 boundary.  All this is necessary to make sure the trampoline code can
! 	 be changed atomically.
  	 This alignment is done automatically using the FOUNCTION_BOUNDARY, but
  	 if there are NOPs before the function label, the alignment is placed
  	 before them.  So it is necessary to duplicate the alignment after the
--- 8694,8702 ----
  
        /* Note:  The function label must be aligned so that (a) the bytes of the
  	 following nop do not cross a cacheline boundary, and (b) a jump address
! 	 (eight bytes) can be stored directly before the label without crossing
! 	 a cacheline boundary.  All this is necessary to make sure the
! 	 trampoline code can be changed atomically.
  	 This alignment is done automatically using the FOUNCTION_BOUNDARY, but
  	 if there are NOPs before the function label, the alignment is placed
  	 before them.  So it is necessary to duplicate the alignment after the
*************** s390_output_addr_const_extra (FILE *file
*** 8847,8856 ****
  	output_addr_const (file, XVECEXP (x, 0, 0));
  	fprintf (file, "@GOTOFF");
  	return true;
-       case UNSPEC_PLT31:
- 	output_addr_const (file, XVECEXP (x, 0, 0));
- 	fprintf (file, "@PLT");
- 	return true;
        case UNSPEC_PLTOFF:
  	output_addr_const (file, XVECEXP (x, 0, 0));
  	fprintf (file, "@PLTOFF");
--- 8761,8766 ----
*************** s390_return_addr_rtx (int count, rtx fra
*** 10570,10578 ****
      return get_hard_reg_initial_val (Pmode, RETURN_REGNUM);
  
    if (TARGET_PACKED_STACK)
!     offset = -2 * UNITS_PER_LONG;
    else
!     offset = RETURN_REGNUM * UNITS_PER_LONG;
  
    addr = plus_constant (Pmode, frame, offset);
    addr = memory_address (Pmode, addr);
--- 10480,10488 ----
      return get_hard_reg_initial_val (Pmode, RETURN_REGNUM);
  
    if (TARGET_PACKED_STACK)
!     offset = -2 * UNITS_PER_WORD;
    else
!     offset = RETURN_REGNUM * UNITS_PER_WORD;
  
    addr = plus_constant (Pmode, frame, offset);
    addr = memory_address (Pmode, addr);
*************** s390_back_chain_rtx (void)
*** 10591,10597 ****
  
    if (TARGET_PACKED_STACK)
      chain = plus_constant (Pmode, stack_pointer_rtx,
! 			   STACK_POINTER_OFFSET - UNITS_PER_LONG);
    else
      chain = stack_pointer_rtx;
  
--- 10501,10507 ----
  
    if (TARGET_PACKED_STACK)
      chain = plus_constant (Pmode, stack_pointer_rtx,
! 			   STACK_POINTER_OFFSET - UNITS_PER_WORD);
    else
      chain = stack_pointer_rtx;
  
*************** s390_frame_area (int *area_bottom, int *
*** 10743,10773 ****
    if (cfun_frame_layout.first_restore_gpr != -1)
      {
        b = (cfun_frame_layout.gprs_offset
! 	   + cfun_frame_layout.first_restore_gpr * UNITS_PER_LONG);
        t = b + (cfun_frame_layout.last_restore_gpr
! 	       - cfun_frame_layout.first_restore_gpr + 1) * UNITS_PER_LONG;
      }
  
!   if (TARGET_64BIT && cfun_save_high_fprs_p)
      {
        b = MIN (b, cfun_frame_layout.f8_offset);
        t = MAX (t, (cfun_frame_layout.f8_offset
  		   + cfun_frame_layout.high_fprs * 8));
      }
  
-   if (!TARGET_64BIT)
-     {
-       if (cfun_fpr_save_p (FPR4_REGNUM))
- 	{
- 	  b = MIN (b, cfun_frame_layout.f4_offset);
- 	  t = MAX (t, cfun_frame_layout.f4_offset + 8);
- 	}
-       if (cfun_fpr_save_p (FPR6_REGNUM))
- 	{
- 	  b = MIN (b, cfun_frame_layout.f4_offset + 8);
- 	  t = MAX (t, cfun_frame_layout.f4_offset + 16);
- 	}
-     }
    *area_bottom = b;
    *area_top = t;
  }
--- 10653,10670 ----
    if (cfun_frame_layout.first_restore_gpr != -1)
      {
        b = (cfun_frame_layout.gprs_offset
! 	   + cfun_frame_layout.first_restore_gpr * UNITS_PER_WORD);
        t = b + (cfun_frame_layout.last_restore_gpr
! 	       - cfun_frame_layout.first_restore_gpr + 1) * UNITS_PER_WORD;
      }
  
!   if (cfun_save_high_fprs_p)
      {
        b = MIN (b, cfun_frame_layout.f8_offset);
        t = MAX (t, (cfun_frame_layout.f8_offset
  		   + cfun_frame_layout.high_fprs * 8));
      }
  
    *area_bottom = b;
    *area_top = t;
  }
*************** s390_register_info_arg_fpr ()
*** 10827,10834 ****
    int min_preserve_fpr = INT_MAX, max_preserve_fpr = -1;
    int min_fpr, max_fpr;
  
!   /* Save the FP argument regs for stdarg. f0, f2 for 31 bit and
!      f0-f4 for 64 bit.  */
    if (cfun->stdarg
        && TARGET_HARD_FLOAT
        && cfun->va_list_fpr_size
--- 10724,10730 ----
    int min_preserve_fpr = INT_MAX, max_preserve_fpr = -1;
    int min_fpr, max_fpr;
  
!   /* Save the FP argument regs f0-f4 for stdarg.  */
    if (cfun->stdarg
        && TARGET_HARD_FLOAT
        && cfun->va_list_fpr_size
*************** s390_frame_info (void)
*** 11107,11113 ****
    cfun_frame_layout.last_save_gpr_slot = cfun_frame_layout.last_save_gpr;
  
    /* The va_arg builtin uses a constant distance of 16 *
!      UNITS_PER_LONG (r0-r15) to reach the FPRs from the reg_save_area
       pointer.  So even if we are going to save the stack pointer in an
       FPR we need the stack space in order to keep the offsets
       correct.  */
--- 11003,11009 ----
    cfun_frame_layout.last_save_gpr_slot = cfun_frame_layout.last_save_gpr;
  
    /* The va_arg builtin uses a constant distance of 16 *
!      UNITS_PER_WORD (r0-r15) to reach the FPRs from the reg_save_area
       pointer.  So even if we are going to save the stack pointer in an
       FPR we need the stack space in order to keep the offsets
       correct.  */
*************** s390_frame_info (void)
*** 11120,11145 ****
      }
  
    cfun_frame_layout.frame_size = get_frame_size ();
-   if (!TARGET_64BIT && cfun_frame_layout.frame_size > 0x7fff0000)
-     fatal_error (input_location,
- 		 "total size of local variables exceeds architecture limit");
  
    if (!TARGET_PACKED_STACK)
      {
        /* Fixed stack layout.  */
        cfun_frame_layout.backchain_offset = 0;
!       cfun_frame_layout.f0_offset = 16 * UNITS_PER_LONG;
        cfun_frame_layout.f4_offset = cfun_frame_layout.f0_offset + 2 * 8;
        cfun_frame_layout.f8_offset = -cfun_frame_layout.high_fprs * 8;
        cfun_frame_layout.gprs_offset = (cfun_frame_layout.first_save_gpr_slot
! 				       * UNITS_PER_LONG);
      }
    else if (TARGET_BACKCHAIN)
      {
        /* Kernel stack layout - packed stack, backchain, no float  */
        gcc_assert (TARGET_SOFT_FLOAT);
        cfun_frame_layout.backchain_offset = (STACK_POINTER_OFFSET
! 					    - UNITS_PER_LONG);
  
        /* The distance between the backchain and the return address
  	 save slot must not change.  So we always need a slot for the
--- 11016,11038 ----
      }
  
    cfun_frame_layout.frame_size = get_frame_size ();
  
    if (!TARGET_PACKED_STACK)
      {
        /* Fixed stack layout.  */
        cfun_frame_layout.backchain_offset = 0;
!       cfun_frame_layout.f0_offset = 16 * UNITS_PER_WORD;
        cfun_frame_layout.f4_offset = cfun_frame_layout.f0_offset + 2 * 8;
        cfun_frame_layout.f8_offset = -cfun_frame_layout.high_fprs * 8;
        cfun_frame_layout.gprs_offset = (cfun_frame_layout.first_save_gpr_slot
! 				       * UNITS_PER_WORD);
      }
    else if (TARGET_BACKCHAIN)
      {
        /* Kernel stack layout - packed stack, backchain, no float  */
        gcc_assert (TARGET_SOFT_FLOAT);
        cfun_frame_layout.backchain_offset = (STACK_POINTER_OFFSET
! 					    - UNITS_PER_WORD);
  
        /* The distance between the backchain and the return address
  	 save slot must not change.  So we always need a slot for the
*************** s390_frame_info (void)
*** 11162,11168 ****
        /* Packed stack layout without backchain.  */
  
        /* With stdarg FPRs need their dedicated slots.  */
!       num_fprs = (TARGET_64BIT && cfun->stdarg ? 2
  		  : (cfun_fpr_save_p (FPR4_REGNUM) +
  		     cfun_fpr_save_p (FPR6_REGNUM)));
        cfun_frame_layout.f4_offset = STACK_POINTER_OFFSET - 8 * num_fprs;
--- 11055,11061 ----
        /* Packed stack layout without backchain.  */
  
        /* With stdarg FPRs need their dedicated slots.  */
!       num_fprs = (cfun->stdarg ? 2
  		  : (cfun_fpr_save_p (FPR4_REGNUM) +
  		     cfun_fpr_save_p (FPR6_REGNUM)));
        cfun_frame_layout.f4_offset = STACK_POINTER_OFFSET - 8 * num_fprs;
*************** s390_frame_info (void)
*** 11211,11219 ****
  
    cfun_frame_layout.frame_size += STACK_POINTER_OFFSET - lowest_offset;
  
!   /* If under 31 bit an odd number of gprs has to be saved we have to
!      adjust the frame size to sustain 8 byte alignment of stack
!      frames.  */
    cfun_frame_layout.frame_size = ((cfun_frame_layout.frame_size +
  				   STACK_BOUNDARY / BITS_PER_UNIT - 1)
  				  & ~(STACK_BOUNDARY / BITS_PER_UNIT - 1));
--- 11104,11110 ----
  
    cfun_frame_layout.frame_size += STACK_POINTER_OFFSET - lowest_offset;
  
!   /* Adjust frame size to sustain 8 byte alignment of stack frames.  */
    cfun_frame_layout.frame_size = ((cfun_frame_layout.frame_size +
  				   STACK_BOUNDARY / BITS_PER_UNIT - 1)
  				  & ~(STACK_BOUNDARY / BITS_PER_UNIT - 1));
*************** s390_hard_regno_mode_ok (unsigned int re
*** 11490,11500 ****
        /* fallthrough */
      case GENERAL_REGS:
        if (REGNO_PAIR_OK (regno, mode))
! 	{
! 	  if (TARGET_ZARCH
! 	      || (mode != TFmode && mode != TCmode && mode != TDmode))
! 	    return true;
! 	}
        break;
      case CC_REGS:
        if (GET_MODE_CLASS (mode) == MODE_CC)
--- 11381,11387 ----
        /* fallthrough */
      case GENERAL_REGS:
        if (REGNO_PAIR_OK (regno, mode))
! 	return true;
        break;
      case CC_REGS:
        if (GET_MODE_CLASS (mode) == MODE_CC)
*************** s390_hard_regno_scratch_ok (unsigned int
*** 11563,11594 ****
    return true;
  }
  
! /* Implement TARGET_HARD_REGNO_CALL_PART_CLOBBERED.  When generating
!    code that runs in z/Architecture mode, but conforms to the 31-bit
!    ABI, GPRs can hold 8 bytes; the ABI guarantees only that the lower 4
!    bytes are saved across calls, however.  */
  
  static bool
  s390_hard_regno_call_part_clobbered (unsigned int, unsigned int regno,
  				     machine_mode mode)
  {
-   /* For r12 we know that the only bits we actually care about are
-      preserved across function calls.  Since r12 is a fixed reg all
-      accesses to r12 are generated by the backend.
- 
-      This workaround is necessary until gcse implements proper
-      tracking of partially clobbered registers.  */
-   if (!TARGET_64BIT
-       && TARGET_ZARCH
-       && GET_MODE_SIZE (mode) > 4
-       && (!flag_pic || regno != PIC_OFFSET_TABLE_REGNUM)
-       && ((regno >= 6 && regno <= 15) || regno == 32))
-     return true;
- 
    if (TARGET_VX
        && GET_MODE_SIZE (mode) > 8
!       && (((TARGET_64BIT && regno >= 24 && regno <= 31))
! 	  || (!TARGET_64BIT && (regno == 18 || regno == 19))))
      return true;
  
    return false;
--- 11450,11465 ----
    return true;
  }
  
! /* Implement TARGET_HARD_REGNO_CALL_PART_CLOBBERED.  */
  
  static bool
  s390_hard_regno_call_part_clobbered (unsigned int, unsigned int regno,
  				     machine_mode mode)
  {
    if (TARGET_VX
        && GET_MODE_SIZE (mode) > 8
!       && regno >= 24
!       && regno <= 31)
      return true;
  
    return false;
*************** s390_initial_elimination_offset (int fro
*** 11789,11795 ****
  	 reside.  */
        offset = (cfun_frame_layout.frame_size + cfun_frame_layout.gprs_offset +
  		(RETURN_REGNUM - cfun_frame_layout.first_save_gpr_slot) *
! 		UNITS_PER_LONG);
        break;
  
      case BASE_REGNUM:
--- 11660,11666 ----
  	 reside.  */
        offset = (cfun_frame_layout.frame_size + cfun_frame_layout.gprs_offset +
  		(RETURN_REGNUM - cfun_frame_layout.first_save_gpr_slot) *
! 		UNITS_PER_WORD);
        break;
  
      case BASE_REGNUM:
*************** save_gprs (rtx base, int offset, int fir
*** 11864,11873 ****
    /* Special-case single register.  */
    if (first == last)
      {
!       if (TARGET_64BIT)
! 	insn = gen_movdi (addr, gen_rtx_REG (Pmode, first));
!       else
! 	insn = gen_movsi (addr, gen_rtx_REG (Pmode, first));
  
        if (!global_not_special_regno_p (first))
  	RTX_FRAME_RELATED_P (insn) = 1;
--- 11735,11741 ----
    /* Special-case single register.  */
    if (first == last)
      {
!       insn = gen_movdi (addr, gen_rtx_REG (Pmode, first));
  
        if (!global_not_special_regno_p (first))
  	RTX_FRAME_RELATED_P (insn) = 1;
*************** save_gprs (rtx base, int offset, int fir
*** 11935,11941 ****
  	    {
  	      rtx reg = gen_rtx_REG (Pmode, regno);
  	      rtx reg_addr = plus_constant (Pmode, base,
! 					    offset + (regno - first) * UNITS_PER_LONG);
  	      if (!s390_restore_gpr_p (regno))
  		add_reg_note (insn, REG_CFA_NO_RESTORE, reg);
  	      add_reg_note (insn, REG_CFA_OFFSET,
--- 11803,11809 ----
  	    {
  	      rtx reg = gen_rtx_REG (Pmode, regno);
  	      rtx reg_addr = plus_constant (Pmode, base,
! 					    offset + (regno - first) * UNITS_PER_WORD);
  	      if (!s390_restore_gpr_p (regno))
  		add_reg_note (insn, REG_CFA_NO_RESTORE, reg);
  	      add_reg_note (insn, REG_CFA_OFFSET,
*************** save_gprs (rtx base, int offset, int fir
*** 11955,11970 ****
  	goto emit;
  
        addr = plus_constant (Pmode, base,
! 			    offset + (start - first) * UNITS_PER_LONG);
  
        if (start == last)
  	{
! 	  if (TARGET_64BIT)
! 	    note = gen_movdi (gen_rtx_MEM (Pmode, addr),
! 			      gen_rtx_REG (Pmode, start));
! 	  else
! 	    note = gen_movsi (gen_rtx_MEM (Pmode, addr),
! 			      gen_rtx_REG (Pmode, start));
  	  note = PATTERN (note);
  
  	  add_reg_note (insn, REG_FRAME_RELATED_EXPR, note);
--- 11823,11834 ----
  	goto emit;
  
        addr = plus_constant (Pmode, base,
! 			    offset + (start - first) * UNITS_PER_WORD);
  
        if (start == last)
  	{
! 	  note = gen_movdi (gen_rtx_MEM (Pmode, addr),
! 			    gen_rtx_REG (Pmode, start));
  	  note = PATTERN (note);
  
  	  add_reg_note (insn, REG_FRAME_RELATED_EXPR, note);
*************** restore_gprs (rtx base, int offset, int
*** 12013,12022 ****
    /* Special-case single register.  */
    if (first == last)
      {
!       if (TARGET_64BIT)
! 	insn = gen_movdi (gen_rtx_REG (Pmode, first), addr);
!       else
! 	insn = gen_movsi (gen_rtx_REG (Pmode, first), addr);
  
        RTX_FRAME_RELATED_P (insn) = 1;
        return insn;
--- 11877,11883 ----
    /* Special-case single register.  */
    if (first == last)
      {
!       insn = gen_movdi (gen_rtx_REG (Pmode, first), addr);
  
        RTX_FRAME_RELATED_P (insn) = 1;
        return insn;
*************** s390_emit_stack_tie (void)
*** 12058,12066 ****
  {
    rtx mem = gen_frame_mem (BLKmode, stack_pointer_rtx);
    if (frame_pointer_needed)
!     emit_insn (gen_stack_tie (Pmode, mem, hard_frame_pointer_rtx));
    else
!     emit_insn (gen_stack_tie (Pmode, mem, stack_pointer_rtx));
  }
  
  /* Copy GPRS into FPR save slots.  */
--- 11919,11927 ----
  {
    rtx mem = gen_frame_mem (BLKmode, stack_pointer_rtx);
    if (frame_pointer_needed)
!     emit_insn (gen_stack_tiedi (mem, hard_frame_pointer_rtx));
    else
!     emit_insn (gen_stack_tiedi (mem, stack_pointer_rtx));
  }
  
  /* Copy GPRS into FPR save slots.  */
*************** s390_prologue_plus_offset (rtx target, r
*** 12267,12273 ****
  static void
  s390_emit_stack_probe (rtx addr)
  {
!   rtx mem = gen_rtx_MEM (word_mode, addr);
    MEM_VOLATILE_P (mem) = 1;
    emit_insn (gen_probe_stack (mem));
  }
--- 12128,12134 ----
  static void
  s390_emit_stack_probe (rtx addr)
  {
!   rtx mem = gen_rtx_MEM (DImode, addr);
    MEM_VOLATILE_P (mem) = 1;
    emit_insn (gen_probe_stack (mem));
  }
*************** allocate_stack_space (rtx size, HOST_WID
*** 12298,12304 ****
  	dump_stack_clash_frame_info (NO_PROBE_SMALL_FRAME, true);
        else
  	{
! 	  rtx offset = GEN_INT (probe_interval - UNITS_PER_LONG);
  	  HOST_WIDE_INT rounded_size = -INTVAL (size) & -probe_interval;
  	  HOST_WIDE_INT num_probes = rounded_size / probe_interval;
  	  HOST_WIDE_INT residual = -INTVAL (size) - rounded_size;
--- 12159,12165 ----
  	dump_stack_clash_frame_info (NO_PROBE_SMALL_FRAME, true);
        else
  	{
! 	  rtx offset = GEN_INT (probe_interval - UNITS_PER_WORD);
  	  HOST_WIDE_INT rounded_size = -INTVAL (size) & -probe_interval;
  	  HOST_WIDE_INT num_probes = rounded_size / probe_interval;
  	  HOST_WIDE_INT residual = -INTVAL (size) - rounded_size;
*************** allocate_stack_space (rtx size, HOST_WID
*** 12364,12370 ****
  	    s390_emit_stack_probe (gen_rtx_PLUS (Pmode,
  						 stack_pointer_rtx,
  						 GEN_INT (residual
! 							  - UNITS_PER_LONG)));
  
  	  return temp_reg_clobbered_p;
  	}
--- 12225,12231 ----
  	    s390_emit_stack_probe (gen_rtx_PLUS (Pmode,
  						 stack_pointer_rtx,
  						 GEN_INT (residual
! 							  - UNITS_PER_WORD)));
  
  	  return temp_reg_clobbered_p;
  	}
*************** s390_emit_prologue (void)
*** 12412,12418 ****
      = 1 << param_stack_clash_protection_probe_interval;
    HOST_WIDE_INT last_probe_offset
      = (TARGET_BACKCHAIN
!        ? (TARGET_PACKED_STACK ? STACK_POINTER_OFFSET - UNITS_PER_LONG : 0)
         : probe_interval - (STACK_BOUNDARY / UNITS_PER_WORD));
  
    s390_save_gprs_to_fprs ();
--- 12273,12279 ----
      = 1 << param_stack_clash_protection_probe_interval;
    HOST_WIDE_INT last_probe_offset
      = (TARGET_BACKCHAIN
!        ? (TARGET_PACKED_STACK ? STACK_POINTER_OFFSET - UNITS_PER_WORD : 0)
         : probe_interval - (STACK_BOUNDARY / UNITS_PER_WORD));
  
    s390_save_gprs_to_fprs ();
*************** s390_emit_prologue (void)
*** 12422,12428 ****
      {
        save_gprs (stack_pointer_rtx,
  		 cfun_frame_layout.gprs_offset +
! 		 UNITS_PER_LONG * (cfun_frame_layout.first_save_gpr
  				   - cfun_frame_layout.first_save_gpr_slot),
  		 cfun_frame_layout.first_save_gpr,
  		 cfun_frame_layout.last_save_gpr);
--- 12283,12289 ----
      {
        save_gprs (stack_pointer_rtx,
  		 cfun_frame_layout.gprs_offset +
! 		 UNITS_PER_WORD * (cfun_frame_layout.first_save_gpr
  				   - cfun_frame_layout.first_save_gpr_slot),
  		 cfun_frame_layout.first_save_gpr,
  		 cfun_frame_layout.last_save_gpr);
*************** s390_emit_prologue (void)
*** 12431,12437 ****
  	 then LAST_PROBE_OFFSET can move even closer to sp.  */
        last_probe_offset
  	= (cfun_frame_layout.gprs_offset +
! 	   UNITS_PER_LONG * (cfun_frame_layout.first_save_gpr
  			     - cfun_frame_layout.first_save_gpr_slot));
      }
  
--- 12292,12298 ----
  	 then LAST_PROBE_OFFSET can move even closer to sp.  */
        last_probe_offset
  	= (cfun_frame_layout.gprs_offset +
! 	   UNITS_PER_WORD * (cfun_frame_layout.first_save_gpr
  			     - cfun_frame_layout.first_save_gpr_slot));
      }
  
*************** s390_emit_prologue (void)
*** 12552,12565 ****
  
  		  rtx t = gen_rtx_AND (Pmode, stack_pointer_rtx,
  				       GEN_INT (stack_check_mask));
! 		  if (TARGET_64BIT)
! 		    emit_insn (gen_ctrapdi4 (gen_rtx_EQ (VOIDmode,
! 							 t, const0_rtx),
! 					     t, const0_rtx, const0_rtx));
! 		  else
! 		    emit_insn (gen_ctrapsi4 (gen_rtx_EQ (VOIDmode,
! 							 t, const0_rtx),
! 					     t, const0_rtx, const0_rtx));
  		}
  	    }
  	}
--- 12413,12421 ----
  
  		  rtx t = gen_rtx_AND (Pmode, stack_pointer_rtx,
  				       GEN_INT (stack_check_mask));
! 		  emit_insn (gen_ctrapdi4 (gen_rtx_EQ (VOIDmode,
! 						       t, const0_rtx),
! 					   t, const0_rtx, const0_rtx));
  		}
  	    }
  	}
*************** s390_emit_epilogue (bool sibcall)
*** 12775,12805 ****
  
    /* Restore call saved fprs.  */
  
!   if (TARGET_64BIT)
!     {
!       if (cfun_save_high_fprs_p)
! 	{
! 	  next_offset = cfun_frame_layout.f8_offset;
! 	  for (i = FPR8_REGNUM; i <= FPR15_REGNUM; i++)
! 	    {
! 	      if (cfun_fpr_save_p (i))
! 		{
! 		  restore_fpr (frame_pointer,
! 			       offset + next_offset, i);
! 		  cfa_restores
! 		    = alloc_reg_note (REG_CFA_RESTORE,
! 				      gen_rtx_REG (DFmode, i), cfa_restores);
! 		  next_offset += 8;
! 		}
! 	    }
! 	}
! 
!     }
!   else
      {
!       next_offset = cfun_frame_layout.f4_offset;
!       /* f4, f6 */
!       for (i = FPR4_REGNUM; i <= FPR4_REGNUM + 1; i++)
  	{
  	  if (cfun_fpr_save_p (i))
  	    {
--- 12631,12640 ----
  
    /* Restore call saved fprs.  */
  
!   if (cfun_save_high_fprs_p)
      {
!       next_offset = cfun_frame_layout.f8_offset;
!       for (i = FPR8_REGNUM; i <= FPR15_REGNUM; i++)
  	{
  	  if (cfun_fpr_save_p (i))
  	    {
*************** s390_emit_epilogue (bool sibcall)
*** 12810,12819 ****
  				  gen_rtx_REG (DFmode, i), cfa_restores);
  	      next_offset += 8;
  	    }
- 	  else if (!TARGET_PACKED_STACK)
- 	    next_offset += 8;
  	}
- 
      }
  
    /* Restore call saved gprs.  */
--- 12645,12651 ----
*************** s390_emit_epilogue (bool sibcall)
*** 12835,12841 ****
  	      addr = plus_constant (Pmode, frame_pointer,
  				    offset + cfun_frame_layout.gprs_offset
  				    + (i - cfun_frame_layout.first_save_gpr_slot)
! 				    * UNITS_PER_LONG);
  	      addr = gen_rtx_MEM (Pmode, addr);
  	      set_mem_alias_set (addr, get_frame_alias_set ());
  	      emit_move_insn (addr, gen_rtx_REG (Pmode, i));
--- 12667,12673 ----
  	      addr = plus_constant (Pmode, frame_pointer,
  				    offset + cfun_frame_layout.gprs_offset
  				    + (i - cfun_frame_layout.first_save_gpr_slot)
! 				    * UNITS_PER_WORD);
  	      addr = gen_rtx_MEM (Pmode, addr);
  	      set_mem_alias_set (addr, get_frame_alias_set ());
  	      emit_move_insn (addr, gen_rtx_REG (Pmode, i));
*************** s390_emit_epilogue (bool sibcall)
*** 12875,12881 ****
  				offset + cfun_frame_layout.gprs_offset
  				+ (RETURN_REGNUM
  				   - cfun_frame_layout.first_save_gpr_slot)
! 				* UNITS_PER_LONG);
  	  addr = gen_rtx_MEM (Pmode, addr);
  	  set_mem_alias_set (addr, get_frame_alias_set ());
  	  emit_move_insn (return_reg, addr);
--- 12707,12713 ----
  				offset + cfun_frame_layout.gprs_offset
  				+ (RETURN_REGNUM
  				   - cfun_frame_layout.first_save_gpr_slot)
! 				* UNITS_PER_WORD);
  	  addr = gen_rtx_MEM (Pmode, addr);
  	  set_mem_alias_set (addr, get_frame_alias_set ());
  	  emit_move_insn (return_reg, addr);
*************** s390_emit_epilogue (bool sibcall)
*** 12891,12897 ****
  			   offset + cfun_frame_layout.gprs_offset
  			   + (cfun_frame_layout.first_restore_gpr
  			      - cfun_frame_layout.first_save_gpr_slot)
! 			   * UNITS_PER_LONG,
  			   cfun_frame_layout.first_restore_gpr,
  			   cfun_frame_layout.last_restore_gpr);
        insn = emit_insn (insn);
--- 12723,12729 ----
  			   offset + cfun_frame_layout.gprs_offset
  			   + (cfun_frame_layout.first_restore_gpr
  			      - cfun_frame_layout.first_save_gpr_slot)
! 			   * UNITS_PER_WORD,
  			   cfun_frame_layout.first_restore_gpr,
  			   cfun_frame_layout.last_restore_gpr);
        insn = emit_insn (insn);
*************** s390_output_split_stack_data (rtx parm_b
*** 12956,12980 ****
    switch_to_section (targetm.asm_out.function_rodata_section
  		     (current_function_decl, false));
  
!   if (TARGET_64BIT)
!     output_asm_insn (".align\t8", NULL);
!   else
!     output_asm_insn (".align\t4", NULL);
  
    (*targetm.asm_out.internal_label) (asm_out_file, "L",
  				     CODE_LABEL_NUMBER (parm_block));
!   if (TARGET_64BIT)
!     {
!       output_asm_insn (".quad\t%0", &frame_size);
!       output_asm_insn (".quad\t%0", &args_size);
!       output_asm_insn (".quad\t%1-%0", ops);
!     }
!   else
!     {
!       output_asm_insn (".long\t%0", &frame_size);
!       output_asm_insn (".long\t%0", &args_size);
!       output_asm_insn (".long\t%1-%0", ops);
!     }
  
    switch_to_section (current_function_section ());
  }
--- 12788,12800 ----
    switch_to_section (targetm.asm_out.function_rodata_section
  		     (current_function_decl, false));
  
!   output_asm_insn (".align\t8", NULL);
  
    (*targetm.asm_out.internal_label) (asm_out_file, "L",
  				     CODE_LABEL_NUMBER (parm_block));
!   output_asm_insn (".quad\t%0", &frame_size);
!   output_asm_insn (".quad\t%0", &args_size);
!   output_asm_insn (".quad\t%1-%0", ops);
  
    switch_to_section (current_function_section ());
  }
*************** s390_expand_split_stack_prologue (void)
*** 12988,12994 ****
    rtx r1, guard, cc = NULL;
    rtx_insn *insn;
    /* Offset from thread pointer to __private_ss.  */
!   int psso = TARGET_64BIT ? 0x38 : 0x20;
    /* Pointer size in bytes.  */
    /* Frame size and argument size - the two parameters to __morestack.  */
    HOST_WIDE_INT frame_size = cfun_frame_layout.frame_size;
--- 12808,12814 ----
    rtx r1, guard, cc = NULL;
    rtx_insn *insn;
    /* Offset from thread pointer to __private_ss.  */
!   int psso = 0x38;
    /* Pointer size in bytes.  */
    /* Frame size and argument size - the two parameters to __morestack.  */
    HOST_WIDE_INT frame_size = cfun_frame_layout.frame_size;
*************** s390_expand_split_stack_prologue (void)
*** 13034,13040 ****
        /* Get thread pointer.  r1 is the only register we can always destroy - r0
  	 could contain a static chain (and cannot be used to address memory
  	 anyway), r2-r6 can contain parameters, and r6-r15 are callee-saved.  */
!       emit_insn (gen_get_thread_pointer (Pmode, r1));
        /* Aim at __private_ss.  */
        guard = gen_rtx_MEM (Pmode, plus_constant (Pmode, r1, psso));
  
--- 12854,12860 ----
        /* Get thread pointer.  r1 is the only register we can always destroy - r0
  	 could contain a static chain (and cannot be used to address memory
  	 anyway), r2-r6 can contain parameters, and r6-r15 are callee-saved.  */
!       emit_insn (gen_get_thread_pointerdi (r1));
        /* Aim at __private_ss.  */
        guard = gen_rtx_MEM (Pmode, plus_constant (Pmode, r1, psso));
  
*************** s390_expand_split_stack_prologue (void)
*** 13043,13052 ****
        if (frame_size > SPLIT_STACK_AVAILABLE)
  	{
  	  emit_move_insn (r1, guard);
! 	  if (TARGET_64BIT)
! 	    emit_insn (gen_adddi3 (r1, r1, GEN_INT (frame_size)));
! 	  else
! 	    emit_insn (gen_addsi3 (r1, r1, GEN_INT (frame_size)));
  	  guard = r1;
  	}
  
--- 12863,12869 ----
        if (frame_size > SPLIT_STACK_AVAILABLE)
  	{
  	  emit_move_insn (r1, guard);
! 	  emit_insn (gen_adddi3 (r1, r1, GEN_INT (frame_size)));
  	  guard = r1;
  	}
  
*************** s390_expand_split_stack_prologue (void)
*** 13068,13087 ****
       conventions: it preserves param/return/static chain registers for
       calling main function body, and looks for its own parameters at %r1. */
    if (cc != NULL)
!     tmp = gen_split_stack_cond_call (Pmode,
! 				     morestack_ref,
! 				     parm_base,
! 				     call_done,
! 				     GEN_INT (frame_size),
! 				     GEN_INT (args_size),
! 				     cc);
    else
!     tmp = gen_split_stack_call (Pmode,
! 				morestack_ref,
! 				parm_base,
! 				call_done,
! 				GEN_INT (frame_size),
! 				GEN_INT (args_size));
  
    insn = emit_jump_insn (tmp);
    JUMP_LABEL (insn) = call_done;
--- 12885,12902 ----
       conventions: it preserves param/return/static chain registers for
       calling main function body, and looks for its own parameters at %r1. */
    if (cc != NULL)
!     tmp = gen_split_stack_cond_calldi (morestack_ref,
! 				       parm_base,
! 				       call_done,
! 				       GEN_INT (frame_size),
! 				       GEN_INT (args_size),
! 				       cc);
    else
!     tmp = gen_split_stack_calldi (morestack_ref,
! 				  parm_base,
! 				  call_done,
! 				  GEN_INT (frame_size),
! 				  GEN_INT (args_size));
  
    insn = emit_jump_insn (tmp);
    JUMP_LABEL (insn) = call_done;
*************** s390_can_use_return_insn (void)
*** 13159,13171 ****
      if (cfun_gpr_save_slot (i) != SAVE_SLOT_NONE)
        return false;
  
-   /* For 31 bit this is not covered by the frame_size check below
-      since f4, f6 are saved in the register save area without needing
-      additional stack space.  */
-   if (!TARGET_64BIT
-       && (cfun_fpr_save_p (FPR4_REGNUM) || cfun_fpr_save_p (FPR6_REGNUM)))
-     return false;
- 
    if (cfun->machine->base_reg
        && !call_used_regs[REGNO (cfun->machine->base_reg)])
      return false;
--- 12974,12979 ----
*************** s390_function_arg_advance (cumulative_ar
*** 13461,13468 ****
      }
    else if (s390_function_arg_integer (arg.mode, arg.type))
      {
!       int size = s390_function_arg_size (arg.mode, arg.type);
!       cum->gprs += ((size + UNITS_PER_LONG - 1) / UNITS_PER_LONG);
      }
    else
      gcc_unreachable ();
--- 13269,13275 ----
      }
    else if (s390_function_arg_integer (arg.mode, arg.type))
      {
!       cum->gprs += 1;
      }
    else
      gcc_unreachable ();
*************** s390_function_arg_advance (cumulative_ar
*** 13478,13486 ****
  
     On S/390, we use general purpose registers 2 through 6 to
     pass integer, pointer, and certain structure arguments, and
!    floating point registers 0 and 2 (0, 2, 4, and 6 on 64-bit)
!    to pass floating point arguments.  All remaining arguments
!    are pushed to the stack.  */
  
  static rtx
  s390_function_arg (cumulative_args_t cum_v, const function_arg_info &arg)
--- 13285,13292 ----
  
     On S/390, we use general purpose registers 2 through 6 to
     pass integer, pointer, and certain structure arguments, and
!    floating point registers 0, 2, 4, and 6 to pass floating point
!    arguments.  All remaining arguments are pushed to the stack.  */
  
  static rtx
  s390_function_arg (cumulative_args_t cum_v, const function_arg_info &arg)
*************** s390_function_arg (cumulative_args_t cum
*** 13508,13533 ****
      }
    else if (s390_function_arg_integer (arg.mode, arg.type))
      {
!       int size = s390_function_arg_size (arg.mode, arg.type);
!       int n_gprs = (size + UNITS_PER_LONG - 1) / UNITS_PER_LONG;
! 
!       if (cum->gprs + n_gprs > GP_ARG_NUM_REG)
  	return NULL_RTX;
!       else if (n_gprs == 1 || UNITS_PER_WORD == UNITS_PER_LONG)
  	return gen_rtx_REG (arg.mode, cum->gprs + 2);
-       else if (n_gprs == 2)
- 	{
- 	  rtvec p = rtvec_alloc (2);
- 
- 	  RTVEC_ELT (p, 0)
- 	    = gen_rtx_EXPR_LIST (SImode, gen_rtx_REG (SImode, cum->gprs + 2),
- 					 const0_rtx);
- 	  RTVEC_ELT (p, 1)
- 	    = gen_rtx_EXPR_LIST (SImode, gen_rtx_REG (SImode, cum->gprs + 3),
- 					 GEN_INT (4));
- 
- 	  return gen_rtx_PARALLEL (arg.mode, p);
- 	}
      }
  
    /* After the real arguments, expand_call calls us once again with an
--- 13314,13323 ----
      }
    else if (s390_function_arg_integer (arg.mode, arg.type))
      {
!       if (cum->gprs + 1 > GP_ARG_NUM_REG)
  	return NULL_RTX;
!       else
  	return gen_rtx_REG (arg.mode, cum->gprs + 2);
      }
  
    /* After the real arguments, expand_call calls us once again with an
*************** s390_return_in_memory (const_tree type,
*** 13589,13604 ****
  /* Function arguments and return values are promoted to word size.  */
  
  static machine_mode
! s390_promote_function_mode (const_tree type, machine_mode mode,
! 			    int *punsignedp,
  			    const_tree fntype ATTRIBUTE_UNUSED,
  			    int for_return ATTRIBUTE_UNUSED)
  {
    if (INTEGRAL_MODE_P (mode)
!       && GET_MODE_SIZE (mode) < UNITS_PER_LONG)
      {
        if (type != NULL_TREE && POINTER_TYPE_P (type))
  	*punsignedp = POINTERS_EXTEND_UNSIGNED;
        return Pmode;
      }
  
--- 13379,13398 ----
  /* Function arguments and return values are promoted to word size.  */
  
  static machine_mode
! s390_promote_function_mode (const_tree type ATTRIBUTE_UNUSED,
! 			    machine_mode mode,
! 			    int *punsignedp ATTRIBUTE_UNUSED,
  			    const_tree fntype ATTRIBUTE_UNUSED,
  			    int for_return ATTRIBUTE_UNUSED)
  {
    if (INTEGRAL_MODE_P (mode)
!       && GET_MODE_SIZE (mode) < UNITS_PER_WORD)
      {
+ /* This is defined for TPF.  */
+ #ifdef POINTERS_EXTEND_UNSIGNED
        if (type != NULL_TREE && POINTER_TYPE_P (type))
  	*punsignedp = POINTERS_EXTEND_UNSIGNED;
+ #endif
        return Pmode;
      }
  
*************** s390_function_and_libcall_value (machine
*** 13639,13664 ****
      return gen_rtx_REG (mode, FIRST_VEC_ARG_REGNO);
    else if (TARGET_HARD_FLOAT && SCALAR_FLOAT_MODE_P (mode))
      return gen_rtx_REG (mode, 16);
!   else if (GET_MODE_SIZE (mode) <= UNITS_PER_LONG
! 	   || UNITS_PER_LONG == UNITS_PER_WORD)
!     return gen_rtx_REG (mode, 2);
!   else if (GET_MODE_SIZE (mode) == 2 * UNITS_PER_LONG)
!     {
!       /* This case is triggered when returning a 64 bit value with
! 	 -m31 -mzarch.  Although the value would fit into a single
! 	 register it has to be forced into a 32 bit register pair in
! 	 order to match the ABI.  */
!       rtvec p = rtvec_alloc (2);
! 
!       RTVEC_ELT (p, 0)
! 	= gen_rtx_EXPR_LIST (SImode, gen_rtx_REG (SImode, 2), const0_rtx);
!       RTVEC_ELT (p, 1)
! 	= gen_rtx_EXPR_LIST (SImode, gen_rtx_REG (SImode, 3), GEN_INT (4));
! 
!       return gen_rtx_PARALLEL (mode, p);
!     }
! 
!   gcc_unreachable ();
  }
  
  /* Define where to return a scalar return value of type RET_TYPE.  */
--- 13433,13439 ----
      return gen_rtx_REG (mode, FIRST_VEC_ARG_REGNO);
    else if (TARGET_HARD_FLOAT && SCALAR_FLOAT_MODE_P (mode))
      return gen_rtx_REG (mode, 16);
!   return gen_rtx_REG (mode, 2);
  }
  
  /* Define where to return a scalar return value of type RET_TYPE.  */
*************** s390_va_start (tree valist, rtx nextarg
*** 13852,13858 ****
        || (cfun->va_list_fpr_size && n_fpr < FP_ARG_NUM_REG))
      {
        t = make_tree (TREE_TYPE (sav), return_address_pointer_rtx);
!       t = fold_build_pointer_plus_hwi (t, -RETURN_REGNUM * UNITS_PER_LONG);
  
        t = build2 (MODIFY_EXPR, TREE_TYPE (sav), sav, t);
        TREE_SIDE_EFFECTS (t) = 1;
--- 13627,13633 ----
        || (cfun->va_list_fpr_size && n_fpr < FP_ARG_NUM_REG))
      {
        t = make_tree (TREE_TYPE (sav), return_address_pointer_rtx);
!       t = fold_build_pointer_plus_hwi (t, -RETURN_REGNUM * UNITS_PER_WORD);
  
        t = build2 (MODIFY_EXPR, TREE_TYPE (sav), sav, t);
        TREE_SIDE_EFFECTS (t) = 1;
*************** s390_gimplify_va_arg (tree valist, tree
*** 13896,13902 ****
    int indirect_p, size, n_reg, sav_ofs, sav_scale, max_reg;
    tree lab_false, lab_over = NULL_TREE;
    tree addr = create_tmp_var (ptr_type_node, "addr");
!   bool left_align_p; /* How a value < UNITS_PER_LONG is aligned within
  			a stack slot.  */
  
    f_gpr = TYPE_FIELDS (TREE_TYPE (va_list_type_node));
--- 13671,13677 ----
    int indirect_p, size, n_reg, sav_ofs, sav_scale, max_reg;
    tree lab_false, lab_over = NULL_TREE;
    tree addr = create_tmp_var (ptr_type_node, "addr");
!   bool left_align_p; /* How a value < UNITS_PER_WORD is aligned within
  			a stack slot.  */
  
    f_gpr = TYPE_FIELDS (TREE_TYPE (va_list_type_node));
*************** s390_gimplify_va_arg (tree valist, tree
*** 13930,13941 ****
        reg = gpr;
        n_reg = 1;
  
!       /* kernel stack layout on 31 bit: It is assumed here that no padding
! 	 will be added by s390_frame_info because for va_args always an even
! 	 number of gprs has to be saved r15-r2 = 14 regs.  */
!       sav_ofs = 2 * UNITS_PER_LONG;
!       sav_scale = UNITS_PER_LONG;
!       size = UNITS_PER_LONG;
        max_reg = GP_ARG_NUM_REG - n_reg;
        left_align_p = false;
      }
--- 13705,13713 ----
        reg = gpr;
        n_reg = 1;
  
!       sav_ofs = 2 * UNITS_PER_WORD;
!       sav_scale = UNITS_PER_WORD;
!       size = UNITS_PER_WORD;
        max_reg = GP_ARG_NUM_REG - n_reg;
        left_align_p = false;
      }
*************** s390_gimplify_va_arg (tree valist, tree
*** 13967,13973 ****
        indirect_p = 0;
        reg = fpr;
        n_reg = 1;
!       sav_ofs = 16 * UNITS_PER_LONG;
        sav_scale = 8;
        max_reg = FP_ARG_NUM_REG - n_reg;
        left_align_p = false;
--- 13739,13745 ----
        indirect_p = 0;
        reg = fpr;
        n_reg = 1;
!       sav_ofs = 16 * UNITS_PER_WORD;
        sav_scale = 8;
        max_reg = FP_ARG_NUM_REG - n_reg;
        left_align_p = false;
*************** s390_gimplify_va_arg (tree valist, tree
*** 13983,13999 ****
        /* Otherwise into GP registers.  */
        indirect_p = 0;
        reg = gpr;
!       n_reg = (size + UNITS_PER_LONG - 1) / UNITS_PER_LONG;
  
!       /* kernel stack layout on 31 bit: It is assumed here that no padding
! 	 will be added by s390_frame_info because for va_args always an even
! 	 number of gprs has to be saved r15-r2 = 14 regs.  */
!       sav_ofs = 2 * UNITS_PER_LONG;
  
!       if (size < UNITS_PER_LONG)
! 	sav_ofs += UNITS_PER_LONG - size;
  
!       sav_scale = UNITS_PER_LONG;
        max_reg = GP_ARG_NUM_REG - n_reg;
        left_align_p = false;
      }
--- 13755,13768 ----
        /* Otherwise into GP registers.  */
        indirect_p = 0;
        reg = gpr;
!       n_reg = (size + UNITS_PER_WORD - 1) / UNITS_PER_WORD;
  
!       sav_ofs = 2 * UNITS_PER_WORD;
  
!       if (size < UNITS_PER_WORD)
! 	sav_ofs += UNITS_PER_WORD - size;
  
!       sav_scale = UNITS_PER_WORD;
        max_reg = GP_ARG_NUM_REG - n_reg;
        left_align_p = false;
      }
*************** s390_gimplify_va_arg (tree valist, tree
*** 14037,14051 ****
    /* ... Otherwise out of the overflow area.  */
  
    t = ovf;
!   if (size < UNITS_PER_LONG && !left_align_p)
!     t = fold_build_pointer_plus_hwi (t, UNITS_PER_LONG - size);
  
    gimplify_expr (&t, pre_p, NULL, is_gimple_val, fb_rvalue);
  
    gimplify_assign (addr, t, pre_p);
  
!   if (size < UNITS_PER_LONG && left_align_p)
!     t = fold_build_pointer_plus_hwi (t, UNITS_PER_LONG);
    else
      t = fold_build_pointer_plus_hwi (t, size);
  
--- 13806,13820 ----
    /* ... Otherwise out of the overflow area.  */
  
    t = ovf;
!   if (size < UNITS_PER_WORD && !left_align_p)
!     t = fold_build_pointer_plus_hwi (t, UNITS_PER_WORD - size);
  
    gimplify_expr (&t, pre_p, NULL, is_gimple_val, fb_rvalue);
  
    gimplify_assign (addr, t, pre_p);
  
!   if (size < UNITS_PER_WORD && left_align_p)
!     t = fold_build_pointer_plus_hwi (t, UNITS_PER_WORD);
    else
      t = fold_build_pointer_plus_hwi (t, size);
  
*************** s390_asm_trampoline_template (FILE *file
*** 14187,14206 ****
    op[0] = gen_rtx_REG (Pmode, 0);
    op[1] = gen_rtx_REG (Pmode, 1);
  
!   if (TARGET_64BIT)
!     {
!       output_asm_insn ("basr\t%1,0", op);         /* 2 byte */
!       output_asm_insn ("lmg\t%0,%1,14(%1)", op);  /* 6 byte */
!       output_asm_insn ("br\t%1", op);             /* 2 byte */
!       ASM_OUTPUT_SKIP (file, (HOST_WIDE_INT)(TRAMPOLINE_SIZE - 10));
!     }
!   else
!     {
!       output_asm_insn ("basr\t%1,0", op);         /* 2 byte */
!       output_asm_insn ("lm\t%0,%1,6(%1)", op);    /* 4 byte */
!       output_asm_insn ("br\t%1", op);             /* 2 byte */
!       ASM_OUTPUT_SKIP (file, (HOST_WIDE_INT)(TRAMPOLINE_SIZE - 8));
!     }
  }
  
  /* Emit RTL insns to initialize the variable parts of a trampoline.
--- 13956,13965 ----
    op[0] = gen_rtx_REG (Pmode, 0);
    op[1] = gen_rtx_REG (Pmode, 1);
  
!   output_asm_insn ("basr\t%1,0", op);         /* 2 byte */
!   output_asm_insn ("lmg\t%0,%1,14(%1)", op);  /* 6 byte */
!   output_asm_insn ("br\t%1", op);             /* 2 byte */
!   ASM_OUTPUT_SKIP (file, (HOST_WIDE_INT)(TRAMPOLINE_SIZE - 10));
  }
  
  /* Emit RTL insns to initialize the variable parts of a trampoline.
*************** s390_trampoline_init (rtx m_tramp, tree
*** 14214,14224 ****
    rtx mem;
  
    emit_block_move (m_tramp, assemble_trampoline_template (),
! 		   GEN_INT (2 * UNITS_PER_LONG), BLOCK_OP_NORMAL);
  
!   mem = adjust_address (m_tramp, Pmode, 2 * UNITS_PER_LONG);
    emit_move_insn (mem, cxt);
!   mem = adjust_address (m_tramp, Pmode, 3 * UNITS_PER_LONG);
    emit_move_insn (mem, fnaddr);
  }
  
--- 13973,13983 ----
    rtx mem;
  
    emit_block_move (m_tramp, assemble_trampoline_template (),
! 		   GEN_INT (2 * UNITS_PER_WORD), BLOCK_OP_NORMAL);
  
!   mem = adjust_address (m_tramp, Pmode, 2 * UNITS_PER_WORD);
    emit_move_insn (mem, cxt);
!   mem = adjust_address (m_tramp, Pmode, 3 * UNITS_PER_WORD);
    emit_move_insn (mem, fnaddr);
  }
  
*************** s390_function_profiler (FILE *file, int
*** 14257,14272 ****
  
    op[0] = gen_rtx_REG (Pmode, RETURN_REGNUM);
    op[1] = gen_rtx_REG (Pmode, STACK_POINTER_REGNUM);
!   op[1] = gen_rtx_MEM (Pmode, plus_constant (Pmode, op[1], UNITS_PER_LONG));
!   op[3] = GEN_INT (UNITS_PER_LONG);
  
    op[2] = gen_rtx_SYMBOL_REF (Pmode, flag_fentry ? "__fentry__" : "_mcount");
    SYMBOL_REF_FLAGS (op[2]) |= SYMBOL_FLAG_FUNCTION;
-   if (flag_pic && !TARGET_64BIT)
-     {
-       op[2] = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, op[2]), UNSPEC_PLT31);
-       op[2] = gen_rtx_CONST (Pmode, op[2]);
-     }
  
    if (flag_record_mcount)
      fprintf (file, "1:\n");
--- 14016,14026 ----
  
    op[0] = gen_rtx_REG (Pmode, RETURN_REGNUM);
    op[1] = gen_rtx_REG (Pmode, STACK_POINTER_REGNUM);
!   op[1] = gen_rtx_MEM (Pmode, plus_constant (Pmode, op[1], UNITS_PER_WORD));
!   op[3] = GEN_INT (UNITS_PER_WORD);
  
    op[2] = gen_rtx_SYMBOL_REF (Pmode, flag_fentry ? "__fentry__" : "_mcount");
    SYMBOL_REF_FLAGS (op[2]) |= SYMBOL_FLAG_FUNCTION;
  
    if (flag_record_mcount)
      fprintf (file, "1:\n");
*************** s390_function_profiler (FILE *file, int
*** 14281,14323 ****
        else
  	output_asm_insn ("brasl\t0,%2%K2", op);
      }
!   else if (TARGET_64BIT)
!     {
!       if (flag_nop_mcount)
! 	output_asm_nops ("-mnop-mcount", /* stg */ 3 + /* brasl */ 3 +
! 			 /* lg */ 3);
!       else
! 	{
! 	  output_asm_insn ("stg\t%0,%1", op);
! 	  if (flag_dwarf2_cfi_asm)
! 	    output_asm_insn (".cfi_rel_offset\t%0,%3", op);
! 	  output_asm_insn ("brasl\t%0,%2%K2", op);
! 	  output_asm_insn ("lg\t%0,%1", op);
! 	  if (flag_dwarf2_cfi_asm)
! 	    output_asm_insn (".cfi_restore\t%0", op);
! 	}
!     }
    else
      {
!       if (flag_nop_mcount)
! 	output_asm_nops ("-mnop-mcount", /* st */ 2 + /* brasl */ 3 +
! 			 /* l */ 2);
!       else
! 	{
! 	  output_asm_insn ("st\t%0,%1", op);
! 	  if (flag_dwarf2_cfi_asm)
! 	    output_asm_insn (".cfi_rel_offset\t%0,%3", op);
! 	  output_asm_insn ("brasl\t%0,%2%K2", op);
! 	  output_asm_insn ("l\t%0,%1", op);
! 	  if (flag_dwarf2_cfi_asm)
! 	    output_asm_insn (".cfi_restore\t%0", op);
! 	}
      }
  
    if (flag_record_mcount)
      {
        fprintf (file, "\t.section __mcount_loc, \"a\",@progbits\n");
!       fprintf (file, "\t.%s 1b\n", TARGET_64BIT ? "quad" : "long");
        fprintf (file, "\t.previous\n");
      }
  }
--- 14035,14059 ----
        else
  	output_asm_insn ("brasl\t0,%2%K2", op);
      }
! 
!   if (flag_nop_mcount)
!     output_asm_nops ("-mnop-mcount", /* stg */ 3 + /* brasl */ 3 +
! 		     /* lg */ 3);
    else
      {
!       output_asm_insn ("stg\t%0,%1", op);
!       if (flag_dwarf2_cfi_asm)
! 	output_asm_insn (".cfi_rel_offset\t%0,%3", op);
!       output_asm_insn ("brasl\t%0,%2%K2", op);
!       output_asm_insn ("lg\t%0,%1", op);
!       if (flag_dwarf2_cfi_asm)
! 	output_asm_insn (".cfi_restore\t%0", op);
      }
  
    if (flag_record_mcount)
      {
        fprintf (file, "\t.section __mcount_loc, \"a\",@progbits\n");
!       fprintf (file, "\t.quad 1b\n");
        fprintf (file, "\t.previous\n");
      }
  }
*************** s390_output_mi_thunk (FILE *file, tree t
*** 14386,14392 ****
  {
    const char *fnname = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (thunk));
    rtx op[10];
-   int nonlocal = 0;
  
    assemble_start_function (thunk, fnname);
    /* Make sure unwind info is emitted for the thunk if needed.  */
--- 14122,14127 ----
*************** s390_output_mi_thunk (FILE *file, tree t
*** 14394,14408 ****
  
    /* Operand 0 is the target function.  */
    op[0] = XEXP (DECL_RTL (function), 0);
-   if (flag_pic && !SYMBOL_REF_LOCAL_P (op[0]))
-     {
-       nonlocal = 1;
-       if (!TARGET_64BIT)
- 	{
- 	  op[0] = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, op[0]), UNSPEC_GOT);
- 	  op[0] = gen_rtx_CONST (Pmode, op[0]);
- 	}
-     }
  
    /* Operand 1 is the 'this' pointer.  */
    if (aggregate_value_p (TREE_TYPE (TREE_TYPE (function)), function))
--- 14129,14134 ----
*************** s390_output_mi_thunk (FILE *file, tree t
*** 14429,14648 ****
    op[9] = NULL_RTX;
  
    /* Generate code.  */
!   if (TARGET_64BIT)
      {
!       /* Setup literal pool pointer if required.  */
!       if ((!DISP_IN_RANGE (delta)
! 	   && !CONST_OK_FOR_K (delta)
! 	   && !CONST_OK_FOR_Os (delta))
! 	  || (!DISP_IN_RANGE (vcall_offset)
! 	      && !CONST_OK_FOR_K (vcall_offset)
! 	      && !CONST_OK_FOR_Os (vcall_offset)))
! 	{
! 	  op[5] = gen_label_rtx ();
! 	  output_asm_insn ("larl\t%4,%5", op);
! 	}
! 
!       /* Add DELTA to this pointer.  */
!       if (delta)
! 	{
! 	  if (CONST_OK_FOR_J (delta))
! 	    output_asm_insn ("la\t%1,%2(%1)", op);
! 	  else if (DISP_IN_RANGE (delta))
! 	    output_asm_insn ("lay\t%1,%2(%1)", op);
! 	  else if (CONST_OK_FOR_K (delta))
! 	    output_asm_insn ("aghi\t%1,%2", op);
! 	  else if (CONST_OK_FOR_Os (delta))
! 	    output_asm_insn ("agfi\t%1,%2", op);
! 	  else
! 	    {
! 	      op[6] = gen_label_rtx ();
! 	      output_asm_insn ("agf\t%1,%6-%5(%4)", op);
! 	    }
! 	}
! 
!       /* Perform vcall adjustment.  */
!       if (vcall_offset)
! 	{
! 	  if (DISP_IN_RANGE (vcall_offset))
! 	    {
! 	      output_asm_insn ("lg\t%4,0(%1)", op);
! 	      output_asm_insn ("ag\t%1,%3(%4)", op);
! 	    }
! 	  else if (CONST_OK_FOR_K (vcall_offset))
! 	    {
! 	      output_asm_insn ("lghi\t%4,%3", op);
! 	      output_asm_insn ("ag\t%4,0(%1)", op);
! 	      output_asm_insn ("ag\t%1,0(%4)", op);
! 	    }
! 	  else if (CONST_OK_FOR_Os (vcall_offset))
! 	    {
! 	      output_asm_insn ("lgfi\t%4,%3", op);
! 	      output_asm_insn ("ag\t%4,0(%1)", op);
! 	      output_asm_insn ("ag\t%1,0(%4)", op);
! 	    }
! 	  else
! 	    {
! 	      op[7] = gen_label_rtx ();
! 	      output_asm_insn ("llgf\t%4,%7-%5(%4)", op);
! 	      output_asm_insn ("ag\t%4,0(%1)", op);
! 	      output_asm_insn ("ag\t%1,0(%4)", op);
! 	    }
! 	}
! 
!       /* Jump to target.  */
!       output_asm_insn ("jg\t%0%K0", op);
! 
!       /* Output literal pool if required.  */
!       if (op[5])
! 	{
! 	  output_asm_insn (".align\t4", op);
! 	  targetm.asm_out.internal_label (file, "L",
! 					  CODE_LABEL_NUMBER (op[5]));
! 	}
!       if (op[6])
! 	{
! 	  targetm.asm_out.internal_label (file, "L",
! 					  CODE_LABEL_NUMBER (op[6]));
! 	  output_asm_insn (".long\t%2", op);
! 	}
!       if (op[7])
! 	{
! 	  targetm.asm_out.internal_label (file, "L",
! 					  CODE_LABEL_NUMBER (op[7]));
! 	  output_asm_insn (".long\t%3", op);
! 	}
      }
!   else
      {
!       /* Setup base pointer if required.  */
!       if (!vcall_offset
! 	  || (!DISP_IN_RANGE (delta)
! 	      && !CONST_OK_FOR_K (delta)
! 	      && !CONST_OK_FOR_Os (delta))
! 	  || (!DISP_IN_RANGE (delta)
! 	      && !CONST_OK_FOR_K (vcall_offset)
! 	      && !CONST_OK_FOR_Os (vcall_offset)))
  	{
! 	  op[5] = gen_label_rtx ();
! 	  output_asm_insn ("basr\t%4,0", op);
! 	  targetm.asm_out.internal_label (file, "L",
! 					  CODE_LABEL_NUMBER (op[5]));
  	}
  
!       /* Add DELTA to this pointer.  */
!       if (delta)
  	{
! 	  if (CONST_OK_FOR_J (delta))
! 	    output_asm_insn ("la\t%1,%2(%1)", op);
! 	  else if (DISP_IN_RANGE (delta))
! 	    output_asm_insn ("lay\t%1,%2(%1)", op);
! 	  else if (CONST_OK_FOR_K (delta))
! 	    output_asm_insn ("ahi\t%1,%2", op);
! 	  else if (CONST_OK_FOR_Os (delta))
! 	    output_asm_insn ("afi\t%1,%2", op);
! 	  else
! 	    {
! 	      op[6] = gen_label_rtx ();
! 	      output_asm_insn ("a\t%1,%6-%5(%4)", op);
! 	    }
  	}
! 
!       /* Perform vcall adjustment.  */
!       if (vcall_offset)
  	{
! 	  if (CONST_OK_FOR_J (vcall_offset))
! 	    {
! 	      output_asm_insn ("l\t%4,0(%1)", op);
! 	      output_asm_insn ("a\t%1,%3(%4)", op);
! 	    }
! 	  else if (DISP_IN_RANGE (vcall_offset))
! 	    {
! 	      output_asm_insn ("l\t%4,0(%1)", op);
! 	      output_asm_insn ("ay\t%1,%3(%4)", op);
! 	    }
! 	  else if (CONST_OK_FOR_K (vcall_offset))
! 	    {
! 	      output_asm_insn ("lhi\t%4,%3", op);
! 	      output_asm_insn ("a\t%4,0(%1)", op);
! 	      output_asm_insn ("a\t%1,0(%4)", op);
! 	    }
! 	  else if (CONST_OK_FOR_Os (vcall_offset))
! 	    {
! 	      output_asm_insn ("iilf\t%4,%3", op);
! 	      output_asm_insn ("a\t%4,0(%1)", op);
! 	      output_asm_insn ("a\t%1,0(%4)", op);
! 	    }
! 	  else
! 	    {
! 	      op[7] = gen_label_rtx ();
! 	      output_asm_insn ("l\t%4,%7-%5(%4)", op);
! 	      output_asm_insn ("a\t%4,0(%1)", op);
! 	      output_asm_insn ("a\t%1,0(%4)", op);
! 	    }
! 
! 	  /* We had to clobber the base pointer register.
! 	     Re-setup the base pointer (with a different base).  */
! 	  op[5] = gen_label_rtx ();
! 	  output_asm_insn ("basr\t%4,0", op);
! 	  targetm.asm_out.internal_label (file, "L",
! 					  CODE_LABEL_NUMBER (op[5]));
  	}
! 
!       /* Jump to target.  */
!       op[8] = gen_label_rtx ();
! 
!       if (!flag_pic)
! 	output_asm_insn ("l\t%4,%8-%5(%4)", op);
!       else if (!nonlocal)
! 	output_asm_insn ("a\t%4,%8-%5(%4)", op);
!       /* We cannot call through .plt, since .plt requires %r12 loaded.  */
!       else if (flag_pic == 1)
  	{
! 	  output_asm_insn ("a\t%4,%8-%5(%4)", op);
! 	  output_asm_insn ("l\t%4,%0(%4)", op);
  	}
!       else if (flag_pic == 2)
  	{
! 	  op[9] = gen_rtx_REG (Pmode, 0);
! 	  output_asm_insn ("l\t%9,%8-4-%5(%4)", op);
! 	  output_asm_insn ("a\t%4,%8-%5(%4)", op);
! 	  output_asm_insn ("ar\t%4,%9", op);
! 	  output_asm_insn ("l\t%4,0(%4)", op);
  	}
  
!       output_asm_insn ("br\t%4", op);
  
!       /* Output literal pool.  */
        output_asm_insn (".align\t4", op);
! 
!       if (nonlocal && flag_pic == 2)
! 	output_asm_insn (".long\t%0", op);
!       if (nonlocal)
! 	{
! 	  op[0] = gen_rtx_SYMBOL_REF (Pmode, "_GLOBAL_OFFSET_TABLE_");
! 	  SYMBOL_REF_FLAGS (op[0]) = SYMBOL_FLAG_LOCAL;
! 	}
! 
!       targetm.asm_out.internal_label (file, "L", CODE_LABEL_NUMBER (op[8]));
!       if (!flag_pic)
! 	output_asm_insn (".long\t%0", op);
!       else
! 	output_asm_insn (".long\t%0-%5", op);
! 
!       if (op[6])
! 	{
! 	  targetm.asm_out.internal_label (file, "L",
! 					  CODE_LABEL_NUMBER (op[6]));
! 	  output_asm_insn (".long\t%2", op);
! 	}
!       if (op[7])
! 	{
! 	  targetm.asm_out.internal_label (file, "L",
! 					  CODE_LABEL_NUMBER (op[7]));
! 	  output_asm_insn (".long\t%3", op);
! 	}
      }
    final_end_function ();
    assemble_end_function (thunk, fnname);
  }
--- 14155,14242 ----
    op[9] = NULL_RTX;
  
    /* Generate code.  */
!   /* Setup literal pool pointer if required.  */
!   if ((!DISP_IN_RANGE (delta)
!        && !CONST_OK_FOR_K (delta)
!        && !CONST_OK_FOR_Os (delta))
!       || (!DISP_IN_RANGE (vcall_offset)
! 	  && !CONST_OK_FOR_K (vcall_offset)
! 	  && !CONST_OK_FOR_Os (vcall_offset)))
      {
!       op[5] = gen_label_rtx ();
!       output_asm_insn ("larl\t%4,%5", op);
      }
! 
!   /* Add DELTA to this pointer.  */
!   if (delta)
      {
!       if (CONST_OK_FOR_J (delta))
! 	output_asm_insn ("la\t%1,%2(%1)", op);
!       else if (DISP_IN_RANGE (delta))
! 	output_asm_insn ("lay\t%1,%2(%1)", op);
!       else if (CONST_OK_FOR_K (delta))
! 	output_asm_insn ("aghi\t%1,%2", op);
!       else if (CONST_OK_FOR_Os (delta))
! 	output_asm_insn ("agfi\t%1,%2", op);
!       else
  	{
! 	  op[6] = gen_label_rtx ();
! 	  output_asm_insn ("agf\t%1,%6-%5(%4)", op);
  	}
+     }
  
!   /* Perform vcall adjustment.  */
!   if (vcall_offset)
!     {
!       if (DISP_IN_RANGE (vcall_offset))
  	{
! 	  output_asm_insn ("lg\t%4,0(%1)", op);
! 	  output_asm_insn ("ag\t%1,%3(%4)", op);
  	}
!       else if (CONST_OK_FOR_K (vcall_offset))
  	{
! 	  output_asm_insn ("lghi\t%4,%3", op);
! 	  output_asm_insn ("ag\t%4,0(%1)", op);
! 	  output_asm_insn ("ag\t%1,0(%4)", op);
  	}
!       else if (CONST_OK_FOR_Os (vcall_offset))
  	{
! 	  output_asm_insn ("lgfi\t%4,%3", op);
! 	  output_asm_insn ("ag\t%4,0(%1)", op);
! 	  output_asm_insn ("ag\t%1,0(%4)", op);
  	}
!       else
  	{
! 	  op[7] = gen_label_rtx ();
! 	  output_asm_insn ("llgf\t%4,%7-%5(%4)", op);
! 	  output_asm_insn ("ag\t%4,0(%1)", op);
! 	  output_asm_insn ("ag\t%1,0(%4)", op);
  	}
+     }
  
!   /* Jump to target.  */
!   output_asm_insn ("jg\t%0%K0", op);
  
!   /* Output literal pool if required.  */
!   if (op[5])
!     {
        output_asm_insn (".align\t4", op);
!       targetm.asm_out.internal_label (file, "L",
! 				      CODE_LABEL_NUMBER (op[5]));
!     }
!   if (op[6])
!     {
!       targetm.asm_out.internal_label (file, "L",
! 				      CODE_LABEL_NUMBER (op[6]));
!       output_asm_insn (".long\t%2", op);
!     }
!   if (op[7])
!     {
!       targetm.asm_out.internal_label (file, "L",
! 				      CODE_LABEL_NUMBER (op[7]));
!       output_asm_insn (".long\t%3", op);
      }
+ 
    final_end_function ();
    assemble_end_function (thunk, fnname);
  }
*************** s390_indirect_branch_via_inline_thunk (r
*** 14739,14762 ****
        ASM_OUTPUT_LABEL (asm_out_file, label);
      }
  
-   if (!TARGET_ZARCH)
-     fputs ("\t.machinemode zarch\n", asm_out_file);
- 
    if (REG_P (execute_target))
      fprintf (asm_out_file, "\tex\t%%r0,0(%%r%d)\n", REGNO (execute_target));
    else
      output_asm_insn ("\texrl\t%%r0,%0", &execute_target);
  
-   if (!TARGET_ZARCH)
-     fputs ("\t.machinemode esa\n", asm_out_file);
- 
    fputs ("0:\tj\t0b\n", asm_out_file);
  }
  
  static bool
  s390_valid_pointer_mode (scalar_int_mode mode)
  {
!   return (mode == SImode || (TARGET_64BIT && mode == DImode));
  }
  
  /* Checks whether the given CALL_EXPR would use a caller
--- 14333,14350 ----
        ASM_OUTPUT_LABEL (asm_out_file, label);
      }
  
    if (REG_P (execute_target))
      fprintf (asm_out_file, "\tex\t%%r0,0(%%r%d)\n", REGNO (execute_target));
    else
      output_asm_insn ("\texrl\t%%r0,%0", &execute_target);
  
    fputs ("0:\tj\t0b\n", asm_out_file);
  }
  
  static bool
  s390_valid_pointer_mode (scalar_int_mode mode)
  {
!   return mode == SImode || mode == DImode;
  }
  
  /* Checks whether the given CALL_EXPR would use a caller
*************** s390_call_saved_register_used (tree call
*** 14802,14808 ****
        if (REG_P (parm_rtx))
  	{
  	  int size = s390_function_arg_size (arg.mode, arg.type);
! 	  int nregs = (size + UNITS_PER_LONG - 1) / UNITS_PER_LONG;
  
  	  for (reg = 0; reg < nregs; reg++)
  	    if (!call_used_or_fixed_reg_p (reg + REGNO (parm_rtx)))
--- 14390,14396 ----
        if (REG_P (parm_rtx))
  	{
  	  int size = s390_function_arg_size (arg.mode, arg.type);
! 	  int nregs = (size + UNITS_PER_WORD - 1) / UNITS_PER_WORD;
  
  	  for (reg = 0; reg < nregs; reg++)
  	    if (!call_used_or_fixed_reg_p (reg + REGNO (parm_rtx)))
*************** s390_function_ok_for_sibcall (tree decl,
*** 14863,14873 ****
    if (TARGET_TPF_PROFILING)
      return false;
  
-   /* The 31 bit PLT code uses register 12 (GOT pointer - caller saved)
-      which would have to be restored before the sibcall.  */
-   if (!TARGET_64BIT && flag_pic && decl && !targetm.binds_local_p (decl))
-     return false;
- 
    /* The thunks for indirect branches require r1 if no exrl is
       available.  r1 might not be available when doing a sibling
       call.  */
--- 14451,14456 ----
*************** rtx_insn *
*** 14908,14914 ****
  s390_emit_call (rtx addr_location, rtx tls_call, rtx result_reg,
  		rtx retaddr_reg)
  {
-   bool plt31_call_p = false;
    rtx_insn *insn;
    rtx vec[4] = { NULL_RTX };
    int elts = 0;
--- 14491,14496 ----
*************** s390_emit_call (rtx addr_location, rtx t
*** 14918,14966 ****
    rtx *clobber_thunk_reg = &vec[3];
    int i;
  
-   /* Direct function calls need special treatment.  */
-   if (GET_CODE (addr_location) == SYMBOL_REF)
-     {
-       /* When calling a global routine in PIC mode, we must
- 	 replace the symbol itself with the PLT stub.  */
-       if (flag_pic && !SYMBOL_REF_LOCAL_P (addr_location) && !TARGET_64BIT)
- 	{
- 	  if (retaddr_reg != NULL_RTX)
- 	    {
- 	      addr_location = gen_rtx_UNSPEC (Pmode,
- 					      gen_rtvec (1, addr_location),
- 					      UNSPEC_PLT31);
- 	      addr_location = gen_rtx_CONST (Pmode, addr_location);
- 	      plt31_call_p = true;
- 	    }
- 	  else
- 	    /* For -fpic code the PLT entries might use r12 which is
- 	       call-saved.  Therefore we cannot do a sibcall when
- 	       calling directly using a symbol ref.  When reaching
- 	       this point we decided (in s390_function_ok_for_sibcall)
- 	       to do a sibcall for a function pointer but one of the
- 	       optimizers was able to get rid of the function pointer
- 	       by propagating the symbol ref into the call.  This
- 	       optimization is illegal for S/390 so we turn the direct
- 	       call into a indirect call again.  */
- 	    addr_location = force_reg (Pmode, addr_location);
- 	}
-     }
- 
    /* If it is already an indirect call or the code above moved the
       SYMBOL_REF to somewhere else make sure the address can be found in
       register 1.  */
    if (retaddr_reg == NULL_RTX
!       && GET_CODE (addr_location) != SYMBOL_REF
!       && !plt31_call_p)
      {
        emit_move_insn (gen_rtx_REG (Pmode, SIBCALL_REGNUM), addr_location);
        addr_location = gen_rtx_REG (Pmode, SIBCALL_REGNUM);
      }
  
    if (TARGET_INDIRECT_BRANCH_NOBP_CALL
!       && GET_CODE (addr_location) != SYMBOL_REF
!       && !plt31_call_p)
      {
        /* Indirect branch thunks require the target to be a single GPR.  */
        addr_location = force_reg (Pmode, addr_location);
--- 14500,14517 ----
    rtx *clobber_thunk_reg = &vec[3];
    int i;
  
    /* If it is already an indirect call or the code above moved the
       SYMBOL_REF to somewhere else make sure the address can be found in
       register 1.  */
    if (retaddr_reg == NULL_RTX
!       && GET_CODE (addr_location) != SYMBOL_REF)
      {
        emit_move_insn (gen_rtx_REG (Pmode, SIBCALL_REGNUM), addr_location);
        addr_location = gen_rtx_REG (Pmode, SIBCALL_REGNUM);
      }
  
    if (TARGET_INDIRECT_BRANCH_NOBP_CALL
!       && GET_CODE (addr_location) != SYMBOL_REF)
      {
        /* Indirect branch thunks require the target to be a single GPR.  */
        addr_location = force_reg (Pmode, addr_location);
*************** s390_emit_call (rtx addr_location, rtx t
*** 15011,15018 ****
  
    insn = emit_call_insn (*call);
  
!   /* 31-bit PLT stubs and tls calls use the GOT register implicitly.  */
!   if (plt31_call_p || tls_call != NULL_RTX)
      {
        /* s390_function_ok_for_sibcall should
  	 have denied sibcalls in this case.  */
--- 14562,14569 ----
  
    insn = emit_call_insn (*call);
  
!   /* tls calls use the GOT register implicitly.  */
!   if (tls_call != NULL_RTX)
      {
        /* s390_function_ok_for_sibcall should
  	 have denied sibcalls in this case.  */
*************** s390_conditional_register_usage (void)
*** 15033,15048 ****
      fixed_regs[PIC_OFFSET_TABLE_REGNUM] = 1;
    fixed_regs[BASE_REGNUM] = 0;
    fixed_regs[RETURN_REGNUM] = 0;
!   if (TARGET_64BIT)
!     {
!       for (i = FPR8_REGNUM; i <= FPR15_REGNUM; i++)
! 	call_used_regs[i] = 0;
!     }
!   else
!     {
!       call_used_regs[FPR4_REGNUM] = 0;
!       call_used_regs[FPR6_REGNUM] = 0;
!     }
  
    if (TARGET_SOFT_FLOAT)
      {
--- 14584,14592 ----
      fixed_regs[PIC_OFFSET_TABLE_REGNUM] = 1;
    fixed_regs[BASE_REGNUM] = 0;
    fixed_regs[RETURN_REGNUM] = 0;
! 
!   for (i = FPR8_REGNUM; i <= FPR15_REGNUM; i++)
!     call_used_regs[i] = 0;
  
    if (TARGET_SOFT_FLOAT)
      {
*************** s390_optimize_prologue (void)
*** 15188,15194 ****
  	  if (cfun_frame_layout.first_save_gpr != -1)
  	    save_gprs (base,
  		       off + (cfun_frame_layout.first_save_gpr
! 			      - first) * UNITS_PER_LONG,
  		       cfun_frame_layout.first_save_gpr,
  		       cfun_frame_layout.last_save_gpr, insn);
  
--- 14732,14738 ----
  	  if (cfun_frame_layout.first_save_gpr != -1)
  	    save_gprs (base,
  		       off + (cfun_frame_layout.first_save_gpr
! 			      - first) * UNITS_PER_WORD,
  		       cfun_frame_layout.first_save_gpr,
  		       cfun_frame_layout.last_save_gpr, insn);
  
*************** s390_optimize_prologue (void)
*** 15244,15250 ****
  	    {
  	      rtx rpat = restore_gprs (base,
  				       off + (cfun_frame_layout.first_restore_gpr
! 					      - first) * UNITS_PER_LONG,
  				       cfun_frame_layout.first_restore_gpr,
  				       cfun_frame_layout.last_restore_gpr);
  
--- 14788,14794 ----
  	    {
  	      rtx rpat = restore_gprs (base,
  				       off + (cfun_frame_layout.first_restore_gpr
! 					      - first) * UNITS_PER_WORD,
  				       cfun_frame_layout.first_restore_gpr,
  				       cfun_frame_layout.last_restore_gpr);
  
*************** static void
*** 16602,16616 ****
  s390_option_override_internal (struct gcc_options *opts,
  			       struct gcc_options *opts_set)
  {
-   /* Architecture mode defaults according to ABI.  */
-   if (!(opts_set->x_target_flags & MASK_ZARCH))
-     {
-       if (TARGET_64BIT)
- 	opts->x_target_flags |= MASK_ZARCH;
-       else
- 	opts->x_target_flags &= ~MASK_ZARCH;
-     }
- 
    /* Set the march default in case it hasn't been specified on cmdline.  */
    if (!opts_set->x_s390_arch)
      opts->x_s390_arch = PROCESSOR_2064_Z900;
--- 16146,16151 ----
*************** s390_option_override_internal (struct gc
*** 16627,16634 ****
    if (opts->x_s390_arch == PROCESSOR_NATIVE
        || opts->x_s390_tune == PROCESSOR_NATIVE)
      gcc_unreachable ();
-   if (TARGET_64BIT && !TARGET_ZARCH_P (opts->x_target_flags))
-     error ("64-bit ABI not supported in ESA/390 mode");
  
    if (opts->x_s390_indirect_branch == indirect_branch_thunk_inline
        || opts->x_s390_indirect_branch_call == indirect_branch_thunk_inline
--- 16162,16167 ----
*************** s390_option_override_internal (struct gc
*** 16656,16665 ****
      }
  
    /* Enable hardware transactions if available and not explicitly
!      disabled by user.  E.g. with -m31 -march=zEC12 -mzarch */
    if (!TARGET_OPT_HTM_P (opts_set->x_target_flags))
      {
!       if (TARGET_CPU_HTM_P (opts) && TARGET_ZARCH_P (opts->x_target_flags))
  	opts->x_target_flags |= MASK_OPT_HTM;
        else
  	opts->x_target_flags &= ~MASK_OPT_HTM;
--- 16189,16198 ----
      }
  
    /* Enable hardware transactions if available and not explicitly
!      disabled by user.  E.g. with -march=zEC12.  */
    if (!TARGET_OPT_HTM_P (opts_set->x_target_flags))
      {
!       if (TARGET_CPU_HTM_P (opts))
  	opts->x_target_flags |= MASK_OPT_HTM;
        else
  	opts->x_target_flags &= ~MASK_OPT_HTM;
*************** s390_option_override_internal (struct gc
*** 16679,16694 ****
      }
    else
      {
!       if (TARGET_CPU_VX_P (opts) && TARGET_ZARCH_P (opts->x_target_flags))
  	/* Enable vector support if available and not explicitly disabled
! 	   by user.  E.g. with -m31 -march=z13 -mzarch */
  	opts->x_target_flags |= MASK_OPT_VX;
        else
  	opts->x_target_flags &= ~MASK_OPT_VX;
      }
  
!   /* Use hardware DFP if available and not explicitly disabled by
!      user. E.g. with -m31 -march=z10 -mzarch   */
    if (!TARGET_HARD_DFP_P (opts_set->x_target_flags))
      {
        if (TARGET_DFP_P (opts))
--- 16212,16226 ----
      }
    else
      {
!       if (TARGET_CPU_VX_P (opts))
  	/* Enable vector support if available and not explicitly disabled
! 	   by user.  E.g. with -march=z13.  */
  	opts->x_target_flags |= MASK_OPT_VX;
        else
  	opts->x_target_flags &= ~MASK_OPT_VX;
      }
  
!   /* Use hardware DFP if available and not explicitly disabled by user.  */
    if (!TARGET_HARD_DFP_P (opts_set->x_target_flags))
      {
        if (TARGET_DFP_P (opts))
*************** s390_option_override_internal (struct gc
*** 16705,16713 ****
  	    error ("hardware decimal floating-point instructions"
  		   " not available on %s",
  		   processor_table[(int)opts->x_s390_arch].name);
- 	  if (!TARGET_ZARCH_P (opts->x_target_flags))
- 	    error ("hardware decimal floating-point instructions"
- 		   " not available in ESA/390 mode");
  	}
        else
  	opts->x_target_flags &= ~MASK_HARD_DFP;
--- 16237,16242 ----
*************** s390_option_override_internal (struct gc
*** 16807,16812 ****
--- 16336,16346 ----
    else
      SET_OPTION_IF_UNSET (opts, opts_set, param_vect_partial_vector_usage, 0);
  
+   if (flag_m31)
+     error ("%<-m31%> is no longer supported");
+   if (flag_mesa)
+     error ("%<-mesa%> is no longer supported");
+ 
    /* Set the default alignment.  */
    s390_default_align (opts);
  
*************** s390_option_override_internal (struct gc
*** 16816,16827 ****
    /* Call target specific restore function to do post-init work.  At the moment,
       this just sets opts->x_s390_cost_pointer.  */
    s390_function_specific_restore (opts, opts_set, NULL);
- 
-   /* Check whether -mfentry is supported. It cannot be used in 31-bit mode,
-      because 31-bit PLT stubs assume that %r12 contains GOT address, which is
-      not the case when the code runs before the prolog. */
-   if (opts->x_flag_fentry && !TARGET_64BIT)
-     error ("%<-mfentry%> is supported only for 64-bit CPUs");
  }
  
  static void
--- 16350,16355 ----
*************** s390_can_inline_p (tree caller, tree cal
*** 17251,17258 ****
  
    /* Flags which affect the ABI and in general prevent inlining.  */
    unsigned HOST_WIDE_INT must_match_masks
!     = (MASK_64BIT | MASK_ZARCH | MASK_HARD_DFP | MASK_SOFT_FLOAT
!        | MASK_LONG_DOUBLE_128 | MASK_OPT_VX);
  
    /* Flags which we in general want to prevent inlining but accept for
       always_inline.  */
--- 16779,16785 ----
  
    /* Flags which affect the ABI and in general prevent inlining.  */
    unsigned HOST_WIDE_INT must_match_masks
!     = (MASK_HARD_DFP | MASK_SOFT_FLOAT | MASK_LONG_DOUBLE_128 | MASK_OPT_VX);
  
    /* Flags which we in general want to prevent inlining but accept for
       always_inline.  */
*************** s390_use_by_pieces_infrastructure_p (uns
*** 17459,17466 ****
  				     enum by_pieces_operation op ATTRIBUTE_UNUSED,
  				     bool speed_p ATTRIBUTE_UNUSED)
  {
!   return (size == 1 || size == 2
! 	  || size == 4 || (TARGET_ZARCH && size == 8));
  }
  
  /* Implement TARGET_ATOMIC_ASSIGN_EXPAND_FENV hook.  */
--- 16986,16992 ----
  				     enum by_pieces_operation op ATTRIBUTE_UNUSED,
  				     bool speed_p ATTRIBUTE_UNUSED)
  {
!   return size == 1 || size == 2 || size == 4 || size == 8;
  }
  
  /* Implement TARGET_ATOMIC_ASSIGN_EXPAND_FENV hook.  */
*************** s390_preferred_simd_mode (scalar_mode mo
*** 17566,17572 ****
  	return V16QImode;
        default:;
        }
!   return word_mode;
  }
  
  /* Our hardware does not require vectors to be strictly aligned.  */
--- 17092,17098 ----
  	return V16QImode;
        default:;
        }
!   return DImode;
  }
  
  /* Our hardware does not require vectors to be strictly aligned.  */
*************** s390_rawmemchr (machine_mode elt_mode, r
*** 17829,17844 ****
    emit_label (loop_end);
    LABEL_NUSES (loop_end) = 1;
  
!   if (TARGET_64BIT)
!     {
!       lens = convert_to_mode (V2DImode, lens, 1);
!       emit_insn (gen_vec_extractv2didi (offset, lens, GEN_INT (0)));
!     }
!   else
!     {
!       lens = convert_to_mode (V4SImode, lens, 1);
!       emit_insn (gen_vec_extractv4sisi (offset, lens, GEN_INT (1)));
!     }
    force_expand_binop (Pmode, add_optab, addr, offset, dst, 1, OPTAB_DIRECT);
  }
  
--- 17355,17362 ----
    emit_label (loop_end);
    LABEL_NUSES (loop_end) = 1;
  
!   lens = convert_to_mode (V2DImode, lens, 1);
!   emit_insn (gen_vec_extractv2didi (offset, lens, GEN_INT (0)));
    force_expand_binop (Pmode, add_optab, addr, offset, dst, 1, OPTAB_DIRECT);
  }
  
*************** s390_rawmemchr (machine_mode elt_mode, r
*** 17847,17853 ****
  static unsigned HOST_WIDE_INT
  s390_asan_shadow_offset (void)
  {
!   return TARGET_64BIT ? HOST_WIDE_INT_1U << 52 : HOST_WIDE_INT_UC (0x20000000);
  }
  
  #ifdef HAVE_GAS_HIDDEN
--- 17365,17371 ----
  static unsigned HOST_WIDE_INT
  s390_asan_shadow_offset (void)
  {
!   return HOST_WIDE_INT_1U << 52;
  }
  
  #ifdef HAVE_GAS_HIDDEN
*************** s390_output_indirect_thunk_function (uns
*** 17932,17948 ****
  	  fputs ("\t.machine push\n", asm_out_file);
  	  fputs ("\t.machine z10\n", asm_out_file);
  	}
-       /* We use exrl even if -mzarch hasn't been specified on the
- 	 command line so we have to tell the assembler to accept
- 	 it.  */
-       if (!TARGET_ZARCH)
- 	fputs ("\t.machinemode zarch\n", asm_out_file);
  
        fputs ("\texrl\t0,1f\n", asm_out_file);
  
-       if (!TARGET_ZARCH)
- 	fputs ("\t.machinemode esa\n", asm_out_file);
- 
        if (!TARGET_CPU_Z10)
  	fputs ("\t.machine pop\n", asm_out_file);
      }
--- 17450,17458 ----
*************** s390_c_mode_for_floating_type (enum tree
*** 18853,18860 ****
  bool
  s390_bitint_type_info (int n, struct bitint_info *info)
  {
-   if (!TARGET_64BIT)
-     return false;
    if (n <= 8)
      info->limb_mode = QImode;
    else if (n <= 16)
--- 18363,18368 ----
diff -Nrcpad gcc-17-20260705/gcc/config/s390/s390.h gcc-17-20260712/gcc/config/s390/s390.h
*** gcc-17-20260705/gcc/config/s390/s390.h	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/s390/s390.h	Sun Jul 12 22:32:07 2026
*************** enum processor_flags
*** 53,60 ****
  #define s390_tune_attr ((enum attr_cpu)(s390_tune > PROCESSOR_9175_Z17 ? PROCESSOR_9175_Z17 : s390_tune ))
  
  /* These flags indicate that the generated code should run on a cpu
!    providing the respective hardware facility regardless of the
!    current cpu mode (ESA or z/Architecture).  */
  
  #define TARGET_CPU_IEEE_FLOAT \
  	(s390_arch_flags & PF_IEEE_FLOAT)
--- 53,59 ----
  #define s390_tune_attr ((enum attr_cpu)(s390_tune > PROCESSOR_9175_Z17 ? PROCESSOR_9175_Z17 : s390_tune ))
  
  /* These flags indicate that the generated code should run on a cpu
!    providing the respective hardware facility.  */
  
  #define TARGET_CPU_IEEE_FLOAT \
  	(s390_arch_flags & PF_IEEE_FLOAT)
*************** enum processor_flags
*** 135,206 ****
     providing the respective hardware facility when run in
     z/Architecture mode.  */
  
! #define TARGET_LONG_DISPLACEMENT \
! 	(TARGET_ZARCH && TARGET_CPU_LONG_DISPLACEMENT)
  #define TARGET_LONG_DISPLACEMENT_P(opts) \
! 	(TARGET_ZARCH_P (opts->x_target_flags) \
! 	 && TARGET_CPU_LONG_DISPLACEMENT_P (opts))
! #define TARGET_EXTIMM \
! 	(TARGET_ZARCH && TARGET_CPU_EXTIMM)
! #define TARGET_EXTIMM_P(opts) \
! 	(TARGET_ZARCH_P (opts->x_target_flags) && TARGET_CPU_EXTIMM_P (opts))
! #define TARGET_DFP \
! 	(TARGET_ZARCH && TARGET_CPU_DFP && TARGET_HARD_FLOAT)
  #define TARGET_DFP_P(opts) \
! 	(TARGET_ZARCH_P (opts->x_target_flags) && TARGET_CPU_DFP_P (opts) \
  	 && TARGET_HARD_FLOAT_P (opts->x_target_flags))
! #define TARGET_Z10 \
! 	(TARGET_ZARCH && TARGET_CPU_Z10)
! #define TARGET_Z10_P(opts) \
! 	(TARGET_ZARCH_P (opts->x_target_flags) && TARGET_CPU_Z10_P (opts))
! #define TARGET_Z196 \
! 	(TARGET_ZARCH && TARGET_CPU_Z196)
! #define TARGET_Z196_P(opts) \
! 	(TARGET_ZARCH_P (opts->x_target_flags) && TARGET_CPU_Z196_P (opts))
! #define TARGET_ZEC12 \
! 	(TARGET_ZARCH && TARGET_CPU_ZEC12)
! #define TARGET_ZEC12_P(opts) \
! 	(TARGET_ZARCH_P (opts->x_target_flags) && TARGET_CPU_ZEC12_P (opts))
  #define TARGET_HTM (TARGET_OPT_HTM)
  #define TARGET_HTM_P(opts) (TARGET_OPT_HTM_P (opts->x_target_flags))
! #define TARGET_Z13 \
! 	(TARGET_ZARCH && TARGET_CPU_Z13)
! #define TARGET_Z13_P(opts) \
! 	(TARGET_ZARCH_P (opts->x_target_flags) && TARGET_CPU_Z13_P (opts))
! #define TARGET_VX \
! 	(TARGET_ZARCH && TARGET_CPU_VX && TARGET_OPT_VX && TARGET_HARD_FLOAT)
  #define TARGET_VX_P(opts) \
! 	(TARGET_ZARCH_P (opts->x_target_flags) && TARGET_CPU_VX_P (opts) \
  	 && TARGET_OPT_VX_P (opts->x_target_flags) \
  	 && TARGET_HARD_FLOAT_P (opts->x_target_flags))
! #define TARGET_Z14 (TARGET_ZARCH && TARGET_CPU_Z14)
! #define TARGET_Z14_P(opts)						\
! 	(TARGET_ZARCH_P (opts->x_target_flags) && TARGET_CPU_Z14_P (opts))
! #define TARGET_VXE				\
! 	(TARGET_VX && TARGET_CPU_VXE)
! #define TARGET_VXE_P(opts)						\
! 	(TARGET_VX_P (opts) && TARGET_CPU_VXE_P (opts))
! #define TARGET_Z15 (TARGET_ZARCH && TARGET_CPU_Z15)
! #define TARGET_Z15_P(opts)						\
! 	(TARGET_ZARCH_P (opts->x_target_flags) && TARGET_CPU_Z15_P (opts))
! #define TARGET_VXE2					\
! 	(TARGET_VX && TARGET_CPU_VXE2)
! #define TARGET_VXE2_P(opts)						\
! 	(TARGET_VX_P (opts) && TARGET_CPU_VXE2_P (opts))
! #define TARGET_Z16 (TARGET_ZARCH && TARGET_CPU_Z16)
! #define TARGET_Z16_P(opts)						\
! 	(TARGET_ZARCH_P (opts->x_target_flags) && TARGET_CPU_Z16_P (opts))
! #define TARGET_NNPA					\
! 	(TARGET_ZARCH && TARGET_CPU_NNPA)
! #define TARGET_NNPA_P(opts)						\
! 	(TARGET_ZARCH_P (opts) && TARGET_CPU_NNPA_P (opts))
! #define TARGET_VXE3 \
! 	(TARGET_VX && TARGET_CPU_VXE3)
! #define TARGET_VXE3_P(opts)						\
! 	(TARGET_VX_P (opts) && TARGET_CPU_VXE3_P (opts))
! #define TARGET_Z17 (TARGET_ZARCH && TARGET_CPU_Z17)
! #define TARGET_Z17_P(opts)						\
! 	(TARGET_ZARCH_P (opts->x_target_flags) && TARGET_CPU_Z17_P (opts))
  
  #if defined(HAVE_AS_VECTOR_LOADSTORE_ALIGNMENT_HINTS_ON_Z13)
  #define TARGET_VECTOR_LOADSTORE_ALIGNMENT_HINTS TARGET_Z13
--- 134,179 ----
     providing the respective hardware facility when run in
     z/Architecture mode.  */
  
! #define TARGET_LONG_DISPLACEMENT TARGET_CPU_LONG_DISPLACEMENT
  #define TARGET_LONG_DISPLACEMENT_P(opts) \
! 	(TARGET_CPU_LONG_DISPLACEMENT_P (opts))
! #define TARGET_EXTIMM TARGET_CPU_EXTIMM
! #define TARGET_EXTIMM_P(opts) (TARGET_CPU_EXTIMM_P (opts))
! #define TARGET_DFP (TARGET_CPU_DFP && TARGET_HARD_FLOAT)
  #define TARGET_DFP_P(opts) \
! 	(TARGET_CPU_DFP_P (opts) \
  	 && TARGET_HARD_FLOAT_P (opts->x_target_flags))
! #define TARGET_Z10 TARGET_CPU_Z10
! #define TARGET_Z10_P(opts) (TARGET_CPU_Z10_P (opts))
! #define TARGET_Z196 TARGET_CPU_Z196
! #define TARGET_Z196_P(opts) (TARGET_CPU_Z196_P (opts))
! #define TARGET_ZEC12 TARGET_CPU_ZEC12
! #define TARGET_ZEC12_P(opts) (TARGET_CPU_ZEC12_P (opts))
  #define TARGET_HTM (TARGET_OPT_HTM)
  #define TARGET_HTM_P(opts) (TARGET_OPT_HTM_P (opts->x_target_flags))
! #define TARGET_Z13 TARGET_CPU_Z13
! #define TARGET_Z13_P(opts) (TARGET_CPU_Z13_P (opts))
! #define TARGET_VX (TARGET_CPU_VX && TARGET_OPT_VX && TARGET_HARD_FLOAT)
  #define TARGET_VX_P(opts) \
! 	(TARGET_CPU_VX_P (opts) \
  	 && TARGET_OPT_VX_P (opts->x_target_flags) \
  	 && TARGET_HARD_FLOAT_P (opts->x_target_flags))
! #define TARGET_Z14 TARGET_CPU_Z14
! #define TARGET_Z14_P(opts) (TARGET_CPU_Z14_P (opts))
! #define TARGET_VXE (TARGET_VX && TARGET_CPU_VXE)
! #define TARGET_VXE_P(opts) (TARGET_VX_P (opts) && TARGET_CPU_VXE_P (opts))
! #define TARGET_Z15 TARGET_CPU_Z15
! #define TARGET_Z15_P(opts) (TARGET_CPU_Z15_P (opts))
! #define TARGET_VXE2 (TARGET_VX && TARGET_CPU_VXE2)
! #define TARGET_VXE2_P(opts) (TARGET_VX_P (opts) && TARGET_CPU_VXE2_P (opts))
! #define TARGET_Z16 TARGET_CPU_Z16
! #define TARGET_Z16_P(opts) (TARGET_CPU_Z16_P (opts))
! #define TARGET_NNPA TARGET_CPU_NNPA
! #define TARGET_NNPA_P(opts) (TARGET_CPU_NNPA_P (opts))
! #define TARGET_VXE3 (TARGET_VX && TARGET_CPU_VXE3)
! #define TARGET_VXE3_P(opts) (TARGET_VX_P (opts) && TARGET_CPU_VXE3_P (opts))
! #define TARGET_Z17 TARGET_CPU_Z17
! #define TARGET_Z17_P(opts) (TARGET_CPU_Z17_P (opts))
  
  #if defined(HAVE_AS_VECTOR_LOADSTORE_ALIGNMENT_HINTS_ON_Z13)
  #define TARGET_VECTOR_LOADSTORE_ALIGNMENT_HINTS TARGET_Z13
*************** enum processor_flags
*** 267,284 ****
  /* Target CPU builtins.  */
  #define TARGET_CPU_CPP_BUILTINS() s390_cpu_cpp_builtins (pfile)
  
! #ifdef DEFAULT_TARGET_64BIT
! #define TARGET_DEFAULT     (MASK_64BIT | MASK_ZARCH | MASK_HARD_DFP	\
! 			    | MASK_OPT_HTM | MASK_OPT_VX)
! #else
! #define TARGET_DEFAULT             0
! #endif
  
  /* Support for configure-time defaults.
     The order here is important so that -march doesn't squash the
     tune values.  */
  #define OPTION_DEFAULT_SPECS					\
-   { "mode", "%{!mesa:%{!mzarch:-m%(VALUE)}}" },			\
    { "tune", "%{!mtune=*:%{!march=*:-mtune=%(VALUE)}}" },	\
    { "arch", "%{!march=*:-march=%(VALUE)}" }
  
--- 240,251 ----
  /* Target CPU builtins.  */
  #define TARGET_CPU_CPP_BUILTINS() s390_cpu_cpp_builtins (pfile)
  
! #define TARGET_DEFAULT (MASK_HARD_DFP | MASK_OPT_HTM | MASK_OPT_VX)
  
  /* Support for configure-time defaults.
     The order here is important so that -march doesn't squash the
     tune values.  */
  #define OPTION_DEFAULT_SPECS					\
    { "tune", "%{!mtune=*:%{!march=*:-mtune=%(VALUE)}}" },	\
    { "arch", "%{!march=*:-march=%(VALUE)}" }
  
*************** extern const char *s390_host_detect_loca
*** 290,311 ****
  #define MARCH_MTUNE_NATIVE_SPECS				\
    "%{mtune=native:%<mtune=native %:local_cpu_detect(tune)} "	\
    "%{march=native:%<march=native"				\
!   " %:local_cpu_detect(arch %{mesa|mzarch:mesa_mzarch})}"
  #else
  # define MARCH_MTUNE_NATIVE_SPECS ""
  #endif
  
- #ifdef DEFAULT_TARGET_64BIT
- #define S390_TARGET_BITS_STRING "64"
- #else
- #define S390_TARGET_BITS_STRING "31"
- #endif
- 
  /* Defaulting rules.  */
  #define DRIVER_SELF_SPECS					\
    MARCH_MTUNE_NATIVE_SPECS,					\
-   "%{!m31:%{!m64:-m" S390_TARGET_BITS_STRING "}}",		\
-   "%{!mesa:%{!mzarch:%{m31:-mesa}%{m64:-mzarch}}}",		\
    "%{!march=*:-march=z900}"
  
  /* Target machine storage layout.  */
--- 257,270 ----
  #define MARCH_MTUNE_NATIVE_SPECS				\
    "%{mtune=native:%<mtune=native %:local_cpu_detect(tune)} "	\
    "%{march=native:%<march=native"				\
!   " %:local_cpu_detect(arch)}"
  #else
  # define MARCH_MTUNE_NATIVE_SPECS ""
  #endif
  
  /* Defaulting rules.  */
  #define DRIVER_SELF_SPECS					\
    MARCH_MTUNE_NATIVE_SPECS,					\
    "%{!march=*:-march=z900}"
  
  /* Target machine storage layout.  */
*************** extern const char *s390_host_detect_loca
*** 322,355 ****
     being accessed.  */
  #define STACK_CHECK_MOVING_SP 1
  
- #ifndef IN_LIBGCC2
- 
  /* Width of a word, in units (bytes).  */
!   #define UNITS_PER_WORD (TARGET_ZARCH ? 8 : 4)
! 
! /* Width of a pointer.  To be used instead of UNITS_PER_WORD in
!    ABI-relevant contexts.  This always matches
!    GET_MODE_SIZE (Pmode).  */
!   #define UNITS_PER_LONG (TARGET_64BIT ? 8 : 4)
!   #define MIN_UNITS_PER_WORD 4
!   #define MAX_BITS_PER_WORD 64
! #else
! 
!   /* In libgcc, UNITS_PER_WORD has ABI-relevant effects, e.g. whether
!      the library should export TImode functions or not.  Thus, we have
!      to redefine UNITS_PER_WORD depending on __s390x__ for libgcc.  */
!   #ifdef __s390x__
!     #define UNITS_PER_WORD 8
!   #else
!     #define UNITS_PER_WORD 4
!   #endif
! #endif
  
  /* Width of a pointer, in bits.  */
! #define POINTER_SIZE (TARGET_64BIT ? 64 : 32)
  
  /* Allocation boundary (in *bits*) for storing arguments in argument list.  */
! #define PARM_BOUNDARY (TARGET_64BIT ? 64 : 32)
  
  /* Boundary (in *bits*) on which stack pointer should be aligned.  */
  #define STACK_BOUNDARY 64
--- 281,294 ----
     being accessed.  */
  #define STACK_CHECK_MOVING_SP 1
  
  /* Width of a word, in units (bytes).  */
! #define UNITS_PER_WORD 8
  
  /* Width of a pointer, in bits.  */
! #define POINTER_SIZE 64
  
  /* Allocation boundary (in *bits*) for storing arguments in argument list.  */
! #define PARM_BOUNDARY 64
  
  /* Boundary (in *bits*) on which stack pointer should be aligned.  */
  #define STACK_BOUNDARY 64
*************** extern const char *s390_host_detect_loca
*** 375,381 ****
     NONLOCAL needs twice Pmode to maintain both backchain and SP.  */
  #define STACK_SAVEAREA_MODE(LEVEL)					\
    ((LEVEL) == SAVE_FUNCTION ? VOIDmode					\
!    : (LEVEL) == SAVE_NONLOCAL ? (TARGET_64BIT ? OImode : TImode) : Pmode)
  
  
  /* Type layout.  */
--- 314,320 ----
     NONLOCAL needs twice Pmode to maintain both backchain and SP.  */
  #define STACK_SAVEAREA_MODE(LEVEL)					\
    ((LEVEL) == SAVE_FUNCTION ? VOIDmode					\
!    : (LEVEL) == SAVE_NONLOCAL ? OImode : Pmode)
  
  
  /* Type layout.  */
*************** extern const char *s390_host_detect_loca
*** 383,394 ****
  /* Sizes in bits of the source language data types.  */
  #define SHORT_TYPE_SIZE 16
  #define INT_TYPE_SIZE 32
! #define LONG_TYPE_SIZE (TARGET_64BIT ? 64 : 32)
  #define LONG_LONG_TYPE_SIZE 64
  
- /* Work around target_flags dependency in ada/targtyps.cc.  */
- #define WIDEST_HARDWARE_FP_SIZE 64
- 
  /* We use "unsigned char" as default.  */
  #define DEFAULT_SIGNED_CHAR 0
  
--- 322,330 ----
  /* Sizes in bits of the source language data types.  */
  #define SHORT_TYPE_SIZE 16
  #define INT_TYPE_SIZE 32
! #define LONG_TYPE_SIZE 64
  #define LONG_LONG_TYPE_SIZE 64
  
  /* We use "unsigned char" as default.  */
  #define DEFAULT_SIGNED_CHAR 0
  
*************** extern const char *s390_host_detect_loca
*** 451,458 ****
     The 'fake' hard registers are call-clobbered and fixed.
     The access registers are call-saved and fixed.
  
!    On 31-bit, FPRs 18-19 are call-clobbered;
!    on 64-bit, FPRs 24-31 are call-clobbered.
     The remaining FPRs are call-saved.
  
     All non-FP vector registers are call-clobbered v16-v31.  */
--- 387,393 ----
     The 'fake' hard registers are call-clobbered and fixed.
     The access registers are call-saved and fixed.
  
!    FPRs 24-31 are call-clobbered.
     The remaining FPRs are call-saved.
  
     All non-FP vector registers are call-clobbered v16-v31.  */
*************** extern const enum reg_class regclass_map
*** 618,624 ****
     dynamic allocations (alloca), and finally the local variables.  */
  
  /* Offset from stack-pointer to first location of outgoing args.  */
! #define STACK_POINTER_OFFSET (TARGET_64BIT ? 160 : 96)
  
  /* Offset from the stack pointer register to an item dynamically
     allocated on the stack, e.g., by `alloca'.  */
--- 553,559 ----
     dynamic allocations (alloca), and finally the local variables.  */
  
  /* Offset from stack-pointer to first location of outgoing args.  */
! #define STACK_POINTER_OFFSET 160
  
  /* Offset from the stack pointer register to an item dynamically
     allocated on the stack, e.g., by `alloca'.  */
*************** extern const enum reg_class regclass_map
*** 642,648 ****
  #define DYNAMIC_CHAIN_ADDRESS(FRAME)                                          \
    (TARGET_PACKED_STACK ?                                                      \
     plus_constant (Pmode, (FRAME),					      \
! 		  STACK_POINTER_OFFSET - UNITS_PER_LONG) : (FRAME))
  
  /* For -mpacked-stack this adds 160 - 8 (96 - 4) to the output of
     builtin_frame_address.  Otherwise arg pointer -
--- 577,583 ----
  #define DYNAMIC_CHAIN_ADDRESS(FRAME)                                          \
    (TARGET_PACKED_STACK ?                                                      \
     plus_constant (Pmode, (FRAME),					      \
! 		  STACK_POINTER_OFFSET - UNITS_PER_WORD) : (FRAME))
  
  /* For -mpacked-stack this adds 160 - 8 (96 - 4) to the output of
     builtin_frame_address.  Otherwise arg pointer -
*************** extern const enum reg_class regclass_map
*** 657,665 ****
  #define RETURN_ADDR_RTX(COUNT, FRAME)					      \
    s390_return_addr_rtx ((COUNT), DYNAMIC_CHAIN_ADDRESS ((FRAME)))
  
- /* In 31-bit mode, we need to mask off the high bit of return addresses.  */
- #define MASK_RETURN_ADDR (TARGET_64BIT ? constm1_rtx : GEN_INT (0x7fffffff))
- 
  
  /* Exception handling.  */
  
--- 592,597 ----
*************** extern const enum reg_class regclass_map
*** 679,685 ****
     : DW_EH_PE_absptr)
  
  /* Register save slot alignment.  */
! #define DWARF_CIE_DATA_ALIGNMENT (-UNITS_PER_LONG)
  
  /* Let the assembler generate debug line info.  */
  #define DWARF2_ASM_LINE_DEBUG_INFO 1
--- 611,617 ----
     : DW_EH_PE_absptr)
  
  /* Register save slot alignment.  */
! #define DWARF_CIE_DATA_ALIGNMENT (-UNITS_PER_WORD)
  
  /* Let the assembler generate debug line info.  */
  #define DWARF2_ASM_LINE_DEBUG_INFO 1
*************** CUMULATIVE_ARGS;
*** 747,757 ****
  #define LAST_VEC_ARG_REGNO 53
  
  /* Arguments can be placed in general registers 2 to 6, or in floating
!    point registers 0 and 2 for 31 bit and fprs 0, 2, 4 and 6 for 64
!    bit.  */
  #define FUNCTION_ARG_REGNO_P(N)						\
    (((N) >=2 && (N) < 7) || (N) == 16 || (N) == 17			\
!    || (TARGET_64BIT && ((N) == 18 || (N) == 19))			\
     || (TARGET_VX && ((N) >= FIRST_VEC_ARG_REGNO && (N) <= LAST_VEC_ARG_REGNO)))
  
  
--- 679,688 ----
  #define LAST_VEC_ARG_REGNO 53
  
  /* Arguments can be placed in general registers 2 to 6, or in floating
!    point registers 0, 2, 4 and 6.  */
  #define FUNCTION_ARG_REGNO_P(N)						\
    (((N) >=2 && (N) < 7) || (N) == 16 || (N) == 17			\
!    || ((N) == 18 || (N) == 19)						\
     || (TARGET_VX && ((N) >= FIRST_VEC_ARG_REGNO && (N) <= LAST_VEC_ARG_REGNO)))
  
  
*************** CUMULATIVE_ARGS;
*** 779,785 ****
  
  /* Trampolines for nested functions.  */
  
! #define TRAMPOLINE_SIZE		(TARGET_64BIT ? 32 : 16)
  #define TRAMPOLINE_ALIGNMENT	BITS_PER_WORD
  
  /* Addressing modes, and classification of registers for them.  */
--- 710,716 ----
  
  /* Trampolines for nested functions.  */
  
! #define TRAMPOLINE_SIZE		32
  #define TRAMPOLINE_ALIGNMENT	BITS_PER_WORD
  
  /* Addressing modes, and classification of registers for them.  */
*************** CUMULATIVE_ARGS;
*** 839,850 ****
  
  /* An integer expression for the size in bits of the largest integer machine
     mode that should actually be used.  We allow pairs of registers.  */
! #define MAX_FIXED_MODE_SIZE GET_MODE_BITSIZE (TARGET_64BIT ? TImode : DImode)
  
  /* The maximum number of bytes that a single instruction can move quickly
     between memory and registers or between two memory locations.  */
! #define MOVE_MAX (TARGET_ZARCH ? 16 : 8)
! #define MOVE_MAX_PIECES (TARGET_ZARCH ? 8 : 4)
  #define MAX_MOVE_MAX 16
  
  /* Don't perform CSE on function addresses.  */
--- 770,781 ----
  
  /* An integer expression for the size in bits of the largest integer machine
     mode that should actually be used.  We allow pairs of registers.  */
! #define MAX_FIXED_MODE_SIZE GET_MODE_BITSIZE (TImode)
  
  /* The maximum number of bytes that a single instruction can move quickly
     between memory and registers or between two memory locations.  */
! #define MOVE_MAX 16
! #define MOVE_MAX_PIECES 8
  #define MAX_MOVE_MAX 16
  
  /* Don't perform CSE on function addresses.  */
*************** CUMULATIVE_ARGS;
*** 854,864 ****
     to split a struct move into several word-size moves.  For S/390
     only small values make sense here since struct moves are relatively
     cheap thanks to mvc so the small default value chosen for archs
!    with memmove patterns should be ok.  But this value is multiplied
!    in tree-sra with UNITS_PER_WORD to make a decision so we adjust it
!    here to compensate for that factor since mvc costs exactly the same
!    on 31 and 64 bit.  */
! #define MOVE_RATIO(speed) (TARGET_64BIT? 2 : 4)
  
  
  /* Sections.  */
--- 785,792 ----
     to split a struct move into several word-size moves.  For S/390
     only small values make sense here since struct moves are relatively
     cheap thanks to mvc so the small default value chosen for archs
!    with memmove patterns should be ok.  */
! #define MOVE_RATIO(speed) 2
  
  
  /* Sections.  */
*************** CUMULATIVE_ARGS;
*** 872,889 ****
  /* Output before writable (uninitialized) data.  */
  #define BSS_SECTION_ASM_OP ".bss"
  
- /* S/390 constant pool breaks the devices in crtstuff.c to control section
-    in where code resides.  We have to write it as asm code.  */
- #ifndef __s390x__
- #define CRT_CALL_STATIC_FUNCTION(SECTION_OP, FUNC) \
-     asm (SECTION_OP "\n\
- 	bras\t%r2,1f\n\
- 0:	.long\t" USER_LABEL_PREFIX #FUNC " - 0b\n\
- 1:	l\t%r3,0(%r2)\n\
- 	bas\t%r14,0(%r3,%r2)\n\
- 	.previous");
- #endif
- 
  
  /* Position independent code.  */
  
--- 800,805 ----
*************** CUMULATIVE_ARGS;
*** 948,954 ****
  #define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE)				\
  do {									\
    char buf[32];								\
!   fputs (integer_asm_op (UNITS_PER_LONG, TRUE), (FILE));		\
    ASM_GENERATE_INTERNAL_LABEL (buf, "L", (VALUE));			\
    assemble_name ((FILE), buf);						\
    fputc ('\n', (FILE));							\
--- 864,870 ----
  #define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE)				\
  do {									\
    char buf[32];								\
!   fputs (integer_asm_op (UNITS_PER_WORD, TRUE), (FILE));		\
    ASM_GENERATE_INTERNAL_LABEL (buf, "L", (VALUE));			\
    assemble_name ((FILE), buf);						\
    fputc ('\n', (FILE));							\
*************** do {									\
*** 958,964 ****
  #define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL)		\
  do {									\
    char buf[32];								\
!   fputs (integer_asm_op (UNITS_PER_LONG, TRUE), (FILE));		\
    ASM_GENERATE_INTERNAL_LABEL (buf, "L", (VALUE));			\
    assemble_name ((FILE), buf);						\
    fputc ('-', (FILE));							\
--- 874,880 ----
  #define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL)		\
  do {									\
    char buf[32];								\
!   fputs (integer_asm_op (UNITS_PER_WORD, TRUE), (FILE));		\
    ASM_GENERATE_INTERNAL_LABEL (buf, "L", (VALUE));			\
    assemble_name ((FILE), buf);						\
    fputc ('-', (FILE));							\
*************** do {									\
*** 989,1003 ****
  
  /* Specify the machine mode that this machine uses for the index in the
     tablejump instruction.  */
! #define CASE_VECTOR_MODE (TARGET_64BIT ? DImode : SImode)
  
  /* Specify the machine mode that pointers have.
     After generation of rtl, the compiler makes no further distinction
     between pointers and any other objects of this machine mode.  */
! #define Pmode (TARGET_64BIT ? DImode : SImode)
! 
! /* This is -1 for "pointer mode" extend.  See ptr_extend in s390.md.  */
! #define POINTERS_EXTEND_UNSIGNED -1
  
  /* A function address in a call instruction is a byte address (for
     indexing purposes) so give the MEM rtx a byte's mode.  */
--- 905,916 ----
  
  /* Specify the machine mode that this machine uses for the index in the
     tablejump instruction.  */
! #define CASE_VECTOR_MODE DImode
  
  /* Specify the machine mode that pointers have.
     After generation of rtl, the compiler makes no further distinction
     between pointers and any other objects of this machine mode.  */
! #define Pmode DImode
  
  /* A function address in a call instruction is a byte address (for
     indexing purposes) so give the MEM rtx a byte's mode.  */
diff -Nrcpad gcc-17-20260705/gcc/config/s390/s390.md gcc-17-20260712/gcc/config/s390/s390.md
*** gcc-17-20260705/gcc/config/s390/s390.md	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/s390/s390.md	Sun Jul 12 22:32:07 2026
***************
*** 79,85 ****
     UNSPEC_GOTENT
     UNSPEC_GOT
     UNSPEC_GOTOFF
-    UNSPEC_PLT31
     UNSPEC_PLTOFF
  
     ; Literal pool
--- 79,84 ----
***************
*** 610,616 ****
    (const (symbol_ref "s390_tune_attr")))
  
  (define_attr "cpu_facility"
!   "standard,ieee,zarch,cpu_zarch,longdisp,extimm,dfp,z10,z196,zEC12,vx,z13,z14,vxe,z15,vxe2,z16,nnpa,vxe3,z17"
    (const_string "standard"))
  
  (define_attr "enabled" ""
--- 609,615 ----
    (const (symbol_ref "s390_tune_attr")))
  
  (define_attr "cpu_facility"
!   "standard,ieee,longdisp,extimm,dfp,z10,z196,zEC12,vx,z13,z14,vxe,z15,vxe2,z16,nnpa,vxe3,z17"
    (const_string "standard"))
  
  (define_attr "enabled" ""
***************
*** 621,630 ****
  	      (match_test "TARGET_CPU_IEEE_FLOAT"))
  	 (const_int 1)
  
- 	 (and (eq_attr "cpu_facility" "zarch")
- 	      (match_test "TARGET_ZARCH"))
- 	 (const_int 1)
- 
  	 (and (eq_attr "cpu_facility" "longdisp")
  	      (match_test "TARGET_LONG_DISPLACEMENT"))
  	 (const_int 1)
--- 620,625 ----
***************
*** 637,645 ****
  	      (match_test "TARGET_DFP"))
  	 (const_int 1)
  
-          (eq_attr "cpu_facility" "cpu_zarch")
- 	 (const_int 1)
- 
           (and (eq_attr "cpu_facility" "z10")
                (match_test "TARGET_Z10"))
  	 (const_int 1)
--- 632,637 ----
***************
*** 774,807 ****
  ; 32 bit int<->fp conversion instructions are available since VXE2 (z15).
  (define_mode_iterator VX_CONV_BFP [DF (SF "TARGET_VXE2")])
  
! ;; These mode iterators allow 31-bit and 64-bit GPR patterns to be generated
  ;; from the same template.
! (define_mode_iterator GPR [(DI "TARGET_ZARCH") SI])
! (define_mode_iterator DGPR [(TI "TARGET_ZARCH") DI SI])
  (define_mode_iterator DSI [DI SI])
  (define_mode_iterator TDI [TI DI])
  
- ;; These mode iterators allow :P to be used for patterns that operate on
- ;; pointer-sized quantities.  Exactly one of the two alternatives will match.
- (define_mode_iterator P [(DI "TARGET_64BIT") (SI "!TARGET_64BIT")])
- 
- ;; These macros refer to the actual word_mode of the configuration.
- ;; This is equal to Pmode except on 31-bit machines in zarch mode.
- (define_mode_iterator DW [(TI "TARGET_ZARCH") (DI "!TARGET_ZARCH")])
- (define_mode_iterator W  [(DI "TARGET_ZARCH") (SI "!TARGET_ZARCH")])
- 
- ;; Used by the umul pattern to express modes having half the size.
- (define_mode_attr DWH [(TI "DI") (DI "SI")])
- (define_mode_attr dwh [(TI "di") (DI "si")])
- 
  ;; This mode iterator allows the QI and HI patterns to be defined from
  ;; the same template.
  (define_mode_iterator HQI [HI QI])
  
  ;; This mode iterator allows the integer patterns to be defined from the
  ;; same template.
! (define_mode_iterator INT [(DI "TARGET_ZARCH") SI HI QI])
! (define_mode_iterator DINT [(TI "TARGET_ZARCH") DI SI HI QI])
  (define_mode_iterator SINT [SI HI QI])
  
  ;; This iterator allows some 'ashift' and 'lshiftrt' pattern to be defined from
--- 766,785 ----
  ; 32 bit int<->fp conversion instructions are available since VXE2 (z15).
  (define_mode_iterator VX_CONV_BFP [DF (SF "TARGET_VXE2")])
  
! ;; These mode iterators allow 32-bit and 64-bit GPR patterns to be generated
  ;; from the same template.
! (define_mode_iterator TDSI [TI DI SI])
  (define_mode_iterator DSI [DI SI])
  (define_mode_iterator TDI [TI DI])
  
  ;; This mode iterator allows the QI and HI patterns to be defined from
  ;; the same template.
  (define_mode_iterator HQI [HI QI])
  
  ;; This mode iterator allows the integer patterns to be defined from the
  ;; same template.
! (define_mode_iterator INT [DI SI HI QI])
! (define_mode_iterator DINT [TI DI SI HI QI])
  (define_mode_iterator SINT [SI HI QI])
  
  ;; This iterator allows some 'ashift' and 'lshiftrt' pattern to be defined from
***************
*** 893,904 ****
  (define_mode_attr _d [(TF "") (FPRX2 "") (DF "") (SF "") (TD "d") (DD "d")
  		      (SD "d")])
  
! ;; In GPR and P templates, a constraint like "<d0>" will expand to "d" in DImode
! ;; and "0" in SImode. This allows to combine instructions of which the 31bit
  ;; version only operates on one register.
  (define_mode_attr d0 [(DI "d") (SI "0")])
  
! ;; In combination with d0 this allows to combine instructions of which the 31bit
  ;; version only operates on one register. The DImode version needs an additional
  ;; register for the assembler output.
  (define_mode_attr 1 [(DI "%1,") (SI "")])
--- 871,882 ----
  (define_mode_attr _d [(TF "") (FPRX2 "") (DF "") (SF "") (TD "d") (DD "d")
  		      (SD "d")])
  
! ;; In DSI templates, a constraint like "<d0>" will expand to "d" in DImode
! ;; and "0" in SImode. This allows to combine instructions of which the 32bit
  ;; version only operates on one register.
  (define_mode_attr d0 [(DI "d") (SI "0")])
  
! ;; In combination with d0 this allows to combine instructions of which the 32bit
  ;; version only operates on one register. The DImode version needs an additional
  ;; register for the assembler output.
  (define_mode_attr 1 [(DI "%1,") (SI "")])
***************
*** 923,950 ****
  ;; in "RSE" for TImode and "RS" for DImode.
  (define_mode_attr TE [(TI "E") (DI "")])
  
! ;; In GPR templates, a string like "lc<g>r" will expand to "lcgr" in DImode
  ;; and "lcr" in SImode.
  (define_mode_attr g [(DI "g") (SI "")])
  
! ;; In GPR templates, a string like "sl<y>" will expand to "slg" in DImode
  ;; and "sly" in SImode. This is useful because on 64bit the ..g instructions
! ;; were enhanced with long displacements whereas 31bit instructions got a ..y
  ;; variant for long displacements.
  (define_mode_attr y [(DI "g") (SI "y")])
  
- ;; In DW templates, a string like "cds<g>" will expand to "cdsg" in TImode
- ;; and "cds" in DImode.
- (define_mode_attr tg [(TI "g") (DI "")])
- 
  ;; In TDI templates, a string like "c<d>sg".
  (define_mode_attr td [(TI "d") (DI "")])
  
! ;; In GPR templates, a string like "c<gf>dbr" will expand to "cgdbr" in DImode
  ;; and "cfdbr" in SImode.
  (define_mode_attr gf [(DI "g") (SI "f") (DF "g") (SF "f")])
  
! ;; In GPR templates, a string like sll<gk> will expand to sllg for DI
  ;; and sllk for SI.  This way it is possible to merge the new z196 SI
  ;; 3 operands shift instructions into the existing patterns.
  (define_mode_attr gk [(DI "g") (SI "k")])
--- 901,924 ----
  ;; in "RSE" for TImode and "RS" for DImode.
  (define_mode_attr TE [(TI "E") (DI "")])
  
! ;; In DSI templates, a string like "lc<g>r" will expand to "lcgr" in DImode
  ;; and "lcr" in SImode.
  (define_mode_attr g [(DI "g") (SI "")])
  
! ;; In DSI templates, a string like "sl<y>" will expand to "slg" in DImode
  ;; and "sly" in SImode. This is useful because on 64bit the ..g instructions
! ;; were enhanced with long displacements whereas 32bit instructions got a ..y
  ;; variant for long displacements.
  (define_mode_attr y [(DI "g") (SI "y")])
  
  ;; In TDI templates, a string like "c<d>sg".
  (define_mode_attr td [(TI "d") (DI "")])
  
! ;; In DSI templates, a string like "c<gf>dbr" will expand to "cgdbr" in DImode
  ;; and "cfdbr" in SImode.
  (define_mode_attr gf [(DI "g") (SI "f") (DF "g") (SF "f")])
  
! ;; In DSI templates, a string like sll<gk> will expand to sllg for DI
  ;; and sllk for SI.  This way it is possible to merge the new z196 SI
  ;; 3 operands shift instructions into the existing patterns.
  (define_mode_attr gk [(DI "g") (SI "k")])
***************
*** 1039,1046 ****
                           (match_operand:DI 1 "immediate_operand"
  					     "N0HD0,N1HD0,N2HD0,N3HD0"))
                   (match_operand:DI 2 "immediate_operand" "n,n,n,n")))]
!   "TARGET_ZARCH
!    && s390_match_ccmode (insn, s390_tm_ccmode (operands[1], operands[2], true))
     && s390_single_part (operands[1], DImode, HImode, 0) >= 0"
    "@
     tmhh\t%0,%i1
--- 1013,1019 ----
                           (match_operand:DI 1 "immediate_operand"
  					     "N0HD0,N1HD0,N2HD0,N3HD0"))
                   (match_operand:DI 2 "immediate_operand" "n,n,n,n")))]
!   "s390_match_ccmode (insn, s390_tm_ccmode (operands[1], operands[2], true))
     && s390_single_part (operands[1], DImode, HImode, 0) >= 0"
    "@
     tmhh\t%0,%i1
***************
*** 1089,1095 ****
  	  (match_operand:DI 1 "const0_operand" "")))
     (set (match_operand:DI 2 "register_operand" "=d,d")
          (sign_extend:DI (match_dup 0)))]
!   "s390_match_ccmode(insn, CCSmode) && TARGET_ZARCH"
    "ltgfr\t%2,%0
     ltgf\t%2,%0"
    [(set_attr "op_type"      "RRE,RXY")
--- 1062,1068 ----
  	  (match_operand:DI 1 "const0_operand" "")))
     (set (match_operand:DI 2 "register_operand" "=d,d")
          (sign_extend:DI (match_dup 0)))]
!   "s390_match_ccmode(insn, CCSmode)"
    "ltgfr\t%2,%0
     ltgf\t%2,%0"
    [(set_attr "op_type"      "RRE,RXY")
***************
*** 1099,1107 ****
  ; ltr, lt, ltgr, ltg
  (define_insn "*tst<mode>_extimm"
    [(set (reg CC_REGNUM)
!         (compare (match_operand:GPR 0 "nonimmediate_operand" "d,T")
!                  (match_operand:GPR 1 "const0_operand" "")))
!    (set (match_operand:GPR 2 "register_operand" "=d,d")
          (match_dup 0))]
    "s390_match_ccmode(insn, CCSmode) && TARGET_EXTIMM"
    "@
--- 1072,1080 ----
  ; ltr, lt, ltgr, ltg
  (define_insn "*tst<mode>_extimm"
    [(set (reg CC_REGNUM)
!         (compare (match_operand:DSI 0 "nonimmediate_operand" "d,T")
!                  (match_operand:DSI 1 "const0_operand" "")))
!    (set (match_operand:DSI 2 "register_operand" "=d,d")
          (match_dup 0))]
    "s390_match_ccmode(insn, CCSmode) && TARGET_EXTIMM"
    "@
***************
*** 1113,1122 ****
  ; Peephole to combine a load-and-test from volatile memory which combine does
  ; not do.
  (define_peephole2
!   [(set (match_operand:GPR 0 "register_operand")
! 	(match_operand:GPR 2 "memory_operand"))
     (set (reg CC_REGNUM)
! 	(compare (match_dup 0) (match_operand:GPR 1 "const0_operand")))]
    "s390_match_ccmode (peep2_next_insn (1), CCSmode) && TARGET_EXTIMM
     && GENERAL_REG_P (operands[0])
     && satisfies_constraint_T (operands[2])
--- 1086,1095 ----
  ; Peephole to combine a load-and-test from volatile memory which combine does
  ; not do.
  (define_peephole2
!   [(set (match_operand:DSI 0 "register_operand")
! 	(match_operand:DSI 2 "memory_operand"))
     (set (reg CC_REGNUM)
! 	(compare (match_dup 0) (match_operand:DSI 1 "const0_operand")))]
    "s390_match_ccmode (peep2_next_insn (1), CCSmode) && TARGET_EXTIMM
     && GENERAL_REG_P (operands[0])
     && satisfies_constraint_T (operands[2])
***************
*** 1129,1137 ****
  ; ltr, lt, ltgr, ltg
  (define_insn "*tst<mode>_cconly_extimm"
    [(set (reg CC_REGNUM)
!         (compare (match_operand:GPR 0 "nonimmediate_operand" "d,T")
!                  (match_operand:GPR 1 "const0_operand" "")))
!    (clobber (match_scratch:GPR 2 "=X,d"))]
    "s390_match_ccmode(insn, CCSmode) && TARGET_EXTIMM"
    "@
     lt<g>r\t%0,%0
--- 1102,1110 ----
  ; ltr, lt, ltgr, ltg
  (define_insn "*tst<mode>_cconly_extimm"
    [(set (reg CC_REGNUM)
!         (compare (match_operand:DSI 0 "nonimmediate_operand" "d,T")
!                  (match_operand:DSI 1 "const0_operand" "")))
!    (clobber (match_scratch:DSI 2 "=X,d"))]
    "s390_match_ccmode(insn, CCSmode) && TARGET_EXTIMM"
    "@
     lt<g>r\t%0,%0
***************
*** 1145,1151 ****
                   (match_operand:DI 1 "const0_operand" "")))
     (set (match_operand:DI 2 "register_operand" "=d")
          (match_dup 0))]
!   "s390_match_ccmode(insn, CCSmode) && TARGET_ZARCH && !TARGET_EXTIMM"
    "ltgr\t%2,%0"
    [(set_attr "op_type" "RRE")
     (set_attr "z10prop" "z10_fr_E1")])
--- 1118,1124 ----
                   (match_operand:DI 1 "const0_operand" "")))
     (set (match_operand:DI 2 "register_operand" "=d")
          (match_dup 0))]
!   "s390_match_ccmode(insn, CCSmode) && !TARGET_EXTIMM"
    "ltgr\t%2,%0"
    [(set_attr "op_type" "RRE")
     (set_attr "z10prop" "z10_fr_E1")])
***************
*** 1179,1198 ****
     (set_attr "cpu_facility" "*,*,longdisp")
     (set_attr "z10prop" "z10_fr_E1,z10_super_E1,z10_super_E1")])
  
- (define_insn "*tstdi_cconly_31"
-   [(set (reg CC_REGNUM)
-         (compare (match_operand:DI 0 "register_operand" "d")
-                  (match_operand:DI 1 "const0_operand" "")))]
-   "s390_match_ccmode(insn, CCSmode) && !TARGET_ZARCH"
-   "srda\t%0,0"
-   [(set_attr "op_type" "RS")
-    (set_attr "atype"   "reg")])
- 
  ; ltr, ltgr
  (define_insn "*tst<mode>_cconly2"
    [(set (reg CC_REGNUM)
!         (compare (match_operand:GPR 0 "register_operand" "d")
!                  (match_operand:GPR 1 "const0_operand" "")))]
    "s390_match_ccmode(insn, CCSmode)"
    "lt<g>r\t%0,%0"
    [(set_attr "op_type" "RR<E>")
--- 1152,1162 ----
     (set_attr "cpu_facility" "*,*,longdisp")
     (set_attr "z10prop" "z10_fr_E1,z10_super_E1,z10_super_E1")])
  
  ; ltr, ltgr
  (define_insn "*tst<mode>_cconly2"
    [(set (reg CC_REGNUM)
!         (compare (match_operand:DSI 0 "register_operand" "d")
!                  (match_operand:DSI 1 "const0_operand" "")))]
    "s390_match_ccmode(insn, CCSmode)"
    "lt<g>r\t%0,%0"
    [(set_attr "op_type" "RR<E>")
***************
*** 1276,1282 ****
    [(set (reg CC_REGNUM)
          (compare (match_operand:DI 0 "nonimmediate_operand" "%d,d,d,d,Q")
                   (match_operand:DI 1 "general_operand" "d,K,Os,T,BQ")))]
!   "s390_match_ccmode (insn, CCTmode) && TARGET_ZARCH"
    "@
     cgr\t%0,%1
     cghi\t%0,%h1
--- 1240,1246 ----
    [(set (reg CC_REGNUM)
          (compare (match_operand:DI 0 "nonimmediate_operand" "%d,d,d,d,Q")
                   (match_operand:DI 1 "general_operand" "d,K,Os,T,BQ")))]
!   "s390_match_ccmode (insn, CCTmode)"
    "@
     cgr\t%0,%1
     cghi\t%0,%h1
***************
*** 1309,1315 ****
          (compare (sign_extend:DI (match_operand:SI 1 "nonimmediate_operand"
  						     "d,T,b"))
                   (match_operand:DI 0 "register_operand" "d, d,d")))]
!   "s390_match_ccmode(insn, CCSRmode) && TARGET_ZARCH"
    "@
     cgfr\t%0,%1
     cgf\t%0,%1
--- 1273,1279 ----
          (compare (sign_extend:DI (match_operand:SI 1 "nonimmediate_operand"
  						     "d,T,b"))
                   (match_operand:DI 0 "register_operand" "d, d,d")))]
!   "s390_match_ccmode(insn, CCSRmode)"
    "@
     cgfr\t%0,%1
     cgf\t%0,%1
***************
*** 1348,1354 ****
  (define_insn "*cmpdi_ccs_signhi_rl"
    [(set (reg CC_REGNUM)
  	(compare (sign_extend:DI (match_operand:HI 1 "memory_operand" "T,b"))
! 		 (match_operand:GPR 0 "register_operand"  "d,d")))]
    "s390_match_ccmode(insn, CCSRmode) && TARGET_Z10"
    "@
     cgh\t%0,%1
--- 1312,1318 ----
  (define_insn "*cmpdi_ccs_signhi_rl"
    [(set (reg CC_REGNUM)
  	(compare (sign_extend:DI (match_operand:HI 1 "memory_operand" "T,b"))
! 		 (match_operand:DSI 0 "register_operand"  "d,d")))]
    "s390_match_ccmode(insn, CCSRmode) && TARGET_Z10"
    "@
     cgh\t%0,%1
***************
*** 1360,1368 ****
  ; cr, chi, cfi, c, cy, cgr, cghi, cgfi, cg, chsi, cghsi, crl, cgrl
  (define_insn "*cmp<mode>_ccs"
    [(set (reg CC_REGNUM)
!         (compare (match_operand:GPR 0 "nonimmediate_operand"
                                        "d,d,Q, d,d,d,d")
!                  (match_operand:GPR 1 "general_operand"
                                        "d,K,K,Os,R,T,b")))]
    "s390_match_ccmode(insn, CCSmode)"
    "@
--- 1324,1332 ----
  ; cr, chi, cfi, c, cy, cgr, cghi, cgfi, cg, chsi, cghsi, crl, cgrl
  (define_insn "*cmp<mode>_ccs"
    [(set (reg CC_REGNUM)
!         (compare (match_operand:DSI 0 "nonimmediate_operand"
                                        "d,d,Q, d,d,d,d")
!                  (match_operand:DSI 1 "general_operand"
                                        "d,K,K,Os,R,T,b")))]
    "s390_match_ccmode(insn, CCSmode)"
    "@
***************
*** 1395,1405 ****
     (set_attr "relative_long" "yes")])
  
  ; clhrl, clghrl
! (define_insn "*cmp<GPR:mode>_ccu_zerohi_rldi"
    [(set (reg CC_REGNUM)
!  	(compare (zero_extend:GPR (mem:HI (match_operand:DI 1
  					  "larl_operand" "X")))
! 		 (match_operand:GPR 0 "register_operand" "d")))]
    "s390_match_ccmode(insn, CCURmode) && TARGET_Z10"
    "cl<g>hrl\t%0,%1"
    [(set_attr "op_type" "RIL")
--- 1359,1369 ----
     (set_attr "relative_long" "yes")])
  
  ; clhrl, clghrl
! (define_insn "*cmp<DSI:mode>_ccu_zerohi_rldi"
    [(set (reg CC_REGNUM)
! 	(compare (zero_extend:DSI (mem:HI (match_operand:DI 1
  					  "larl_operand" "X")))
! 		 (match_operand:DSI 0 "register_operand" "d")))]
    "s390_match_ccmode(insn, CCURmode) && TARGET_Z10"
    "cl<g>hrl\t%0,%1"
    [(set_attr "op_type" "RIL")
***************
*** 1412,1418 ****
          (compare (zero_extend:DI (match_operand:SI 1 "nonimmediate_operand"
                                                          "d,T,b"))
                   (match_operand:DI 0 "register_operand" "d,d,d")))]
!   "s390_match_ccmode (insn, CCURmode) && TARGET_ZARCH"
    "@
     clgfr\t%0,%1
     clgf\t%0,%1
--- 1376,1382 ----
          (compare (zero_extend:DI (match_operand:SI 1 "nonimmediate_operand"
                                                          "d,T,b"))
                   (match_operand:DI 0 "register_operand" "d,d,d")))]
!   "s390_match_ccmode (insn, CCURmode)"
    "@
     clgfr\t%0,%1
     clgf\t%0,%1
***************
*** 1429,1435 ****
                                       "d, d,d,Q,d, Q,BQ")
                   (match_operand:DI 1 "general_operand"
                                       "d,Op,b,D,T,BQ,Q")))]
!   "s390_match_ccmode (insn, CCUmode) && TARGET_ZARCH"
    "@
     clgr\t%0,%1
     clgfi\t%0,%1
--- 1393,1399 ----
                                       "d, d,d,Q,d, Q,BQ")
                   (match_operand:DI 1 "general_operand"
                                       "d,Op,b,D,T,BQ,Q")))]
!   "s390_match_ccmode (insn, CCUmode)"
    "@
     clgr\t%0,%1
     clgfi\t%0,%1
***************
*** 1540,1546 ****
     (match_operand:SPACESHIP_INT 1 "register_operand")
     (match_operand:SPACESHIP_INT 2 "register_operand")
     (match_operand:SI 3 "const_int_operand")]
!   "TARGET_Z13 && TARGET_64BIT"
    "s390_expand_int_spaceship (operands[0], operands[1], operands[2], operands[3]); DONE;")
  
  (define_mode_iterator SPACESHIP_BFP [TF DF SF])
--- 1504,1510 ----
     (match_operand:SPACESHIP_INT 1 "register_operand")
     (match_operand:SPACESHIP_INT 2 "register_operand")
     (match_operand:SI 3 "const_int_operand")]
!   "TARGET_Z13"
    "s390_expand_int_spaceship (operands[0], operands[1], operands[2], operands[3]); DONE;")
  
  (define_mode_iterator SPACESHIP_BFP [TF DF SF])
***************
*** 1549,1555 ****
     (match_operand:SPACESHIP_BFP 1 "register_operand")
     (match_operand:SPACESHIP_BFP 2 "register_operand")
     (match_operand:SI 3 "const_int_operand")]
!   "TARGET_Z13 && TARGET_64BIT && TARGET_HARD_FLOAT"
    "s390_expand_fp_spaceship (operands[0], operands[1], operands[2], operands[3]); DONE;")
  
  
--- 1513,1519 ----
     (match_operand:SPACESHIP_BFP 1 "register_operand")
     (match_operand:SPACESHIP_BFP 2 "register_operand")
     (match_operand:SI 3 "const_int_operand")]
!   "TARGET_Z13 && TARGET_HARD_FLOAT"
    "s390_expand_fp_spaceship (operands[0], operands[1], operands[2], operands[3]); DONE;")
  
  
***************
*** 1665,1672 ****
  (define_insn "*cmp_and_br_signed_<mode>"
    [(set (pc)
  	(if_then_else (match_operator 0 "s390_signed_integer_comparison"
! 			[(match_operand:GPR 1 "register_operand"  "d,d")
! 			 (match_operand:GPR 2 "nonmemory_operand" "d,C")])
  		      (label_ref (match_operand 3 "" ""))
  		      (pc)))
     (clobber (reg:CC CC_REGNUM))]
--- 1629,1636 ----
  (define_insn "*cmp_and_br_signed_<mode>"
    [(set (pc)
  	(if_then_else (match_operator 0 "s390_signed_integer_comparison"
! 			[(match_operand:DSI 1 "register_operand"  "d,d")
! 			 (match_operand:DSI 2 "nonmemory_operand" "d,C")])
  		      (label_ref (match_operand 3 "" ""))
  		      (pc)))
     (clobber (reg:CC CC_REGNUM))]
***************
*** 1693,1700 ****
  (define_insn "*cmp_and_br_unsigned_<mode>"
    [(set (pc)
  	(if_then_else (match_operator 0 "s390_unsigned_integer_comparison"
! 			[(match_operand:GPR 1 "register_operand"  "d,d")
! 			 (match_operand:GPR 2 "nonmemory_operand" "d,I")])
  		      (label_ref (match_operand 3 "" ""))
  		      (pc)))
     (clobber (reg:CC CC_REGNUM))]
--- 1657,1664 ----
  (define_insn "*cmp_and_br_unsigned_<mode>"
    [(set (pc)
  	(if_then_else (match_operator 0 "s390_unsigned_integer_comparison"
! 			[(match_operand:DSI 1 "register_operand"  "d,d")
! 			 (match_operand:DSI 2 "nonmemory_operand" "d,I")])
  		      (label_ref (match_operand 3 "" ""))
  		      (pc)))
     (clobber (reg:CC CC_REGNUM))]
***************
*** 1723,1730 ****
  (define_insn "*icmp_and_br_signed_<mode>"
    [(set (pc)
  	(if_then_else (match_operator 0 "s390_signed_integer_comparison"
! 			[(match_operand:GPR 1 "register_operand"  "d,d")
! 			 (match_operand:GPR 2 "nonmemory_operand" "d,C")])
  		      (pc)
  		      (label_ref (match_operand 3 "" ""))))
     (clobber (reg:CC CC_REGNUM))]
--- 1687,1694 ----
  (define_insn "*icmp_and_br_signed_<mode>"
    [(set (pc)
  	(if_then_else (match_operator 0 "s390_signed_integer_comparison"
! 			[(match_operand:DSI 1 "register_operand"  "d,d")
! 			 (match_operand:DSI 2 "nonmemory_operand" "d,C")])
  		      (pc)
  		      (label_ref (match_operand 3 "" ""))))
     (clobber (reg:CC CC_REGNUM))]
***************
*** 1751,1758 ****
  (define_insn "*icmp_and_br_unsigned_<mode>"
    [(set (pc)
  	(if_then_else (match_operator 0 "s390_unsigned_integer_comparison"
! 			[(match_operand:GPR 1 "register_operand"  "d,d")
! 			 (match_operand:GPR 2 "nonmemory_operand" "d,I")])
  		      (pc)
  		      (label_ref (match_operand 3 "" ""))))
     (clobber (reg:CC CC_REGNUM))]
--- 1715,1722 ----
  (define_insn "*icmp_and_br_unsigned_<mode>"
    [(set (pc)
  	(if_then_else (match_operator 0 "s390_unsigned_integer_comparison"
! 			[(match_operand:DSI 1 "register_operand"  "d,d")
! 			 (match_operand:DSI 2 "nonmemory_operand" "d,I")])
  		      (pc)
  		      (label_ref (match_operand 3 "" ""))))
     (clobber (reg:CC CC_REGNUM))]
***************
*** 1787,1793 ****
  (define_insn "*movti_bigconst"
    [(set (match_operand:TI 0 "register_operand"              "=d")
          (match_operand:TI 1 "reload_const_wide_int_operand" ""))]
!   "TARGET_ZARCH"
    "#")
  
  ; FIXME: More constants are possible by enabling jxx, jyy constraints
--- 1751,1757 ----
  (define_insn "*movti_bigconst"
    [(set (match_operand:TI 0 "register_operand"              "=d")
          (match_operand:TI 1 "reload_const_wide_int_operand" ""))]
!   ""
    "#")
  
  ; FIXME: More constants are possible by enabling jxx, jyy constraints
***************
*** 1795,1801 ****
  (define_insn "movti"
    [(set (match_operand:TI 0 "nonimmediate_operand" "=d,S,v,  v,  v,  v,  v,  v,v,d,v,R,d,    d, d,    d, d,o")
          (match_operand:TI 1 "general_operand"      " S,d,v,j00,jm1,jyy,jxx,jzz,d,v,R,v,K,NxHD0,Os,NxSD0,dT,d"))]
!   "TARGET_ZARCH"
    "@
     lmg\t%0,%N0,%S1
     stmg\t%1,%N1,%S0
--- 1759,1765 ----
  (define_insn "movti"
    [(set (match_operand:TI 0 "nonimmediate_operand" "=d,S,v,  v,  v,  v,  v,  v,v,d,v,R,d,    d, d,    d, d,o")
          (match_operand:TI 1 "general_operand"      " S,d,v,j00,jm1,jyy,jxx,jzz,d,v,R,v,K,NxHD0,Os,NxSD0,dT,d"))]
!   ""
    "@
     lmg\t%0,%N0,%S1
     stmg\t%1,%N1,%S0
***************
*** 1822,1828 ****
  (define_split
    [(set (match_operand:TI 0 "nonimmediate_operand" "")
          (match_operand:TI 1 "general_operand" ""))]
!   "TARGET_ZARCH && reload_completed
     && s390_split_ok_p (operands[0], operands[1], TImode, 0)"
    [(set (match_dup 2) (match_dup 4))
     (set (match_dup 3) (match_dup 5))]
--- 1786,1792 ----
  (define_split
    [(set (match_operand:TI 0 "nonimmediate_operand" "")
          (match_operand:TI 1 "general_operand" ""))]
!   "reload_completed
     && s390_split_ok_p (operands[0], operands[1], TImode, 0)"
    [(set (match_dup 2) (match_dup 4))
     (set (match_dup 3) (match_dup 5))]
***************
*** 1836,1842 ****
  (define_split
    [(set (match_operand:TI 0 "nonimmediate_operand" "")
          (match_operand:TI 1 "general_operand" ""))]
!   "TARGET_ZARCH && reload_completed
     && s390_split_ok_p (operands[0], operands[1], TImode, 1)"
    [(set (match_dup 2) (match_dup 4))
     (set (match_dup 3) (match_dup 5))]
--- 1800,1806 ----
  (define_split
    [(set (match_operand:TI 0 "nonimmediate_operand" "")
          (match_operand:TI 1 "general_operand" ""))]
!   "reload_completed
     && s390_split_ok_p (operands[0], operands[1], TImode, 1)"
    [(set (match_dup 2) (match_dup 4))
     (set (match_dup 3) (match_dup 5))]
***************
*** 1853,1859 ****
  (define_split
    [(set (match_operand:TI 0 "register_operand" "")
          (match_operand:TI 1 "memory_operand" ""))]
!   "TARGET_ZARCH && reload_completed
     && !VECTOR_REG_P (operands[0])
     && !s_operand (operands[1], VOIDmode)"
    [(set (match_dup 0) (match_dup 1))]
--- 1817,1823 ----
  (define_split
    [(set (match_operand:TI 0 "register_operand" "")
          (match_operand:TI 1 "memory_operand" ""))]
!   "reload_completed
     && !VECTOR_REG_P (operands[0])
     && !s_operand (operands[1], VOIDmode)"
    [(set (match_dup 0) (match_dup 1))]
***************
*** 1892,1921 ****
  ; Unfortunately there is no such variant for QI, TI and FP mode moves.
  ; These patterns are also used for unaligned SI and DI accesses.
  
! (define_expand "reload<ALL:mode><P:mode>_tomem_z10"
    [(parallel [(match_operand:ALL 0 "memory_operand"   "")
  	      (match_operand:ALL 1 "register_operand" "=d")
! 	      (match_operand:P   2 "register_operand" "=&a")])]
    "TARGET_Z10"
  {
    s390_reload_symref_address (operands[1], operands[0], operands[2], 1);
    DONE;
  })
  
! (define_expand "reload<ALL:mode><P:mode>_toreg_z10"
    [(parallel [(match_operand:ALL 0 "register_operand" "=d")
  	      (match_operand:ALL 1 "memory_operand"   "")
! 	      (match_operand:P   2 "register_operand" "=a")])]
    "TARGET_Z10"
  {
    s390_reload_symref_address (operands[0], operands[1], operands[2], 0);
    DONE;
  })
  
! (define_expand "reload<P:mode>_larl_odd_addend_z10"
!   [(parallel [(match_operand:P 0 "register_operand" "=d")
! 	      (match_operand:P 1 "larl_operand"     "")
! 	      (match_operand:P 2 "register_operand" "=a")])]
    "TARGET_Z10"
  {
    s390_reload_larl_operand (operands[0], operands[1], operands[2]);
--- 1856,1885 ----
  ; Unfortunately there is no such variant for QI, TI and FP mode moves.
  ; These patterns are also used for unaligned SI and DI accesses.
  
! (define_expand "reload<ALL:mode>di_tomem_z10"
    [(parallel [(match_operand:ALL 0 "memory_operand"   "")
  	      (match_operand:ALL 1 "register_operand" "=d")
! 	      (match_operand:DI  2 "register_operand" "=&a")])]
    "TARGET_Z10"
  {
    s390_reload_symref_address (operands[1], operands[0], operands[2], 1);
    DONE;
  })
  
! (define_expand "reload<ALL:mode>di_toreg_z10"
    [(parallel [(match_operand:ALL 0 "register_operand" "=d")
  	      (match_operand:ALL 1 "memory_operand"   "")
! 	      (match_operand:DI  2 "register_operand" "=a")])]
    "TARGET_Z10"
  {
    s390_reload_symref_address (operands[0], operands[1], operands[2], 0);
    DONE;
  })
  
! (define_expand "reloaddi_larl_odd_addend_z10"
!   [(parallel [(match_operand:DI 0 "register_operand" "=d")
! 	      (match_operand:DI 1 "larl_operand"     "")
! 	      (match_operand:DI 2 "register_operand" "=a")])]
    "TARGET_Z10"
  {
    s390_reload_larl_operand (operands[0], operands[1], operands[2]);
***************
*** 1924,1933 ****
  
  ; Handles loading a PLUS (load address) expression
  
! (define_expand "reload<mode>_plus"
!   [(parallel [(match_operand:P 0 "register_operand"  "=a")
!               (match_operand:P 1 "s390_plus_operand" "")
!               (match_operand:P 2 "register_operand"  "=&a")])]
    ""
  {
    s390_expand_plus_operand (operands[0], operands[1], operands[2]);
--- 1888,1897 ----
  
  ; Handles loading a PLUS (load address) expression
  
! (define_expand "reloaddi_plus"
!   [(parallel [(match_operand:DI 0 "register_operand"  "=a")
! 	      (match_operand:DI 1 "s390_plus_operand" "")
! 	      (match_operand:DI 2 "register_operand"  "=&a")])]
    ""
  {
    s390_expand_plus_operand (operands[0], operands[1], operands[2]);
***************
*** 1943,1952 ****
  ; - non-offsetable memory accesses for multiword moves
  ; - full vector reg moves with long displacements
  
! (define_expand "reload<mode>_la_in"
!   [(parallel [(match_operand 0   "register_operand" "")
!               (match_operand 1   "" "")
!               (match_operand:P 2 "register_operand" "=&a")])]
    ""
  {
    gcc_assert (MEM_P (operands[1]));
--- 1907,1916 ----
  ; - non-offsetable memory accesses for multiword moves
  ; - full vector reg moves with long displacements
  
! (define_expand "reloaddi_la_in"
!   [(parallel [(match_operand 0    "register_operand" "")
! 	      (match_operand 1    "" "")
! 	      (match_operand:DI 2 "register_operand" "=&a")])]
    ""
  {
    gcc_assert (MEM_P (operands[1]));
***************
*** 1956,1965 ****
    DONE;
  })
  
! (define_expand "reload<mode>_la_out"
!   [(parallel [(match_operand   0 "" "")
!               (match_operand   1 "register_operand" "")
!               (match_operand:P 2 "register_operand" "=&a")])]
    ""
  {
    gcc_assert (MEM_P (operands[0]));
--- 1920,1929 ----
    DONE;
  })
  
! (define_expand "reloaddi_la_out"
!   [(parallel [(match_operand    0 "" "")
! 	      (match_operand    1 "register_operand" "")
! 	      (match_operand:DI 2 "register_operand" "=&a")])]
    ""
  {
    gcc_assert (MEM_P (operands[0]));
***************
*** 1969,1978 ****
    DONE;
  })
  
! (define_expand "reload<mode>_PIC_addr"
!   [(parallel [(match_operand   0 "register_operand" "=d")
! 	      (match_operand   1 "larl_operand"     "")
! 	      (match_operand:P 2 "register_operand" "=a")])]
    ""
  {
    rtx new_rtx = legitimize_pic_address (operands[1], operands[2]);
--- 1933,1942 ----
    DONE;
  })
  
! (define_expand "reloaddi_PIC_addr"
!   [(parallel [(match_operand    0 "register_operand" "=d")
! 	      (match_operand    1 "larl_operand"     "")
! 	      (match_operand:DI 2 "register_operand" "=a")])]
    ""
  {
    rtx new_rtx = legitimize_pic_address (operands[1], operands[2]);
***************
*** 1989,1999 ****
    ""
  {
    /* Handle symbolic constants.  */
!   if (TARGET_64BIT
!       && (SYMBOLIC_CONST (operands[1])
! 	  || (GET_CODE (operands[1]) == PLUS
! 	      && XEXP (operands[1], 0) == pic_offset_table_rtx
! 	      && SYMBOLIC_CONST (XEXP (operands[1], 1)))))
      emit_symbolic_move (operands);
  })
  
--- 1953,1962 ----
    ""
  {
    /* Handle symbolic constants.  */
!   if (SYMBOLIC_CONST (operands[1])
!       || (GET_CODE (operands[1]) == PLUS
! 	  && XEXP (operands[1], 0) == pic_offset_table_rtx
! 	  && SYMBOLIC_CONST (XEXP (operands[1], 1))))
      emit_symbolic_move (operands);
  })
  
***************
*** 2002,2008 ****
           "=d,    d,    d,    d,    d, d,    d,    d,f,d,!*f,d,d,d,d,T,!*f,!*f,!*f,!R,!T,b,Q,d,t,Q,t,v,v,v,d,v,R,d")
          (match_operand:DI 1 "general_operand"
           " K,N0HD0,N1HD0,N2HD0,N3HD0,Os,N0SD0,N1SD0,d,f,j00,L,b,d,T,d, *f,  R,  T,*f,*f,d,K,t,d,t,Q,K,v,d,v,R,v,ZL"))]
!   "TARGET_ZARCH"
    "@
     lghi\t%0,%h1
     llihh\t%0,%i1
--- 1965,1971 ----
           "=d,    d,    d,    d,    d, d,    d,    d,f,d,!*f,d,d,d,d,T,!*f,!*f,!*f,!R,!T,b,Q,d,t,Q,t,v,v,v,d,v,R,d")
          (match_operand:DI 1 "general_operand"
           " K,N0HD0,N1HD0,N2HD0,N3HD0,Os,N0SD0,N1SD0,d,f,j00,L,b,d,T,d, *f,  R,  T,*f,*f,d,K,t,d,t,Q,K,v,d,v,R,v,ZL"))]
!   ""
    "@
     lghi\t%0,%h1
     llihh\t%0,%i1
***************
*** 2092,2098 ****
    [(set (match_operand:DI 0 "register_operand" "=d")
  	(ashift:DI (sign_extend:DI (match_operand:SI 1 "register_operand" "a"))
  		   (const_int LXAMODEITER)))]
!   "TARGET_Z17 && TARGET_64BIT"
    "lxa<lxamode>\t%0,0(%1,0)"
    [(set_attr "op_type" "RXY")])
  
--- 2055,2061 ----
    [(set (match_operand:DI 0 "register_operand" "=d")
  	(ashift:DI (sign_extend:DI (match_operand:SI 1 "register_operand" "a"))
  		   (const_int LXAMODEITER)))]
!   "TARGET_Z17"
    "lxa<lxamode>\t%0,0(%1,0)"
    [(set_attr "op_type" "RXY")])
  
***************
*** 2102,2108 ****
  	(ashift:DI (sign_extend:DI (plus:SI (match_operand:SI 1 "register_operand" "a")
  					    (match_operand:SI 2 "const_int_operand")))
  		   (const_int LXAMODEITER)))]
!   "TARGET_Z17 && TARGET_64BIT && INTVAL (operands[2]) >= -0x80000 && INTVAL (operands[2]) <= 0x7FFFF"
    "lxa<lxamode>\t%0,%2(%1,0)"
    [(set_attr "op_type" "RXY")])
  
--- 2065,2071 ----
  	(ashift:DI (sign_extend:DI (plus:SI (match_operand:SI 1 "register_operand" "a")
  					    (match_operand:SI 2 "const_int_operand")))
  		   (const_int LXAMODEITER)))]
!   "TARGET_Z17 && INTVAL (operands[2]) >= -0x80000 && INTVAL (operands[2]) <= 0x7FFFF"
    "lxa<lxamode>\t%0,%2(%1,0)"
    [(set_attr "op_type" "RXY")])
  
***************
*** 2112,2118 ****
  	(plus:DI (ashift:DI (sign_extend:DI (match_operand:SI 1 "register_operand" "a"))
  			    (const_int LXAMODEITER))
  		 (match_operand:DI 2 "register_operand" "a")))]
!   "TARGET_Z17 && TARGET_64BIT"
    "lxa<lxamode>\t%0,0(%1,%2)"
    [(set_attr "op_type" "RXY")])
  
--- 2075,2081 ----
  	(plus:DI (ashift:DI (sign_extend:DI (match_operand:SI 1 "register_operand" "a"))
  			    (const_int LXAMODEITER))
  		 (match_operand:DI 2 "register_operand" "a")))]
!   "TARGET_Z17"
    "lxa<lxamode>\t%0,0(%1,%2)"
    [(set_attr "op_type" "RXY")])
  
***************
*** 2123,2129 ****
  						     (match_operand:SI 2 "const_int_operand")))
  			    (const_int LXAMODEITER))
  		 (match_operand:DI 3 "register_operand" "a")))]
!   "TARGET_Z17 && TARGET_64BIT && INTVAL (operands[2]) >= -0x80000 && INTVAL (operands[2]) <= 0x7FFFF"
    "lxa<lxamode>\t%0,%2(%1,%3)"
    [(set_attr "op_type" "RXY")])
  
--- 2086,2092 ----
  						     (match_operand:SI 2 "const_int_operand")))
  			    (const_int LXAMODEITER))
  		 (match_operand:DI 3 "register_operand" "a")))]
!   "TARGET_Z17 && INTVAL (operands[2]) >= -0x80000 && INTVAL (operands[2]) <= 0x7FFFF"
    "lxa<lxamode>\t%0,%2(%1,%3)"
    [(set_attr "op_type" "RXY")])
  
***************
*** 2132,2138 ****
  	(plus:DI (sign_extend:DI (plus:SI (match_operand:SI 1 "register_operand" "a")
  					  (match_operand:SI 2 "const_int_operand")))
  		 (match_operand:DI 3 "register_operand" "a")))]
!   "TARGET_Z17 && TARGET_64BIT && INTVAL (operands[2]) >= -0x80000 && INTVAL (operands[2]) <= 0x7FFFF"
    "lxab\t%0,%2(%1,%3)"
    [(set_attr "op_type" "RXY")])
  
--- 2095,2101 ----
  	(plus:DI (sign_extend:DI (plus:SI (match_operand:SI 1 "register_operand" "a")
  					  (match_operand:SI 2 "const_int_operand")))
  		 (match_operand:DI 3 "register_operand" "a")))]
!   "TARGET_Z17 && INTVAL (operands[2]) >= -0x80000 && INTVAL (operands[2]) <= 0x7FFFF"
    "lxab\t%0,%2(%1,%3)"
    [(set_attr "op_type" "RXY")])
  
***************
*** 2149,2155 ****
  				      0)
  			   (const_int LXAMODEITER))
  		(const_int <LLXAMASK>)))]
!   "TARGET_Z17 && TARGET_64BIT && INTVAL (operands[2]) >= -0x80000 && INTVAL (operands[2]) <= 0x7FFFF"
    "llxa<lxamode>\t%0,%2(%1,0)"
    [(set_attr "op_type" "RXY")])
  
--- 2112,2118 ----
  				      0)
  			   (const_int LXAMODEITER))
  		(const_int <LLXAMASK>)))]
!   "TARGET_Z17 && INTVAL (operands[2]) >= -0x80000 && INTVAL (operands[2]) <= 0x7FFFF"
    "llxa<lxamode>\t%0,%2(%1,0)"
    [(set_attr "op_type" "RXY")])
  
***************
*** 2160,2166 ****
  				    (const_int LXAMODEITER))
  			 (const_int <LLXAMASK>))
  		 (match_operand:DI 2 "register_operand" "a")))]
!   "TARGET_Z17 && TARGET_64BIT"
    "llxa<lxamode>\t%0,0(%1,%2)"
    [(set_attr "op_type" "RXY")])
  
--- 2123,2129 ----
  				    (const_int LXAMODEITER))
  			 (const_int <LLXAMASK>))
  		 (match_operand:DI 2 "register_operand" "a")))]
!   "TARGET_Z17"
    "llxa<lxamode>\t%0,0(%1,%2)"
    [(set_attr "op_type" "RXY")])
  
***************
*** 2173,2179 ****
  				    (const_int LXAMODEITER))
  			 (const_int <LLXAMASK>))
  		 (match_operand:DI 3 "register_operand" "a")))]
!   "TARGET_Z17 && TARGET_64BIT && INTVAL (operands[2]) >= -0x80000 && INTVAL (operands[2]) <= 0x7FFFF"
    "llxa<lxamode>\t%0,%2(%1,%3)"
    [(set_attr "op_type" "RXY")])
  
--- 2136,2142 ----
  				    (const_int LXAMODEITER))
  			 (const_int <LLXAMASK>))
  		 (match_operand:DI 3 "register_operand" "a")))]
!   "TARGET_Z17 && INTVAL (operands[2]) >= -0x80000 && INTVAL (operands[2]) <= 0x7FFFF"
    "llxa<lxamode>\t%0,%2(%1,%3)"
    [(set_attr "op_type" "RXY")])
  
***************
*** 2182,2210 ****
  	(plus:DI (zero_extend:DI (plus:SI (match_operand:SI 1 "register_operand" "a")
  					  (match_operand:SI 2 "const_int_operand")))
  		 (match_operand:DI 3 "register_operand" "a")))]
!   "TARGET_Z17 && TARGET_64BIT && INTVAL (operands[2]) >= -0x80000 && INTVAL (operands[2]) <= 0x7FFFF"
    "llxab\t%0,%2(%1,%3)"
    [(set_attr "op_type" "RXY")])
  
  ; Splitters for loading TLS pointer from UNSPEC_GET_TP.
! ; UNSPEC_GET_TP is used instead of %a0:P, since the latter is a hard register,
  ; and those are not handled by Partial Redundancy Elimination (gcse.cc), which
  ; results in generation of redundant thread pointer loads.
  
- (define_insn_and_split "*get_tp_31"
-   [(set (match_operand:SI 0 "register_operand" "=r")
- 	(unspec:SI [(match_operand:SI 1 "register_operand" "t")]
- 		   UNSPEC_GET_TP))]
-   ""
-   "#"
-   "&& reload_completed"
-   [(set (match_dup 0) (match_dup 1))])
- 
  (define_insn_and_split "*get_tp_64"
    [(set (match_operand:DI 0 "register_operand" "=r")
  	(unspec:DI [(match_operand:DI 1 "register_operand" "t")]
  		   UNSPEC_GET_TP))]
!   "TARGET_ZARCH"
    "#"
    "&& reload_completed"
    [(set (match_dup 2) (match_dup 3))
--- 2145,2164 ----
  	(plus:DI (zero_extend:DI (plus:SI (match_operand:SI 1 "register_operand" "a")
  					  (match_operand:SI 2 "const_int_operand")))
  		 (match_operand:DI 3 "register_operand" "a")))]
!   "TARGET_Z17 && INTVAL (operands[2]) >= -0x80000 && INTVAL (operands[2]) <= 0x7FFFF"
    "llxab\t%0,%2(%1,%3)"
    [(set_attr "op_type" "RXY")])
  
  ; Splitters for loading TLS pointer from UNSPEC_GET_TP.
! ; UNSPEC_GET_TP is used instead of %a0:DI, since the latter is a hard register,
  ; and those are not handled by Partial Redundancy Elimination (gcse.cc), which
  ; results in generation of redundant thread pointer loads.
  
  (define_insn_and_split "*get_tp_64"
    [(set (match_operand:DI 0 "register_operand" "=r")
  	(unspec:DI [(match_operand:DI 1 "register_operand" "t")]
  		   UNSPEC_GET_TP))]
!   ""
    "#"
    "&& reload_completed"
    [(set (match_dup 2) (match_dup 3))
***************
*** 2218,2224 ****
  (define_split
    [(set (match_operand:DI 0 "register_operand" "")
          (match_operand:DI 1 "register_operand" ""))]
!   "TARGET_ZARCH && ACCESS_REG_P (operands[0]) && reload_completed
     && dead_or_set_p (insn, operands[1])"
    [(set (match_dup 3) (match_dup 2))
     (set (match_dup 1) (lshiftrt:DI (match_dup 1) (const_int 32)))
--- 2172,2178 ----
  (define_split
    [(set (match_operand:DI 0 "register_operand" "")
          (match_operand:DI 1 "register_operand" ""))]
!   "ACCESS_REG_P (operands[0]) && reload_completed
     && dead_or_set_p (insn, operands[1])"
    [(set (match_dup 3) (match_dup 2))
     (set (match_dup 1) (lshiftrt:DI (match_dup 1) (const_int 32)))
***************
*** 2229,2235 ****
  (define_split
    [(set (match_operand:DI 0 "register_operand" "")
          (match_operand:DI 1 "register_operand" ""))]
!   "TARGET_ZARCH && ACCESS_REG_P (operands[0]) && reload_completed
     && !dead_or_set_p (insn, operands[1])"
    [(set (match_dup 3) (match_dup 2))
     (set (match_dup 1) (rotate:DI (match_dup 1) (const_int 32)))
--- 2183,2189 ----
  (define_split
    [(set (match_operand:DI 0 "register_operand" "")
          (match_operand:DI 1 "register_operand" ""))]
!   "ACCESS_REG_P (operands[0]) && reload_completed
     && !dead_or_set_p (insn, operands[1])"
    [(set (match_dup 3) (match_dup 2))
     (set (match_dup 1) (rotate:DI (match_dup 1) (const_int 32)))
***************
*** 2238,2332 ****
    "operands[2] = gen_lowpart (SImode, operands[1]);
     s390_split_access_reg (operands[0], &operands[3], &operands[4]);")
  
- (define_insn "*movdi_31"
-   [(set (match_operand:DI 0 "nonimmediate_operand"
-                             "=d,d,Q,S,d  ,o,!*f,!*f,!*f,!*f,!R,!T,d")
-         (match_operand:DI 1 "general_operand"
-                             " Q,S,d,d,dPT,d, *f,  R,  T,j00,*f,*f,b"))]
-   "!TARGET_ZARCH"
-   "@
-    lm\t%0,%N0,%S1
-    lmy\t%0,%N0,%S1
-    stm\t%1,%N1,%S0
-    stmy\t%1,%N1,%S0
-    #
-    #
-    ldr\t%0,%1
-    ld\t%0,%1
-    ldy\t%0,%1
-    lzdr\t%0
-    std\t%1,%0
-    stdy\t%1,%0
-    #"
-   [(set_attr "op_type" "RS,RSY,RS,RSY,*,*,RR,RX,RXY,RRE,RX,RXY,*")
-    (set_attr "type" "lm,lm,stm,stm,*,*,floaddf,floaddf,floaddf,fsimpdf,fstoredf,fstoredf,*")
-    (set_attr "cpu_facility" "*,longdisp,*,longdisp,*,*,*,*,longdisp,*,*,longdisp,z10")])
- 
- ; For a load from a symbol ref we can use one of the target registers
- ; together with larl to load the address.
- (define_split
-   [(set (match_operand:DI 0 "register_operand" "")
-         (match_operand:DI 1 "memory_operand" ""))]
-   "!TARGET_ZARCH && reload_completed && TARGET_Z10
-    && larl_operand (XEXP (operands[1], 0), SImode)"
-   [(set (match_dup 2) (match_dup 3))
-    (set (match_dup 0) (match_dup 1))]
- {
-   operands[2] = operand_subword (operands[0], 1, 0, DImode);
-   operands[3] = XEXP (operands[1], 0);
-   operands[1] = replace_equiv_address (operands[1], operands[2]);
- })
- 
- (define_split
-   [(set (match_operand:DI 0 "nonimmediate_operand" "")
-         (match_operand:DI 1 "general_operand" ""))]
-   "!TARGET_ZARCH && reload_completed
-    && !s_operand (operands[0], DImode)
-    && !s_operand (operands[1], DImode)
-    && s390_split_ok_p (operands[0], operands[1], DImode, 0)"
-   [(set (match_dup 2) (match_dup 4))
-    (set (match_dup 3) (match_dup 5))]
- {
-   operands[2] = operand_subword (operands[0], 0, 0, DImode);
-   operands[3] = operand_subword (operands[0], 1, 0, DImode);
-   operands[4] = operand_subword (operands[1], 0, 0, DImode);
-   operands[5] = operand_subword (operands[1], 1, 0, DImode);
- })
- 
- (define_split
-   [(set (match_operand:DI 0 "nonimmediate_operand" "")
-         (match_operand:DI 1 "general_operand" ""))]
-   "!TARGET_ZARCH && reload_completed
-    && !s_operand (operands[0], DImode)
-    && !s_operand (operands[1], DImode)
-    && s390_split_ok_p (operands[0], operands[1], DImode, 1)"
-   [(set (match_dup 2) (match_dup 4))
-    (set (match_dup 3) (match_dup 5))]
- {
-   operands[2] = operand_subword (operands[0], 1, 0, DImode);
-   operands[3] = operand_subword (operands[0], 0, 0, DImode);
-   operands[4] = operand_subword (operands[1], 1, 0, DImode);
-   operands[5] = operand_subword (operands[1], 0, 0, DImode);
- })
- 
- (define_split
-   [(set (match_operand:DI 0 "register_operand" "")
-         (match_operand:DI 1 "memory_operand" ""))]
-   "!TARGET_ZARCH && reload_completed
-    && !FP_REG_P (operands[0])
-    && !s_operand (operands[1], VOIDmode)"
-   [(set (match_dup 0) (match_dup 1))]
- {
-   rtx addr = operand_subword (operands[0], 1, 0, DImode);
-   s390_load_address (addr, XEXP (operands[1], 0));
-   operands[1] = replace_equiv_address (operands[1], addr);
- })
- 
  (define_peephole2
    [(set (match_operand:DI 0 "register_operand" "")
          (mem:DI (match_operand 1 "address_operand" "")))]
!   "TARGET_ZARCH
!    && !FP_REG_P (operands[0])
     && GET_CODE (operands[1]) == SYMBOL_REF
     && CONSTANT_POOL_ADDRESS_P (operands[1])
     && get_pool_mode (operands[1]) == DImode
--- 2192,2201 ----
    "operands[2] = gen_lowpart (SImode, operands[1]);
     s390_split_access_reg (operands[0], &operands[3], &operands[4]);")
  
  (define_peephole2
    [(set (match_operand:DI 0 "register_operand" "")
          (mem:DI (match_operand 1 "address_operand" "")))]
!   "!FP_REG_P (operands[0])
     && GET_CODE (operands[1]) == SYMBOL_REF
     && CONSTANT_POOL_ADDRESS_P (operands[1])
     && get_pool_mode (operands[1]) == DImode
***************
*** 2337,2343 ****
  (define_insn "*la_64"
    [(set (match_operand:DI 0 "register_operand" "=d,d")
          (match_operand:QI 1 "address_operand" "ZR,ZT"))]
!   "TARGET_64BIT"
    "@
     la\t%0,%a1
     lay\t%0,%a1"
--- 2206,2212 ----
  (define_insn "*la_64"
    [(set (match_operand:DI 0 "register_operand" "=d,d")
          (match_operand:QI 1 "address_operand" "ZR,ZT"))]
!   ""
    "@
     la\t%0,%a1
     lay\t%0,%a1"
***************
*** 2351,2358 ****
      [(set (match_operand:DI 0 "register_operand" "")
            (match_operand:QI 1 "address_operand" ""))
       (clobber (reg:CC CC_REGNUM))])]
!   "TARGET_64BIT
!    && preferred_la_operand_p (operands[1], const0_rtx)"
    [(set (match_dup 0) (match_dup 1))]
    "")
  
--- 2220,2226 ----
      [(set (match_operand:DI 0 "register_operand" "")
            (match_operand:QI 1 "address_operand" ""))
       (clobber (reg:CC CC_REGNUM))])]
!   "preferred_la_operand_p (operands[1], const0_rtx)"
    [(set (match_dup 0) (match_dup 1))]
    "")
  
***************
*** 2364,2371 ****
            (plus:DI (match_dup 0)
                     (match_operand:DI 2 "nonmemory_operand" "")))
       (clobber (reg:CC CC_REGNUM))])]
!   "TARGET_64BIT
!    && !reg_overlap_mentioned_p (operands[0], operands[2])
     && preferred_la_operand_p (operands[1], operands[2])"
    [(set (match_dup 0) (plus:DI (match_dup 1) (match_dup 2)))]
    "")
--- 2232,2238 ----
            (plus:DI (match_dup 0)
                     (match_operand:DI 2 "nonmemory_operand" "")))
       (clobber (reg:CC CC_REGNUM))])]
!   "!reg_overlap_mentioned_p (operands[0], operands[2])
     && preferred_la_operand_p (operands[1], operands[2])"
    [(set (match_dup 0) (plus:DI (match_dup 1) (match_dup 2)))]
    "")
***************
*** 2376,2383 ****
  (define_peephole2
    [(set (match_operand:DI 0 "register_operand" "")
  	(match_operand:DI 1 "memory_operand" ""))]
!   "TARGET_64BIT
!    && TARGET_EXTIMM
     && GENERAL_REG_P (operands[0])
     && s390_const_int_pool_entry_p (operands[1], nullptr)
     && peep2_reg_dead_p (1, gen_rtx_REG (CCmode, CC_REGNUM))"
--- 2243,2249 ----
  (define_peephole2
    [(set (match_operand:DI 0 "register_operand" "")
  	(match_operand:DI 1 "memory_operand" ""))]
!   "TARGET_EXTIMM
     && GENERAL_REG_P (operands[0])
     && s390_const_int_pool_entry_p (operands[1], nullptr)
     && peep2_reg_dead_p (1, gen_rtx_REG (CCmode, CC_REGNUM))"
***************
*** 2407,2443 ****
  ; movsi instruction pattern(s).
  ;
  
! (define_expand "movsi"
!   [(set (match_operand:SI 0 "general_operand" "")
!         (match_operand:SI 1 "general_operand" ""))]
!   ""
! {
!   /* Handle symbolic constants.  */
!   if (!TARGET_64BIT
!       && (SYMBOLIC_CONST (operands[1])
! 	  || (GET_CODE (operands[1]) == PLUS
! 	      && XEXP (operands[1], 0) == pic_offset_table_rtx
! 	      && SYMBOLIC_CONST (XEXP(operands[1], 1)))))
!     emit_symbolic_move (operands);
! })
! 
! (define_insn "*movsi_larl"
!   [(set (match_operand:SI 0 "register_operand" "=d")
!         (match_operand:SI 1 "larl_operand" "X"))]
!   "!TARGET_64BIT
!    && !FP_REG_P (operands[0])"
!   "larl\t%0,%1"
!    [(set_attr "op_type" "RIL")
!     (set_attr "type"    "larl")
!     (set_attr "z10prop" "z10_fwd_A1")
!     (set_attr "relative_long" "yes")])
! 
! (define_insn "*movsi_zarch"
    [(set (match_operand:SI 0 "nonimmediate_operand"
  	 "=d,    d,    d, d,d,d,d,d,d,R,T,!*f,!*f,!*f,!*f,!*f,!R,!T,d,t,Q,b,Q,t,v,v,v,d,v,R")
          (match_operand:SI 1 "general_operand"
  	 " K,N0HS0,N1HS0,Os,L,b,d,R,T,d,d, *f, *f,  R,  R,  T,*f,*f,t,d,t,d,K,Q,K,v,d,v,R,v"))]
!   "TARGET_ZARCH"
    "@
     lhi\t%0,%h1
     llilh\t%0,%i1
--- 2273,2284 ----
  ; movsi instruction pattern(s).
  ;
  
! (define_insn "movsi"
    [(set (match_operand:SI 0 "nonimmediate_operand"
  	 "=d,    d,    d, d,d,d,d,d,d,R,T,!*f,!*f,!*f,!*f,!*f,!R,!T,d,t,Q,b,Q,t,v,v,v,d,v,R")
          (match_operand:SI 1 "general_operand"
  	 " K,N0HS0,N1HS0,Os,L,b,d,R,T,d,d, *f, *f,  R,  R,  T,*f,*f,t,d,t,d,K,Q,K,v,d,v,R,v"))]
!   ""
    "@
     lhi\t%0,%h1
     llilh\t%0,%i1
***************
*** 2525,2555 ****
                                *,*,*,*,*,*,*,*,*,*,
                                *,yes,*,*,*,*,*,*,*,*")])
  
- (define_insn "*movsi_esa"
-   [(set (match_operand:SI 0 "nonimmediate_operand" "=d,d,d,R,!*f,!*f,!*f,!*f,!R,d,t,Q,t")
-         (match_operand:SI 1 "general_operand"       "K,d,R,d, *f, *f,  R,  R,*f,t,d,t,Q"))]
-   "!TARGET_ZARCH"
-   "@
-    lhi\t%0,%h1
-    lr\t%0,%1
-    l\t%0,%1
-    st\t%1,%0
-    ldr\t%0,%1
-    ler\t%0,%1
-    lde\t%0,%1
-    le\t%0,%1
-    ste\t%1,%0
-    ear\t%0,%1
-    sar\t%0,%1
-    stam\t%1,%1,%S0
-    lam\t%0,%0,%S1"
-   [(set_attr "op_type" "RI,RR,RX,RX,RR,RR,RXE,RX,RX,RRE,RRE,RS,RS")
-    (set_attr "type" "*,lr,load,store,floadsf,floadsf,floadsf,floadsf,fstoresf,*,*,*,*")
-    (set_attr "z10prop" "z10_fwd_A1,z10_fr_E1,z10_fwd_A3,z10_rec,*,*,*,*,*,z10_super_E1,
-                         z10_super,*,*")
-    (set_attr "cpu_facility" "*,*,*,*,vx,*,vx,*,*,*,*,*,*")
- ])
- 
  (define_peephole2
    [(set (match_operand:SI 0 "register_operand" "")
          (mem:SI (match_operand 1 "address_operand" "")))]
--- 2366,2371 ----
***************
*** 2561,2642 ****
    [(set (match_dup 0) (match_dup 2))]
    "operands[2] = get_pool_constant (operands[1]);")
  
- (define_insn "*la_31"
-   [(set (match_operand:SI 0 "register_operand" "=d,d")
-         (match_operand:QI 1 "address_operand" "ZR,ZT"))]
-   "!TARGET_64BIT && legitimate_la_operand_p (operands[1])"
-   "@
-    la\t%0,%a1
-    lay\t%0,%a1"
-   [(set_attr "op_type"  "RX,RXY")
-    (set_attr "type"     "la")
-    (set_attr "cpu_facility" "*,longdisp")
-    (set_attr "z10prop" "z10_fwd_A1,z10_fwd_A1")])
- 
- (define_peephole2
-   [(parallel
-     [(set (match_operand:SI 0 "register_operand" "")
-           (match_operand:QI 1 "address_operand" ""))
-      (clobber (reg:CC CC_REGNUM))])]
-   "!TARGET_64BIT
-    && preferred_la_operand_p (operands[1], const0_rtx)"
-   [(set (match_dup 0) (match_dup 1))]
-   "")
- 
- (define_peephole2
-   [(set (match_operand:SI 0 "register_operand" "")
-         (match_operand:SI 1 "register_operand" ""))
-    (parallel
-     [(set (match_dup 0)
-           (plus:SI (match_dup 0)
-                    (match_operand:SI 2 "nonmemory_operand" "")))
-      (clobber (reg:CC CC_REGNUM))])]
-   "!TARGET_64BIT
-    && !reg_overlap_mentioned_p (operands[0], operands[2])
-    && preferred_la_operand_p (operands[1], operands[2])"
-   [(set (match_dup 0) (plus:SI (match_dup 1) (match_dup 2)))]
-   "")
- 
- (define_insn "*la_31_and"
-   [(set (match_operand:SI 0 "register_operand" "=d,d")
-         (and:SI (match_operand:QI 1 "address_operand" "ZR,ZT")
-                 (const_int 2147483647)))]
-   "!TARGET_64BIT"
-   "@
-    la\t%0,%a1
-    lay\t%0,%a1"
-   [(set_attr "op_type"  "RX,RXY")
-    (set_attr "type"     "la")
-    (set_attr "cpu_facility" "*,longdisp")
-    (set_attr "z10prop" "z10_fwd_A1,z10_fwd_A1")])
- 
- (define_insn_and_split "*la_31_and_cc"
-   [(set (match_operand:SI 0 "register_operand" "=d")
-         (and:SI (match_operand:QI 1 "address_operand" "p")
-                 (const_int 2147483647)))
-    (clobber (reg:CC CC_REGNUM))]
-   "!TARGET_64BIT"
-   "#"
-   "&& reload_completed"
-   [(set (match_dup 0)
-         (and:SI (match_dup 1) (const_int 2147483647)))]
-   ""
-   [(set_attr "op_type"  "RX")
-    (set_attr "type"     "la")])
- 
- (define_insn "force_la_31"
-   [(set (match_operand:SI 0 "register_operand" "=d,d")
-         (match_operand:QI 1 "address_operand" "ZR,ZT"))
-    (use (const_int 0))]
-   "!TARGET_64BIT"
-   "@
-    la\t%0,%a1
-    lay\t%0,%a1"
-   [(set_attr "op_type"  "RX")
-    (set_attr "type"     "la")
-    (set_attr "cpu_facility" "*,longdisp")
-    (set_attr "z10prop" "z10_fwd_A1,z10_fwd_A1")])
- 
  ;
  ; movhi instruction pattern(s).
  ;
--- 2377,2382 ----
***************
*** 2714,2720 ****
  {
    /* On z/Architecture, zero-extending from memory to register
       is just as fast as a QImode load.  */
!   if (TARGET_ZARCH && optimize && can_create_pseudo_p ()
        && register_operand (operands[0], VOIDmode)
        && GET_CODE (operands[1]) == MEM)
      {
--- 2454,2460 ----
  {
    /* On z/Architecture, zero-extending from memory to register
       is just as fast as a QImode load.  */
!   if (optimize && can_create_pseudo_p ()
        && register_operand (operands[0], VOIDmode)
        && GET_CODE (operands[1]) == MEM)
      {
***************
*** 2799,2805 ****
  (define_insn "movstrictsi"
    [(set (strict_low_part (match_operand:SI 0 "subreg_register_operand" "+d,d,d,d"))
                           (match_operand:SI 1 "general_operand"          "d,R,T,t"))]
!   "TARGET_ZARCH"
    "@
     lr\t%0,%1
     l\t%0,%1
--- 2539,2545 ----
  (define_insn "movstrictsi"
    [(set (strict_low_part (match_operand:SI 0 "subreg_register_operand" "+d,d,d,d"))
                           (match_operand:SI 1 "general_operand"          "d,R,T,t"))]
!   ""
    "@
     lr\t%0,%1
     l\t%0,%1
***************
*** 2823,2829 ****
  (define_insn "*mov<mode>_64"
    [(set (match_operand:TD_TF 0 "nonimmediate_operand" "=f,f,f,o,d,S, d,o")
          (match_operand:TD_TF 1 "general_operand"      " G,f,o,f,S,d,dT,d"))]
!   "TARGET_ZARCH"
    "@
     lzxr\t%0
     lxr\t%0,%1
--- 2563,2569 ----
  (define_insn "*mov<mode>_64"
    [(set (match_operand:TD_TF 0 "nonimmediate_operand" "=f,f,f,o,d,S, d,o")
          (match_operand:TD_TF 1 "general_operand"      " G,f,o,f,S,d,dT,d"))]
!   ""
    "@
     lzxr\t%0
     lxr\t%0,%1
***************
*** 2837,2861 ****
     (set_attr "type"         "fsimptf,fsimptf,*,*,lm,stm,*,*")
     (set_attr "cpu_facility" "z196,*,*,*,*,*,*,*")])
  
- (define_insn "*mov<mode>_31"
-   [(set (match_operand:TD_TF 0 "nonimmediate_operand" "=f,f,f,o")
-         (match_operand:TD_TF 1 "general_operand"      " G,f,o,f"))]
-   "!TARGET_ZARCH"
-   "@
-    lzxr\t%0
-    lxr\t%0,%1
-    #
-    #"
-   [(set_attr "op_type"      "RRE,RRE,*,*")
-    (set_attr "type"         "fsimptf,fsimptf,*,*")
-    (set_attr "cpu_facility" "z196,*,*,*")])
- 
  ; TFmode in GPRs splitters
  
  (define_split
    [(set (match_operand:TD_TF 0 "nonimmediate_operand" "")
          (match_operand:TD_TF 1 "general_operand"      ""))]
!   "TARGET_ZARCH && reload_completed
     && !s_operand (operands[0], <MODE>mode)
     && !s_operand (operands[1], <MODE>mode)
     && s390_split_ok_p (operands[0], operands[1], <MODE>mode, 0)"
--- 2577,2588 ----
     (set_attr "type"         "fsimptf,fsimptf,*,*,lm,stm,*,*")
     (set_attr "cpu_facility" "z196,*,*,*,*,*,*,*")])
  
  ; TFmode in GPRs splitters
  
  (define_split
    [(set (match_operand:TD_TF 0 "nonimmediate_operand" "")
          (match_operand:TD_TF 1 "general_operand"      ""))]
!   "reload_completed
     && !s_operand (operands[0], <MODE>mode)
     && !s_operand (operands[1], <MODE>mode)
     && s390_split_ok_p (operands[0], operands[1], <MODE>mode, 0)"
***************
*** 2871,2877 ****
  (define_split
    [(set (match_operand:TD_TF 0 "nonimmediate_operand" "")
          (match_operand:TD_TF 1 "general_operand"      ""))]
!   "TARGET_ZARCH && reload_completed
     && !s_operand (operands[0], <MODE>mode)
     && !s_operand (operands[1], <MODE>mode)
     && s390_split_ok_p (operands[0], operands[1], <MODE>mode, 1)"
--- 2598,2604 ----
  (define_split
    [(set (match_operand:TD_TF 0 "nonimmediate_operand" "")
          (match_operand:TD_TF 1 "general_operand"      ""))]
!   "reload_completed
     && !s_operand (operands[0], <MODE>mode)
     && !s_operand (operands[1], <MODE>mode)
     && s390_split_ok_p (operands[0], operands[1], <MODE>mode, 1)"
***************
*** 2887,2893 ****
  (define_split
    [(set (match_operand:TD_TF 0 "register_operand" "")
          (match_operand:TD_TF 1 "memory_operand"   ""))]
!   "TARGET_ZARCH && reload_completed
     && GENERAL_REG_P (operands[0])
     && !s_operand (operands[1], VOIDmode)"
    [(set (match_dup 0) (match_dup 1))]
--- 2614,2620 ----
  (define_split
    [(set (match_operand:TD_TF 0 "register_operand" "")
          (match_operand:TD_TF 1 "memory_operand"   ""))]
!   "reload_completed
     && GENERAL_REG_P (operands[0])
     && !s_operand (operands[1], VOIDmode)"
    [(set (match_dup 0) (match_dup 1))]
***************
*** 2979,2985 ****
  (define_insn "*mov<mode>_64"
    [(set (match_operand:DD_DF 0 "nonimmediate_operand" "=f,f,f,f,R,T,d,d,d,d,b,T")
          (match_operand:DD_DF 1 "general_operand"      " G,f,R,T,f,f,G,d,b,T,d,d"))]
!   "TARGET_ZARCH"
    "@
     lzdr\t%0
     ldr\t%0,%1
--- 2706,2712 ----
  (define_insn "*mov<mode>_64"
    [(set (match_operand:DD_DF 0 "nonimmediate_operand" "=f,f,f,f,R,T,d,d,d,d,b,T")
          (match_operand:DD_DF 1 "general_operand"      " G,f,R,T,f,f,G,d,b,T,d,d"))]
!   ""
    "@
     lzdr\t%0
     ldr\t%0,%1
***************
*** 3000,3074 ****
     (set_attr "cpu_facility" "z196,*,*,longdisp,*,longdisp,*,*,z10,*,z10,*")
     (set_attr "relative_long" "*,*,*,*,*,*,*,*,yes,*,*,*")])
  
- (define_insn "*mov<mode>_31"
-   [(set (match_operand:DD_DF 0 "nonimmediate_operand"
-                                "=f,f,f,f,R,T,d,d,Q,S,  d,o")
-         (match_operand:DD_DF 1 "general_operand"
-                                " G,f,R,T,f,f,Q,S,d,d,dPT,d"))]
-   "!TARGET_ZARCH"
-   "@
-    lzdr\t%0
-    ldr\t%0,%1
-    ld\t%0,%1
-    ldy\t%0,%1
-    std\t%1,%0
-    stdy\t%1,%0
-    lm\t%0,%N0,%S1
-    lmy\t%0,%N0,%S1
-    stm\t%1,%N1,%S0
-    stmy\t%1,%N1,%S0
-    #
-    #"
-   [(set_attr "op_type" "RRE,RR,RX,RXY,RX,RXY,RS,RSY,RS,RSY,*,*")
-    (set_attr "type"    "fsimpdf,fload<mode>,fload<mode>,fload<mode>,
-                         fstore<mode>,fstore<mode>,lm,lm,stm,stm,*,*")
-    (set_attr "cpu_facility" "z196,*,*,longdisp,*,longdisp,*,longdisp,*,longdisp,*,*")])
- 
- (define_split
-   [(set (match_operand:DD_DF 0 "nonimmediate_operand" "")
-         (match_operand:DD_DF 1 "general_operand" ""))]
-   "!TARGET_ZARCH && reload_completed
-    && !s_operand (operands[0], <MODE>mode)
-    && !s_operand (operands[1], <MODE>mode)
-    && s390_split_ok_p (operands[0], operands[1], <MODE>mode, 0)"
-   [(set (match_dup 2) (match_dup 4))
-    (set (match_dup 3) (match_dup 5))]
- {
-   operands[2] = operand_subword (operands[0], 0, 0, <MODE>mode);
-   operands[3] = operand_subword (operands[0], 1, 0, <MODE>mode);
-   operands[4] = operand_subword (operands[1], 0, 0, <MODE>mode);
-   operands[5] = operand_subword (operands[1], 1, 0, <MODE>mode);
- })
- 
- (define_split
-   [(set (match_operand:DD_DF 0 "nonimmediate_operand" "")
-         (match_operand:DD_DF 1 "general_operand" ""))]
-   "!TARGET_ZARCH && reload_completed
-    && !s_operand (operands[0], <MODE>mode)
-    && !s_operand (operands[1], <MODE>mode)
-    && s390_split_ok_p (operands[0], operands[1], <MODE>mode, 1)"
-   [(set (match_dup 2) (match_dup 4))
-    (set (match_dup 3) (match_dup 5))]
- {
-   operands[2] = operand_subword (operands[0], 1, 0, <MODE>mode);
-   operands[3] = operand_subword (operands[0], 0, 0, <MODE>mode);
-   operands[4] = operand_subword (operands[1], 1, 0, <MODE>mode);
-   operands[5] = operand_subword (operands[1], 0, 0, <MODE>mode);
- })
- 
- (define_split
-   [(set (match_operand:DD_DF 0 "register_operand" "")
-         (match_operand:DD_DF 1 "memory_operand" ""))]
-   "!TARGET_ZARCH && reload_completed
-    && !FP_REG_P (operands[0])
-    && !s_operand (operands[1], VOIDmode)"
-   [(set (match_dup 0) (match_dup 1))]
- {
-   rtx addr = operand_subword (operands[0], 1, 0, <MODE>mode);
-   s390_load_address (addr, XEXP (operands[1], 0));
-   operands[1] = replace_equiv_address (operands[1], addr);
- })
- 
  ;
  ; mov(sf|sd) instruction pattern(s).
  ;
--- 2727,2732 ----
***************
*** 3116,3122 ****
  (define_insn "movhf"
    [(set (match_operand:HF 0 "nonimmediate_operand")
  	(match_operand:HF 1 "general_operand"))]
!   "TARGET_64BIT"
    {@ [ cons: =0, 1; attrs: op_type, cpu_facility ]
       [ v , v   ; VRR , vx       ] vlr\t%v0,%v1
       [ v , d   ; VRS , vx       ] vlvgh\t%v0,%1,0
--- 2774,2780 ----
  (define_insn "movhf"
    [(set (match_operand:HF 0 "nonimmediate_operand")
  	(match_operand:HF 1 "general_operand"))]
!   ""
    {@ [ cons: =0, 1; attrs: op_type, cpu_facility ]
       [ v , v   ; VRR , vx       ] vlr\t%v0,%v1
       [ v , d   ; VRS , vx       ] vlvgh\t%v0,%1,0
***************
*** 3294,3300 ****
    count = INTVAL (operands[2]);
    regno = REGNO (operands[0]);
    mode = GET_MODE (operands[0]);
!   if (mode != SImode && (!TARGET_ZARCH || mode != DImode))
      FAIL;
  
    operands[3] = gen_rtx_PARALLEL (VOIDmode, rtvec_alloc (count));
--- 2952,2958 ----
    count = INTVAL (operands[2]);
    regno = REGNO (operands[0]);
    mode = GET_MODE (operands[0]);
!   if (mode != SImode && mode != DImode)
      FAIL;
  
    operands[3] = gen_rtx_PARALLEL (VOIDmode, rtvec_alloc (count));
***************
*** 3333,3339 ****
    [(match_parallel 0 "load_multiple_operation"
  		   [(set (match_operand:DI 1 "register_operand" "=r")
  			 (match_operand:DI 2 "s_operand" "S"))])]
!   "reload_completed && TARGET_ZARCH"
  {
    int words = XVECLEN (operands[0], 0);
    operands[0] = gen_rtx_REG (DImode, REGNO (operands[1]) + words - 1);
--- 2991,2997 ----
    [(match_parallel 0 "load_multiple_operation"
  		   [(set (match_operand:DI 1 "register_operand" "=r")
  			 (match_operand:DI 2 "s_operand" "S"))])]
!   "reload_completed"
  {
    int words = XVECLEN (operands[0], 0);
    operands[0] = gen_rtx_REG (DImode, REGNO (operands[1]) + words - 1);
***************
*** 3385,3391 ****
    count = INTVAL (operands[2]);
    regno = REGNO (operands[1]);
    mode = GET_MODE (operands[1]);
!   if (mode != SImode && (!TARGET_ZARCH || mode != DImode))
      FAIL;
  
    operands[3] = gen_rtx_PARALLEL (VOIDmode, rtvec_alloc (count));
--- 3043,3049 ----
    count = INTVAL (operands[2]);
    regno = REGNO (operands[1]);
    mode = GET_MODE (operands[1]);
!   if (mode != SImode && mode != DImode)
      FAIL;
  
    operands[3] = gen_rtx_PARALLEL (VOIDmode, rtvec_alloc (count));
***************
*** 3425,3431 ****
    [(match_parallel 0 "store_multiple_operation"
  		   [(set (match_operand:DI 1 "s_operand" "=S")
  			 (match_operand:DI 2 "register_operand" "r"))])]
!   "reload_completed && TARGET_ZARCH"
  {
    int words = XVECLEN (operands[0], 0);
    operands[0] = gen_rtx_REG (DImode, REGNO (operands[2]) + words - 1);
--- 3083,3089 ----
    [(match_parallel 0 "store_multiple_operation"
  		   [(set (match_operand:DI 1 "s_operand" "=S")
  			 (match_operand:DI 2 "register_operand" "r"))])]
!   "reload_completed"
  {
    int words = XVECLEN (operands[0], 0);
    operands[0] = gen_rtx_REG (DImode, REGNO (operands[2]) + words - 1);
***************
*** 3481,3515 ****
  ; strlenM instruction pattern(s).
  ;
  
! (define_expand "strlen<mode>"
!   [(match_operand:P   0 "register_operand" "")  ; result
     (match_operand:BLK 1 "memory_operand" "")    ; input string
     (match_operand:SI  2 "immediate_operand" "") ; search character
     (match_operand:SI  3 "immediate_operand" "")] ; known alignment
    ""
  {
    if (!TARGET_VX || operands[2] != const0_rtx)
!     emit_insn (gen_strlen_srst<mode> (operands[0], operands[1],
! 				      operands[2], operands[3]));
    else
      s390_expand_vec_strlen (operands[0], operands[1], operands[3]);
  
    DONE;
  })
  
! (define_expand "strlen_srst<mode>"
    [(set (reg:SI 0) (match_operand:SI 2 "immediate_operand" ""))
     (parallel
      [(set (match_dup 4)
! 	  (unspec:P [(const_int 0)
  		      (match_operand:BLK 1 "memory_operand" "")
  		      (reg:SI 0)
  		      (match_operand 3 "immediate_operand" "")] UNSPEC_SRST))
!      (clobber (scratch:P))
       (clobber (reg:CC CC_REGNUM))])
     (parallel
!     [(set (match_operand:P 0 "register_operand" "")
!           (minus:P (match_dup 4) (match_dup 5)))
       (clobber (reg:CC CC_REGNUM))])]
    ""
  {
--- 3139,3173 ----
  ; strlenM instruction pattern(s).
  ;
  
! (define_expand "strlendi"
!   [(match_operand:DI  0 "register_operand" "")  ; result
     (match_operand:BLK 1 "memory_operand" "")    ; input string
     (match_operand:SI  2 "immediate_operand" "") ; search character
     (match_operand:SI  3 "immediate_operand" "")] ; known alignment
    ""
  {
    if (!TARGET_VX || operands[2] != const0_rtx)
!     emit_insn (gen_strlen_srstdi (operands[0], operands[1],
! 				  operands[2], operands[3]));
    else
      s390_expand_vec_strlen (operands[0], operands[1], operands[3]);
  
    DONE;
  })
  
! (define_expand "strlen_srstdi"
    [(set (reg:SI 0) (match_operand:SI 2 "immediate_operand" ""))
     (parallel
      [(set (match_dup 4)
! 	  (unspec:DI [(const_int 0)
  		      (match_operand:BLK 1 "memory_operand" "")
  		      (reg:SI 0)
  		      (match_operand 3 "immediate_operand" "")] UNSPEC_SRST))
!      (clobber (scratch:DI))
       (clobber (reg:CC CC_REGNUM))])
     (parallel
!     [(set (match_operand:DI 0 "register_operand" "")
!           (minus:DI (match_dup 4) (match_dup 5)))
       (clobber (reg:CC CC_REGNUM))])]
    ""
  {
***************
*** 3519,3531 ****
    operands[1] = replace_equiv_address (operands[1], operands[5]);
  })
  
! (define_insn "*strlen<mode>"
!   [(set (match_operand:P 0 "register_operand" "=a")
! 	(unspec:P [(match_operand:P 2 "general_operand" "0")
! 		    (mem:BLK (match_operand:P 3 "register_operand" "1"))
  		    (reg:SI 0)
  		    (match_operand 4 "immediate_operand" "")] UNSPEC_SRST))
!    (clobber (match_scratch:P 1 "=a"))
     (clobber (reg:CC CC_REGNUM))]
    ""
    "srst\t%0,%1\;jo\t.-4"
--- 3177,3189 ----
    operands[1] = replace_equiv_address (operands[1], operands[5]);
  })
  
! (define_insn "*strlendi"
!   [(set (match_operand:DI 0 "register_operand" "=a")
! 	(unspec:DI [(match_operand:DI 2 "general_operand" "0")
! 		    (mem:BLK (match_operand:DI 3 "register_operand" "1"))
  		    (reg:SI 0)
  		    (match_operand 4 "immediate_operand" "")] UNSPEC_SRST))
!    (clobber (match_scratch:DI 1 "=a"))
     (clobber (reg:CC CC_REGNUM))]
    ""
    "srst\t%0,%1\;jo\t.-4"
***************
*** 3566,3577 ****
    operands[4] = addr2;
  })
  
! (define_insn "*cmpstr<mode>"
!   [(clobber (match_operand:P 0 "register_operand" "=d"))
!    (clobber (match_operand:P 1 "register_operand" "=d"))
     (set (reg:CCU CC_REGNUM)
! 	(compare:CCU (mem:BLK (match_operand:P 2 "register_operand" "0"))
! 		     (mem:BLK (match_operand:P 3 "register_operand" "1"))))
     (use (reg:SI 0))]
    ""
    "clst\t%0,%1\;jo\t.-4"
--- 3224,3235 ----
    operands[4] = addr2;
  })
  
! (define_insn "*cmpstrdi"
!   [(clobber (match_operand:DI 0 "register_operand" "=d"))
!    (clobber (match_operand:DI 1 "register_operand" "=d"))
     (set (reg:CCU CC_REGNUM)
! 	(compare:CCU (mem:BLK (match_operand:DI 2 "register_operand" "0"))
! 		     (mem:BLK (match_operand:DI 3 "register_operand" "1"))))
     (use (reg:SI 0))]
    ""
    "clst\t%0,%1\;jo\t.-4"
***************
*** 3583,3610 ****
  ;
  
  (define_expand "movstr"
-   [(match_operand 0 "register_operand" "")
-    (match_operand 1 "memory_operand" "")
-    (match_operand 2 "memory_operand" "")]
-   ""
- {
-   if (TARGET_64BIT)
-     emit_insn (gen_movstrdi (operands[0], operands[1], operands[2]));
-   else
-     emit_insn (gen_movstrsi (operands[0], operands[1], operands[2]));
-   DONE;
- })
- 
- (define_expand "movstr<P:mode>"
    [(set (reg:SI 0) (const_int 0))
     (parallel
      [(clobber (match_dup 3))
       (set (match_operand:BLK 1 "memory_operand" "")
  	  (match_operand:BLK 2 "memory_operand" ""))
!      (set (match_operand:P 0 "register_operand" "")
! 	  (unspec:P [(match_dup 1)
! 		   (match_dup 2)
! 		   (reg:SI 0)] UNSPEC_MVST))
       (clobber (reg:CC CC_REGNUM))])]
    ""
  {
--- 3241,3255 ----
  ;
  
  (define_expand "movstr"
    [(set (reg:SI 0) (const_int 0))
     (parallel
      [(clobber (match_dup 3))
       (set (match_operand:BLK 1 "memory_operand" "")
  	  (match_operand:BLK 2 "memory_operand" ""))
!      (set (match_operand:DI 0 "register_operand" "")
! 	  (unspec:DI [(match_dup 1)
! 		      (match_dup 2)
! 		      (reg:SI 0)] UNSPEC_MVST))
       (clobber (reg:CC CC_REGNUM))])]
    ""
  {
***************
*** 3627,3639 ****
  })
  
  (define_insn "*movstr"
!   [(clobber (match_operand:P 2 "register_operand" "=d"))
!    (set (mem:BLK (match_operand:P 1 "register_operand" "0"))
! 	(mem:BLK (match_operand:P 3 "register_operand" "2")))
!    (set (match_operand:P 0 "register_operand" "=d")
! 	(unspec:P [(mem:BLK (match_dup 1))
! 		 (mem:BLK (match_dup 3))
! 		 (reg:SI 0)] UNSPEC_MVST))
     (clobber (reg:CC CC_REGNUM))]
    ""
    "mvst\t%1,%2\;jo\t.-4"
--- 3272,3284 ----
  })
  
  (define_insn "*movstr"
!   [(clobber (match_operand:DI 2 "register_operand" "=d"))
!    (set (mem:BLK (match_operand:DI 1 "register_operand" "0"))
! 	(mem:BLK (match_operand:DI 3 "register_operand" "2")))
!    (set (match_operand:DI 0 "register_operand" "=d")
! 	(unspec:DI [(mem:BLK (match_dup 1))
! 		    (mem:BLK (match_dup 3))
! 		    (reg:SI 0)] UNSPEC_MVST))
     (clobber (reg:CC CC_REGNUM))]
    ""
    "mvst\t%1,%2\;jo\t.-4"
***************
*** 3648,3654 ****
  (define_expand "cpymem<mode>"
    [(set (match_operand:BLK 0 "memory_operand" "")   ; destination
          (match_operand:BLK 1 "memory_operand" ""))  ; source
!    (use (match_operand:GPR 2 "general_operand" "")) ; size
     (match_operand 3 "")  ; align
     (match_operand 4 "")  ; expected align
     (match_operand 5 "")  ; expected size
--- 3293,3299 ----
  (define_expand "cpymem<mode>"
    [(set (match_operand:BLK 0 "memory_operand" "")   ; destination
          (match_operand:BLK 1 "memory_operand" ""))  ; source
!    (use (match_operand:DSI 2 "general_operand" "")) ; size
     (match_operand 3 "")  ; align
     (match_operand 4 "")  ; expected align
     (match_operand 5 "")  ; expected size
***************
*** 3680,3690 ****
          (match_operand:BLK 1 "memory_operand" "Q,Q,Q,Q"))
     (use (match_operand 2 "nonmemory_operand" "n,a,a,a"))
     (use (match_operand 3 "immediate_operand" "X,R,X,X"))
!    (clobber (match_scratch:P 4 "=X,X,X,&a"))]
    "(GET_MODE (operands[2]) == Pmode || GET_MODE (operands[2]) == VOIDmode)"
    "#"
    [(set_attr "type"         "cs")
!    (set_attr "cpu_facility" "*,*,z10,cpu_zarch")])
  
  (define_split
    [(set (match_operand:BLK 0 "memory_operand" "")
--- 3325,3335 ----
          (match_operand:BLK 1 "memory_operand" "Q,Q,Q,Q"))
     (use (match_operand 2 "nonmemory_operand" "n,a,a,a"))
     (use (match_operand 3 "immediate_operand" "X,R,X,X"))
!    (clobber (match_scratch:DI 4 "=X,X,X,&a"))]
    "(GET_MODE (operands[2]) == Pmode || GET_MODE (operands[2]) == VOIDmode)"
    "#"
    [(set_attr "type"         "cs")
!    (set_attr "cpu_facility" "*,*,z10,*")])
  
  (define_split
    [(set (match_operand:BLK 0 "memory_operand" "")
***************
*** 3754,3765 ****
       (clobber (reg:CC CC_REGNUM))])]
    ""
  {
!   machine_mode sreg_mode = TARGET_ZARCH ? DImode : SImode;
!   machine_mode dreg_mode = TARGET_ZARCH ? TImode : DImode;
!   rtx reg0 = gen_reg_rtx (dreg_mode);
!   rtx reg1 = gen_reg_rtx (dreg_mode);
!   rtx addr0 = gen_lowpart (Pmode, gen_highpart (sreg_mode, reg0));
!   rtx addr1 = gen_lowpart (Pmode, gen_highpart (sreg_mode, reg1));
    rtx len0 = gen_lowpart (Pmode, reg0);
    rtx len1 = gen_lowpart (Pmode, reg1);
  
--- 3399,3408 ----
       (clobber (reg:CC CC_REGNUM))])]
    ""
  {
!   rtx reg0 = gen_reg_rtx (TImode);
!   rtx reg1 = gen_reg_rtx (TImode);
!   rtx addr0 = gen_lowpart (Pmode, gen_highpart (DImode, reg0));
!   rtx addr1 = gen_lowpart (Pmode, gen_highpart (DImode, reg1));
    rtx len0 = gen_lowpart (Pmode, reg0);
    rtx len1 = gen_lowpart (Pmode, reg1);
  
***************
*** 3778,3804 ****
  })
  
  (define_insn "*cpymem_long"
-   [(clobber (match_operand:<DBL> 0 "register_operand" "=d"))
-    (clobber (match_operand:<DBL> 1 "register_operand" "=d"))
-    (set (mem:BLK (subreg:P (match_operand:<DBL> 2 "register_operand" "0") 0))
-         (mem:BLK (subreg:P (match_operand:<DBL> 3 "register_operand" "1") 0)))
-    (use (match_dup 2))
-    (use (match_dup 3))
-    (clobber (reg:CC CC_REGNUM))]
-   "TARGET_64BIT || !TARGET_ZARCH"
-   "mvcle\t%0,%1,0\;jo\t.-4"
-   [(set_attr "length" "8")
-    (set_attr "type" "vs")])
- 
- (define_insn "*cpymem_long_31z"
    [(clobber (match_operand:TI 0 "register_operand" "=d"))
     (clobber (match_operand:TI 1 "register_operand" "=d"))
!    (set (mem:BLK (subreg:SI (match_operand:TI 2 "register_operand" "0") 4))
!         (mem:BLK (subreg:SI (match_operand:TI 3 "register_operand" "1") 4)))
     (use (match_dup 2))
     (use (match_dup 3))
     (clobber (reg:CC CC_REGNUM))]
!   "!TARGET_64BIT && TARGET_ZARCH"
    "mvcle\t%0,%1,0\;jo\t.-4"
    [(set_attr "length" "8")
     (set_attr "type" "vs")])
--- 3421,3434 ----
  })
  
  (define_insn "*cpymem_long"
    [(clobber (match_operand:TI 0 "register_operand" "=d"))
     (clobber (match_operand:TI 1 "register_operand" "=d"))
!    (set (mem:BLK (subreg:DI (match_operand:TI 2 "register_operand" "0") 0))
!         (mem:BLK (subreg:DI (match_operand:TI 3 "register_operand" "1") 0)))
     (use (match_dup 2))
     (use (match_dup 3))
     (clobber (reg:CC CC_REGNUM))]
!   ""
    "mvcle\t%0,%1,0\;jo\t.-4"
    [(set_attr "length" "8")
     (set_attr "type" "vs")])
***************
*** 3806,3812 ****
  (define_expand "movmem<mode>"
    [(set (match_operand:BLK 0 "memory_operand")   ; destination
          (match_operand:BLK 1 "memory_operand"))  ; source
!    (use (match_operand:GPR 2 "general_operand")) ; size
     (match_operand 3 "")  ; align
     (match_operand 4 "")  ; expected align
     (match_operand 5 "")  ; expected size
--- 3436,3442 ----
  (define_expand "movmem<mode>"
    [(set (match_operand:BLK 0 "memory_operand")   ; destination
          (match_operand:BLK 1 "memory_operand"))  ; source
!    (use (match_operand:DSI 2 "general_operand")) ; size
     (match_operand 3 "")  ; align
     (match_operand 4 "")  ; expected align
     (match_operand 5 "")  ; expected size
***************
*** 3872,3878 ****
  (define_expand "signbithf2"
    [(match_operand:SI 0 "register_operand")
     (match_operand:HF 1 "nonimmediate_operand")]
!   "TARGET_HARD_FLOAT && TARGET_Z10 && TARGET_64BIT"
  {
    if (TARGET_VX)
      {
--- 3502,3508 ----
  (define_expand "signbithf2"
    [(match_operand:SI 0 "register_operand")
     (match_operand:HF 1 "nonimmediate_operand")]
!   "TARGET_HARD_FLOAT && TARGET_Z10"
  {
    if (TARGET_VX)
      {
***************
*** 3894,3905 ****
     (match_operand:SIGNBIT_SINGLE 1 "nonimmediate_operand")]
    ""
  {
!   if (TARGET_VX && TARGET_64BIT)
      {
        emit_insn (gen_rtx_SET (operands[0], simplify_gen_subreg (SImode, operands[1], <MODE>mode, 0)));
        emit_insn (gen_rtx_SET (operands[0], gen_rtx_LSHIFTRT (SImode, operands[0], GEN_INT (31))));
      }
!   else if (TARGET_Z10 && TARGET_64BIT)
      emit_insn (gen_signbit<mode>2_z10 (operands[0], operands[1]));
    else
      emit_insn (gen_signbit_tdc<mode>2 (operands[0], force_reg (<MODE>mode, operands[1])));
--- 3524,3535 ----
     (match_operand:SIGNBIT_SINGLE 1 "nonimmediate_operand")]
    ""
  {
!   if (TARGET_VX)
      {
        emit_insn (gen_rtx_SET (operands[0], simplify_gen_subreg (SImode, operands[1], <MODE>mode, 0)));
        emit_insn (gen_rtx_SET (operands[0], gen_rtx_LSHIFTRT (SImode, operands[0], GEN_INT (31))));
      }
!   else if (TARGET_Z10)
      emit_insn (gen_signbit<mode>2_z10 (operands[0], operands[1]));
    else
      emit_insn (gen_signbit_tdc<mode>2 (operands[0], force_reg (<MODE>mode, operands[1])));
***************
*** 3914,3927 ****
    [(set (match_operand:SI 0 "register_operand" "=d")
  	(unspec:SI [(match_operand:SIGNBIT_HALF_SINGLE 1 "nonimmediate_operand" "fRT")]
  		   UNSPEC_SIGNBIT))]
!   "TARGET_Z10 && TARGET_64BIT"
    "#")
  
  (define_split
    [(set (match_operand:SI 0 "register_operand")
  	(unspec:SI [(match_operand:SIGNBIT_HALF_SINGLE 1 "register_operand")]
  		   UNSPEC_SIGNBIT))]
!   "TARGET_Z10 && TARGET_64BIT && reload_completed"
    [(set (match_dup 0) (match_dup 1))
     (set (match_dup 0) (lshiftrt:DI (match_dup 0) (const_int 63)))]
  {
--- 3544,3557 ----
    [(set (match_operand:SI 0 "register_operand" "=d")
  	(unspec:SI [(match_operand:SIGNBIT_HALF_SINGLE 1 "nonimmediate_operand" "fRT")]
  		   UNSPEC_SIGNBIT))]
!   "TARGET_Z10"
    "#")
  
  (define_split
    [(set (match_operand:SI 0 "register_operand")
  	(unspec:SI [(match_operand:SIGNBIT_HALF_SINGLE 1 "register_operand")]
  		   UNSPEC_SIGNBIT))]
!   "TARGET_Z10 && reload_completed"
    [(set (match_dup 0) (match_dup 1))
     (set (match_dup 0) (lshiftrt:DI (match_dup 0) (const_int 63)))]
  {
***************
*** 3933,3939 ****
    [(set (match_operand:SI 0 "register_operand")
  	(unspec:SI [(match_operand:SIGNBIT_HALF_SINGLE 1 "memory_operand")]
  		   UNSPEC_SIGNBIT))]
!   "TARGET_Z10 && TARGET_64BIT && reload_completed"
    [(set (match_dup 0) (match_dup 1))
     (set (match_dup 0) (lshiftrt:SI (match_dup 0) (const_int 31)))]
  {
--- 3563,3569 ----
    [(set (match_operand:SI 0 "register_operand")
  	(unspec:SI [(match_operand:SIGNBIT_HALF_SINGLE 1 "memory_operand")]
  		   UNSPEC_SIGNBIT))]
!   "TARGET_Z10 && reload_completed"
    [(set (match_dup 0) (match_dup 1))
     (set (match_dup 0) (lshiftrt:SI (match_dup 0) (const_int 31)))]
  {
***************
*** 3959,3965 ****
     (match_operand:SIGNBIT_DBL_TETRA 1 "nonimmediate_operand")]
    ""
  {
!   if (TARGET_Z10 && TARGET_64BIT)
      {
        rtx reg_di = gen_reg_rtx (DImode);
        if (<MODE>mode == TFmode || <MODE>mode == TDmode)
--- 3589,3595 ----
     (match_operand:SIGNBIT_DBL_TETRA 1 "nonimmediate_operand")]
    ""
  {
!   if (TARGET_Z10)
      {
        rtx reg_di = gen_reg_rtx (DImode);
        if (<MODE>mode == TFmode || <MODE>mode == TDmode)
***************
*** 4018,4024 ****
  (define_expand "setmem<mode>"
    [(set (match_operand:BLK 0 "memory_operand" "")   ; destination
          (match_operand:QI 2 "general_operand" ""))  ; value
!    (use (match_operand:GPR 1 "general_operand" "")) ; size
     (match_operand 3 "")  ; align
     (match_operand 4 "")  ; expected align
     (match_operand 5 "")  ; expected size
--- 3648,3654 ----
  (define_expand "setmem<mode>"
    [(set (match_operand:BLK 0 "memory_operand" "")   ; destination
          (match_operand:QI 2 "general_operand" ""))  ; value
!    (use (match_operand:DSI 1 "general_operand" "")) ; size
     (match_operand 3 "")  ; align
     (match_operand 4 "")  ; expected align
     (match_operand 5 "")  ; expected size
***************
*** 4046,4057 ****
          (const_int 0))
     (use (match_operand 1 "nonmemory_operand" "n,a,a,a"))
     (use (match_operand 2 "immediate_operand" "X,R,X,X"))
!    (clobber (match_scratch:P 3 "=X,X,X,&a"))
     (clobber (reg:CC CC_REGNUM))]
    "(GET_MODE (operands[1]) == Pmode || GET_MODE (operands[1]) == VOIDmode)"
    "#"
    [(set_attr "type" "cs")
!    (set_attr "cpu_facility" "*,*,z10,cpu_zarch")])
  
  (define_split
    [(set (match_operand:BLK 0 "memory_operand" "")
--- 3676,3687 ----
          (const_int 0))
     (use (match_operand 1 "nonmemory_operand" "n,a,a,a"))
     (use (match_operand 2 "immediate_operand" "X,R,X,X"))
!    (clobber (match_scratch:DI 3 "=X,X,X,&a"))
     (clobber (reg:CC CC_REGNUM))]
    "(GET_MODE (operands[1]) == Pmode || GET_MODE (operands[1]) == VOIDmode)"
    "#"
    [(set_attr "type" "cs")
!    (set_attr "cpu_facility" "*,*,z10,*")])
  
  (define_split
    [(set (match_operand:BLK 0 "memory_operand" "")
***************
*** 4118,4138 ****
  
  ; Initialize a block of arbitrary length with (operands[2] % 256).
  
! (define_expand "setmem_long_<P:mode>"
    [(parallel
      [(clobber (match_dup 1))
       (set (match_operand:BLK 0 "memory_operand" "")
! 	  (unspec:BLK [(match_operand:P 2 "setmem_operand" "")
! 		      (match_dup 4)] UNSPEC_REPLICATE_BYTE))
       (use (match_dup 3))
       (clobber (reg:CC CC_REGNUM))])]
    ""
  {
!   machine_mode sreg_mode = TARGET_ZARCH ? DImode : SImode;
!   machine_mode dreg_mode = TARGET_ZARCH ? TImode : DImode;
!   rtx reg0 = gen_reg_rtx (dreg_mode);
!   rtx reg1 = gen_reg_rtx (dreg_mode);
!   rtx addr0 = gen_lowpart (Pmode, gen_highpart (sreg_mode, reg0));
    rtx len0 = gen_lowpart (Pmode, reg0);
  
    emit_clobber (reg0);
--- 3748,3766 ----
  
  ; Initialize a block of arbitrary length with (operands[2] % 256).
  
! (define_expand "setmem_long_di"
    [(parallel
      [(clobber (match_dup 1))
       (set (match_operand:BLK 0 "memory_operand" "")
! 	  (unspec:BLK [(match_operand:DI 2 "setmem_operand" "")
! 		       (match_dup 4)] UNSPEC_REPLICATE_BYTE))
       (use (match_dup 3))
       (clobber (reg:CC CC_REGNUM))])]
    ""
  {
!   rtx reg0 = gen_reg_rtx (TImode);
!   rtx reg1 = gen_reg_rtx (TImode);
!   rtx addr0 = gen_lowpart (Pmode, gen_highpart (DImode, reg0));
    rtx len0 = gen_lowpart (Pmode, reg0);
  
    emit_clobber (reg0);
***************
*** 4147,4203 ****
    operands[4] = gen_lowpart (Pmode, operands[1]);
  })
  
- ; Patterns for 31 bit + Esa and 64 bit + Zarch.
- 
  (define_insn "*setmem_long"
-   [(clobber (match_operand:<DBL> 0 "register_operand" "=d"))
-    (set (mem:BLK (subreg:P (match_operand:<DBL> 3 "register_operand" "0") 0))
-         (unspec:BLK [(match_operand:P 2 "setmem_operand" "Y")
- 		     (subreg:P (match_dup 3) <modesize>)]
- 		     UNSPEC_REPLICATE_BYTE))
-    (use (match_operand:<DBL> 1 "register_operand" "d"))
-    (clobber (reg:CC CC_REGNUM))]
-   "TARGET_64BIT || !TARGET_ZARCH"
-   "mvcle\t%0,%1,%Y2\;jo\t.-4"
-   [(set_attr "length" "8")
-    (set_attr "type" "vs")])
- 
- (define_insn "*setmem_long_and"
-   [(clobber (match_operand:<DBL> 0 "register_operand" "=d"))
-    (set (mem:BLK (subreg:P (match_operand:<DBL> 3 "register_operand" "0") 0))
-         (unspec:BLK [(zero_extend:P (match_operand:QI 2 "setmem_operand" "Y"))
- 		    (subreg:P (match_dup 3) <modesize>)]
- 		    UNSPEC_REPLICATE_BYTE))
-    (use (match_operand:<DBL> 1 "register_operand" "d"))
-    (clobber (reg:CC CC_REGNUM))]
-   "(TARGET_64BIT || !TARGET_ZARCH)"
-   "mvcle\t%0,%1,%Y2\;jo\t.-4"
-   [(set_attr "length" "8")
-    (set_attr "type" "vs")])
- 
- ; Variants for 31 bit + Zarch, necessary because of the odd in-register offsets
- ; of the SImode subregs.
- 
- (define_insn "*setmem_long_31z"
    [(clobber (match_operand:TI 0 "register_operand" "=d"))
!    (set (mem:BLK (subreg:SI (match_operand:TI 3 "register_operand" "0") 4))
!         (unspec:BLK [(match_operand:SI 2 "setmem_operand" "Y")
! 		     (subreg:SI (match_dup 3) 12)] UNSPEC_REPLICATE_BYTE))
     (use (match_operand:TI 1 "register_operand" "d"))
     (clobber (reg:CC CC_REGNUM))]
!   "!TARGET_64BIT && TARGET_ZARCH"
    "mvcle\t%0,%1,%Y2\;jo\t.-4"
    [(set_attr "length" "8")
     (set_attr "type" "vs")])
  
! (define_insn "*setmem_long_and_31z"
    [(clobber (match_operand:TI 0 "register_operand" "=d"))
!    (set (mem:BLK (subreg:SI (match_operand:TI 3 "register_operand" "0") 4))
!         (unspec:BLK [(zero_extend:SI (match_operand:QI 2 "setmem_operand" "Y"))
! 		    (subreg:SI (match_dup 3) 12)] UNSPEC_REPLICATE_BYTE))
     (use (match_operand:TI 1 "register_operand" "d"))
     (clobber (reg:CC CC_REGNUM))]
!   "(!TARGET_64BIT && TARGET_ZARCH)"
    "mvcle\t%0,%1,%Y2\;jo\t.-4"
    [(set_attr "length" "8")
     (set_attr "type" "vs")])
--- 3775,3802 ----
    operands[4] = gen_lowpart (Pmode, operands[1]);
  })
  
  (define_insn "*setmem_long"
    [(clobber (match_operand:TI 0 "register_operand" "=d"))
!    (set (mem:BLK (subreg:DI (match_operand:TI 3 "register_operand" "0") 0))
!         (unspec:BLK [(match_operand:DI 2 "setmem_operand" "Y")
! 		     (subreg:DI (match_dup 3) <modesize>)]
! 		     UNSPEC_REPLICATE_BYTE))
     (use (match_operand:TI 1 "register_operand" "d"))
     (clobber (reg:CC CC_REGNUM))]
!   ""
    "mvcle\t%0,%1,%Y2\;jo\t.-4"
    [(set_attr "length" "8")
     (set_attr "type" "vs")])
  
! (define_insn "*setmem_long_and"
    [(clobber (match_operand:TI 0 "register_operand" "=d"))
!    (set (mem:BLK (subreg:DI (match_operand:TI 3 "register_operand" "0") 0))
!         (unspec:BLK [(zero_extend:DI (match_operand:QI 2 "setmem_operand" "Y"))
! 		     (subreg:DI (match_dup 3) <modesize>)]
! 		    UNSPEC_REPLICATE_BYTE))
     (use (match_operand:TI 1 "register_operand" "d"))
     (clobber (reg:CC CC_REGNUM))]
!   ""
    "mvcle\t%0,%1,%Y2\;jo\t.-4"
    [(set_attr "length" "8")
     (set_attr "type" "vs")])
***************
*** 4241,4251 ****
                       (match_operand:BLK 1 "memory_operand" "Q,Q,Q,Q")))
     (use (match_operand 2 "nonmemory_operand" "n,a,a,a"))
     (use (match_operand 3 "immediate_operand" "X,R,X,X"))
!    (clobber (match_scratch:P 4 "=X,X,X,&a"))]
    "(GET_MODE (operands[2]) == Pmode || GET_MODE (operands[2]) == VOIDmode)"
    "#"
    [(set_attr "type" "cs")
!    (set_attr "cpu_facility" "*,*,z10,cpu_zarch")])
  
  (define_split
    [(set (reg:CCU CC_REGNUM)
--- 3840,3850 ----
                       (match_operand:BLK 1 "memory_operand" "Q,Q,Q,Q")))
     (use (match_operand 2 "nonmemory_operand" "n,a,a,a"))
     (use (match_operand 3 "immediate_operand" "X,R,X,X"))
!    (clobber (match_scratch:DI 4 "=X,X,X,&a"))]
    "(GET_MODE (operands[2]) == Pmode || GET_MODE (operands[2]) == VOIDmode)"
    "#"
    [(set_attr "type" "cs")
!    (set_attr "cpu_facility" "*,*,z10,*")])
  
  (define_split
    [(set (reg:CCU CC_REGNUM)
***************
*** 4319,4330 ****
       (use (match_dup 3))])]
    ""
  {
!   machine_mode sreg_mode = TARGET_ZARCH ? DImode : SImode;
!   machine_mode dreg_mode = TARGET_ZARCH ? TImode : DImode;
!   rtx reg0 = gen_reg_rtx (dreg_mode);
!   rtx reg1 = gen_reg_rtx (dreg_mode);
!   rtx addr0 = gen_lowpart (Pmode, gen_highpart (sreg_mode, reg0));
!   rtx addr1 = gen_lowpart (Pmode, gen_highpart (sreg_mode, reg1));
    rtx len0 = gen_lowpart (Pmode, reg0);
    rtx len1 = gen_lowpart (Pmode, reg1);
  
--- 3918,3927 ----
       (use (match_dup 3))])]
    ""
  {
!   rtx reg0 = gen_reg_rtx (TImode);
!   rtx reg1 = gen_reg_rtx (TImode);
!   rtx addr0 = gen_lowpart (Pmode, gen_highpart (DImode, reg0));
!   rtx addr1 = gen_lowpart (Pmode, gen_highpart (DImode, reg1));
    rtx len0 = gen_lowpart (Pmode, reg0);
    rtx len1 = gen_lowpart (Pmode, reg1);
  
***************
*** 4343,4373 ****
  })
  
  (define_insn "*cmpmem_long"
-   [(clobber (match_operand:<DBL> 0 "register_operand" "=d"))
-    (clobber (match_operand:<DBL> 1 "register_operand" "=d"))
-    (set (reg:CCU CC_REGNUM)
-         (compare:CCU (mem:BLK (subreg:P (match_operand:<DBL> 2 "register_operand" "0") 0))
-                      (mem:BLK (subreg:P (match_operand:<DBL> 3 "register_operand" "1") 0))))
-    (use (match_dup 2))
-    (use (match_dup 3))]
-   "TARGET_64BIT || !TARGET_ZARCH"
-   "clcle\t%0,%1,0\;jo\t.-4"
-   [(set_attr "length" "8")
-    (set_attr "type" "vs")])
- 
- (define_insn "*cmpmem_long_31z"
    [(clobber (match_operand:TI 0 "register_operand" "=d"))
     (clobber (match_operand:TI 1 "register_operand" "=d"))
     (set (reg:CCU CC_REGNUM)
!         (compare:CCU (mem:BLK (subreg:SI (match_operand:TI 2 "register_operand" "0") 4))
!                      (mem:BLK (subreg:SI (match_operand:TI 3 "register_operand" "1") 4))))
     (use (match_dup 2))
     (use (match_dup 3))]
!   "!TARGET_64BIT && TARGET_ZARCH"
    "clcle\t%0,%1,0\;jo\t.-4"
!   [(set_attr "op_type" "NN")
!    (set_attr "type"    "vs")
!    (set_attr "length"  "8")])
  
  ; Convert CCUmode condition code to integer.
  ; Result is zero if EQ, positive if LTU, negative if GTU.
--- 3940,3956 ----
  })
  
  (define_insn "*cmpmem_long"
    [(clobber (match_operand:TI 0 "register_operand" "=d"))
     (clobber (match_operand:TI 1 "register_operand" "=d"))
     (set (reg:CCU CC_REGNUM)
!         (compare:CCU (mem:BLK (subreg:DI (match_operand:TI 2 "register_operand" "0") 0))
!                      (mem:BLK (subreg:DI (match_operand:TI 3 "register_operand" "1") 0))))
     (use (match_dup 2))
     (use (match_dup 3))]
!   ""
    "clcle\t%0,%1,0\;jo\t.-4"
!   [(set_attr "length" "8")
!    (set_attr "type" "vs")])
  
  ; Convert CCUmode condition code to integer.
  ; Result is zero if EQ, positive if LTU, negative if GTU.
***************
*** 4410,4416 ****
          (sign_extend:DI (unspec:SI [(match_operand:CCU 1 "register_operand" "0")]
                                     UNSPEC_STRCMPCC_TO_INT)))
     (clobber (reg:CC CC_REGNUM))]
!   "TARGET_ZARCH"
    "#"
    "&& reload_completed"
    [(set (match_dup 0) (ashift:DI (match_dup 0) (const_int 34)))
--- 3993,3999 ----
          (sign_extend:DI (unspec:SI [(match_operand:CCU 1 "register_operand" "0")]
                                     UNSPEC_STRCMPCC_TO_INT)))
     (clobber (reg:CC CC_REGNUM))]
!   ""
    "#"
    "&& reload_completed"
    [(set (match_dup 0) (ashift:DI (match_dup 0) (const_int 34)))
***************
*** 4427,4433 ****
                   (const_int 0)))
     (set (match_operand:DI 0 "register_operand" "=d")
          (sign_extend:DI (unspec:SI [(match_dup 1)] UNSPEC_STRCMPCC_TO_INT)))]
!   "s390_match_ccmode (insn, CCSmode) && TARGET_ZARCH"
    "#"
    "&& reload_completed"
    [(set (match_dup 0) (ashift:DI (match_dup 0) (const_int 34)))
--- 4010,4016 ----
                   (const_int 0)))
     (set (match_operand:DI 0 "register_operand" "=d")
          (sign_extend:DI (unspec:SI [(match_dup 1)] UNSPEC_STRCMPCC_TO_INT)))]
!   "s390_match_ccmode (insn, CCSmode)"
    "#"
    "&& reload_completed"
    [(set (match_dup 0) (ashift:DI (match_dup 0) (const_int 34)))
***************
*** 4463,4486 ****
  	(unspec:DI [(match_operand:BLK 1 "s_operand" "S")
  		    (match_operand 2 "const_int_operand" "n")] UNSPEC_ICM))
     (clobber (reg:CC CC_REGNUM))]
!   "TARGET_ZARCH"
    "icmh\t%0,%2,%S1"
    [(set_attr "op_type" "RSY")
     (set_attr "z10prop" "z10_super")])
  
- (define_insn "*sethighpartdi_31"
-   [(set (match_operand:DI 0 "register_operand" "=d,d")
- 	(unspec:DI [(match_operand:BLK 1 "s_operand" "Q,S")
- 		    (match_operand 2 "const_int_operand" "n,n")] UNSPEC_ICM))
-    (clobber (reg:CC CC_REGNUM))]
-   "!TARGET_ZARCH"
-   "@
-    icm\t%0,%2,%S1
-    icmy\t%0,%2,%S1"
-   [(set_attr "op_type" "RS,RSY")
-    (set_attr "cpu_facility" "*,longdisp")
-    (set_attr "z10prop" "z10_super_E1,z10_super_E1")])
- 
  ;
  ; extv instruction patterns
  ;
--- 4046,4056 ----
  	(unspec:DI [(match_operand:BLK 1 "s_operand" "S")
  		    (match_operand 2 "const_int_operand" "n")] UNSPEC_ICM))
     (clobber (reg:CC CC_REGNUM))]
!   ""
    "icmh\t%0,%2,%S1"
    [(set_attr "op_type" "RSY")
     (set_attr "z10prop" "z10_super")])
  
  ;
  ; extv instruction patterns
  ;
***************
*** 4513,4521 ****
  })
  
  (define_insn "*extzv<mode><clobbercc_or_nocc>"
!   [(set (match_operand:GPR 0 "register_operand" "=d")
!       (zero_extract:GPR
!         (match_operand:GPR 1 "register_operand" "d")
          (match_operand 2 "const_int_operand" "")   ; size
          (match_operand 3 "const_int_operand" ""))) ; start
    ]
--- 4083,4091 ----
  })
  
  (define_insn "*extzv<mode><clobbercc_or_nocc>"
!   [(set (match_operand:DSI 0 "register_operand" "=d")
!       (zero_extract:DSI
!         (match_operand:DSI 1 "register_operand" "d")
          (match_operand 2 "const_int_operand" "")   ; size
          (match_operand 3 "const_int_operand" ""))) ; start
    ]
***************
*** 4609,4616 ****
     (set_attr "z10prop" "z10_super_E1")])
  
  (define_insn_and_split "*pre_z10_extzv<mode>"
!   [(set (match_operand:GPR 0 "register_operand" "=d")
! 	(zero_extract:GPR (match_operand:QI 1 "s_operand" "S")
  		          (match_operand 2 "nonzero_shift_count_operand" "")
  		          (const_int 0)))
     (clobber (reg:CC CC_REGNUM))]
--- 4179,4186 ----
     (set_attr "z10prop" "z10_super_E1")])
  
  (define_insn_and_split "*pre_z10_extzv<mode>"
!   [(set (match_operand:DSI 0 "register_operand" "=d")
! 	(zero_extract:DSI (match_operand:QI 1 "s_operand" "S")
  		          (match_operand 2 "nonzero_shift_count_operand" "")
  		          (const_int 0)))
     (clobber (reg:CC CC_REGNUM))]
***************
*** 4618,4626 ****
    "#"
    "&& reload_completed"
    [(parallel
!     [(set (match_dup 0) (unspec:GPR [(match_dup 1) (match_dup 3)] UNSPEC_ICM))
       (clobber (reg:CC CC_REGNUM))])
!    (set (match_dup 0) (lshiftrt:GPR (match_dup 0) (match_dup 2)))]
  {
    int bitsize = INTVAL (operands[2]);
    int size = (bitsize - 1) / BITS_PER_UNIT + 1; /* round up */
--- 4188,4196 ----
    "#"
    "&& reload_completed"
    [(parallel
!     [(set (match_dup 0) (unspec:DSI [(match_dup 1) (match_dup 3)] UNSPEC_ICM))
       (clobber (reg:CC CC_REGNUM))])
!    (set (match_dup 0) (lshiftrt:DSI (match_dup 0) (match_dup 2)))]
  {
    int bitsize = INTVAL (operands[2]);
    int size = (bitsize - 1) / BITS_PER_UNIT + 1; /* round up */
***************
*** 4629,4641 ****
  
    operands[1] = adjust_address (operands[1], BLKmode, 0);
    set_mem_size (operands[1], size);
!   operands[2] = GEN_INT (<GPR:bitsize> - bitsize);
    operands[3] = GEN_INT (mask);
  })
  
  (define_insn_and_split "*pre_z10_extv<mode>"
!   [(set (match_operand:GPR 0 "register_operand" "=d")
! 	(sign_extract:GPR (match_operand:QI 1 "s_operand" "S")
  		          (match_operand 2 "nonzero_shift_count_operand" "")
  		          (const_int 0)))
     (clobber (reg:CC CC_REGNUM))]
--- 4199,4211 ----
  
    operands[1] = adjust_address (operands[1], BLKmode, 0);
    set_mem_size (operands[1], size);
!   operands[2] = GEN_INT (<DSI:bitsize> - bitsize);
    operands[3] = GEN_INT (mask);
  })
  
  (define_insn_and_split "*pre_z10_extv<mode>"
!   [(set (match_operand:DSI 0 "register_operand" "=d")
! 	(sign_extract:DSI (match_operand:QI 1 "s_operand" "S")
  		          (match_operand 2 "nonzero_shift_count_operand" "")
  		          (const_int 0)))
     (clobber (reg:CC CC_REGNUM))]
***************
*** 4643,4652 ****
    "#"
    "&& reload_completed"
    [(parallel
!     [(set (match_dup 0) (unspec:GPR [(match_dup 1) (match_dup 3)] UNSPEC_ICM))
       (clobber (reg:CC CC_REGNUM))])
     (parallel
!     [(set (match_dup 0) (ashiftrt:GPR (match_dup 0) (match_dup 2)))
       (clobber (reg:CC CC_REGNUM))])]
  {
    int bitsize = INTVAL (operands[2]);
--- 4213,4222 ----
    "#"
    "&& reload_completed"
    [(parallel
!     [(set (match_dup 0) (unspec:DSI [(match_dup 1) (match_dup 3)] UNSPEC_ICM))
       (clobber (reg:CC CC_REGNUM))])
     (parallel
!     [(set (match_dup 0) (ashiftrt:DSI (match_dup 0) (match_dup 2)))
       (clobber (reg:CC CC_REGNUM))])]
  {
    int bitsize = INTVAL (operands[2]);
***************
*** 4656,4662 ****
  
    operands[1] = adjust_address (operands[1], BLKmode, 0);
    set_mem_size (operands[1], size);
!   operands[2] = GEN_INT (<GPR:bitsize> - bitsize);
    operands[3] = GEN_INT (mask);
  })
  
--- 4226,4232 ----
  
    operands[1] = adjust_address (operands[1], BLKmode, 0);
    set_mem_size (operands[1], size);
!   operands[2] = GEN_INT (<DSI:bitsize> - bitsize);
    operands[3] = GEN_INT (mask);
  })
  
***************
*** 4681,4690 ****
  ; the location operand isn't word mode.  However, we do this in the
  ; back-end when generating atomic operations. See s390_two_part_insv.
  (define_insn "*insv<mode><clobbercc_or_nocc>"
!   [(set (zero_extract:GPR (match_operand:GPR 0 "nonimmediate_operand" "+d")
  			  (match_operand 1 "const_int_operand"    "I")  ; size
  			  (match_operand 2 "const_int_operand"    "I")) ; pos
! 	(match_operand:GPR 3 "nonimmediate_operand" "d"))]
    "<z10_or_zEC12_cond>
     && EXTRACT_ARGS_IN_RANGE (INTVAL (operands[1]), INTVAL (operands[2]),
  			     GET_MODE_BITSIZE (<MODE>mode))
--- 4251,4260 ----
  ; the location operand isn't word mode.  However, we do this in the
  ; back-end when generating atomic operations. See s390_two_part_insv.
  (define_insn "*insv<mode><clobbercc_or_nocc>"
!   [(set (zero_extract:DSI (match_operand:DSI 0 "nonimmediate_operand" "+d")
  			  (match_operand 1 "const_int_operand"    "I")  ; size
  			  (match_operand 2 "const_int_operand"    "I")) ; pos
! 	(match_operand:DSI 3 "nonimmediate_operand" "d"))]
    "<z10_or_zEC12_cond>
     && EXTRACT_ARGS_IN_RANGE (INTVAL (operands[1]), INTVAL (operands[2]),
  			     GET_MODE_BITSIZE (<MODE>mode))
***************
*** 4696,4706 ****
  ; and op1 with a mask being 1 for the selected bits and 0 for the rest
  ; and op3=op0 with a mask being 0 for the selected bits and 1 for the rest
  (define_insn "*insv<mode><clobbercc_or_nocc>_noshift"
!   [(set (match_operand:GPR 0 "nonimmediate_operand" "=d,d")
! 	(ior:GPR (and:GPR (match_operand:GPR 1 "nonimmediate_operand" "d,0")
! 			  (match_operand:GPR 2 "contiguous_bitmask_operand" ""))
! 		 (and:GPR (match_operand:GPR 3 "nonimmediate_operand" "0,d")
! 			  (match_operand:GPR 4 "const_int_operand" ""))))]
    "<z10_or_zEC12_cond> && INTVAL (operands[2]) == ~INTVAL (operands[4])"
    "@
     <risbg_n>\t%0,%1,%<bfstart>2,%<bfend>2,0
--- 4266,4276 ----
  ; and op1 with a mask being 1 for the selected bits and 0 for the rest
  ; and op3=op0 with a mask being 0 for the selected bits and 1 for the rest
  (define_insn "*insv<mode><clobbercc_or_nocc>_noshift"
!   [(set (match_operand:DSI 0 "nonimmediate_operand" "=d,d")
! 	(ior:DSI (and:DSI (match_operand:DSI 1 "nonimmediate_operand" "d,0")
! 			  (match_operand:DSI 2 "contiguous_bitmask_operand" ""))
! 		 (and:DSI (match_operand:DSI 3 "nonimmediate_operand" "0,d")
! 			  (match_operand:DSI 4 "const_int_operand" ""))))]
    "<z10_or_zEC12_cond> && INTVAL (operands[2]) == ~INTVAL (operands[4])"
    "@
     <risbg_n>\t%0,%1,%<bfstart>2,%<bfend>2,0
***************
*** 4750,4760 ****
  ; Implement appending Y on the left of S bits of X
  ; x = (y << s) | (x & ((1 << s) - 1))
  (define_insn "*insv<mode><clobbercc_or_nocc>_appendbitsleft"
!   [(set (match_operand:GPR 0 "nonimmediate_operand" "=d")
! 	(ior:GPR (and:GPR (match_operand:GPR 1 "nonimmediate_operand" "0")
! 			  (match_operand:GPR 2 "immediate_operand" ""))
! 		 (ashift:GPR (match_operand:GPR 3 "nonimmediate_operand" "d")
! 			     (match_operand:GPR 4 "nonzero_shift_count_operand" ""))))]
    "<z10_or_zEC12_cond>
     && UINTVAL (operands[2]) == (HOST_WIDE_INT_1U << UINTVAL (operands[4])) - 1"
    "<risbg_n>\t%0,%3,<bitoff>,64-%4-1,%4"
--- 4320,4330 ----
  ; Implement appending Y on the left of S bits of X
  ; x = (y << s) | (x & ((1 << s) - 1))
  (define_insn "*insv<mode><clobbercc_or_nocc>_appendbitsleft"
!   [(set (match_operand:DSI 0 "nonimmediate_operand" "=d")
! 	(ior:DSI (and:DSI (match_operand:DSI 1 "nonimmediate_operand" "0")
! 			  (match_operand:DSI 2 "immediate_operand" ""))
! 		 (ashift:DSI (match_operand:DSI 3 "nonimmediate_operand" "d")
! 			     (match_operand:DSI 4 "nonzero_shift_count_operand" ""))))]
    "<z10_or_zEC12_cond>
     && UINTVAL (operands[2]) == (HOST_WIDE_INT_1U << UINTVAL (operands[4])) - 1"
    "<risbg_n>\t%0,%3,<bitoff>,64-%4-1,%4"
***************
*** 4763,4775 ****
  
  ; a = ((i32)a & -16777216) | (((ui32)b) >> 8)
  (define_insn "*<risbg_n>_<mode>_ior_and_lshiftrt"
!   [(set (match_operand:GPR 0 "register_operand" "=d")
! 	(ior:GPR (and:GPR
! 		  (match_operand:GPR 1 "register_operand" "0")
! 		  (match_operand:GPR 2 "const_int_operand" ""))
! 		 (lshiftrt:GPR
! 		  (match_operand:GPR 3 "register_operand" "d")
! 		  (match_operand:GPR 4 "nonzero_shift_count_operand" ""))))]
    "<z10_or_zEC12_cond> && UINTVAL (operands[2])
     == (HOST_WIDE_INT_M1U
         << (GET_MODE_BITSIZE (<MODE>mode) - UINTVAL (operands[4])))"
--- 4333,4345 ----
  
  ; a = ((i32)a & -16777216) | (((ui32)b) >> 8)
  (define_insn "*<risbg_n>_<mode>_ior_and_lshiftrt"
!   [(set (match_operand:DSI 0 "register_operand" "=d")
! 	(ior:DSI (and:DSI
! 		  (match_operand:DSI 1 "register_operand" "0")
! 		  (match_operand:DSI 2 "const_int_operand" ""))
! 		 (lshiftrt:DSI
! 		  (match_operand:DSI 3 "register_operand" "d")
! 		  (match_operand:DSI 4 "nonzero_shift_count_operand" ""))))]
    "<z10_or_zEC12_cond> && UINTVAL (operands[2])
     == (HOST_WIDE_INT_M1U
         << (GET_MODE_BITSIZE (<MODE>mode) - UINTVAL (operands[4])))"
***************
*** 4825,4841 ****
  ;  -> z = y >> d; z = risbg;
  
  (define_split
!   [(set (match_operand:GPR 0 "nonimmediate_operand" "")
! 	(ior:GPR (lshiftrt:GPR (match_operand:GPR 1 "nonimmediate_operand" "")
! 			       (match_operand:GPR 2 "nonzero_shift_count_operand" ""))
! 		 (ashift:GPR (match_operand:GPR 3 "nonimmediate_operand" "")
! 			     (match_operand:GPR 4 "nonzero_shift_count_operand" ""))))]
    "TARGET_ZEC12 && UINTVAL (operands[2]) + UINTVAL (operands[4]) >= <bitsize>"
    [(set (match_dup 6)
! 	(lshiftrt:GPR (match_dup 1) (match_dup 2)))
     (set (match_dup 0)
! 	(ior:GPR (and:GPR (match_dup 6) (match_dup 5))
! 		 (ashift:GPR (match_dup 3) (match_dup 4))))]
  {
    operands[5] = GEN_INT ((HOST_WIDE_INT_1U << UINTVAL (operands[4])) - 1);
    if (reg_overlap_mentioned_p (operands[0], operands[3]))
--- 4395,4411 ----
  ;  -> z = y >> d; z = risbg;
  
  (define_split
!   [(set (match_operand:DSI 0 "nonimmediate_operand" "")
! 	(ior:DSI (lshiftrt:DSI (match_operand:DSI 1 "nonimmediate_operand" "")
! 			       (match_operand:DSI 2 "nonzero_shift_count_operand" ""))
! 		 (ashift:DSI (match_operand:DSI 3 "nonimmediate_operand" "")
! 			     (match_operand:DSI 4 "nonzero_shift_count_operand" ""))))]
    "TARGET_ZEC12 && UINTVAL (operands[2]) + UINTVAL (operands[4]) >= <bitsize>"
    [(set (match_dup 6)
! 	(lshiftrt:DSI (match_dup 1) (match_dup 2)))
     (set (match_dup 0)
! 	(ior:DSI (and:DSI (match_dup 6) (match_dup 5))
! 		 (ashift:DSI (match_dup 3) (match_dup 4))))]
  {
    operands[5] = GEN_INT ((HOST_WIDE_INT_1U << UINTVAL (operands[4])) - 1);
    if (reg_overlap_mentioned_p (operands[0], operands[3]))
***************
*** 4850,4868 ****
  
  (define_split
    [(parallel
!     [(set (match_operand:GPR 0 "nonimmediate_operand" "")
! 	  (ior:GPR (lshiftrt:GPR (match_operand:GPR 1 "nonimmediate_operand" "")
! 				 (match_operand:GPR 2 "nonzero_shift_count_operand" ""))
! 		   (ashift:GPR (match_operand:GPR 3 "nonimmediate_operand" "")
! 			       (match_operand:GPR 4 "nonzero_shift_count_operand" ""))))
       (clobber (reg:CC CC_REGNUM))])]
    "TARGET_Z10 && !TARGET_ZEC12 && UINTVAL (operands[2]) + UINTVAL (operands[4]) >= <bitsize>"
    [(set (match_dup 6)
! 	(lshiftrt:GPR (match_dup 1) (match_dup 2)))
     (parallel
      [(set (match_dup 0)
! 	  (ior:GPR (and:GPR (match_dup 6) (match_dup 5))
! 		   (ashift:GPR (match_dup 3) (match_dup 4))))
       (clobber (reg:CC CC_REGNUM))])]
  {
    operands[5] = GEN_INT ((HOST_WIDE_INT_1U << UINTVAL (operands[4])) - 1);
--- 4420,4438 ----
  
  (define_split
    [(parallel
!     [(set (match_operand:DSI 0 "nonimmediate_operand" "")
! 	  (ior:DSI (lshiftrt:DSI (match_operand:DSI 1 "nonimmediate_operand" "")
! 				 (match_operand:DSI 2 "nonzero_shift_count_operand" ""))
! 		   (ashift:DSI (match_operand:DSI 3 "nonimmediate_operand" "")
! 			       (match_operand:DSI 4 "nonzero_shift_count_operand" ""))))
       (clobber (reg:CC CC_REGNUM))])]
    "TARGET_Z10 && !TARGET_ZEC12 && UINTVAL (operands[2]) + UINTVAL (operands[4]) >= <bitsize>"
    [(set (match_dup 6)
! 	(lshiftrt:DSI (match_dup 1) (match_dup 2)))
     (parallel
      [(set (match_dup 0)
! 	  (ior:DSI (and:DSI (match_dup 6) (match_dup 5))
! 		   (ashift:DSI (match_dup 3) (match_dup 4))))
       (clobber (reg:CC CC_REGNUM))])]
  {
    operands[5] = GEN_INT ((HOST_WIDE_INT_1U << UINTVAL (operands[4])) - 1);
***************
*** 4878,4888 ****
  
  ; rosbg, rxsbg
  (define_insn "*r<noxa>sbg_<mode>_noshift"
!   [(set (match_operand:GPR 0 "nonimmediate_operand" "=d")
! 	(IXOR:GPR
! 	  (and:GPR (match_operand:GPR 1 "nonimmediate_operand" "d")
!                    (match_operand:GPR 2 "contiguous_bitmask_operand" ""))
! 	  (match_operand:GPR 3 "nonimmediate_operand" "0")))
     (clobber (reg:CC CC_REGNUM))]
    "TARGET_Z10"
    "r<noxa>sbg\t%0,%1,%<bfstart>2,%<bfend>2,0"
--- 4448,4458 ----
  
  ; rosbg, rxsbg
  (define_insn "*r<noxa>sbg_<mode>_noshift"
!   [(set (match_operand:DSI 0 "nonimmediate_operand" "=d")
! 	(IXOR:DSI
! 	  (and:DSI (match_operand:DSI 1 "nonimmediate_operand" "d")
!                    (match_operand:DSI 2 "contiguous_bitmask_operand" ""))
! 	  (match_operand:DSI 3 "nonimmediate_operand" "0")))
     (clobber (reg:CC CC_REGNUM))]
    "TARGET_Z10"
    "r<noxa>sbg\t%0,%1,%<bfstart>2,%<bfend>2,0"
***************
*** 4905,4918 ****
  
  ; rosbg, rxsbg
  (define_insn "*r<noxa>sbg_<mode>_srl_bitmask"
!   [(set (match_operand:GPR 0 "nonimmediate_operand" "=d")
! 	(IXOR:GPR
! 	  (and:GPR
! 	    (lshiftrt:GPR
!               (match_operand:GPR 1 "nonimmediate_operand" "d")
!               (match_operand:GPR 3 "nonzero_shift_count_operand" ""))
!             (match_operand:GPR 2 "contiguous_bitmask_nowrap_operand" ""))
! 	  (match_operand:GPR 4 "nonimmediate_operand" "0")))
     (clobber (reg:CC CC_REGNUM))]
    "TARGET_Z10
     && s390_extzv_shift_ok (<bitsize>, 64 - INTVAL (operands[3]),
--- 4475,4488 ----
  
  ; rosbg, rxsbg
  (define_insn "*r<noxa>sbg_<mode>_srl_bitmask"
!   [(set (match_operand:DSI 0 "nonimmediate_operand" "=d")
! 	(IXOR:DSI
! 	  (and:DSI
! 	    (lshiftrt:DSI
!               (match_operand:DSI 1 "nonimmediate_operand" "d")
!               (match_operand:DSI 3 "nonzero_shift_count_operand" ""))
!             (match_operand:DSI 2 "contiguous_bitmask_nowrap_operand" ""))
! 	  (match_operand:DSI 4 "nonimmediate_operand" "0")))
     (clobber (reg:CC CC_REGNUM))]
    "TARGET_Z10
     && s390_extzv_shift_ok (<bitsize>, 64 - INTVAL (operands[3]),
***************
*** 4925,4938 ****
  
  ; rosbg, rxsbg
  (define_insn "*r<noxa>sbg_<mode>_sll_bitmask"
!   [(set (match_operand:GPR 0 "nonimmediate_operand" "=d")
! 	(IXOR:GPR
! 	  (and:GPR
! 	    (ashift:GPR
!               (match_operand:GPR 1 "nonimmediate_operand" "d")
!               (match_operand:GPR 3 "nonzero_shift_count_operand" ""))
!             (match_operand:GPR 2 "contiguous_bitmask_nowrap_operand" ""))
! 	  (match_operand:GPR 4 "nonimmediate_operand" "0")))
     (clobber (reg:CC CC_REGNUM))]
    "TARGET_Z10
     && s390_extzv_shift_ok (<bitsize>, INTVAL (operands[3]),
--- 4495,4508 ----
  
  ; rosbg, rxsbg
  (define_insn "*r<noxa>sbg_<mode>_sll_bitmask"
!   [(set (match_operand:DSI 0 "nonimmediate_operand" "=d")
! 	(IXOR:DSI
! 	  (and:DSI
! 	    (ashift:DSI
!               (match_operand:DSI 1 "nonimmediate_operand" "d")
!               (match_operand:DSI 3 "nonzero_shift_count_operand" ""))
!             (match_operand:DSI 2 "contiguous_bitmask_nowrap_operand" ""))
! 	  (match_operand:DSI 4 "nonimmediate_operand" "0")))
     (clobber (reg:CC CC_REGNUM))]
    "TARGET_Z10
     && s390_extzv_shift_ok (<bitsize>, INTVAL (operands[3]),
***************
*** 4945,4956 ****
  ;; a = a ^ (b << const_int)
  ; rosbg, rxsbg
  (define_insn "*r<noxa>sbg_<mode>_sll"
!   [(set (match_operand:GPR 0 "nonimmediate_operand" "=d")
! 	(IXOR:GPR
! 	  (ashift:GPR
!             (match_operand:GPR 1 "nonimmediate_operand" "d")
!             (match_operand:GPR 2 "nonzero_shift_count_operand" ""))
! 	  (match_operand:GPR 3 "nonimmediate_operand" "0")))
     (clobber (reg:CC CC_REGNUM))]
    "TARGET_Z10"
    {
--- 4515,4526 ----
  ;; a = a ^ (b << const_int)
  ; rosbg, rxsbg
  (define_insn "*r<noxa>sbg_<mode>_sll"
!   [(set (match_operand:DSI 0 "nonimmediate_operand" "=d")
! 	(IXOR:DSI
! 	  (ashift:DSI
!             (match_operand:DSI 1 "nonimmediate_operand" "d")
!             (match_operand:DSI 2 "nonzero_shift_count_operand" ""))
! 	  (match_operand:DSI 3 "nonimmediate_operand" "0")))
     (clobber (reg:CC CC_REGNUM))]
    "TARGET_Z10"
    {
***************
*** 4964,4975 ****
  ;; a = a ^ (b >> const_int)
  ; rosbg, rxsbg
  (define_insn "*r<noxa>sbg_<mode>_srl"
!   [(set (match_operand:GPR 0 "nonimmediate_operand" "=d")
! 	(IXOR:GPR
! 	  (lshiftrt:GPR
!             (match_operand:GPR 1 "nonimmediate_operand" "d")
!             (match_operand:GPR 2 "nonzero_shift_count_operand" ""))
! 	  (match_operand:GPR 3 "nonimmediate_operand" "0")))
     (clobber (reg:CC CC_REGNUM))]
    "TARGET_Z10"
    {
--- 4534,4545 ----
  ;; a = a ^ (b >> const_int)
  ; rosbg, rxsbg
  (define_insn "*r<noxa>sbg_<mode>_srl"
!   [(set (match_operand:DSI 0 "nonimmediate_operand" "=d")
! 	(IXOR:DSI
! 	  (lshiftrt:DSI
!             (match_operand:DSI 1 "nonimmediate_operand" "d")
!             (match_operand:DSI 2 "nonzero_shift_count_operand" ""))
! 	  (match_operand:DSI 3 "nonimmediate_operand" "0")))
     (clobber (reg:CC CC_REGNUM))]
    "TARGET_Z10"
    {
***************
*** 5055,5065 ****
    "rnsbg\t%0,%4,%2,%2+%1-1,%3"
    [(set_attr "op_type" "RIE")])
  
! (define_insn "*insv<mode>_mem_reg"
!   [(set (zero_extract:W (match_operand:QI 0 "memory_operand" "+Q,S")
! 			(match_operand 1 "const_int_operand" "n,n")
! 			(const_int 0))
! 	(match_operand:W 2 "register_operand" "d,d"))]
    "EXTRACT_ARGS_IN_RANGE (INTVAL (operands[1]), 0, 64)
     && INTVAL (operands[1]) > 0
     && INTVAL (operands[1]) <= GET_MODE_BITSIZE (SImode)
--- 4625,4635 ----
    "rnsbg\t%0,%4,%2,%2+%1-1,%3"
    [(set_attr "op_type" "RIE")])
  
! (define_insn "*insvdi_mem_reg"
!   [(set (zero_extract:DI (match_operand:QI 0 "memory_operand" "+Q,S")
! 			 (match_operand 1 "const_int_operand" "n,n")
! 			 (const_int 0))
! 	(match_operand:DI 2 "register_operand" "d,d"))]
    "EXTRACT_ARGS_IN_RANGE (INTVAL (operands[1]), 0, 64)
     && INTVAL (operands[1]) > 0
     && INTVAL (operands[1]) <= GET_MODE_BITSIZE (SImode)
***************
*** 5081,5088 ****
  			 (const_int 0))
  	(lshiftrt:DI (match_operand:DI 2 "register_operand" "d")
  		     (const_int 32)))]
!   "TARGET_ZARCH
!    && EXTRACT_ARGS_IN_RANGE (INTVAL (operands[1]), 0, 64)
     && INTVAL (operands[1]) > 0
     && INTVAL (operands[1]) <= GET_MODE_BITSIZE (SImode)
     && INTVAL (operands[1]) % BITS_PER_UNIT == 0"
--- 4651,4657 ----
  			 (const_int 0))
  	(lshiftrt:DI (match_operand:DI 2 "register_operand" "d")
  		     (const_int 32)))]
!   "EXTRACT_ARGS_IN_RANGE (INTVAL (operands[1]), 0, 64)
     && INTVAL (operands[1]) > 0
     && INTVAL (operands[1]) <= GET_MODE_BITSIZE (SImode)
     && INTVAL (operands[1]) % BITS_PER_UNIT == 0"
***************
*** 5100,5107 ****
  			 (const_int 16)
  			 (match_operand 1 "const_int_operand" "n"))
  	(match_operand:DI 2 "const_int_operand" "n"))]
!   "TARGET_ZARCH
!    && EXTRACT_ARGS_IN_RANGE (16, INTVAL (operands[1]), 64)
     && INTVAL (operands[1]) >= 0
     && INTVAL (operands[1]) < BITS_PER_WORD
     && INTVAL (operands[1]) % 16 == 0"
--- 4669,4675 ----
  			 (const_int 16)
  			 (match_operand 1 "const_int_operand" "n"))
  	(match_operand:DI 2 "const_int_operand" "n"))]
!   "EXTRACT_ARGS_IN_RANGE (16, INTVAL (operands[1]), 64)
     && INTVAL (operands[1]) >= 0
     && INTVAL (operands[1]) < BITS_PER_WORD
     && INTVAL (operands[1]) % 16 == 0"
***************
*** 5149,5155 ****
  	(unspec:DI [(match_operand:DI 1 "register_operand" "d")
  		    (match_operand:DI 2 "register_operand" "d")]
  		   UNSPEC_BDEPG))]
!   "TARGET_Z17 && TARGET_64BIT"
    "bdepg\t%0,%1,%2"
    [(set_attr "op_type" "RRF")])
  
--- 4717,4723 ----
  	(unspec:DI [(match_operand:DI 1 "register_operand" "d")
  		    (match_operand:DI 2 "register_operand" "d")]
  		   UNSPEC_BDEPG))]
!   "TARGET_Z17"
    "bdepg\t%0,%1,%2"
    [(set_attr "op_type" "RRF")])
  
***************
*** 5162,5168 ****
  	(unspec:DI [(match_operand:DI 1 "register_operand" "d")
  		    (match_operand:DI 2 "register_operand" "d")]
  		   UNSPEC_BEXTG))]
!   "TARGET_Z17 && TARGET_64BIT"
    "bextg\t%0,%1,%2"
    [(set_attr "op_type" "RRF")])
  
--- 4730,4736 ----
  	(unspec:DI [(match_operand:DI 1 "register_operand" "d")
  		    (match_operand:DI 2 "register_operand" "d")]
  		   UNSPEC_BEXTG))]
!   "TARGET_Z17"
    "bextg\t%0,%1,%2"
    [(set_attr "op_type" "RRF")])
  
***************
*** 5171,5195 ****
  ; extendsidi2 instruction pattern(s).
  ;
  
! (define_expand "extendsidi2"
!   [(set (match_operand:DI 0 "register_operand" "")
!         (sign_extend:DI (match_operand:SI 1 "nonimmediate_operand" "")))]
!   ""
! {
!   if (!TARGET_ZARCH)
!     {
!       emit_clobber (operands[0]);
!       emit_move_insn (gen_highpart (SImode, operands[0]), operands[1]);
!       emit_move_insn (gen_lowpart (SImode, operands[0]), const0_rtx);
!       emit_insn (gen_ashrdi3 (operands[0], operands[0], GEN_INT (32)));
!       DONE;
!     }
! })
! 
! (define_insn "*extendsidi2"
    [(set (match_operand:DI 0 "register_operand" "=d,d,d")
          (sign_extend:DI (match_operand:SI 1 "nonimmediate_operand" "d,T,b")))]
!   "TARGET_ZARCH"
    "@
     lgfr\t%0,%1
     lgf\t%0,%1
--- 4739,4748 ----
  ; extendsidi2 instruction pattern(s).
  ;
  
! (define_insn "extendsidi2"
    [(set (match_operand:DI 0 "register_operand" "=d,d,d")
          (sign_extend:DI (match_operand:SI 1 "nonimmediate_operand" "d,T,b")))]
!   ""
    "@
     lgfr\t%0,%1
     lgf\t%0,%1
***************
*** 5209,5222 ****
          (sign_extend:DSI (match_operand:HQI 1 "nonimmediate_operand" "")))]
    ""
  {
!   if (<DSI:MODE>mode == DImode && !TARGET_ZARCH)
!     {
!       rtx tmp = gen_reg_rtx (SImode);
!       emit_insn (gen_extend<HQI:mode>si2 (tmp, operands[1]));
!       emit_insn (gen_extendsidi2 (operands[0], tmp));
!       DONE;
!     }
!   else if (!TARGET_EXTIMM)
      {
        rtx bitcount = GEN_INT (<DSI:bitsize> - <HQI:bitsize>);
  
--- 4762,4768 ----
          (sign_extend:DSI (match_operand:HQI 1 "nonimmediate_operand" "")))]
    ""
  {
!   if (!TARGET_EXTIMM)
      {
        rtx bitcount = GEN_INT (<DSI:bitsize> - <HQI:bitsize>);
  
***************
*** 5234,5240 ****
  (define_insn "*extendhidi2_extimm"
    [(set (match_operand:DI 0 "register_operand" "=d,d,d")
          (sign_extend:DI (match_operand:HI 1 "general_operand" "d,T,b")))]
!   "TARGET_ZARCH && TARGET_EXTIMM"
    "@
     lghr\t%0,%1
     lgh\t%0,%1
--- 4780,4786 ----
  (define_insn "*extendhidi2_extimm"
    [(set (match_operand:DI 0 "register_operand" "=d,d,d")
          (sign_extend:DI (match_operand:HI 1 "general_operand" "d,T,b")))]
!   "TARGET_EXTIMM"
    "@
     lghr\t%0,%1
     lgh\t%0,%1
***************
*** 5248,5254 ****
  (define_insn "*extendhidi2"
    [(set (match_operand:DI 0 "register_operand" "=d")
          (sign_extend:DI (match_operand:HI 1 "memory_operand" "T")))]
!   "TARGET_ZARCH"
    "lgh\t%0,%1"
    [(set_attr "op_type" "RXY")
     (set_attr "z10prop" "z10_super_E1")])
--- 4794,4800 ----
  (define_insn "*extendhidi2"
    [(set (match_operand:DI 0 "register_operand" "=d")
          (sign_extend:DI (match_operand:HI 1 "memory_operand" "T")))]
!   ""
    "lgh\t%0,%1"
    [(set_attr "op_type" "RXY")
     (set_attr "z10prop" "z10_super_E1")])
***************
*** 5289,5296 ****
  
  ; lbr, lgbr, lb, lgb
  (define_insn "*extendqi<mode>2_extimm"
!   [(set (match_operand:GPR 0 "register_operand" "=d,d")
!         (sign_extend:GPR (match_operand:QI 1 "nonimmediate_operand" "d,T")))]
    "TARGET_EXTIMM"
    "@
     l<g>br\t%0,%1
--- 4835,4842 ----
  
  ; lbr, lgbr, lb, lgb
  (define_insn "*extendqi<mode>2_extimm"
!   [(set (match_operand:DSI 0 "register_operand" "=d,d")
!         (sign_extend:DSI (match_operand:QI 1 "nonimmediate_operand" "d,T")))]
    "TARGET_EXTIMM"
    "@
     l<g>br\t%0,%1
***************
*** 5300,5353 ****
  
  ; lb, lgb
  (define_insn "*extendqi<mode>2"
!   [(set (match_operand:GPR 0 "register_operand" "=d")
!         (sign_extend:GPR (match_operand:QI 1 "memory_operand" "T")))]
    "!TARGET_EXTIMM && TARGET_LONG_DISPLACEMENT"
    "l<g>b\t%0,%1"
    [(set_attr "op_type" "RXY")
     (set_attr "z10prop" "z10_super_E1")])
  
  (define_insn_and_split "*extendqi<mode>2_short_displ"
!   [(set (match_operand:GPR 0 "register_operand" "=d")
!         (sign_extend:GPR (match_operand:QI 1 "s_operand" "Q")))
     (clobber (reg:CC CC_REGNUM))]
    "!TARGET_EXTIMM && !TARGET_LONG_DISPLACEMENT"
    "#"
    "&& reload_completed"
    [(parallel
!     [(set (match_dup 0) (unspec:GPR [(match_dup 1) (const_int 8)] UNSPEC_ICM))
       (clobber (reg:CC CC_REGNUM))])
     (parallel
!     [(set (match_dup 0) (ashiftrt:GPR (match_dup 0) (match_dup 2)))
       (clobber (reg:CC CC_REGNUM))])]
  {
    operands[1] = adjust_address (operands[1], BLKmode, 0);
    set_mem_size (operands[1], GET_MODE_SIZE (QImode));
!   operands[2] = GEN_INT (<GPR:bitsize> - BITS_PER_UNIT);
  })
  
  ;
  ; zero_extendsidi2 instruction pattern(s).
  ;
  
! (define_expand "zero_extendsidi2"
!   [(set (match_operand:DI 0 "register_operand" "")
!         (zero_extend:DI (match_operand:SI 1 "nonimmediate_operand" "")))]
!   ""
! {
!   if (!TARGET_ZARCH)
!     {
!       emit_clobber (operands[0]);
!       emit_move_insn (gen_lowpart (SImode, operands[0]), operands[1]);
!       emit_move_insn (gen_highpart (SImode, operands[0]), const0_rtx);
!       DONE;
!     }
! })
! 
! (define_insn "*zero_extendsidi2"
    [(set (match_operand:DI 0 "register_operand" "=d,d,d,d")
          (zero_extend:DI (match_operand:SI 1 "nonimmediate_operand" "d,T,b,v")))]
!   "TARGET_ZARCH"
    "@
     llgfr\t%0,%1
     llgf\t%0,%1
--- 4846,4885 ----
  
  ; lb, lgb
  (define_insn "*extendqi<mode>2"
!   [(set (match_operand:DSI 0 "register_operand" "=d")
!         (sign_extend:DSI (match_operand:QI 1 "memory_operand" "T")))]
    "!TARGET_EXTIMM && TARGET_LONG_DISPLACEMENT"
    "l<g>b\t%0,%1"
    [(set_attr "op_type" "RXY")
     (set_attr "z10prop" "z10_super_E1")])
  
  (define_insn_and_split "*extendqi<mode>2_short_displ"
!   [(set (match_operand:DSI 0 "register_operand" "=d")
!         (sign_extend:DSI (match_operand:QI 1 "s_operand" "Q")))
     (clobber (reg:CC CC_REGNUM))]
    "!TARGET_EXTIMM && !TARGET_LONG_DISPLACEMENT"
    "#"
    "&& reload_completed"
    [(parallel
!     [(set (match_dup 0) (unspec:DSI [(match_dup 1) (const_int 8)] UNSPEC_ICM))
       (clobber (reg:CC CC_REGNUM))])
     (parallel
!     [(set (match_dup 0) (ashiftrt:DSI (match_dup 0) (match_dup 2)))
       (clobber (reg:CC CC_REGNUM))])]
  {
    operands[1] = adjust_address (operands[1], BLKmode, 0);
    set_mem_size (operands[1], GET_MODE_SIZE (QImode));
!   operands[2] = GEN_INT (<DSI:bitsize> - BITS_PER_UNIT);
  })
  
  ;
  ; zero_extendsidi2 instruction pattern(s).
  ;
  
! (define_insn "zero_extendsidi2"
    [(set (match_operand:DI 0 "register_operand" "=d,d,d,d")
          (zero_extend:DI (match_operand:SI 1 "nonimmediate_operand" "d,T,b,v")))]
!   ""
    "@
     llgfr\t%0,%1
     llgf\t%0,%1
***************
*** 5367,5373 ****
    [(set (match_operand:DI 0 "register_operand" "=d")
          (and:DI (subreg:DI (match_operand:SI 1 "memory_operand" "T") 0)
  		(const_int 2147483647)))]
!   "TARGET_ZARCH"
    "llgt\t%0,%1"
    [(set_attr "op_type"  "RXE")
     (set_attr "z10prop" "z10_super_E1")])
--- 4899,4905 ----
    [(set (match_operand:DI 0 "register_operand" "=d")
          (and:DI (subreg:DI (match_operand:SI 1 "memory_operand" "T") 0)
  		(const_int 2147483647)))]
!   ""
    "llgt\t%0,%1"
    [(set_attr "op_type"  "RXE")
     (set_attr "z10prop" "z10_super_E1")])
***************
*** 5377,5383 ****
          (and:DI (subreg:DI (match_operand:SI 1 "memory_operand" "T") 0)
  		(const_int 2147483647)))
     (clobber (reg:CC CC_REGNUM))]
!   "TARGET_ZARCH"
    "#"
    "&& reload_completed"
    [(set (match_dup 0)
--- 4909,4915 ----
          (and:DI (subreg:DI (match_operand:SI 1 "memory_operand" "T") 0)
  		(const_int 2147483647)))
     (clobber (reg:CC CC_REGNUM))]
!   ""
    "#"
    "&& reload_completed"
    [(set (match_dup 0)
***************
*** 5389,5395 ****
    [(set (match_operand:SI 0 "register_operand" "=d,d")
          (and:SI (match_operand:SI 1 "nonimmediate_operand" "d,T")
  		(const_int 2147483647)))]
!   "TARGET_ZARCH"
    "@
     llgtr\t%0,%1
     llgt\t%0,%1"
--- 4921,4927 ----
    [(set (match_operand:SI 0 "register_operand" "=d,d")
          (and:SI (match_operand:SI 1 "nonimmediate_operand" "d,T")
  		(const_int 2147483647)))]
!   ""
    "@
     llgtr\t%0,%1
     llgt\t%0,%1"
***************
*** 5400,5406 ****
    [(set (match_operand:DI 0 "register_operand" "=d,d")
          (and:DI (match_operand:DI 1 "nonimmediate_operand" "d,o")
                  (const_int 2147483647)))]
!   "TARGET_ZARCH"
    "@
     llgtr\t%0,%1
     llgt\t%0,%N1"
--- 4932,4938 ----
    [(set (match_operand:DI 0 "register_operand" "=d,d")
          (and:DI (match_operand:DI 1 "nonimmediate_operand" "d,o")
                  (const_int 2147483647)))]
!   ""
    "@
     llgtr\t%0,%1
     llgt\t%0,%N1"
***************
*** 5412,5418 ****
          (and:DSI (match_operand:DSI 1 "nonimmediate_operand" "")
                   (const_int 2147483647)))
     (clobber (reg:CC CC_REGNUM))]
!   "TARGET_ZARCH && reload_completed"
    [(set (match_dup 0)
          (and:DSI (match_dup 1)
                   (const_int 2147483647)))]
--- 4944,4950 ----
          (and:DSI (match_operand:DSI 1 "nonimmediate_operand" "")
                   (const_int 2147483647)))
     (clobber (reg:CC CC_REGNUM))]
!   "reload_completed"
    [(set (match_dup 0)
          (and:DSI (match_dup 1)
                   (const_int 2147483647)))]
***************
*** 5427,5440 ****
          (zero_extend:DI (match_operand:HQI 1 "nonimmediate_operand" "")))]
    ""
  {
!   if (!TARGET_ZARCH)
!     {
!       rtx tmp = gen_reg_rtx (SImode);
!       emit_insn (gen_zero_extend<mode>si2 (tmp, operands[1]));
!       emit_insn (gen_zero_extendsidi2 (operands[0], tmp));
!       DONE;
!     }
!   else if (!TARGET_EXTIMM)
      {
        rtx bitcount = GEN_INT (64 - <HQI:bitsize>);
        operands[1] = gen_lowpart (DImode, operands[1]);
--- 4959,4965 ----
          (zero_extend:DI (match_operand:HQI 1 "nonimmediate_operand" "")))]
    ""
  {
!   if (!TARGET_EXTIMM)
      {
        rtx bitcount = GEN_INT (64 - <HQI:bitsize>);
        operands[1] = gen_lowpart (DImode, operands[1]);
***************
*** 5460,5467 ****
  
  ; llhrl, llghrl
  (define_insn "*zero_extendhi<mode>2_z10"
!   [(set (match_operand:GPR 0 "register_operand" "=d,d,d,d")
!         (zero_extend:GPR (match_operand:HI 1 "nonimmediate_operand" "d,T,b,v")))]
    "TARGET_Z10"
    "@
     ll<g>hr\t%0,%1
--- 4985,4992 ----
  
  ; llhrl, llghrl
  (define_insn "*zero_extendhi<mode>2_z10"
!   [(set (match_operand:DSI 0 "register_operand" "=d,d,d,d")
!         (zero_extend:DSI (match_operand:HI 1 "nonimmediate_operand" "d,T,b,v")))]
    "TARGET_Z10"
    "@
     ll<g>hr\t%0,%1
***************
*** 5475,5483 ****
     (set_attr "relative_long" "*,*,yes,*")])
  
  ; llhr, llcr, llghr, llgcr, llh, llc, llgh, llgc
! (define_insn "*zero_extend<HQI:mode><GPR:mode>2_extimm"
!   [(set (match_operand:GPR 0 "register_operand" "=d,d,d")
!         (zero_extend:GPR (match_operand:HQI 1 "nonimmediate_operand" "d,T,v")))]
    "TARGET_EXTIMM"
    "@
     ll<g><hc>r\t%0,%1
--- 5000,5008 ----
     (set_attr "relative_long" "*,*,yes,*")])
  
  ; llhr, llcr, llghr, llgcr, llh, llc, llgh, llgc
! (define_insn "*zero_extend<HQI:mode><DSI:mode>2_extimm"
!   [(set (match_operand:DSI 0 "register_operand" "=d,d,d")
!         (zero_extend:DSI (match_operand:HQI 1 "nonimmediate_operand" "d,T,v")))]
    "TARGET_EXTIMM"
    "@
     ll<g><hc>r\t%0,%1
***************
*** 5488,5524 ****
     (set_attr "z10prop" "z10_super_E1,z10_fwd_A3,*")])
  
  ; llgh, llgc
! (define_insn "*zero_extend<HQI:mode><GPR:mode>2"
!   [(set (match_operand:GPR 0 "register_operand" "=d")
!         (zero_extend:GPR (match_operand:HQI 1 "memory_operand" "T")))]
!   "TARGET_ZARCH && !TARGET_EXTIMM"
    "llg<hc>\t%0,%1"
    [(set_attr "op_type" "RXY")
     (set_attr "z10prop" "z10_fwd_A3")])
  
- (define_insn_and_split "*zero_extendhisi2_31"
-   [(set (match_operand:SI 0 "register_operand" "=&d")
-         (zero_extend:SI (match_operand:HI 1 "s_operand" "S")))
-    (clobber (reg:CC CC_REGNUM))]
-   "!TARGET_ZARCH"
-   "#"
-   "&& reload_completed"
-   [(set (match_dup 0) (const_int 0))
-    (parallel
-     [(set (strict_low_part (match_dup 2)) (match_dup 1))
-      (clobber (reg:CC CC_REGNUM))])]
-   "operands[2] = gen_lowpart (HImode, operands[0]);")
- 
- (define_insn_and_split "*zero_extendqisi2_31"
-   [(set (match_operand:SI 0 "register_operand" "=&d")
-         (zero_extend:SI (match_operand:QI 1 "memory_operand" "T")))]
-   "!TARGET_ZARCH"
-   "#"
-   "&& reload_completed"
-   [(set (match_dup 0) (const_int 0))
-    (set (strict_low_part (match_dup 2)) (match_dup 1))]
-   "operands[2] = gen_lowpart (QImode, operands[0]);")
- 
  ;
  ; zero_extendqihi2 instruction pattern(s).
  ;
--- 5013,5026 ----
     (set_attr "z10prop" "z10_super_E1,z10_fwd_A3,*")])
  
  ; llgh, llgc
! (define_insn "*zero_extend<HQI:mode><DSI:mode>2"
!   [(set (match_operand:DSI 0 "register_operand" "=d")
!         (zero_extend:DSI (match_operand:HQI 1 "memory_operand" "T")))]
!   "!TARGET_EXTIMM"
    "llg<hc>\t%0,%1"
    [(set_attr "op_type" "RXY")
     (set_attr "z10prop" "z10_fwd_A3")])
  
  ;
  ; zero_extendqihi2 instruction pattern(s).
  ;
***************
*** 5526,5532 ****
  (define_expand "zero_extendqihi2"
    [(set (match_operand:HI 0 "register_operand" "")
          (zero_extend:HI (match_operand:QI 1 "register_operand" "")))]
!   "TARGET_ZARCH && !TARGET_EXTIMM"
  {
    operands[1] = gen_lowpart (HImode, operands[1]);
    emit_insn (gen_andhi3 (operands[0], operands[1], GEN_INT (0xff)));
--- 5028,5034 ----
  (define_expand "zero_extendqihi2"
    [(set (match_operand:HI 0 "register_operand" "")
          (zero_extend:HI (match_operand:QI 1 "register_operand" "")))]
!   "!TARGET_EXTIMM"
  {
    operands[1] = gen_lowpart (HImode, operands[1]);
    emit_insn (gen_andhi3 (operands[0], operands[1], GEN_INT (0xff)));
***************
*** 5536,5556 ****
  (define_insn "*zero_extendqihi2_64"
    [(set (match_operand:HI 0 "register_operand" "=d")
          (zero_extend:HI (match_operand:QI 1 "memory_operand" "T")))]
!   "TARGET_ZARCH && !TARGET_EXTIMM"
    "llgc\t%0,%1"
    [(set_attr "op_type" "RXY")
     (set_attr "z10prop" "z10_fwd_A3")])
  
- (define_insn_and_split "*zero_extendqihi2_31"
-   [(set (match_operand:HI 0 "register_operand" "=&d")
-         (zero_extend:HI (match_operand:QI 1 "memory_operand" "T")))]
-   "!TARGET_ZARCH"
-   "#"
-   "&& reload_completed"
-   [(set (match_dup 0) (const_int 0))
-    (set (strict_low_part (match_dup 2)) (match_dup 1))]
-   "operands[2] = gen_lowpart (QImode, operands[0]);")
- 
  ;
  ; fixuns_trunc(dd|td|sf|df|tf)(si|di)2 expander
  ;
--- 5038,5048 ----
  (define_insn "*zero_extendqihi2_64"
    [(set (match_operand:HI 0 "register_operand" "=d")
          (zero_extend:HI (match_operand:QI 1 "memory_operand" "T")))]
!   "!TARGET_EXTIMM"
    "llgc\t%0,%1"
    [(set_attr "op_type" "RXY")
     (set_attr "z10prop" "z10_fwd_A3")])
  
  ;
  ; fixuns_trunc(dd|td|sf|df|tf)(si|di)2 expander
  ;
***************
*** 5558,5568 ****
  ; This is the only entry point for fixuns_trunc.  It multiplexes the
  ; expansion to either the *_emu expanders below for pre z196 machines
  ; or emits the default pattern otherwise.
! (define_expand "fixuns_trunc<FP:mode><GPR:mode>2<FP:tf_fpr>"
    [(parallel
!     [(set (match_operand:GPR 0 "register_operand" "")
! 	  (unsigned_fix:GPR (match_operand:FP 1 "register_operand" "")))
!      (unspec:GPR [(match_dup 2)] UNSPEC_ROUND)
       (clobber (reg:CC CC_REGNUM))])]
    "TARGET_HARD_FLOAT"
  {
--- 5050,5060 ----
  ; This is the only entry point for fixuns_trunc.  It multiplexes the
  ; expansion to either the *_emu expanders below for pre z196 machines
  ; or emits the default pattern otherwise.
! (define_expand "fixuns_trunc<FP:mode><DSI:mode>2<FP:tf_fpr>"
    [(parallel
!     [(set (match_operand:DSI 0 "register_operand" "")
! 	  (unsigned_fix:DSI (match_operand:FP 1 "register_operand" "")))
!      (unspec:DSI [(match_dup 2)] UNSPEC_ROUND)
       (clobber (reg:CC CC_REGNUM))])]
    "TARGET_HARD_FLOAT"
  {
***************
*** 5570,5578 ****
      {
        /* We don't provide emulation for TD|DD->SI.  */
        if (GET_MODE_CLASS (<FP:MODE>mode) == MODE_DECIMAL_FLOAT
! 	  && <GPR:MODE>mode == SImode)
  	FAIL;
!       emit_insn (gen_fixuns_trunc<FP:mode><GPR:mode>2_emu (operands[0],
  							       operands[1]));
        DONE;
      }
--- 5062,5070 ----
      {
        /* We don't provide emulation for TD|DD->SI.  */
        if (GET_MODE_CLASS (<FP:MODE>mode) == MODE_DECIMAL_FLOAT
! 	  && <DSI:MODE>mode == SImode)
  	FAIL;
!       emit_insn (gen_fixuns_trunc<FP:mode><DSI:mode>2_emu (operands[0],
  							       operands[1]));
        DONE;
      }
***************
*** 5587,5597 ****
  
  ; Emulate the unsigned conversion with the signed version for pre z196
  ; machines.
! (define_expand "fixuns_trunc<BFP:mode><GPR:mode>2_emu"
    [(parallel
!     [(set (match_operand:GPR 0 "register_operand" "")
! 	  (unsigned_fix:GPR (match_operand:BFP 1 "register_operand" "")))
!      (unspec:GPR [(const_int BFP_RND_TOWARD_0)] UNSPEC_ROUND)
       (clobber (reg:CC CC_REGNUM))])]
    "!TARGET_Z196 && TARGET_HARD_FLOAT"
  {
--- 5079,5089 ----
  
  ; Emulate the unsigned conversion with the signed version for pre z196
  ; machines.
! (define_expand "fixuns_trunc<BFP:mode><DSI:mode>2_emu"
    [(parallel
!     [(set (match_operand:DSI 0 "register_operand" "")
! 	  (unsigned_fix:DSI (match_operand:BFP 1 "register_operand" "")))
!      (unspec:DSI [(const_int BFP_RND_TOWARD_0)] UNSPEC_ROUND)
       (clobber (reg:CC CC_REGNUM))])]
    "!TARGET_Z196 && TARGET_HARD_FLOAT"
  {
***************
*** 5601,5620 ****
    REAL_VALUE_TYPE cmp, sub;
  
    operands[1] = force_reg (<BFP:MODE>mode, operands[1]);
!   real_2expN (&cmp, <GPR:bitsize> - 1, <BFP:MODE>mode);
!   real_2expN (&sub, <GPR:bitsize>, <BFP:MODE>mode);
  
    emit_cmp_and_jump_insns (operands[1],
  			   const_double_from_real_value (cmp, <BFP:MODE>mode),
  			   LT, NULL_RTX, VOIDmode, 0, label1);
    emit_insn (gen_sub<BFP:mode>3 (temp, operands[1],
  	       const_double_from_real_value (sub, <BFP:MODE>mode)));
!   emit_insn (gen_fix_trunc<BFP:mode><GPR:mode>2_bfp (operands[0], temp,
  	       GEN_INT (BFP_RND_TOWARD_MINF)));
    emit_jump (label2);
  
    emit_label (label1);
!   emit_insn (gen_fix_trunc<BFP:mode><GPR:mode>2_bfp (operands[0],
  							 operands[1],
  							 GEN_INT (BFP_RND_TOWARD_0)));
    emit_label (label2);
--- 5093,5112 ----
    REAL_VALUE_TYPE cmp, sub;
  
    operands[1] = force_reg (<BFP:MODE>mode, operands[1]);
!   real_2expN (&cmp, <DSI:bitsize> - 1, <BFP:MODE>mode);
!   real_2expN (&sub, <DSI:bitsize>, <BFP:MODE>mode);
  
    emit_cmp_and_jump_insns (operands[1],
  			   const_double_from_real_value (cmp, <BFP:MODE>mode),
  			   LT, NULL_RTX, VOIDmode, 0, label1);
    emit_insn (gen_sub<BFP:mode>3 (temp, operands[1],
  	       const_double_from_real_value (sub, <BFP:MODE>mode)));
!   emit_insn (gen_fix_trunc<BFP:mode><DSI:mode>2_bfp (operands[0], temp,
  	       GEN_INT (BFP_RND_TOWARD_MINF)));
    emit_jump (label2);
  
    emit_label (label1);
!   emit_insn (gen_fix_trunc<BFP:mode><DSI:mode>2_bfp (operands[0],
  							 operands[1],
  							 GEN_INT (BFP_RND_TOWARD_0)));
    emit_label (label2);
***************
*** 5734,5756 ****
  ; (dd|td|sf|df|tf)->unsigned (di|si)
  ; clfebr, clfdbr, clfxbr, clgebr, clgdbr, clgxbr
  ;         clfdtr, clfxtr,         clgdtr, clgxtr
! (define_insn "*fixuns_trunc<FP:mode><GPR:mode>2_z196"
!   [(set (match_operand:GPR                  0 "register_operand" "=d")
! 	(unsigned_fix:GPR (match_operand:FP 1 "register_operand"  "f")))
!    (unspec:GPR [(match_operand:GPR          2 "immediate_operand" "K")] UNSPEC_ROUND)
     (clobber (reg:CC CC_REGNUM))]
     "TARGET_Z196 && TARGET_HARD_FLOAT
!     && (!TARGET_VX || <GPR:MODE>mode != DImode || <FP:MODE>mode != DFmode)"
!    "cl<GPR:gf><FP:xde><FP:bt>r\t%0,%h2,%1,0"
     [(set_attr "op_type" "RRF")
      (set_attr "type"    "ftoi")])
  
! (define_expand "fix_trunc<DSF:mode><GPR:mode>2"
!   [(set (match_operand:GPR 0 "register_operand" "")
!         (fix:GPR (match_operand:DSF 1 "register_operand" "")))]
    "TARGET_HARD_FLOAT"
  {
!   emit_insn (gen_fix_trunc<DSF:mode><GPR:mode>2_bfp (operands[0], operands[1],
               GEN_INT (BFP_RND_TOWARD_0)));
    DONE;
  })
--- 5226,5248 ----
  ; (dd|td|sf|df|tf)->unsigned (di|si)
  ; clfebr, clfdbr, clfxbr, clgebr, clgdbr, clgxbr
  ;         clfdtr, clfxtr,         clgdtr, clgxtr
! (define_insn "*fixuns_trunc<FP:mode><DSI:mode>2_z196"
!   [(set (match_operand:DSI                  0 "register_operand" "=d")
! 	(unsigned_fix:DSI (match_operand:FP 1 "register_operand"  "f")))
!    (unspec:DSI [(match_operand:DSI          2 "immediate_operand" "K")] UNSPEC_ROUND)
     (clobber (reg:CC CC_REGNUM))]
     "TARGET_Z196 && TARGET_HARD_FLOAT
!     && (!TARGET_VX || <DSI:MODE>mode != DImode || <FP:MODE>mode != DFmode)"
!    "cl<DSI:gf><FP:xde><FP:bt>r\t%0,%h2,%1,0"
     [(set_attr "op_type" "RRF")
      (set_attr "type"    "ftoi")])
  
! (define_expand "fix_trunc<DSF:mode><DSI:mode>2"
!   [(set (match_operand:DSI 0 "register_operand" "")
!         (fix:DSI (match_operand:DSF 1 "register_operand" "")))]
    "TARGET_HARD_FLOAT"
  {
!   emit_insn (gen_fix_trunc<DSF:mode><DSI:mode>2_bfp (operands[0], operands[1],
               GEN_INT (BFP_RND_TOWARD_0)));
    DONE;
  })
***************
*** 5770,5791 ****
     (set_attr "type"    "ftoi")])
  
  ; cgxbr, cgdbr, cgebr, cfxbr, cfdbr, cfebr
! (define_insn "*fix_trunc<BFP:mode><GPR:mode>2_bfp"
!   [(set (match_operand:GPR          0 "register_operand" "=d")
!         (fix:GPR (match_operand:BFP 1 "register_operand"  "f")))
!    (unspec:GPR [(match_operand:GPR  2 "immediate_operand" "K")] UNSPEC_ROUND)
     (clobber (reg:CC CC_REGNUM))]
    "TARGET_HARD_FLOAT
!     && (!TARGET_VX || <GPR:MODE>mode != DImode || <BFP:MODE>mode != DFmode)"
!   "c<GPR:gf><BFP:xde>br\t%0,%h2,%1"
    [(set_attr "op_type" "RRE")
     (set_attr "type"    "ftoi")])
  
! (define_expand "fix_trunc<BFP:mode><GPR:mode>2_bfp"
    [(parallel
!     [(set (match_operand:GPR          0 "register_operand" "=d")
! 	  (fix:GPR (match_operand:BFP 1 "register_operand"  "f")))
!      (unspec:GPR [(match_operand:GPR  2 "immediate_operand" "K")] UNSPEC_ROUND)
       (clobber (reg:CC CC_REGNUM))])]
    "TARGET_HARD_FLOAT")
  ;
--- 5262,5283 ----
     (set_attr "type"    "ftoi")])
  
  ; cgxbr, cgdbr, cgebr, cfxbr, cfdbr, cfebr
! (define_insn "*fix_trunc<BFP:mode><DSI:mode>2_bfp"
!   [(set (match_operand:DSI          0 "register_operand" "=d")
!         (fix:DSI (match_operand:BFP 1 "register_operand"  "f")))
!    (unspec:DSI [(match_operand:DSI  2 "immediate_operand" "K")] UNSPEC_ROUND)
     (clobber (reg:CC CC_REGNUM))]
    "TARGET_HARD_FLOAT
!     && (!TARGET_VX || <DSI:MODE>mode != DImode || <BFP:MODE>mode != DFmode)"
!   "c<DSI:gf><BFP:xde>br\t%0,%h2,%1"
    [(set_attr "op_type" "RRE")
     (set_attr "type"    "ftoi")])
  
! (define_expand "fix_trunc<BFP:mode><DSI:mode>2_bfp"
    [(parallel
!     [(set (match_operand:DSI          0 "register_operand" "=d")
! 	  (fix:DSI (match_operand:BFP 1 "register_operand"  "f")))
!      (unspec:DSI [(match_operand:DSI  2 "immediate_operand" "K")] UNSPEC_ROUND)
       (clobber (reg:CC CC_REGNUM))])]
    "TARGET_HARD_FLOAT")
  ;
***************
*** 5795,5801 ****
  (define_expand "fix_trunc<mode>di2"
    [(set (match_operand:DI 0 "register_operand" "")
          (fix:DI (match_operand:DFP 1 "nonimmediate_operand" "")))]
!   "TARGET_ZARCH && TARGET_HARD_DFP"
  {
    operands[1] = force_reg (<MODE>mode, operands[1]);
    emit_insn (gen_fix_trunc<mode>di2_dfp (operands[0], operands[1],
--- 5287,5293 ----
  (define_expand "fix_trunc<mode>di2"
    [(set (match_operand:DI 0 "register_operand" "")
          (fix:DI (match_operand:DFP 1 "nonimmediate_operand" "")))]
!   "TARGET_HARD_DFP"
  {
    operands[1] = force_reg (<MODE>mode, operands[1]);
    emit_insn (gen_fix_trunc<mode>di2_dfp (operands[0], operands[1],
***************
*** 5809,5815 ****
          (fix:DI (match_operand:DFP 1 "register_operand" "f")))
     (unspec:DI [(match_operand:DI 2 "immediate_operand" "K")] UNSPEC_ROUND)
     (clobber (reg:CC CC_REGNUM))]
!   "TARGET_ZARCH && TARGET_HARD_DFP"
    "cg<DFP:xde>tr\t%0,%h2,%1"
    [(set_attr "op_type" "RRF")
     (set_attr "type"    "ftoidfp")])
--- 5301,5307 ----
          (fix:DI (match_operand:DFP 1 "register_operand" "f")))
     (unspec:DI [(match_operand:DI 2 "immediate_operand" "K")] UNSPEC_ROUND)
     (clobber (reg:CC CC_REGNUM))]
!   "TARGET_HARD_DFP"
    "cg<DFP:xde>tr\t%0,%h2,%1"
    [(set_attr "op_type" "RRF")
     (set_attr "type"    "ftoidfp")])
***************
*** 5820,5828 ****
  ;
  
  (define_expand "fix_trunctf<mode>2_fpr"
!   [(parallel [(set (match_operand:GPR 0 "register_operand" "")
! 		   (fix:GPR (match_operand:TF 1 "register_operand" "")))
! 	      (unspec:GPR [(const_int BFP_RND_TOWARD_0)] UNSPEC_ROUND)
  	      (clobber (reg:CC CC_REGNUM))])]
    "TARGET_HARD_FLOAT && !TARGET_VXE"
    "")
--- 5312,5320 ----
  ;
  
  (define_expand "fix_trunctf<mode>2_fpr"
!   [(parallel [(set (match_operand:DSI 0 "register_operand" "")
! 		   (fix:DSI (match_operand:TF 1 "register_operand" "")))
! 	      (unspec:DSI [(const_int BFP_RND_TOWARD_0)] UNSPEC_ROUND)
  	      (clobber (reg:CC CC_REGNUM))])]
    "TARGET_HARD_FLOAT && !TARGET_VXE"
    "")
***************
*** 5836,5842 ****
  (define_insn "floatdi<mode>2<tf_fpr>"
    [(set (match_operand:FP           0 "register_operand" "=f,v")
          (float:FP (match_operand:DI 1 "register_operand"  "d,v")))]
!   "TARGET_ZARCH && TARGET_HARD_FLOAT"
    "@
     c<xde>g<bt>r\t%0,%1
     wcdgb\t%v0,%v1,0,0"
--- 5328,5334 ----
  (define_insn "floatdi<mode>2<tf_fpr>"
    [(set (match_operand:FP           0 "register_operand" "=f,v")
          (float:FP (match_operand:DI 1 "register_operand"  "d,v")))]
!   "TARGET_HARD_FLOAT"
    "@
     c<xde>g<bt>r\t%0,%1
     wcdgb\t%v0,%v1,0,0"
***************
*** 5883,5900 ****
  
  ; cxlgbr, cdlgbr, celgbr, cxlgtr, cdlgtr
  ; cxlfbr, cdlfbr, celfbr, cxlftr, cdlftr
! (define_insn "*floatuns<GPR:mode><FP:mode>2"
    [(set (match_operand:FP                     0 "register_operand" "=f")
!         (unsigned_float:FP (match_operand:GPR 1 "register_operand"  "d")))]
    "TARGET_Z196 && TARGET_HARD_FLOAT
!    && (!TARGET_VX || <FP:MODE>mode != DFmode || <GPR:MODE>mode != DImode)"
!   "c<FP:xde>l<GPR:gf><FP:bt>r\t%0,0,%1,0"
    [(set_attr "op_type" "RRE")
     (set_attr "type"    "itof<FP:type>")])
  
! (define_expand "floatuns<GPR:mode><FP:mode>2<tf_fpr>"
    [(set (match_operand:FP                     0 "register_operand" "")
!         (unsigned_float:FP (match_operand:GPR 1 "register_operand" "")))]
    "TARGET_Z196 && TARGET_HARD_FLOAT")
  
  ;
--- 5375,5392 ----
  
  ; cxlgbr, cdlgbr, celgbr, cxlgtr, cdlgtr
  ; cxlfbr, cdlfbr, celfbr, cxlftr, cdlftr
! (define_insn "*floatuns<DSI:mode><FP:mode>2"
    [(set (match_operand:FP                     0 "register_operand" "=f")
!         (unsigned_float:FP (match_operand:DSI 1 "register_operand"  "d")))]
    "TARGET_Z196 && TARGET_HARD_FLOAT
!    && (!TARGET_VX || <FP:MODE>mode != DFmode || <DSI:MODE>mode != DImode)"
!   "c<FP:xde>l<DSI:gf><FP:bt>r\t%0,0,%1,0"
    [(set_attr "op_type" "RRE")
     (set_attr "type"    "itof<FP:type>")])
  
! (define_expand "floatuns<DSI:mode><FP:mode>2<tf_fpr>"
    [(set (match_operand:FP                     0 "register_operand" "")
!         (unsigned_float:FP (match_operand:DSI 1 "register_operand" "")))]
    "TARGET_Z196 && TARGET_HARD_FLOAT")
  
  ;
***************
*** 6257,6263 ****
  	  (plus:TI (match_operand:TI 1 "nonimmediate_operand" "")
  		   (match_operand:TI 2 "general_operand"      "") ) )
       (clobber (reg:CC CC_REGNUM))])]
!   "TARGET_ZARCH"
  {
    /* For z13 we have vaq which doesn't set CC.  */
    if (TARGET_VX)
--- 5749,5755 ----
  	  (plus:TI (match_operand:TI 1 "nonimmediate_operand" "")
  		   (match_operand:TI 2 "general_operand"      "") ) )
       (clobber (reg:CC CC_REGNUM))])]
!   ""
  {
    /* For z13 we have vaq which doesn't set CC.  */
    if (TARGET_VX)
***************
*** 6275,6281 ****
          (plus:TI (match_operand:TI 1 "nonimmediate_operand" "%0")
                   (match_operand:TI 2 "general_operand"      "do") ) )
     (clobber (reg:CC CC_REGNUM))]
!   "TARGET_ZARCH"
    "#"
    "&& reload_completed"
    [(parallel
--- 5767,5773 ----
          (plus:TI (match_operand:TI 1 "nonimmediate_operand" "%0")
                   (match_operand:TI 2 "general_operand"      "do") ) )
     (clobber (reg:CC CC_REGNUM))]
!   ""
    "#"
    "&& reload_completed"
    [(parallel
***************
*** 6315,6321 ****
          (plus:DI (sign_extend:DI (match_operand:SI 2 "general_operand" "d,T"))
                   (match_operand:DI 1 "register_operand" "0,0")))
     (clobber (reg:CC CC_REGNUM))]
!   "TARGET_ZARCH"
    "@
     agfr\t%0,%2
     agf\t%0,%2"
--- 5807,5813 ----
          (plus:DI (sign_extend:DI (match_operand:SI 2 "general_operand" "d,T"))
                   (match_operand:DI 1 "register_operand" "0,0")))
     (clobber (reg:CC CC_REGNUM))]
!   ""
    "@
     agfr\t%0,%2
     agf\t%0,%2"
***************
*** 6329,6335 ****
                   (const_int 0)))
     (set (match_operand:DI 0 "register_operand" "=d,d")
          (plus:DI (zero_extend:DI (match_dup 2)) (match_dup 1)))]
!   "s390_match_ccmode (insn, CCLmode) && TARGET_ZARCH"
    "@
     algfr\t%0,%2
     algf\t%0,%2"
--- 5821,5827 ----
                   (const_int 0)))
     (set (match_operand:DI 0 "register_operand" "=d,d")
          (plus:DI (zero_extend:DI (match_dup 2)) (match_dup 1)))]
!   "s390_match_ccmode (insn, CCLmode)"
    "@
     algfr\t%0,%2
     algf\t%0,%2"
***************
*** 6342,6348 ****
                            (match_operand:DI 1 "register_operand" "0,0"))
                   (const_int 0)))
     (clobber (match_scratch:DI 0 "=d,d"))]
!   "s390_match_ccmode (insn, CCLmode) && TARGET_ZARCH"
    "@
     algfr\t%0,%2
     algf\t%0,%2"
--- 5834,5840 ----
                            (match_operand:DI 1 "register_operand" "0,0"))
                   (const_int 0)))
     (clobber (match_scratch:DI 0 "=d,d"))]
!   "s390_match_ccmode (insn, CCLmode)"
    "@
     algfr\t%0,%2
     algf\t%0,%2"
***************
*** 6354,6391 ****
          (plus:DI (zero_extend:DI (match_operand:SI 2 "general_operand" "d,T"))
                   (match_operand:DI 1 "register_operand" "0,0")))
     (clobber (reg:CC CC_REGNUM))]
!   "TARGET_ZARCH"
    "@
     algfr\t%0,%2
     algf\t%0,%2"
    [(set_attr "op_type"  "RRE,RXY")
     (set_attr "z10prop" "z10_super_E1,z10_super_E1")])
  
- (define_insn_and_split "*adddi3_31z"
-   [(set (match_operand:DI 0 "nonimmediate_operand" "=&d")
-         (plus:DI (match_operand:DI 1 "nonimmediate_operand" "%0")
-                  (match_operand:DI 2 "general_operand" "do") ) )
-    (clobber (reg:CC CC_REGNUM))]
-   "!TARGET_ZARCH"
-   "#"
-   "&& reload_completed"
-   [(parallel
-     [(set (reg:CCL1 CC_REGNUM)
-           (compare:CCL1 (plus:SI (match_dup 7) (match_dup 8))
-                         (match_dup 7)))
-      (set (match_dup 6) (plus:SI (match_dup 7) (match_dup 8)))])
-    (parallel
-     [(set (match_dup 3) (plus:SI
- 			  (plus:SI (ltu:SI (reg:CCL1 CC_REGNUM) (const_int 0))
- 				   (match_dup 4)) (match_dup 5)))
-      (clobber (reg:CC CC_REGNUM))])]
-   "operands[3] = operand_subword (operands[0], 0, 0, DImode);
-    operands[4] = operand_subword (operands[1], 0, 0, DImode);
-    operands[5] = operand_subword (operands[2], 0, 0, DImode);
-    operands[6] = operand_subword (operands[0], 1, 0, DImode);
-    operands[7] = operand_subword (operands[1], 1, 0, DImode);
-    operands[8] = operand_subword (operands[2], 1, 0, DImode);")
- 
  ;
  ; addsi3 instruction pattern(s).
  ;
--- 5846,5858 ----
          (plus:DI (zero_extend:DI (match_operand:SI 2 "general_operand" "d,T"))
                   (match_operand:DI 1 "register_operand" "0,0")))
     (clobber (reg:CC CC_REGNUM))]
!   ""
    "@
     algfr\t%0,%2
     algf\t%0,%2"
    [(set_attr "op_type"  "RRE,RXY")
     (set_attr "z10prop" "z10_super_E1,z10_super_E1")])
  
  ;
  ; addsi3 instruction pattern(s).
  ;
***************
*** 6418,6426 ****
  
  ; ark, agrk, ar, ahi, ahik, aghik, alfi, slfi, a, ay, agr, aghi, algfi, slgfi, ag, asi, agsi
  (define_insn "*add<mode>3"
!   [(set (match_operand:GPR 0 "nonimmediate_operand"           "=d,d,d,d, d, d,d,d,S")
!         (plus:GPR (match_operand:GPR 1 "nonimmediate_operand" "%0,d,0,d, 0, 0,0,0,0")
! 		  (match_operand:GPR 2 "general_operand"      " d,d,K,K,Op,On,R,T,C") ) )
     (clobber (reg:CC CC_REGNUM))]
    ""
    "@
--- 5885,5893 ----
  
  ; ark, agrk, ar, ahi, ahik, aghik, alfi, slfi, a, ay, agr, aghi, algfi, slgfi, ag, asi, agsi
  (define_insn "*add<mode>3"
!   [(set (match_operand:DSI 0 "nonimmediate_operand"           "=d,d,d,d, d, d,d,d,S")
!         (plus:DSI (match_operand:DSI 1 "nonimmediate_operand" "%0,d,0,d, 0, 0,0,0,0")
! 		  (match_operand:DSI 2 "general_operand"      " d,d,K,K,Op,On,R,T,C") ) )
     (clobber (reg:CC CC_REGNUM))]
    ""
    "@
***************
*** 6441,6451 ****
  ; alr, alfi, slfi, al, aly, alrk, alhsik, algr, algfi, slgfi, alg, alsi, algsi, algrk, alghsik
  (define_insn "add<mode>3_carry1_cc"
    [(set (reg:CCL1 CC_REGNUM)
!         (compare:CCL1 (plus:GPR (match_operand:GPR 1 "nonimmediate_operand" "%0,d, 0, 0,d,0,0,0")
! 				(match_operand:GPR 2 "general_operand"      " d,d,Op,On,K,R,T,C"))
  		      (match_dup 1)))
!    (set (match_operand:GPR 0 "nonimmediate_operand"                         "=d,d, d, d,d,d,d,d")
!         (plus:GPR (match_dup 1) (match_dup 2)))]
    ""
    "@
     al<g>r\t%0,%2
--- 5908,5918 ----
  ; alr, alfi, slfi, al, aly, alrk, alhsik, algr, algfi, slgfi, alg, alsi, algsi, algrk, alghsik
  (define_insn "add<mode>3_carry1_cc"
    [(set (reg:CCL1 CC_REGNUM)
!         (compare:CCL1 (plus:DSI (match_operand:DSI 1 "nonimmediate_operand" "%0,d, 0, 0,d,0,0,0")
! 				(match_operand:DSI 2 "general_operand"      " d,d,Op,On,K,R,T,C"))
  		      (match_dup 1)))
!    (set (match_operand:DSI 0 "nonimmediate_operand"                         "=d,d, d, d,d,d,d,d")
!         (plus:DSI (match_dup 1) (match_dup 2)))]
    ""
    "@
     al<g>r\t%0,%2
***************
*** 6464,6473 ****
  ; alr, al, aly, algr, alg, alrk, algrk
  (define_insn "*add<mode>3_carry1_cconly"
    [(set (reg CC_REGNUM)
!         (compare (plus:GPR (match_operand:GPR 1 "nonimmediate_operand" "%0,d,0,0")
! 			   (match_operand:GPR 2 "general_operand"       "d,d,R,T"))
                   (match_dup 1)))
!    (clobber (match_scratch:GPR 0                                       "=d,d,d,d"))]
    "s390_match_ccmode (insn, CCL1mode)"
    "@
     al<g>r\t%0,%2
--- 5931,5940 ----
  ; alr, al, aly, algr, alg, alrk, algrk
  (define_insn "*add<mode>3_carry1_cconly"
    [(set (reg CC_REGNUM)
!         (compare (plus:DSI (match_operand:DSI 1 "nonimmediate_operand" "%0,d,0,0")
! 			   (match_operand:DSI 2 "general_operand"       "d,d,R,T"))
                   (match_dup 1)))
!    (clobber (match_scratch:DSI 0                                       "=d,d,d,d"))]
    "s390_match_ccmode (insn, CCL1mode)"
    "@
     al<g>r\t%0,%2
***************
*** 6481,6491 ****
  ; alr, alfi, slfi, al, aly, algr, algfi, slgfi, alg, alsi, algsi, alrk, algrk, alhsik, alghsik
  (define_insn "*add<mode>3_carry2_cc"
    [(set (reg CC_REGNUM)
!         (compare (plus:GPR (match_operand:GPR 1 "nonimmediate_operand" "%0,d, 0, 0,d,0,0,0")
! 			   (match_operand:GPR 2 "general_operand"      " d,d,Op,On,K,R,T,C"))
                   (match_dup 2)))
!    (set (match_operand:GPR 0 "nonimmediate_operand"                    "=d,d, d, d,d,d,d,S")
!         (plus:GPR (match_dup 1) (match_dup 2)))]
    "s390_match_ccmode (insn, CCL1mode)"
    "@
     al<g>r\t%0,%2
--- 5948,5958 ----
  ; alr, alfi, slfi, al, aly, algr, algfi, slgfi, alg, alsi, algsi, alrk, algrk, alhsik, alghsik
  (define_insn "*add<mode>3_carry2_cc"
    [(set (reg CC_REGNUM)
!         (compare (plus:DSI (match_operand:DSI 1 "nonimmediate_operand" "%0,d, 0, 0,d,0,0,0")
! 			   (match_operand:DSI 2 "general_operand"      " d,d,Op,On,K,R,T,C"))
                   (match_dup 2)))
!    (set (match_operand:DSI 0 "nonimmediate_operand"                    "=d,d, d, d,d,d,d,S")
!         (plus:DSI (match_dup 1) (match_dup 2)))]
    "s390_match_ccmode (insn, CCL1mode)"
    "@
     al<g>r\t%0,%2
***************
*** 6504,6513 ****
  ; alr, al, aly, algr, alg, alrk, algrk
  (define_insn "*add<mode>3_carry2_cconly"
    [(set (reg CC_REGNUM)
!         (compare (plus:GPR (match_operand:GPR 1 "nonimmediate_operand" "%0,d,0,0")
! 			   (match_operand:GPR 2 "general_operand"       "d,d,R,T"))
                   (match_dup 2)))
!    (clobber (match_scratch:GPR 0                                       "=d,d,d,d"))]
    "s390_match_ccmode (insn, CCL1mode)"
    "@
     al<g>r\t%0,%2
--- 5971,5980 ----
  ; alr, al, aly, algr, alg, alrk, algrk
  (define_insn "*add<mode>3_carry2_cconly"
    [(set (reg CC_REGNUM)
!         (compare (plus:DSI (match_operand:DSI 1 "nonimmediate_operand" "%0,d,0,0")
! 			   (match_operand:DSI 2 "general_operand"       "d,d,R,T"))
                   (match_dup 2)))
!    (clobber (match_scratch:DSI 0                                       "=d,d,d,d"))]
    "s390_match_ccmode (insn, CCL1mode)"
    "@
     al<g>r\t%0,%2
***************
*** 6521,6531 ****
  ; alr, alfi, slfi, al, aly, algr, algfi, slgfi, alg, alsi, algsi, alrk, algrk, alhsik, alghsik
  (define_insn "*add<mode>3_cc"
    [(set (reg CC_REGNUM)
!         (compare (plus:GPR (match_operand:GPR 1 "nonimmediate_operand" "%0,d, 0, 0,d,0,0,0")
! 			   (match_operand:GPR 2 "general_operand"      " d,d,Op,On,K,R,T,C"))
                   (const_int 0)))
!    (set (match_operand:GPR 0 "nonimmediate_operand"                    "=d,d, d, d,d,d,d,S")
!         (plus:GPR (match_dup 1) (match_dup 2)))]
    "s390_match_ccmode (insn, CCLmode)"
    "@
     al<g>r\t%0,%2
--- 5988,5998 ----
  ; alr, alfi, slfi, al, aly, algr, algfi, slgfi, alg, alsi, algsi, alrk, algrk, alhsik, alghsik
  (define_insn "*add<mode>3_cc"
    [(set (reg CC_REGNUM)
!         (compare (plus:DSI (match_operand:DSI 1 "nonimmediate_operand" "%0,d, 0, 0,d,0,0,0")
! 			   (match_operand:DSI 2 "general_operand"      " d,d,Op,On,K,R,T,C"))
                   (const_int 0)))
!    (set (match_operand:DSI 0 "nonimmediate_operand"                    "=d,d, d, d,d,d,d,S")
!         (plus:DSI (match_dup 1) (match_dup 2)))]
    "s390_match_ccmode (insn, CCLmode)"
    "@
     al<g>r\t%0,%2
***************
*** 6544,6553 ****
  ; alr, al, aly, algr, alg, alrk, algrk
  (define_insn "*add<mode>3_cconly"
    [(set (reg CC_REGNUM)
!         (compare (plus:GPR (match_operand:GPR 1 "nonimmediate_operand" "%0,d,0,0")
! 			   (match_operand:GPR 2 "general_operand"       "d,d,R,T"))
                   (const_int 0)))
!    (clobber (match_scratch:GPR 0                                       "=d,d,d,d"))]
    "s390_match_ccmode (insn, CCLmode)"
    "@
     al<g>r\t%0,%2
--- 6011,6020 ----
  ; alr, al, aly, algr, alg, alrk, algrk
  (define_insn "*add<mode>3_cconly"
    [(set (reg CC_REGNUM)
!         (compare (plus:DSI (match_operand:DSI 1 "nonimmediate_operand" "%0,d,0,0")
! 			   (match_operand:DSI 2 "general_operand"       "d,d,R,T"))
                   (const_int 0)))
!    (clobber (match_scratch:DSI 0                                       "=d,d,d,d"))]
    "s390_match_ccmode (insn, CCLmode)"
    "@
     al<g>r\t%0,%2
***************
*** 6561,6569 ****
  ; alr, al, aly, algr, alg, alrk, algrk
  (define_insn "*add<mode>3_cconly2"
    [(set (reg CC_REGNUM)
!         (compare (match_operand:GPR 1 "nonimmediate_operand"    "%0,d,0,0")
!                  (neg:GPR (match_operand:GPR 2 "general_operand" "d,d,R,T"))))
!    (clobber (match_scratch:GPR 0                                "=d,d,d,d"))]
    "s390_match_ccmode(insn, CCLmode)"
    "@
     al<g>r\t%0,%2
--- 6028,6036 ----
  ; alr, al, aly, algr, alg, alrk, algrk
  (define_insn "*add<mode>3_cconly2"
    [(set (reg CC_REGNUM)
!         (compare (match_operand:DSI 1 "nonimmediate_operand"    "%0,d,0,0")
!                  (neg:DSI (match_operand:DSI 2 "general_operand" "d,d,R,T"))))
!    (clobber (match_scratch:DSI 0                                "=d,d,d,d"))]
    "s390_match_ccmode(insn, CCLmode)"
    "@
     al<g>r\t%0,%2
***************
*** 6577,6592 ****
  ; ahi, afi, aghi, agfi, asi, agsi
  (define_insn "*add<mode>3_imm_cc"
    [(set (reg CC_REGNUM)
!         (compare (plus:GPR (match_operand:GPR 1 "nonimmediate_operand" " 0, d,0, 0")
! 			   (match_operand:GPR 2 "const_int_operand"    " K, K,Os,C"))
                   (const_int 0)))
!    (set (match_operand:GPR 0 "nonimmediate_operand"                    "=d, d,d, S")
!         (plus:GPR (match_dup 1) (match_dup 2)))]
    "s390_match_ccmode (insn, CCAmode)
     && (CONST_OK_FOR_CONSTRAINT_P (INTVAL (operands[2]), 'K', \"K\")
         || (CONST_OK_FOR_CONSTRAINT_P (INTVAL (operands[2]), 'O', \"Os\")
!            /* Avoid INT32_MIN on 32 bit.  */
!            && (!TARGET_ZARCH || INTVAL (operands[2]) != -0x7fffffff - 1)))"
    "@
     a<g>hi\t%0,%h2
     a<g>hik\t%0,%1,%h2
--- 6044,6058 ----
  ; ahi, afi, aghi, agfi, asi, agsi
  (define_insn "*add<mode>3_imm_cc"
    [(set (reg CC_REGNUM)
!         (compare (plus:DSI (match_operand:DSI 1 "nonimmediate_operand" " 0, d,0, 0")
! 			   (match_operand:DSI 2 "const_int_operand"    " K, K,Os,C"))
                   (const_int 0)))
!    (set (match_operand:DSI 0 "nonimmediate_operand"                    "=d, d,d, S")
!         (plus:DSI (match_dup 1) (match_dup 2)))]
    "s390_match_ccmode (insn, CCAmode)
     && (CONST_OK_FOR_CONSTRAINT_P (INTVAL (operands[2]), 'K', \"K\")
         || (CONST_OK_FOR_CONSTRAINT_P (INTVAL (operands[2]), 'O', \"Os\")
!            && INTVAL (operands[2]) != -0x7fffffff - 1))"
    "@
     a<g>hi\t%0,%h2
     a<g>hik\t%0,%1,%h2
***************
*** 6617,6628 ****
    [(parallel
      [(set (reg:CCO CC_REGNUM)
  	  (compare:CCO (plus:<DBL>
! 			(sign_extend:<DBL> (match_operand:GPR 1 "nonimmediate_operand"))
  			(match_dup 4))
! 		       (sign_extend:<DBL> (plus:GPR (match_dup 1)
! 						    (match_operand:GPR 2 "general_operand")))))
!      (set (match_operand:GPR 0 "nonimmediate_operand")
! 	  (plus:GPR (match_dup 1) (match_dup 2)))])
     (set (pc)
  	(if_then_else (ne (reg:CCO CC_REGNUM) (const_int 0))
  		      (label_ref (match_operand 3))
--- 6083,6094 ----
    [(parallel
      [(set (reg:CCO CC_REGNUM)
  	  (compare:CCO (plus:<DBL>
! 			(sign_extend:<DBL> (match_operand:DSI 1 "nonimmediate_operand"))
  			(match_dup 4))
! 		       (sign_extend:<DBL> (plus:DSI (match_dup 1)
! 						    (match_operand:DSI 2 "general_operand")))))
!      (set (match_operand:DSI 0 "nonimmediate_operand")
! 	  (plus:DSI (match_dup 1) (match_dup 2)))])
     (set (pc)
  	(if_then_else (ne (reg:CCO CC_REGNUM) (const_int 0))
  		      (label_ref (match_operand 3))
***************
*** 6631,6654 ****
  {
    if (CONSTANT_P (operands[2])
        && !addv_const_operand (operands[2], GET_MODE (operands[2])))
!     operands[2] = force_reg (<GPR:MODE>mode, operands[2]);
  
    if (GET_MODE (operands[2]) != VOIDmode)
      operands[4] = gen_rtx_SIGN_EXTEND (<DBL>mode, operands[2]);
    else
      /* This is what CSE does when propagating a constant into the pattern.  */
!     operands[4] = simplify_unary_operation (SIGN_EXTEND, <GPR:DBL>mode, operands[2], <GPR:MODE>mode);
  })
  
  ; ark, agrk, ar, ahi, ahik, aghik, a, ay, agr, aghi, ag, asi, agsi
  (define_insn "*addv<mode>3_ccoverflow"
    [(set (reg CC_REGNUM)
  	(compare (plus:<DBL>
! 		  (sign_extend:<DBL> (match_operand:GPR 1 "nonimmediate_operand" "%0,d,0,d,0,0,0"))
! 		  (sign_extend:<DBL> (match_operand:GPR 2 "general_operand"      " d,d,K,K,R,T,C")))
! 		 (sign_extend:<DBL> (plus:GPR (match_dup 1) (match_dup 2)))))
!    (set (match_operand:GPR                              0 "nonimmediate_operand" "=d,d,d,d,d,d,S")
!         (plus:GPR (match_dup 1) (match_dup 2)))]
    "s390_match_ccmode (insn, CCOmode)"
    "@
     a<g>r\t%0,%2
--- 6097,6120 ----
  {
    if (CONSTANT_P (operands[2])
        && !addv_const_operand (operands[2], GET_MODE (operands[2])))
!     operands[2] = force_reg (<DSI:MODE>mode, operands[2]);
  
    if (GET_MODE (operands[2]) != VOIDmode)
      operands[4] = gen_rtx_SIGN_EXTEND (<DBL>mode, operands[2]);
    else
      /* This is what CSE does when propagating a constant into the pattern.  */
!     operands[4] = simplify_unary_operation (SIGN_EXTEND, <DSI:DBL>mode, operands[2], <DSI:MODE>mode);
  })
  
  ; ark, agrk, ar, ahi, ahik, aghik, a, ay, agr, aghi, ag, asi, agsi
  (define_insn "*addv<mode>3_ccoverflow"
    [(set (reg CC_REGNUM)
  	(compare (plus:<DBL>
! 		  (sign_extend:<DBL> (match_operand:DSI 1 "nonimmediate_operand" "%0,d,0,d,0,0,0"))
! 		  (sign_extend:<DBL> (match_operand:DSI 2 "general_operand"      " d,d,K,K,R,T,C")))
! 		 (sign_extend:<DBL> (plus:DSI (match_dup 1) (match_dup 2)))))
!    (set (match_operand:DSI                              0 "nonimmediate_operand" "=d,d,d,d,d,d,S")
!         (plus:DSI (match_dup 1) (match_dup 2)))]
    "s390_match_ccmode (insn, CCOmode)"
    "@
     a<g>r\t%0,%2
***************
*** 6667,6677 ****
  (define_insn "*addv<mode>3_ccoverflow_const"
    [(set (reg CC_REGNUM)
  	(compare (plus:<DBL>
! 		  (sign_extend:<DBL> (match_operand:GPR 1 "nonimmediate_operand" "%0,d,0"))
  		  (match_operand:<DBL>                  2 "addv_const_operand"    "K,K,C"))
! 		 (sign_extend:<DBL> (plus:GPR (match_dup 1) (match_dup 2)))))
!    (set (match_operand:GPR                              0 "nonimmediate_operand" "=d,d,S")
!         (plus:GPR (match_dup 1) (match_dup 2)))]
    "s390_match_ccmode (insn, CCOmode)"
    "@
     a<g>hi\t%0,%h2
--- 6133,6143 ----
  (define_insn "*addv<mode>3_ccoverflow_const"
    [(set (reg CC_REGNUM)
  	(compare (plus:<DBL>
! 		  (sign_extend:<DBL> (match_operand:DSI 1 "nonimmediate_operand" "%0,d,0"))
  		  (match_operand:<DBL>                  2 "addv_const_operand"    "K,K,C"))
! 		 (sign_extend:<DBL> (plus:DSI (match_dup 1) (match_dup 2)))))
!    (set (match_operand:DSI                              0 "nonimmediate_operand" "=d,d,S")
!         (plus:DSI (match_dup 1) (match_dup 2)))]
    "s390_match_ccmode (insn, CCOmode)"
    "@
     a<g>hi\t%0,%h2
***************
*** 6747,6753 ****
    [(set (match_operand:DI 0 "register_operand" "")
          (plus:DI (match_operand:DI 1 "register_operand" "")
  		 (match_operand:DI 2 "nonmemory_operand" "")))]
!   "TARGET_64BIT"
  {
    if (GET_CODE (operands[2]) == CONST_INT)
      {
--- 6213,6219 ----
    [(set (match_operand:DI 0 "register_operand" "")
          (plus:DI (match_operand:DI 1 "register_operand" "")
  		 (match_operand:DI 2 "nonmemory_operand" "")))]
!   ""
  {
    if (GET_CODE (operands[2]) == CONST_INT)
      {
***************
*** 6764,6795 ****
      }
  })
  
- ; For 31 bit we have to prevent the generated pattern from matching
- ; normal ADDs since la only does a 31 bit add.  This is supposed to
- ; match "force_la_31".
- (define_expand "addptrsi3"
-   [(parallel
-     [(set (match_operand:SI 0 "register_operand" "")
- 	  (plus:SI (match_operand:SI 1 "register_operand" "")
- 		   (match_operand:SI 2 "nonmemory_operand" "")))
- 		   (use (const_int 0))])]
-   "!TARGET_64BIT"
- {
-   if (GET_CODE (operands[2]) == CONST_INT)
-     {
-       HOST_WIDE_INT c = INTVAL (operands[2]);
- 
-       if (!CONST_OK_FOR_CONSTRAINT_P (c, 'K', "K")
- 	  && !CONST_OK_FOR_CONSTRAINT_P (c, 'O', "Os"))
-         {
- 	  operands[2] = force_const_mem (SImode, operands[2]);
- 	  operands[2] = force_reg (SImode, operands[2]);
-         }
-       else if (!DISP_IN_RANGE (INTVAL (operands[2])))
-         operands[2] = force_reg (SImode, operands[2]);
-     }
- })
- 
  ;;
  ;;- Subtract instructions.
  ;;
--- 6230,6235 ----
***************
*** 6804,6810 ****
  	  (minus:TI (match_operand:TI 1 "register_operand" "")
  		    (match_operand:TI 2 "general_operand"  "") ) )
       (clobber (reg:CC CC_REGNUM))])]
!   "TARGET_ZARCH"
  {
    /* For z13 we have vsq which doesn't set CC.  */
    if (TARGET_VX)
--- 6244,6250 ----
  	  (minus:TI (match_operand:TI 1 "register_operand" "")
  		    (match_operand:TI 2 "general_operand"  "") ) )
       (clobber (reg:CC CC_REGNUM))])]
!   ""
  {
    /* For z13 we have vsq which doesn't set CC.  */
    if (TARGET_VX)
***************
*** 6822,6828 ****
          (minus:TI (match_operand:TI 1 "register_operand"   "0")
                    (match_operand:TI 2 "general_operand"   "do") ) )
     (clobber (reg:CC CC_REGNUM))]
!   "TARGET_ZARCH"
    "#"
    "&& reload_completed"
    [(parallel
--- 6262,6268 ----
          (minus:TI (match_operand:TI 1 "register_operand"   "0")
                    (match_operand:TI 2 "general_operand"   "do") ) )
     (clobber (reg:CC CC_REGNUM))]
!   ""
    "#"
    "&& reload_completed"
    [(parallel
***************
*** 6861,6867 ****
          (minus:DI (match_operand:DI 1 "register_operand" "0,0")
                    (sign_extend:DI (match_operand:SI 2 "general_operand" "d,T"))))
     (clobber (reg:CC CC_REGNUM))]
!   "TARGET_ZARCH"
    "@
     sgfr\t%0,%2
     sgf\t%0,%2"
--- 6301,6307 ----
          (minus:DI (match_operand:DI 1 "register_operand" "0,0")
                    (sign_extend:DI (match_operand:SI 2 "general_operand" "d,T"))))
     (clobber (reg:CC CC_REGNUM))]
!   ""
    "@
     sgfr\t%0,%2
     sgf\t%0,%2"
***************
*** 6876,6882 ****
                   (const_int 0)))
     (set (match_operand:DI 0 "register_operand" "=d,d")
          (minus:DI (match_dup 1) (zero_extend:DI (match_dup 2))))]
!   "s390_match_ccmode (insn, CCLmode) && TARGET_ZARCH"
    "@
     slgfr\t%0,%2
     slgf\t%0,%2"
--- 6316,6322 ----
                   (const_int 0)))
     (set (match_operand:DI 0 "register_operand" "=d,d")
          (minus:DI (match_dup 1) (zero_extend:DI (match_dup 2))))]
!   "s390_match_ccmode (insn, CCLmode)"
    "@
     slgfr\t%0,%2
     slgf\t%0,%2"
***************
*** 6889,6895 ****
                             (zero_extend:DI (match_operand:SI 2 "general_operand" "d,T")))
                   (const_int 0)))
     (clobber (match_scratch:DI 0 "=d,d"))]
!   "s390_match_ccmode (insn, CCLmode) && TARGET_ZARCH"
    "@
     slgfr\t%0,%2
     slgf\t%0,%2"
--- 6329,6335 ----
                             (zero_extend:DI (match_operand:SI 2 "general_operand" "d,T")))
                   (const_int 0)))
     (clobber (match_scratch:DI 0 "=d,d"))]
!   "s390_match_ccmode (insn, CCLmode)"
    "@
     slgfr\t%0,%2
     slgf\t%0,%2"
***************
*** 6901,6937 ****
          (minus:DI (match_operand:DI 1 "register_operand" "0,0")
                    (zero_extend:DI (match_operand:SI 2 "general_operand" "d,T"))))
     (clobber (reg:CC CC_REGNUM))]
!   "TARGET_ZARCH"
    "@
     slgfr\t%0,%2
     slgf\t%0,%2"
    [(set_attr "op_type"  "RRE,RXY")
     (set_attr "z10prop" "z10_super_c_E1,z10_super_E1")])
  
- (define_insn_and_split "*subdi3_31z"
-   [(set (match_operand:DI 0 "register_operand" "=&d")
-         (minus:DI (match_operand:DI 1 "register_operand" "0")
-                   (match_operand:DI 2 "general_operand" "do") ) )
-    (clobber (reg:CC CC_REGNUM))]
-   "!TARGET_ZARCH"
-   "#"
-   "&& reload_completed"
-   [(parallel
-     [(set (reg:CCL2 CC_REGNUM)
-           (compare:CCL2 (minus:SI (match_dup 7) (match_dup 8))
-                         (match_dup 7)))
-      (set (match_dup 6) (minus:SI (match_dup 7) (match_dup 8)))])
-    (parallel
-     [(set (match_dup 3) (minus:SI (minus:SI (match_dup 4) (match_dup 5))
-                                   (gtu:SI (reg:CCL2 CC_REGNUM) (const_int 0))))
-      (clobber (reg:CC CC_REGNUM))])]
-   "operands[3] = operand_subword (operands[0], 0, 0, DImode);
-    operands[4] = operand_subword (operands[1], 0, 0, DImode);
-    operands[5] = operand_subword (operands[2], 0, 0, DImode);
-    operands[6] = operand_subword (operands[0], 1, 0, DImode);
-    operands[7] = operand_subword (operands[1], 1, 0, DImode);
-    operands[8] = operand_subword (operands[2], 1, 0, DImode);")
- 
  ;
  ; subsi3 instruction pattern(s).
  ;
--- 6341,6353 ----
          (minus:DI (match_operand:DI 1 "register_operand" "0,0")
                    (zero_extend:DI (match_operand:SI 2 "general_operand" "d,T"))))
     (clobber (reg:CC CC_REGNUM))]
!   ""
    "@
     slgfr\t%0,%2
     slgf\t%0,%2"
    [(set_attr "op_type"  "RRE,RXY")
     (set_attr "z10prop" "z10_super_c_E1,z10_super_E1")])
  
  ;
  ; subsi3 instruction pattern(s).
  ;
***************
*** 6964,6972 ****
  
  ; sr, s, sy, sgr, sg, srk, sgrk
  (define_insn "*sub<mode>3"
!   [(set (match_operand:GPR 0 "register_operand"           "=d,d,d,d")
!         (minus:GPR (match_operand:GPR 1 "register_operand" "0,d,0,0")
! 		   (match_operand:GPR 2 "general_operand"  "d,d,R,T") ) )
     (clobber (reg:CC CC_REGNUM))]
    ""
    "@
--- 6380,6388 ----
  
  ; sr, s, sy, sgr, sg, srk, sgrk
  (define_insn "*sub<mode>3"
!   [(set (match_operand:DSI 0 "register_operand"           "=d,d,d,d")
!         (minus:DSI (match_operand:DSI 1 "register_operand" "0,d,0,0")
! 		   (match_operand:DSI 2 "general_operand"  "d,d,R,T") ) )
     (clobber (reg:CC CC_REGNUM))]
    ""
    "@
***************
*** 6981,6991 ****
  ; slr, sl, sly, slgr, slg, slrk, slgrk
  (define_insn "sub<mode>3_borrow_cc"
    [(set (reg:CCL2 CC_REGNUM)
!         (compare:CCL2 (minus:GPR (match_operand:GPR 1 "register_operand" "0,d,0,0")
! 				 (match_operand:GPR 2 "general_operand"  "d,d,R,T"))
  		      (match_dup 1)))
!    (set (match_operand:GPR 0 "register_operand"                         "=d,d,d,d")
!         (minus:GPR (match_dup 1) (match_dup 2)))]
    ""
    "@
     sl<g>r\t%0,%2
--- 6397,6407 ----
  ; slr, sl, sly, slgr, slg, slrk, slgrk
  (define_insn "sub<mode>3_borrow_cc"
    [(set (reg:CCL2 CC_REGNUM)
!         (compare:CCL2 (minus:DSI (match_operand:DSI 1 "register_operand" "0,d,0,0")
! 				 (match_operand:DSI 2 "general_operand"  "d,d,R,T"))
  		      (match_dup 1)))
!    (set (match_operand:DSI 0 "register_operand"                         "=d,d,d,d")
!         (minus:DSI (match_dup 1) (match_dup 2)))]
    ""
    "@
     sl<g>r\t%0,%2
***************
*** 6999,7008 ****
  ; slr, sl, sly, slgr, slg, slrk, slgrk
  (define_insn "*sub<mode>3_borrow_cconly"
    [(set (reg CC_REGNUM)
!         (compare (minus:GPR (match_operand:GPR 1 "register_operand" "0,d,0,0")
! 			    (match_operand:GPR 2 "general_operand"  "d,d,R,T"))
                   (match_dup 1)))
!    (clobber (match_scratch:GPR 0                                   "=d,d,d,d"))]
    "s390_match_ccmode (insn, CCL2mode)"
    "@
     sl<g>r\t%0,%2
--- 6415,6424 ----
  ; slr, sl, sly, slgr, slg, slrk, slgrk
  (define_insn "*sub<mode>3_borrow_cconly"
    [(set (reg CC_REGNUM)
!         (compare (minus:DSI (match_operand:DSI 1 "register_operand" "0,d,0,0")
! 			    (match_operand:DSI 2 "general_operand"  "d,d,R,T"))
                   (match_dup 1)))
!    (clobber (match_scratch:DSI 0                                   "=d,d,d,d"))]
    "s390_match_ccmode (insn, CCL2mode)"
    "@
     sl<g>r\t%0,%2
***************
*** 7016,7026 ****
  ; slr, sl, sly, slgr, slg, slrk, slgrk
  (define_insn "*sub<mode>3_cc"
    [(set (reg CC_REGNUM)
!         (compare (minus:GPR (match_operand:GPR 1 "register_operand" "0,d,0,0")
! 			    (match_operand:GPR 2 "general_operand"  "d,d,R,T"))
                   (const_int 0)))
!    (set (match_operand:GPR 0 "register_operand"                    "=d,d,d,d")
!         (minus:GPR (match_dup 1) (match_dup 2)))]
    "s390_match_ccmode (insn, CCLmode)"
    "@
     sl<g>r\t%0,%2
--- 6432,6442 ----
  ; slr, sl, sly, slgr, slg, slrk, slgrk
  (define_insn "*sub<mode>3_cc"
    [(set (reg CC_REGNUM)
!         (compare (minus:DSI (match_operand:DSI 1 "register_operand" "0,d,0,0")
! 			    (match_operand:DSI 2 "general_operand"  "d,d,R,T"))
                   (const_int 0)))
!    (set (match_operand:DSI 0 "register_operand"                    "=d,d,d,d")
!         (minus:DSI (match_dup 1) (match_dup 2)))]
    "s390_match_ccmode (insn, CCLmode)"
    "@
     sl<g>r\t%0,%2
***************
*** 7034,7043 ****
  ; slr, sl, sly, slgr, slg, slrk, slgrk
  (define_insn "*sub<mode>3_cc2"
    [(set (reg CC_REGNUM)
!         (compare (match_operand:GPR 1 "register_operand" "0,d,0,0")
!                  (match_operand:GPR 2 "general_operand"  "d,d,R,T")))
!    (set (match_operand:GPR 0 "register_operand"         "=d,d,d,d")
!         (minus:GPR (match_dup 1) (match_dup 2)))]
    "s390_match_ccmode (insn, CCL3mode)"
    "@
     sl<g>r\t%0,%2
--- 6450,6459 ----
  ; slr, sl, sly, slgr, slg, slrk, slgrk
  (define_insn "*sub<mode>3_cc2"
    [(set (reg CC_REGNUM)
!         (compare (match_operand:DSI 1 "register_operand" "0,d,0,0")
!                  (match_operand:DSI 2 "general_operand"  "d,d,R,T")))
!    (set (match_operand:DSI 0 "register_operand"         "=d,d,d,d")
!         (minus:DSI (match_dup 1) (match_dup 2)))]
    "s390_match_ccmode (insn, CCL3mode)"
    "@
     sl<g>r\t%0,%2
***************
*** 7051,7060 ****
  ; slr, sl, sly, slgr, slg, slrk, slgrk
  (define_insn "*sub<mode>3_cconly"
    [(set (reg CC_REGNUM)
!         (compare (minus:GPR (match_operand:GPR 1 "register_operand" "0,d,0,0")
! 			    (match_operand:GPR 2 "general_operand"  "d,d,R,T"))
                   (const_int 0)))
!    (clobber (match_scratch:GPR 0                                   "=d,d,d,d"))]
    "s390_match_ccmode (insn, CCLmode)"
    "@
     sl<g>r\t%0,%2
--- 6467,6476 ----
  ; slr, sl, sly, slgr, slg, slrk, slgrk
  (define_insn "*sub<mode>3_cconly"
    [(set (reg CC_REGNUM)
!         (compare (minus:DSI (match_operand:DSI 1 "register_operand" "0,d,0,0")
! 			    (match_operand:DSI 2 "general_operand"  "d,d,R,T"))
                   (const_int 0)))
!    (clobber (match_scratch:DSI 0                                   "=d,d,d,d"))]
    "s390_match_ccmode (insn, CCLmode)"
    "@
     sl<g>r\t%0,%2
***************
*** 7069,7077 ****
  ; slr, sl, sly, slgr, slg, slrk, slgrk
  (define_insn "*sub<mode>3_cconly2"
    [(set (reg CC_REGNUM)
!         (compare (match_operand:GPR 1 "register_operand" "0,d,0,0")
!                  (match_operand:GPR 2 "general_operand"  "d,d,R,T")))
!    (clobber (match_scratch:GPR 0                        "=d,d,d,d"))]
    "s390_match_ccmode (insn, CCL3mode)"
    "@
     sl<g>r\t%0,%2
--- 6485,6493 ----
  ; slr, sl, sly, slgr, slg, slrk, slgrk
  (define_insn "*sub<mode>3_cconly2"
    [(set (reg CC_REGNUM)
!         (compare (match_operand:DSI 1 "register_operand" "0,d,0,0")
!                  (match_operand:DSI 2 "general_operand"  "d,d,R,T")))
!    (clobber (match_scratch:DSI 0                        "=d,d,d,d"))]
    "s390_match_ccmode (insn, CCL3mode)"
    "@
     sl<g>r\t%0,%2
***************
*** 7096,7106 ****
    [(parallel
      [(set (reg:CCO CC_REGNUM)
  	  (compare:CCO (minus:<DBL>
! 			(sign_extend:<DBL> (match_operand:GPR 1 "nonimmediate_operand"))
! 			(sign_extend:<DBL> (match_operand:GPR 2 "nonimmediate_operand")))
! 		       (sign_extend:<DBL> (minus:GPR (match_dup 1) (match_dup 2)))))
!      (set (match_operand:GPR                                  0 "nonimmediate_operand")
!           (minus:GPR (match_dup 1) (match_dup 2)))])
     (set (pc)
          (if_then_else (ne (reg:CCO CC_REGNUM) (const_int 0))
  		      (label_ref (match_operand 3))
--- 6512,6522 ----
    [(parallel
      [(set (reg:CCO CC_REGNUM)
  	  (compare:CCO (minus:<DBL>
! 			(sign_extend:<DBL> (match_operand:DSI 1 "nonimmediate_operand"))
! 			(sign_extend:<DBL> (match_operand:DSI 2 "nonimmediate_operand")))
! 		       (sign_extend:<DBL> (minus:DSI (match_dup 1) (match_dup 2)))))
!      (set (match_operand:DSI                                  0 "nonimmediate_operand")
!           (minus:DSI (match_dup 1) (match_dup 2)))])
     (set (pc)
          (if_then_else (ne (reg:CCO CC_REGNUM) (const_int 0))
  		      (label_ref (match_operand 3))
***************
*** 7111,7121 ****
  (define_insn "*subv<mode>3_ccoverflow"
    [(set (reg CC_REGNUM)
  	(compare (minus:<DBL>
! 		  (sign_extend:<DBL> (match_operand:GPR 1 "nonimmediate_operand" "0,d,0,0"))
! 		  (sign_extend:<DBL> (match_operand:GPR 2 "nonimmediate_operand" "d,d,R,T")))
! 		 (sign_extend:<DBL> (minus:GPR (match_dup 1) (match_dup 2)))))
!    (set (match_operand:GPR                              0 "register_operand"    "=d,d,d,d")
!         (minus:GPR (match_dup 1) (match_dup 2)))]
    "s390_match_ccmode (insn, CCOmode)"
    "@
     s<g>r\t%0,%2
--- 6527,6537 ----
  (define_insn "*subv<mode>3_ccoverflow"
    [(set (reg CC_REGNUM)
  	(compare (minus:<DBL>
! 		  (sign_extend:<DBL> (match_operand:DSI 1 "nonimmediate_operand" "0,d,0,0"))
! 		  (sign_extend:<DBL> (match_operand:DSI 2 "nonimmediate_operand" "d,d,R,T")))
! 		 (sign_extend:<DBL> (minus:DSI (match_dup 1) (match_dup 2)))))
!    (set (match_operand:DSI                              0 "register_operand"    "=d,d,d,d")
!         (minus:DSI (match_dup 1) (match_dup 2)))]
    "s390_match_ccmode (insn, CCOmode)"
    "@
     s<g>r\t%0,%2
***************
*** 7193,7203 ****
  ;
  
  (define_expand "uaddc<mode>5"
!   [(match_operand:GPR 0 "register_operand")
!    (match_operand:GPR 1 "nonimmediate_operand")
!    (match_operand:GPR 2 "nonimmediate_operand")
!    (match_operand:GPR 3 "nonimmediate_operand")
!    (match_operand:GPR 4 "general_operand")]
    "TARGET_Z196"
  {
    if (operands[4] == const0_rtx)
--- 6609,6619 ----
  ;
  
  (define_expand "uaddc<mode>5"
!   [(match_operand:DSI 0 "register_operand")
!    (match_operand:DSI 1 "nonimmediate_operand")
!    (match_operand:DSI 2 "nonimmediate_operand")
!    (match_operand:DSI 3 "nonimmediate_operand")
!    (match_operand:DSI 4 "general_operand")]
    "TARGET_Z196"
  {
    if (operands[4] == const0_rtx)
***************
*** 7222,7233 ****
  (define_insn "add<mode>3_alc_carry1_cc"
    [(set (reg:CCL1 CC_REGNUM)
          (compare:CCL1
!           (plus:GPR (plus:GPR (match_operand:GPR 3 "s390_alc_comparison" "")
!                               (match_operand:GPR 1 "nonimmediate_operand" "%0,0"))
!                     (match_operand:GPR 2 "general_operand" "d,T"))
            (match_dup 1)))
!    (set (match_operand:GPR 0 "register_operand" "=d,d")
!         (plus:GPR (plus:GPR (match_dup 3) (match_dup 1)) (match_dup 2)))]
    ""
    "@
     alc<g>r\t%0,%2
--- 6638,6649 ----
  (define_insn "add<mode>3_alc_carry1_cc"
    [(set (reg:CCL1 CC_REGNUM)
          (compare:CCL1
!           (plus:DSI (plus:DSI (match_operand:DSI 3 "s390_alc_comparison" "")
!                               (match_operand:DSI 1 "nonimmediate_operand" "%0,0"))
!                     (match_operand:DSI 2 "general_operand" "d,T"))
            (match_dup 1)))
!    (set (match_operand:DSI 0 "register_operand" "=d,d")
!         (plus:DSI (plus:DSI (match_dup 3) (match_dup 1)) (match_dup 2)))]
    ""
    "@
     alc<g>r\t%0,%2
***************
*** 7239,7249 ****
  (define_insn "*add<mode>3_alc_carry1_cconly"
    [(set (reg CC_REGNUM)
          (compare
!           (plus:GPR (plus:GPR (match_operand:GPR 3 "s390_alc_comparison" "")
!                               (match_operand:GPR 1 "nonimmediate_operand" "%0,0"))
!                     (match_operand:GPR 2 "general_operand" "d,T"))
            (match_dup 1)))
!    (clobber (match_scratch:GPR 0 "=d,d"))]
    "s390_match_ccmode (insn, CCL1mode)"
    "@
     alc<g>r\t%0,%2
--- 6655,6665 ----
  (define_insn "*add<mode>3_alc_carry1_cconly"
    [(set (reg CC_REGNUM)
          (compare
!           (plus:DSI (plus:DSI (match_operand:DSI 3 "s390_alc_comparison" "")
!                               (match_operand:DSI 1 "nonimmediate_operand" "%0,0"))
!                     (match_operand:DSI 2 "general_operand" "d,T"))
            (match_dup 1)))
!    (clobber (match_scratch:DSI 0 "=d,d"))]
    "s390_match_ccmode (insn, CCL1mode)"
    "@
     alc<g>r\t%0,%2
***************
*** 7257,7268 ****
  (define_insn "*add<mode>3_alc_carry2_cc"
    [(set (reg CC_REGNUM)
          (compare
!           (plus:GPR (plus:GPR (match_operand:GPR 3 "s390_alc_comparison" "")
!                               (match_operand:GPR 1 "nonimmediate_operand" "%0,0"))
!                     (match_operand:GPR 2 "general_operand" "d,T"))
            (match_dup 2)))
!    (set (match_operand:GPR 0 "register_operand" "=d,d")
!         (plus:GPR (plus:GPR (match_dup 3) (match_dup 1)) (match_dup 2)))]
    "s390_match_ccmode (insn, CCL1mode)"
    "@
     alc<g>r\t%0,%2
--- 6673,6684 ----
  (define_insn "*add<mode>3_alc_carry2_cc"
    [(set (reg CC_REGNUM)
          (compare
!           (plus:DSI (plus:DSI (match_operand:DSI 3 "s390_alc_comparison" "")
!                               (match_operand:DSI 1 "nonimmediate_operand" "%0,0"))
!                     (match_operand:DSI 2 "general_operand" "d,T"))
            (match_dup 2)))
!    (set (match_operand:DSI 0 "register_operand" "=d,d")
!         (plus:DSI (plus:DSI (match_dup 3) (match_dup 1)) (match_dup 2)))]
    "s390_match_ccmode (insn, CCL1mode)"
    "@
     alc<g>r\t%0,%2
***************
*** 7273,7283 ****
  (define_insn "*add<mode>3_alc_carry2_cconly"
    [(set (reg CC_REGNUM)
          (compare
!           (plus:GPR (plus:GPR (match_operand:GPR 3 "s390_alc_comparison" "")
!                               (match_operand:GPR 1 "nonimmediate_operand" "%0,0"))
!                     (match_operand:GPR 2 "general_operand" "d,T"))
            (match_dup 2)))
!    (clobber (match_scratch:GPR 0 "=d,d"))]
    "s390_match_ccmode (insn, CCL1mode)"
    "@
     alc<g>r\t%0,%2
--- 6689,6699 ----
  (define_insn "*add<mode>3_alc_carry2_cconly"
    [(set (reg CC_REGNUM)
          (compare
!           (plus:DSI (plus:DSI (match_operand:DSI 3 "s390_alc_comparison" "")
!                               (match_operand:DSI 1 "nonimmediate_operand" "%0,0"))
!                     (match_operand:DSI 2 "general_operand" "d,T"))
            (match_dup 2)))
!    (clobber (match_scratch:DSI 0 "=d,d"))]
    "s390_match_ccmode (insn, CCL1mode)"
    "@
     alc<g>r\t%0,%2
***************
*** 7288,7299 ****
  (define_insn "*add<mode>3_alc_cc"
    [(set (reg CC_REGNUM)
          (compare
!           (plus:GPR (plus:GPR (match_operand:GPR 3 "s390_alc_comparison" "")
!                               (match_operand:GPR 1 "nonimmediate_operand" "%0,0"))
!                     (match_operand:GPR 2 "general_operand" "d,T"))
            (const_int 0)))
!    (set (match_operand:GPR 0 "register_operand" "=d,d")
!         (plus:GPR (plus:GPR (match_dup 3) (match_dup 1)) (match_dup 2)))]
    "s390_match_ccmode (insn, CCLmode)"
    "@
     alc<g>r\t%0,%2
--- 6704,6715 ----
  (define_insn "*add<mode>3_alc_cc"
    [(set (reg CC_REGNUM)
          (compare
!           (plus:DSI (plus:DSI (match_operand:DSI 3 "s390_alc_comparison" "")
!                               (match_operand:DSI 1 "nonimmediate_operand" "%0,0"))
!                     (match_operand:DSI 2 "general_operand" "d,T"))
            (const_int 0)))
!    (set (match_operand:DSI 0 "register_operand" "=d,d")
!         (plus:DSI (plus:DSI (match_dup 3) (match_dup 1)) (match_dup 2)))]
    "s390_match_ccmode (insn, CCLmode)"
    "@
     alc<g>r\t%0,%2
***************
*** 7302,7311 ****
  
  ; alcr, alc, alcgr, alcg
  (define_insn "*add<mode>3_alc"
!   [(set (match_operand:GPR 0 "register_operand" "=d,d")
!         (plus:GPR (plus:GPR (match_operand:GPR 3 "s390_alc_comparison" "")
!                             (match_operand:GPR 1 "nonimmediate_operand" "%0,0"))
!                   (match_operand:GPR 2 "general_operand" "d,T")))
     (clobber (reg:CC CC_REGNUM))]
    ""
    "@
--- 6718,6727 ----
  
  ; alcr, alc, alcgr, alcg
  (define_insn "*add<mode>3_alc"
!   [(set (match_operand:DSI 0 "register_operand" "=d,d")
!         (plus:DSI (plus:DSI (match_operand:DSI 3 "s390_alc_comparison" "")
!                             (match_operand:DSI 1 "nonimmediate_operand" "%0,0"))
!                   (match_operand:DSI 2 "general_operand" "d,T")))
     (clobber (reg:CC CC_REGNUM))]
    ""
    "@
***************
*** 7314,7324 ****
    [(set_attr "op_type"  "RRE,RXY")])
  
  (define_expand "usubc<mode>5"
!   [(match_operand:GPR 0 "register_operand")
!    (match_operand:GPR 1 "nonimmediate_operand")
!    (match_operand:GPR 2 "nonimmediate_operand")
!    (match_operand:GPR 3 "nonimmediate_operand")
!    (match_operand:GPR 4 "general_operand")]
    "TARGET_Z196"
  {
    if (operands[4] == const0_rtx)
--- 6730,6740 ----
    [(set_attr "op_type"  "RRE,RXY")])
  
  (define_expand "usubc<mode>5"
!   [(match_operand:DSI 0 "register_operand")
!    (match_operand:DSI 1 "nonimmediate_operand")
!    (match_operand:DSI 2 "nonimmediate_operand")
!    (match_operand:DSI 3 "nonimmediate_operand")
!    (match_operand:DSI 4 "general_operand")]
    "TARGET_Z196"
  {
    if (operands[4] == const0_rtx)
***************
*** 7342,7353 ****
  (define_insn "*sub<mode>3_slb_cc"
    [(set (reg CC_REGNUM)
          (compare
!           (minus:GPR (minus:GPR (match_operand:GPR 1 "nonimmediate_operand" "0,0")
!                                 (match_operand:GPR 2 "general_operand" "d,T"))
!                      (match_operand:GPR 3 "s390_slb_comparison" ""))
            (const_int 0)))
!    (set (match_operand:GPR 0 "register_operand" "=d,d")
!         (minus:GPR (minus:GPR (match_dup 1) (match_dup 2)) (match_dup 3)))]
    "s390_match_ccmode (insn, CCLmode)"
    "@
     slb<g>r\t%0,%2
--- 6758,6769 ----
  (define_insn "*sub<mode>3_slb_cc"
    [(set (reg CC_REGNUM)
          (compare
!           (minus:DSI (minus:DSI (match_operand:DSI 1 "nonimmediate_operand" "0,0")
!                                 (match_operand:DSI 2 "general_operand" "d,T"))
!                      (match_operand:DSI 3 "s390_slb_comparison" ""))
            (const_int 0)))
!    (set (match_operand:DSI 0 "register_operand" "=d,d")
!         (minus:DSI (minus:DSI (match_dup 1) (match_dup 2)) (match_dup 3)))]
    "s390_match_ccmode (insn, CCLmode)"
    "@
     slb<g>r\t%0,%2
***************
*** 7357,7366 ****
  
  ; slbr, slb, slbgr, slbg
  (define_insn "*sub<mode>3_slb"
!   [(set (match_operand:GPR 0 "register_operand" "=d,d")
!         (minus:GPR (minus:GPR (match_operand:GPR 1 "nonimmediate_operand" "0,0")
!                               (match_operand:GPR 2 "general_operand" "d,T"))
!                    (match_operand:GPR 3 "s390_slb_comparison" "")))
     (clobber (reg:CC CC_REGNUM))]
    ""
    "@
--- 6773,6782 ----
  
  ; slbr, slb, slbgr, slbg
  (define_insn "*sub<mode>3_slb"
!   [(set (match_operand:DSI 0 "register_operand" "=d,d")
!         (minus:DSI (minus:DSI (match_operand:DSI 1 "nonimmediate_operand" "0,0")
!                               (match_operand:DSI 2 "general_operand" "d,T"))
!                    (match_operand:DSI 3 "s390_slb_comparison" "")))
     (clobber (reg:CC CC_REGNUM))]
    ""
    "@
***************
*** 7373,7384 ****
  (define_insn "sub<mode>3_slb_borrow1_cc"
    [(set (reg:CCL2 CC_REGNUM)
  	(compare:CCL2
! 	  (minus:GPR (minus:GPR (match_operand:GPR 1 "nonimmediate_operand" "0,0")
! 				(match_operand:GPR 2 "general_operand" "d,T"))
! 		     (match_operand:GPR 3 "s390_slb_comparison" ""))
  	  (match_dup 1)))
!    (set (match_operand:GPR 0 "register_operand" "=d,d")
! 	(minus:GPR (minus:GPR (match_dup 1) (match_dup 2)) (match_dup 3)))]
    ""
    "@
     slb<g>r\t%0,%2
--- 6789,6800 ----
  (define_insn "sub<mode>3_slb_borrow1_cc"
    [(set (reg:CCL2 CC_REGNUM)
  	(compare:CCL2
! 	  (minus:DSI (minus:DSI (match_operand:DSI 1 "nonimmediate_operand" "0,0")
! 				(match_operand:DSI 2 "general_operand" "d,T"))
! 		     (match_operand:DSI 3 "s390_slb_comparison" ""))
  	  (match_dup 1)))
!    (set (match_operand:DSI 0 "register_operand" "=d,d")
! 	(minus:DSI (minus:DSI (match_dup 1) (match_dup 2)) (match_dup 3)))]
    ""
    "@
     slb<g>r\t%0,%2
***************
*** 7387,7396 ****
     (set_attr "z10prop" "z10_c,*")])
  
  (define_expand "add<mode>cc"
!   [(match_operand:GPR 0 "register_operand" "")
     (match_operand 1 "comparison_operator" "")
!    (match_operand:GPR 2 "register_operand" "")
!    (match_operand:GPR 3 "const_int_operand" "")]
    ""
    "if (!s390_expand_addcc (GET_CODE (operands[1]),
  			   XEXP (operands[1], 0), XEXP (operands[1], 1),
--- 6803,6812 ----
     (set_attr "z10prop" "z10_c,*")])
  
  (define_expand "add<mode>cc"
!   [(match_operand:DSI 0 "register_operand" "")
     (match_operand 1 "comparison_operator" "")
!    (match_operand:DSI 2 "register_operand" "")
!    (match_operand:DSI 3 "const_int_operand" "")]
    ""
    "if (!s390_expand_addcc (GET_CODE (operands[1]),
  			   XEXP (operands[1], 0), XEXP (operands[1], 1),
***************
*** 7402,7434 ****
  ;
  
  (define_insn_and_split "*scond<mode>"
!   [(set (match_operand:GPR 0 "register_operand" "=&d")
!         (match_operand:GPR 1 "s390_alc_comparison" ""))
     (clobber (reg:CC CC_REGNUM))]
    ""
    "#"
    "&& reload_completed"
    [(set (match_dup 0) (const_int 0))
     (parallel
!     [(set (match_dup 0) (plus:GPR (plus:GPR (match_dup 1) (match_dup 0))
                                    (match_dup 0)))
       (clobber (reg:CC CC_REGNUM))])]
    "")
  
  (define_insn_and_split "*scond<mode>_neg"
!   [(set (match_operand:GPR 0 "register_operand" "=&d")
!         (match_operand:GPR 1 "s390_slb_comparison" ""))
     (clobber (reg:CC CC_REGNUM))]
    ""
    "#"
    "&& reload_completed"
    [(set (match_dup 0) (const_int 0))
     (parallel
!     [(set (match_dup 0) (minus:GPR (minus:GPR (match_dup 0) (match_dup 0))
                                     (match_dup 1)))
       (clobber (reg:CC CC_REGNUM))])
     (parallel
!     [(set (match_dup 0) (neg:GPR (match_dup 0)))
       (clobber (reg:CC CC_REGNUM))])]
    "")
  
--- 6818,6850 ----
  ;
  
  (define_insn_and_split "*scond<mode>"
!   [(set (match_operand:DSI 0 "register_operand" "=&d")
!         (match_operand:DSI 1 "s390_alc_comparison" ""))
     (clobber (reg:CC CC_REGNUM))]
    ""
    "#"
    "&& reload_completed"
    [(set (match_dup 0) (const_int 0))
     (parallel
!     [(set (match_dup 0) (plus:DSI (plus:DSI (match_dup 1) (match_dup 0))
                                    (match_dup 0)))
       (clobber (reg:CC CC_REGNUM))])]
    "")
  
  (define_insn_and_split "*scond<mode>_neg"
!   [(set (match_operand:DSI 0 "register_operand" "=&d")
!         (match_operand:DSI 1 "s390_slb_comparison" ""))
     (clobber (reg:CC CC_REGNUM))]
    ""
    "#"
    "&& reload_completed"
    [(set (match_dup 0) (const_int 0))
     (parallel
!     [(set (match_dup 0) (minus:DSI (minus:DSI (match_dup 0) (match_dup 0))
                                     (match_dup 1)))
       (clobber (reg:CC CC_REGNUM))])
     (parallel
!     [(set (match_dup 0) (neg:DSI (match_dup 0)))
       (clobber (reg:CC CC_REGNUM))])]
    "")
  
***************
*** 7436,7443 ****
  (define_expand "cstore<mode>4"
    [(set (match_operand:SI 0 "register_operand" "")
          (match_operator:SI 1 "s390_scond_operator"
!   	 [(match_operand:GPR 2 "register_operand" "")
!           (match_operand:GPR 3 "general_operand" "")]))]
    ""
    "if (!s390_expand_addcc (GET_CODE (operands[1]), operands[2], operands[3],
  			   operands[0], const0_rtx, const1_rtx)) FAIL; DONE;")
--- 6852,6859 ----
  (define_expand "cstore<mode>4"
    [(set (match_operand:SI 0 "register_operand" "")
          (match_operator:SI 1 "s390_scond_operator"
! 	 [(match_operand:DSI 2 "register_operand" "")
!           (match_operand:DSI 3 "general_operand" "")]))]
    ""
    "if (!s390_expand_addcc (GET_CODE (operands[1]), operands[2], operands[3],
  			   operands[0], const0_rtx, const1_rtx)) FAIL; DONE;")
***************
*** 7486,7493 ****
  
  ; Such patterns get directly emitted by noce_emit_store_flag.
  (define_insn_and_split "*cstorecc<mode>_z13"
!   [(set (match_operand:GPR  0 "register_operand"                "=&d")
! 	(match_operator:GPR 1 "s390_comparison"
  			    [(match_operand 2 "cc_reg_operand"    "c")
  			     (match_operand 3 "const_int_operand"  "")]))]
    "TARGET_Z13"
--- 6902,6909 ----
  
  ; Such patterns get directly emitted by noce_emit_store_flag.
  (define_insn_and_split "*cstorecc<mode>_z13"
!   [(set (match_operand:DSI  0 "register_operand"                "=&d")
! 	(match_operator:DSI 1 "s390_comparison"
  			    [(match_operand 2 "cc_reg_operand"    "c")
  			     (match_operand 3 "const_int_operand"  "")]))]
    "TARGET_Z13"
***************
*** 7495,7501 ****
    "reload_completed"
    [(set (match_dup 0) (const_int 0))
     (set (match_dup 0)
! 	(if_then_else:GPR
  	 (match_op_dup 1 [(match_dup 2) (match_dup 3)])
  	 (const_int 1)
  	 (match_dup 0)))])
--- 6911,6917 ----
    "reload_completed"
    [(set (match_dup 0) (const_int 0))
     (set (match_dup 0)
! 	(if_then_else:DSI
  	 (match_op_dup 1 [(match_dup 2) (match_dup 3)])
  	 (const_int 1)
  	 (match_dup 0)))])
***************
*** 7505,7514 ****
  ;;
  
  (define_expand "mov<mode>cc"
!   [(set (match_operand:GPR 0 "nonimmediate_operand" "")
! 	(if_then_else:GPR (match_operand 1 "comparison_operator" "")
! 			  (match_operand:GPR 2 "loc_operand" "")
! 			  (match_operand:GPR 3 "loc_operand" "")))]
    "TARGET_Z196"
  {
    if (!TARGET_Z13 && CONSTANT_P (operands[2]))
--- 6921,6930 ----
  ;;
  
  (define_expand "mov<mode>cc"
!   [(set (match_operand:DSI 0 "nonimmediate_operand" "")
! 	(if_then_else:DSI (match_operand 1 "comparison_operator" "")
! 			  (match_operand:DSI 2 "loc_operand" "")
! 			  (match_operand:DSI 3 "loc_operand" "")))]
    "TARGET_Z196"
  {
    if (!TARGET_Z13 && CONSTANT_P (operands[2]))
***************
*** 7566,7578 ****
  
  ; locr, loc, stoc, locgr, locg, stocg, lochi, locghi, selr, selgr
  (define_insn "*mov<mode>cc"
!   [(set (match_operand:GPR 0 "nonimmediate_operand" "=d,d,d,d,d,d,d,S,S")
! 	(if_then_else:GPR
  	  (match_operator 1 "s390_comparison"
  	    [(match_operand 2 "cc_reg_operand"      " c,c,c,c,c,c,c,c,c")
  	     (match_operand 5 "const_int_operand"   "")])
! 	  (match_operand:GPR 3 "loc_operand"        " d,0,d,S,0,K,0,d,0")
! 	  (match_operand:GPR 4 "loc_operand"        " 0,d,d,0,S,0,K,0,d")))]
    "TARGET_Z196"
    "@
     loc<g>r%C1\t%0,%3
--- 6982,6994 ----
  
  ; locr, loc, stoc, locgr, locg, stocg, lochi, locghi, selr, selgr
  (define_insn "*mov<mode>cc"
!   [(set (match_operand:DSI 0 "nonimmediate_operand" "=d,d,d,d,d,d,d,S,S")
! 	(if_then_else:DSI
  	  (match_operator 1 "s390_comparison"
  	    [(match_operand 2 "cc_reg_operand"      " c,c,c,c,c,c,c,c,c")
  	     (match_operand 5 "const_int_operand"   "")])
! 	  (match_operand:DSI 3 "loc_operand"        " d,0,d,S,0,K,0,d,0")
! 	  (match_operand:DSI 4 "loc_operand"        " 0,d,d,0,S,0,K,0,d")))]
    "TARGET_Z196"
    "@
     loc<g>r%C1\t%0,%3
***************
*** 7601,7613 ****
  	  (mult:DI (match_operand:DI 1 "nonimmediate_operand")
  		   (match_operand:DI 2 "general_operand")))
       (clobber (reg:CC CC_REGNUM))])]
!   "TARGET_ZARCH")
  
  (define_insn "*muldi3_sign"
    [(set (match_operand:DI 0 "register_operand" "=d,d")
          (mult:DI (sign_extend:DI (match_operand:SI 2 "general_operand" "d,T"))
                   (match_operand:DI 1 "register_operand" "0,0")))]
!   "TARGET_ZARCH"
    "@
     msgfr\t%0,%2
     msgf\t%0,%2"
--- 7017,7029 ----
  	  (mult:DI (match_operand:DI 1 "nonimmediate_operand")
  		   (match_operand:DI 2 "general_operand")))
       (clobber (reg:CC CC_REGNUM))])]
!   "")
  
  (define_insn "*muldi3_sign"
    [(set (match_operand:DI 0 "register_operand" "=d,d")
          (mult:DI (sign_extend:DI (match_operand:SI 2 "general_operand" "d,T"))
                   (match_operand:DI 1 "register_operand" "0,0")))]
!   ""
    "@
     msgfr\t%0,%2
     msgf\t%0,%2"
***************
*** 7619,7625 ****
  	(mult:DI (match_operand:DI 1 "nonimmediate_operand" "%0,d,0,0,0")
  		 (match_operand:DI 2 "general_operand"       "d,d,K,T,Os")))
     (clobber (match_scratch:CC      3                        "=X,c,X,X,X"))]
!   "TARGET_ZARCH"
    "@
     msgr\t%0,%2
     msgrkc\t%0,%1,%2
--- 7035,7041 ----
  	(mult:DI (match_operand:DI 1 "nonimmediate_operand" "%0,d,0,0,0")
  		 (match_operand:DI 2 "general_operand"       "d,d,K,T,Os")))
     (clobber (match_scratch:CC      3                        "=X,c,X,X,X"))]
!   ""
    "@
     msgr\t%0,%2
     msgrkc\t%0,%1,%2
***************
*** 7709,7739 ****
  ; mulsidi3 instruction pattern(s).
  ;
  
- (define_insn "mulsidi3"
-   [(set (match_operand:DI 0 "register_operand" "=d,d,d")
-         (mult:DI (sign_extend:DI
- 	           (match_operand:SI 1 "register_operand" "%0,0,0"))
-                  (sign_extend:DI
- 	           (match_operand:SI 2 "nonimmediate_operand" "d,R,T"))))]
-   "!TARGET_ZARCH"
-   "@
-    mr\t%0,%2
-    m\t%0,%2
-    mfy\t%0,%2"
-   [(set_attr "op_type"      "RR,RX,RXY")
-    (set_attr "type"         "imulsi")
-    (set_attr "cpu_facility" "*,*,z10")])
- 
  ; Jump to label OP3 if OP1 * OP2 results in a signed overflow
  (define_expand "mulv<mode>4"
    [(parallel
      [(set (reg:CCO CC_REGNUM)
  	  (compare:CCO (mult:<DBL>
! 			 (sign_extend:<DBL> (match_operand:GPR 1 "register_operand"))
! 			 (sign_extend:<DBL> (match_operand:GPR 2 "nonimmediate_operand")))
! 			(sign_extend:<DBL> (mult:GPR (match_dup 1) (match_dup 2)))))
!      (set (match_operand:GPR 0 "register_operand")
!           (mult:GPR (match_dup 1) (match_dup 2)))])
     (set (pc)
          (if_then_else (ne (reg:CCO CC_REGNUM) (const_int 0))
  		      (label_ref (match_operand 3))
--- 7125,7140 ----
  ; mulsidi3 instruction pattern(s).
  ;
  
  ; Jump to label OP3 if OP1 * OP2 results in a signed overflow
  (define_expand "mulv<mode>4"
    [(parallel
      [(set (reg:CCO CC_REGNUM)
  	  (compare:CCO (mult:<DBL>
! 			 (sign_extend:<DBL> (match_operand:DSI 1 "register_operand"))
! 			 (sign_extend:<DBL> (match_operand:DSI 2 "nonimmediate_operand")))
! 			(sign_extend:<DBL> (mult:DSI (match_dup 1) (match_dup 2)))))
!      (set (match_operand:DSI 0 "register_operand")
!           (mult:DSI (match_dup 1) (match_dup 2)))])
     (set (pc)
          (if_then_else (ne (reg:CCO CC_REGNUM) (const_int 0))
  		      (label_ref (match_operand 3))
***************
*** 7744,7754 ****
  (define_insn "*mulv<mode>3_ccoverflow"
    [(set (reg CC_REGNUM)
  	(compare (mult:<DBL>
! 		  (sign_extend:<DBL> (match_operand:GPR 1 "register_operand"     "%d,0"))
! 		  (sign_extend:<DBL> (match_operand:GPR 2 "nonimmediate_operand" " d,T")))
! 		 (sign_extend:<DBL> (mult:GPR (match_dup 1) (match_dup 2)))))
!    (set (match_operand:GPR                              0 "register_operand"     "=d,d")
!         (mult:GPR (match_dup 1) (match_dup 2)))]
    "s390_match_ccmode (insn, CCOmode) && TARGET_Z14"
    "@
     ms<g>rkc\t%0,%1,%2
--- 7145,7155 ----
  (define_insn "*mulv<mode>3_ccoverflow"
    [(set (reg CC_REGNUM)
  	(compare (mult:<DBL>
! 		  (sign_extend:<DBL> (match_operand:DSI 1 "register_operand"     "%d,0"))
! 		  (sign_extend:<DBL> (match_operand:DSI 2 "nonimmediate_operand" " d,T")))
! 		 (sign_extend:<DBL> (mult:DSI (match_dup 1) (match_dup 2)))))
!    (set (match_operand:DSI                              0 "register_operand"     "=d,d")
!         (mult:DSI (match_dup 1) (match_dup 2)))]
    "s390_match_ccmode (insn, CCOmode) && TARGET_Z14"
    "@
     ms<g>rkc\t%0,%1,%2
***************
*** 7761,7778 ****
  ;
  
  ; mlr, ml, mlgr, mlg
! (define_insn "umul<dwh><mode>3"
!   [(set (match_operand:DW 0 "register_operand"                   "=d,d")
!         (mult:DW (zero_extend:DW
! 	           (match_operand:<DWH> 1 "register_operand"     "%0,0"))
!                  (zero_extend:DW
! 	           (match_operand:<DWH> 2 "nonimmediate_operand" " d,T"))))]
    ""
    "@
!    ml<tg>r\t%0,%2
!    ml<tg>\t%0,%2"
    [(set_attr "op_type"  "RRE,RXY")
!    (set_attr "type"     "imul<dwh>")])
  
  ;
  ; mul(tf|df|sf|td|dd)3 instruction pattern(s).
--- 7162,7179 ----
  ;
  
  ; mlr, ml, mlgr, mlg
! (define_insn "umulditi3"
!   [(set (match_operand:TI 0 "register_operand"                   "=d,d")
!         (mult:TI (zero_extend:TI
! 	           (match_operand:DI 1 "register_operand"        "%0,0"))
!                  (zero_extend:TI
! 	           (match_operand:DI 2 "nonimmediate_operand"    " d,T"))))]
    ""
    "@
!    mlgr\t%0,%2
!    mlg\t%0,%2"
    [(set_attr "op_type"  "RRE,RXY")
!    (set_attr "type"     "imuldi")])
  
  ;
  ; mul(tf|df|sf|td|dd)3 instruction pattern(s).
***************
*** 7844,7850 ****
  	      (set (match_operand:DI 3 "general_operand" "")
  		   (mod:DI (match_dup 1) (match_dup 2)))])
     (clobber (match_dup 4))]
!   "TARGET_ZARCH"
  {
    rtx div_equal, mod_equal;
    rtx_insn *insn;
--- 7245,7251 ----
  	      (set (match_operand:DI 3 "general_operand" "")
  		   (mod:DI (match_dup 1) (match_dup 2)))])
     (clobber (match_dup 4))]
!   ""
  {
    rtx div_equal, mod_equal;
    rtx_insn *insn;
***************
*** 7873,7879 ****
                        (match_operand:DI 2 "general_operand" "d,T")))
              (const_int 64))
            (zero_extend:TI (div:DI (match_dup 1) (match_dup 2)))))]
!   "TARGET_ZARCH"
    "@
     dsgr\t%0,%2
     dsg\t%0,%2"
--- 7274,7280 ----
                        (match_operand:DI 2 "general_operand" "d,T")))
              (const_int 64))
            (zero_extend:TI (div:DI (match_dup 1) (match_dup 2)))))]
!   ""
    "@
     dsgr\t%0,%2
     dsg\t%0,%2"
***************
*** 7891,7897 ****
              (const_int 64))
            (zero_extend:TI
              (div:DI (match_dup 1) (sign_extend:DI (match_dup 2))))))]
!   "TARGET_ZARCH"
    "@
     dsgfr\t%0,%2
     dsgf\t%0,%2"
--- 7292,7298 ----
              (const_int 64))
            (zero_extend:TI
              (div:DI (match_dup 1) (sign_extend:DI (match_dup 2))))))]
!   ""
    "@
     dsgfr\t%0,%2
     dsgf\t%0,%2"
***************
*** 7909,7915 ****
  	      (set (match_operand:DI 3 "general_operand" "")
  		   (umod:DI (match_dup 1) (match_dup 2)))])
     (clobber (match_dup 4))]
!   "TARGET_ZARCH"
  {
    rtx div_equal, mod_equal, equal;
    rtx_insn *insn;
--- 7310,7316 ----
  	      (set (match_operand:DI 3 "general_operand" "")
  		   (umod:DI (match_dup 1) (match_dup 2)))])
     (clobber (match_dup 4))]
!   ""
  {
    rtx div_equal, mod_equal, equal;
    rtx_insn *insn;
***************
*** 7952,7958 ****
            (zero_extend:TI
              (truncate:DI
                (udiv:TI (match_dup 1) (zero_extend:TI (match_dup 2)))))))]
!   "TARGET_ZARCH"
    "@
     dlgr\t%0,%2
     dlg\t%0,%2"
--- 7353,7359 ----
            (zero_extend:TI
              (truncate:DI
                (udiv:TI (match_dup 1) (zero_extend:TI (match_dup 2)))))))]
!   ""
    "@
     dlgr\t%0,%2
     dlg\t%0,%2"
***************
*** 7960,8085 ****
     (set_attr "type"     "idiv")])
  
  ;
- ; divmodsi4 instruction pattern(s).
- ;
- 
- (define_expand "divmodsi4"
-   [(parallel [(set (match_operand:SI 0 "general_operand" "")
- 		   (div:SI (match_operand:SI 1 "general_operand" "")
- 			   (match_operand:SI 2 "nonimmediate_operand" "")))
- 	      (set (match_operand:SI 3 "general_operand" "")
- 		   (mod:SI (match_dup 1) (match_dup 2)))])
-    (clobber (match_dup 4))]
-   "!TARGET_ZARCH"
- {
-   rtx div_equal, mod_equal, equal;
-   rtx_insn *insn;
- 
-   div_equal = gen_rtx_DIV (SImode, operands[1], operands[2]);
-   mod_equal = gen_rtx_MOD (SImode, operands[1], operands[2]);
-   equal = gen_rtx_IOR (DImode,
- 		       gen_rtx_ASHIFT (DImode,
- 				       gen_rtx_ZERO_EXTEND (DImode, mod_equal),
- 				       GEN_INT (32)),
- 		       gen_rtx_ZERO_EXTEND (DImode, div_equal));
- 
-   operands[4] = gen_reg_rtx(DImode);
-   emit_insn (gen_extendsidi2 (operands[4], operands[1]));
- 
-   insn = emit_insn (gen_divmoddisi3 (operands[4], operands[4], operands[2]));
-   set_unique_reg_note (insn, REG_EQUAL, equal);
- 
-   insn = emit_move_insn (operands[0], gen_lowpart (SImode, operands[4]));
-   set_unique_reg_note (insn, REG_EQUAL, div_equal);
- 
-   insn = emit_move_insn (operands[3], gen_highpart (SImode, operands[4]));
-   set_unique_reg_note (insn, REG_EQUAL, mod_equal);
- 
-   DONE;
- })
- 
- (define_insn "divmoddisi3"
-   [(set (match_operand:DI 0 "register_operand" "=d,d")
-         (ior:DI
-           (ashift:DI
-             (zero_extend:DI
-               (truncate:SI
-                 (mod:DI (match_operand:DI 1 "register_operand" "0,0")
-                         (sign_extend:DI
-                           (match_operand:SI 2 "nonimmediate_operand" "d,R")))))
-             (const_int 32))
-           (zero_extend:DI
-             (truncate:SI
-               (div:DI (match_dup 1) (sign_extend:DI (match_dup 2)))))))]
-   "!TARGET_ZARCH"
-   "@
-    dr\t%0,%2
-    d\t%0,%2"
-   [(set_attr "op_type"  "RR,RX")
-    (set_attr "type"     "idiv")])
- 
- ;
- ; udivsi3 and umodsi3 instruction pattern(s).
- ;
- 
- (define_expand "udivmodsi4"
-   [(parallel [(set (match_operand:SI 0 "general_operand" "")
- 		   (udiv:SI (match_operand:SI 1 "general_operand" "")
- 			    (match_operand:SI 2 "nonimmediate_operand" "")))
- 	      (set (match_operand:SI 3 "general_operand" "")
- 		   (umod:SI (match_dup 1) (match_dup 2)))])
-    (clobber (match_dup 4))]
-   "!TARGET_ZARCH"
- {
-   rtx div_equal, mod_equal, equal;
-   rtx_insn *insn;
- 
-   div_equal = gen_rtx_UDIV (SImode, operands[1], operands[2]);
-   mod_equal = gen_rtx_UMOD (SImode, operands[1], operands[2]);
-   equal = gen_rtx_IOR (DImode,
- 		       gen_rtx_ASHIFT (DImode,
- 				       gen_rtx_ZERO_EXTEND (DImode, mod_equal),
- 				       GEN_INT (32)),
- 		       gen_rtx_ZERO_EXTEND (DImode, div_equal));
- 
-   operands[4] = gen_reg_rtx(DImode);
-   emit_clobber (operands[4]);
-   emit_move_insn (gen_lowpart (SImode, operands[4]), operands[1]);
-   emit_move_insn (gen_highpart (SImode, operands[4]), const0_rtx);
- 
-   insn = emit_insn (gen_udivmoddisi3 (operands[4], operands[4], operands[2]));
-   set_unique_reg_note (insn, REG_EQUAL, equal);
- 
-   insn = emit_move_insn (operands[0], gen_lowpart (SImode, operands[4]));
-   set_unique_reg_note (insn, REG_EQUAL, div_equal);
- 
-   insn = emit_move_insn (operands[3], gen_highpart (SImode, operands[4]));
-   set_unique_reg_note (insn, REG_EQUAL, mod_equal);
- 
-   DONE;
- })
- 
- (define_insn "udivmoddisi3"
-   [(set (match_operand:DI 0 "register_operand" "=d,d")
-         (ior:DI
-           (ashift:DI
-             (zero_extend:DI
-               (truncate:SI
-                 (umod:DI (match_operand:DI 1 "register_operand" "0,0")
-                          (zero_extend:DI
-                            (match_operand:SI 2 "nonimmediate_operand" "d,T")))))
-             (const_int 32))
-           (zero_extend:DI
-             (truncate:SI
-               (udiv:DI (match_dup 1) (zero_extend:DI (match_dup 2)))))))]
-   "!TARGET_ZARCH"
-   "@
-    dlr\t%0,%2
-    dl\t%0,%2"
-   [(set_attr "op_type"  "RRE,RXY")
-    (set_attr "type"     "idiv")])
- 
- ;
  ; div(df|sf)3 instruction pattern(s).
  ;
  
--- 7361,7366 ----
***************
*** 8125,8131 ****
            (const_int 0)))
     (set (match_operand:DI 0 "register_operand"               "=d,d,d,    d")
          (and:DI (match_dup 1) (match_dup 2)))]
!   "TARGET_ZARCH && s390_match_ccmode(insn, CCTmode)"
    "@
     ngr\t%0,%2
     ngrk\t%0,%1,%2
--- 7406,7412 ----
            (const_int 0)))
     (set (match_operand:DI 0 "register_operand"               "=d,d,d,    d")
          (and:DI (match_dup 1) (match_dup 2)))]
!   "s390_match_ccmode(insn, CCTmode)"
    "@
     ngr\t%0,%2
     ngrk\t%0,%1,%2
***************
*** 8142,8149 ****
                    (match_operand:DI 2 "general_operand"      " d,d,T,NxxDw"))
                   (const_int 0)))
     (clobber (match_scratch:DI 0                              "=d,d,d,    d"))]
!   "TARGET_ZARCH
!    && s390_match_ccmode(insn, CCTmode)
     /* Do not steal TM patterns.  */
     && s390_single_part (operands[2], DImode, HImode, 0) < 0"
    "@
--- 7423,7429 ----
                    (match_operand:DI 2 "general_operand"      " d,d,T,NxxDw"))
                   (const_int 0)))
     (clobber (match_scratch:DI 0                              "=d,d,d,    d"))]
!   "s390_match_ccmode(insn, CCTmode)
     /* Do not steal TM patterns.  */
     && s390_single_part (operands[2], DImode, HImode, 0) < 0"
    "@
***************
*** 8164,8170 ****
            (match_operand:DI 2 "general_operand"
              "M, M,N0HDF,N1HDF,N2HDF,N3HDF,N0SDF,N1SDF,d,d,T,NxxDw,NxQDF,Q")))
     (clobber (reg:CC CC_REGNUM))]
!   "TARGET_ZARCH && s390_logical_operator_ok_p (operands)"
    "@
     #
     #
--- 7444,7450 ----
            (match_operand:DI 2 "general_operand"
              "M, M,N0HDF,N1HDF,N2HDF,N3HDF,N0SDF,N1SDF,d,d,T,NxxDw,NxQDF,Q")))
     (clobber (reg:CC CC_REGNUM))]
!   "s390_logical_operator_ok_p (operands)"
    "@
     #
     #
***************
*** 8209,8219 ****
  
  ;; These two are what combine generates for (ashift (zero_extract)).
  (define_insn "*extzv_<mode>_srl<clobbercc_or_nocc>"
!   [(set (match_operand:GPR 0 "register_operand" "=d")
! 	(and:GPR (lshiftrt:GPR
! 		   (match_operand:GPR 1 "register_operand" "d")
! 		   (match_operand:GPR 2 "nonzero_shift_count_operand" ""))
! 		(match_operand:GPR 3 "contiguous_bitmask_nowrap_operand" "")))]
    "<z10_or_zEC12_cond>
     /* Note that even for the SImode pattern, the rotate is always DImode.  */
     && s390_extzv_shift_ok (<bitsize>, -INTVAL (operands[2]),
--- 7489,7499 ----
  
  ;; These two are what combine generates for (ashift (zero_extract)).
  (define_insn "*extzv_<mode>_srl<clobbercc_or_nocc>"
!   [(set (match_operand:DSI 0 "register_operand" "=d")
! 	(and:DSI (lshiftrt:DSI
! 		   (match_operand:DSI 1 "register_operand" "d")
! 		   (match_operand:DSI 2 "nonzero_shift_count_operand" ""))
! 		(match_operand:DSI 3 "contiguous_bitmask_nowrap_operand" "")))]
    "<z10_or_zEC12_cond>
     /* Note that even for the SImode pattern, the rotate is always DImode.  */
     && s390_extzv_shift_ok (<bitsize>, -INTVAL (operands[2]),
***************
*** 8239,8249 ****
     (set_attr "mnemonic" "<risbg_n>")])
  
  (define_insn "*extzv_<mode>_sll<clobbercc_or_nocc>"
!   [(set (match_operand:GPR 0 "register_operand" "=d")
! 	(and:GPR (ashift:GPR
! 		  (match_operand:GPR 1 "register_operand" "d")
! 		  (match_operand:GPR 2 "nonzero_shift_count_operand" ""))
! 		(match_operand:GPR 3 "contiguous_bitmask_nowrap_operand" "")))]
    "<z10_or_zEC12_cond>
     && s390_extzv_shift_ok (<bitsize>, INTVAL (operands[2]),
  			   INTVAL (operands[3]))
--- 7519,7529 ----
     (set_attr "mnemonic" "<risbg_n>")])
  
  (define_insn "*extzv_<mode>_sll<clobbercc_or_nocc>"
!   [(set (match_operand:DSI 0 "register_operand" "=d")
! 	(and:DSI (ashift:DSI
! 		  (match_operand:DSI 1 "register_operand" "d")
! 		  (match_operand:DSI 2 "nonzero_shift_count_operand" ""))
! 		(match_operand:DSI 3 "contiguous_bitmask_nowrap_operand" "")))]
    "<z10_or_zEC12_cond>
     && s390_extzv_shift_ok (<bitsize>, INTVAL (operands[2]),
  			   INTVAL (operands[3]))
***************
*** 8312,8318 ****
     (set_attr "z10prop" "z10_super_E1,z10_super_E1,*,
                          z10_super_E1,z10_super_E1,z10_super_E1")])
  
! (define_insn "*andsi3_zarch"
    [(set (match_operand:SI 0 "nonimmediate_operand"
                              "=d,d,    d,    d, d,d,d,d,d,    d,   AQ,Q")
          (and:SI (match_operand:SI 1 "nonimmediate_operand"
--- 7592,7598 ----
     (set_attr "z10prop" "z10_super_E1,z10_super_E1,*,
                          z10_super_E1,z10_super_E1,z10_super_E1")])
  
! (define_insn "*andsi3"
    [(set (match_operand:SI 0 "nonimmediate_operand"
                              "=d,d,    d,    d, d,d,d,d,d,    d,   AQ,Q")
          (and:SI (match_operand:SI 1 "nonimmediate_operand"
***************
*** 8320,8326 ****
                  (match_operand:SI 2 "general_operand"
  			    " M,M,N0HSF,N1HSF,Os,d,d,R,T,NxxSw,NxQSF,Q")))
     (clobber (reg:CC CC_REGNUM))]
!   "TARGET_ZARCH && s390_logical_operator_ok_p (operands)"
    "@
     #
     #
--- 7600,7606 ----
                  (match_operand:SI 2 "general_operand"
  			    " M,M,N0HSF,N1HSF,Os,d,d,R,T,NxxSw,NxQSF,Q")))
     (clobber (reg:CC CC_REGNUM))]
!   "s390_logical_operator_ok_p (operands)"
    "@
     #
     #
***************
*** 8349,8369 ****
                          *,
                          *")])
  
- (define_insn "*andsi3_esa"
-   [(set (match_operand:SI 0 "nonimmediate_operand"         "=d,d,   AQ,Q")
-         (and:SI (match_operand:SI 1 "nonimmediate_operand" "%0,0,    0,0")
-                 (match_operand:SI 2 "general_operand"      " d,R,NxQSF,Q")))
-    (clobber (reg:CC CC_REGNUM))]
-   "!TARGET_ZARCH && s390_logical_operator_ok_p (operands)"
-   "@
-    nr\t%0,%2
-    n\t%0,%2
-    #
-    #"
-   [(set_attr "op_type"  "RR,RX,SI,SS")
-    (set_attr "z10prop" "z10_super_E1,z10_super_E1,*,*")])
- 
- 
  (define_split
    [(set (match_operand:SI 0 "s_operand" "")
          (and:SI (match_dup 0) (match_operand:SI 1 "immediate_operand" "")))
--- 7629,7634 ----
***************
*** 8378,8389 ****
  ; andhi3 instruction pattern(s).
  ;
  
! (define_insn "*andhi3_zarch"
    [(set (match_operand:HI 0 "nonimmediate_operand"         "=d,d,d,   AQ,Q")
          (and:HI (match_operand:HI 1 "nonimmediate_operand" "%0,d,0,    0,0")
                  (match_operand:HI 2 "general_operand"      " d,d,n,NxQHF,Q")))
     (clobber (reg:CC CC_REGNUM))]
!   "TARGET_ZARCH && s390_logical_operator_ok_p (operands)"
    "@
     nr\t%0,%2
     nrk\t%0,%1,%2
--- 7643,7654 ----
  ; andhi3 instruction pattern(s).
  ;
  
! (define_insn "*andhi3"
    [(set (match_operand:HI 0 "nonimmediate_operand"         "=d,d,d,   AQ,Q")
          (and:HI (match_operand:HI 1 "nonimmediate_operand" "%0,d,0,    0,0")
                  (match_operand:HI 2 "general_operand"      " d,d,n,NxQHF,Q")))
     (clobber (reg:CC CC_REGNUM))]
!   "s390_logical_operator_ok_p (operands)"
    "@
     nr\t%0,%2
     nrk\t%0,%1,%2
***************
*** 8395,8414 ****
     (set_attr "z10prop" "z10_super_E1,*,z10_super_E1,*,*")
  ])
  
- (define_insn "*andhi3_esa"
-   [(set (match_operand:HI 0 "nonimmediate_operand" "=d,AQ,Q")
-         (and:HI (match_operand:HI 1 "nonimmediate_operand" "%0,0,0")
-                 (match_operand:HI 2 "general_operand" "d,NxQHF,Q")))
-    (clobber (reg:CC CC_REGNUM))]
-   "!TARGET_ZARCH && s390_logical_operator_ok_p (operands)"
-   "@
-    nr\t%0,%2
-    #
-    #"
-   [(set_attr "op_type"  "RR,SI,SS")
-    (set_attr "z10prop" "z10_super_E1,*,*")
- ])
- 
  (define_split
    [(set (match_operand:HI 0 "s_operand" "")
          (and:HI (match_dup 0) (match_operand:HI 1 "immediate_operand" "")))
--- 7660,7665 ----
***************
*** 8423,8434 ****
  ; andqi3 instruction pattern(s).
  ;
  
! (define_insn "*andqi3_zarch"
    [(set (match_operand:QI 0 "nonimmediate_operand"         "=d,d,d,Q,S,Q")
          (and:QI (match_operand:QI 1 "nonimmediate_operand" "%0,d,0,0,0,0")
                  (match_operand:QI 2 "general_operand"      " d,d,n,n,n,Q")))
     (clobber (reg:CC CC_REGNUM))]
!   "TARGET_ZARCH && s390_logical_operator_ok_p (operands)"
    "@
     nr\t%0,%2
     nrk\t%0,%1,%2
--- 7674,7685 ----
  ; andqi3 instruction pattern(s).
  ;
  
! (define_insn "*andqi3"
    [(set (match_operand:QI 0 "nonimmediate_operand"         "=d,d,d,Q,S,Q")
          (and:QI (match_operand:QI 1 "nonimmediate_operand" "%0,d,0,0,0,0")
                  (match_operand:QI 2 "general_operand"      " d,d,n,n,n,Q")))
     (clobber (reg:CC CC_REGNUM))]
!   "s390_logical_operator_ok_p (operands)"
    "@
     nr\t%0,%2
     nrk\t%0,%1,%2
***************
*** 8440,8467 ****
     (set_attr "cpu_facility" "*,z196,*,*,longdisp,*")
     (set_attr "z10prop" "z10_super_E1,*,z10_super_E1,z10_super,z10_super,*")])
  
- (define_insn "*andqi3_esa"
-   [(set (match_operand:QI 0 "nonimmediate_operand" "=d,Q,Q")
-         (and:QI (match_operand:QI 1 "nonimmediate_operand" "%0,0,0")
-                 (match_operand:QI 2 "general_operand" "d,n,Q")))
-    (clobber (reg:CC CC_REGNUM))]
-   "!TARGET_ZARCH && s390_logical_operator_ok_p (operands)"
-   "@
-    nr\t%0,%2
-    ni\t%S0,%b2
-    #"
-   [(set_attr "op_type"  "RR,SI,SS")
-    (set_attr "z10prop" "z10_super_E1,z10_super,*")])
- 
  ;
  ; And with complement
  ;
  ; c = ~b & a = (b & a) ^ a
  
  (define_insn_and_split "*andc_split_<mode>"
!   [(set (match_operand:GPR 0 "nonimmediate_operand" "")
! 	(and:GPR (not:GPR (match_operand:GPR 1 "nonimmediate_operand" ""))
! 		 (match_operand:GPR 2 "general_operand" "")))
     (clobber (reg:CC CC_REGNUM))]
    "!TARGET_Z15
     && ! reload_completed
--- 7691,7705 ----
     (set_attr "cpu_facility" "*,z196,*,*,longdisp,*")
     (set_attr "z10prop" "z10_super_E1,*,z10_super_E1,z10_super,z10_super,*")])
  
  ;
  ; And with complement
  ;
  ; c = ~b & a = (b & a) ^ a
  
  (define_insn_and_split "*andc_split_<mode>"
!   [(set (match_operand:DSI 0 "nonimmediate_operand" "")
! 	(and:DSI (not:DSI (match_operand:DSI 1 "nonimmediate_operand" ""))
! 		 (match_operand:DSI 2 "general_operand" "")))
     (clobber (reg:CC CC_REGNUM))]
    "!TARGET_Z15
     && ! reload_completed
***************
*** 8473,8482 ****
    "&& 1"
    [
    (parallel
!    [(set (match_dup 3) (and:GPR (match_dup 1) (match_dup 2)))
     (clobber (reg:CC CC_REGNUM))])
    (parallel
!    [(set (match_dup 0) (xor:GPR (match_dup 3) (match_dup 2)))
     (clobber (reg:CC CC_REGNUM))])]
  {
    if (reg_overlap_mentioned_p (operands[0], operands[2]))
--- 7711,7720 ----
    "&& 1"
    [
    (parallel
!    [(set (match_dup 3) (and:DSI (match_dup 1) (match_dup 2)))
     (clobber (reg:CC CC_REGNUM))])
    (parallel
!    [(set (match_dup 0) (xor:DSI (match_dup 3) (match_dup 2)))
     (clobber (reg:CC CC_REGNUM))])]
  {
    if (reg_overlap_mentioned_p (operands[0], operands[2]))
***************
*** 8568,8574 ****
                   (const_int 0)))
     (set (match_operand:DI 0 "register_operand"                      "=d,d,d")
          (ior:DI (match_dup 1) (match_dup 2)))]
!   "s390_match_ccmode(insn, CCTmode) && TARGET_ZARCH"
    "@
     ogr\t%0,%2
     ogrk\t%0,%1,%2
--- 7806,7812 ----
                   (const_int 0)))
     (set (match_operand:DI 0 "register_operand"                      "=d,d,d")
          (ior:DI (match_dup 1) (match_dup 2)))]
!   "s390_match_ccmode(insn, CCTmode)"
    "@
     ogr\t%0,%2
     ogrk\t%0,%1,%2
***************
*** 8583,8589 ****
                           (match_operand:DI 2 "general_operand"      " d,d,T"))
                   (const_int 0)))
     (clobber (match_scratch:DI 0                                     "=d,d,d"))]
!   "s390_match_ccmode(insn, CCTmode) && TARGET_ZARCH"
    "@
     ogr\t%0,%2
     ogrk\t%0,%1,%2
--- 7821,7827 ----
                           (match_operand:DI 2 "general_operand"      " d,d,T"))
                   (const_int 0)))
     (clobber (match_scratch:DI 0                                     "=d,d,d"))]
!   "s390_match_ccmode(insn, CCTmode)"
    "@
     ogr\t%0,%2
     ogrk\t%0,%1,%2
***************
*** 8600,8606 ****
                  (match_operand:DI 2 "general_operand"
                              "N0HD0,N1HD0,N2HD0,N3HD0,N0SD0,N1SD0,d,d,T,NxQD0,Q")))
     (clobber (reg:CC CC_REGNUM))]
!   "TARGET_ZARCH && s390_logical_operator_ok_p (operands)"
    "@
     oihh\t%0,%i2
     oihl\t%0,%i2
--- 7838,7844 ----
                  (match_operand:DI 2 "general_operand"
                              "N0HD0,N1HD0,N2HD0,N3HD0,N0SD0,N1SD0,d,d,T,NxQD0,Q")))
     (clobber (reg:CC CC_REGNUM))]
!   "s390_logical_operator_ok_p (operands)"
    "@
     oihh\t%0,%i2
     oihl\t%0,%i2
***************
*** 8676,8687 ****
     (set_attr "cpu_facility" "*,*,z196,*,longdisp")
     (set_attr "z10prop" "z10_super_E1,z10_super_E1,*,z10_super_E1,z10_super_E1")])
  
! (define_insn "*iorsi3_zarch"
    [(set (match_operand:SI 0 "nonimmediate_operand"         "=d,    d, d,d,d,d,d,   AQ,Q")
          (ior:SI (match_operand:SI 1 "nonimmediate_operand" "%0,    0, 0,0,d,0,0,    0,0")
                  (match_operand:SI 2 "general_operand"   "N0HS0,N1HS0,Os,d,d,R,T,NxQS0,Q")))
     (clobber (reg:CC CC_REGNUM))]
!   "TARGET_ZARCH && s390_logical_operator_ok_p (operands)"
    "@
     oilh\t%0,%i2
     oill\t%0,%i2
--- 7914,7925 ----
     (set_attr "cpu_facility" "*,*,z196,*,longdisp")
     (set_attr "z10prop" "z10_super_E1,z10_super_E1,*,z10_super_E1,z10_super_E1")])
  
! (define_insn "*iorsi3"
    [(set (match_operand:SI 0 "nonimmediate_operand"         "=d,    d, d,d,d,d,d,   AQ,Q")
          (ior:SI (match_operand:SI 1 "nonimmediate_operand" "%0,    0, 0,0,d,0,0,    0,0")
                  (match_operand:SI 2 "general_operand"   "N0HS0,N1HS0,Os,d,d,R,T,NxQS0,Q")))
     (clobber (reg:CC CC_REGNUM))]
!   "s390_logical_operator_ok_p (operands)"
    "@
     oilh\t%0,%i2
     oill\t%0,%i2
***************
*** 8704,8723 ****
                          *,
                          *")])
  
- (define_insn "*iorsi3_esa"
-   [(set (match_operand:SI 0 "nonimmediate_operand" "=d,d,AQ,Q")
-         (ior:SI (match_operand:SI 1 "nonimmediate_operand" "%0,0,0,0")
-                 (match_operand:SI 2 "general_operand" "d,R,NxQS0,Q")))
-    (clobber (reg:CC CC_REGNUM))]
-   "!TARGET_ZARCH && s390_logical_operator_ok_p (operands)"
-   "@
-    or\t%0,%2
-    o\t%0,%2
-    #
-    #"
-   [(set_attr "op_type"  "RR,RX,SI,SS")
-    (set_attr "z10prop" "z10_super_E1,z10_super_E1,*,*")])
- 
  (define_split
    [(set (match_operand:SI 0 "s_operand" "")
          (ior:SI (match_dup 0) (match_operand:SI 1 "immediate_operand" "")))
--- 7942,7947 ----
***************
*** 8732,8743 ****
  ; iorhi3 instruction pattern(s).
  ;
  
! (define_insn "*iorhi3_zarch"
    [(set (match_operand:HI 0 "nonimmediate_operand"         "=d,d,d,   AQ,Q")
          (ior:HI (match_operand:HI 1 "nonimmediate_operand" "%0,d,0,    0,0")
                  (match_operand:HI 2 "general_operand"      " d,d,n,NxQH0,Q")))
     (clobber (reg:CC CC_REGNUM))]
!   "TARGET_ZARCH && s390_logical_operator_ok_p (operands)"
    "@
     or\t%0,%2
     ork\t%0,%1,%2
--- 7956,7967 ----
  ; iorhi3 instruction pattern(s).
  ;
  
! (define_insn "*iorhi3"
    [(set (match_operand:HI 0 "nonimmediate_operand"         "=d,d,d,   AQ,Q")
          (ior:HI (match_operand:HI 1 "nonimmediate_operand" "%0,d,0,    0,0")
                  (match_operand:HI 2 "general_operand"      " d,d,n,NxQH0,Q")))
     (clobber (reg:CC CC_REGNUM))]
!   "s390_logical_operator_ok_p (operands)"
    "@
     or\t%0,%2
     ork\t%0,%1,%2
***************
*** 8748,8766 ****
     (set_attr "cpu_facility" "*,z196,*,*,*")
     (set_attr "z10prop" "z10_super_E1,*,z10_super_E1,*,*")])
  
- (define_insn "*iorhi3_esa"
-   [(set (match_operand:HI 0 "nonimmediate_operand" "=d,AQ,Q")
-         (ior:HI (match_operand:HI 1 "nonimmediate_operand" "%0,0,0")
-                 (match_operand:HI 2 "general_operand" "d,NxQH0,Q")))
-    (clobber (reg:CC CC_REGNUM))]
-   "!TARGET_ZARCH && s390_logical_operator_ok_p (operands)"
-   "@
-    or\t%0,%2
-    #
-    #"
-   [(set_attr "op_type"  "RR,SI,SS")
-    (set_attr "z10prop" "z10_super_E1,*,*")])
- 
  (define_split
    [(set (match_operand:HI 0 "s_operand" "")
          (ior:HI (match_dup 0) (match_operand:HI 1 "immediate_operand" "")))
--- 7972,7977 ----
***************
*** 8775,8786 ****
  ; iorqi3 instruction pattern(s).
  ;
  
! (define_insn "*iorqi3_zarch"
    [(set (match_operand:QI 0 "nonimmediate_operand"         "=d,d,d,Q,S,Q")
          (ior:QI (match_operand:QI 1 "nonimmediate_operand" "%0,d,0,0,0,0")
                  (match_operand:QI 2 "general_operand"      " d,d,n,n,n,Q")))
     (clobber (reg:CC CC_REGNUM))]
!   "TARGET_ZARCH && s390_logical_operator_ok_p (operands)"
    "@
     or\t%0,%2
     ork\t%0,%1,%2
--- 7986,7997 ----
  ; iorqi3 instruction pattern(s).
  ;
  
! (define_insn "*iorqi3"
    [(set (match_operand:QI 0 "nonimmediate_operand"         "=d,d,d,Q,S,Q")
          (ior:QI (match_operand:QI 1 "nonimmediate_operand" "%0,d,0,0,0,0")
                  (match_operand:QI 2 "general_operand"      " d,d,n,n,n,Q")))
     (clobber (reg:CC CC_REGNUM))]
!   "s390_logical_operator_ok_p (operands)"
    "@
     or\t%0,%2
     ork\t%0,%1,%2
***************
*** 8793,8849 ****
     (set_attr "z10prop" "z10_super_E1,*,z10_super_E1,
                          z10_super,z10_super,*")])
  
- (define_insn "*iorqi3_esa"
-   [(set (match_operand:QI 0 "nonimmediate_operand" "=d,Q,Q")
-         (ior:QI (match_operand:QI 1 "nonimmediate_operand" "%0,0,0")
-                 (match_operand:QI 2 "general_operand" "d,n,Q")))
-    (clobber (reg:CC CC_REGNUM))]
-   "!TARGET_ZARCH && s390_logical_operator_ok_p (operands)"
-   "@
-    or\t%0,%2
-    oi\t%S0,%b2
-    #"
-   [(set_attr "op_type"  "RR,SI,SS")
-    (set_attr "z10prop" "z10_super_E1,z10_super,*")])
- 
  ;
  ; And/Or with complement
  ;
  
  ; ncrk, ncgrk, ocrk, ocgrk
! (define_insn "*<ANDOR:bitops_name>c<GPR:mode>_cc"
    [(set (reg CC_REGNUM)
  	(compare
! 	 (ANDOR:GPR (not:GPR (match_operand:GPR 1 "register_operand" "d"))
! 		    (match_operand:GPR 2 "register_operand" "d"))
  	 (const_int 0)))
!    (set (match_operand:GPR 0 "register_operand" "=d")
! 	(ANDOR:GPR (not:GPR (match_dup 1))
  		   (match_dup 2)))]
    "TARGET_Z15 && s390_match_ccmode(insn, CCTmode)"
!   "<ANDOR:noxa>c<GPR:g>rk\t%0,%2,%1"
    [(set_attr "op_type" "RRF")])
  
  ; ncrk, ncgrk, ocrk, ocgrk
! (define_insn "*<ANDOR:bitops_name>c<GPR:mode>_cconly"
    [(set (reg CC_REGNUM)
  	(compare
! 	 (ANDOR:GPR (not:GPR (match_operand:GPR 1 "register_operand" "d"))
! 		    (match_operand:GPR 2 "register_operand" "d"))
  	 (const_int 0)))
!    (clobber (match_scratch:GPR 0 "=d"))]
    "TARGET_Z15 && s390_match_ccmode(insn, CCTmode)"
!   "<ANDOR:noxa>c<GPR:g>rk\t%0,%2,%1"
    [(set_attr "op_type" "RRF")])
  
  ; ncrk, ncgrk, ocrk, ocgrk
! (define_insn "*<ANDOR:bitops_name>c<GPR:mode>"
!   [(set (match_operand:GPR 0 "register_operand" "=d")
! 	(ANDOR:GPR (not:GPR (match_operand:GPR 1 "register_operand" "d"))
! 		   (match_operand:GPR 2 "register_operand" "d")))
     (clobber (reg:CC CC_REGNUM))]
    "TARGET_Z15"
!   "<ANDOR:noxa>c<GPR:g>rk\t%0,%2,%1"
    [(set_attr "op_type" "RRF")])
  
  ;
--- 8004,8047 ----
     (set_attr "z10prop" "z10_super_E1,*,z10_super_E1,
                          z10_super,z10_super,*")])
  
  ;
  ; And/Or with complement
  ;
  
  ; ncrk, ncgrk, ocrk, ocgrk
! (define_insn "*<ANDOR:bitops_name>c<DSI:mode>_cc"
    [(set (reg CC_REGNUM)
  	(compare
! 	 (ANDOR:DSI (not:DSI (match_operand:DSI 1 "register_operand" "d"))
! 		    (match_operand:DSI 2 "register_operand" "d"))
  	 (const_int 0)))
!    (set (match_operand:DSI 0 "register_operand" "=d")
! 	(ANDOR:DSI (not:DSI (match_dup 1))
  		   (match_dup 2)))]
    "TARGET_Z15 && s390_match_ccmode(insn, CCTmode)"
!   "<ANDOR:noxa>c<DSI:g>rk\t%0,%2,%1"
    [(set_attr "op_type" "RRF")])
  
  ; ncrk, ncgrk, ocrk, ocgrk
! (define_insn "*<ANDOR:bitops_name>c<DSI:mode>_cconly"
    [(set (reg CC_REGNUM)
  	(compare
! 	 (ANDOR:DSI (not:DSI (match_operand:DSI 1 "register_operand" "d"))
! 		    (match_operand:DSI 2 "register_operand" "d"))
  	 (const_int 0)))
!    (clobber (match_scratch:DSI 0 "=d"))]
    "TARGET_Z15 && s390_match_ccmode(insn, CCTmode)"
!   "<ANDOR:noxa>c<DSI:g>rk\t%0,%2,%1"
    [(set_attr "op_type" "RRF")])
  
  ; ncrk, ncgrk, ocrk, ocgrk
! (define_insn "*<ANDOR:bitops_name>c<DSI:mode>"
!   [(set (match_operand:DSI 0 "register_operand" "=d")
! 	(ANDOR:DSI (not:DSI (match_operand:DSI 1 "register_operand" "d"))
! 		   (match_operand:DSI 2 "register_operand" "d")))
     (clobber (reg:CC CC_REGNUM))]
    "TARGET_Z15"
!   "<ANDOR:noxa>c<DSI:g>rk\t%0,%2,%1"
    [(set_attr "op_type" "RRF")])
  
  ;
***************
*** 8851,8898 ****
  ;
  
  ; nnrk, nngrk, nork, nogrk
! (define_insn "*n<ANDOR:inv_bitops_name><GPR:mode>_cc"
    [(set (reg CC_REGNUM)
  	(compare
! 	 (ANDOR:GPR (not:GPR (match_operand:GPR 1 "register_operand" "d"))
! 		    (not:GPR (match_operand:GPR 2 "register_operand" "d")))
  	 (const_int 0)))
!    (set (match_operand:GPR 0 "register_operand" "=d")
! 	(ANDOR:GPR (not:GPR (match_dup 1))
! 		   (not:GPR (match_dup 2))))]
    "TARGET_Z15 && s390_match_ccmode(insn, CCTmode)"
!   "n<ANDOR:inv_no><GPR:g>rk\t%0,%1,%2"
    [(set_attr "op_type" "RRF")])
  
  ; nnrk, nngrk, nork, nogrk
  (define_insn "*n<ANDOR:inv_bitops_name><mode>_cconly"
    [(set (reg CC_REGNUM)
  	(compare
! 	 (ANDOR:GPR (not:GPR (match_operand:GPR 1 "register_operand" "d"))
! 		    (not:GPR (match_operand:GPR 2 "register_operand" "d")))
  	 (const_int 0)))
!    (clobber (match_scratch:GPR 0 "=d"))]
    "TARGET_Z15 && s390_match_ccmode(insn, CCTmode)"
!   "n<ANDOR:inv_no><GPR:g>rk\t%0,%1,%2"
    [(set_attr "op_type" "RRF")])
  
  ; nnrk, nngrk, nork, nogrk
  (define_insn "*n<ANDOR:inv_bitops_name><mode>"
!   [(set (match_operand:GPR 0 "register_operand" "=d")
! 	(ANDOR:GPR (not:GPR (match_operand:GPR 1 "register_operand" "d"))
! 		   (not:GPR (match_operand:GPR 2 "register_operand" "d"))))
     (clobber (reg:CC CC_REGNUM))]
    "TARGET_Z15"
!   "n<ANDOR:inv_no><GPR:g>rk\t%0,%1,%2"
    [(set_attr "op_type" "RRF")])
  
  ; Use NAND for bit inversion
  (define_insn "*not<mode>"
!   [(set (match_operand:GPR          0 "register_operand" "=d")
! 	(not:GPR (match_operand:GPR 1 "register_operand"  "d")))
     (clobber (reg:CC CC_REGNUM))]
    "TARGET_Z15"
!   "nn<GPR:g>rk\t%0,%1,%1"
    [(set_attr "op_type" "RRF")])
  
  ;
--- 8049,8096 ----
  ;
  
  ; nnrk, nngrk, nork, nogrk
! (define_insn "*n<ANDOR:inv_bitops_name><DSI:mode>_cc"
    [(set (reg CC_REGNUM)
  	(compare
! 	 (ANDOR:DSI (not:DSI (match_operand:DSI 1 "register_operand" "d"))
! 		    (not:DSI (match_operand:DSI 2 "register_operand" "d")))
  	 (const_int 0)))
!    (set (match_operand:DSI 0 "register_operand" "=d")
! 	(ANDOR:DSI (not:DSI (match_dup 1))
! 		   (not:DSI (match_dup 2))))]
    "TARGET_Z15 && s390_match_ccmode(insn, CCTmode)"
!   "n<ANDOR:inv_no><DSI:g>rk\t%0,%1,%2"
    [(set_attr "op_type" "RRF")])
  
  ; nnrk, nngrk, nork, nogrk
  (define_insn "*n<ANDOR:inv_bitops_name><mode>_cconly"
    [(set (reg CC_REGNUM)
  	(compare
! 	 (ANDOR:DSI (not:DSI (match_operand:DSI 1 "register_operand" "d"))
! 		    (not:DSI (match_operand:DSI 2 "register_operand" "d")))
  	 (const_int 0)))
!    (clobber (match_scratch:DSI 0 "=d"))]
    "TARGET_Z15 && s390_match_ccmode(insn, CCTmode)"
!   "n<ANDOR:inv_no><DSI:g>rk\t%0,%1,%2"
    [(set_attr "op_type" "RRF")])
  
  ; nnrk, nngrk, nork, nogrk
  (define_insn "*n<ANDOR:inv_bitops_name><mode>"
!   [(set (match_operand:DSI 0 "register_operand" "=d")
! 	(ANDOR:DSI (not:DSI (match_operand:DSI 1 "register_operand" "d"))
! 		   (not:DSI (match_operand:DSI 2 "register_operand" "d"))))
     (clobber (reg:CC CC_REGNUM))]
    "TARGET_Z15"
!   "n<ANDOR:inv_no><DSI:g>rk\t%0,%1,%2"
    [(set_attr "op_type" "RRF")])
  
  ; Use NAND for bit inversion
  (define_insn "*not<mode>"
!   [(set (match_operand:DSI          0 "register_operand" "=d")
! 	(not:DSI (match_operand:DSI 1 "register_operand"  "d")))
     (clobber (reg:CC CC_REGNUM))]
    "TARGET_Z15"
!   "nn<DSI:g>rk\t%0,%1,%1"
    [(set_attr "op_type" "RRF")])
  
  ;
***************
*** 8993,8999 ****
                   (const_int 0)))
     (set (match_operand:DI 0 "register_operand"                      "=d,d,d")
          (xor:DI (match_dup 1) (match_dup 2)))]
!   "s390_match_ccmode(insn, CCTmode) && TARGET_ZARCH"
    "@
     xgr\t%0,%2
     xgrk\t%0,%1,%2
--- 8191,8197 ----
                   (const_int 0)))
     (set (match_operand:DI 0 "register_operand"                      "=d,d,d")
          (xor:DI (match_dup 1) (match_dup 2)))]
!   "s390_match_ccmode(insn, CCTmode)"
    "@
     xgr\t%0,%2
     xgrk\t%0,%1,%2
***************
*** 9008,9014 ****
                           (match_operand:DI 2 "general_operand"      " d,d,T"))
                   (const_int 0)))
     (clobber (match_scratch:DI 0                                     "=d,d,d"))]
!   "s390_match_ccmode(insn, CCTmode) && TARGET_ZARCH"
    "@
     xgr\t%0,%2
     xgrk\t%0,%1,%2
--- 8206,8212 ----
                           (match_operand:DI 2 "general_operand"      " d,d,T"))
                   (const_int 0)))
     (clobber (match_scratch:DI 0                                     "=d,d,d"))]
!   "s390_match_ccmode(insn, CCTmode)"
    "@
     xgr\t%0,%2
     xgrk\t%0,%1,%2
***************
*** 9022,9028 ****
          (xor:DI (match_operand:DI 1 "nonimmediate_operand" "%0,    0,0,d,0,    0,0")
                  (match_operand:DI 2 "general_operand"   "N0SD0,N1SD0,d,d,T,NxQD0,Q")))
     (clobber (reg:CC CC_REGNUM))]
!   "TARGET_ZARCH && s390_logical_operator_ok_p (operands)"
    "@
     xihf\t%0,%k2
     xilf\t%0,%k2
--- 8220,8226 ----
          (xor:DI (match_operand:DI 1 "nonimmediate_operand" "%0,    0,0,d,0,    0,0")
                  (match_operand:DI 2 "general_operand"   "N0SD0,N1SD0,d,d,T,NxQD0,Q")))
     (clobber (reg:CC CC_REGNUM))]
!   "s390_logical_operator_ok_p (operands)"
    "@
     xihf\t%0,%k2
     xilf\t%0,%k2
***************
*** 9265,9303 ****
  ;
  
  ; nxrk, nxgrk
! (define_insn "*nxor<GPR:mode>_cc"
    [(set (reg CC_REGNUM)
  	(compare
! 	 (not:GPR (xor:GPR (match_operand:GPR 1 "register_operand" "d")
! 			   (match_operand:GPR 2 "register_operand" "d")))
  	 (const_int 0)))
!    (set (match_operand:GPR 0 "register_operand" "=d")
! 	(xor:GPR (not:GPR (match_dup 1))
  		    (match_dup 2)))]
    "TARGET_Z15 && s390_match_ccmode(insn, CCTmode)"
!   "nx<GPR:g>rk\t%0,%1,%2"
    [(set_attr "op_type" "RRF")])
  
  ; nxrk, nxgrk
  (define_insn "*nxor<mode>_cconly"
    [(set (reg CC_REGNUM)
  	(compare
! 	 (not:GPR (xor:GPR (match_operand:GPR 1 "register_operand" "d")
! 			   (match_operand:GPR 2 "register_operand" "d")))
  	 (const_int 0)))
!    (clobber (match_scratch:GPR 0 "=d"))]
    "TARGET_Z15 && s390_match_ccmode(insn, CCTmode)"
!   "nx<GPR:g>rk\t%0,%1,%2"
    [(set_attr "op_type" "RRF")])
  
  ; nxrk, nxgrk
  (define_insn "*nxor<mode>"
!   [(set (match_operand:GPR 0 "register_operand" "=d")
! 	(not:GPR (xor:GPR (match_operand:GPR 1 "register_operand" "d")
! 			  (match_operand:GPR 2 "register_operand" "d"))))
     (clobber (reg:CC CC_REGNUM))]
    "TARGET_Z15"
!   "nx<GPR:g>rk\t%0,%1,%2"
    [(set_attr "op_type" "RRF")])
  
  ;;
--- 8463,8501 ----
  ;
  
  ; nxrk, nxgrk
! (define_insn "*nxor<DSI:mode>_cc"
    [(set (reg CC_REGNUM)
  	(compare
! 	 (not:DSI (xor:DSI (match_operand:DSI 1 "register_operand" "d")
! 			   (match_operand:DSI 2 "register_operand" "d")))
  	 (const_int 0)))
!    (set (match_operand:DSI 0 "register_operand" "=d")
! 	(xor:DSI (not:DSI (match_dup 1))
  		    (match_dup 2)))]
    "TARGET_Z15 && s390_match_ccmode(insn, CCTmode)"
!   "nx<DSI:g>rk\t%0,%1,%2"
    [(set_attr "op_type" "RRF")])
  
  ; nxrk, nxgrk
  (define_insn "*nxor<mode>_cconly"
    [(set (reg CC_REGNUM)
  	(compare
! 	 (not:DSI (xor:DSI (match_operand:DSI 1 "register_operand" "d")
! 			   (match_operand:DSI 2 "register_operand" "d")))
  	 (const_int 0)))
!    (clobber (match_scratch:DSI 0 "=d"))]
    "TARGET_Z15 && s390_match_ccmode(insn, CCTmode)"
!   "nx<DSI:g>rk\t%0,%1,%2"
    [(set_attr "op_type" "RRF")])
  
  ; nxrk, nxgrk
  (define_insn "*nxor<mode>"
!   [(set (match_operand:DSI 0 "register_operand" "=d")
! 	(not:DSI (xor:DSI (match_operand:DSI 1 "register_operand" "d")
! 			  (match_operand:DSI 2 "register_operand" "d"))))
     (clobber (reg:CC CC_REGNUM))]
    "TARGET_Z15"
!   "nx<DSI:g>rk\t%0,%1,%2"
    [(set_attr "op_type" "RRF")])
  
  ;;
***************
*** 9324,9330 ****
                   (const_int 0)))
     (set (match_operand:DI 0 "register_operand" "=d")
          (neg:DI (sign_extend:DI (match_dup 1))))]
!   "TARGET_ZARCH && s390_match_ccmode (insn, CCAmode)"
    "lcgfr\t%0,%1"
    [(set_attr "op_type"  "RRE")
     (set_attr "z10prop" "z10_c")])
--- 8522,8528 ----
                   (const_int 0)))
     (set (match_operand:DI 0 "register_operand" "=d")
          (neg:DI (sign_extend:DI (match_dup 1))))]
!   "s390_match_ccmode (insn, CCAmode)"
    "lcgfr\t%0,%1"
    [(set_attr "op_type"  "RRE")
     (set_attr "z10prop" "z10_c")])
***************
*** 9333,9339 ****
    [(set (match_operand:DI 0 "register_operand" "=d")
          (neg:DI (sign_extend:DI (match_operand:SI 1 "register_operand" "d"))))
     (clobber (reg:CC CC_REGNUM))]
!   "TARGET_ZARCH"
    "lcgfr\t%0,%1"
    [(set_attr "op_type"  "RRE")
     (set_attr "z10prop" "z10_c")])
--- 8531,8537 ----
    [(set (match_operand:DI 0 "register_operand" "=d")
          (neg:DI (sign_extend:DI (match_operand:SI 1 "register_operand" "d"))))
     (clobber (reg:CC CC_REGNUM))]
!   ""
    "lcgfr\t%0,%1"
    [(set_attr "op_type"  "RRE")
     (set_attr "z10prop" "z10_c")])
***************
*** 9341,9350 ****
  ; lcr, lcgr
  (define_insn "*neg<mode>2_cc"
    [(set (reg CC_REGNUM)
!         (compare (neg:GPR (match_operand:GPR 1 "register_operand" "d"))
                   (const_int 0)))
!    (set (match_operand:GPR 0 "register_operand" "=d")
!         (neg:GPR (match_dup 1)))]
    "s390_match_ccmode (insn, CCAmode)"
    "lc<g>r\t%0,%1"
    [(set_attr "op_type"  "RR<E>")
--- 8539,8548 ----
  ; lcr, lcgr
  (define_insn "*neg<mode>2_cc"
    [(set (reg CC_REGNUM)
!         (compare (neg:DSI (match_operand:DSI 1 "register_operand" "d"))
                   (const_int 0)))
!    (set (match_operand:DSI 0 "register_operand" "=d")
!         (neg:DSI (match_dup 1)))]
    "s390_match_ccmode (insn, CCAmode)"
    "lc<g>r\t%0,%1"
    [(set_attr "op_type"  "RR<E>")
***************
*** 9353,9361 ****
  ; lcr, lcgr
  (define_insn "*neg<mode>2_cconly"
    [(set (reg CC_REGNUM)
!         (compare (neg:GPR (match_operand:GPR 1 "register_operand" "d"))
                   (const_int 0)))
!    (clobber (match_scratch:GPR 0 "=d"))]
    "s390_match_ccmode (insn, CCAmode)"
    "lc<g>r\t%0,%1"
    [(set_attr "op_type"  "RR<E>")
--- 8551,8559 ----
  ; lcr, lcgr
  (define_insn "*neg<mode>2_cconly"
    [(set (reg CC_REGNUM)
!         (compare (neg:DSI (match_operand:DSI 1 "register_operand" "d"))
                   (const_int 0)))
!    (clobber (match_scratch:DSI 0 "=d"))]
    "s390_match_ccmode (insn, CCAmode)"
    "lc<g>r\t%0,%1"
    [(set_attr "op_type"  "RR<E>")
***************
*** 9363,9453 ****
  
  ; lcr, lcgr
  (define_insn "*neg<mode>2"
!   [(set (match_operand:GPR 0 "register_operand" "=d")
!         (neg:GPR (match_operand:GPR 1 "register_operand" "d")))
     (clobber (reg:CC CC_REGNUM))]
    ""
    "lc<g>r\t%0,%1"
    [(set_attr "op_type"  "RR<E>")
     (set_attr "z10prop" "z10_super_c_E1")])
  
- (define_insn "*negdi2_31"
-   [(set (match_operand:DI 0 "register_operand" "=d")
-         (neg:DI (match_operand:DI 1 "register_operand" "d")))
-    (clobber (reg:CC CC_REGNUM))]
-   "!TARGET_ZARCH"
-   "#")
- 
- ; Split a DImode NEG on 31bit into 2 SImode NEGs
- 
- ; Doing the twos complement separately on the SImode parts does an
- ; unwanted +1 on the high part which needs to be subtracted afterwards
- ; ... unless the +1 on the low part created an overflow.
- 
- (define_split
-   [(set (match_operand:DI 0 "register_operand" "")
-         (neg:DI (match_operand:DI 1 "register_operand" "")))
-    (clobber (reg:CC CC_REGNUM))]
-   "!TARGET_ZARCH
-    && reload_completed
-    && ((REG_P (operands[0]) && REG_P (operands[1])
-        && REGNO (operands[0]) == REGNO (operands[1]))
-       || s390_split_ok_p (operands[0], operands[1], DImode, 0))"
-   [(parallel
-     [(set (match_dup 2) (neg:SI (match_dup 3)))
-      (clobber (reg:CC CC_REGNUM))])
-    (parallel
-     [(set (reg:CCAP CC_REGNUM)
-           (compare:CCAP (neg:SI (match_dup 5)) (const_int 0)))
-      (set (match_dup 4) (neg:SI (match_dup 5)))])
-    (set (pc)
-         (if_then_else (ne (reg:CCAP CC_REGNUM) (const_int 0))
-                       (pc)
-                       (label_ref (match_dup 6))))
-    (parallel
-     [(set (match_dup 2) (plus:SI (match_dup 2) (const_int -1)))
-      (clobber (reg:CC CC_REGNUM))])
-    (match_dup 6)]
-   "operands[2] = operand_subword (operands[0], 0, 0, DImode);
-    operands[3] = operand_subword (operands[1], 0, 0, DImode);
-    operands[4] = operand_subword (operands[0], 1, 0, DImode);
-    operands[5] = operand_subword (operands[1], 1, 0, DImode);
-    operands[6] = gen_label_rtx ();")
- 
- ; Like above but first make a copy of the low part of the src operand
- ; since it might overlap with the high part of the destination.
- 
- (define_split
-   [(set (match_operand:DI 0 "register_operand" "")
-         (neg:DI (match_operand:DI 1 "register_operand" "")))
-    (clobber (reg:CC CC_REGNUM))]
-   "!TARGET_ZARCH
-    && s390_split_ok_p (operands[0], operands[1], DImode, 1)
-    && reload_completed"
-   [; Make a backup of op5 first
-    (set (match_dup 4) (match_dup 5))
-    ; Setting op2 here might clobber op5
-    (parallel
-     [(set (match_dup 2) (neg:SI (match_dup 3)))
-      (clobber (reg:CC CC_REGNUM))])
-    (parallel
-     [(set (reg:CCAP CC_REGNUM)
-           (compare:CCAP (neg:SI (match_dup 4)) (const_int 0)))
-      (set (match_dup 4) (neg:SI (match_dup 4)))])
-    (set (pc)
-         (if_then_else (ne (reg:CCAP CC_REGNUM) (const_int 0))
-                       (pc)
-                       (label_ref (match_dup 6))))
-    (parallel
-     [(set (match_dup 2) (plus:SI (match_dup 2) (const_int -1)))
-      (clobber (reg:CC CC_REGNUM))])
-    (match_dup 6)]
-   "operands[2] = operand_subword (operands[0], 0, 0, DImode);
-    operands[3] = operand_subword (operands[1], 0, 0, DImode);
-    operands[4] = operand_subword (operands[0], 1, 0, DImode);
-    operands[5] = operand_subword (operands[1], 1, 0, DImode);
-    operands[6] = gen_label_rtx ();")
- 
  ;
  ; neg(tf|df|sf)2 instruction pattern(s).
  ;
--- 8561,8574 ----
  
  ; lcr, lcgr
  (define_insn "*neg<mode>2"
!   [(set (match_operand:DSI 0 "register_operand" "=d")
!         (neg:DSI (match_operand:DSI 1 "register_operand" "d")))
     (clobber (reg:CC CC_REGNUM))]
    ""
    "lc<g>r\t%0,%1"
    [(set_attr "op_type"  "RR<E>")
     (set_attr "z10prop" "z10_super_c_E1")])
  
  ;
  ; neg(tf|df|sf)2 instruction pattern(s).
  ;
***************
*** 9525,9531 ****
                   (const_int 0)))
     (set (match_operand:DI 0 "register_operand" "=d")
          (abs:DI (sign_extend:DI (match_dup 1))))]
!   "TARGET_ZARCH && s390_match_ccmode (insn, CCAmode)"
    "lpgfr\t%0,%1"
    [(set_attr "op_type"  "RRE")
     (set_attr "z10prop" "z10_c")])
--- 8646,8652 ----
                   (const_int 0)))
     (set (match_operand:DI 0 "register_operand" "=d")
          (abs:DI (sign_extend:DI (match_dup 1))))]
!   "s390_match_ccmode (insn, CCAmode)"
    "lpgfr\t%0,%1"
    [(set_attr "op_type"  "RRE")
     (set_attr "z10prop" "z10_c")])
***************
*** 9534,9540 ****
    [(set (match_operand:DI 0 "register_operand" "=d")
          (abs:DI (sign_extend:DI (match_operand:SI 1 "register_operand" "d"))))
     (clobber (reg:CC CC_REGNUM))]
!   "TARGET_ZARCH"
    "lpgfr\t%0,%1"
    [(set_attr "op_type"  "RRE")
     (set_attr "z10prop" "z10_c")])
--- 8655,8661 ----
    [(set (match_operand:DI 0 "register_operand" "=d")
          (abs:DI (sign_extend:DI (match_operand:SI 1 "register_operand" "d"))))
     (clobber (reg:CC CC_REGNUM))]
!   ""
    "lpgfr\t%0,%1"
    [(set_attr "op_type"  "RRE")
     (set_attr "z10prop" "z10_c")])
***************
*** 9542,9551 ****
  ; lpr, lpgr
  (define_insn "*abs<mode>2_cc"
    [(set (reg CC_REGNUM)
!         (compare (abs:GPR (match_operand:DI 1 "register_operand" "d"))
                   (const_int 0)))
!    (set (match_operand:GPR 0 "register_operand" "=d")
!         (abs:GPR (match_dup 1)))]
    "s390_match_ccmode (insn, CCAmode)"
    "lp<g>r\t%0,%1"
    [(set_attr "op_type"  "RR<E>")
--- 8663,8672 ----
  ; lpr, lpgr
  (define_insn "*abs<mode>2_cc"
    [(set (reg CC_REGNUM)
!         (compare (abs:DSI (match_operand:DI 1 "register_operand" "d"))
                   (const_int 0)))
!    (set (match_operand:DSI 0 "register_operand" "=d")
!         (abs:DSI (match_dup 1)))]
    "s390_match_ccmode (insn, CCAmode)"
    "lp<g>r\t%0,%1"
    [(set_attr "op_type"  "RR<E>")
***************
*** 9554,9562 ****
  ; lpr, lpgr
  (define_insn "*abs<mode>2_cconly"
    [(set (reg CC_REGNUM)
!         (compare (abs:GPR (match_operand:GPR 1 "register_operand" "d"))
                   (const_int 0)))
!    (clobber (match_scratch:GPR 0 "=d"))]
    "s390_match_ccmode (insn, CCAmode)"
    "lp<g>r\t%0,%1"
    [(set_attr "op_type"  "RR<E>")
--- 8675,8683 ----
  ; lpr, lpgr
  (define_insn "*abs<mode>2_cconly"
    [(set (reg CC_REGNUM)
!         (compare (abs:DSI (match_operand:DSI 1 "register_operand" "d"))
                   (const_int 0)))
!    (clobber (match_scratch:DSI 0 "=d"))]
    "s390_match_ccmode (insn, CCAmode)"
    "lp<g>r\t%0,%1"
    [(set_attr "op_type"  "RR<E>")
***************
*** 9564,9571 ****
  
  ; lpr, lpgr
  (define_insn "abs<mode>2"
!   [(set (match_operand:GPR 0 "register_operand" "=d")
!         (abs:GPR (match_operand:GPR 1 "register_operand" "d")))
     (clobber (reg:CC CC_REGNUM))]
    ""
    "lp<g>r\t%0,%1"
--- 8685,8692 ----
  
  ; lpr, lpgr
  (define_insn "abs<mode>2"
!   [(set (match_operand:DSI 0 "register_operand" "=d")
!         (abs:DSI (match_operand:DSI 1 "register_operand" "d")))
     (clobber (reg:CC CC_REGNUM))]
    ""
    "lp<g>r\t%0,%1"
***************
*** 9646,9655 ****
  
  (define_expand "<minmaxname><mode>3"
    [(set (reg:<minmaxcc> CC_REGNUM)
!         (compare:<minmaxcc> (match_operand:GPR 1 "loc_operand")
! 			    (match_operand:GPR 2 "loc_operand")))
!    (set (match_operand:GPR 0 "nonimmediate_operand")
! 	(if_then_else:GPR (MINMAXOP (reg:<minmaxcc> CC_REGNUM) (const_int 0))
  			  (match_dup 1)
  			  (match_dup 2)))]
    "TARGET_Z196")
--- 8767,8776 ----
  
  (define_expand "<minmaxname><mode>3"
    [(set (reg:<minmaxcc> CC_REGNUM)
!         (compare:<minmaxcc> (match_operand:DSI 1 "loc_operand")
! 			    (match_operand:DSI 2 "loc_operand")))
!    (set (match_operand:DSI 0 "nonimmediate_operand")
! 	(if_then_else:DSI (MINMAXOP (reg:<minmaxcc> CC_REGNUM) (const_int 0))
  			  (match_dup 1)
  			  (match_dup 2)))]
    "TARGET_Z196")
***************
*** 9671,9677 ****
                   (const_int 0)))
     (set (match_operand:DI 0 "register_operand" "=d")
          (neg:DI (abs:DI (sign_extend:DI (match_dup 1)))))]
!   "TARGET_ZARCH && s390_match_ccmode (insn, CCAmode)"
    "lngfr\t%0,%1"
    [(set_attr "op_type"  "RRE")
     (set_attr "z10prop" "z10_c")])
--- 8792,8798 ----
                   (const_int 0)))
     (set (match_operand:DI 0 "register_operand" "=d")
          (neg:DI (abs:DI (sign_extend:DI (match_dup 1)))))]
!   "s390_match_ccmode (insn, CCAmode)"
    "lngfr\t%0,%1"
    [(set_attr "op_type"  "RRE")
     (set_attr "z10prop" "z10_c")])
***************
*** 9681,9687 ****
  	(neg:DI (abs:DI (sign_extend:DI
                            (match_operand:SI 1 "register_operand" "d")))))
     (clobber (reg:CC CC_REGNUM))]
!   "TARGET_ZARCH"
    "lngfr\t%0,%1"
    [(set_attr "op_type" "RRE")
     (set_attr "z10prop" "z10_c")])
--- 8802,8808 ----
  	(neg:DI (abs:DI (sign_extend:DI
                            (match_operand:SI 1 "register_operand" "d")))))
     (clobber (reg:CC CC_REGNUM))]
!   ""
    "lngfr\t%0,%1"
    [(set_attr "op_type" "RRE")
     (set_attr "z10prop" "z10_c")])
***************
*** 9689,9698 ****
  ; lnr, lngr
  (define_insn "*negabs<mode>2_cc"
    [(set (reg CC_REGNUM)
!         (compare (neg:GPR (abs:GPR (match_operand:GPR 1 "register_operand" "d")))
                   (const_int 0)))
!    (set (match_operand:GPR 0 "register_operand" "=d")
!         (neg:GPR (abs:GPR (match_dup 1))))]
    "s390_match_ccmode (insn, CCAmode)"
    "ln<g>r\t%0,%1"
    [(set_attr "op_type"  "RR<E>")
--- 8810,8819 ----
  ; lnr, lngr
  (define_insn "*negabs<mode>2_cc"
    [(set (reg CC_REGNUM)
!         (compare (neg:DSI (abs:DSI (match_operand:DSI 1 "register_operand" "d")))
                   (const_int 0)))
!    (set (match_operand:DSI 0 "register_operand" "=d")
!         (neg:DSI (abs:DSI (match_dup 1))))]
    "s390_match_ccmode (insn, CCAmode)"
    "ln<g>r\t%0,%1"
    [(set_attr "op_type"  "RR<E>")
***************
*** 9701,9709 ****
  ; lnr, lngr
  (define_insn "*negabs<mode>2_cconly"
    [(set (reg CC_REGNUM)
!         (compare (neg:GPR (abs:GPR (match_operand:GPR 1 "register_operand" "d")))
                   (const_int 0)))
!    (clobber (match_scratch:GPR 0 "=d"))]
    "s390_match_ccmode (insn, CCAmode)"
    "ln<g>r\t%0,%1"
    [(set_attr "op_type"  "RR<E>")
--- 8822,8830 ----
  ; lnr, lngr
  (define_insn "*negabs<mode>2_cconly"
    [(set (reg CC_REGNUM)
!         (compare (neg:DSI (abs:DSI (match_operand:DSI 1 "register_operand" "d")))
                   (const_int 0)))
!    (clobber (match_scratch:DSI 0 "=d"))]
    "s390_match_ccmode (insn, CCAmode)"
    "ln<g>r\t%0,%1"
    [(set_attr "op_type"  "RR<E>")
***************
*** 9711,9718 ****
  
  ; lnr, lngr
  (define_insn "*negabs<mode>2"
!   [(set (match_operand:GPR 0 "register_operand" "=d")
! 	(neg:GPR (abs:GPR (match_operand:GPR 1 "register_operand" "d"))))
     (clobber (reg:CC CC_REGNUM))]
    ""
    "ln<g>r\t%0,%1"
--- 8832,8839 ----
  
  ; lnr, lngr
  (define_insn "*negabs<mode>2"
!   [(set (match_operand:DSI 0 "register_operand" "=d")
! 	(neg:DSI (abs:DSI (match_operand:DSI 1 "register_operand" "d"))))
     (clobber (reg:CC CC_REGNUM))]
    ""
    "ln<g>r\t%0,%1"
***************
*** 9818,9826 ****
  (define_expand "clzdi2"
    [(set (match_operand:DI 0 "register_operand" "=d")
  	(clz:DI (match_operand:DI 1 "register_operand" "d")))]
!   "TARGET_EXTIMM && TARGET_ZARCH"
  {
!   if (!(TARGET_Z17 && TARGET_64BIT))
      {
        rtx_insn *insn;
        rtx clz_equal;
--- 8939,8947 ----
  (define_expand "clzdi2"
    [(set (match_operand:DI 0 "register_operand" "=d")
  	(clz:DI (match_operand:DI 1 "register_operand" "d")))]
!   "TARGET_EXTIMM"
  {
!   if (!TARGET_Z17)
      {
        rtx_insn *insn;
        rtx clz_equal;
***************
*** 9841,9847 ****
  (define_insn "*clzg"
    [(set (match_operand:DI 0 "register_operand" "=d")
  	(clz:DI (match_operand:DI 1 "register_operand" "d")))]
!   "TARGET_Z17 && TARGET_64BIT"
    "clzg\t%0,%1"
    [(set_attr "op_type" "RRE")])
  
--- 8962,8968 ----
  (define_insn "*clzg"
    [(set (match_operand:DI 0 "register_operand" "=d")
  	(clz:DI (match_operand:DI 1 "register_operand" "d")))]
!   "TARGET_Z17"
    "clzg\t%0,%1"
    [(set_attr "op_type" "RRE")])
  
***************
*** 9858,9871 ****
  			     (subreg:SI (clz:DI (match_dup 1)) 4))))))
     (clobber (reg:CC CC_REGNUM))]
    "UINTVAL (operands[2]) == HOST_WIDE_INT_1U << 63
!    && TARGET_EXTIMM && TARGET_ZARCH"
    "flogr\t%0,%1"
    [(set_attr "op_type"  "RRE")])
  
  (define_expand "clzsi2"
    [(match_operand:SI 0 "register_operand" "")
     (match_operand:SI 1 "register_operand" "")]
!   "TARGET_EXTIMM && TARGET_ZARCH"
  {
    rtx extreg = gen_reg_rtx (DImode);
    rtx clzreg = gen_reg_rtx (DImode);
--- 8979,8992 ----
  			     (subreg:SI (clz:DI (match_dup 1)) 4))))))
     (clobber (reg:CC CC_REGNUM))]
    "UINTVAL (operands[2]) == HOST_WIDE_INT_1U << 63
!    && TARGET_EXTIMM"
    "flogr\t%0,%1"
    [(set_attr "op_type"  "RRE")])
  
  (define_expand "clzsi2"
    [(match_operand:SI 0 "register_operand" "")
     (match_operand:SI 1 "register_operand" "")]
!   "TARGET_EXTIMM"
  {
    rtx extreg = gen_reg_rtx (DImode);
    rtx clzreg = gen_reg_rtx (DImode);
***************
*** 9883,9889 ****
  (define_insn "ctzdi2"
    [(set (match_operand:DI 0 "register_operand" "=d")
  	(ctz:DI (match_operand:DI 1 "register_operand" "d")))]
!   "TARGET_Z17 && TARGET_64BIT"
    "ctzg\t%0,%1"
    [(set_attr "op_type" "RRE")])
  
--- 9004,9010 ----
  (define_insn "ctzdi2"
    [(set (match_operand:DI 0 "register_operand" "=d")
  	(ctz:DI (match_operand:DI 1 "register_operand" "d")))]
!   "TARGET_Z17"
    "ctzg\t%0,%1"
    [(set_attr "op_type" "RRE")])
  
***************
*** 9892,9898 ****
  	(zero_extend:DI (match_operand:SI 1 "register_operand" "")))
     (set (match_dup 3) (ctz:DI (match_dup 2)))
     (set (match_operand:SI 0 "register_operand" "") (subreg:SI (match_dup 3) 4))]
!   "TARGET_Z17 && TARGET_64BIT"
  {
    operands[2] = gen_reg_rtx (DImode);
    operands[3] = gen_reg_rtx (DImode);
--- 9013,9019 ----
  	(zero_extend:DI (match_operand:SI 1 "register_operand" "")))
     (set (match_dup 3) (ctz:DI (match_dup 2)))
     (set (match_operand:SI 0 "register_operand" "") (subreg:SI (match_dup 3) 4))]
!   "TARGET_Z17"
  {
    operands[2] = gen_reg_rtx (DImode);
    operands[3] = gen_reg_rtx (DImode);
***************
*** 9907,9922 ****
  ;
  
  (define_expand "rotl<mode>3"
!   [(set (match_operand:GPR 0 "register_operand" "")
!         (rotate:GPR (match_operand:GPR 1 "register_operand" "")
  		    (match_operand:QI 2 "shift_count_operand" "")))]
    ""
    "")
  
  ; rll, rllg
  (define_insn "*rotl<mode>3"
!   [(set (match_operand:GPR             0 "register_operand"  "=d")
! 	(rotate:GPR (match_operand:GPR 1 "register_operand"   "d")
  		    (match_operand:QI  2 "shift_count_operand" "jsc")))]
    ""
    "rll<g>\t%0,%1,%Y2"
--- 9028,9043 ----
  ;
  
  (define_expand "rotl<mode>3"
!   [(set (match_operand:DSI 0 "register_operand" "")
!         (rotate:DSI (match_operand:DSI 1 "register_operand" "")
  		    (match_operand:QI 2 "shift_count_operand" "")))]
    ""
    "")
  
  ; rll, rllg
  (define_insn "*rotl<mode>3"
!   [(set (match_operand:DSI             0 "register_operand"  "=d")
! 	(rotate:DSI (match_operand:DSI 1 "register_operand"   "d")
  		    (match_operand:QI  2 "shift_count_operand" "jsc")))]
    ""
    "rll<g>\t%0,%1,%Y2"
***************
*** 9940,9963 ****
    ""
    "")
  
- ; ESA 64 bit register pair shift with reg or imm shift count
- ; sldl, srdl
- (define_insn "*<shift>di3_31"
-   [(set (match_operand:DI 0 "register_operand"            "=d")
-         (SHIFT:DI (match_operand:DI 1 "register_operand"   "0")
-                   (match_operand:QI 2 "shift_count_operand" "jsc")))]
-   "!TARGET_ZARCH"
-   "s<lr>dl\t%0,%Y2"
-   [(set_attr "op_type"  "RS")
-    (set_attr "atype"    "reg")
-    (set_attr "z196prop" "z196_cracked")])
- 
  
  ; 64 bit register shift with reg or imm shift count
  ; sll, srl, sllg, srlg, sllk, srlk
  (define_insn "*<shift><mode>3"
!   [(set (match_operand:GPR 0 "register_operand"              "=d, d")
!         (SHIFT:GPR (match_operand:GPR 1 "register_operand" "<d0>, d")
                     (match_operand:QI 2 "shift_count_operand"   "jsc,jsc")))]
    ""
    "@
--- 9061,9072 ----
    ""
    "")
  
  
  ; 64 bit register shift with reg or imm shift count
  ; sll, srl, sllg, srlg, sllk, srlk
  (define_insn "*<shift><mode>3"
!   [(set (match_operand:DSI 0 "register_operand"              "=d, d")
!         (SHIFT:DSI (match_operand:DSI 1 "register_operand" "<d0>, d")
                     (match_operand:QI 2 "shift_count_operand"   "jsc,jsc")))]
    ""
    "@
***************
*** 9982,10002 ****
    ""
    "")
  
- (define_insn "*ashrdi3_31<setcc><cconly>"
-   [(set (match_operand:DI 0 "register_operand"               "=d")
-         (ashiftrt:DI (match_operand:DI 1 "register_operand"   "0")
-                      (match_operand:QI 2 "shift_count_operand" "jsc")))
-    (clobber (reg:CC CC_REGNUM))]
-   "!TARGET_ZARCH"
-   "srda\t%0,%Y2"
-   [(set_attr "op_type" "RS")
-    (set_attr "atype"   "reg")])
- 
  
  ; sra, srag
  (define_insn "*ashr<mode>3<setcc><cconly>"
!   [(set (match_operand:GPR 0 "register_operand"                 "=d, d")
!         (ashiftrt:GPR (match_operand:GPR 1 "register_operand" "<d0>, d")
                        (match_operand:QI 2 "shift_count_operand"   "jsc,jsc")))
     (clobber (reg:CC CC_REGNUM))]
    ""
--- 9091,9101 ----
    ""
    "")
  
  
  ; sra, srag
  (define_insn "*ashr<mode>3<setcc><cconly>"
!   [(set (match_operand:DSI 0 "register_operand"                 "=d, d")
!         (ashiftrt:DSI (match_operand:DSI 1 "register_operand" "<d0>, d")
                        (match_operand:QI 2 "shift_count_operand"   "jsc,jsc")))
     (clobber (reg:CC CC_REGNUM))]
    ""
***************
*** 10016,10023 ****
  (define_expand "cbranch<mode>4"
    [(set (pc)
          (if_then_else (match_operator 0 "comparison_operator"
!         	       [(match_operand:GPR 1 "register_operand" "")
!                         (match_operand:GPR 2 "general_operand" "")])
  		      (label_ref (match_operand 3 "" ""))
                        (pc)))]
    ""
--- 9115,9122 ----
  (define_expand "cbranch<mode>4"
    [(set (pc)
          (if_then_else (match_operator 0 "comparison_operator"
! 		       [(match_operand:DSI 1 "register_operand" "")
!                         (match_operand:DSI 2 "general_operand" "")])
  		      (label_ref (match_operand 3 "" ""))
                        (pc)))]
    ""
***************
*** 10184,10191 ****
  
  (define_expand "ctrap<mode>4"
    [(trap_if (match_operator 0 "comparison_operator"
!              [(match_operand:GPR 1 "register_operand" "")
!               (match_operand:GPR 2 "general_operand" "")])
  	     (match_operand 3 "const0_operand" ""))]
    ""
    {
--- 9283,9290 ----
  
  (define_expand "ctrap<mode>4"
    [(trap_if (match_operator 0 "comparison_operator"
!              [(match_operand:DSI 1 "register_operand" "")
!               (match_operand:DSI 2 "general_operand" "")])
  	     (match_operand 3 "const0_operand" ""))]
    ""
    {
***************
*** 10221,10228 ****
  ; crt, cgrt, cit, cgit
  (define_insn "*cmp_and_trap_signed_int<mode>"
    [(trap_if (match_operator 0 "s390_signed_integer_comparison"
! 	       [(match_operand:GPR 1 "register_operand"  "d,d")
! 		(match_operand:GPR 2 "nonmemory_operand" "d,K")])
  	    (const_int 0))]
    "TARGET_Z10"
    "@
--- 9320,9327 ----
  ; crt, cgrt, cit, cgit
  (define_insn "*cmp_and_trap_signed_int<mode>"
    [(trap_if (match_operator 0 "s390_signed_integer_comparison"
! 	       [(match_operand:DSI 1 "register_operand"  "d,d")
! 		(match_operand:DSI 2 "nonmemory_operand" "d,K")])
  	    (const_int 0))]
    "TARGET_Z10"
    "@
***************
*** 10235,10242 ****
  ; clrt, clgrt, clfit, clgit, clt, clgt
  (define_insn "*cmp_and_trap_unsigned_int<mode>"
    [(trap_if (match_operator 0 "s390_unsigned_integer_comparison"
! 	       [(match_operand:GPR 1 "register_operand" "d,d,d")
! 		(match_operand:GPR 2 "general_operand"  "d,D,S")])
  	    (const_int 0))]
    "TARGET_Z10"
    "@
--- 9334,9341 ----
  ; clrt, clgrt, clfit, clgit, clt, clgt
  (define_insn "*cmp_and_trap_unsigned_int<mode>"
    [(trap_if (match_operator 0 "s390_unsigned_integer_comparison"
! 	       [(match_operand:DSI 1 "register_operand" "d,d,d")
! 		(match_operand:DSI 2 "general_operand"  "d,D,S")])
  	    (const_int 0))]
    "TARGET_Z10"
    "@
***************
*** 10250,10259 ****
  
  ; lat, lgat
  (define_insn "*load_and_trap<mode>"
!   [(trap_if (eq (match_operand:GPR 0 "memory_operand"  "T")
  		(const_int 0))
  	    (const_int 0))
!    (set (match_operand:GPR 1 "register_operand" "=d")
  	(match_dup 0))]
    "TARGET_ZEC12"
    "l<g>at\t%1,%0"
--- 9349,9358 ----
  
  ; lat, lgat
  (define_insn "*load_and_trap<mode>"
!   [(trap_if (eq (match_operand:DSI 0 "memory_operand"  "T")
  		(const_int 0))
  	    (const_int 0))
!    (set (match_operand:DSI 1 "register_operand" "=d")
  	(match_dup 0))]
    "TARGET_ZEC12"
    "l<g>at\t%1,%0"
***************
*** 10272,10290 ****
  ; necessary to load the compare and the increment values into a
  ; register pair as needed by brxle.
  
! (define_insn_and_split "*brx_stage1_<GPR:mode>"
    [(set (pc)
          (if_then_else
  	 (match_operator 6 "s390_brx_operator"
! 	    [(plus:GPR (match_operand:GPR 1 "register_operand" "")
! 		       (match_operand:GPR 2 "general_operand"  ""))
! 	     (match_operand:GPR 3 "register_operand" "")])
  	 (label_ref (match_operand 0 "" ""))
  	 (pc)))
!    (set (match_operand:GPR 4 "nonimmediate_operand" "")
!         (plus:GPR (match_dup 1) (match_dup 2)))
     (clobber (reg:CC CC_REGNUM))
!    (clobber (match_scratch:GPR 5 ""))]
    ""
    "#"
    "!reload_completed && !reload_in_progress"
--- 9371,9389 ----
  ; necessary to load the compare and the increment values into a
  ; register pair as needed by brxle.
  
! (define_insn_and_split "*brx_stage1_<DSI:mode>"
    [(set (pc)
          (if_then_else
  	 (match_operator 6 "s390_brx_operator"
! 	    [(plus:DSI (match_operand:DSI 1 "register_operand" "")
! 		       (match_operand:DSI 2 "general_operand"  ""))
! 	     (match_operand:DSI 3 "register_operand" "")])
  	 (label_ref (match_operand 0 "" ""))
  	 (pc)))
!    (set (match_operand:DSI 4 "nonimmediate_operand" "")
!         (plus:DSI (match_dup 1) (match_dup 2)))
     (clobber (reg:CC CC_REGNUM))
!    (clobber (match_scratch:DSI 5 ""))]
    ""
    "#"
    "!reload_completed && !reload_in_progress"
***************
*** 10293,10312 ****
     (parallel [(set (pc)
  		   (if_then_else
  		    (match_op_dup 6
! 		       [(plus:GPR (match_dup 1) (match_dup 7))
  			(match_dup 8)])
  		    (label_ref (match_dup 0))
  		    (pc)))
  	      (set (match_dup 4)
! 		   (plus:GPR (match_dup 1) (match_dup 7)))
  	      (clobber (match_dup 5))
  	      (clobber (reg:CC CC_REGNUM))])]
    {
!     rtx dreg = gen_reg_rtx (word_mode == DImode ? TImode : DImode);
!     operands[7] = gen_lowpart (<GPR:MODE>mode,
! 			       gen_highpart (word_mode, dreg));
!     operands[8] = gen_lowpart (<GPR:MODE>mode,
! 			       gen_lowpart (word_mode, dreg));
    })
  
  ; brxlg, brxhg
--- 9392,9411 ----
     (parallel [(set (pc)
  		   (if_then_else
  		    (match_op_dup 6
! 		       [(plus:DSI (match_dup 1) (match_dup 7))
  			(match_dup 8)])
  		    (label_ref (match_dup 0))
  		    (pc)))
  	      (set (match_dup 4)
! 		   (plus:DSI (match_dup 1) (match_dup 7)))
  	      (clobber (match_dup 5))
  	      (clobber (reg:CC CC_REGNUM))])]
    {
!     rtx dreg = gen_reg_rtx (TImode);
!     operands[7] = gen_lowpart (<DSI:MODE>mode,
! 			       gen_highpart (DImode, dreg));
!     operands[8] = gen_lowpart (<DSI:MODE>mode,
! 			       gen_lowpart (DImode, dreg));
    })
  
  ; brxlg, brxhg
***************
*** 10325,10331 ****
  		 (subreg:DI (match_dup 2) 0)))
     (clobber (match_scratch:DI 4 "=X,&1,&?d"))
     (clobber (reg:CC CC_REGNUM))]
!   "TARGET_ZARCH"
  {
    if (which_alternative != 0)
      return "#";
--- 9424,9430 ----
  		 (subreg:DI (match_dup 2) 0)))
     (clobber (match_scratch:DI 4 "=X,&1,&?d"))
     (clobber (reg:CC CC_REGNUM))]
!   ""
  {
    if (which_alternative != 0)
      return "#";
***************
*** 10368,10374 ****
  		 (subreg:SI (match_dup 2) 4)))
     (clobber (match_scratch:SI 4 "=X,&1,&?d"))
     (clobber (reg:CC CC_REGNUM))]
!   "TARGET_ZARCH"
  {
    if (which_alternative != 0)
      return "#";
--- 9467,9473 ----
  		 (subreg:SI (match_dup 2) 4)))
     (clobber (match_scratch:SI 4 "=X,&1,&?d"))
     (clobber (reg:CC CC_REGNUM))]
!   ""
  {
    if (which_alternative != 0)
      return "#";
***************
*** 10395,10443 ****
          (if_then_else (lt (abs (minus (pc) (match_dup 0))) (const_int 60000))
                        (const_int 6) (const_int 14)))])
  
- ; brxle, brxh
- 
- (define_insn_and_split "*brx_31bit"
-   [(set (pc)
-         (if_then_else
-           (match_operator 5 "s390_brx_operator"
- 	    [(plus:SI (match_operand:SI 1 "register_operand" "d,d,d")
- 		      (subreg:SI (match_operand:DI 2 "register_operand" "d,d,d") 0))
- 	     (subreg:SI (match_dup 2) 4)])
-           (label_ref (match_operand 0 "" ""))
-           (pc)))
-    (set (match_operand:SI 3 "nonimmediate_operand" "=1,?X,?X")
-         (plus:SI (match_dup 1)
- 		 (subreg:SI (match_dup 2) 0)))
-    (clobber (match_scratch:SI 4 "=X,&1,&?d"))
-    (clobber (reg:CC CC_REGNUM))]
-   "!TARGET_ZARCH"
- {
-   if (which_alternative != 0)
-     return "#";
-   else if (get_attr_length (insn) == 6)
-     return "brx%C5\t%1,%2,%l0";
-   else
-     return "ar\t%1,%2\;cr\t%1,%M2\;jg%C5\t%l0";
- }
-   "&& reload_completed
-    && (!REG_P (operands[3])
-        || !rtx_equal_p (operands[1], operands[3]))"
-   [(set (match_dup 4) (match_dup 1))
-    (parallel [(set (match_dup 4) (plus:SI (match_dup 4) (subreg:SI (match_dup 2) 0)))
- 	      (clobber (reg:CC CC_REGNUM))])
-    (set (reg:CCS CC_REGNUM) (compare:CCS (match_dup 4) (subreg:SI (match_dup 2) 4)))
-    (set (match_dup 3) (match_dup 4))
-    (set (pc) (if_then_else (match_op_dup 5 [(reg:CCS CC_REGNUM) (const_int 0)])
- 			   (label_ref (match_dup 0))
- 			   (pc)))]
-   ""
-   [(set_attr "op_type"  "RSI")
-    (set_attr "type"  "branch")
-    (set (attr "length")
-         (if_then_else (lt (abs (minus (pc) (match_dup 0))) (const_int 60000))
-                       (const_int 6) (const_int 14)))])
- 
  
  ;; branch on count
  
--- 9494,9499 ----
***************
*** 10448,10454 ****
  {
    if (GET_MODE (operands[0]) == SImode)
      emit_jump_insn (gen_doloop_si64 (operands[1], operands[0], operands[0]));
!   else if (GET_MODE (operands[0]) == DImode && TARGET_ZARCH)
      emit_jump_insn (gen_doloop_di (operands[1], operands[0], operands[0]));
    else
      FAIL;
--- 9504,9510 ----
  {
    if (GET_MODE (operands[0]) == SImode)
      emit_jump_insn (gen_doloop_si64 (operands[1], operands[0], operands[0]));
!   else if (GET_MODE (operands[0]) == DImode)
      emit_jump_insn (gen_doloop_di (operands[1], operands[0], operands[0]));
    else
      FAIL;
***************
*** 10509,10515 ****
          (plus:DI (match_dup 1) (const_int -1)))
     (clobber (match_scratch:DI 3 "=X,&1,&?d"))
     (clobber (reg:CC CC_REGNUM))]
!   "TARGET_ZARCH"
  {
    if (which_alternative != 0)
      return "#";
--- 9565,9571 ----
          (plus:DI (match_dup 1) (const_int -1)))
     (clobber (match_scratch:DI 3 "=X,&1,&?d"))
     (clobber (reg:CC CC_REGNUM))]
!   ""
  {
    if (which_alternative != 0)
      return "#";
***************
*** 10589,10607 ****
      {
        operands[0] = force_reg (Pmode, operands[0]);
        if (TARGET_CPU_Z10)
! 	{
! 	  if (TARGET_64BIT)
! 	    emit_jump_insn (gen_indirect_jump_via_thunkdi_z10 (operands[0]));
! 	  else
! 	    emit_jump_insn (gen_indirect_jump_via_thunksi_z10 (operands[0]));
! 	}
        else
! 	{
! 	  if (TARGET_64BIT)
! 	    emit_jump_insn (gen_indirect_jump_via_thunkdi (operands[0]));
! 	  else
! 	    emit_jump_insn (gen_indirect_jump_via_thunksi (operands[0]));
! 	}
        DONE;
      }
  
--- 9645,9653 ----
      {
        operands[0] = force_reg (Pmode, operands[0]);
        if (TARGET_CPU_Z10)
! 	emit_jump_insn (gen_indirect_jump_via_thunkdi_z10 (operands[0]));
        else
! 	emit_jump_insn (gen_indirect_jump_via_thunkdi (operands[0]));
        DONE;
      }
  
***************
*** 10610,10634 ****
        operands[0] = force_reg (Pmode, operands[0]);
        rtx label_ref = gen_rtx_LABEL_REF (VOIDmode, gen_label_rtx ());
        if (TARGET_CPU_Z10)
! 	{
! 	  if (TARGET_64BIT)
! 	    emit_jump_insn (gen_indirect_jump_via_inlinethunkdi_z10 (operands[0],
! 								     label_ref));
! 	  else
! 	    emit_jump_insn (gen_indirect_jump_via_inlinethunksi_z10 (operands[0],
! 								     label_ref));
! 	}
        else
! 	{
! 	  if (TARGET_64BIT)
! 	    emit_jump_insn (gen_indirect_jump_via_inlinethunkdi (operands[0],
! 								 label_ref,
! 								 force_reg (Pmode, label_ref)));
! 	  else
! 	    emit_jump_insn (gen_indirect_jump_via_inlinethunksi (operands[0],
! 								 label_ref,
! 								 force_reg (Pmode, label_ref)));
! 	}
        DONE;
      }
  })
--- 9656,9667 ----
        operands[0] = force_reg (Pmode, operands[0]);
        rtx label_ref = gen_rtx_LABEL_REF (VOIDmode, gen_label_rtx ());
        if (TARGET_CPU_Z10)
! 	emit_jump_insn (gen_indirect_jump_via_inlinethunkdi_z10 (operands[0],
! 								 label_ref));
        else
! 	emit_jump_insn (gen_indirect_jump_via_inlinethunkdi (operands[0],
! 							     label_ref,
! 							     force_reg (Pmode, label_ref)));
        DONE;
      }
  })
***************
*** 10652,10660 ****
    (set_attr "type"  "branch")
    (set_attr "atype" "agen")])
  
! (define_insn "indirect_jump_via_thunk<mode>_z10"
    [(set (pc)
! 	(match_operand:P 0 "register_operand" "a"))]
   "TARGET_INDIRECT_BRANCH_NOBP_JUMP_THUNK
    && TARGET_CPU_Z10"
  {
--- 9685,9693 ----
    (set_attr "type"  "branch")
    (set_attr "atype" "agen")])
  
! (define_insn "indirect_jump_via_thunkdi_z10"
    [(set (pc)
! 	(match_operand:DI 0 "register_operand" "a"))]
   "TARGET_INDIRECT_BRANCH_NOBP_JUMP_THUNK
    && TARGET_CPU_Z10"
  {
***************
*** 10669,10678 ****
    (set_attr "type"  "branch")
    (set_attr "atype" "agen")])
  
! (define_insn "indirect_jump_via_thunk<mode>"
    [(set (pc)
! 	(match_operand:P 0 "register_operand" " a"))
!    (clobber (reg:P INDIRECT_BRANCH_THUNK_REGNUM))]
   "TARGET_INDIRECT_BRANCH_NOBP_JUMP_THUNK
    && !TARGET_CPU_Z10"
  {
--- 9702,9711 ----
    (set_attr "type"  "branch")
    (set_attr "atype" "agen")])
  
! (define_insn "indirect_jump_via_thunkdi"
    [(set (pc)
! 	(match_operand:DI 0 "register_operand" " a"))
!    (clobber (reg:DI INDIRECT_BRANCH_THUNK_REGNUM))]
   "TARGET_INDIRECT_BRANCH_NOBP_JUMP_THUNK
    && !TARGET_CPU_Z10"
  {
***************
*** 10691,10702 ****
  ; The label_ref is wrapped into an if_then_else in order to hide it
  ; from mark_jump_label.  Without this the label_ref would become the
  ; ONLY jump target of that jump breaking the control flow graph.
! (define_insn "indirect_jump_via_inlinethunk<mode>_z10"
!   [(unspec [(if_then_else (match_operand:P 1 "larl_operand" "X")
  			  (const_int 0)
  			  (const_int 0))
  	    (const_int 0)] UNSPEC_EXECUTE_JUMP)
!    (set (pc) (match_operand:P 0 "register_operand" "a"))]
    "TARGET_INDIRECT_BRANCH_NOBP_JUMP_INLINE_THUNK
     && TARGET_CPU_Z10"
  {
--- 9724,9735 ----
  ; The label_ref is wrapped into an if_then_else in order to hide it
  ; from mark_jump_label.  Without this the label_ref would become the
  ; ONLY jump target of that jump breaking the control flow graph.
! (define_insn "indirect_jump_via_inlinethunkdi_z10"
!   [(unspec [(if_then_else (match_operand:DI 1 "larl_operand" "X")
  			  (const_int 0)
  			  (const_int 0))
  	    (const_int 0)] UNSPEC_EXECUTE_JUMP)
!    (set (pc) (match_operand:DI 0 "register_operand" "a"))]
    "TARGET_INDIRECT_BRANCH_NOBP_JUMP_INLINE_THUNK
     && TARGET_CPU_Z10"
  {
***************
*** 10707,10718 ****
     (set_attr "type"    "branch")
     (set_attr "length"  "10")])
  
! (define_insn "indirect_jump_via_inlinethunk<mode>"
!   [(unspec [(if_then_else (match_operand:P 1 "larl_operand" "X")
  			  (const_int 0)
  			  (const_int 0))
! 	    (match_operand:P 2 "register_operand" "a")] UNSPEC_EXECUTE_JUMP)
!    (set (pc) (match_operand:P 0 "register_operand" "a"))]
    "TARGET_INDIRECT_BRANCH_NOBP_JUMP_INLINE_THUNK
     && !TARGET_CPU_Z10"
  {
--- 9740,9751 ----
     (set_attr "type"    "branch")
     (set_attr "length"  "10")])
  
! (define_insn "indirect_jump_via_inlinethunkdi"
!   [(unspec [(if_then_else (match_operand:DI 1 "larl_operand" "X")
  			  (const_int 0)
  			  (const_int 0))
! 	    (match_operand:DI 2 "register_operand" "a")] UNSPEC_EXECUTE_JUMP)
!    (set (pc) (match_operand:DI 0 "register_operand" "a"))]
    "TARGET_INDIRECT_BRANCH_NOBP_JUMP_INLINE_THUNK
     && !TARGET_CPU_Z10"
  {
***************
*** 10753,10775 ****
        operands[0] = force_reg (GET_MODE (operands[0]), operands[0]);
  
        if (TARGET_CPU_Z10)
! 	{
! 	  if (TARGET_64BIT)
! 	    emit_jump_insn (gen_casesi_jump_via_thunkdi_z10 (operands[0],
! 							     operands[1]));
! 	  else
! 	    emit_jump_insn (gen_casesi_jump_via_thunksi_z10 (operands[0],
! 							     operands[1]));
! 	}
        else
! 	{
! 	  if (TARGET_64BIT)
! 	    emit_jump_insn (gen_casesi_jump_via_thunkdi (operands[0],
! 							 operands[1]));
! 	  else
! 	    emit_jump_insn (gen_casesi_jump_via_thunksi (operands[0],
! 							 operands[1]));
! 	}
        DONE;
      }
  
--- 9786,9794 ----
        operands[0] = force_reg (GET_MODE (operands[0]), operands[0]);
  
        if (TARGET_CPU_Z10)
! 	emit_jump_insn (gen_casesi_jump_via_thunkdi_z10 (operands[0], operands[1]));
        else
! 	emit_jump_insn (gen_casesi_jump_via_thunkdi (operands[0], operands[1]));
        DONE;
      }
  
***************
*** 10778,10806 ****
        operands[0] = force_reg (Pmode, operands[0]);
        rtx label_ref = gen_rtx_LABEL_REF (VOIDmode, gen_label_rtx ());
        if (TARGET_CPU_Z10)
! 	{
! 	  if (TARGET_64BIT)
! 	    emit_jump_insn (gen_casesi_jump_via_inlinethunkdi_z10 (operands[0],
! 								   operands[1],
! 								   label_ref));
! 	  else
! 	    emit_jump_insn (gen_casesi_jump_via_inlinethunksi_z10 (operands[0],
! 								   operands[1],
! 								   label_ref));
! 	}
!       else
! 	{
! 	  if (TARGET_64BIT)
! 	    emit_jump_insn (gen_casesi_jump_via_inlinethunkdi (operands[0],
! 							       operands[1],
! 							       label_ref,
! 							       force_reg (Pmode, label_ref)));
! 	  else
! 	    emit_jump_insn (gen_casesi_jump_via_inlinethunksi (operands[0],
  							       operands[1],
! 							       label_ref,
! 							       force_reg (Pmode, label_ref)));
! 	}
        DONE;
      }
  })
--- 9797,9810 ----
        operands[0] = force_reg (Pmode, operands[0]);
        rtx label_ref = gen_rtx_LABEL_REF (VOIDmode, gen_label_rtx ());
        if (TARGET_CPU_Z10)
! 	emit_jump_insn (gen_casesi_jump_via_inlinethunkdi_z10 (operands[0],
  							       operands[1],
! 							       label_ref));
!       else
! 	emit_jump_insn (gen_casesi_jump_via_inlinethunkdi (operands[0],
! 							   operands[1],
! 							   label_ref,
! 							   force_reg (Pmode, label_ref)));
        DONE;
      }
  })
***************
*** 10824,10831 ****
     (set_attr "type"  "branch")
     (set_attr "atype" "agen")])
  
! (define_insn "casesi_jump_via_thunk<mode>_z10"
!  [(set (pc) (match_operand:P 0 "register_operand" "a"))
    (use (label_ref (match_operand 1 "" "")))]
   "TARGET_INDIRECT_BRANCH_NOBP_JUMP_THUNK
    && TARGET_CPU_Z10"
--- 9828,9835 ----
     (set_attr "type"  "branch")
     (set_attr "atype" "agen")])
  
! (define_insn "casesi_jump_via_thunkdi_z10"
!  [(set (pc) (match_operand:DI 0 "register_operand" "a"))
    (use (label_ref (match_operand 1 "" "")))]
   "TARGET_INDIRECT_BRANCH_NOBP_JUMP_THUNK
    && TARGET_CPU_Z10"
***************
*** 10841,10850 ****
     (set_attr "type"  "branch")
     (set_attr "atype" "agen")])
  
! (define_insn "casesi_jump_via_thunk<mode>"
!  [(set (pc) (match_operand:P 0 "register_operand" "a"))
    (use (label_ref (match_operand 1 "" "")))
!   (clobber (reg:P INDIRECT_BRANCH_THUNK_REGNUM))]
   "TARGET_INDIRECT_BRANCH_NOBP_JUMP_THUNK
    && !TARGET_CPU_Z10"
  {
--- 9845,9854 ----
     (set_attr "type"  "branch")
     (set_attr "atype" "agen")])
  
! (define_insn "casesi_jump_via_thunkdi"
!  [(set (pc) (match_operand:DI 0 "register_operand" "a"))
    (use (label_ref (match_operand 1 "" "")))
!   (clobber (reg:DI INDIRECT_BRANCH_THUNK_REGNUM))]
   "TARGET_INDIRECT_BRANCH_NOBP_JUMP_THUNK
    && !TARGET_CPU_Z10"
  {
***************
*** 10863,10874 ****
  ; The label_ref is wrapped into an if_then_else in order to hide it
  ; from mark_jump_label.  Without this the label_ref would become the
  ; ONLY jump target of that jump breaking the control flow graph.
! (define_insn "casesi_jump_via_inlinethunk<mode>_z10"
!   [(unspec [(if_then_else (match_operand:P 2 "larl_operand" "X")
  			  (const_int 0)
  			  (const_int 0))
  	    (const_int 0)] UNSPEC_EXECUTE_JUMP)
!    (set (pc) (match_operand:P 0 "register_operand" "a"))
     (use (label_ref (match_operand 1 "" "")))]
    "TARGET_INDIRECT_BRANCH_NOBP_JUMP_INLINE_THUNK
     && TARGET_CPU_Z10"
--- 9867,9878 ----
  ; The label_ref is wrapped into an if_then_else in order to hide it
  ; from mark_jump_label.  Without this the label_ref would become the
  ; ONLY jump target of that jump breaking the control flow graph.
! (define_insn "casesi_jump_via_inlinethunkdi_z10"
!   [(unspec [(if_then_else (match_operand:DI 2 "larl_operand" "X")
  			  (const_int 0)
  			  (const_int 0))
  	    (const_int 0)] UNSPEC_EXECUTE_JUMP)
!    (set (pc) (match_operand:DI 0 "register_operand" "a"))
     (use (label_ref (match_operand 1 "" "")))]
    "TARGET_INDIRECT_BRANCH_NOBP_JUMP_INLINE_THUNK
     && TARGET_CPU_Z10"
***************
*** 10880,10891 ****
     (set_attr "type"    "cs")
     (set_attr "length"  "10")])
  
! (define_insn "casesi_jump_via_inlinethunk<mode>"
!   [(unspec [(if_then_else (match_operand:P 2 "larl_operand" "X")
  			  (const_int 0)
  			  (const_int 0))
! 	    (match_operand:P 3 "register_operand" "a")] UNSPEC_EXECUTE_JUMP)
!    (set (pc) (match_operand:P 0 "register_operand" "a"))
     (use (label_ref (match_operand 1 "" "")))]
    "TARGET_INDIRECT_BRANCH_NOBP_JUMP_INLINE_THUNK
     && !TARGET_CPU_Z10"
--- 9884,9895 ----
     (set_attr "type"    "cs")
     (set_attr "length"  "10")])
  
! (define_insn "casesi_jump_via_inlinethunkdi"
!   [(unspec [(if_then_else (match_operand:DI 2 "larl_operand" "X")
  			  (const_int 0)
  			  (const_int 0))
! 	    (match_operand:DI 3 "register_operand" "a")] UNSPEC_EXECUTE_JUMP)
!    (set (pc) (match_operand:DI 0 "register_operand" "a"))
     (use (label_ref (match_operand 1 "" "")))]
    "TARGET_INDIRECT_BRANCH_NOBP_JUMP_INLINE_THUNK
     && !TARGET_CPU_Z10"
***************
*** 10919,10928 ****
     if (GET_CODE (index) != REG)
       index = copy_to_mode_reg (Pmode, index);
  
!    if (TARGET_64BIT)
!        emit_insn (gen_ashldi3 (index, index, GEN_INT (3)));
!    else
!        emit_insn (gen_ashlsi3 (index, index, const2_rtx));
  
     emit_move_insn (base, gen_rtx_LABEL_REF (Pmode, operands[3]));
  
--- 9923,9929 ----
     if (GET_CODE (index) != REG)
       index = copy_to_mode_reg (Pmode, index);
  
!    emit_insn (gen_ashldi3 (index, index, GEN_INT (3)));
  
     emit_move_insn (base, gen_rtx_LABEL_REF (Pmode, operands[3]));
  
***************
*** 11167,11176 ****
     (set_attr "atype" "agen")
     (set_attr "z196prop" "z196_cracked")])
  
! (define_insn "*basr_via_thunk<mode>_z10"
!   [(call (mem:QI (match_operand:P 0 "register_operand" "a"))
           (match_operand 1 "const_int_operand"          "n"))
!    (clobber (match_operand:P 2 "register_operand"    "=&r"))]
    "TARGET_INDIRECT_BRANCH_NOBP_CALL
     && TARGET_CPU_Z10
     && !SIBLING_CALL_P (insn)"
--- 10168,10177 ----
     (set_attr "atype" "agen")
     (set_attr "z196prop" "z196_cracked")])
  
! (define_insn "*basr_via_thunkdi_z10"
!   [(call (mem:QI (match_operand:DI 0 "register_operand" "a"))
           (match_operand 1 "const_int_operand"          "n"))
!    (clobber (match_operand:DI 2 "register_operand"    "=&r"))]
    "TARGET_INDIRECT_BRANCH_NOBP_CALL
     && TARGET_CPU_Z10
     && !SIBLING_CALL_P (insn)"
***************
*** 11187,11197 ****
     (set_attr "atype" "agen")
     (set_attr "z196prop" "z196_cracked")])
  
! (define_insn "*basr_via_thunk<mode>"
!   [(call (mem:QI (match_operand:P 0 "register_operand" "a"))
           (match_operand 1 "const_int_operand"          "n"))
!    (clobber (match_operand:P 2 "register_operand"    "=&r"))
!    (clobber (reg:P INDIRECT_BRANCH_THUNK_REGNUM))]
    "TARGET_INDIRECT_BRANCH_NOBP_CALL
     && !TARGET_CPU_Z10
     && !SIBLING_CALL_P (insn)"
--- 10188,10198 ----
     (set_attr "atype" "agen")
     (set_attr "z196prop" "z196_cracked")])
  
! (define_insn "*basr_via_thunkdi"
!   [(call (mem:QI (match_operand:DI 0 "register_operand" "a"))
           (match_operand 1 "const_int_operand"          "n"))
!    (clobber (match_operand:DI 2 "register_operand"    "=&r"))
!    (clobber (reg:DI INDIRECT_BRANCH_THUNK_REGNUM))]
    "TARGET_INDIRECT_BRANCH_NOBP_CALL
     && !TARGET_CPU_Z10
     && !SIBLING_CALL_P (insn)"
***************
*** 11302,11308 ****
          (call (mem:QI (match_operand 1 "register_operand" "a"))
                (match_operand 2 "const_int_operand"        "n")))
     (clobber (match_operand 3 "register_operand"         "=&r"))
!    (clobber (reg:P INDIRECT_BRANCH_THUNK_REGNUM))]
    "TARGET_INDIRECT_BRANCH_NOBP_CALL
     && !TARGET_CPU_Z10
     && !SIBLING_CALL_P (insn)
--- 10303,10309 ----
          (call (mem:QI (match_operand 1 "register_operand" "a"))
                (match_operand 2 "const_int_operand"        "n")))
     (clobber (match_operand 3 "register_operand"         "=&r"))
!    (clobber (reg:DI INDIRECT_BRANCH_THUNK_REGNUM))]
    "TARGET_INDIRECT_BRANCH_NOBP_CALL
     && !TARGET_CPU_Z10
     && !SIBLING_CALL_P (insn)
***************
*** 11324,11338 ****
  ;;- Thread-local storage support.
  ;;
  
! (define_expand "@get_thread_pointer<mode>"
!   [(set (match_operand:P 0 "nonimmediate_operand" "")
! 	(unspec:P [(reg:P TP_REGNUM)] UNSPEC_GET_TP))]
    ""
    "")
  
! (define_expand "set_thread_pointer<mode>"
!   [(set (reg:P TP_REGNUM) (match_operand:P 0 "nonimmediate_operand" ""))
!    (set (reg:P TP_REGNUM) (unspec_volatile:P [(reg:P TP_REGNUM)] UNSPECV_SET_TP))]
    ""
    "")
  
--- 10325,10339 ----
  ;;- Thread-local storage support.
  ;;
  
! (define_expand "get_thread_pointerdi"
!   [(set (match_operand:DI 0 "nonimmediate_operand" "")
! 	(unspec:DI [(reg:DI TP_REGNUM)] UNSPEC_GET_TP))]
    ""
    "")
  
! (define_expand "set_thread_pointerdi"
!   [(set (reg:DI TP_REGNUM) (match_operand:DI 0 "nonimmediate_operand" ""))
!    (set (reg:DI TP_REGNUM) (unspec_volatile:DI [(reg:DI TP_REGNUM)] UNSPECV_SET_TP))]
    ""
    "")
  
***************
*** 11348,11372 ****
          (unspec:DI [(match_operand:DI 1 "memory_operand" "T")
                      (match_operand:DI 2 "" "")]
  		   UNSPEC_TLS_LOAD))]
!   "TARGET_64BIT"
    "lg\t%0,%1%J2"
    [(set_attr "op_type" "RXE")
     (set_attr "z10prop" "z10_fwd_A3")])
  
- (define_insn "*tls_load_31"
-   [(set (match_operand:SI 0 "register_operand" "=d,d")
-         (unspec:SI [(match_operand:SI 1 "memory_operand" "R,T")
-                     (match_operand:SI 2 "" "")]
- 		   UNSPEC_TLS_LOAD))]
-   "!TARGET_64BIT"
-   "@
-    l\t%0,%1%J2
-    ly\t%0,%1%J2"
-   [(set_attr "op_type" "RX,RXY")
-    (set_attr "type" "load")
-    (set_attr "cpu_facility" "*,longdisp")
-    (set_attr "z10prop" "z10_fwd_A3,z10_fwd_A3")])
- 
  (define_insn "*bras_tls"
    [(set (match_operand 0 "" "")
          (call (mem:QI (match_operand 1 "bras_sym_operand" "X"))
--- 10349,10359 ----
          (unspec:DI [(match_operand:DI 1 "memory_operand" "T")
                      (match_operand:DI 2 "" "")]
  		   UNSPEC_TLS_LOAD))]
!   ""
    "lg\t%0,%1%J2"
    [(set_attr "op_type" "RXE")
     (set_attr "z10prop" "z10_fwd_A3")])
  
  (define_insn "*bras_tls"
    [(set (match_operand 0 "" "")
          (call (mem:QI (match_operand 1 "bras_sym_operand" "X"))
***************
*** 11474,11506 ****
  
    if (<MODE>mode == TImode)
      emit_insn (gen_atomic_loadti_1 (operands[0], operands[1]));
-   else if (<MODE>mode == DImode && !TARGET_ZARCH)
-     emit_insn (gen_atomic_loaddi_1 (operands[0], operands[1]));
    else
      emit_move_insn (operands[0], operands[1]);
    DONE;
  })
  
- ; Different from movdi_31 in that we want no splitters.
- (define_insn "atomic_loaddi_1"
-   [(set (match_operand:DI 0 "register_operand" "=d,d,!*f,!*f")
- 	(unspec:DI [(match_operand:DI 1 "memory_operand" "Q,S,R,T")]
- 		   UNSPEC_MOVA))]
-   "!TARGET_ZARCH"
-   "@
-    lm\t%0,%M0,%S1
-    lmy\t%0,%M0,%S1
-    ld\t%0,%1
-    ldy\t%0,%1"
-   [(set_attr "op_type" "RS,RSY,RS,RSY")
-    (set_attr "cpu_facility" "*,longdisp,*,longdisp")
-    (set_attr "type" "lm,lm,floaddf,floaddf")])
- 
  (define_insn "atomic_loadti_1"
    [(set (match_operand:TI 0 "register_operand" "=r")
  	(unspec:TI [(match_operand:TI 1 "memory_operand" "T")]
  		   UNSPEC_MOVA))]
!   "TARGET_ZARCH"
    "lpq\t%0,%1"
    [(set_attr "op_type" "RXY")
     (set_attr "type" "other")])
--- 10461,10476 ----
  
    if (<MODE>mode == TImode)
      emit_insn (gen_atomic_loadti_1 (operands[0], operands[1]));
    else
      emit_move_insn (operands[0], operands[1]);
    DONE;
  })
  
  (define_insn "atomic_loadti_1"
    [(set (match_operand:TI 0 "register_operand" "=r")
  	(unspec:TI [(match_operand:TI 1 "memory_operand" "T")]
  		   UNSPEC_MOVA))]
!   ""
    "lpq\t%0,%1"
    [(set_attr "op_type" "RXY")
     (set_attr "type" "other")])
***************
*** 11519,11526 ****
  
    if (<MODE>mode == TImode)
      emit_insn (gen_atomic_storeti_1 (operands[0], operands[1]));
-   else if (<MODE>mode == DImode && !TARGET_ZARCH)
-     emit_insn (gen_atomic_storedi_1 (operands[0], operands[1]));
    else
      emit_move_insn (operands[0], operands[1]);
    if (is_mm_seq_cst (model))
--- 10489,10494 ----
***************
*** 11528,11553 ****
    DONE;
  })
  
- ; Different from movdi_31 in that we want no splitters.
- (define_insn "atomic_storedi_1"
-   [(set (match_operand:DI 0 "memory_operand" "=Q,S,R,T")
- 	(unspec:DI [(match_operand:DI 1 "register_operand" "d,d,!*f,!*f")]
- 		   UNSPEC_MOVA))]
-   "!TARGET_ZARCH"
-   "@
-    stm\t%1,%N1,%S0
-    stmy\t%1,%N1,%S0
-    std %1,%0
-    stdy %1,%0"
-   [(set_attr "op_type" "RS,RSY,RS,RSY")
-    (set_attr "cpu_facility" "*,longdisp,*,longdisp")
-    (set_attr "type" "stm,stm,fstoredf,fstoredf")])
- 
  (define_insn "atomic_storeti_1"
    [(set (match_operand:TI 0 "memory_operand" "=T")
  	(unspec:TI [(match_operand:TI 1 "register_operand" "r")]
  		   UNSPEC_MOVA))]
!   "TARGET_ZARCH"
    "stpq\t%1,%0"
    [(set_attr "op_type" "RXY")
     (set_attr "type" "other")])
--- 10496,10506 ----
    DONE;
  })
  
  (define_insn "atomic_storeti_1"
    [(set (match_operand:TI 0 "memory_operand" "=T")
  	(unspec:TI [(match_operand:TI 1 "register_operand" "r")]
  		   UNSPEC_MOVA))]
!   ""
    "stpq\t%1,%0"
    [(set_attr "op_type" "RXY")
     (set_attr "type" "other")])
***************
*** 11577,11589 ****
  
  (define_expand "atomic_compare_and_swap<mode>_internal"
    [(parallel
!      [(set (match_operand:DGPR 0 "register_operand")
! 	   (match_operand:DGPR 1 "s_operand"))
        (set (match_dup 1)
! 	   (unspec_volatile:DGPR
  	     [(match_dup 1)
! 	      (match_operand:DGPR 2 "register_operand")
! 	      (match_operand:DGPR 3 "register_operand")]
  	     UNSPECV_CAS))
        (set (match_operand 4 "cc_reg_operand")
  	   (match_dup 5))])]
--- 10530,10542 ----
  
  (define_expand "atomic_compare_and_swap<mode>_internal"
    [(parallel
!      [(set (match_operand:TDSI 0 "register_operand")
! 	   (match_operand:TDSI 1 "s_operand"))
        (set (match_dup 1)
! 	   (unspec_volatile:TDSI
  	     [(match_dup 1)
! 	      (match_operand:TDSI 2 "register_operand")
! 	      (match_operand:TDSI 3 "register_operand")]
  	     UNSPECV_CAS))
        (set (match_operand 4 "cc_reg_operand")
  	   (match_dup 5))])]
***************
*** 11606,11638 ****
  	  UNSPECV_CAS))
     (set (reg CC_REGNUM)
  	(compare (match_dup 1) (match_dup 2)))]
!   "TARGET_ZARCH
!    && s390_match_ccmode (insn, CCZ1mode)"
    "c<td>sg\t%0,%3,%S1"
    [(set_attr "op_type" "RSY")
     (set_attr "type"   "sem")])
  
- ; cds, cdsy
- (define_insn "*atomic_compare_and_swapdi_2"
-   [(set (match_operand:DI 0 "register_operand" "=r,r")
- 	(match_operand:DI 1 "nonsym_memory_operand" "+Q,S"))
-    (set (match_dup 1)
- 	(unspec_volatile:DI
- 	  [(match_dup 1)
- 	   (match_operand:DI 2 "register_operand" "0,0")
- 	   (match_operand:DI 3 "register_operand" "r,r")]
- 	  UNSPECV_CAS))
-    (set (reg CC_REGNUM)
- 	(compare (match_dup 1) (match_dup 2)))]
-   "!TARGET_ZARCH
-    && s390_match_ccmode (insn, CCZ1mode)"
-   "@
-    cds\t%0,%3,%S1
-    cdsy\t%0,%3,%S1"
-   [(set_attr "op_type" "RS,RSY")
-    (set_attr "cpu_facility" "*,longdisp")
-    (set_attr "type" "sem")])
- 
  ; cs, csy
  (define_insn "*atomic_compare_and_swapsi_3"
    [(set (match_operand:SI 0 "register_operand" "=r,r")
--- 10559,10569 ----
  	  UNSPECV_CAS))
     (set (reg CC_REGNUM)
  	(compare (match_dup 1) (match_dup 2)))]
!   "s390_match_ccmode (insn, CCZ1mode)"
    "c<td>sg\t%0,%3,%S1"
    [(set_attr "op_type" "RSY")
     (set_attr "type"   "sem")])
  
  ; cs, csy
  (define_insn "*atomic_compare_and_swapsi_3"
    [(set (match_operand:SI 0 "register_operand" "=r,r")
***************
*** 11660,11669 ****
  ; z196 load and add, xor, or and and instructions
  
  (define_expand "atomic_fetch_<atomic><mode>"
!   [(match_operand:GPR 0 "register_operand")		;; val out
!    (ATOMIC_Z196:GPR
!      (match_operand:GPR 1 "memory_operand")		;; memory
!      (match_operand:GPR 2 "register_operand"))		;; val in
     (match_operand:SI 3 "const_int_operand")]		;; model
    "TARGET_Z196"
  {
--- 10591,10600 ----
  ; z196 load and add, xor, or and and instructions
  
  (define_expand "atomic_fetch_<atomic><mode>"
!   [(match_operand:DSI 0 "register_operand")		;; val out
!    (ATOMIC_Z196:DSI
!      (match_operand:DSI 1 "memory_operand")		;; memory
!      (match_operand:DSI 2 "register_operand"))		;; val in
     (match_operand:SI 3 "const_int_operand")]		;; model
    "TARGET_Z196"
  {
***************
*** 11677,11688 ****
  
  ; lan, lang, lao, laog, lax, laxg, laa, laag
  (define_insn "atomic_fetch_<atomic><mode>_iaf"
!   [(set (match_operand:GPR 0 "register_operand" "=d")
! 	(match_operand:GPR 1 "memory_operand" "+S"))
     (set (match_dup 1)
! 	(unspec_volatile:GPR
! 	 [(ATOMIC_Z196:GPR (match_dup 1)
! 			   (match_operand:GPR 2 "general_operand" "d"))]
  	 UNSPECV_ATOMIC_OP))
     (clobber (reg:CC CC_REGNUM))]
    "TARGET_Z196"
--- 10608,10619 ----
  
  ; lan, lang, lao, laog, lax, laxg, laa, laag
  (define_insn "atomic_fetch_<atomic><mode>_iaf"
!   [(set (match_operand:DSI 0 "register_operand" "=d")
! 	(match_operand:DSI 1 "memory_operand" "+S"))
     (set (match_dup 1)
! 	(unspec_volatile:DSI
! 	 [(ATOMIC_Z196:DSI (match_dup 1)
! 			   (match_operand:DSI 2 "general_operand" "d"))]
  	 UNSPECV_ATOMIC_OP))
     (clobber (reg:CC CC_REGNUM))]
    "TARGET_Z196"
***************
*** 11747,11756 ****
    if (<MODE>mode == HImode || <MODE>mode == QImode)
      s390_expand_atomic (<MODE>mode, SET, operands[0], operands[1], operands[2],
  			false);
-   else if (<MODE>mode == SImode || TARGET_ZARCH)
-     s390_expand_atomic_exchange_tdsi (operands[0], operands[1], operands[2]);
    else
!     FAIL;
    DONE;
  })
  
--- 10678,10685 ----
    if (<MODE>mode == HImode || <MODE>mode == QImode)
      s390_expand_atomic (<MODE>mode, SET, operands[0], operands[1], operands[2],
  			false);
    else
!     s390_expand_atomic_exchange_tdsi (operands[0], operands[1], operands[2]);
    DONE;
  })
  
***************
*** 11782,11791 ****
    DONE;
    })
  
! (define_expand "@probe_stack2<mode>"
    [(set (reg:CCZ CC_REGNUM)
! 	(compare:CCZ (reg:W 0)
! 		     (match_operand:W 0 "memory_operand")))
     (unspec_volatile [(const_int 0)] UNSPECV_BLOCKAGE)]
    "")
  
--- 10711,10720 ----
    DONE;
    })
  
! (define_expand "probe_stack2di"
    [(set (reg:CCZ CC_REGNUM)
! 	(compare:CCZ (reg:DI 0)
! 		     (match_operand:DI 0 "memory_operand")))
     (unspec_volatile [(const_int 0)] UNSPECV_BLOCKAGE)]
    "")
  
***************
*** 11793,11799 ****
    [(match_operand 0 "memory_operand")]
    ""
  {
!   emit_insn (gen_probe_stack2 (word_mode, operands[0]));
    DONE;
  })
  
--- 10722,10728 ----
    [(match_operand 0 "memory_operand")]
    ""
  {
!   emit_insn (gen_probe_stack2di (operands[0]));
    DONE;
  })
  
***************
*** 12091,12107 ****
    if (!TARGET_CPU_Z10
        && TARGET_INDIRECT_BRANCH_NOBP_RET_OPTION)
      {
!       if (TARGET_64BIT)
!         emit_jump_insn (gen_returndi_prez10 (operands[0]));
!       else
!         emit_jump_insn (gen_returnsi_prez10 (operands[0]));
        DONE;
      }
  })
  
! (define_insn "*return<mode>"
    [(return)
!    (use (match_operand:P 0 "register_operand" "a"))]
    "TARGET_CPU_Z10 || !TARGET_INDIRECT_BRANCH_NOBP_RET_OPTION"
  {
    if (TARGET_INDIRECT_BRANCH_NOBP_RET)
--- 11020,11033 ----
    if (!TARGET_CPU_Z10
        && TARGET_INDIRECT_BRANCH_NOBP_RET_OPTION)
      {
!       emit_jump_insn (gen_returndi_prez10 (operands[0]));
        DONE;
      }
  })
  
! (define_insn "*returndi"
    [(return)
!    (use (match_operand:DI 0 "register_operand" "a"))]
    "TARGET_CPU_Z10 || !TARGET_INDIRECT_BRANCH_NOBP_RET_OPTION"
  {
    if (TARGET_INDIRECT_BRANCH_NOBP_RET)
***************
*** 12126,12135 ****
     (set_attr "type"    "jsr")
     (set_attr "atype"   "agen")])
  
! (define_insn "return<mode>_prez10"
    [(return)
!    (use (match_operand:P 0 "register_operand" "a"))
!    (clobber (reg:P INDIRECT_BRANCH_THUNK_REGNUM))]
    "!TARGET_CPU_Z10 && TARGET_INDIRECT_BRANCH_NOBP_RET_OPTION"
  {
    if (TARGET_INDIRECT_BRANCH_NOBP_RET)
--- 11052,11061 ----
     (set_attr "type"    "jsr")
     (set_attr "atype"   "agen")])
  
! (define_insn "returndi_prez10"
    [(return)
!    (use (match_operand:DI 0 "register_operand" "a"))
!    (clobber (reg:DI INDIRECT_BRANCH_THUNK_REGNUM))]
    "!TARGET_CPU_Z10 && TARGET_INDIRECT_BRANCH_NOBP_RET_OPTION"
  {
    if (TARGET_INDIRECT_BRANCH_NOBP_RET)
***************
*** 12161,12167 ****
  (define_expand "ptr_extend"
    [(set (match_operand:DI 0 "register_operand" "=r")
          (match_operand:SI 1 "register_operand" "r"))]
!   "TARGET_64BIT"
  {
    emit_insn (gen_anddi3 (operands[0],
  			 gen_lowpart (DImode, operands[1]),
--- 11087,11093 ----
  (define_expand "ptr_extend"
    [(set (match_operand:DI 0 "register_operand" "=r")
          (match_operand:SI 1 "register_operand" "r"))]
!   "TARGET_TPF"
  {
    emit_insn (gen_anddi3 (operands[0],
  			 gen_lowpart (DImode, operands[1]),
***************
*** 12184,12192 ****
  ; Stack Protector Patterns
  ;
  
! (define_insn "stack_protect_global_guard_addr<mode>"
!   [(set (match_operand:P 0 "register_operand" "=d")
! 	(unspec_volatile:P [(const_int 0)] UNSPECV_SP_GLOBAL_GUARD_ADDR))]
    ""
  {
    if (flag_s390_stack_protector_guard_record)
--- 11110,11118 ----
  ; Stack Protector Patterns
  ;
  
! (define_insn "stack_protect_global_guard_addrdi"
!   [(set (match_operand:DI 0 "register_operand" "=d")
! 	(unspec_volatile:DI [(const_int 0)] UNSPECV_SP_GLOBAL_GUARD_ADDR))]
    ""
  {
    if (flag_s390_stack_protector_guard_record)
***************
*** 12194,12230 ****
    if (flag_pic)
      {
        if (TARGET_Z10)
! 	output_asm_insn ("l<g>rl\t%0,__stack_chk_guard@GOTENT", operands);
        else
  	{
  	  output_asm_insn ("larl\t%0,__stack_chk_guard@GOTENT", operands);
! 	  output_asm_insn ("l<g>\t%0,0(%0)", operands);
  	}
      }
    else
      output_asm_insn ("larl\t%0,__stack_chk_guard", operands);
    if (flag_s390_stack_protector_guard_record)
      fprintf (asm_out_file, "\t.section __stack_protector_loc,\\"a\\",@progbits\n"
! 			   "\t.%s 1b\n"
! 			   "\t.previous\n", TARGET_64BIT ? "quad" : "long");
    return "";
  }
    [(set (attr "mnemonic")
! 	(cond [(match_test "flag_pic &&  TARGET_Z10") (const_string "l<g>rl")
  	       (match_test "flag_pic && !TARGET_Z10") (const_string "*")]
  	      (const_string "larl")))])
  
! ; Insns stack_protect_get_tp{si,di} are similar to *get_tp_{31,64} but still
! ; distinct in the sense that they force recomputation of the thread pointer
! ; instead of potentially reloading it from stack.
! 
! (define_insn_and_split "stack_protect_get_tpsi"
!   [(set (match_operand:SI 0 "register_operand" "=d")
! 	(unspec_volatile:SI [(const_int 0)] UNSPECV_SP_GET_TP))]
!   ""
!   "#"
!   "&& reload_completed"
!   [(set (match_dup 0) (reg:SI AR0_REGNUM))])
  
  (define_insn_and_split "stack_protect_get_tpdi"
    [(set (match_operand:DI 0 "register_operand" "=d")
--- 11120,11148 ----
    if (flag_pic)
      {
        if (TARGET_Z10)
! 	output_asm_insn ("lgrl\t%0,__stack_chk_guard@GOTENT", operands);
        else
  	{
  	  output_asm_insn ("larl\t%0,__stack_chk_guard@GOTENT", operands);
! 	  output_asm_insn ("lg\t%0,0(%0)", operands);
  	}
      }
    else
      output_asm_insn ("larl\t%0,__stack_chk_guard", operands);
    if (flag_s390_stack_protector_guard_record)
      fprintf (asm_out_file, "\t.section __stack_protector_loc,\\"a\\",@progbits\n"
! 			   "\t.quad 1b\n"
! 			   "\t.previous\n");
    return "";
  }
    [(set (attr "mnemonic")
! 	(cond [(match_test "flag_pic &&  TARGET_Z10") (const_string "lgrl")
  	       (match_test "flag_pic && !TARGET_Z10") (const_string "*")]
  	      (const_string "larl")))])
  
! ; Insn stack_protect_get_tpdi is similar to *get_tp_64 but still distinct in
! ; the sense that it forces recomputation of the thread pointer instead of
! ; potentially reloading it from stack.
  
  (define_insn_and_split "stack_protect_get_tpdi"
    [(set (match_operand:DI 0 "register_operand" "=d")
***************
*** 12245,12280 ****
    if (TARGET_SP_GLOBAL_GUARD)
      {
        rtx addr = gen_reg_rtx (Pmode);
!       if (TARGET_64BIT)
! 	emit_insn (gen_stack_protect_global_guard_addrdi (addr));
!       else
! 	emit_insn (gen_stack_protect_global_guard_addrsi (addr));
        operands[1] = gen_rtx_MEM (Pmode, addr);
      }
    else
      {
  #ifdef TARGET_THREAD_SSP_OFFSET
        rtx tp = gen_reg_rtx (Pmode);
!       if (TARGET_64BIT)
! 	emit_insn (gen_stack_protect_get_tpdi (tp));
!       else
! 	emit_insn (gen_stack_protect_get_tpsi (tp));
        operands[1]
  	= gen_rtx_MEM (Pmode, gen_rtx_PLUS (Pmode, tp,
  					    GEN_INT (TARGET_THREAD_SSP_OFFSET)));
  #endif
      }
!   if (TARGET_64BIT)
!     emit_insn (gen_stack_protect_setdi (operands[0], operands[1]));
!   else
!     emit_insn (gen_stack_protect_setsi (operands[0], operands[1]));
  
    DONE;
  })
  
! (define_insn "stack_protect_set<mode>"
!   [(set (match_operand:DSI 0 "memory_operand" "=Q")
!         (unspec:DSI [(match_operand:DSI 1 "memory_operand" "Q")] UNSPEC_SP_SET))]
    ""
    "mvc\t%O0(%G0,%R0),%S1"
    [(set_attr "op_type" "SS")])
--- 11163,11189 ----
    if (TARGET_SP_GLOBAL_GUARD)
      {
        rtx addr = gen_reg_rtx (Pmode);
!       emit_insn (gen_stack_protect_global_guard_addrdi (addr));
        operands[1] = gen_rtx_MEM (Pmode, addr);
      }
    else
      {
  #ifdef TARGET_THREAD_SSP_OFFSET
        rtx tp = gen_reg_rtx (Pmode);
!       emit_insn (gen_stack_protect_get_tpdi (tp));
        operands[1]
  	= gen_rtx_MEM (Pmode, gen_rtx_PLUS (Pmode, tp,
  					    GEN_INT (TARGET_THREAD_SSP_OFFSET)));
  #endif
      }
!   emit_insn (gen_stack_protect_setdi (operands[0], operands[1]));
  
    DONE;
  })
  
! (define_insn "stack_protect_setdi"
!   [(set (match_operand:DI 0 "memory_operand" "=Q")
!         (unspec:DI [(match_operand:DI 1 "memory_operand" "Q")] UNSPEC_SP_SET))]
    ""
    "mvc\t%O0(%G0,%R0),%S1"
    [(set_attr "op_type" "SS")])
***************
*** 12290,12318 ****
    if (TARGET_SP_GLOBAL_GUARD)
      {
        rtx addr = gen_reg_rtx (Pmode);
!       if (TARGET_64BIT)
! 	emit_insn (gen_stack_protect_global_guard_addrdi (addr));
!       else
! 	emit_insn (gen_stack_protect_global_guard_addrsi (addr));
        operands[1] = gen_rtx_MEM (Pmode, addr);
      }
    else
      {
  #ifdef TARGET_THREAD_SSP_OFFSET
        rtx tp = gen_reg_rtx (Pmode);
!       if (TARGET_64BIT)
! 	emit_insn (gen_stack_protect_get_tpdi (tp));
!       else
! 	emit_insn (gen_stack_protect_get_tpsi (tp));
        operands[1]
  	= gen_rtx_MEM (Pmode, gen_rtx_PLUS (Pmode, tp,
  					    GEN_INT (TARGET_THREAD_SSP_OFFSET)));
  #endif
      }
!   if (TARGET_64BIT)
!     emit_insn (gen_stack_protect_testdi (operands[0], operands[1]));
!   else
!     emit_insn (gen_stack_protect_testsi (operands[0], operands[1]));
  
    cc_reg = gen_rtx_REG (CCZmode, CC_REGNUM);
    test = gen_rtx_EQ (VOIDmode, cc_reg, const0_rtx);
--- 11199,11218 ----
    if (TARGET_SP_GLOBAL_GUARD)
      {
        rtx addr = gen_reg_rtx (Pmode);
!       emit_insn (gen_stack_protect_global_guard_addrdi (addr));
        operands[1] = gen_rtx_MEM (Pmode, addr);
      }
    else
      {
  #ifdef TARGET_THREAD_SSP_OFFSET
        rtx tp = gen_reg_rtx (Pmode);
!       emit_insn (gen_stack_protect_get_tpdi (tp));
        operands[1]
  	= gen_rtx_MEM (Pmode, gen_rtx_PLUS (Pmode, tp,
  					    GEN_INT (TARGET_THREAD_SSP_OFFSET)));
  #endif
      }
!   emit_insn (gen_stack_protect_testdi (operands[0], operands[1]));
  
    cc_reg = gen_rtx_REG (CCZmode, CC_REGNUM);
    test = gen_rtx_EQ (VOIDmode, cc_reg, const0_rtx);
***************
*** 12320,12329 ****
    DONE;
  })
  
! (define_insn "stack_protect_test<mode>"
    [(set (reg:CCZ CC_REGNUM)
!         (unspec:CCZ [(match_operand:DSI 0 "memory_operand" "Q")
! 		     (match_operand:DSI 1 "memory_operand" "Q")] UNSPEC_SP_TEST))]
    ""
    "clc\t%O0(%G0,%R0),%S1"
    [(set_attr "op_type" "SS")])
--- 11220,11229 ----
    DONE;
  })
  
! (define_insn "stack_protect_testdi"
    [(set (reg:CCZ CC_REGNUM)
!         (unspec:CCZ [(match_operand:DI 0 "memory_operand" "Q")
! 		     (match_operand:DI 1 "memory_operand" "Q")] UNSPEC_SP_TEST))]
    ""
    "clc\t%O0(%G0,%R0),%S1"
    [(set_attr "op_type" "SS")])
***************
*** 12331,12340 ****
  ; This is used in s390_emit_prologue in order to prevent insns
  ; adjusting the stack pointer to be moved over insns writing stack
  ; slots using a copy of the stack pointer in a different register.
! (define_insn "@stack_tie<mode>"
    [(set (match_operand:BLK 0 "memory_operand" "+m")
          (unspec:BLK [(match_dup 0)
! 		     (match_operand:P 1 "register_operand" "r")] UNSPEC_TIE))]
    ""
    ""
    [(set_attr "length" "0")])
--- 11231,11240 ----
  ; This is used in s390_emit_prologue in order to prevent insns
  ; adjusting the stack pointer to be moved over insns writing stack
  ; slots using a copy of the stack pointer in a different register.
! (define_insn "stack_tiedi"
    [(set (match_operand:BLK 0 "memory_operand" "+m")
          (unspec:BLK [(match_dup 0)
! 		     (match_operand:DI 1 "register_operand" "r")] UNSPEC_TIE))]
    ""
    ""
    [(set_attr "length" "0")])
***************
*** 12389,12396 ****
  ; may overlap.
  ; lrvr, lrv, strv, lrvgr, lrvg, strvg
  (define_insn "bswap<mode>2"
!   [(set (match_operand:GPR 0            "nonimmediate_operand" "=d,d,T")
! 	(bswap:GPR (match_operand:GPR 1 "nonimmediate_operand" " d,T,d")))]
    ""
    "@
     lrv<g>r\t%0,%1
--- 11289,11296 ----
  ; may overlap.
  ; lrvr, lrv, strv, lrvgr, lrvg, strvg
  (define_insn "bswap<mode>2"
!   [(set (match_operand:DSI 0            "nonimmediate_operand" "=d,d,T")
! 	(bswap:DSI (match_operand:DSI 1 "nonimmediate_operand" " d,T,d")))]
    ""
    "@
     lrv<g>r\t%0,%1
***************
*** 12924,12938 ****
    ""
  {
    /* Offset from thread pointer to __private_ss.  */
!   int psso = TARGET_64BIT ? 0x38 : 0x20;
    rtx tp = s390_get_thread_pointer ();
    rtx guard = gen_rtx_MEM (Pmode, plus_constant (Pmode, tp, psso));
    rtx reg = gen_reg_rtx (Pmode);
    rtx cc;
!   if (TARGET_64BIT)
!     emit_insn (gen_subdi3 (reg, stack_pointer_rtx, operands[0]));
!   else
!     emit_insn (gen_subsi3 (reg, stack_pointer_rtx, operands[0]));
    cc = s390_emit_compare (VOIDmode, GT, reg, guard);
    s390_emit_jump (operands[1], cc);
  
--- 11824,11835 ----
    ""
  {
    /* Offset from thread pointer to __private_ss.  */
!   int psso = 0x38;
    rtx tp = s390_get_thread_pointer ();
    rtx guard = gen_rtx_MEM (Pmode, plus_constant (Pmode, tp, psso));
    rtx reg = gen_reg_rtx (Pmode);
    rtx cc;
!   emit_insn (gen_subdi3 (reg, stack_pointer_rtx, operands[0]));
    cc = s390_emit_compare (VOIDmode, GT, reg, guard);
    s390_emit_jump (operands[1], cc);
  
***************
*** 12953,12963 ****
  ;    allow the edge to the BB with the call done label to be
  ;    redirected both need to make use of the same label_ref.
  
! (define_insn "@split_stack_call<mode>"
    [(set (pc) (label_ref (match_operand 2 "" "")))     ; call done label
!    (set (reg:P 1) (unspec_volatile:P [(match_operand 0 "bras_sym_operand" "X")
! 				      (reg:P 1)]
! 				     UNSPECV_SPLIT_STACK_CALL))
     (use (label_ref (match_operand 1 "" "X")))         ; parm block label
     (use (match_operand 3 "const_int_operand" "X"))    ; frame size
     (use (match_operand 4 "const_int_operand" "X"))]   ; arg size
--- 11850,11860 ----
  ;    allow the edge to the BB with the call done label to be
  ;    redirected both need to make use of the same label_ref.
  
! (define_insn "split_stack_calldi"
    [(set (pc) (label_ref (match_operand 2 "" "")))     ; call done label
!    (set (reg:DI 1) (unspec_volatile:DI [(match_operand 0 "bras_sym_operand" "X")
! 					(reg:DI 1)]
! 				       UNSPECV_SPLIT_STACK_CALL))
     (use (label_ref (match_operand 1 "" "X")))         ; parm block label
     (use (match_operand 3 "const_int_operand" "X"))    ; frame size
     (use (match_operand 4 "const_int_operand" "X"))]   ; arg size
***************
*** 12971,12984 ****
  
  ; As above but with a conditional jump
  
! (define_insn "@split_stack_cond_call<mode>"
    [(set (pc)
  	(if_then_else
  	  (match_operand 5 "" "")                     ; condition
  	  (label_ref (match_operand 2 "" ""))         ; call done label
  	  (pc)))
!    (set (reg:P 1) (unspec_volatile:P [(match_operand 0 "bras_sym_operand" "X")
! 				      (reg:P 1)]
  				     UNSPECV_SPLIT_STACK_CALL))
     (use (label_ref (match_operand 1 "" "X")))         ; parm block label
     (use (match_operand 3 "const_int_operand" "X"))    ; frame size
--- 11868,11881 ----
  
  ; As above but with a conditional jump
  
! (define_insn "split_stack_cond_calldi"
    [(set (pc)
  	(if_then_else
  	  (match_operand 5 "" "")                     ; condition
  	  (label_ref (match_operand 2 "" ""))         ; call done label
  	  (pc)))
!    (set (reg:DI 1) (unspec_volatile:DI [(match_operand 0 "bras_sym_operand" "X")
! 					(reg:DI 1)]
  				     UNSPECV_SPLIT_STACK_CALL))
     (use (label_ref (match_operand 1 "" "X")))         ; parm block label
     (use (match_operand 3 "const_int_operand" "X"))    ; frame size
diff -Nrcpad gcc-17-20260705/gcc/config/s390/s390.opt gcc-17-20260712/gcc/config/s390/s390.opt
*** gcc-17-20260705/gcc/config/s390/s390.opt	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/s390/s390.opt	Sun Jul 12 22:32:07 2026
*************** Variable
*** 44,54 ****
  long s390_cost_pointer
  
  m31
! Target RejectNegative Negative(m64) InverseMask(64BIT)
! 31 bit ABI.
  
  m64
! Target RejectNegative Negative(m31) Mask(64BIT)
  64 bit ABI.
  
  march=
--- 44,56 ----
  long s390_cost_pointer
  
  m31
! Target Var(flag_m31) Undocumented
  
+ ; After removing -m31, -m64 is the only supported ABI.
+ ; Therefore, specifying -m64 doesn't have any additional effect.
+ ; However, keep it for backwards compatibility.
  m64
! Target Ignore
  64 bit ABI.
  
  march=
*************** Target Mask(DEBUG_ARG) Save
*** 139,145 ****
  Additional debug prints.
  
  mesa
! Target RejectNegative Negative(mzarch) InverseMask(ZARCH)
  ESA/390 architecture.
  
  mhard-dfp
--- 141,147 ----
  Additional debug prints.
  
  mesa
! Target Var(flag_mesa) Undocumented
  ESA/390 architecture.
  
  mhard-dfp
*************** mwarn-framesize=
*** 243,250 ****
  Target RejectNegative Joined UInteger Var(s390_warn_framesize) Save
  Warn if a single function's framesize exceeds the given framesize.
  
  mzarch
! Target RejectNegative Negative(mesa) Mask(ZARCH)
  z/Architecture.
  
  ; This option was added to fix some testsuite failures.
--- 245,255 ----
  Target RejectNegative Joined UInteger Var(s390_warn_framesize) Save
  Warn if a single function's framesize exceeds the given framesize.
  
+ ; After removing ESA/390 support, z/Architecture is the only supported
+ ; cpu mode.  Therefore, specifying -mzarch doesn't have any additional
+ ; effect.  However, keep it for backwards compatibility.
  mzarch
! Target Ignore
  z/Architecture.
  
  ; This option was added to fix some testsuite failures.
diff -Nrcpad gcc-17-20260705/gcc/config/s390/s390.opt.urls gcc-17-20260712/gcc/config/s390/s390.opt.urls
*** gcc-17-20260705/gcc/config/s390/s390.opt.urls	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/s390/s390.opt.urls	Sun Jul 12 22:32:07 2026
***************
*** 1,8 ****
  ; Autogenerated by regenerate-opt-urls.py from gcc/config/s390/s390.opt and generated HTML
  
- m31
- UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-m31)
- 
  m64
  UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-m64-2)
  
--- 1,5 ----
*************** UrlSuffix(gcc/S_002f390-and-zSeries-Opti
*** 15,23 ****
  mdebug
  UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mdebug-1)
  
- mesa
- UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mesa)
- 
  mhard-dfp
  UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mhard-dfp-1)
  
--- 12,17 ----
diff -Nrcpad gcc-17-20260705/gcc/config/s390/s390x.h gcc-17-20260712/gcc/config/s390/s390x.h
*** gcc-17-20260705/gcc/config/s390/s390x.h	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/s390/s390x.h	Thu Jan  1 00:00:00 1970
***************
*** 1,27 ****
- /* Definitions of target machine for IBM zSeries 64-bit
-    Copyright (C) 2002-2026 Free Software Foundation, Inc.
-    Contributed by Hartmut Penner (hpenner@de.ibm.com) and
-                   Ulrich Weigand (uweigand@de.ibm.com).
- 
- This file is part of GCC.
- 
- GCC is free software; you can redistribute it and/or modify it under
- the terms of the GNU General Public License as published by the Free
- Software Foundation; either version 3, or (at your option) any later
- version.
- 
- GCC is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or
- FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- for more details.
- 
- You should have received a copy of the GNU General Public License
- along with GCC; see the file COPYING3.  If not see
- <http://www.gnu.org/licenses/>.  */
- 
- #ifndef _S390X_H
- #define _S390X_H
- 
- #define DEFAULT_TARGET_64BIT
- 
- #endif
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/config/s390/t-linux64 gcc-17-20260712/gcc/config/s390/t-linux64
*** gcc-17-20260705/gcc/config/s390/t-linux64	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/s390/t-linux64	Sun Jul 12 22:32:07 2026
***************
*** 2,11 ****
  # are found in /lib32 and /usr/lib32, /lib64 and /usr/lib64 are symlinks to
  # /lib and /usr/lib, while other distributions install libraries into /lib64
  # and /usr/lib64.  The LSB does not enforce the use of /lib64 and /usr/lib64,
! # it doesn't tell anything about the 32bit libraries on those systems.  Set
! # MULTILIB_OSDIRNAMES according to what is found on the target.
  
! MULTILIB_OPTIONS = m64/m31
! MULTILIB_DIRNAMES = 64 32
  MULTILIB_OSDIRNAMES = ../lib64$(call if_multiarch,:s390x-linux-gnu)
- MULTILIB_OSDIRNAMES += $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)$(call if_multiarch,:s390-linux-gnu)
--- 2,13 ----
  # are found in /lib32 and /usr/lib32, /lib64 and /usr/lib64 are symlinks to
  # /lib and /usr/lib, while other distributions install libraries into /lib64
  # and /usr/lib64.  The LSB does not enforce the use of /lib64 and /usr/lib64,
! # it doesn't tell anything about the 32bit libraries on those systems.
  
! # After the removal of -m31 there is only one ABI left which means multilib
! # support is not needed anymore.  Still maintain the directory structure for
! # 64-bit s390x which means library directories are named lib64.
! 
! MULTILIB_OPTIONS = m64
! MULTILIB_DIRNAMES = 64
  MULTILIB_OSDIRNAMES = ../lib64$(call if_multiarch,:s390x-linux-gnu)
diff -Nrcpad gcc-17-20260705/gcc/config/s390/tpf.h gcc-17-20260712/gcc/config/s390/tpf.h
*** gcc-17-20260705/gcc/config/s390/tpf.h	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/s390/tpf.h	Sun Jul 12 22:32:07 2026
*************** along with GCC; see the file COPYING3.
*** 41,46 ****
--- 41,48 ----
  #undef  WCHAR_TYPE_SIZE
  #define WCHAR_TYPE_SIZE 32
  
+ /* This is -1 for "pointer mode" extend.  See ptr_extend in s390.md.  */
+ #define POINTERS_EXTEND_UNSIGNED -1
  
  /* TPF OS specific stack-pointer offset.  */
  #undef STACK_POINTER_OFFSET
*************** along with GCC; see the file COPYING3.
*** 49,56 ****
  /* When building for TPF, set a generic default target that is 64 bits. Also
     enable TPF profiling support and the standard backchain by default.  */
  #undef TARGET_DEFAULT
! #define TARGET_DEFAULT (MASK_TPF_PROFILING | MASK_64BIT | MASK_ZARCH \
! 			| MASK_HARD_DFP | MASK_BACKCHAIN)
  
  /* Exception handling.  */
  
--- 51,57 ----
  /* When building for TPF, set a generic default target that is 64 bits. Also
     enable TPF profiling support and the standard backchain by default.  */
  #undef TARGET_DEFAULT
! #define TARGET_DEFAULT (MASK_TPF_PROFILING | MASK_HARD_DFP | MASK_BACKCHAIN)
  
  /* Exception handling.  */
  
*************** along with GCC; see the file COPYING3.
*** 93,99 ****
     make it work with older binutils.  */
  #undef  ASM_SPEC
  #define ASM_SPEC					\
!   "%{m31&m64}%{mesa&mzarch}%{march=z*}"			\
    "%{march=arch5:-march=z900}"				\
    "%{march=arch6:-march=z990}"				\
    "%{march=arch7:-march=z9-ec}"				\
--- 94,100 ----
     make it work with older binutils.  */
  #undef  ASM_SPEC
  #define ASM_SPEC					\
!   "%{march=z*}"						\
    "%{march=arch5:-march=z900}"				\
    "%{march=arch6:-march=z990}"				\
    "%{march=arch7:-march=z9-ec}"				\
diff -Nrcpad gcc-17-20260705/gcc/config/s390/vector.md gcc-17-20260712/gcc/config/s390/vector.md
*** gcc-17-20260705/gcc/config/s390/vector.md	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/s390/vector.md	Sun Jul 12 22:32:07 2026
***************
*** 358,364 ****
  (define_split
    [(set (match_operand:V_128 0 "register_operand" "")
          (match_operand:V_128 1 "memory_operand" ""))]
!   "TARGET_ZARCH && reload_completed
     && !VECTOR_REG_P (operands[0])
     && !s_operand (operands[1], VOIDmode)"
    [(set (match_dup 0) (match_dup 1))]
--- 358,364 ----
  (define_split
    [(set (match_operand:V_128 0 "register_operand" "")
          (match_operand:V_128 1 "memory_operand" ""))]
!   "reload_completed
     && !VECTOR_REG_P (operands[0])
     && !s_operand (operands[1], VOIDmode)"
    [(set (match_dup 0) (match_dup 1))]
***************
*** 473,479 ****
           "=f,f,f,R,T,v,v,d,v,R,  f,  v,  v,  v,  v,  v,  Q,  Q,  d,  d,f,d,d,d,d,T,b")
          (match_operand:V_64 1 "general_operand"
           " f,R,T,f,f,v,d,v,R,v,j00,j00,jm1,jyy,jxx,jzz,j00,jm1,j00,jm1,d,f,b,d,T,d,d"))]
!   "TARGET_ZARCH"
    "@
     ldr\t%0,%1
     ld\t%0,%1
--- 473,479 ----
           "=f,f,f,R,T,v,v,d,v,R,  f,  v,  v,  v,  v,  v,  Q,  Q,  d,  d,f,d,d,d,d,T,b")
          (match_operand:V_64 1 "general_operand"
           " f,R,T,f,f,v,d,v,R,v,j00,j00,jm1,jyy,jxx,jzz,j00,jm1,j00,jm1,d,f,b,d,T,d,d"))]
!   ""
    "@
     ldr\t%0,%1
     ld\t%0,%1
***************
*** 3183,3189 ****
  ; operand in a VR, therefore load it into a FPR pair first.
  (define_expand "floatuns<mode>tf2_vr"
    [(set (match_dup 2)
! 	(unsigned_float:FPRX2 (match_operand:GPR 1 "register_operand" "")))
     (set (match_operand:TF                        0 "register_operand" "")
  	(subreg:TF (match_dup 2) 0))]
    "TARGET_VXE"
--- 3183,3189 ----
  ; operand in a VR, therefore load it into a FPR pair first.
  (define_expand "floatuns<mode>tf2_vr"
    [(set (match_dup 2)
! 	(unsigned_float:FPRX2 (match_operand:DSI 1 "register_operand" "")))
     (set (match_operand:TF                        0 "register_operand" "")
  	(subreg:TF (match_dup 2) 0))]
    "TARGET_VXE"
***************
*** 3193,3199 ****
  
  (define_expand "floatuns<mode>tf2"
    [(match_operand:TF  0 "register_operand" "")
!    (match_operand:GPR 1 "register_operand" "")]
    "HAVE_TF (floatuns<mode>tf2)"
    { EXPAND_TF (floatuns<mode>tf2, 2); })
  
--- 3193,3199 ----
  
  (define_expand "floatuns<mode>tf2"
    [(match_operand:TF  0 "register_operand" "")
!    (match_operand:DSI 1 "register_operand" "")]
    "HAVE_TF (floatuns<mode>tf2)"
    { EXPAND_TF (floatuns<mode>tf2, 2); })
  
***************
*** 3214,3222 ****
  (define_expand "fix_trunctf<mode>2_vr"
    [(set (match_dup 2)
  	(unspec:FPRX2 [(match_operand:TF 1 "register_operand")] UNSPEC_TF_TO_FPRX2))
!    (parallel [(set (match_operand:GPR 0 "register_operand" "")
! 		   (fix:GPR (match_dup 2)))
! 	      (unspec:GPR [(const_int BFP_RND_TOWARD_0)] UNSPEC_ROUND)
  	      (clobber (reg:CC CC_REGNUM))])]
    "TARGET_VXE"
  {
--- 3214,3222 ----
  (define_expand "fix_trunctf<mode>2_vr"
    [(set (match_dup 2)
  	(unspec:FPRX2 [(match_operand:TF 1 "register_operand")] UNSPEC_TF_TO_FPRX2))
!    (parallel [(set (match_operand:DSI 0 "register_operand" "")
! 		   (fix:DSI (match_dup 2)))
! 	      (unspec:DSI [(const_int BFP_RND_TOWARD_0)] UNSPEC_ROUND)
  	      (clobber (reg:CC CC_REGNUM))])]
    "TARGET_VXE"
  {
***************
*** 3224,3230 ****
  })
  
  (define_expand "fix_trunctf<mode>2"
!   [(match_operand:GPR 0 "register_operand" "")
     (match_operand:TF  1 "register_operand" "")]
    "HAVE_TF (fix_trunctf<mode>2)"
    { EXPAND_TF (fix_trunctf<mode>2, 2); })
--- 3224,3230 ----
  })
  
  (define_expand "fix_trunctf<mode>2"
!   [(match_operand:DSI 0 "register_operand" "")
     (match_operand:TF  1 "register_operand" "")]
    "HAVE_TF (fix_trunctf<mode>2)"
    { EXPAND_TF (fix_trunctf<mode>2, 2); })
***************
*** 3246,3254 ****
  (define_expand "fixuns_trunctf<mode>2_vr"
    [(set (match_dup 2)
  	(unspec:FPRX2 [(match_operand:TF 1 "register_operand")] UNSPEC_TF_TO_FPRX2))
!    (parallel [(set (match_operand:GPR 0 "register_operand" "")
! 		   (unsigned_fix:GPR (match_dup 2)))
! 	      (unspec:GPR [(const_int BFP_RND_TOWARD_0)] UNSPEC_ROUND)
  	      (clobber (reg:CC CC_REGNUM))])]
    "TARGET_VXE"
  {
--- 3246,3254 ----
  (define_expand "fixuns_trunctf<mode>2_vr"
    [(set (match_dup 2)
  	(unspec:FPRX2 [(match_operand:TF 1 "register_operand")] UNSPEC_TF_TO_FPRX2))
!    (parallel [(set (match_operand:DSI 0 "register_operand" "")
! 		   (unsigned_fix:DSI (match_dup 2)))
! 	      (unspec:DSI [(const_int BFP_RND_TOWARD_0)] UNSPEC_ROUND)
  	      (clobber (reg:CC CC_REGNUM))])]
    "TARGET_VXE"
  {
***************
*** 3256,3262 ****
  })
  
  (define_expand "fixuns_trunctf<mode>2"
!   [(match_operand:GPR 0 "register_operand" "")
     (match_operand:TF  1 "register_operand" "")]
    "HAVE_TF (fixuns_trunctf<mode>2)"
    { EXPAND_TF (fixuns_trunctf<mode>2, 2); })
--- 3256,3262 ----
  })
  
  (define_expand "fixuns_trunctf<mode>2"
!   [(match_operand:DSI 0 "register_operand" "")
     (match_operand:TF  1 "register_operand" "")]
    "HAVE_TF (fixuns_trunctf<mode>2)"
    { EXPAND_TF (fixuns_trunctf<mode>2, 2); })
***************
*** 3566,3572 ****
     (match_operand:QI 3 "register_operand")
     (match_operand:QI 4 "vll_bias_operand")
    ]
!   "TARGET_VX && TARGET_64BIT"
  {
    rtx mem = adjust_address (operands[1], BLKmode, 0);
  
--- 3566,3572 ----
     (match_operand:QI 3 "register_operand")
     (match_operand:QI 4 "vll_bias_operand")
    ]
!   "TARGET_VX"
  {
    rtx mem = adjust_address (operands[1], BLKmode, 0);
  
***************
*** 3582,3588 ****
     (match_operand:QI 2 "register_operand")
     (match_operand:QI 3 "vll_bias_operand")
    ]
!   "TARGET_VX && TARGET_64BIT"
  {
    rtx mem = adjust_address (operands[0], BLKmode, 0);
  
--- 3582,3588 ----
     (match_operand:QI 2 "register_operand")
     (match_operand:QI 3 "vll_bias_operand")
    ]
!   "TARGET_VX"
  {
    rtx mem = adjust_address (operands[0], BLKmode, 0);
  
diff -Nrcpad gcc-17-20260705/gcc/config/s390/vx-builtins.md gcc-17-20260712/gcc/config/s390/vx-builtins.md
*** gcc-17-20260705/gcc/config/s390/vx-builtins.md	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/s390/vx-builtins.md	Sun Jul 12 22:32:07 2026
***************
*** 435,442 ****
  ; Vector scatter element
  
  ; vscef, vsceg
- 
- ; A 64 bit target address generated from 32 bit elements
  (define_insn "vec_scatter_element<V_HW_4:mode>_DI"
    [(set (mem:<non_vec>
  	 (plus:DI (zero_extend:DI
--- 435,440 ----
***************
*** 447,473 ****
  	(vec_select:<non_vec>
  	 (match_operand:V_HW_4                    0 "register_operand"   "v")
  	 (parallel [(match_dup 3)])))]
!   "TARGET_VX && TARGET_64BIT && UINTVAL (operands[3]) < 4"
    "vscef\t%v0,%O2(%v1,%R2),%3"
    [(set_attr "op_type" "VRV")])
  
- ; A 31 bit target address is generated from 64 bit elements
- ; vsceg
- (define_insn "vec_scatter_element<V_HW_2:mode>_SI"
-   [(set (mem:<non_vec>
- 	 (plus:SI (subreg:SI
- 		   (vec_select:<non_vec_int>
- 		    (match_operand:<TOINTVEC>     1 "register_operand"   "v")
- 		    (parallel [(match_operand:QI  3 "const_mask_operand" "C")])) 4)
- 	  (match_operand:SI                       2 "address_operand"    "ZQ")))
-     (vec_select:<non_vec>
-      (match_operand:V_HW_2                        0 "register_operand"   "v")
-      (parallel [(match_dup 3)])))]
-   "TARGET_VX && !TARGET_64BIT && UINTVAL (operands[3]) < GET_MODE_NUNITS (<V_HW_2:MODE>mode)"
-   "vsce<V_HW_2:bhfgq>\t%v0,%O2(%v1,%R2),%3"
-   [(set_attr "op_type" "VRV")])
- 
- ; Element size and target address size is the same
  ; vscef, vsceg
  (define_insn "vec_scatter_element<mode>_<non_vec_int>"
    [(set (mem:<non_vec>
--- 445,454 ----
  	(vec_select:<non_vec>
  	 (match_operand:V_HW_4                    0 "register_operand"   "v")
  	 (parallel [(match_dup 3)])))]
!   "TARGET_VX && UINTVAL (operands[3]) < 4"
    "vscef\t%v0,%O2(%v1,%R2),%3"
    [(set_attr "op_type" "VRV")])
  
  ; vscef, vsceg
  (define_insn "vec_scatter_element<mode>_<non_vec_int>"
    [(set (mem:<non_vec>
***************
*** 483,515 ****
    "vsce<bhfgq>\t%v0,%O2(%v1,%R2),%3"
    [(set_attr "op_type" "VRV")])
  
- ; Depending on the address size we have to expand a different pattern.
- ; This however cannot be represented in s390-builtins.def so we do the
- ; multiplexing here in the expander.
- (define_expand "vec_scatter_element<V_HW_32_64:mode>"
-   [(match_operand:V_HW_32_64 0 "register_operand" "")
-    (match_operand:<TOINTVEC> 1 "register_operand" "")
-    (match_operand 2 "address_operand" "")
-    (match_operand:QI 3 "const_mask_operand" "")]
-   "TARGET_VX"
- {
-   if (TARGET_64BIT)
-     {
-       PUT_MODE (operands[2], DImode);
-       emit_insn (
- 	gen_vec_scatter_element<V_HW_32_64:mode>_DI (operands[0], operands[1],
- 						     operands[2], operands[3]));
-     }
-   else
-     {
-       PUT_MODE (operands[2], SImode);
-       emit_insn (
- 	gen_vec_scatter_element<V_HW_32_64:mode>_SI (operands[0], operands[1],
- 						     operands[2], operands[3]));
-     }
-   DONE;
- })
- 
  
  ; Vector select
  
--- 464,469 ----
diff -Nrcpad gcc-17-20260705/gcc/config/sparc/sparc.h gcc-17-20260712/gcc/config/sparc/sparc.h
*** gcc-17-20260705/gcc/config/sparc/sparc.h	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/sparc/sparc.h	Sun Jul 12 22:32:07 2026
*************** along with GCC; see the file COPYING3.
*** 495,504 ****
  /* SPARC_LONG_DOUBLE_TYPE_SIZE is defined per OS even though the
     SPARC ABI says that it is 128-bit wide.  LONG_DOUBLE_TYPE_SIZE
     get poisoned, so add SPARC_ prefix.  */
! /* #define SPARC_LONG_DOUBLE_TYPE_SIZE	128 */
! 
! /* The widest floating-point format really supported by the hardware.  */
! #define WIDEST_HARDWARE_FP_SIZE 64
  
  /* Width in bits of a pointer.  This is the size of ptr_mode.  */
  #define POINTER_SIZE (TARGET_PTR64 ? 64 : 32)
--- 495,501 ----
  /* SPARC_LONG_DOUBLE_TYPE_SIZE is defined per OS even though the
     SPARC ABI says that it is 128-bit wide.  LONG_DOUBLE_TYPE_SIZE
     get poisoned, so add SPARC_ prefix.  */
! #define SPARC_LONG_DOUBLE_TYPE_SIZE	128
  
  /* Width in bits of a pointer.  This is the size of ptr_mode.  */
  #define POINTER_SIZE (TARGET_PTR64 ? 64 : 32)
diff -Nrcpad gcc-17-20260705/gcc/config/visium/visium.h gcc-17-20260712/gcc/config/visium/visium.h
*** gcc-17-20260705/gcc/config/visium/visium.h	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/visium/visium.h	Sun Jul 12 22:32:08 2026
***************
*** 330,346 ****
     it is rounded up to one unit.) */
  #define CHAR_TYPE_SIZE  8
  
- /* `WIDEST_HARDWARE_FP_SIZE'
- 
-    A C expression for the size in bits of the widest floating-point
-    format supported by the hardware.  If you define this macro, you
-    must specify a value less than or equal to mode precision of the
-    mode used for C type long double (from hook
-    targetm.c.mode_for_floating_type with tree_index
-    TI_LONG_DOUBLE_TYPE).  If you do not define this macro, mode
-    precision of the mode used for C type long double is the
-    default.  */
- 
  /* `DEFAULT_SIGNED_CHAR'
  
     An expression whose value is 1 or 0, according to whether the type
--- 330,335 ----
diff -Nrcpad gcc-17-20260705/gcc/config/vms/vms.h gcc-17-20260712/gcc/config/vms/vms.h
*** gcc-17-20260705/gcc/config/vms/vms.h	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config/vms/vms.h	Sun Jul 12 22:32:08 2026
*************** extern void vms_c_register_includes (con
*** 50,59 ****
  #undef TARGET_ABI_OPEN_VMS
  #define TARGET_ABI_OPEN_VMS 1
  
! /* "long" is 32 bits, but 64 bits for Ada.  */
  #undef LONG_TYPE_SIZE
  #define LONG_TYPE_SIZE 32
- #define ADA_LONG_TYPE_SIZE 64
  
  /* Pointer is 32 bits but the hardware has 64-bit addresses, sign extended.  */
  #undef POINTER_SIZE
--- 50,58 ----
  #undef TARGET_ABI_OPEN_VMS
  #define TARGET_ABI_OPEN_VMS 1
  
! /* "long" is 32 bits.  */
  #undef LONG_TYPE_SIZE
  #define LONG_TYPE_SIZE 32
  
  /* Pointer is 32 bits but the hardware has 64-bit addresses, sign extended.  */
  #undef POINTER_SIZE
diff -Nrcpad gcc-17-20260705/gcc/config.gcc gcc-17-20260712/gcc/config.gcc
*** gcc-17-20260705/gcc/config.gcc	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config.gcc	Sun Jul 12 22:32:07 2026
*************** case ${target} in
*** 276,290 ****
      fi;;
  esac
  
- case ${target} in
-   s390-*)
-     if test "x$enable_obsolete" != xyes; then
-       echo "*** Configuration ${target} is deprecated and will be removed." >&2
-       echo "*** Specify --enable-obsolete to build it anyway." >&2
-       exit 1
-     fi;;
- esac
- 
  # Unsupported targets list.  Do not put an entry in this list unless
  # it would otherwise be caught by a more permissive pattern.  The list
  # should be in alphabetical order.
--- 276,281 ----
*************** case ${target}${target_min} in
*** 310,315 ****
--- 301,307 ----
   | pdp11-*-bsd				\
   | powerpc*-*-linux*paired*		\
   | powerpc*-*-*spe*			\
+  | s390-*-*				\
   | sparc-hal-solaris2*			\
   | spu*-*-*				\
   | thumb-*-*				\
*************** sparc*-*-*)
*** 603,609 ****
  	d_target_objs="sparc-d.o"
  	extra_headers="visintrin.h"
  	;;
! s390*-*-*)
  	cpu_type=s390
  	d_target_objs="s390-d.o"
  	extra_options="${extra_options} fused-madd.opt"
--- 595,601 ----
  	d_target_objs="sparc-d.o"
  	extra_headers="visintrin.h"
  	;;
! s390x-*-*)
  	cpu_type=s390
  	d_target_objs="s390-d.o"
  	extra_options="${extra_options} fused-madd.opt"
*************** rx-*-linux*)
*** 3270,3286 ****
  	tm_file="elfos.h linux.h glibc-stdint.h rx/linux.h ../../libgcc/config/rx/rx-abi.h"
  	tmake_file="${tmake_file} rx/t-linux"
  	;;
- s390-*-linux*)
- 	tm_file="s390/s390.h elfos.h gnu-user.h linux.h glibc-stdint.h s390/linux.h"
- 	c_target_objs="${c_target_objs} s390-c.o"
- 	cxx_target_objs="${cxx_target_objs} s390-c.o"
- 	if test x$enable_targets = xall; then
- 		tmake_file="${tmake_file} s390/t-linux64"
- 	fi
- 	tmake_file="${tmake_file} s390/t-s390"
- 	;;
  s390x-*-linux*)
! 	tm_file="s390/s390x.h s390/s390.h elfos.h gnu-user.h linux.h glibc-stdint.h s390/linux.h"
  	tm_p_file="linux-protos.h s390/s390-protos.h"
  	c_target_objs="${c_target_objs} s390-c.o"
  	cxx_target_objs="${cxx_target_objs} s390-c.o"
--- 3262,3269 ----
  	tm_file="elfos.h linux.h glibc-stdint.h rx/linux.h ../../libgcc/config/rx/rx-abi.h"
  	tmake_file="${tmake_file} rx/t-linux"
  	;;
  s390x-*-linux*)
! 	tm_file="s390/s390.h elfos.h gnu-user.h linux.h glibc-stdint.h s390/linux.h"
  	tm_p_file="linux-protos.h s390/s390-protos.h"
  	c_target_objs="${c_target_objs} s390-c.o"
  	cxx_target_objs="${cxx_target_objs} s390-c.o"
*************** s390x-*-linux*)
*** 3290,3296 ****
  	tmake_file="${tmake_file} s390/t-linux64 s390/t-s390"
  	;;
  s390x-ibm-tpf*)
! 	tm_file="s390/s390x.h s390/s390.h elfos.h glibc-stdint.h s390/tpf.h"
  	tm_p_file=s390/s390-protos.h
  	c_target_objs="${c_target_objs} s390-c.o"
  	cxx_target_objs="${cxx_target_objs} s390-c.o"
--- 3273,3279 ----
  	tmake_file="${tmake_file} s390/t-linux64 s390/t-s390"
  	;;
  s390x-ibm-tpf*)
! 	tm_file="s390/s390.h elfos.h glibc-stdint.h s390/tpf.h"
  	tm_p_file=s390/s390-protos.h
  	c_target_objs="${c_target_objs} s390-c.o"
  	cxx_target_objs="${cxx_target_objs} s390-c.o"
*************** case "${target}" in
*** 5883,5889 ****
  		fi
  		;;
  
! 	s390*-*-*)
  		supported_defaults="arch mode tune"
  
  		for which in arch tune; do
--- 5866,5872 ----
  		fi
  		;;
  
! 	s390x-*-*)
  		supported_defaults="arch mode tune"
  
  		for which in arch tune; do
*************** case "${target}" in
*** 5900,5908 ****
  		done
  
  		case ${with_mode} in
! 		"" | esa | zarch)
  			# OK
  			;;
  		*)
  			echo "Unknown architecture mode used in --with-mode=$with_mode." 1>&2
  			exit 1
--- 5883,5895 ----
  		done
  
  		case ${with_mode} in
! 		"" | zarch)
  			# OK
  			;;
+ 		esa)
+ 			echo "ESA/390 mode is no longer supported." 1>&2
+ 			exit 1
+ 			;;
  		*)
  			echo "Unknown architecture mode used in --with-mode=$with_mode." 1>&2
  			exit 1
diff -Nrcpad gcc-17-20260705/gcc/config.host gcc-17-20260712/gcc/config.host
*** gcc-17-20260705/gcc/config.host	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/config.host	Sun Jul 12 22:32:07 2026
*************** case ${host} in
*** 173,181 ****
  	;;
      esac
      ;;
!   s390-*-* | s390x-*-*)
      case ${target} in
!       s390-*-* | s390x-*-*)
          host_extra_gcc_objs="driver-native.o"
          host_xmake_file="${host_xmake_file} s390/x-native"
          ;;
--- 173,181 ----
  	;;
      esac
      ;;
!   s390x-*-*)
      case ${target} in
!       s390x-*-*)
          host_extra_gcc_objs="driver-native.o"
          host_xmake_file="${host_xmake_file} s390/x-native"
          ;;
diff -Nrcpad gcc-17-20260705/gcc/configure gcc-17-20260712/gcc/configure
*** gcc-17-20260705/gcc/configure	Sun Jul  5 22:32:21 2026
--- gcc-17-20260712/gcc/configure	Sun Jul 12 22:32:22 2026
*************** x:	.word 2
*** 28307,28329 ****
  	la.tls.gd a0,x
          call __tls_get_addr'
  	;;
-   s390-*-*)
-     conftest_s='
- 	.section ".tdata","awT",@progbits
- foo:	.long	25
- 	.text
- 	.long	foo@TLSGD
- 	.long	foo@TLSLDM
- 	.long	foo@DTPOFF
- 	.long	foo@NTPOFF
- 	.long	foo@GOTNTPOFF
- 	.long	foo@INDNTPOFF
- 	l	%r1,foo@GOTNTPOFF(%r12)
- 	l	%r1,0(%r1):tls_load:foo
- 	bas	%r14,0(%r1,%r13):tls_gdcall:foo
- 	bas	%r14,0(%r1,%r13):tls_ldcall:foo'
- 	tls_as_opt="-m31"
- 	;;
    s390x-*-*)
      conftest_s='
  	.section ".tdata","awT",@progbits
--- 28307,28312 ----
*************** $as_echo "#define HAVE_AS_16B_ATOMIC 1"
*** 31568,31574 ****
  fi
  
      ;;
!     s390*-*-*)
      { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for .gnu_attribute support" >&5
  $as_echo_n "checking assembler for .gnu_attribute support... " >&6; }
  if ${gcc_cv_as_s390_gnu_attribute+:} false; then :
--- 31551,31557 ----
  fi
  
      ;;
!     s390x-*-*)
      { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for .gnu_attribute support" >&5
  $as_echo_n "checking assembler for .gnu_attribute support... " >&6; }
  if ${gcc_cv_as_s390_gnu_attribute+:} false; then :
*************** fi
*** 33701,33707 ****
  case "$target" in
    powerpc*-*-linux* | \
    sparc*-*-linux* | \
!   s390*-*-linux* | \
    alpha*-*-linux*)
  
  # Check whether --with-long-double-128 was given.
--- 33684,33690 ----
  case "$target" in
    powerpc*-*-linux* | \
    sparc*-*-linux* | \
!   s390x-*-linux* | \
    alpha*-*-linux*)
  
  # Check whether --with-long-double-128 was given.
*************** if test "${with_long_double_128+set}" =
*** 33710,33716 ****
  else
  
        case "$target" in
! 	s390*-*-linux-musl*)
  	  gcc_cv_target_ldbl128=yes
  	  ;;
  	powerpc*-*-linux-musl*)
--- 33693,33699 ----
  else
  
        case "$target" in
! 	s390x-*-linux-musl*)
  	  gcc_cv_target_ldbl128=yes
  	  ;;
  	powerpc*-*-linux-musl*)
*************** fi
*** 35076,35082 ****
  
  
  case $target in
!   s390*-linux*)
    if test x"$enable_s390_excess_float_precision" = xauto; then
      # Can we autodetect the behavior of the target libc?
      if test "$target" = "$host" -a "$host" = "$build"; then
--- 35059,35065 ----
  
  
  case $target in
!   s390x-linux*)
    if test x"$enable_s390_excess_float_precision" = xauto; then
      # Can we autodetect the behavior of the target libc?
      if test "$target" = "$host" -a "$host" = "$build"; then
diff -Nrcpad gcc-17-20260705/gcc/configure.ac gcc-17-20260712/gcc/configure.ac
*** gcc-17-20260705/gcc/configure.ac	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/configure.ac	Sun Jul 12 22:32:08 2026
*************** x:	.word 2
*** 4220,4242 ****
  	la.tls.gd a0,x
          call __tls_get_addr'
  	;;
-   s390-*-*)
-     conftest_s='
- 	.section ".tdata","awT",@progbits
- foo:	.long	25
- 	.text
- 	.long	foo@TLSGD
- 	.long	foo@TLSLDM
- 	.long	foo@DTPOFF
- 	.long	foo@NTPOFF
- 	.long	foo@GOTNTPOFF
- 	.long	foo@INDNTPOFF
- 	l	%r1,foo@GOTNTPOFF(%r12)
- 	l	%r1,0(%r1):tls_load:foo
- 	bas	%r14,0(%r1,%r13):tls_gdcall:foo
- 	bas	%r14,0(%r1,%r13):tls_ldcall:foo'
- 	tls_as_opt="-m31"
- 	;;
    s390x-*-*)
      conftest_s='
  	.section ".tdata","awT",@progbits
--- 4220,4225 ----
*************** x:
*** 5545,5551 ****
        [AC_DEFINE(HAVE_AS_16B_ATOMIC, 1,
  	  [Define if your assembler supports LSX and SCQ for 16B atomic.])])
      ;;
!     s390*-*-*)
      gcc_GAS_CHECK_FEATURE([.gnu_attribute support],
        gcc_cv_as_s390_gnu_attribute,,
        [.gnu_attribute 8,1],,
--- 5528,5534 ----
        [AC_DEFINE(HAVE_AS_16B_ATOMIC, 1,
  	  [Define if your assembler supports LSX and SCQ for 16B atomic.])])
      ;;
!     s390x-*-*)
      gcc_GAS_CHECK_FEATURE([.gnu_attribute support],
        gcc_cv_as_s390_gnu_attribute,,
        [.gnu_attribute 8,1],,
*************** AS_IF([test x$gcc_cv_sys_sdt_h = xyes],
*** 6952,6965 ****
  case "$target" in
    powerpc*-*-linux* | \
    sparc*-*-linux* | \
!   s390*-*-linux* | \
    alpha*-*-linux*)
      AC_ARG_WITH(long-double-128,
        [AS_HELP_STRING([--with-long-double-128],
  		      [use 128-bit long double by default])],
        gcc_cv_target_ldbl128="$with_long_double_128", [
        case "$target" in
! 	s390*-*-linux-musl*)
  	  gcc_cv_target_ldbl128=yes
  	  ;;
  	powerpc*-*-linux-musl*)
--- 6935,6948 ----
  case "$target" in
    powerpc*-*-linux* | \
    sparc*-*-linux* | \
!   s390x-*-linux* | \
    alpha*-*-linux*)
      AC_ARG_WITH(long-double-128,
        [AS_HELP_STRING([--with-long-double-128],
  		      [use 128-bit long double by default])],
        gcc_cv_target_ldbl128="$with_long_double_128", [
        case "$target" in
! 	s390x-*-linux-musl*)
  	  gcc_cv_target_ldbl128=yes
  	  ;;
  	powerpc*-*-linux-musl*)
*************** AC_ARG_ENABLE(s390-excess-float-precisio
*** 7804,7810 ****
    [],[enable_s390_excess_float_precision=auto])
  
  case $target in
!   s390*-linux*)
    if test x"$enable_s390_excess_float_precision" = xauto; then
      # Can we autodetect the behavior of the target libc?
      if test "$target" = "$host" -a "$host" = "$build"; then
--- 7787,7793 ----
    [],[enable_s390_excess_float_precision=auto])
  
  case $target in
!   s390x-linux*)
    if test x"$enable_s390_excess_float_precision" = xauto; then
      # Can we autodetect the behavior of the target libc?
      if test "$target" = "$host" -a "$host" = "$build"; then
diff -Nrcpad gcc-17-20260705/gcc/cp/ChangeLog gcc-17-20260712/gcc/cp/ChangeLog
*** gcc-17-20260705/gcc/cp/ChangeLog	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/cp/ChangeLog	Sun Jul 12 22:32:08 2026
***************
*** 1,3 ****
--- 1,124 ----
+ 2026-07-10  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+ 
+ 	* module.cc (EOPNOTSUPP): Provide fallback.
+ 	(elf_out::create_mapping) [HAVE_POSIX_FALLOCATE]: Allow for
+ 	EOPNOTSUPP result.
+ 
+ 2026-07-10  Arsen Arsenović  <aarsenovic@baylibre.com>
+ 
+ 	* cp-tree.h (temp_override): In provided-value constructor,
+ 	don't deduce based on provided value.
+ 
+ 2026-07-07  Egas Ribeiro  <egas.g.ribeiro@gmail.com>
+ 
+ 	* except.cc (can_convert_eh): Handle a nullptr_t exception
+ 	caught by a pointer or pointer-to-member handler.
+ 
+ 2026-07-07  Vladislav Semykin  <vladislav.semykin@gmail.com>
+ 
+ 	PR c++/125886
+ 	PR c++/116385
+ 	PR c++/68604
+ 	* parser.cc (cp_parser_postfix_expression): Two-pass typeid parse.
+ 	* pt.cc (tsubst_expr): Same for TYPEID_EXPR.
+ 	* rtti.cc (typeid_evaluated_p, build_typeid): Shared predicate.
+ 	* cp-tree.h: Declare typeid_evaluated_p.
+ 
+ 2026-07-06  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/125901
+ 	* cp-tree.h (finish_trait_expr): Adjust declaration.
+ 	* reflect.cc (eval_constant_of): Adjust the call to
+ 	eval_is_array_type.
+ 	(eval_reflect_object): Adjust the call to eval_is_object_type.
+ 	(eval_type_trait): Emit a diagnostic when finish_trait_expr
+ 	returns error_mark_node and set *non_constant_p.  Adjust the
+ 	call to eval_type_trait.
+ 	(eval_is_array_type): Adjust the call to eval_type_trait.
+ 	(eval_is_pointer_type): Likewise.
+ 	(eval_is_member_object_pointer_type): Likewise.
+ 	(eval_is_member_function_pointer_type): Likewise.
+ 	(eval_is_enum_type): Likewise.
+ 	(eval_is_union_type): Likewise.
+ 	(eval_is_class_type): Likewise.
+ 	(eval_is_reference_type): Likewise.
+ 	(eval_is_member_pointer_type): Likewise.
+ 	(eval_is_object_type): Likewise.
+ 	(eval_is_trivially_copyable_type): Use eval_type_trait.
+ 	(eval_is_standard_layout_type): Likewise.
+ 	(eval_is_empty_type): Adjust the call to eval_type_trait.
+ 	(eval_is_polymorphic_type): Likewise.
+ 	(eval_is_abstract_type): Use eval_type_trait.
+ 	(eval_is_final_type): Adjust the call to eval_type_trait.
+ 	(eval_is_aggregate_type): Use eval_type_trait.
+ 	(eval_is_structural_type): Adjust the call to eval_type_trait.
+ 	(eval_is_bounded_array_type): Likewise.
+ 	(eval_is_constructible_type): Use eval_type_trait.
+ 	(eval_is_default_constructible_type): Likewise.
+ 	(eval_is_copy_constructible_type): Likewise.
+ 	(eval_is_move_constructible_type): Likewise.
+ 	(eval_is_assignable_type): Adjust the call to eval_type_trait.
+ 	(eval_is_copy_assignable_type): Use eval_type_trait.
+ 	(eval_is_move_assignable_type): Use eval_type_trait.
+ 	(eval_is_destructible_type): Adjust the call to eval_type_trait.
+ 	(eval_is_trivially_constructible_type): Use eval_type_trait.
+ 	(eval_is_trivially_default_constructible_type): Likewise.
+ 	(eval_is_trivially_copy_constructible_type): Likewise.
+ 	(eval_is_trivially_move_constructible_type): Likewise.
+ 	(eval_is_trivially_assignable_type): Adjust the call to
+ 	eval_type_trait.
+ 	(eval_is_trivially_copy_assignable_type): Use eval_type_trait.
+ 	(eval_is_trivially_move_assignable_type): Likewise.
+ 	(eval_is_trivially_destructible_type): Adjust the call to
+ 	eval_type_trait.
+ 	(eval_is_nothrow_constructible_type): Use eval_type_trait.
+ 	(eval_is_nothrow_default_constructible_type): Likewise.
+ 	(eval_is_nothrow_copy_constructible_type): Likewise.
+ 	(eval_is_nothrow_move_constructible_type): Likewise.
+ 	(eval_is_nothrow_assignable_type): Adjust the call to
+ 	eval_type_trait.
+ 	(eval_is_nothrow_copy_assignable_type): Use eval_type_trait.
+ 	(eval_is_nothrow_move_assignable_type): Likewise.
+ 	(eval_is_nothrow_destructible_type): Adjust the call to
+ 	eval_type_trait.
+ 	(eval_is_implicit_lifetime_type): Use eval_type_trait.
+ 	(eval_has_virtual_destructor): Likewise.
+ 	(eval_has_unique_object_representations): Likewise.
+ 	(eval_reference_constructs_from_temporary): Adjust the call to
+ 	eval_type_trait.
+ 	(eval_reference_converts_from_temporary): Likewise.
+ 	(eval_extent): Adjust the call to eval_is_bounded_array_type.
+ 	Check != boolean_true_node rather than == boolean_false_node when
+ 	checking eval_is_bounded_array_type.
+ 	(eval_is_same_type): Adjust the call to eval_type_trait.
+ 	(eval_is_base_of_type): Likewise.
+ 	(eval_is_virtual_base_of_type): Likewise.
+ 	(eval_is_convertible_type): Likewise.
+ 	(eval_is_nothrow_convertible_type): Likewise.
+ 	(eval_is_layout_compatible_type): Likewise.
+ 	(eval_is_pointer_interconvertible_base_of_type): Likewise.
+ 	(eval_is_invocable_type): Use eval_type_trait.
+ 	(eval_is_nothrow_invocable_type): Likewise.
+ 	(eval_data_member_spec): Adjust the calls to eval_is_array_type
+ 	and eval_is_object_type.  Check != boolean_true_node rather than
+ 	== boolean_false_node when checking eval_is_object_type.
+ 	(eval_extract): Adjust the call to eval_is_reference_type.
+ 	(process_metafunction): Adjust the calls to various
+ 	metafunctions.
+ 	* semantics.cc (check_trait_type): Remove a default argument.
+ 	Add a complain parameter.  If not emitting error messages, always
+ 	return false for incomplete types.
+ 	(finish_trait_expr): Add a complain parameter.  Use it.  Call
+ 	complete_type_or_maybe_complain instead of
+ 	complete_type_or_else.
+ 
+ 2026-07-06  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/126031
+ 	PR c++/121552
+ 	* decl.cc (maybe_diagnose_non_c_class_typedef_for_linkage): Handle
+ 	incomplete type.
+ 
  2026-07-03  Jakub Jelinek  <jakub@redhat.com>
  
  	PR c++/126057
diff -Nrcpad gcc-17-20260705/gcc/cp/cp-tree.h gcc-17-20260712/gcc/cp/cp-tree.h
*** gcc-17-20260705/gcc/cp/cp-tree.h	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/cp/cp-tree.h	Sun Jul 12 22:32:08 2026
*************** public:
*** 2256,2261 ****
--- 2256,2272 ----
    }
  };
  
+ /* Wrapping a template parameter in type_identity_t hides it from template
+    argument deduction.  */
+ #if __cpp_lib_type_identity
+ using std::type_identity_t;
+ #else
+ template <typename T>
+ struct type_identity { typedef T type; };
+ template <typename T>
+ using type_identity_t = typename type_identity<T>::type;
+ #endif
+ 
  /* RAII sentinel that saves the value of a variable, optionally
     overrides it right away, and restores its value when the sentinel
     id destructed.  */
*************** class temp_override
*** 2266,2273 ****
    T& overridden_variable;
    T saved_value;
  public:
!   temp_override(T& var) : overridden_variable (var), saved_value (var) {}
!   temp_override(T& var, T overrider)
      : overridden_variable (var), saved_value (var)
    {
      overridden_variable = overrider;
--- 2277,2284 ----
    T& overridden_variable;
    T saved_value;
  public:
!   temp_override (T& var) : overridden_variable (var), saved_value (var) {}
!   temp_override (T& var, type_identity_t<T> overrider)
      : overridden_variable (var), saved_value (var)
    {
      overridden_variable = overrider;
*************** public:
*** 2275,2291 ****
    ~temp_override() { overridden_variable = saved_value; }
  };
  
- /* Wrapping a template parameter in type_identity_t hides it from template
-    argument deduction.  */
- #if __cpp_lib_type_identity
- using std::type_identity_t;
- #else
- template <typename T>
- struct type_identity { typedef T type; };
- template <typename T>
- using type_identity_t = typename type_identity<T>::type;
- #endif
- 
  /* Object generator function for temp_override, so you don't need to write the
     type of the object as a template argument.
  
--- 2286,2291 ----
*************** extern tree current_nonlambda_class_type
*** 7486,7491 ****
--- 7486,7492 ----
  extern tree finish_struct			(tree, tree);
  extern void finish_struct_1			(tree);
  extern int resolves_to_fixed_type_p		(tree, int * = NULL);
+ extern bool typeid_evaluated_p (tree);
  extern void init_class_processing		(void);
  extern int is_empty_class			(tree);
  extern bool is_really_empty_class		(tree, bool);
*************** extern bool pointer_interconvertible_bas
*** 8675,8681 ****
  extern tree fold_builtin_is_pointer_inverconvertible_with_class (location_t, int, tree *);
  extern tree fold_builtin_is_string_literal	(location_t, int, tree *);
  extern tree finish_structured_binding_size	(location_t, tree, tsubst_flags_t);
! extern tree finish_trait_expr			(location_t, enum cp_trait_kind, tree, tree);
  extern tree finish_trait_type			(enum cp_trait_kind, tree, tree, tsubst_flags_t);
  extern tree build_lambda_expr                   (void);
  extern tree build_lambda_object			(tree);
--- 8676,8684 ----
  extern tree fold_builtin_is_pointer_inverconvertible_with_class (location_t, int, tree *);
  extern tree fold_builtin_is_string_literal	(location_t, int, tree *);
  extern tree finish_structured_binding_size	(location_t, tree, tsubst_flags_t);
! extern tree finish_trait_expr			(location_t, enum cp_trait_kind,
! 						 tree, tree,
! 						 tsubst_flags_t = tf_warning_or_error);
  extern tree finish_trait_type			(enum cp_trait_kind, tree, tree, tsubst_flags_t);
  extern tree build_lambda_expr                   (void);
  extern tree build_lambda_object			(tree);
diff -Nrcpad gcc-17-20260705/gcc/cp/decl.cc gcc-17-20260712/gcc/cp/decl.cc
*** gcc-17-20260705/gcc/cp/decl.cc	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/cp/decl.cc	Sun Jul 12 22:32:08 2026
*************** diagnose_non_c_class_typedef_for_linkage
*** 13775,13780 ****
--- 13775,13782 ----
  static bool
  maybe_diagnose_non_c_class_typedef_for_linkage (tree type, tree orig, tree t)
  {
+   if (!COMPLETE_TYPE_P (t))
+     return false;
    if (!BINFO_BASE_BINFOS (TYPE_BINFO (t))->is_empty ())
      {
        auto_diagnostic_group d;
diff -Nrcpad gcc-17-20260705/gcc/cp/except.cc gcc-17-20260712/gcc/cp/except.cc
*** gcc-17-20260705/gcc/cp/except.cc	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/cp/except.cc	Sun Jul 12 22:32:08 2026
*************** can_convert_eh (tree to, tree from)
*** 982,987 ****
--- 982,990 ----
    if (same_type_ignoring_top_level_qualifiers_p (to, from))
      return true;
  
+   if (NULLPTR_TYPE_P (from) && TYPE_PTR_OR_PTRMEM_P (to))
+     return true;
+ 
    if (TYPE_PTR_P (to) && TYPE_PTR_P (from))
      {
        to = TREE_TYPE (to);
diff -Nrcpad gcc-17-20260705/gcc/cp/module.cc gcc-17-20260712/gcc/cp/module.cc
*** gcc-17-20260705/gcc/cp/module.cc	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/cp/module.cc	Sun Jul 12 22:32:08 2026
*************** Classes used:
*** 258,263 ****
--- 258,268 ----
  #endif
  #endif
  
+ /* Provide fallback.  */
+ #ifndef EOPNOTSUPP
+ #define EOPNOTSUPP ENOTSUP
+ #endif
+ 
  /* Some open(2) flag differences, what a colourful world it is!  */
  #if defined (O_CLOEXEC)
  // OK
*************** elf_out::create_mapping (unsigned ext, b
*** 1912,1918 ****
      {
  #ifdef HAVE_POSIX_FALLOCATE
        int result = posix_fallocate (fd, offset, length);
!       if (result != EINVAL && result != ENOTSUP)
  	return result == 0;
        /* Not supported by the underlying filesystem, fallback to ftruncate.  */
  #endif
--- 1917,1923 ----
      {
  #ifdef HAVE_POSIX_FALLOCATE
        int result = posix_fallocate (fd, offset, length);
!       if (result != EINVAL && result != ENOTSUP && result != EOPNOTSUPP)
  	return result == 0;
        /* Not supported by the underlying filesystem, fallback to ftruncate.  */
  #endif
diff -Nrcpad gcc-17-20260705/gcc/cp/parser.cc gcc-17-20260712/gcc/cp/parser.cc
*** gcc-17-20260705/gcc/cp/parser.cc	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/cp/parser.cc	Sun Jul 12 22:32:08 2026
*************** static void missing_template_diag
*** 292,298 ****
  static FILE *cp_lexer_debug_stream;
  
  /* Nonzero if we are parsing an unevaluated operand: an operand to
!    sizeof, typeof, or alignof.  */
  int cp_unevaluated_operand;
  
  /* Nonzero if we are parsing a reflect-expression and shouldn't strip
--- 292,299 ----
  static FILE *cp_lexer_debug_stream;
  
  /* Nonzero if we are parsing an unevaluated operand: an operand to
!    sizeof, typeof, or alignof.  This is a count since operands to
!    sizeof can be nested.  */
  int cp_unevaluated_operand;
  
  /* Nonzero if we are parsing a reflect-expression and shouldn't strip
*************** cp_parser_postfix_expression (cp_parser
*** 8570,8578 ****
  	else
  	  {
  	    tree expression;
  
- 	    /* Look for an expression.  */
- 	    expression = cp_parser_expression (parser, & idk);
  	    /* Compute its typeid.  */
  	    postfix_expression = build_typeid (expression, tf_warning_or_error);
  	    /* Look for the `)' token.  */
--- 8571,8603 ----
  	else
  	  {
  	    tree expression;
+ 	    /* [expr.typeid]/4-5: parse the operand unevaluated first; if it is
+ 	       a polymorphic glvalue, roll back and re-parse it evaluated,
+ 	       since an evaluated parse has irreversible side-effects
+ 	       (mark_used -> instantiation; lambda capture).  */
+ 	    cp_lexer_save_tokens (parser->lexer);
+ 	    {
+ 	      cp_unevaluated u;
+ 	      expression = cp_parser_expression (parser, &idk);
+ 	    }
+ 	    /* If we're already within an unevaluated operand, everything
+ 	       in the subtree stays not potentially evaluated regardless
+ 	       of [expr.typeid]/4 ([basic.def.odr]/3), so the evaluated
+ 	       re-parse below can have nothing to do; skip it.  */
+ 	    if (expression != error_mark_node
+ 		&& processing_template_decl == 0
+ 		&& !cp_unevaluated_operand
+ 		&& typeid_evaluated_p (expression))
+ 	      {
+ 		/* Re-parse the operand evaluated so the /4 side-effects occur.
+ 		   The unevaluated pass above called no mark_used and captured
+ 		   nothing, so rolling back has nothing to undo.  */
+ 		cp_lexer_rollback_tokens (parser->lexer);
+ 		expression = cp_parser_expression (parser, &idk);
+ 	      }
+ 	    else
+ 	      cp_lexer_commit_tokens (parser->lexer);
  
  	    /* Compute its typeid.  */
  	    postfix_expression = build_typeid (expression, tf_warning_or_error);
  	    /* Look for the `)' token.  */
diff -Nrcpad gcc-17-20260705/gcc/cp/pt.cc gcc-17-20260712/gcc/cp/pt.cc
*** gcc-17-20260705/gcc/cp/pt.cc	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/cp/pt.cc	Sun Jul 12 22:32:08 2026
*************** tsubst_expr (tree t, tree args, tsubst_f
*** 23011,23018 ****
  	  }
  	else
  	  {
! 	    operand_0 = RECUR (operand_0);
! 	    RETURN (build_typeid (operand_0, complain));
  	  }
        }
  
--- 23011,23035 ----
  	  }
  	else
  	  {
! 	    /* [expr.typeid]/4-5: substitute the operand unevaluated first, then
! 	       again evaluated if it is a polymorphic glvalue, so the /4
! 	       side-effects occur.  The unevaluated pass instantiates nothing,
! 	       so re-substituting has nothing to undo (PR c++/125886).  */
! 	    tree operand;
! 	    tree uneval;
! 	    {
! 	      cp_unevaluated u;
! 	      uneval = RECUR (operand_0);
! 	    }
! 	    /* If we're already within an unevaluated operand, everything
! 	       in the subtree stays not potentially evaluated regardless
! 	       of [expr.typeid]/4 ([basic.def.odr]/3), so the evaluated
! 	       re-parse below can have nothing to do; skip it.  */
! 	    if (!cp_unevaluated_operand && typeid_evaluated_p (uneval))
! 	      operand = RECUR (operand_0);
! 	    else
! 	      operand = uneval;
! 	    RETURN (build_typeid (operand, complain));
  	  }
        }
  
diff -Nrcpad gcc-17-20260705/gcc/cp/reflect.cc gcc-17-20260712/gcc/cp/reflect.cc
*** gcc-17-20260705/gcc/cp/reflect.cc	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/cp/reflect.cc	Sun Jul 12 22:32:08 2026
*************** along with GCC; see the file COPYING3.
*** 33,42 ****
  #include "metafns.h"
  
  static tree eval_is_function_type (tree);
! static tree eval_is_object_type (location_t, tree);
  static tree eval_reflect_constant (location_t, const constexpr_ctx *, tree,
  				   tree, bool *, tree *, tree);
! static tree eval_is_array_type (location_t, tree);
  static tree eval_reflect_constant_array (location_t, const constexpr_ctx *,
  					 tree, bool *, bool *, tree *, tree);
  static tree eval_reflect_function (location_t, const constexpr_ctx *, tree,
--- 33,44 ----
  #include "metafns.h"
  
  static tree eval_is_function_type (tree);
! static tree eval_is_object_type (location_t, const constexpr_ctx *, tree,
! 				 bool *, tree);
  static tree eval_reflect_constant (location_t, const constexpr_ctx *, tree,
  				   tree, bool *, tree *, tree);
! static tree eval_is_array_type (location_t, const constexpr_ctx *, tree,
! 				bool *, tree);
  static tree eval_reflect_constant_array (location_t, const constexpr_ctx *,
  					 tree, bool *, bool *, tree *, tree);
  static tree eval_reflect_function (location_t, const constexpr_ctx *, tree,
*************** eval_constant_of (location_t loc, const
*** 2811,2817 ****
  
    if (eval_is_annotation (r, kind) == boolean_true_node)
      r = tree_strip_any_location_wrapper (TREE_VALUE (TREE_VALUE (r)));
!   else if (eval_is_array_type (loc, type) == boolean_true_node)
      {
        const tsubst_flags_t complain = complain_flags (ctx);
        /* Create a call to reflect_constant_array so that we can simply
--- 2813,2820 ----
  
    if (eval_is_annotation (r, kind) == boolean_true_node)
      r = tree_strip_any_location_wrapper (TREE_VALUE (TREE_VALUE (r)));
!   else if (eval_is_array_type (loc, ctx, type, non_constant_p, fun)
! 	   == boolean_true_node)
      {
        const tsubst_flags_t complain = complain_flags (ctx);
        /* Create a call to reflect_constant_array so that we can simply
*************** eval_reflect_object (location_t loc, con
*** 4093,4099 ****
  		     tree expr, bool *non_constant_p, tree *jump_target,
  		     tree fun)
  {
!   if (eval_is_object_type (loc, type) != boolean_true_node)
      {
        error_at (loc, "%qT must be an object type", TREE_TYPE (type));
        return error_mark_node;
--- 4096,4103 ----
  		     tree expr, bool *non_constant_p, tree *jump_target,
  		     tree fun)
  {
!   if (eval_is_object_type (loc, ctx, type, non_constant_p, fun)
!       != boolean_true_node)
      {
        error_at (loc, "%qT must be an object type", TREE_TYPE (type));
        return error_mark_node;
*************** eval_reflect_function (location_t loc, c
*** 4149,4158 ****
     arguments to the trait.  */
  
  static tree
! eval_type_trait (location_t loc, tree type1, tree type2, cp_trait_kind kind)
  {
!   tree r = finish_trait_expr (loc, kind, type1, type2);
!   gcc_checking_assert (r != error_mark_node);
    STRIP_ANY_LOCATION_WRAPPER (r);
    return r;
  }
--- 4153,4199 ----
     arguments to the trait.  */
  
  static tree
! eval_type_trait (location_t loc, const constexpr_ctx *ctx, tree type1,
! 		 tree type2, cp_trait_kind kind, bool *non_constant_p,
! 		 tree fun)
  {
!   tree r = finish_trait_expr (loc, kind, type1, type2, tf_none);
!   if (r == error_mark_node)
!     {
!       /* [meta.reflection.traits]/3.2: Otherwise, if the instantiation of S
! 	 would result in undefined behavior due to dependence on an incomplete
! 	 type, then the call is not a constant subexpression.  */
!       if (!cxx_constexpr_quiet_p (ctx))
! 	{
! 	  auto_diagnostic_group d;
! 	  error_at (loc, "type trait %qE preconditions not satisfied", fun);
! 	  /* See if we can figure out which argument was incomplete.  */
! 	  tree inc = NULL_TREE;
! 	  if (!COMPLETE_OR_VOID_TYPE_P (type1)
! 	      && !array_of_unknown_bound_p (type1))
! 	    inc = type1;
! 	  else if (type2)
! 	    {
! 	      if (TYPE_P (type2)
! 		  && !COMPLETE_OR_VOID_TYPE_P (type2)
! 		  && !array_of_unknown_bound_p (type2))
! 		inc = type2;
! 	      else if (TREE_CODE (type2) == TREE_VEC)
! 		for (tree t : tree_vec_range (type2))
! 		  if (!COMPLETE_OR_VOID_TYPE_P (t)
! 		      && !array_of_unknown_bound_p (t))
! 		    {
! 		      inc = t;
! 		      break;
! 		    }
! 	    }
! 	  if (inc)
! 	    cxx_incomplete_type_diagnostic (loc, NULL_TREE, inc,
! 					    diagnostics::kind::note);
! 	}
!       *non_constant_p = true;
!       return NULL_TREE;
!     }
    STRIP_ANY_LOCATION_WRAPPER (r);
    return r;
  }
*************** eval_type_trait (location_t loc, tree ty
*** 4160,4168 ****
  /* Like above, but for type traits that take only one type.  */
  
  static tree
! eval_type_trait (location_t loc, tree type, cp_trait_kind kind)
  {
!   return eval_type_trait (loc, type, NULL_TREE, kind);
  }
  
  /* Process std::meta::is_function_type.  */
--- 4201,4211 ----
  /* Like above, but for type traits that take only one type.  */
  
  static tree
! eval_type_trait (location_t loc, const constexpr_ctx *ctx, tree type,
! 		 cp_trait_kind kind, bool *non_constant_p, tree fun)
  {
!   return eval_type_trait (loc, ctx, type, NULL_TREE, kind, non_constant_p,
! 			  fun);
  }
  
  /* Process std::meta::is_function_type.  */
*************** eval_is_floating_point_type (tree type)
*** 4223,4239 ****
  /* Process std::meta::is_array_type.  */
  
  static tree
! eval_is_array_type (location_t loc, tree type)
  {
!   return eval_type_trait (loc, type, CPTK_IS_ARRAY);
  }
  
  /* Process std::meta::is_pointer_type.  */
  
  static tree
! eval_is_pointer_type (location_t loc, tree type)
  {
!   return eval_type_trait (loc, type, CPTK_IS_POINTER);
  }
  
  /* Process std::meta::is_lvalue_reference_type.  */
--- 4266,4286 ----
  /* Process std::meta::is_array_type.  */
  
  static tree
! eval_is_array_type (location_t loc, const constexpr_ctx *ctx, tree type,
! 		    bool *non_constant_p, tree fun)
  {
!   return eval_type_trait (loc, ctx, type, CPTK_IS_ARRAY, non_constant_p,
! 			  fun);
  }
  
  /* Process std::meta::is_pointer_type.  */
  
  static tree
! eval_is_pointer_type (location_t loc, const constexpr_ctx *ctx, tree type,
! 		      bool *non_constant_p, tree fun)
  {
!   return eval_type_trait (loc, ctx, type, CPTK_IS_POINTER, non_constant_p,
! 			  fun);
  }
  
  /* Process std::meta::is_lvalue_reference_type.  */
*************** eval_is_rvalue_reference_type (tree type
*** 4261,4301 ****
  /* Process std::meta::is_member_object_pointer_type.  */
  
  static tree
! eval_is_member_object_pointer_type (location_t loc, tree type)
  {
!   return eval_type_trait (loc, type, CPTK_IS_MEMBER_OBJECT_POINTER);
  }
  
  /* Process std::meta::is_member_function_pointer_type.  */
  
  static tree
! eval_is_member_function_pointer_type (location_t loc, tree type)
  {
!   return eval_type_trait (loc, type, CPTK_IS_MEMBER_FUNCTION_POINTER);
  }
  
  /* Process std::meta::is_enum_type.  */
  
  static tree
! eval_is_enum_type (location_t loc, tree type)
  {
!   return eval_type_trait (loc, type, CPTK_IS_ENUM);
  }
  
  /* Process std::meta::is_union_type.  */
  
  static tree
! eval_is_union_type (location_t loc, tree type)
  {
!   return eval_type_trait (loc, type, CPTK_IS_UNION);
  }
  
  /* Process std::meta::is_class_type.  */
  
  static tree
! eval_is_class_type (location_t loc, tree type)
  {
!   return eval_type_trait (loc, type, CPTK_IS_CLASS);
  }
  
  /* Process std::meta::is_reflection_type.  */
--- 4308,4358 ----
  /* Process std::meta::is_member_object_pointer_type.  */
  
  static tree
! eval_is_member_object_pointer_type (location_t loc, const constexpr_ctx *ctx,
! 				    tree type, bool *non_constant_p, tree fun)
  {
!   return eval_type_trait (loc, ctx, type, CPTK_IS_MEMBER_OBJECT_POINTER,
! 			  non_constant_p, fun);
  }
  
  /* Process std::meta::is_member_function_pointer_type.  */
  
  static tree
! eval_is_member_function_pointer_type (location_t loc, const constexpr_ctx *ctx,
! 				      tree type, bool *non_constant_p, tree fun)
  {
!   return eval_type_trait (loc, ctx, type, CPTK_IS_MEMBER_FUNCTION_POINTER,
! 			  non_constant_p, fun);
  }
  
  /* Process std::meta::is_enum_type.  */
  
  static tree
! eval_is_enum_type (location_t loc, const constexpr_ctx *ctx, tree type,
! 		   bool *non_constant_p, tree fun)
  {
!   return eval_type_trait (loc, ctx, type, CPTK_IS_ENUM, non_constant_p,
! 			  fun);
  }
  
  /* Process std::meta::is_union_type.  */
  
  static tree
! eval_is_union_type (location_t loc, const constexpr_ctx *ctx, tree type,
! 		    bool *non_constant_p, tree fun)
  {
!   return eval_type_trait (loc, ctx, type, CPTK_IS_UNION, non_constant_p,
! 			  fun);
  }
  
  /* Process std::meta::is_class_type.  */
  
  static tree
! eval_is_class_type (location_t loc, const constexpr_ctx *ctx, tree type,
! 		    bool *non_constant_p, tree fun)
  {
!   return eval_type_trait (loc, ctx, type, CPTK_IS_CLASS, non_constant_p,
! 			  fun);
  }
  
  /* Process std::meta::is_reflection_type.  */
*************** eval_is_reflection_type (tree type)
*** 4312,4320 ****
  /* Process std::meta::is_reference_type.  */
  
  static tree
! eval_is_reference_type (location_t loc, tree type)
  {
!   return eval_type_trait (loc, type, CPTK_IS_REFERENCE);
  }
  
  /* Process std::meta::is_arithmetic_type.  */
--- 4369,4379 ----
  /* Process std::meta::is_reference_type.  */
  
  static tree
! eval_is_reference_type (location_t loc, const constexpr_ctx *ctx, tree type,
! 			bool *non_constant_p, tree fun)
  {
!   return eval_type_trait (loc, ctx, type, CPTK_IS_REFERENCE, non_constant_p,
! 			  fun);
  }
  
  /* Process std::meta::is_arithmetic_type.  */
*************** eval_is_arithmetic_type (tree type)
*** 4331,4339 ****
  /* Process std::meta::is_object_type.  */
  
  static tree
! eval_is_object_type (location_t loc, tree type)
  {
!   return eval_type_trait (loc, type, CPTK_IS_OBJECT);
  }
  
  /* Process std::meta::is_scalar_type.  */
--- 4390,4400 ----
  /* Process std::meta::is_object_type.  */
  
  static tree
! eval_is_object_type (location_t loc, const constexpr_ctx *ctx, tree type,
! 		     bool *non_constant_p, tree fun)
  {
!   return eval_type_trait (loc, ctx, type, CPTK_IS_OBJECT, non_constant_p,
! 			  fun);
  }
  
  /* Process std::meta::is_scalar_type.  */
*************** eval_is_compound_type (tree type)
*** 4375,4383 ****
  /* Process std::meta::is_member_pointer_type.  */
  
  static tree
! eval_is_member_pointer_type (location_t loc, tree type)
  {
!   return eval_type_trait (loc, type, CPTK_IS_MEMBER_POINTER);
  }
  
  /* Process std::meta::is_const_type.  */
--- 4436,4446 ----
  /* Process std::meta::is_member_pointer_type.  */
  
  static tree
! eval_is_member_pointer_type (location_t loc, const constexpr_ctx *ctx,
! 			     tree type, bool *non_constant_p, tree fun)
  {
!   return eval_type_trait (loc, ctx, type, CPTK_IS_MEMBER_POINTER,
! 			  non_constant_p, fun);
  }
  
  /* Process std::meta::is_const_type.  */
*************** eval_is_volatile_type (tree type)
*** 4405,4462 ****
  /* Process std::meta::is_trivially_copyable_type.  */
  
  static tree
! eval_is_trivially_copyable_type (tree type)
  {
!   if (trivially_copyable_p (type))
!     return boolean_true_node;
!   else
!     return boolean_false_node;
  }
  
  /* Process std::meta::is_standard_layout_type.  */
  
  static tree
! eval_is_standard_layout_type (tree type)
  {
!   if (std_layout_type_p (type))
!     return boolean_true_node;
!   else
!     return boolean_false_node;
  }
  
  /* Process std::meta::is_empty_type.  */
  
  static tree
! eval_is_empty_type (location_t loc, tree type)
  {
!   return eval_type_trait (loc, type, CPTK_IS_EMPTY);
  }
  
  /* Process std::meta::is_polymorphic_type.  */
  
  static tree
! eval_is_polymorphic_type (location_t loc, tree type)
  {
!   return eval_type_trait (loc, type, CPTK_IS_POLYMORPHIC);
  }
  
  /* Process std::meta::is_abstract_type.  */
  
  static tree
! eval_is_abstract_type (tree type)
  {
!   if (ABSTRACT_CLASS_TYPE_P (type))
!     return boolean_true_node;
!   else
!     return boolean_false_node;
  }
  
  /* Process std::meta::is_final_type.  */
  
  static tree
! eval_is_final_type (location_t loc, tree type)
  {
!   return eval_type_trait (loc, type, CPTK_IS_FINAL);
  }
  
  /* Process std::meta::is_final.
--- 4468,4527 ----
  /* Process std::meta::is_trivially_copyable_type.  */
  
  static tree
! eval_is_trivially_copyable_type (location_t loc, const constexpr_ctx *ctx,
! 				 tree type, bool *non_constant_p, tree fun)
  {
!   return eval_type_trait (loc, ctx, type, CPTK_IS_TRIVIALLY_COPYABLE,
! 			  non_constant_p, fun);
  }
  
  /* Process std::meta::is_standard_layout_type.  */
  
  static tree
! eval_is_standard_layout_type (location_t loc, const constexpr_ctx *ctx,
! 			      tree type, bool *non_constant_p, tree fun)
  {
!   return eval_type_trait (loc, ctx, type, CPTK_IS_STD_LAYOUT, non_constant_p,
! 			  fun);
  }
  
  /* Process std::meta::is_empty_type.  */
  
  static tree
! eval_is_empty_type (location_t loc, const constexpr_ctx *ctx, tree type,
! 		    bool *non_constant_p, tree fun)
  {
!   return eval_type_trait (loc, ctx, type, CPTK_IS_EMPTY, non_constant_p,
! 			  fun);
  }
  
  /* Process std::meta::is_polymorphic_type.  */
  
  static tree
! eval_is_polymorphic_type (location_t loc, const constexpr_ctx *ctx,
! 			  tree type, bool *non_constant_p, tree fun)
  {
!   return eval_type_trait (loc, ctx, type, CPTK_IS_POLYMORPHIC, non_constant_p,
! 			  fun);
  }
  
  /* Process std::meta::is_abstract_type.  */
  
  static tree
! eval_is_abstract_type (location_t loc, const constexpr_ctx *ctx,
! 		       tree type, bool *non_constant_p, tree fun)
  {
!   return eval_type_trait (loc, ctx, type, CPTK_IS_ABSTRACT, non_constant_p,
! 			  fun);
  }
  
  /* Process std::meta::is_final_type.  */
  
  static tree
! eval_is_final_type (location_t loc, const constexpr_ctx *ctx, tree type,
! 		    bool *non_constant_p, tree fun)
  {
!   return eval_type_trait (loc, ctx, type, CPTK_IS_FINAL, non_constant_p, fun);
  }
  
  /* Process std::meta::is_final.
*************** eval_is_final (tree r)
*** 4486,4505 ****
  /* Process std::meta::is_aggregate_type.  */
  
  static tree
! eval_is_aggregate_type (tree type)
  {
!   if (CP_AGGREGATE_TYPE_P (type))
!     return boolean_true_node;
!   else
!     return boolean_false_node;
  }
  
  /* Process std::meta::is_structural_type.  */
  
  static tree
! eval_is_structural_type (location_t loc, tree type)
  {
!   return eval_type_trait (loc, type, CPTK_IS_STRUCTURAL);
  }
  
  /* Process std::meta::is_signed_type.  */
--- 4551,4571 ----
  /* Process std::meta::is_aggregate_type.  */
  
  static tree
! eval_is_aggregate_type (location_t loc, const constexpr_ctx *ctx,
! 			tree type, bool *non_constant_p, tree fun)
  {
!   return eval_type_trait (loc, ctx, type, CPTK_IS_AGGREGATE,
! 			  non_constant_p, fun);
  }
  
  /* Process std::meta::is_structural_type.  */
  
  static tree
! eval_is_structural_type (location_t loc, const constexpr_ctx *ctx,
! 			 tree type, bool *non_constant_p, tree fun)
  {
!   return eval_type_trait (loc, ctx, type, CPTK_IS_STRUCTURAL,
! 			  non_constant_p, fun);
  }
  
  /* Process std::meta::is_signed_type.  */
*************** eval_is_unsigned_type (tree type)
*** 4527,4535 ****
  /* Process std::meta::is_bounded_array_type.  */
  
  static tree
! eval_is_bounded_array_type (location_t loc, tree type)
  {
!   return eval_type_trait (loc, type, CPTK_IS_BOUNDED_ARRAY);
  }
  
  /* Process std::meta::is_unbounded_array_type.  */
--- 4593,4603 ----
  /* Process std::meta::is_bounded_array_type.  */
  
  static tree
! eval_is_bounded_array_type (location_t loc, const constexpr_ctx *ctx,
! 			    tree type, bool *non_constant_p, tree fun)
  {
!   return eval_type_trait (loc, ctx, type, CPTK_IS_BOUNDED_ARRAY,
! 			  non_constant_p, fun);
  }
  
  /* Process std::meta::is_unbounded_array_type.  */
*************** eval_is_scoped_enum_type (tree type)
*** 4557,4876 ****
  /* Process std::meta::is_constructible_type.  */
  
  static tree
! eval_is_constructible_type (tree type, tree tvec)
  {
!   if (is_xible (INIT_EXPR, type, tvec))
!     return boolean_true_node;
!   else
!     return boolean_false_node;
  }
  
  /* Process std::meta::is_default_constructible_type.  */
  
  static tree
! eval_is_default_constructible_type (tree type)
  {
!   if (is_xible (INIT_EXPR, type, make_tree_vec (0)))
!     return boolean_true_node;
!   else
!     return boolean_false_node;
  }
  
  /* Process std::meta::is_copy_constructible_type.  */
  
  static tree
! eval_is_copy_constructible_type (tree type)
  {
    tree arg = make_tree_vec (1);
    TREE_VEC_ELT (arg, 0) = build_const_lref (type);
!   if (is_xible (INIT_EXPR, type, arg))
!     return boolean_true_node;
!   else
!     return boolean_false_node;
  }
  
  /* Process std::meta::is_move_constructible_type.  */
  
  static tree
! eval_is_move_constructible_type (tree type)
  {
    tree arg = make_tree_vec (1);
    TREE_VEC_ELT (arg, 0) = cp_build_reference_type (type, /*rval=*/true);
!   if (is_xible (INIT_EXPR, type, arg))
!     return boolean_true_node;
!   else
!     return boolean_false_node;
  }
  
  /* Process std::meta::is_assignable_type.  */
  
  static tree
! eval_is_assignable_type (location_t loc, tree type1, tree type2)
  {
!   return eval_type_trait (loc, type1, type2, CPTK_IS_ASSIGNABLE);
  }
  
  /* Process std::meta::is_copy_assignable_type.  */
  
  static tree
! eval_is_copy_assignable_type (tree type)
  {
    tree type1 = cp_build_reference_type (type, /*rval=*/false);
    tree type2 = build_const_lref (type);
!   if (is_xible (MODIFY_EXPR, type1, type2))
!     return boolean_true_node;
!   else
!     return boolean_false_node;
  }
  
  /* Process std::meta::is_move_assignable_type.  */
  
  static tree
! eval_is_move_assignable_type (tree type)
  {
    tree type1 = cp_build_reference_type (type, /*rval=*/false);
    tree type2 = cp_build_reference_type (type, /*rval=*/true);
!   if (is_xible (MODIFY_EXPR, type1, type2))
!     return boolean_true_node;
!   else
!     return boolean_false_node;
  }
  
  /* Process std::meta::is_destructible_type.  */
  
  static tree
! eval_is_destructible_type (location_t loc, tree type)
  {
!   return eval_type_trait (loc, type, CPTK_IS_DESTRUCTIBLE);
  }
  
  /* Process std::meta::is_trivially_constructible_type.  */
  
  static tree
! eval_is_trivially_constructible_type (tree type, tree tvec)
  {
!   if (is_trivially_xible (INIT_EXPR, type, tvec))
!     return boolean_true_node;
!   else
!     return boolean_false_node;
  }
  
  /* Process std::meta::is_trivially_default_constructible_type.  */
  
  static tree
! eval_is_trivially_default_constructible_type (tree type)
  {
!   if (is_trivially_xible (INIT_EXPR, type, make_tree_vec (0)))
!     return boolean_true_node;
!   else
!     return boolean_false_node;
  }
  
  /* Process std::meta::is_trivially_copy_constructible_type.  */
  
  static tree
! eval_is_trivially_copy_constructible_type (tree type)
  {
!   if (trivially_copy_constructible_p (type))
!     return boolean_true_node;
!   else
!     return boolean_false_node;
  }
  
  /* Process std::meta::is_trivially_move_constructible_type.  */
  
  static tree
! eval_is_trivially_move_constructible_type (tree type)
  {
    tree arg = make_tree_vec (1);
    TREE_VEC_ELT (arg, 0) = cp_build_reference_type (type, /*rval=*/true);
!   if (is_trivially_xible (INIT_EXPR, type, arg))
!     return boolean_true_node;
!   else
!     return boolean_false_node;
  }
  
  /* Process std::meta::is_trivially_assignable_type.  */
  
  static tree
! eval_is_trivially_assignable_type (location_t loc, tree type1, tree type2)
  {
!   return eval_type_trait (loc, type1, type2, CPTK_IS_TRIVIALLY_ASSIGNABLE);
  }
  
  /* Process std::meta::is_trivially_copy_assignable_type.  */
  
  static tree
! eval_is_trivially_copy_assignable_type (tree type)
  {
    tree type1 = cp_build_reference_type (type, /*rval=*/false);
    tree type2 = build_const_lref (type);
!   if (is_trivially_xible (MODIFY_EXPR, type1, type2))
!     return boolean_true_node;
!   else
!     return boolean_false_node;
  }
  
  /* Process std::meta::is_trivially_move_assignable_type.  */
  
  static tree
! eval_is_trivially_move_assignable_type (tree type)
  {
    tree type1 = cp_build_reference_type (type, /*rval=*/false);
    tree type2 = cp_build_reference_type (type, /*rval=*/true);
!   if (is_trivially_xible (MODIFY_EXPR, type1, type2))
!     return boolean_true_node;
!   else
!     return boolean_false_node;
  }
  
  /* Process std::meta::is_trivially_destructible_type.  */
  
  static tree
! eval_is_trivially_destructible_type (location_t loc, tree type)
  {
!   return eval_type_trait (loc, type, CPTK_IS_TRIVIALLY_DESTRUCTIBLE);
  }
  
  /* Process std::meta::is_nothrow_constructible_type.  */
  
  static tree
! eval_is_nothrow_constructible_type (tree type, tree tvec)
  {
!   if (is_nothrow_xible (INIT_EXPR, type, tvec))
!     return boolean_true_node;
!   else
!     return boolean_false_node;
  }
  
  /* Process std::meta::is_nothrow_default_constructible_type.  */
  
  static tree
! eval_is_nothrow_default_constructible_type (tree type)
  {
!   if (is_nothrow_xible (INIT_EXPR, type, make_tree_vec (0)))
!     return boolean_true_node;
!   else
!     return boolean_false_node;
  }
  
  /* Process std::meta::is_nothrow_copy_constructible_type.  */
  
  static tree
! eval_is_nothrow_copy_constructible_type (tree type)
  {
    tree arg = make_tree_vec (1);
    TREE_VEC_ELT (arg, 0) = build_const_lref (type);
!   if (is_nothrow_xible (INIT_EXPR, type, arg))
!     return boolean_true_node;
!   else
!     return boolean_false_node;
  }
  
  /* Process std::meta::is_nothrow_move_constructible_type.  */
  
  static tree
! eval_is_nothrow_move_constructible_type (tree type)
  {
    tree arg = make_tree_vec (1);
    TREE_VEC_ELT (arg, 0) = cp_build_reference_type (type, /*rval=*/true);
!   if (is_nothrow_xible (INIT_EXPR, type, arg))
!     return boolean_true_node;
!   else
!     return boolean_false_node;
  }
  
  /* Process std::meta::is_nothrow_assignable_type.  */
  
  static tree
! eval_is_nothrow_assignable_type (location_t loc, tree type1, tree type2)
  {
!   return eval_type_trait (loc, type1, type2, CPTK_IS_NOTHROW_ASSIGNABLE);
  }
  
  /* Process std::meta::is_nothrow_copy_assignable_type.  */
  
  static tree
! eval_is_nothrow_copy_assignable_type (tree type)
  {
    tree type1 = cp_build_reference_type (type, /*rval=*/false);
    tree type2 = build_const_lref (type);
!   if (is_nothrow_xible (MODIFY_EXPR, type1, type2))
!     return boolean_true_node;
!   else
!     return boolean_false_node;
  }
  
  /* Process std::meta::is_nothrow_move_assignable_type.  */
  
  static tree
! eval_is_nothrow_move_assignable_type (tree type)
  {
    tree type1 = cp_build_reference_type (type, /*rval=*/false);
    tree type2 = cp_build_reference_type (type, /*rval=*/true);
!   if (is_nothrow_xible (MODIFY_EXPR, type1, type2))
!     return boolean_true_node;
!   else
!     return boolean_false_node;
  }
  
  /* Process std::meta::is_nothrow_destructible_type.  */
  
  static tree
! eval_is_nothrow_destructible_type (location_t loc, tree type)
  {
!   return eval_type_trait (loc, type, CPTK_IS_NOTHROW_DESTRUCTIBLE);
  }
  
  /* Process std::meta::is_implicit_lifetime_type.  */
  
  static tree
! eval_is_implicit_lifetime_type (tree type)
  {
!   if (implicit_lifetime_type_p (type))
!     return boolean_true_node;
!   else
!     return boolean_false_node;
  }
  
  /* Process std::meta::has_virtual_destructor.  */
  
  static tree
! eval_has_virtual_destructor (tree type)
  {
!   if (type_has_virtual_destructor (type))
!     return boolean_true_node;
!   else
!     return boolean_false_node;
  }
  
  /* Process std::meta::has_unique_object_representations.  */
  
  static tree
! eval_has_unique_object_representations (tree type)
  {
!   if (type_has_unique_obj_representations (type))
!     return boolean_true_node;
!   else
!     return boolean_false_node;
  }
  
  /* Process std::meta::reference_constructs_from_temporary.  */
  
  static tree
! eval_reference_constructs_from_temporary (location_t loc, tree type1,
! 					  tree type2)
  {
!   return eval_type_trait (loc, type1, type2,
! 			  CPTK_REF_CONSTRUCTS_FROM_TEMPORARY);
  }
  
  /* Process std::meta::reference_converts_from_temporary.  */
  
  static tree
! eval_reference_converts_from_temporary (location_t loc, tree type1, tree type2)
  {
!   return eval_type_trait (loc, type1, type2, CPTK_REF_CONVERTS_FROM_TEMPORARY);
  }
  
  /* Process std::meta::rank.  */
--- 4625,4979 ----
  /* Process std::meta::is_constructible_type.  */
  
  static tree
! eval_is_constructible_type (location_t loc, const constexpr_ctx *ctx,
! 			    tree type, tree tvec, bool *non_constant_p,
! 			    tree fun)
  {
!   return eval_type_trait (loc, ctx, type, tvec, CPTK_IS_CONSTRUCTIBLE,
! 			  non_constant_p, fun);
  }
  
  /* Process std::meta::is_default_constructible_type.  */
  
  static tree
! eval_is_default_constructible_type (location_t loc, const constexpr_ctx *ctx,
! 				    tree type, bool *non_constant_p, tree fun)
  {
!   return eval_type_trait (loc, ctx, type, make_tree_vec (0),
! 			  CPTK_IS_CONSTRUCTIBLE, non_constant_p, fun);
  }
  
  /* Process std::meta::is_copy_constructible_type.  */
  
  static tree
! eval_is_copy_constructible_type (location_t loc, const constexpr_ctx *ctx,
! 				 tree type, bool *non_constant_p, tree fun)
  {
    tree arg = make_tree_vec (1);
    TREE_VEC_ELT (arg, 0) = build_const_lref (type);
!   return eval_type_trait (loc, ctx, type, arg, CPTK_IS_CONSTRUCTIBLE,
! 			  non_constant_p, fun);
  }
  
  /* Process std::meta::is_move_constructible_type.  */
  
  static tree
! eval_is_move_constructible_type (location_t loc, const constexpr_ctx *ctx,
! 				 tree type, bool *non_constant_p, tree fun)
  {
    tree arg = make_tree_vec (1);
    TREE_VEC_ELT (arg, 0) = cp_build_reference_type (type, /*rval=*/true);
!   return eval_type_trait (loc, ctx, type, arg, CPTK_IS_CONSTRUCTIBLE,
! 			  non_constant_p, fun);
  }
  
  /* Process std::meta::is_assignable_type.  */
  
  static tree
! eval_is_assignable_type (location_t loc, const constexpr_ctx *ctx,
! 			 tree type1, tree type2, bool *non_constant_p,
! 			 tree fun)
  {
!   return eval_type_trait (loc, ctx, type1, type2, CPTK_IS_ASSIGNABLE,
! 			  non_constant_p, fun);
  }
  
  /* Process std::meta::is_copy_assignable_type.  */
  
  static tree
! eval_is_copy_assignable_type (location_t loc, const constexpr_ctx *ctx,
! 			      tree type, bool *non_constant_p, tree fun)
  {
    tree type1 = cp_build_reference_type (type, /*rval=*/false);
    tree type2 = build_const_lref (type);
!   return eval_type_trait (loc, ctx, type1, type2, CPTK_IS_ASSIGNABLE,
! 			  non_constant_p, fun);
  }
  
  /* Process std::meta::is_move_assignable_type.  */
  
  static tree
! eval_is_move_assignable_type (location_t loc, const constexpr_ctx *ctx,
! 			      tree type, bool *non_constant_p, tree fun)
  {
    tree type1 = cp_build_reference_type (type, /*rval=*/false);
    tree type2 = cp_build_reference_type (type, /*rval=*/true);
!   return eval_type_trait (loc, ctx, type1, type2, CPTK_IS_ASSIGNABLE,
! 			  non_constant_p, fun);
  }
  
  /* Process std::meta::is_destructible_type.  */
  
  static tree
! eval_is_destructible_type (location_t loc, const constexpr_ctx *ctx,
! 			   tree type, bool *non_constant_p, tree fun)
  {
!   return eval_type_trait (loc, ctx, type, CPTK_IS_DESTRUCTIBLE,
! 			  non_constant_p, fun);
  }
  
  /* Process std::meta::is_trivially_constructible_type.  */
  
  static tree
! eval_is_trivially_constructible_type (location_t loc, const constexpr_ctx *ctx,
! 				      tree type, tree tvec,
! 				      bool *non_constant_p, tree fun)
  {
!   return eval_type_trait (loc, ctx, type, tvec,
! 			  CPTK_IS_TRIVIALLY_CONSTRUCTIBLE,
! 			  non_constant_p, fun);
  }
  
  /* Process std::meta::is_trivially_default_constructible_type.  */
  
  static tree
! eval_is_trivially_default_constructible_type (location_t loc,
! 					      const constexpr_ctx *ctx,
! 					      tree type, bool *non_constant_p,
! 					      tree fun)
  {
!   return eval_type_trait (loc, ctx, type, make_tree_vec (0),
! 			  CPTK_IS_TRIVIALLY_CONSTRUCTIBLE,
! 			  non_constant_p, fun);
  }
  
  /* Process std::meta::is_trivially_copy_constructible_type.  */
  
  static tree
! eval_is_trivially_copy_constructible_type (location_t loc,
! 					   const constexpr_ctx *ctx,
! 					   tree type, bool *non_constant_p,
! 					   tree fun)
  {
!   tree arg = make_tree_vec (1);
!   TREE_VEC_ELT (arg, 0) = build_const_lref (type);
!   return eval_type_trait (loc, ctx, type, arg,
! 			  CPTK_IS_TRIVIALLY_CONSTRUCTIBLE,
! 			  non_constant_p, fun);
  }
  
  /* Process std::meta::is_trivially_move_constructible_type.  */
  
  static tree
! eval_is_trivially_move_constructible_type (location_t loc,
! 					   const constexpr_ctx *ctx,
! 					   tree type, bool *non_constant_p,
! 					   tree fun)
  {
    tree arg = make_tree_vec (1);
    TREE_VEC_ELT (arg, 0) = cp_build_reference_type (type, /*rval=*/true);
!   return eval_type_trait (loc, ctx, type, arg,
! 			  CPTK_IS_TRIVIALLY_CONSTRUCTIBLE,
! 			  non_constant_p, fun);
  }
  
  /* Process std::meta::is_trivially_assignable_type.  */
  
  static tree
! eval_is_trivially_assignable_type (location_t loc, const constexpr_ctx *ctx,
! 				   tree type1, tree type2,
! 				   bool *non_constant_p, tree fun)
  {
!   return eval_type_trait (loc, ctx, type1, type2, CPTK_IS_TRIVIALLY_ASSIGNABLE,
! 			  non_constant_p, fun);
  }
  
  /* Process std::meta::is_trivially_copy_assignable_type.  */
  
  static tree
! eval_is_trivially_copy_assignable_type (location_t loc,
! 					const constexpr_ctx *ctx,
! 					tree type, bool *non_constant_p,
! 					tree fun)
  {
    tree type1 = cp_build_reference_type (type, /*rval=*/false);
    tree type2 = build_const_lref (type);
!   return eval_type_trait (loc, ctx, type1, type2, CPTK_IS_TRIVIALLY_ASSIGNABLE,
! 			  non_constant_p, fun);
  }
  
  /* Process std::meta::is_trivially_move_assignable_type.  */
  
  static tree
! eval_is_trivially_move_assignable_type (location_t loc,
! 					const constexpr_ctx *ctx,
! 					tree type, bool *non_constant_p,
! 					tree fun)
  {
    tree type1 = cp_build_reference_type (type, /*rval=*/false);
    tree type2 = cp_build_reference_type (type, /*rval=*/true);
!   return eval_type_trait (loc, ctx, type1, type2, CPTK_IS_TRIVIALLY_ASSIGNABLE,
! 			  non_constant_p, fun);
  }
  
  /* Process std::meta::is_trivially_destructible_type.  */
  
  static tree
! eval_is_trivially_destructible_type (location_t loc, const constexpr_ctx *ctx,
! 				     tree type, bool *non_constant_p,
! 				     tree fun)
  {
!   return eval_type_trait (loc, ctx, type, CPTK_IS_TRIVIALLY_DESTRUCTIBLE,
! 			  non_constant_p, fun);
  }
  
  /* Process std::meta::is_nothrow_constructible_type.  */
  
  static tree
! eval_is_nothrow_constructible_type (location_t loc, const constexpr_ctx *ctx,
! 				    tree type, tree tvec, bool *non_constant_p,
! 				    tree fun)
  {
!   return eval_type_trait (loc, ctx, type, tvec, CPTK_IS_NOTHROW_CONSTRUCTIBLE,
! 			  non_constant_p, fun);
  }
  
  /* Process std::meta::is_nothrow_default_constructible_type.  */
  
  static tree
! eval_is_nothrow_default_constructible_type (location_t loc,
! 					    const constexpr_ctx *ctx,
! 					    tree type, bool *non_constant_p,
! 					    tree fun)
  {
!   return eval_type_trait (loc, ctx, type, make_tree_vec (0),
! 			  CPTK_IS_NOTHROW_CONSTRUCTIBLE,
! 			  non_constant_p, fun);
  }
  
  /* Process std::meta::is_nothrow_copy_constructible_type.  */
  
  static tree
! eval_is_nothrow_copy_constructible_type (location_t loc,
! 					 const constexpr_ctx *ctx,
! 					 tree type, bool *non_constant_p,
! 					 tree fun)
  {
    tree arg = make_tree_vec (1);
    TREE_VEC_ELT (arg, 0) = build_const_lref (type);
!   return eval_type_trait (loc, ctx, type, arg,
! 			  CPTK_IS_NOTHROW_CONSTRUCTIBLE,
! 			  non_constant_p, fun);
  }
  
  /* Process std::meta::is_nothrow_move_constructible_type.  */
  
  static tree
! eval_is_nothrow_move_constructible_type (location_t loc,
! 					 const constexpr_ctx *ctx,
! 					 tree type, bool *non_constant_p,
! 					 tree fun)
  {
    tree arg = make_tree_vec (1);
    TREE_VEC_ELT (arg, 0) = cp_build_reference_type (type, /*rval=*/true);
!   return eval_type_trait (loc, ctx, type, arg,
! 			  CPTK_IS_NOTHROW_CONSTRUCTIBLE,
! 			  non_constant_p, fun);
  }
  
  /* Process std::meta::is_nothrow_assignable_type.  */
  
  static tree
! eval_is_nothrow_assignable_type (location_t loc, const constexpr_ctx *ctx,
! 				 tree type1, tree type2, bool *non_constant_p,
! 				 tree fun)
  {
!   return eval_type_trait (loc, ctx, type1, type2, CPTK_IS_NOTHROW_ASSIGNABLE,
! 			  non_constant_p, fun);
  }
  
  /* Process std::meta::is_nothrow_copy_assignable_type.  */
  
  static tree
! eval_is_nothrow_copy_assignable_type (location_t loc, const constexpr_ctx *ctx,
! 				      tree type, bool *non_constant_p, tree fun)
  {
    tree type1 = cp_build_reference_type (type, /*rval=*/false);
    tree type2 = build_const_lref (type);
!   return eval_type_trait (loc, ctx, type1, type2, CPTK_IS_NOTHROW_ASSIGNABLE,
! 			  non_constant_p, fun);
  }
  
  /* Process std::meta::is_nothrow_move_assignable_type.  */
  
  static tree
! eval_is_nothrow_move_assignable_type (location_t loc, const constexpr_ctx *ctx,
! 				      tree type, bool *non_constant_p, tree fun)
  {
    tree type1 = cp_build_reference_type (type, /*rval=*/false);
    tree type2 = cp_build_reference_type (type, /*rval=*/true);
!   return eval_type_trait (loc, ctx, type1, type2, CPTK_IS_NOTHROW_ASSIGNABLE,
! 			  non_constant_p, fun);
  }
  
  /* Process std::meta::is_nothrow_destructible_type.  */
  
  static tree
! eval_is_nothrow_destructible_type (location_t loc, const constexpr_ctx *ctx,
! 				   tree type, bool *non_constant_p, tree fun)
  {
!   return eval_type_trait (loc, ctx, type, CPTK_IS_NOTHROW_DESTRUCTIBLE,
! 			  non_constant_p, fun);
  }
  
  /* Process std::meta::is_implicit_lifetime_type.  */
  
  static tree
! eval_is_implicit_lifetime_type (location_t loc, const constexpr_ctx *ctx,
! 				tree type, bool *non_constant_p, tree fun)
  {
!   return eval_type_trait (loc, ctx, type, CPTK_IS_IMPLICIT_LIFETIME,
! 			  non_constant_p, fun);
  }
  
  /* Process std::meta::has_virtual_destructor.  */
  
  static tree
! eval_has_virtual_destructor (location_t loc, const constexpr_ctx *ctx,
! 			     tree type, bool *non_constant_p, tree fun)
  {
!   return eval_type_trait (loc, ctx, type, CPTK_HAS_VIRTUAL_DESTRUCTOR,
! 			  non_constant_p, fun);
  }
  
  /* Process std::meta::has_unique_object_representations.  */
  
  static tree
! eval_has_unique_object_representations (location_t loc,
! 					const constexpr_ctx *ctx,
! 					tree type, bool *non_constant_p,
! 					tree fun)
  {
!   return eval_type_trait (loc, ctx, type, CPTK_HAS_UNIQUE_OBJ_REPRESENTATIONS,
! 			  non_constant_p, fun);
  }
  
  /* Process std::meta::reference_constructs_from_temporary.  */
  
  static tree
! eval_reference_constructs_from_temporary (location_t loc,
! 					  const constexpr_ctx *ctx,
! 					  tree type1, tree type2,
! 					  bool *non_constant_p,
! 					  tree fun)
  {
!   return eval_type_trait (loc, ctx, type1, type2,
! 			  CPTK_REF_CONSTRUCTS_FROM_TEMPORARY,
! 			  non_constant_p, fun);
  }
  
  /* Process std::meta::reference_converts_from_temporary.  */
  
  static tree
! eval_reference_converts_from_temporary (location_t loc,
! 					const constexpr_ctx *ctx,
! 					tree type1, tree type2,
! 					bool *non_constant_p,
! 					tree fun)
  {
!   return eval_type_trait (loc, ctx, type1, type2,
! 			  CPTK_REF_CONVERTS_FROM_TEMPORARY,
! 			  non_constant_p, fun);
  }
  
  /* Process std::meta::rank.  */
*************** eval_rank (tree type)
*** 4887,4893 ****
  /* Process std::meta::extent.  */
  
  static tree
! eval_extent (location_t loc, tree type, tree i)
  {
    size_t rank = tree_to_uhwi (i);
    while (rank && TREE_CODE (type) == ARRAY_TYPE)
--- 4990,4997 ----
  /* Process std::meta::extent.  */
  
  static tree
! eval_extent (location_t loc, const constexpr_ctx *ctx, tree type, tree i,
! 	     bool *non_constant_p, tree fun)
  {
    size_t rank = tree_to_uhwi (i);
    while (rank && TREE_CODE (type) == ARRAY_TYPE)
*************** eval_extent (location_t loc, tree type,
*** 4898,4904 ****
    tree r;
    if (rank
        || TREE_CODE (type) != ARRAY_TYPE
!       || eval_is_bounded_array_type (loc, type) == boolean_false_node)
      r = size_zero_node;
    else
      r = size_binop (PLUS_EXPR, TYPE_MAX_VALUE (TYPE_DOMAIN (type)),
--- 5002,5009 ----
    tree r;
    if (rank
        || TREE_CODE (type) != ARRAY_TYPE
!       || eval_is_bounded_array_type (loc, ctx, type, non_constant_p,
! 				     fun) != boolean_true_node)
      r = size_zero_node;
    else
      r = size_binop (PLUS_EXPR, TYPE_MAX_VALUE (TYPE_DOMAIN (type)),
*************** eval_extent (location_t loc, tree type,
*** 4910,4978 ****
  /* Process std::meta::is_same_type.  */
  
  static tree
! eval_is_same_type (location_t loc, tree type1, tree type2)
  {
!   return eval_type_trait (loc, type1, type2, CPTK_IS_SAME);
  }
  
  /* Process std::meta::is_base_of_type.  */
  
  static tree
! eval_is_base_of_type (location_t loc, tree type1, tree type2)
  {
!   return eval_type_trait (loc, type1, type2, CPTK_IS_BASE_OF);
  }
  
  /* Process std::meta::is_virtual_base_of_type.  */
  
  static tree
! eval_is_virtual_base_of_type (location_t loc, tree type1, tree type2)
  {
!   return eval_type_trait (loc, type1, type2, CPTK_IS_VIRTUAL_BASE_OF);
  }
  
  /* Process std::meta::is_convertible_type.  */
  
  static tree
! eval_is_convertible_type (location_t loc, tree type1, tree type2)
  {
!   return eval_type_trait (loc, type1, type2, CPTK_IS_CONVERTIBLE);
  }
  
  /* Process std::meta::is_nothrow_convertible_type.  */
  
  static tree
! eval_is_nothrow_convertible_type (location_t loc, tree type1, tree type2)
  {
!   return eval_type_trait (loc, type1, type2, CPTK_IS_NOTHROW_CONVERTIBLE);
  }
  
  /* Process std::meta::is_layout_compatible_type.  */
  
  static tree
! eval_is_layout_compatible_type (location_t loc, tree type1, tree type2)
  {
!   return eval_type_trait (loc, type1, type2, CPTK_IS_LAYOUT_COMPATIBLE);
  }
  
  /* Process std::meta::is_pointer_interconvertible_base_of_type.  */
  
  static tree
  eval_is_pointer_interconvertible_base_of_type (location_t loc,
! 					       tree type1, tree type2)
  {
!   return eval_type_trait (loc, type1, type2,
! 			  CPTK_IS_POINTER_INTERCONVERTIBLE_BASE_OF);
  }
  
  /* Process std::meta::is_invocable_type.  */
  
  static tree
! eval_is_invocable_type (location_t loc, tree type, tree tvec)
  {
!   tree r = finish_trait_expr (loc, CPTK_IS_INVOCABLE, type, tvec);
!   STRIP_ANY_LOCATION_WRAPPER (r);
!   return r;
  }
  
  /* Helper for various eval_* type trait functions which can't use builtin
--- 5015,5104 ----
  /* Process std::meta::is_same_type.  */
  
  static tree
! eval_is_same_type (location_t loc, const constexpr_ctx *ctx, tree type1,
! 		   tree type2, bool *non_constant_p, tree fun)
  {
!   return eval_type_trait (loc, ctx, type1, type2, CPTK_IS_SAME,
! 			  non_constant_p, fun);
  }
  
  /* Process std::meta::is_base_of_type.  */
  
  static tree
! eval_is_base_of_type (location_t loc, const constexpr_ctx *ctx,
! 		      tree type1, tree type2, bool *non_constant_p, tree fun)
  {
!   return eval_type_trait (loc, ctx, type1, type2, CPTK_IS_BASE_OF,
! 			  non_constant_p, fun);
  }
  
  /* Process std::meta::is_virtual_base_of_type.  */
  
  static tree
! eval_is_virtual_base_of_type (location_t loc, const constexpr_ctx *ctx,
! 			      tree type1, tree type2, bool *non_constant_p,
! 			      tree fun)
  {
!   return eval_type_trait (loc, ctx, type1, type2, CPTK_IS_VIRTUAL_BASE_OF,
! 			  non_constant_p, fun);
  }
  
  /* Process std::meta::is_convertible_type.  */
  
  static tree
! eval_is_convertible_type (location_t loc, const constexpr_ctx *ctx,
! 			  tree type1, tree type2, bool *non_constant_p,
! 			  tree fun)
  {
!   return eval_type_trait (loc, ctx, type1, type2, CPTK_IS_CONVERTIBLE,
! 			  non_constant_p, fun);
  }
  
  /* Process std::meta::is_nothrow_convertible_type.  */
  
  static tree
! eval_is_nothrow_convertible_type (location_t loc, const constexpr_ctx *ctx,
! 				  tree type1, tree type2, bool *non_constant_p,
! 				  tree fun)
  {
!   return eval_type_trait (loc, ctx, type1, type2, CPTK_IS_NOTHROW_CONVERTIBLE,
! 			  non_constant_p, fun);
  }
  
  /* Process std::meta::is_layout_compatible_type.  */
  
  static tree
! eval_is_layout_compatible_type (location_t loc, const constexpr_ctx *ctx,
! 				tree type1, tree type2, bool *non_constant_p,
! 				tree fun)
  {
!   return eval_type_trait (loc, ctx, type1, type2, CPTK_IS_LAYOUT_COMPATIBLE,
! 			  non_constant_p, fun);
  }
  
  /* Process std::meta::is_pointer_interconvertible_base_of_type.  */
  
  static tree
  eval_is_pointer_interconvertible_base_of_type (location_t loc,
! 					       const constexpr_ctx *ctx,
! 					       tree type1, tree type2,
! 					       bool *non_constant_p,
! 					       tree fun)
  {
!   return eval_type_trait (loc, ctx, type1, type2,
! 			  CPTK_IS_POINTER_INTERCONVERTIBLE_BASE_OF,
! 			  non_constant_p, fun);
  }
  
  /* Process std::meta::is_invocable_type.  */
  
  static tree
! eval_is_invocable_type (location_t loc, const constexpr_ctx *ctx,
! 			tree type, tree tvec, bool *non_constant_p,
! 			tree fun)
  {
!   return eval_type_trait (loc, ctx, type, tvec, CPTK_IS_INVOCABLE,
! 			  non_constant_p, fun);
  }
  
  /* Helper for various eval_* type trait functions which can't use builtin
*************** eval_is_invocable_r_type (location_t loc
*** 5045,5055 ****
  /* Process std::meta::is_nothrow_invocable_type.  */
  
  static tree
! eval_is_nothrow_invocable_type (location_t loc, tree type, tree tvec)
  {
!   tree r = finish_trait_expr (loc, CPTK_IS_NOTHROW_INVOCABLE, type, tvec);
!   STRIP_ANY_LOCATION_WRAPPER (r);
!   return r;
  }
  
  /* Process std::meta::is_{,nothrow_}swappable_with_type.  */
--- 5171,5182 ----
  /* Process std::meta::is_nothrow_invocable_type.  */
  
  static tree
! eval_is_nothrow_invocable_type (location_t loc, const constexpr_ctx *ctx,
! 				tree type, tree tvec, bool *non_constant_p,
! 				tree fun)
  {
!   return eval_type_trait (loc, ctx, type, tvec, CPTK_IS_NOTHROW_INVOCABLE,
! 			  non_constant_p, fun);
  }
  
  /* Process std::meta::is_{,nothrow_}swappable_with_type.  */
*************** eval_data_member_spec (location_t loc, c
*** 6093,6100 ****
  	return throw_exception (loc, ctx, "reflection does not have a type",
  				fun, non_constant_p, jump_target);
        tree type = type_of (r, kind);
!       if (eval_is_array_type (loc, type) == boolean_true_node
! 	  || eval_is_object_type (loc, type) == boolean_false_node)
  	return throw_exception (loc, ctx, "reflection does not have "
  					  "non-array object type",
  				fun, non_constant_p, jump_target);
--- 6220,6229 ----
  	return throw_exception (loc, ctx, "reflection does not have a type",
  				fun, non_constant_p, jump_target);
        tree type = type_of (r, kind);
!       if ((eval_is_array_type (loc, ctx, type, non_constant_p, fun)
! 	   == boolean_true_node)
! 	  || (eval_is_object_type (loc, ctx, type, non_constant_p, fun)
! 	      != boolean_true_node))
  	return throw_exception (loc, ctx, "reflection does not have "
  					  "non-array object type",
  				fun, non_constant_p, jump_target);
*************** eval_extract (location_t loc, const cons
*** 7707,7713 ****
  	      reflect_kind kind, bool *non_constant_p, bool *overflow_p,
  	      tree *jump_target, tree fun)
  {
!   if (eval_is_reference_type (loc, type) == boolean_true_node)
      return extract_ref (loc, ctx, type, r, kind, non_constant_p, jump_target,
  			fun);
    type = cv_unqualified (type);
--- 7836,7843 ----
  	      reflect_kind kind, bool *non_constant_p, bool *overflow_p,
  	      tree *jump_target, tree fun)
  {
!   if (eval_is_reference_type (loc, ctx, type, non_constant_p, fun)
!       == boolean_true_node)
      return extract_ref (loc, ctx, type, r, kind, non_constant_p, jump_target,
  			fun);
    type = cv_unqualified (type);
*************** process_metafunction (const constexpr_ct
*** 8289,8373 ****
      case METAFN_IS_FLOATING_POINT_TYPE:
        return eval_is_floating_point_type (h);
      case METAFN_IS_ARRAY_TYPE:
!       return eval_is_array_type (loc, h);
      case METAFN_IS_POINTER_TYPE:
!       return eval_is_pointer_type (loc, h);
      case METAFN_IS_LVALUE_REFERENCE_TYPE:
        return eval_is_lvalue_reference_type (h);
      case METAFN_IS_RVALUE_REFERENCE_TYPE:
        return eval_is_rvalue_reference_type (h);
      case METAFN_IS_MEMBER_OBJECT_POINTER_TYPE:
!       return eval_is_member_object_pointer_type (loc, h);
      case METAFN_IS_MEMBER_FUNCTION_POINTER_TYPE:
!       return eval_is_member_function_pointer_type (loc, h);
      case METAFN_IS_ENUM_TYPE:
!       return eval_is_enum_type (loc, h);
      case METAFN_IS_UNION_TYPE:
!       return eval_is_union_type (loc, h);
      case METAFN_IS_CLASS_TYPE:
!       return eval_is_class_type (loc, h);
      case METAFN_IS_FUNCTION_TYPE:
        return eval_is_function_type (h);
      case METAFN_IS_REFLECTION_TYPE:
        return eval_is_reflection_type (h);
      case METAFN_IS_REFERENCE_TYPE:
!       return eval_is_reference_type (loc, h);
      case METAFN_IS_ARITHMETIC_TYPE:
        return eval_is_arithmetic_type (h);
      case METAFN_IS_FUNDAMENTAL_TYPE:
        return eval_is_fundamental_type (h);
      case METAFN_IS_OBJECT_TYPE:
!       return eval_is_object_type (loc, h);
      case METAFN_IS_SCALAR_TYPE:
        return eval_is_scalar_type (h);
      case METAFN_IS_COMPOUND_TYPE:
        return eval_is_compound_type (h);
      case METAFN_IS_MEMBER_POINTER_TYPE:
!       return eval_is_member_pointer_type (loc, h);
      case METAFN_IS_CONST_TYPE:
        return eval_is_const_type (h);
      case METAFN_IS_VOLATILE_TYPE:
        return eval_is_volatile_type (h);
      case METAFN_IS_TRIVIALLY_COPYABLE_TYPE:
!       return eval_is_trivially_copyable_type (h);
      case METAFN_IS_STANDARD_LAYOUT_TYPE:
!       return eval_is_standard_layout_type (h);
      case METAFN_IS_EMPTY_TYPE:
!       return eval_is_empty_type (loc, h);
      case METAFN_IS_POLYMORPHIC_TYPE:
!       return eval_is_polymorphic_type (loc, h);
      case METAFN_IS_ABSTRACT_TYPE:
!       return eval_is_abstract_type (h);
      case METAFN_IS_FINAL_TYPE:
!       return eval_is_final_type (loc, h);
      case METAFN_IS_AGGREGATE_TYPE:
!       return eval_is_aggregate_type (h);
      case METAFN_IS_STRUCTURAL_TYPE:
!       return eval_is_structural_type (loc, h);
      case METAFN_IS_SIGNED_TYPE:
        return eval_is_signed_type (h);
      case METAFN_IS_UNSIGNED_TYPE:
        return eval_is_unsigned_type (h);
      case METAFN_IS_BOUNDED_ARRAY_TYPE:
!       return eval_is_bounded_array_type (loc, h);
      case METAFN_IS_UNBOUNDED_ARRAY_TYPE:
        return eval_is_unbounded_array_type (h);
      case METAFN_IS_SCOPED_ENUM_TYPE:
        return eval_is_scoped_enum_type (h);
      case METAFN_IS_CONSTRUCTIBLE_TYPE:
!       return eval_is_constructible_type (h, hvec);
      case METAFN_IS_DEFAULT_CONSTRUCTIBLE_TYPE:
!       return eval_is_default_constructible_type (h);
      case METAFN_IS_COPY_CONSTRUCTIBLE_TYPE:
!       return eval_is_copy_constructible_type (h);
      case METAFN_IS_MOVE_CONSTRUCTIBLE_TYPE:
!       return eval_is_move_constructible_type (h);
      case METAFN_IS_ASSIGNABLE_TYPE:
!       return eval_is_assignable_type (loc, h, h1);
      case METAFN_IS_COPY_ASSIGNABLE_TYPE:
!       return eval_is_copy_assignable_type (h);
      case METAFN_IS_MOVE_ASSIGNABLE_TYPE:
!       return eval_is_move_assignable_type (h);
      case METAFN_IS_SWAPPABLE_WITH_TYPE:
        return eval_is_swappable_with_type (loc, ctx, h, h1, call,
  					  non_constant_p, jump_target, fun,
--- 8419,8508 ----
      case METAFN_IS_FLOATING_POINT_TYPE:
        return eval_is_floating_point_type (h);
      case METAFN_IS_ARRAY_TYPE:
!       return eval_is_array_type (loc, ctx, h, non_constant_p, fun);
      case METAFN_IS_POINTER_TYPE:
!       return eval_is_pointer_type (loc, ctx, h, non_constant_p, fun);
      case METAFN_IS_LVALUE_REFERENCE_TYPE:
        return eval_is_lvalue_reference_type (h);
      case METAFN_IS_RVALUE_REFERENCE_TYPE:
        return eval_is_rvalue_reference_type (h);
      case METAFN_IS_MEMBER_OBJECT_POINTER_TYPE:
!       return eval_is_member_object_pointer_type (loc, ctx, h, non_constant_p,
! 						 fun);
      case METAFN_IS_MEMBER_FUNCTION_POINTER_TYPE:
!       return eval_is_member_function_pointer_type (loc, ctx, h, non_constant_p,
! 						   fun);
      case METAFN_IS_ENUM_TYPE:
!       return eval_is_enum_type (loc, ctx, h, non_constant_p, fun);
      case METAFN_IS_UNION_TYPE:
!       return eval_is_union_type (loc, ctx, h, non_constant_p, fun);
      case METAFN_IS_CLASS_TYPE:
!       return eval_is_class_type (loc, ctx, h, non_constant_p, fun);
      case METAFN_IS_FUNCTION_TYPE:
        return eval_is_function_type (h);
      case METAFN_IS_REFLECTION_TYPE:
        return eval_is_reflection_type (h);
      case METAFN_IS_REFERENCE_TYPE:
!       return eval_is_reference_type (loc, ctx, h, non_constant_p, fun);
      case METAFN_IS_ARITHMETIC_TYPE:
        return eval_is_arithmetic_type (h);
      case METAFN_IS_FUNDAMENTAL_TYPE:
        return eval_is_fundamental_type (h);
      case METAFN_IS_OBJECT_TYPE:
!       return eval_is_object_type (loc, ctx, h, non_constant_p, fun);
      case METAFN_IS_SCALAR_TYPE:
        return eval_is_scalar_type (h);
      case METAFN_IS_COMPOUND_TYPE:
        return eval_is_compound_type (h);
      case METAFN_IS_MEMBER_POINTER_TYPE:
!       return eval_is_member_pointer_type (loc, ctx, h, non_constant_p, fun);
      case METAFN_IS_CONST_TYPE:
        return eval_is_const_type (h);
      case METAFN_IS_VOLATILE_TYPE:
        return eval_is_volatile_type (h);
      case METAFN_IS_TRIVIALLY_COPYABLE_TYPE:
!       return eval_is_trivially_copyable_type (loc, ctx, h, non_constant_p,
! 					      fun);
      case METAFN_IS_STANDARD_LAYOUT_TYPE:
!       return eval_is_standard_layout_type (loc, ctx, h, non_constant_p, fun);
      case METAFN_IS_EMPTY_TYPE:
!       return eval_is_empty_type (loc, ctx, h, non_constant_p, fun);
      case METAFN_IS_POLYMORPHIC_TYPE:
!       return eval_is_polymorphic_type (loc, ctx, h, non_constant_p, fun);
      case METAFN_IS_ABSTRACT_TYPE:
!       return eval_is_abstract_type (loc, ctx, h, non_constant_p, fun);
      case METAFN_IS_FINAL_TYPE:
!       return eval_is_final_type (loc, ctx, h, non_constant_p, fun);
      case METAFN_IS_AGGREGATE_TYPE:
!       return eval_is_aggregate_type (loc, ctx, h, non_constant_p, fun);
      case METAFN_IS_STRUCTURAL_TYPE:
!       return eval_is_structural_type (loc, ctx, h, non_constant_p, fun);
      case METAFN_IS_SIGNED_TYPE:
        return eval_is_signed_type (h);
      case METAFN_IS_UNSIGNED_TYPE:
        return eval_is_unsigned_type (h);
      case METAFN_IS_BOUNDED_ARRAY_TYPE:
!       return eval_is_bounded_array_type (loc, ctx, h, non_constant_p, fun);
      case METAFN_IS_UNBOUNDED_ARRAY_TYPE:
        return eval_is_unbounded_array_type (h);
      case METAFN_IS_SCOPED_ENUM_TYPE:
        return eval_is_scoped_enum_type (h);
      case METAFN_IS_CONSTRUCTIBLE_TYPE:
!       return eval_is_constructible_type (loc, ctx, h, hvec, non_constant_p,
! 					 fun);
      case METAFN_IS_DEFAULT_CONSTRUCTIBLE_TYPE:
!       return eval_is_default_constructible_type (loc, ctx, h, non_constant_p,
! 						 fun);
      case METAFN_IS_COPY_CONSTRUCTIBLE_TYPE:
!       return eval_is_copy_constructible_type (loc, ctx, h, non_constant_p, fun);
      case METAFN_IS_MOVE_CONSTRUCTIBLE_TYPE:
!       return eval_is_move_constructible_type (loc, ctx, h, non_constant_p, fun);
      case METAFN_IS_ASSIGNABLE_TYPE:
!       return eval_is_assignable_type (loc, ctx, h, h1, non_constant_p, fun);
      case METAFN_IS_COPY_ASSIGNABLE_TYPE:
!       return eval_is_copy_assignable_type (loc, ctx, h, non_constant_p, fun);
      case METAFN_IS_MOVE_ASSIGNABLE_TYPE:
!       return eval_is_move_assignable_type (loc, ctx, h, non_constant_p, fun);
      case METAFN_IS_SWAPPABLE_WITH_TYPE:
        return eval_is_swappable_with_type (loc, ctx, h, h1, call,
  					  non_constant_p, jump_target, fun,
*************** process_metafunction (const constexpr_ct
*** 8376,8412 ****
        return eval_is_swappable_type (loc, ctx, h, call, non_constant_p,
  				     jump_target, fun, "is_swappable");
      case METAFN_IS_DESTRUCTIBLE_TYPE:
!       return eval_is_destructible_type (loc, h);
      case METAFN_IS_TRIVIALLY_CONSTRUCTIBLE_TYPE:
!       return eval_is_trivially_constructible_type (h, hvec);
      case METAFN_IS_TRIVIALLY_DEFAULT_CONSTRUCTIBLE_TYPE:
!       return eval_is_trivially_default_constructible_type (h);
      case METAFN_IS_TRIVIALLY_COPY_CONSTRUCTIBLE_TYPE:
!       return eval_is_trivially_copy_constructible_type (h);
      case METAFN_IS_TRIVIALLY_MOVE_CONSTRUCTIBLE_TYPE:
!       return eval_is_trivially_move_constructible_type (h);
      case METAFN_IS_TRIVIALLY_ASSIGNABLE_TYPE:
!       return eval_is_trivially_assignable_type (loc, h, h1);
      case METAFN_IS_TRIVIALLY_COPY_ASSIGNABLE_TYPE:
!       return eval_is_trivially_copy_assignable_type (h);
      case METAFN_IS_TRIVIALLY_MOVE_ASSIGNABLE_TYPE:
!       return eval_is_trivially_move_assignable_type (h);
      case METAFN_IS_TRIVIALLY_DESTRUCTIBLE_TYPE:
!       return eval_is_trivially_destructible_type (loc, h);
      case METAFN_IS_NOTHROW_CONSTRUCTIBLE_TYPE:
!       return eval_is_nothrow_constructible_type (h, hvec);
      case METAFN_IS_NOTHROW_DEFAULT_CONSTRUCTIBLE_TYPE:
!       return eval_is_nothrow_default_constructible_type (h);
      case METAFN_IS_NOTHROW_COPY_CONSTRUCTIBLE_TYPE:
!       return eval_is_nothrow_copy_constructible_type (h);
      case METAFN_IS_NOTHROW_MOVE_CONSTRUCTIBLE_TYPE:
!       return eval_is_nothrow_move_constructible_type (h);
      case METAFN_IS_NOTHROW_ASSIGNABLE_TYPE:
!       return eval_is_nothrow_assignable_type (loc, h, h1);
      case METAFN_IS_NOTHROW_COPY_ASSIGNABLE_TYPE:
!       return eval_is_nothrow_copy_assignable_type (h);
      case METAFN_IS_NOTHROW_MOVE_ASSIGNABLE_TYPE:
!       return eval_is_nothrow_move_assignable_type (h);
      case METAFN_IS_NOTHROW_SWAPPABLE_WITH_TYPE:
        return eval_is_swappable_with_type (loc, ctx, h, h1, call,
  					  non_constant_p, jump_target, fun,
--- 8511,8563 ----
        return eval_is_swappable_type (loc, ctx, h, call, non_constant_p,
  				     jump_target, fun, "is_swappable");
      case METAFN_IS_DESTRUCTIBLE_TYPE:
!       return eval_is_destructible_type (loc, ctx, h, non_constant_p, fun);
      case METAFN_IS_TRIVIALLY_CONSTRUCTIBLE_TYPE:
!       return eval_is_trivially_constructible_type (loc, ctx, h, hvec,
! 						   non_constant_p, fun);
      case METAFN_IS_TRIVIALLY_DEFAULT_CONSTRUCTIBLE_TYPE:
!       return eval_is_trivially_default_constructible_type (loc, ctx, h,
! 							   non_constant_p,
! 							   fun);
      case METAFN_IS_TRIVIALLY_COPY_CONSTRUCTIBLE_TYPE:
!       return eval_is_trivially_copy_constructible_type (loc, ctx, h,
! 							non_constant_p, fun);
      case METAFN_IS_TRIVIALLY_MOVE_CONSTRUCTIBLE_TYPE:
!       return eval_is_trivially_move_constructible_type (loc, ctx, h,
! 							non_constant_p, fun);
      case METAFN_IS_TRIVIALLY_ASSIGNABLE_TYPE:
!       return eval_is_trivially_assignable_type (loc, ctx, h, h1,
! 						non_constant_p, fun);
      case METAFN_IS_TRIVIALLY_COPY_ASSIGNABLE_TYPE:
!       return eval_is_trivially_copy_assignable_type (loc, ctx, h,
! 						     non_constant_p, fun);
      case METAFN_IS_TRIVIALLY_MOVE_ASSIGNABLE_TYPE:
!       return eval_is_trivially_move_assignable_type (loc, ctx, h,
! 						     non_constant_p, fun);
      case METAFN_IS_TRIVIALLY_DESTRUCTIBLE_TYPE:
!       return eval_is_trivially_destructible_type (loc, ctx, h, non_constant_p,
! 						  fun);
      case METAFN_IS_NOTHROW_CONSTRUCTIBLE_TYPE:
!       return eval_is_nothrow_constructible_type (loc, ctx, h, hvec,
! 						 non_constant_p, fun);
      case METAFN_IS_NOTHROW_DEFAULT_CONSTRUCTIBLE_TYPE:
!       return eval_is_nothrow_default_constructible_type (loc, ctx, h,
! 							 non_constant_p, fun);
      case METAFN_IS_NOTHROW_COPY_CONSTRUCTIBLE_TYPE:
!       return eval_is_nothrow_copy_constructible_type (loc, ctx, h,
! 						      non_constant_p, fun);
      case METAFN_IS_NOTHROW_MOVE_CONSTRUCTIBLE_TYPE:
!       return eval_is_nothrow_move_constructible_type (loc, ctx, h,
! 						      non_constant_p, fun);
      case METAFN_IS_NOTHROW_ASSIGNABLE_TYPE:
!       return eval_is_nothrow_assignable_type (loc, ctx, h, h1, non_constant_p,
! 					      fun);
      case METAFN_IS_NOTHROW_COPY_ASSIGNABLE_TYPE:
!       return eval_is_nothrow_copy_assignable_type (loc, ctx, h, non_constant_p,
! 						   fun);
      case METAFN_IS_NOTHROW_MOVE_ASSIGNABLE_TYPE:
!       return eval_is_nothrow_move_assignable_type (loc, ctx, h, non_constant_p,
! 						   fun);
      case METAFN_IS_NOTHROW_SWAPPABLE_WITH_TYPE:
        return eval_is_swappable_with_type (loc, ctx, h, h1, call,
  					  non_constant_p, jump_target, fun,
*************** process_metafunction (const constexpr_ct
*** 8415,8457 ****
        return eval_is_swappable_type (loc, ctx, h, call, non_constant_p,
  				     jump_target, fun, "is_nothrow_swappable");
      case METAFN_IS_NOTHROW_DESTRUCTIBLE_TYPE:
!       return eval_is_nothrow_destructible_type (loc, h);
      case METAFN_IS_IMPLICIT_LIFETIME_TYPE:
!       return eval_is_implicit_lifetime_type (h);
      case METAFN_HAS_VIRTUAL_DESTRUCTOR:
!       return eval_has_virtual_destructor (h);
      case METAFN_HAS_UNIQUE_OBJECT_REPRESENTATIONS:
!       return eval_has_unique_object_representations (h);
      case METAFN_REFERENCE_CONSTRUCTS_FROM_TEMPORARY:
!       return eval_reference_constructs_from_temporary (loc, h, h1);
      case METAFN_REFERENCE_CONVERTS_FROM_TEMPORARY:
!       return eval_reference_converts_from_temporary (loc, h, h1);
      case METAFN_RANK:
        return eval_rank (h);
      case METAFN_EXTENT:
!       return eval_extent (loc, h, expr);
      case METAFN_IS_SAME_TYPE:
!       return eval_is_same_type (loc, h, h1);
      case METAFN_IS_BASE_OF_TYPE:
!       return eval_is_base_of_type (loc, h, h1);
      case METAFN_IS_VIRTUAL_BASE_OF_TYPE:
!       return eval_is_virtual_base_of_type (loc, h, h1);
      case METAFN_IS_CONVERTIBLE_TYPE:
!       return eval_is_convertible_type (loc, h, h1);
      case METAFN_IS_NOTHROW_CONVERTIBLE_TYPE:
!       return eval_is_nothrow_convertible_type (loc, h, h1);
      case METAFN_IS_LAYOUT_COMPATIBLE_TYPE:
!       return eval_is_layout_compatible_type (loc, h, h1);
      case METAFN_IS_POINTER_INTERCONVERTIBLE_BASE_OF_TYPE:
!       return eval_is_pointer_interconvertible_base_of_type (loc, h, h1);
      case METAFN_IS_INVOCABLE_TYPE:
!       return eval_is_invocable_type (loc, h, hvec);
      case METAFN_IS_INVOCABLE_R_TYPE:
        return eval_is_invocable_r_type (loc, ctx, h, h1, hvec, call,
  				       non_constant_p, jump_target, fun,
  				       "is_invocable_r");
      case METAFN_IS_NOTHROW_INVOCABLE_TYPE:
!       return eval_is_nothrow_invocable_type (loc, h, hvec);
      case METAFN_IS_NOTHROW_INVOCABLE_R_TYPE:
        return eval_is_invocable_r_type (loc, ctx, h, h1, hvec, call,
  				       non_constant_p, jump_target, fun,
--- 8566,8618 ----
        return eval_is_swappable_type (loc, ctx, h, call, non_constant_p,
  				     jump_target, fun, "is_nothrow_swappable");
      case METAFN_IS_NOTHROW_DESTRUCTIBLE_TYPE:
!       return eval_is_nothrow_destructible_type (loc, ctx, h, non_constant_p,
! 						fun);
      case METAFN_IS_IMPLICIT_LIFETIME_TYPE:
!       return eval_is_implicit_lifetime_type (loc, ctx, h, non_constant_p, fun);
      case METAFN_HAS_VIRTUAL_DESTRUCTOR:
!       return eval_has_virtual_destructor (loc, ctx, h, non_constant_p, fun);
      case METAFN_HAS_UNIQUE_OBJECT_REPRESENTATIONS:
!       return eval_has_unique_object_representations (loc, ctx, h,
! 						     non_constant_p, fun);
      case METAFN_REFERENCE_CONSTRUCTS_FROM_TEMPORARY:
!       return eval_reference_constructs_from_temporary (loc, ctx, h, h1,
! 						       non_constant_p, fun);
      case METAFN_REFERENCE_CONVERTS_FROM_TEMPORARY:
!       return eval_reference_converts_from_temporary (loc, ctx, h, h1,
! 						     non_constant_p, fun);
      case METAFN_RANK:
        return eval_rank (h);
      case METAFN_EXTENT:
!       return eval_extent (loc, ctx, h, expr, non_constant_p, fun);
      case METAFN_IS_SAME_TYPE:
!       return eval_is_same_type (loc, ctx, h, h1, non_constant_p, fun);
      case METAFN_IS_BASE_OF_TYPE:
!       return eval_is_base_of_type (loc, ctx, h, h1, non_constant_p, fun);
      case METAFN_IS_VIRTUAL_BASE_OF_TYPE:
!       return eval_is_virtual_base_of_type (loc, ctx, h, h1, non_constant_p,
! 					   fun);
      case METAFN_IS_CONVERTIBLE_TYPE:
!       return eval_is_convertible_type (loc, ctx, h, h1, non_constant_p, fun);
      case METAFN_IS_NOTHROW_CONVERTIBLE_TYPE:
!       return eval_is_nothrow_convertible_type (loc, ctx, h, h1, non_constant_p,
! 					       fun);
      case METAFN_IS_LAYOUT_COMPATIBLE_TYPE:
!       return eval_is_layout_compatible_type (loc, ctx, h, h1, non_constant_p,
! 					     fun);
      case METAFN_IS_POINTER_INTERCONVERTIBLE_BASE_OF_TYPE:
!       return eval_is_pointer_interconvertible_base_of_type (loc, ctx, h, h1,
! 							    non_constant_p,
! 							    fun);
      case METAFN_IS_INVOCABLE_TYPE:
!       return eval_is_invocable_type (loc, ctx, h, hvec, non_constant_p, fun);
      case METAFN_IS_INVOCABLE_R_TYPE:
        return eval_is_invocable_r_type (loc, ctx, h, h1, hvec, call,
  				       non_constant_p, jump_target, fun,
  				       "is_invocable_r");
      case METAFN_IS_NOTHROW_INVOCABLE_TYPE:
!       return eval_is_nothrow_invocable_type (loc, ctx, h, hvec, non_constant_p,
! 					     fun);
      case METAFN_IS_NOTHROW_INVOCABLE_R_TYPE:
        return eval_is_invocable_r_type (loc, ctx, h, h1, hvec, call,
  				       non_constant_p, jump_target, fun,
diff -Nrcpad gcc-17-20260705/gcc/cp/rtti.cc gcc-17-20260712/gcc/cp/rtti.cc
*** gcc-17-20260705/gcc/cp/rtti.cc	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/cp/rtti.cc	Sun Jul 12 22:32:08 2026
*************** typeid_ok_p (void)
*** 340,345 ****
--- 340,371 ----
    return true;
  }
  
+ /* True if EXP is a glvalue expression of polymorphic class type whose
+    dynamic type is not known statically, so that typeid (EXP) must be
+    evaluated per ([expr.typeid]/4).  */
+ 
+ bool
+ typeid_evaluated_p (tree exp)
+ {
+   if (exp == error_mark_node)
+     return false;
+   tree t = TREE_TYPE (exp);
+   if (!t || t == error_mark_node)
+     return false;
+   if (TYPE_REF_P (t))
+     t = TREE_TYPE (t);
+   if (TREE_CODE (t) != RECORD_TYPE && TREE_CODE (t) != UNION_TYPE)
+     return false;
+   int nonnull = 0;
+   return (TYPE_POLYMORPHIC_P (t)
+ 	  && !resolves_to_fixed_type_p (exp, &nonnull)
+ 	  /* Only a glvalue operand is evaluated ([expr.typeid]/4).
+ 	     The following check is only necessary because
+ 	     resolves_to_fixed_type_p does not handle all
+ 	     prvalue cases such as COMPOUND_EXPR.  */
+ 	  && glvalue_p (exp));
+ }
+ 
  /* Return an expression for "typeid(EXP)".  The expression returned is
     an lvalue of type "const std::type_info".  */
  
*************** tree
*** 347,353 ****
  build_typeid (tree exp, tsubst_flags_t complain)
  {
    tree cond = NULL_TREE, initial_expr = exp;
-   int nonnull = 0;
  
    if (exp == error_mark_node || !typeid_ok_p ())
      return error_mark_node;
--- 373,378 ----
*************** build_typeid (tree exp, tsubst_flags_t c
*** 355,371 ****
    if (processing_template_decl)
      return build_min (TYPEID_EXPR, const_type_info_type_node, exp);
  
!   if (CLASS_TYPE_P (TREE_TYPE (exp))
!       && TYPE_POLYMORPHIC_P (TREE_TYPE (exp))
!       && ! resolves_to_fixed_type_p (exp, &nonnull)
!       && ! nonnull)
      {
!       /* So we need to look into the vtable of the type of exp.
!          Make sure it isn't a null lvalue.  */
!       exp = cp_build_addr_expr (exp, complain);
!       exp = save_expr (exp);
!       cond = cp_convert (boolean_type_node, exp, complain);
!       exp = cp_build_fold_indirect_ref (exp);
      }
  
    exp = get_tinfo_ptr_dynamic (exp, complain);
--- 380,397 ----
    if (processing_template_decl)
      return build_min (TYPEID_EXPR, const_type_info_type_node, exp);
  
!   if (typeid_evaluated_p (exp))
      {
!       int nonnull = 0;
!       resolves_to_fixed_type_p (exp, &nonnull);
!       if (!nonnull)
! 	{
! 	  /* Make sure it isn't a null lvalue; evaluate it once.  */
! 	  exp = cp_build_addr_expr (exp, complain);
! 	  exp = save_expr (exp);
! 	  cond = cp_convert (boolean_type_node, exp, complain);
! 	  exp = cp_build_fold_indirect_ref (exp);
! 	}
      }
  
    exp = get_tinfo_ptr_dynamic (exp, complain);
diff -Nrcpad gcc-17-20260705/gcc/cp/semantics.cc gcc-17-20260712/gcc/cp/semantics.cc
*** gcc-17-20260705/gcc/cp/semantics.cc	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/cp/semantics.cc	Sun Jul 12 22:32:08 2026
*************** trait_expr_value (cp_trait_kind kind, tr
*** 14286,14295 ****
     If TYPE is a non-union class type, it must be complete.
  
     When KIND == 4:
!    If TYPE is a class type, it must be complete.  */
  
  static bool
! check_trait_type (tree type, int kind = 1)
  {
    if (type == NULL_TREE)
      return true;
--- 14286,14298 ----
     If TYPE is a non-union class type, it must be complete.
  
     When KIND == 4:
!    If TYPE is a class type, it must be complete.
! 
!    If COMPLAIN is not tf_none, we permerror and return false if that doesn't
!    produce a hard error.  */
  
  static bool
! check_trait_type (tree type, int kind, tsubst_flags_t complain)
  {
    if (type == NULL_TREE)
      return true;
*************** check_trait_type (tree type, int kind =
*** 14297,14303 ****
    if (TREE_CODE (type) == TREE_VEC)
      {
        for (tree arg : tree_vec_range (type))
! 	if (!check_trait_type (arg, kind))
  	  return false;
        return true;
      }
--- 14300,14306 ----
    if (TREE_CODE (type) == TREE_VEC)
      {
        for (tree arg : tree_vec_range (type))
! 	if (!check_trait_type (arg, kind, complain))
  	  return false;
        return true;
      }
*************** check_trait_type (tree type, int kind =
*** 14316,14324 ****
  
    type = complete_type (strip_array_types (type));
    if (!COMPLETE_TYPE_P (type)
!       && cxx_incomplete_type_diagnostic (NULL_TREE, type,
! 					 diagnostics::kind::permerror)
!       && !flag_permissive)
      return false;
    return true;
  }
--- 14319,14330 ----
  
    type = complete_type (strip_array_types (type));
    if (!COMPLETE_TYPE_P (type)
!       /* If we're not emitting error messages, always return false for
! 	 incomplete types.  */
!       && (complain == tf_none
! 	  || (cxx_incomplete_type_diagnostic (NULL_TREE, type,
! 					      diagnostics::kind::permerror)
! 	      && !flag_permissive)))
      return false;
    return true;
  }
*************** finish_structured_binding_size (location
*** 14388,14394 ****
  /* Process a trait expression.  */
  
  tree
! finish_trait_expr (location_t loc, cp_trait_kind kind, tree type1, tree type2)
  {
    if (type1 == error_mark_node
        || type2 == error_mark_node)
--- 14394,14401 ----
  /* Process a trait expression.  */
  
  tree
! finish_trait_expr (location_t loc, cp_trait_kind kind, tree type1, tree type2,
! 		   tsubst_flags_t complain/*=tf_warning_or_error*/)
  {
    if (type1 == error_mark_node
        || type2 == error_mark_node)
*************** finish_trait_expr (location_t loc, cp_tr
*** 14426,14432 ****
      case CPTK_IS_DESTRUCTIBLE:
      case CPTK_IS_NOTHROW_DESTRUCTIBLE:
      case CPTK_IS_TRIVIALLY_DESTRUCTIBLE:
!       if (!check_trait_type (type1))
  	return error_mark_node;
        break;
  
--- 14433,14439 ----
      case CPTK_IS_DESTRUCTIBLE:
      case CPTK_IS_NOTHROW_DESTRUCTIBLE:
      case CPTK_IS_TRIVIALLY_DESTRUCTIBLE:
!       if (!check_trait_type (type1, /*kind=*/1, complain))
  	return error_mark_node;
        break;
  
*************** finish_trait_expr (location_t loc, cp_tr
*** 14437,14443 ****
      case CPTK_IS_TRIVIALLY_COPYABLE:
      case CPTK_IS_STRUCTURAL:
      case CPTK_HAS_UNIQUE_OBJ_REPRESENTATIONS:
!       if (!check_trait_type (type1, /* kind = */ 2))
  	return error_mark_node;
        break;
  
--- 14444,14450 ----
      case CPTK_IS_TRIVIALLY_COPYABLE:
      case CPTK_IS_STRUCTURAL:
      case CPTK_HAS_UNIQUE_OBJ_REPRESENTATIONS:
!       if (!check_trait_type (type1, /* kind = */ 2, complain))
  	return error_mark_node;
        break;
  
*************** finish_trait_expr (location_t loc, cp_tr
*** 14445,14451 ****
      case CPTK_IS_EMPTY:
      case CPTK_IS_POLYMORPHIC:
      case CPTK_HAS_VIRTUAL_DESTRUCTOR:
!       if (!check_trait_type (type1, /* kind = */ 3))
  	return error_mark_node;
        break;
  
--- 14452,14458 ----
      case CPTK_IS_EMPTY:
      case CPTK_IS_POLYMORPHIC:
      case CPTK_HAS_VIRTUAL_DESTRUCTOR:
!       if (!check_trait_type (type1, /* kind = */ 3, complain))
  	return error_mark_node;
        break;
  
*************** finish_trait_expr (location_t loc, cp_tr
*** 14454,14460 ****
      case CPTK_IS_AGGREGATE:
      case CPTK_IS_FINAL:
      case CPTK_IS_IMPLICIT_LIFETIME:
!       if (!check_trait_type (type1, /* kind = */ 4))
  	return error_mark_node;
        break;
  
--- 14461,14467 ----
      case CPTK_IS_AGGREGATE:
      case CPTK_IS_FINAL:
      case CPTK_IS_IMPLICIT_LIFETIME:
!       if (!check_trait_type (type1, /* kind = */ 4, complain))
  	return error_mark_node;
        break;
  
*************** finish_trait_expr (location_t loc, cp_tr
*** 14475,14482 ****
      case CPTK_IS_ASSIGNABLE:
      case CPTK_IS_NOTHROW_ASSIGNABLE:
      case CPTK_IS_TRIVIALLY_ASSIGNABLE:
!       if (!check_trait_type (type1)
! 	  || !check_trait_type (type2))
  	return error_mark_node;
        break;
  
--- 14482,14489 ----
      case CPTK_IS_ASSIGNABLE:
      case CPTK_IS_NOTHROW_ASSIGNABLE:
      case CPTK_IS_TRIVIALLY_ASSIGNABLE:
!       if (!check_trait_type (type1, /*kind=*/1, complain)
! 	  || !check_trait_type (type2, /*kind=*/1, complain))
  	return error_mark_node;
        break;
  
*************** finish_trait_expr (location_t loc, cp_tr
*** 14484,14497 ****
      case CPTK_IS_POINTER_INTERCONVERTIBLE_BASE_OF:
        if (NON_UNION_CLASS_TYPE_P (type1) && NON_UNION_CLASS_TYPE_P (type2)
  	  && !same_type_ignoring_top_level_qualifiers_p (type1, type2)
! 	  && !complete_type_or_else (type2, NULL_TREE))
  	/* We already issued an error.  */
  	return error_mark_node;
        break;
  
      case CPTK_IS_VIRTUAL_BASE_OF:
        if (NON_UNION_CLASS_TYPE_P (type1) && NON_UNION_CLASS_TYPE_P (type2)
! 	  && !complete_type_or_else (type2, NULL_TREE))
  	/* We already issued an error.  */
  	return error_mark_node;
        break;
--- 14491,14504 ----
      case CPTK_IS_POINTER_INTERCONVERTIBLE_BASE_OF:
        if (NON_UNION_CLASS_TYPE_P (type1) && NON_UNION_CLASS_TYPE_P (type2)
  	  && !same_type_ignoring_top_level_qualifiers_p (type1, type2)
! 	  && !complete_type_or_maybe_complain (type2, NULL_TREE, complain))
  	/* We already issued an error.  */
  	return error_mark_node;
        break;
  
      case CPTK_IS_VIRTUAL_BASE_OF:
        if (NON_UNION_CLASS_TYPE_P (type1) && NON_UNION_CLASS_TYPE_P (type2)
! 	  && !complete_type_or_maybe_complain (type2, NULL_TREE, complain))
  	/* We already issued an error.  */
  	return error_mark_node;
        break;
*************** finish_trait_expr (location_t loc, cp_tr
*** 14528,14544 ****
        return maybe_wrap_with_location (type_order_value (type1, type2), loc);
  
      case CPTK_STRUCTURED_BINDING_SIZE:
!       return finish_structured_binding_size (loc, type1, tf_warning_or_error);
  
      case CPTK_IS_LAYOUT_COMPATIBLE:
        if (!array_of_unknown_bound_p (type1)
  	  && TREE_CODE (type1) != VOID_TYPE
! 	  && !complete_type_or_else (type1, NULL_TREE))
  	/* We already issued an error.  */
  	return error_mark_node;
        if (!array_of_unknown_bound_p (type2)
  	  && TREE_CODE (type2) != VOID_TYPE
! 	  && !complete_type_or_else (type2, NULL_TREE))
  	/* We already issued an error.  */
  	return error_mark_node;
        break;
--- 14535,14551 ----
        return maybe_wrap_with_location (type_order_value (type1, type2), loc);
  
      case CPTK_STRUCTURED_BINDING_SIZE:
!       return finish_structured_binding_size (loc, type1, complain);
  
      case CPTK_IS_LAYOUT_COMPATIBLE:
        if (!array_of_unknown_bound_p (type1)
  	  && TREE_CODE (type1) != VOID_TYPE
! 	  && !complete_type_or_maybe_complain (type1, NULL_TREE, complain))
  	/* We already issued an error.  */
  	return error_mark_node;
        if (!array_of_unknown_bound_p (type2)
  	  && TREE_CODE (type2) != VOID_TYPE
! 	  && !complete_type_or_maybe_complain (type2, NULL_TREE, complain))
  	/* We already issued an error.  */
  	return error_mark_node;
        break;
diff -Nrcpad gcc-17-20260705/gcc/cselib.cc gcc-17-20260712/gcc/cselib.cc
*** gcc-17-20260705/gcc/cselib.cc	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/cselib.cc	Sun Jul 12 22:32:08 2026
*************** new_elt_loc_list (cselib_val *val, rtx l
*** 360,373 ****
  
        if (val->val_rtx == loc)
  	return;
!       else if (val->uid > loc_val->uid)
  	{
  	  /* Reverse the insertion.  */
  	  new_elt_loc_list (loc_val, val->val_rtx);
  	  return;
  	}
  
!       gcc_checking_assert (val->uid < loc_val->uid);
  
        if (loc_val->locs)
  	{
--- 360,374 ----
  
        if (val->val_rtx == loc)
  	return;
!       else if (CSELIB_VAL_UID (val->val_rtx) > CSELIB_VAL_UID (loc))
  	{
  	  /* Reverse the insertion.  */
  	  new_elt_loc_list (loc_val, val->val_rtx);
  	  return;
  	}
  
!       gcc_checking_assert (CSELIB_VAL_UID (val->val_rtx)
! 			   < CSELIB_VAL_UID (loc));
  
        if (loc_val->locs)
  	{
*************** cselib_find_slot (machine_mode mode, rtx
*** 658,664 ****
  {
    cselib_val **slot = NULL;
    cselib_hasher::key lookup = { mode, x, memmode };
-   hash &= cselib_val::HASH_MASK;
    if (cselib_preserve_constants)
      slot = cselib_preserved_hash_table->find_slot_with_hash (&lookup, hash,
  							     NO_INSERT);
--- 659,664 ----
*************** new_cselib_val (hashval_t hash, machine_
*** 1683,1689 ****
    e->hash = hash;
    e->in_preserved_table_p = false;
    e->all_locs_preserved_p = false;
-   e->uid = next_uid++;
    /* We use an alloc pool to allocate this RTL construct because it
       accounts for about 8% of the overall memory usage.  We know
       precisely when we can have VALUE RTXen (when cselib is active)
--- 1683,1688 ----
*************** new_cselib_val (hashval_t hash, machine_
*** 1694,1699 ****
--- 1693,1699 ----
    PUT_CODE (e->val_rtx, VALUE);
    PUT_MODE (e->val_rtx, mode);
    CSELIB_VAL_PTR (e->val_rtx) = e;
+   CSELIB_VAL_UID (e->val_rtx) = next_uid++;
    e->addr_list = 0;
    e->locs = 0;
    e->next_containing_mem = 0;
*************** new_cselib_val (hashval_t hash, machine_
*** 1721,1727 ****
  
    if (dump_file && (dump_flags & TDF_CSELIB))
      {
!       fprintf (dump_file, "cselib value %u:%u ", e->uid, hash);
        if (flag_dump_noaddr || flag_dump_unnumbered)
  	fputs ("# ", dump_file);
        else
--- 1721,1728 ----
  
    if (dump_file && (dump_flags & TDF_CSELIB))
      {
!       fprintf (dump_file, "cselib value %u:%u ",
! 	       CSELIB_VAL_UID (e->val_rtx), hash);
        if (flag_dump_noaddr || flag_dump_unnumbered)
  	fputs ("# ", dump_file);
        else
*************** cselib_lookup (rtx x, machine_mode mode,
*** 2571,2577 ****
        fputs ("cselib lookup ", dump_file);
        print_inline_rtx (dump_file, x, 2);
        fprintf (dump_file, " => %u:%u\n",
! 	       ret ? ret->uid : 0,
  	       ret ? ret->hash : 0);
      }
  
--- 2572,2578 ----
        fputs ("cselib lookup ", dump_file);
        print_inline_rtx (dump_file, x, 2);
        fprintf (dump_file, " => %u:%u\n",
! 	       ret ? CSELIB_VAL_UID (ret->val_rtx) : 0,
  	       ret ? ret->hash : 0);
      }
  
diff -Nrcpad gcc-17-20260705/gcc/cselib.h gcc-17-20260712/gcc/cselib.h
*** gcc-17-20260705/gcc/cselib.h	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/cselib.h	Sun Jul 12 22:32:08 2026
*************** along with GCC; see the file COPYING3.
*** 23,33 ****
  /* Describe a value.  */
  struct cselib_val
  {
-   /* A mask equivalent of HASH's bitfield width.  */
-   static const unsigned int HASH_MASK = 0x3fffffff;
- 
    /* The hash value.  */
!   unsigned int hash : 30;
  
    /* True if this value is entered in cselib_preserved_hash_table.  */
    unsigned int in_preserved_table_p : 1;
--- 23,30 ----
  /* Describe a value.  */
  struct cselib_val
  {
    /* The hash value.  */
!   unsigned int hash;
  
    /* True if this value is entered in cselib_preserved_hash_table.  */
    unsigned int in_preserved_table_p : 1;
*************** struct cselib_val
*** 36,44 ****
       to be a preserved value.  */
    unsigned int all_locs_preserved_p : 1;
  
-   /* A unique id assigned to values.  */
-   int uid;
- 
    /* A VALUE rtx that points back to this structure.  */
    rtx val_rtx;
  
--- 33,38 ----
*************** canonical_cselib_val (cselib_val *val)
*** 130,136 ****
  
    if (!val->locs || val->locs->next
        || !val->locs->loc || GET_CODE (val->locs->loc) != VALUE
!       || val->uid < CSELIB_VAL_PTR (val->locs->loc)->uid)
      return val;
  
    canon = CSELIB_VAL_PTR (val->locs->loc);
--- 124,130 ----
  
    if (!val->locs || val->locs->next
        || !val->locs->loc || GET_CODE (val->locs->loc) != VALUE
!       || CSELIB_VAL_UID (val->val_rtx) < CSELIB_VAL_UID (val->locs->loc))
      return val;
  
    canon = CSELIB_VAL_PTR (val->locs->loc);
diff -Nrcpad gcc-17-20260705/gcc/doc/extend.texi gcc-17-20260712/gcc/doc/extend.texi
*** gcc-17-20260705/gcc/doc/extend.texi	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/doc/extend.texi	Sun Jul 12 22:32:08 2026
*************** vector unsigned char);
*** 26985,26990 ****
--- 26985,26992 ----
  The following additional built-in functions are available for the
  PowerPC family of processors, starting with Future ISA.
  
+ @subsubheading PowerPC Advanced Encryption Standard (AES) Acceleration Built-in Functions
+ 
  Future ISA of the PowerPC may add new instructions for accelerating AES
  algorithm. GCC provides support for these new instructions through the
  following built-in functions. The third argument to
diff -Nrcpad gcc-17-20260705/gcc/doc/install.texi gcc-17-20260712/gcc/doc/install.texi
*** gcc-17-20260705/gcc/doc/install.texi	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/doc/install.texi	Sun Jul 12 22:32:08 2026
*************** mips64orion, mips64vr, mipsel, mipsisa32
*** 879,885 ****
  mipsisa64r2el, mipsisa64sb1, mipsisa64sr71k, mipstx39, mmix, mn10300, moxie,
  msp430, nds32be, nds32le, nvptx, or1k, pdp11, powerpc, powerpc64,
  powerpc64le, powerpcle, pru, riscv32, riscv32be, riscv64, riscv64be, rl78, rx,
! s390, s390x, sh, shle, sparc, sparc64, tic6x, v850,
  v850e, v850e1, vax, visium, x86_64, xstormy16, xtensa
  @end quotation
  
--- 879,885 ----
  mipsisa64r2el, mipsisa64sb1, mipsisa64sr71k, mipstx39, mmix, mn10300, moxie,
  msp430, nds32be, nds32le, nvptx, or1k, pdp11, powerpc, powerpc64,
  powerpc64le, powerpcle, pru, riscv32, riscv32be, riscv64, riscv64be, rl78, rx,
! s390x, sh, shle, sparc, sparc64, tic6x, v850,
  v850e, v850e1, vax, visium, x86_64, xstormy16, xtensa
  @end quotation
  
*************** you are building a bi-arch or multi-arch
*** 2239,2245 ****
  On mips-linux, this will build a tri-arch compiler (ABI o32/n32/64),
  defaulted to o32.
  Currently, this option only affects sparc-linux, powerpc-linux, x86-linux,
! mips-linux and s390-linux.
  
  @item --enable-default-pie
  Turn on @option{-fPIE} and @option{-pie} by default.
--- 2239,2245 ----
  On mips-linux, this will build a tri-arch compiler (ABI o32/n32/64),
  defaulted to o32.
  Currently, this option only affects sparc-linux, powerpc-linux, x86-linux,
! and mips-linux.
  
  @item --enable-default-pie
  Turn on @option{-fPIE} and @option{-pie} by default.
*************** target if target Binutils supported.
*** 2732,2738 ****
  
  @item --enable-s390-excess-float-precision
  @itemx --disable-s390-excess-float-precision
! On s390(x) targets, enable treatment of float expressions with double precision
  when in standards-compliant mode (e.g., when @code{--std=c99} or
  @code{-fexcess-precision=standard} are given).
  
--- 2732,2738 ----
  
  @item --enable-s390-excess-float-precision
  @itemx --disable-s390-excess-float-precision
! On s390x targets, enable treatment of float expressions with double precision
  when in standards-compliant mode (e.g., when @code{--std=c99} or
  @code{-fexcess-precision=standard} are given).
  
diff -Nrcpad gcc-17-20260705/gcc/doc/invoke.texi gcc-17-20260712/gcc/doc/invoke.texi
*** gcc-17-20260705/gcc/doc/invoke.texi	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/doc/invoke.texi	Sun Jul 12 22:32:08 2026
*************** Objective-C and Objective-C++ Dialects}.
*** 323,329 ****
  @xref{OpenMP and OpenACC Options,,Options Controlling OpenMP and OpenACC}.
  @gccoptlist{-foffload=@var{arg}  -foffload-options=@var{arg}
  -fopenacc  -fopenacc-dim=@var{geom}
! -fopenmp  -fopenmp-simd  -fopenmp-target-simd-clone@r{[}=@var{device-type}@r{]}}
  
  @item Diagnostic Message Formatting Options
  @xref{Diagnostic Message Formatting Options,,Options to Control Diagnostic Messages Formatting}.
--- 323,330 ----
  @xref{OpenMP and OpenACC Options,,Options Controlling OpenMP and OpenACC}.
  @gccoptlist{-foffload=@var{arg}  -foffload-options=@var{arg}
  -fopenacc  -fopenacc-dim=@var{geom}
! -fopenmp  -fopenmp-simd  -fopenmp-ompt  -fopenmp-ompt-detailed
! -fopenmp-target-simd-clone@r{[}=@var{device-type}@r{]}}
  
  @item Diagnostic Message Formatting Options
  @xref{Diagnostic Message Formatting Options,,Options to Control Diagnostic Messages Formatting}.
*************** Objective-C and Objective-C++ Dialects}.
*** 676,682 ****
  -fsemantic-interposition  -fshrink-wrap  -fshrink-wrap-separate
  -fsignaling-nans
  -fsingle-precision-constant  -fsplit-ivs-in-unroller  -fsplit-loops
! -fspeculatively-call-stored-functions  -fsplit-paths
  -fsplit-wide-types  -fsplit-wide-types-early  -fssa-backprop  -fssa-phiopt
  -fstdarg-opt  -fstore-merging  -fstrict-aliasing -fipa-strict-aliasing
  -fthread-jumps  -ftracer  -ftree-bit-ccp
--- 677,683 ----
  -fsemantic-interposition  -fshrink-wrap  -fshrink-wrap-separate
  -fsignaling-nans
  -fsingle-precision-constant  -fsplit-ivs-in-unroller  -fsplit-loops
! -fspeculatively-call-stored-functions
  -fsplit-wide-types  -fsplit-wide-types-early  -fssa-backprop  -fssa-phiopt
  -fstdarg-opt  -fstore-merging  -fstrict-aliasing -fipa-strict-aliasing
  -fthread-jumps  -ftracer  -ftree-bit-ccp
*************** See RS/6000 and PowerPC Options.
*** 1349,1354 ****
--- 1350,1356 ----
  -mno-inline-atomics  -mno-inline-strlen
  -mno-inline-strcmp  -mno-inline-strncmp
  -mstringop-strategy=@var{strategy}
+ -munroll-only-small-loops  -mno-unroll-only-small-loops
  -mtls-dialect=desc  -mtls-dialect=trad
  -mrvv-vector-bits=@var{value}  -mrvv-max-lmul=@var{value}
  -madjust-lmul-cost  -mmax-vectorization  -mno-autovec-segment}
*************** See RS/6000 and PowerPC Options.
*** 1405,1411 ****
  -mgnu-attribute
  -mstack-protector-guard=@var{guard}  -mstack-protector-guard-reg=@var{reg}
  -mstack-protector-guard-offset=@var{offset}  -mprefixed
! -mpcrel  -mmma  -mrop-protect  -mprivileged
  -mno-splat-word-constant  -mno-splat-float-constant
  -mno-ieee128-constant  -mno-warn-altivec-long}
  
--- 1407,1413 ----
  -mgnu-attribute
  -mstack-protector-guard=@var{guard}  -mstack-protector-guard-reg=@var{reg}
  -mstack-protector-guard-offset=@var{offset}  -mprefixed
! -mpcrel  -mmma  -mdense-math  -mrop-protect  -mprivileged
  -mno-splat-word-constant  -mno-splat-float-constant
  -mno-ieee128-constant  -mno-warn-altivec-long}
  
*************** See RS/6000 and PowerPC Options.
*** 1426,1432 ****
  -mlong-double-64  -mlong-double-128
  -mbackchain  -mpacked-stack
  -msmall-exec  -mmvcle
! -m64  -m31  -mdebug  -mesa  -mzarch
  -mhtm  -mvx  -mzvector
  -mtpf-trace  -mtpf-trace-skip  -mmain
  -mfused-madd  -mno-fused-madd
--- 1428,1434 ----
  -mlong-double-64  -mlong-double-128
  -mbackchain  -mpacked-stack
  -msmall-exec  -mmvcle
! -m64  -mdebug  -mzarch
  -mhtm  -mvx  -mzvector
  -mtpf-trace  -mtpf-trace-skip  -mmain
  -mfused-madd  -mno-fused-madd
*************** Fortran.  In fixed source form Fortran,
*** 5600,5605 ****
--- 5602,5625 ----
  @option{-fopenmp} is additionally specified, the @code{loop} region binds
  to the current task region, independent of the specified @code{bind} clause.
  
+ @opindex fopenmp-ompt
+ @opindex fno-openmp-ompt
+ @cindex OpenMP OMPT
+ @item -fopenmp-ompt
+ Emit additional calls into libgomp, enabling OMPT callbacks around some OpenMP
+ worksharing constructs (namely statically scheduled @code{for} and
+ @code{distribute}, @code{single}, @code{masked} and @code{master}), so that an
+ OMPT tool can observe their start and end.  Requires @option{-fopenmp}.
+ 
+ @opindex fopenmp-ompt-detailed
+ @opindex fno-openmp-ompt-detailed
+ @cindex OpenMP OMPT
+ @item -fopenmp-ompt-detailed
+ Like @option{-fopenmp-ompt}, and additionally emit calls into libgomp, enabling
+ OMPT dispatch callbacks that get called at the beginning of each workshare chunk
+ for statically scheduled @code{for} and @code{distribute}.  Requires
+ @option{-fopenmp}.
+ 
  @opindex fopenmp-target-simd-clone
  @opindex fno-openmp-target-simd-clone
  @cindex OpenMP target SIMD clone
*************** by @option{-O2} and also turns on the fo
*** 13626,13632 ****
  -fpeel-loops
  -fpredictive-commoning
  -fsplit-loops
- -fsplit-paths
  -ftree-loop-distribution
  -ftree-partial-pre
  -funswitch-loops
--- 13646,13651 ----
*************** enabled.
*** 15469,15477 ****
  @opindex fsplit-paths
  @opindex fno-split-paths
  @item -fsplit-paths
! Split paths leading to loop backedges.  This can improve dead code
! elimination and common subexpression elimination.  This is enabled by
! default at @option{-O3} and above.
  
  @opindex fsplit-ivs-in-unroller
  @opindex fno-split-ivs-in-unroller
--- 15488,15495 ----
  @opindex fsplit-paths
  @opindex fno-split-paths
  @item -fsplit-paths
! This option is deprecated and does nothing.  It is accepted only for
! backward compatibility.
  
  @opindex fsplit-ivs-in-unroller
  @opindex fno-split-ivs-in-unroller
*************** performance of the code.  Permissible va
*** 21664,21670 ****
  @samp{neoverse-512tvb}, @samp{neoverse-e1}, @samp{neoverse-n1},
  @samp{neoverse-n2}, @samp{neoverse-v1}, @samp{neoverse-v2}, @samp{grace},
  @samp{neoverse-v3}, @samp{neoverse-v3ae}, @samp{armagicpu}, @samp{neoverse-n3},
! @samp{olympus}, @samp{cortex-a725}, @samp{cortex-x925},
  @samp{qdf24xx}, @samp{saphira}, @samp{phecda}, @samp{xgene1}, @samp{vulcan},
  @samp{octeontx}, @samp{octeontx81},  @samp{octeontx83},
  @samp{octeontx2}, @samp{octeontx2t98}, @samp{octeontx2t96}
--- 21682,21688 ----
  @samp{neoverse-512tvb}, @samp{neoverse-e1}, @samp{neoverse-n1},
  @samp{neoverse-n2}, @samp{neoverse-v1}, @samp{neoverse-v2}, @samp{grace},
  @samp{neoverse-v3}, @samp{neoverse-v3ae}, @samp{armagicpu}, @samp{neoverse-n3},
! @samp{olympus}, @samp{rigel}, @samp{cortex-a725}, @samp{cortex-x925},
  @samp{qdf24xx}, @samp{saphira}, @samp{phecda}, @samp{xgene1}, @samp{vulcan},
  @samp{octeontx}, @samp{octeontx81},  @samp{octeontx83},
  @samp{octeontx2}, @samp{octeontx2t98}, @samp{octeontx2t96}
*************** Enable the TIndex Exception-like Vector
*** 22084,22091 ****
  Enable the TLBI Domains Extension.
  @item gcie
  Enable the GICv5 (Generic Interrupt Controller) CPU Interface Extension.
- @item mpamv2
- Enable MPAMv2 system registers.
  @item lscp
  Enable the load acquire and store release pair extension.
  @item mops-go
--- 22102,22107 ----
*************** of TLS variables.
*** 31567,31572 ****
--- 31583,31602 ----
  Use traditional TLS as the thread-local storage mechanism for dynamic accesses
  of TLS variables.  This is the default.
  
+ @opindex munroll-only-small-loops
+ @opindex mno-unroll-only-small-loops
+ @item -munroll-only-small-loops
+ @itemx -mno-unroll-only-small-loops
+ Controls conservative small loop unrolling.  It is enabled by default at
+ @option{-O2} and above.  When enabled, only loops whose RTL instruction
+ count does not exceed a tune-specific threshold are unrolled, and the
+ unroll factor is capped by a tune-specific parameter.  This gives better
+ utilization of the instruction decoding pipeline without enlarging bigger
+ loops.  You can disable it with @option{-mno-unroll-only-small-loops}; it
+ is also turned off when @option{-funroll-loops} or
+ @option{-funroll-all-loops} is explicitly enabled, so that an explicit
+ unrolling request applies to loops of any size.
+ 
  @opindex mrvv-vector-bits
  @item -mrvv-vector-bits=@var{value}
  Specify how the number of bits for an RVV vector register, as taken from
*************** following options:
*** 31762,31768 ****
  -mcrypto  -mhtm  -mpower8-fusion
  -mquad-memory  -mquad-memory-atomic  -mfloat128
  -mfloat128-hardware  -mprefixed  -mpcrel  -mmma
! -mrop-protect}
  
  The particular options set for any particular CPU varies between
  compiler versions, depending on what setting seems to produce optimal
--- 31792,31798 ----
  -mcrypto  -mhtm  -mpower8-fusion
  -mquad-memory  -mquad-memory-atomic  -mfloat128
  -mfloat128-hardware  -mprefixed  -mpcrel  -mmma
! -mdense-math -mrop-protect}
  
  The particular options set for any particular CPU varies between
  compiler versions, depending on what setting seems to produce optimal
*************** Generate (do not generate) the MMA instr
*** 32859,32864 ****
--- 32889,32902 ----
  option requires that the option @option{-mcpu=power10} (or later)
  is enabled.
  
+ @opindex mdense-math
+ @opindex mno-dense-math
+ @item -mdense-math
+ @itemx -mno-dense-math
+ Generate (do not generate) Dense Math Facility (DMF) instructions.
+ The @option{-mdense-math} option requires that the option
+ @option{-mcpu=future} (or later) is enabled.
+ 
  @opindex mrop-protect
  @opindex mno-rop-protect
  @item -mrop-protect
*************** exceed 64k.  The default is to use the @
*** 33221,33249 ****
  which does not have this limitation.
  
  @opindex m64
- @opindex m31
  @item -m64
! @itemx -m31
! When @option{-m31} is specified, generate code compliant to the
! GNU/Linux for S/390 ABI@.  When @option{-m64} is specified, generate
! code compliant to the GNU/Linux for zSeries ABI@.  This allows GCC in
! particular to generate 64-bit instructions.  For the @samp{s390}
! targets, the default is @option{-m31}, while the @samp{s390x}
! targets default to @option{-m64}.  Note, @option{-m31} is deprecated and
! support will be removed.
  
  @opindex mzarch
- @opindex mesa
  @item -mzarch
! @itemx -mesa
! When @option{-mzarch} is specified, generate code using the
! instructions available on z/Architecture.
! When @option{-mesa} is specified, generate code using the
! instructions available on ESA/390.  Note that @option{-mesa} is
! not possible with @option{-m64}.
! When generating code compliant to the GNU/Linux for S/390 ABI,
! the default is @option{-mesa}.  When generating code compliant
! to the GNU/Linux for zSeries ABI, the default is @option{-mzarch}.
  
  @opindex mhtm
  @opindex mno-htm
--- 33259,33277 ----
  which does not have this limitation.
  
  @opindex m64
  @item -m64
! After the removal of @option{-m31}, option @option{-m64} has no counterpart
! anymore.  For the sake of backwards compatibility, the option is still accepted
! but doesn't have any effect anymore.  Therefore, generated code comprises
! 64-bit instructions and follows the GNU/Linux for zSeries ABI by default.
! 
  
  @opindex mzarch
  @item -mzarch
! After the removal of @option{-mesa}, option @option{-mzarch} has no counterpart
! anymore.  For the sake of backwards compatibility, the option is still accepted
! but doesn't have any effect anymore.  Therefore, generated code comprises
! instructions available on z/Architecture by default.
  
  @opindex mhtm
  @opindex mno-htm
diff -Nrcpad gcc-17-20260705/gcc/doc/params.texi gcc-17-20260712/gcc/doc/params.texi
*** gcc-17-20260705/gcc/doc/params.texi	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/doc/params.texi	Sun Jul 12 22:32:08 2026
*************** reassociation considers the benefit of p
*** 1704,1709 ****
--- 1704,1715 ----
  part and addition part, assuming FMUL and FMA use the same units that can
  also do FADD.
  
+ @paindex widening-mul-defer-fma
+ @item widening-mul-defer-fma
+ When nonzero, the widening-multiply pass defers forming an FMA whose result
+ feeds a loop-header PHI, leaving a separate multiply and add.  Set to zero to
+ contract such loop-carried reductions into an FMA instead.
+ 
  @paindex sms-loop-average-count-threshold
  @item sms-loop-average-count-threshold
  A threshold on the average loop count considered by the swing modulo scheduler.
diff -Nrcpad gcc-17-20260705/gcc/doc/tm.texi gcc-17-20260712/gcc/doc/tm.texi
*** gcc-17-20260705/gcc/doc/tm.texi	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/doc/tm.texi	Sun Jul 12 22:32:08 2026
*************** A C expression for the size in bits of t
*** 1627,1640 ****
  target machine.  If you don't define this, the default is one word.
  @end defmac
  
- @defmac ADA_LONG_TYPE_SIZE
- On some machines, the size used for the Ada equivalent of the type
- @code{long} by a native Ada compiler differs from that used by C@.  In
- that situation, define this macro to be a C expression to be used for
- the size of that type.  If you don't define this, the default is the
- value of @code{LONG_TYPE_SIZE}.
- @end defmac
- 
  @defmac LONG_LONG_TYPE_SIZE
  A C expression for the size in bits of the type @code{long long} on the
  target machine.  If you don't define this, the default is two
--- 1627,1632 ----
*************** uses this macro should also arrange to u
*** 1711,1726 ****
  the libgcc @file{config.host}.
  @end defmac
  
- @defmac WIDEST_HARDWARE_FP_SIZE
- A C expression for the size in bits of the widest floating-point format
- supported by the hardware.  If you define this macro, you must specify a
- value less than or equal to mode precision of the mode used for C type
- @code{long double} (from hook @code{targetm.c.mode_for_floating_type}
- with argument @code{TI_LONG_DOUBLE_TYPE}).  If you do not define this
- macro, mode precision of the mode used for C type @code{long double} is
- the default.
- @end defmac
- 
  @defmac DEFAULT_SIGNED_CHAR
  An expression whose value is 1 or 0, according to whether the type
  @code{char} should be signed or unsigned by default.  The user can
--- 1703,1708 ----
diff -Nrcpad gcc-17-20260705/gcc/doc/tm.texi.in gcc-17-20260712/gcc/doc/tm.texi.in
*** gcc-17-20260705/gcc/doc/tm.texi.in	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/doc/tm.texi.in	Sun Jul 12 22:32:08 2026
*************** A C expression for the size in bits of t
*** 1362,1375 ****
  target machine.  If you don't define this, the default is one word.
  @end defmac
  
- @defmac ADA_LONG_TYPE_SIZE
- On some machines, the size used for the Ada equivalent of the type
- @code{long} by a native Ada compiler differs from that used by C@.  In
- that situation, define this macro to be a C expression to be used for
- the size of that type.  If you don't define this, the default is the
- value of @code{LONG_TYPE_SIZE}.
- @end defmac
- 
  @defmac LONG_LONG_TYPE_SIZE
  A C expression for the size in bits of the type @code{long long} on the
  target machine.  If you don't define this, the default is two
--- 1362,1367 ----
*************** uses this macro should also arrange to u
*** 1446,1461 ****
  the libgcc @file{config.host}.
  @end defmac
  
- @defmac WIDEST_HARDWARE_FP_SIZE
- A C expression for the size in bits of the widest floating-point format
- supported by the hardware.  If you define this macro, you must specify a
- value less than or equal to mode precision of the mode used for C type
- @code{long double} (from hook @code{targetm.c.mode_for_floating_type}
- with argument @code{TI_LONG_DOUBLE_TYPE}).  If you do not define this
- macro, mode precision of the mode used for C type @code{long double} is
- the default.
- @end defmac
- 
  @defmac DEFAULT_SIGNED_CHAR
  An expression whose value is 1 or 0, according to whether the type
  @code{char} should be signed or unsigned by default.  The user can
--- 1438,1443 ----
diff -Nrcpad gcc-17-20260705/gcc/dse.cc gcc-17-20260712/gcc/dse.cc
*** gcc-17-20260705/gcc/dse.cc	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/dse.cc	Sun Jul 12 22:32:08 2026
*************** canon_address (rtx mem,
*** 1220,1226 ****
    if (dump_file && (dump_flags & TDF_DETAILS))
      {
        fprintf (dump_file, "  varying cselib base=%u:%u offset = ",
! 	       (*base)->uid, (*base)->hash);
        print_dec (*offset, dump_file);
        fprintf (dump_file, "\n");
      }
--- 1220,1226 ----
    if (dump_file && (dump_flags & TDF_DETAILS))
      {
        fprintf (dump_file, "  varying cselib base=%u:%u offset = ",
! 	       CSELIB_VAL_UID ((*base)->val_rtx), (*base)->hash);
        print_dec (*offset, dump_file);
        fprintf (dump_file, "\n");
      }
diff -Nrcpad gcc-17-20260705/gcc/expmed.cc gcc-17-20260712/gcc/expmed.cc
*** gcc-17-20260705/gcc/expmed.cc	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/expmed.cc	Sun Jul 12 22:32:08 2026
*************** expand_sdiv_pow2 (scalar_int_mode mode,
*** 4294,4299 ****
--- 4294,4362 ----
     (x mod 12) == (((x & 1023) + ((x >> 8) & ~3)) * 0x15555558 >> 2 * 3) >> 28
     */
  
+ /* Helper for expand_divmod's unsigned constant division.  For OP0 in
+    INT_MODE divided by a constant needing a (SIZE+1)-bit multiplier ML
+    with right shift POST_SHIFT (the mh != 0 case), try to obtain
+    the quotient from the high part of a single multiply in a mode twice
+    as wide as INT_MODE.  Return the quotient in INT_MODE, having emitted
+    the insns, or NULL_RTX when the transformation is unavailable or not
+    cheaper than the classic sub/shift/add sequence.  EXTRA_COST is the
+    cost of that sequence's follow-up ops, MAX_COST bounds the multiply
+    and SPEED selects the cost model.
+ 
+    The magic constant occupies at most 2*SIZE bits and so must fit in a
+    HOST_WIDE_INT (always 64 bits today; checked below).  A wider INT_MODE
+    such as DImode -- which would need a 128-bit magic and a single-word
+    high-part multiply in a 2x-wide mode that common targets lack -- is
+    therefore excluded.  */
+ 
+ static rtx
+ expand_wide_mulh_udiv (scalar_int_mode int_mode, rtx op0,
+ 		       unsigned HOST_WIDE_INT ml, int size, int post_shift,
+ 		       int extra_cost, int max_cost, bool speed)
+ {
+   scalar_int_mode wide_mode;
+ 
+   /* We need POST_SHIFT >= 1, a wider integer mode that still fits in a
+      word, and the pre-shifted magic constant to fit in a HOST_WIDE_INT.  */
+   if (post_shift < 1
+       || !GET_MODE_2XWIDER_MODE (int_mode).exists (&wide_mode)
+       || GET_MODE_BITSIZE (wide_mode) > BITS_PER_WORD
+       || GET_MODE_BITSIZE (wide_mode) > HOST_BITS_PER_WIDE_INT)
+     return NULL_RTX;
+ 
+   /* The caller obtained ML and POST_SHIFT from choose_multiplier, which
+      guarantees POST_SHIFT <= ceil (log2 (d)) <= SIZE for a SIZE-bit
+      divisor d, so the shift count below is non-negative.  */
+   gcc_checking_assert (post_shift <= size);
+ 
+   /* Pre-shift the (SIZE+1)-bit magic constant (2^SIZE + ML) by
+      (SIZE - POST_SHIFT) so that the quotient ends up in the high part
+      of the widened product.  Since ML < 2^SIZE and POST_SHIFT >= 1, the
+      result is below 2^(2*SIZE) and thus fits in both WIDE_MODE and an
+      unsigned HOST_WIDE_INT (2*SIZE <= HOST_BITS_PER_WIDE_INT was
+      checked above).  */
+   unsigned HOST_WIDE_INT magic
+     = ((HOST_WIDE_INT_1U << size) + ml) << (size - post_shift);
+ 
+   start_sequence ();
+   rtx x_wide = convert_to_mode (wide_mode, op0, 1);
+   rtx hi = expmed_mult_highpart (wide_mode, x_wide,
+ 				 gen_int_mode (magic, wide_mode),
+ 				 NULL_RTX, 1, max_cost);
+   rtx quotient = hi ? convert_to_mode (int_mode, hi, 1) : NULL_RTX;
+   rtx_insn *insns = end_sequence ();
+ 
+   /* Use the widened multiply only when it is no more expensive than
+      the classic sub/shift/add sequence.  */
+   unsigned classic_cost = mul_highpart_cost (speed, int_mode) + extra_cost;
+   if (quotient == NULL_RTX || seq_cost (insns, speed) > classic_cost)
+     return NULL_RTX;
+ 
+   emit_insn (insns);
+   return quotient;
+ }
+ 
  rtx
  expand_divmod (int rem_flag, enum tree_code code, machine_mode mode,
  	       rtx op0, rtx op1, rtx target, int unsignedp,
*************** expand_divmod (int rem_flag, enum tree_c
*** 4568,4589 ****
  			      = (shift_cost (speed, int_mode, post_shift - 1)
  				 + shift_cost (speed, int_mode, 1)
  				 + 2 * add_cost (speed, int_mode));
! 			    t1 = expmed_mult_highpart
! 			      (int_mode, op0, gen_int_mode (ml, int_mode),
! 			       NULL_RTX, 1, max_cost - extra_cost);
! 			    if (t1 == 0)
! 			      goto fail1;
! 			    t2 = force_operand (gen_rtx_MINUS (int_mode,
! 							       op0, t1),
! 						NULL_RTX);
! 			    t3 = expand_shift (RSHIFT_EXPR, int_mode,
! 					       t2, 1, NULL_RTX, 1);
! 			    t4 = force_operand (gen_rtx_PLUS (int_mode,
! 							      t1, t3),
! 						NULL_RTX);
! 			    quotient = expand_shift
! 			      (RSHIFT_EXPR, int_mode, t4,
! 			       post_shift - 1, tquotient, 1);
  			  }
  			else
  			  {
--- 4631,4662 ----
  			      = (shift_cost (speed, int_mode, post_shift - 1)
  				 + shift_cost (speed, int_mode, 1)
  				 + 2 * add_cost (speed, int_mode));
! 
! 			    /* Try a single widened multiply first; use it when
! 			       it is no more expensive.  */
! 			    quotient
! 			      = expand_wide_mulh_udiv (int_mode, op0, ml, size,
! 						       post_shift, extra_cost,
! 						       max_cost, speed);
! 			    if (quotient == NULL_RTX)
! 			      {
! 				t1 = expmed_mult_highpart
! 				  (int_mode, op0, gen_int_mode (ml, int_mode),
! 				   NULL_RTX, 1, max_cost - extra_cost);
! 				if (t1 == 0)
! 				  goto fail1;
! 				t2 = force_operand (gen_rtx_MINUS (int_mode,
! 								   op0, t1),
! 						    NULL_RTX);
! 				t3 = expand_shift (RSHIFT_EXPR, int_mode,
! 						   t2, 1, NULL_RTX, 1);
! 				t4 = force_operand (gen_rtx_PLUS (int_mode,
! 								  t1, t3),
! 						    NULL_RTX);
! 				quotient = expand_shift
! 				  (RSHIFT_EXPR, int_mode, t4,
! 				   post_shift - 1, tquotient, 1);
! 			      }
  			  }
  			else
  			  {
diff -Nrcpad gcc-17-20260705/gcc/expr.cc gcc-17-20260712/gcc/expr.cc
*** gcc-17-20260705/gcc/expr.cc	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/expr.cc	Sun Jul 12 22:32:08 2026
*************** emit_group_load_1 (rtx *tmps, rtx dst, r
*** 3062,3067 ****
--- 3062,3089 ----
  	       && known_eq (bytelen, GET_MODE_SIZE (mode)))
  	/* Let emit_move_complex do the bulk of the work.  */
  	tmps[i] = src;
+       else if (SCALAR_INT_MODE_P (mode)
+ 	       && COMPLEX_MODE_P (GET_MODE (src))
+ 	       && known_eq (GET_MODE_SIZE (mode),
+ 			    GET_MODE_SIZE (GET_MODE (src)))
+ 	       && known_eq (bytelen, GET_MODE_SIZE (mode)))
+ 	{
+ 	  /* When passing a complex value in an integer mode of the same
+ 	     size, explicitly construct (highpart<<isize)+lowpart to
+ 	     avoid spilling to memory before reload.  */
+ 	  rtx tmp = read_complex_part (src, !BYTES_BIG_ENDIAN);
+ 	  scalar_int_mode imode = int_mode_for_mode (GET_MODE (tmp)).require();
+ 	  tmp = gen_lowpart (imode, tmp);
+ 	  tmp = simplify_gen_unary (ZERO_EXTEND, mode, tmp, imode);
+ 	  rtx result = force_reg (mode, tmp);
+ 	  result = expand_shift (LSHIFT_EXPR, mode, result,
+ 				 GET_MODE_BITSIZE (imode), NULL_RTX, 1);
+ 	  tmp = read_complex_part (src, BYTES_BIG_ENDIAN);
+ 	  tmp = gen_lowpart (imode, tmp);
+ 	  tmp = simplify_gen_unary (ZERO_EXTEND, mode, tmp, imode);
+ 	  result = simplify_gen_binary (PLUS, mode, result, tmp);
+ 	  tmps[i] = force_reg (mode, result);
+ 	}
        else if (GET_CODE (src) == CONCAT)
  	{
  	  poly_int64 slen = GET_MODE_SIZE (GET_MODE (src));
*************** expand_expr_real_gassign (gassign *g, rt
*** 11382,11387 ****
--- 11404,11448 ----
    return r;
  }
  
+ /* A subroutine of expand_expr_real_1.  Attempt to VIEW_CONVERT_EXPR
+    the complex expression OP0 to the vector mode MODE.  Store the
+    result at TARGET if possible (if TARGET is nonzero).  Returns
+    NULL_RTX on failure.  */
+ static rtx
+ try_expand_complex_as_vector (machine_mode mode, rtx op0, rtx target)
+ {
+   if (COMPLEX_MODE_P (GET_MODE (op0))
+       && VECTOR_MODE_P (mode)
+       && known_eq (GET_MODE_NUNITS (mode), 2)
+       && GET_MODE_INNER (mode) == GET_MODE_INNER (GET_MODE (op0)))
+     {
+       enum insn_code icode = convert_optab_handler (vec_init_optab, mode,
+ 						    GET_MODE_INNER (mode));
+       if (icode != CODE_FOR_nothing)
+ 	{
+ 	  if (!target || !REG_P (target))
+ 	    target = gen_reg_rtx (mode);
+ 	  rtx rpart = read_complex_part (op0, false);
+ 	  rtx ipart = read_complex_part (op0, true);
+ 	  if (!REG_P (rpart) && !CONSTANT_P (rpart))
+ 	    rpart = force_reg (GET_MODE_INNER (mode), rpart);
+ 	  if (!REG_P (ipart) && !CONSTANT_P (ipart))
+ 	    ipart = force_reg (GET_MODE_INNER (mode), ipart);
+ 	  rtvec vec = rtvec_alloc (2);
+ 	  RTVEC_ELT (vec, 0) = rpart;
+ 	  RTVEC_ELT (vec, 1) = ipart;
+ 	  rtx par = gen_rtx_PARALLEL (mode, vec);
+ 	  rtx_insn *insn = GEN_FCN (icode) (target, par);
+ 	  if (insn)
+ 	    {
+ 	      emit_insn (insn);
+ 	      return target;
+ 	    }
+ 	}
+     }
+   return NULL_RTX;
+ }
+ 
  rtx
  expand_expr_real_1 (tree exp, rtx target, machine_mode tmode,
  		    enum expand_modifier modifier, rtx *alt_rtl,
*************** expand_expr_real_1 (tree exp, rtx target
*** 12798,12803 ****
--- 12859,12870 ----
  	return extract_bit_field (op0, TYPE_PRECISION (type), 0,
  				  TYPE_UNSIGNED (type), NULL_RTX,
  				  mode, mode, false, NULL);
+       /* If source is a complex number and destination is a
+ 	 two-component vector with same inner type, try to use
+ 	 vector initialization.  */
+       else if ((temp = try_expand_complex_as_vector (mode, op0, target))
+ 	       != NULL_RTX)
+ 	return temp;
        /* As a last resort, spill op0 to memory, and reload it in a
  	 different mode.  */
        else if (!MEM_P (op0))
diff -Nrcpad gcc-17-20260705/gcc/fold-const.cc gcc-17-20260712/gcc/fold-const.cc
*** gcc-17-20260705/gcc/fold-const.cc	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/fold-const.cc	Sun Jul 12 22:32:08 2026
*************** fold_real_zero_addition_p (const_tree ty
*** 7020,7025 ****
--- 7020,7111 ----
    return negate || (arg && !tree_expr_maybe_real_minus_zero_p (arg));
  }
  
+ /* Subroutine of match.pd that determines if it is safe to optimize
+    a floating point comparison of an integer value, known to be between
+    LO and HI, using comparison operator CMP, against the real constant
+    R in floating point type FMT, as the same integer comparison against
+    the integer constant I, with sign ISIGN.
+ 
+    For example, with IEEE-754, (float)x == 2.0f may replaced with x == 2
+    because the floating point representations of the neighboring integers
+    (float)1 and (float)3 are distinct from 2.0f, having values 1.0f and
+    3.0f respectively.  On the other hand (float)x == 16777220.0f can't
+    be replaced by x == 16777220 as (float)16777221 is also 1677220.0f
+    due to truncation/rounding.
+ */
+ bool
+ fold_cmp_float_cst_p (wide_int lo, wide_int hi, enum tree_code cmp,
+ 		      const REAL_VALUE_TYPE *r, format_helper fmt,
+ 		      wide_int i, signop isign)
+ {
+   REAL_VALUE_TYPE raw;
+   REAL_VALUE_TYPE rnd;
+   bool check_im1 = true;
+   bool check_ip1 = true;
+ 
+   switch (cmp)
+     {
+     case EQ_EXPR:
+     case NE_EXPR:
+       /* Check both i-1 and i+1.  */
+       break;
+ 
+     case LT_EXPR:
+     case GE_EXPR:
+       /* Only check i-1.  */
+       check_ip1 = false;
+       break;
+ 
+     case LE_EXPR:
+     case GT_EXPR:
+       /* Only check i+1.  */
+       check_im1 = false;
+       break;
+ 
+     default:
+       return false;
+     }
+ 
+     if (flag_rounding_math && i != 0)
+       {
+ 	real_from_integer (&raw, VOIDmode, i, isign);
+ 	if (!real_identical (r, &raw))
+ 	  return false;
+       }
+ 
+     if (check_im1 && wi::gt_p (i, lo, isign))
+       {
+ 	if (flag_rounding_math)
+ 	  {
+ 	    real_from_integer (&raw, VOIDmode, i - 1, isign);
+ 	    real_convert (&rnd, fmt, &raw);
+ 	    if (!real_identical (&raw, &rnd))
+ 	      return false;
+ 	  }
+ 	else
+ 	  real_from_integer (&rnd, fmt, i - 1, isign);
+ 	if (real_identical (r, &rnd))
+ 	  return false;
+       }
+ 
+     if (check_ip1 && wi::lt_p (i, hi, isign))
+       {
+ 	if (flag_rounding_math)
+ 	  {
+ 	    real_from_integer (&raw, VOIDmode, i + 1, isign);
+ 	    real_convert (&rnd, fmt, &raw);
+ 	    if (!real_identical (&raw, &rnd))
+ 	      return false;
+ 	  }
+ 	else
+ 	  real_from_integer (&rnd, fmt, i + 1, isign);
+ 	if (real_identical (r, &rnd))
+ 	  return false;
+       }
+ 
+   return true;
+ }
+ 
  /* Subroutine of match.pd that optimizes comparisons of a division by
     a nonzero integer constant against an integer constant, i.e.
     X/C1 op C2.
diff -Nrcpad gcc-17-20260705/gcc/fold-const.h gcc-17-20260712/gcc/fold-const.h
*** gcc-17-20260705/gcc/fold-const.h	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/fold-const.h	Sun Jul 12 22:32:08 2026
*************** extern bool integer_valued_real_p (tree,
*** 173,178 ****
--- 173,184 ----
  
  extern bool fold_real_zero_addition_p (const_tree, const_tree, const_tree,
  				       int);
+ extern bool fold_cmp_float_cst_p (wide_int lo, wide_int hi,
+ 				  enum tree_code cmp,
+ 				  const REAL_VALUE_TYPE *r,
+ 				  format_helper fmt,
+ 				  wide_int i, signop isign);
+ 
  extern tree combine_comparisons (location_t, enum tree_code, enum tree_code,
  				 enum tree_code, tree, tree, tree);
  extern tree_code combine_comparisons (enum tree_code, enum tree_code,
diff -Nrcpad gcc-17-20260705/gcc/fold-mem-offsets.cc gcc-17-20260712/gcc/fold-mem-offsets.cc
*** gcc-17-20260705/gcc/fold-mem-offsets.cc	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/fold-mem-offsets.cc	Sun Jul 12 22:32:08 2026
*************** You should have received a copy of the G
*** 17,40 ****
  along with GCC; see the file COPYING3.  If not see
  <http://www.gnu.org/licenses/>.  */
  
  #include "config.h"
  #include "system.h"
  #include "coretypes.h"
! #include "tm.h"
  #include "rtl.h"
  #include "tree.h"
  #include "expr.h"
- #include "backend.h"
  #include "regs.h"
- #include "target.h"
  #include "memmodel.h"
  #include "emit-rtl.h"
  #include "insn-config.h"
  #include "recog.h"
- #include "predict.h"
- #include "df.h"
- #include "tree-pass.h"
- #include "cfgrtl.h"
  #include "diagnostic-core.h"
  
  /* This pass tries to optimize memory offset calculations by moving constants
--- 17,47 ----
  along with GCC; see the file COPYING3.  If not see
  <http://www.gnu.org/licenses/>.  */
  
+ #define INCLUDE_ALGORITHM
+ #define INCLUDE_FUNCTIONAL
  #include "config.h"
  #include "system.h"
  #include "coretypes.h"
! #include "backend.h"
  #include "rtl.h"
+ #include "rtlanal.h"
+ #include "df.h"
+ #include "rtl-ssa.h"
+ 
+ #include "predict.h"
+ #include "cfgrtl.h"
+ #include "cfgcleanup.h"
+ #include "tree-pass.h"
+ #include "target.h"
+ 
+ #include "tm.h"
  #include "tree.h"
  #include "expr.h"
  #include "regs.h"
  #include "memmodel.h"
  #include "emit-rtl.h"
  #include "insn-config.h"
  #include "recog.h"
  #include "diagnostic-core.h"
  
  /* This pass tries to optimize memory offset calculations by moving constants
*************** along with GCC; see the file COPYING3.
*** 69,282 ****
        allocated on the stack can result in unwanted add instructions that
        cannot be eliminated easily.
  
!    This pass works on a basic block level and consists of 4 phases:
  
!     - Phase 1 (Analysis): Find "foldable" instructions.
!       Foldable instructions are those that we know how to propagate
!       a constant addition through (add, shift, move, ...) and only have other
!       foldable instructions for uses.  In that phase a DFS traversal on the
!       definition tree is performed and foldable instructions are marked on
!       a bitmap.  The add immediate instructions that are reachable in this
!       DFS are candidates for folding since all the intermediate calculations
!       affected by them are also foldable.
  
!     - Phase 2 (Validity): Traverse and calculate the offsets that would result
!       from folding the add immediate instructions.  Check whether the
!       calculated offsets result in a valid instruction for the target.
  
!     - Phase 3 (Commit offsets): Traverse again.  It is now known which folds
!       are valid so at this point change the offsets in the memory instructions.
  
!     - Phase 4 (Commit instruction deletions): Scan all instructions and delete
!       or simplify (reduce to move) all add immediate instructions that were
!       folded.
  
     This pass should run before hard register propagation because it creates
     register moves that we expect to be eliminated.  */
  
! namespace {
! 
! const pass_data pass_data_fold_mem =
! {
!   RTL_PASS, /* type */
!   "fold_mem_offsets", /* name */
!   OPTGROUP_NONE, /* optinfo_flags */
!   TV_FOLD_MEM_OFFSETS, /* tv_id */
!   0, /* properties_required */
!   0, /* properties_provided */
!   0, /* properties_destroyed */
!   0, /* todo_flags_start */
!   TODO_df_finish, /* todo_flags_finish */
! };
! 
! class pass_fold_mem_offsets : public rtl_opt_pass
! {
! public:
!   pass_fold_mem_offsets (gcc::context *ctxt)
!     : rtl_opt_pass (pass_data_fold_mem, ctxt)
!   {}
! 
!   /* opt_pass methods: */
!   virtual bool gate (function *)
!     {
!       return flag_fold_mem_offsets && optimize >= 2;
!     }
  
!   virtual unsigned int execute (function *);
! }; // class pass_fold_mem_offsets
  
  /* Class that holds in FOLD_INSNS the instructions that if folded the offset
     of a memory instruction would increase by ADDED_OFFSET.  */
  class fold_mem_info {
  public:
!   auto_bitmap fold_insns;
    HOST_WIDE_INT added_offset;
- };
  
! typedef hash_map<rtx_insn *, fold_mem_info *> fold_info_map;
  
! /* Tracks which instructions can be reached through instructions that can
!    propagate offsets for folding.  */
! static bitmap_head can_fold_insns;
  
! /* Marks instructions that are currently eligible for folding.  */
! static bitmap_head candidate_fold_insns;
  
! /* Tracks instructions that cannot be folded because it turned out that
!    folding will result in creating an invalid memory instruction.
!    An instruction can be in both CANDIDATE_FOLD_INSNS and CANNOT_FOLD_INSNS
!    at the same time, in which case it is not legal to fold.  */
! static bitmap_head cannot_fold_insns;
  
! /* The number of instructions that were simplified or eliminated.  */
! static int stats_fold_count;
  
! /* Get the single reaching definition of an instruction inside a BB.
!    The definition is desired for REG used in INSN.
!    Return the definition insn or NULL if there's no definition with
!    the desired criteria.  */
! static rtx_insn *
! get_single_def_in_bb (rtx_insn *insn, rtx reg)
  {
!   df_ref use;
!   struct df_link *ref_chain, *ref_link;
! 
!   FOR_EACH_INSN_USE (use, insn)
      {
!       if (GET_CODE (DF_REF_REG (use)) == SUBREG)
! 	return NULL;
!       if (REGNO (DF_REF_REG (use)) == REGNO (reg))
! 	break;
!     }
! 
!   if (!use)
!     return NULL;
  
!   ref_chain = DF_REF_CHAIN (use);
  
!   if (!ref_chain)
!     return NULL;
  
!   for (ref_link = ref_chain; ref_link; ref_link = ref_link->next)
      {
!       /* Problem getting some definition for this instruction.  */
!       if (ref_link->ref == NULL)
! 	return NULL;
!       if (DF_REF_INSN_INFO (ref_link->ref) == NULL)
! 	return NULL;
!       if (global_regs[REGNO (reg)]
! 	  && !set_of (reg, DF_REF_INSN (ref_link->ref)))
! 	return NULL;
      }
  
!   if (ref_chain->next)
!     return NULL;
  
!   rtx_insn *def = DF_REF_INSN (ref_chain->ref);
  
!   if (BLOCK_FOR_INSN (def) != BLOCK_FOR_INSN (insn))
!     return NULL;
  
!   if (DF_INSN_LUID (def) > DF_INSN_LUID (insn))
!     return NULL;
  
!   return def;
  }
  
! /* Get all uses of REG which is set in INSN.  Return the use list or NULL if a
!    use is missing / irregular.  If SUCCESS is not NULL then set it to false if
!    there are missing / irregular uses and true otherwise.  */
! static df_link *
! get_uses (rtx_insn *insn, rtx reg, bool *success)
  {
!   df_ref def;
! 
!   if (success)
!     *success = false;
  
!   FOR_EACH_INSN_DEF (def, insn)
!     if (REGNO (DF_REF_REG (def)) == REGNO (reg))
!       break;
  
!   if (!def)
!     return NULL;
  
!   df_link *ref_chain = DF_REF_CHAIN (def);
!   int insn_luid = DF_INSN_LUID (insn);
!   basic_block insn_bb = BLOCK_FOR_INSN (insn);
  
!   for (df_link *ref_link = ref_chain; ref_link; ref_link = ref_link->next)
!     {
!       /* Problem getting a use for this instruction.  */
!       if (ref_link->ref == NULL)
  	return NULL;
!       if (DF_REF_CLASS (ref_link->ref) != DF_REF_REGULAR)
  	return NULL;
  
!       rtx_insn *use = DF_REF_INSN (ref_link->ref);
!       if (DEBUG_INSN_P (use))
! 	continue;
  
!       /* We do not handle REG_EQUIV/REG_EQ notes for now.  */
!       if (DF_REF_FLAGS (ref_link->ref) & DF_REF_IN_NOTE)
  	return NULL;
!       if (BLOCK_FOR_INSN (use) != insn_bb)
  	return NULL;
!       /* Punt if use appears before def in the basic block.  See PR111601.  */
!       if (DF_INSN_LUID (use) < insn_luid)
  	return NULL;
-     }
  
!   if (success)
!     *success = true;
  
!   return ref_chain;
  }
  
! static HOST_WIDE_INT
! fold_offsets (rtx_insn *insn, rtx reg, bool analyze, bitmap foldable_insns);
  
! /*  Helper function for fold_offsets.
  
!     If DO_RECURSION is false and ANALYZE is true this function returns true iff
!     it understands the structure of INSN and knows how to propagate constants
!     through it.  In this case OFFSET_OUT and FOLDABLE_INSNS are unused.
  
!     If DO_RECURSION is true then it also calls fold_offsets for each recognized
!     part of INSN with the appropriate arguments.
  
!     If DO_RECURSION is true and ANALYZE is false then offset that would result
!     from folding is computed and is returned through the pointer OFFSET_OUT.
!     The instructions that can be folded are recorded in FOLDABLE_INSNS.  */
  static bool
! fold_offsets_1 (rtx_insn *insn, bool analyze, bool do_recursion,
! 		HOST_WIDE_INT *offset_out, bitmap foldable_insns)
  {
!   /* Doesn't make sense if both DO_RECURSION and ANALYZE are false.  */
!   gcc_checking_assert (do_recursion || analyze);
!   gcc_checking_assert (GET_CODE (PATTERN (insn)) == SET);
  
!   rtx src = SET_SRC (PATTERN (insn));
    HOST_WIDE_INT offset = 0;
  
    switch (GET_CODE (src))
--- 76,349 ----
        allocated on the stack can result in unwanted add instructions that
        cannot be eliminated easily.
  
!    The pass differentiates between the following instructions:
  
!    - fold-mem-offset root insn: loads/stores where constants will be folded into
!      the address offset.  E.g.:
!        (set (mem:DI (plus:DI (reg:DI sp) (const_int 40))) (reg:DI ra))
!    - fold-agnostic insns: instructions that may have an impact on the offset
!      calculation, but that don't require any fixup when folding.  E.g.:
!        (set (reg:DI a0) (ashift:DI (reg:DI s1) (const_int 1)))
!    - fold insns: instructions that provide constants, which will be forwarded
!      into the loads/stores as offset.  When folding, the constants will be
!      set to zero.  E.g.:
!        (set (reg:DI s0) (plus:DI (reg:DI sp) (const_int 8)))
  
!    The pass utilizes the RTL SSA framework to get the data dependencies
!    and operates in the following phases:
  
!    - Phase 1: Iterate over all instructions to identify fold-mem-offset roots.
!    - Phase 2: Walk back along the def-chain of fold-agnostic or fold insns.
! 	      When successful a new offset of the fold-mem-offset is calculated
! 	      and a vec of fold insns that need adjustments is created.
!    - Phase 3: Drop all fold-mem-offset roots that won't accept the updated
! 	      offset.
!    - Phase 4: Ensure that the defs of all fold insns are used only by
! 	      fold-mem-offsets insns (only needed if DEFs with multiple USEs
! 	      are handled, which is the default (see multi_use_mode below),
! 	      or forced on via -fexpensive-optimizations).
!    - Phase 5: Update all fold-mem-offset roots and adjust the fold insns.
  
!    When we walk the DEF-chain we have two choices of operations:
! 
!    - We only allow DEFs that have exactly one USE (in the instruction
!      that we come from).  This greatly simplifies the problem, but also misses
!      some cases.
!    - We allow DEFs to have multiple USEs.  E.g. a single ADDI may define a
!      value that is used by two LOADs.  In this case, we need to ensure that all
!      USE-chains remain correct after we apply our transformation.  We do this
!      by allowing only USEs that are part of any other fold-mem-offset chain in
!      phase 4 above.  This mode is enabled by default, but is disabled for
!      highly-connected CFGs (unless -fexpensive-optimizations forces it on).
  
     This pass should run before hard register propagation because it creates
     register moves that we expect to be eliminated.  */
  
! using namespace rtl_ssa;
  
! namespace {
  
  /* Class that holds in FOLD_INSNS the instructions that if folded the offset
     of a memory instruction would increase by ADDED_OFFSET.  */
  class fold_mem_info {
  public:
!   /* fold-mem-offset root details.  */
!   insn_info *insn;
!   rtx mem;
!   rtx reg;
!   HOST_WIDE_INT offset;
!   /* Resulting offset if def-chain gets folded into fold-mem-offset root.  */
    HOST_WIDE_INT added_offset;
  
!   /* Def-chain for offset.  */
!   auto_vec<insn_info *> fold_agnostic_insns;
!   auto_vec<insn_info *> fold_insns;
  
!   fold_mem_info (insn_info *insn, rtx mem, rtx reg, HOST_WIDE_INT off)
!     : insn (insn),
!       mem (mem),
!       reg (reg),
!       offset (off),
!       added_offset (0)
!   {
!   }
! };
  
! class change_info {
! public:
!   insn_change *change;
!   /* Index specifying the order in RTL SSA's instruction changes.  */
!   int change_index;
  
!   change_info (insn_change *change)
!     : change (change), change_index (0)
!   {
!   }
  
!   change_info (insn_change *change, int index)
!     : change (change), change_index (index)
!   {
!   }
! };
  
! /* Test if INSN is a memory load / store that can have an offset folded to it.
!    Return true when INSN is such an instruction and return through MEM,
!    REG and OFFSET the RTX that has a MEM code, the register that is
!    used as a base address and the offset accordingly.  */
! bool
! get_fold_mem_offset_root (insn_info *insn, rtx *mem, rtx *reg,
! 			  HOST_WIDE_INT *offset)
  {
!   rtx set = single_set (insn->rtl ());
!   if (set != NULL_RTX)
      {
!       rtx src = SET_SRC (set);
!       rtx dest = SET_DEST (set);
  
!       /* Don't fold when we have unspec / volatile.  */
!       if (GET_CODE (src) == UNSPEC
! 	  || GET_CODE (src) == UNSPEC_VOLATILE)
! 	return false;
  
!       if (MEM_P (src))
! 	*mem = src;
!       else if (MEM_P (dest))
! 	*mem = dest;
!       else if ((GET_CODE (src) == SIGN_EXTEND
! 		|| GET_CODE (src) == ZERO_EXTEND)
! 	       && MEM_P (XEXP (src, 0)))
! 	*mem = XEXP (src, 0);
!       else
! 	return false;
!     }
!   else
!     return false;
  
!   rtx mem_addr = XEXP (*mem, 0);
!   if (REG_P (mem_addr))
      {
!       *reg = mem_addr;
!       *offset = 0;
!     }
!   else if (GET_CODE (mem_addr) == PLUS
! 	   && REG_P (XEXP (mem_addr, 0))
! 	   && CONST_INT_P (XEXP (mem_addr, 1)))
!     {
!       *reg = XEXP (mem_addr, 0);
!       *offset = INTVAL (XEXP (mem_addr, 1));
      }
+   else
+     return false;
  
!   return true;
! }
  
! /* Return true if DEF's register is conditionally redefined by a cond_exec
!    before DEF is fully overwritten.  RTL-SSA models a cond_exec set as a plain
!    def, missing the old value preserved on the predicate-false path, so such a
!    redefinition hides a use of DEF and makes folding it unsafe.  */
  
! static bool
! def_shadowed_by_cond_exec_p (set_info *def)
! {
!   for (def_info *next = def->next_def (); next; next = next->next_def ())
!     {
!       insn_info *next_insn = next->insn ();
!       if (next_insn->is_artificial ())
! 	return false;
  
!       rtx_insn *next_rtl = next_insn->rtl ();
!       if (GET_CODE (PATTERN (next_rtl)) == COND_EXEC)
! 	return true;
  
!       /* A full set kills DEF; once dead it cannot reach a later cond_exec.
! 	 Keep scanning past defs that leave DEF partially live.  */
!       if (simple_regno_set (PATTERN (next_rtl), def->regno ()))
! 	return false;
!     }
!   return false;
  }
  
! /* Get the single reaching definition of an instruction inside a BB.
!    Return the definition or NULL if there's no definition with the desired
!    criteria.  If SINGLE_USE is set to true the DEF must have exactly one
!    USE resulting in a 1:1 DEF-USE relationship.  If set to false, then a
!    1:n DEF-USE relationship is accepted and the caller must take care to
!    ensure all USEs are safe folding.  */
! static set_info *
! get_single_def_in_bb (insn_info *insn, rtx reg, bool single_use)
  {
!   /* Get the use_info of the base register.  */
!   for (use_info *use : insn->uses ())
!     {
!       /* Other USEs can be ignored and multiple equal USEs are fine.  */
!       if (use->regno () != REGNO (reg))
! 	continue;
  
!       /* Don't handle subregs for now.  */
!       if (use->includes_subregs ())
! 	return NULL;
  
!       /* Get the DEF of the register.  Bail on a cond_exec redefinition of
! 	 REG, which hides uses of DEF from RTL-SSA.  */
!       set_info *def = use->def ();
!       if (!def || def_shadowed_by_cond_exec_p (def))
! 	return NULL;
  
!       /* Limit the amount of USEs of DEF to 1.  */
!       if (single_use && !def->single_nondebug_use ())
! 	return NULL;
  
!       /* Don't handle multiregs for now.  */
!       if (def->includes_multiregs ())
  	return NULL;
! 
!       /* Only consider uses whose definition comes from a real instruction
! 	 and has no notes attached.  */
!       insn_info *def_insn = def->insn ();
!       rtx_insn *def_rtl = def_insn->rtl ();
!       if (def_insn->is_artificial ()
! 	  || find_reg_note (def_rtl, REG_EQUIV, NULL_RTX)
! 	  || find_reg_note (def_rtl, REG_EQUAL, NULL_RTX))
  	return NULL;
  
!       /* No parallel expressions or clobbers.  */
!       if (def_insn->num_defs () != 1)
! 	return NULL;
  
!       if (!NONJUMP_INSN_P (def_rtl) || RTX_FRAME_RELATED_P (def_rtl))
  	return NULL;
! 
!       /* Check if the DEF is a SET of the expected form.  */
!       rtx def_set = simple_regno_set (PATTERN (def_rtl), def->regno ());
!       if (!def_set)
  	return NULL;
! 
!       /* Ensure DEF and USE are in the same BB.  */
!       if (def->bb () != insn->bb ())
  	return NULL;
  
!       return def;
!     }
  
!   return NULL;
  }
  
! static bool
! fold_offsets (insn_info *insn, rtx reg, HOST_WIDE_INT *offset_out,
! 	      fold_mem_info *info, bool single_use);
  
! /* Return the offset computed by fold_offsets, or 0 if the analysis fails.
!    Used in fold_offsets_1 where failure means no constant contribution.  */
! static HOST_WIDE_INT
! fold_offsets_value (insn_info *insn, rtx reg, fold_mem_info *info,
! 		    bool single_use)
! {
!   HOST_WIDE_INT offset;
!   fold_offsets (insn, reg, &offset, info, single_use);
!   return offset;
! }
  
! /* Helper function for fold_offsets () that analyses the given INSN.
  
!    For INSN with known pattern, we calculate the value of the propagated
!    constant and store that in OFFSET_OUT.  Foldable INSNs are added to
!    INFO->fold_insns and fold-agnostic INSNs are added to
!    INFO->fold_agnostic_insns.  It is possible that some INSNs are added to
!    both lists; when that happens the INSN is a fold insn.
  
!    Returns true when the analysis succeeds.  Otherwise false.  */
  static bool
! fold_offsets_1 (insn_info *insn, HOST_WIDE_INT *offset_out,
! 		fold_mem_info *info, bool single_use)
  {
!   bool fold_agnostic = true;
!   rtx_insn *insn_rtl = insn->rtl ();
!   rtx set = single_set (insn_rtl);
!   if (!set)
!     return false;
  
!   rtx src = SET_SRC (set);
    HOST_WIDE_INT offset = 0;
  
    switch (GET_CODE (src))
*************** fold_offsets_1 (rtx_insn *insn, bool ana
*** 288,322 ****
  	rtx arg2 = XEXP (src, 1);
  
  	if (REG_P (arg1))
! 	  {
! 	    if (do_recursion)
! 	      offset += fold_offsets (insn, arg1, analyze, foldable_insns);
! 	  }
  	else if (GET_CODE (arg1) == ASHIFT
  		 && REG_P (XEXP (arg1, 0))
  		 && CONST_INT_P (XEXP (arg1, 1)))
  	  {
  	    /* Handle R1 = (R2 << C) + ...  */
! 	    if (do_recursion)
! 	      {
! 		HOST_WIDE_INT scale
! 		  = (HOST_WIDE_INT_1U << INTVAL (XEXP (arg1, 1)));
! 		offset += scale * fold_offsets (insn, XEXP (arg1, 0), analyze,
! 						foldable_insns);
! 	      }
  	  }
  	else if (GET_CODE (arg1) == PLUS
  		 && REG_P (XEXP (arg1, 0))
  		 && REG_P (XEXP (arg1, 1)))
  	  {
  	    /* Handle R1 = (R2 + R3) + ...  */
! 	    if (do_recursion)
  	      {
! 		offset += fold_offsets (insn, XEXP (arg1, 0), analyze,
! 					foldable_insns);
! 		offset += fold_offsets (insn, XEXP (arg1, 1), analyze,
! 					foldable_insns);
  	      }
  	  }
  	else if (GET_CODE (arg1) == PLUS
  		 && GET_CODE (XEXP (arg1, 0)) == ASHIFT
--- 355,385 ----
  	rtx arg2 = XEXP (src, 1);
  
  	if (REG_P (arg1))
! 	  offset += fold_offsets_value (insn, arg1, info, single_use);
  	else if (GET_CODE (arg1) == ASHIFT
  		 && REG_P (XEXP (arg1, 0))
  		 && CONST_INT_P (XEXP (arg1, 1)))
  	  {
  	    /* Handle R1 = (R2 << C) + ...  */
! 	    rtx reg = XEXP (arg1, 0);
! 	    rtx shamt = XEXP (arg1, 1);
! 	    HOST_WIDE_INT scale = HOST_WIDE_INT_1U << INTVAL (shamt);
! 	    offset += scale * fold_offsets_value (insn, reg, info, single_use);
  	  }
  	else if (GET_CODE (arg1) == PLUS
  		 && REG_P (XEXP (arg1, 0))
  		 && REG_P (XEXP (arg1, 1)))
  	  {
  	    /* Handle R1 = (R2 + R3) + ...  */
! 	    rtx reg1 = XEXP (arg1, 0);
! 	    rtx reg2 = XEXP (arg1, 1);
! 	    if (REGNO (reg1) != REGNO (reg2))
  	      {
! 		offset += fold_offsets_value (insn, reg1, info, single_use);
! 		offset += fold_offsets_value (insn, reg2, info, single_use);
  	      }
+ 	    else
+ 	      offset += 2 * fold_offsets_value (insn, reg1, info, single_use);
  	  }
  	else if (GET_CODE (arg1) == PLUS
  		 && GET_CODE (XEXP (arg1, 0)) == ASHIFT
*************** fold_offsets_1 (rtx_insn *insn, bool ana
*** 325,356 ****
  		 && REG_P (XEXP (arg1, 1)))
  	  {
  	    /* Handle R1 = ((R2 << C) + R3) + ...  */
! 	    if (do_recursion)
  	      {
! 		HOST_WIDE_INT scale
! 		  = (HOST_WIDE_INT_1U << INTVAL (XEXP (XEXP (arg1, 0), 1)));
! 		offset += scale * fold_offsets (insn, XEXP (XEXP (arg1, 0), 0),
! 						analyze, foldable_insns);
! 		offset += fold_offsets (insn, XEXP (arg1, 1), analyze,
! 					foldable_insns);
  	      }
  	  }
  	else
  	  return false;
  
  	if (REG_P (arg2))
! 	  {
! 	    if (do_recursion)
! 	      offset += fold_offsets (insn, arg2, analyze, foldable_insns);
! 	  }
  	else if (CONST_INT_P (arg2))
  	  {
  	    if (REG_P (arg1))
  	      {
  		offset += INTVAL (arg2);
! 		/* This is a R1 = R2 + C instruction, candidate for folding.  */
! 		if (!analyze)
! 		  bitmap_set_bit (foldable_insns, INSN_UID (insn));
  	      }
  	  }
  	else
--- 388,420 ----
  		 && REG_P (XEXP (arg1, 1)))
  	  {
  	    /* Handle R1 = ((R2 << C) + R3) + ...  */
! 	    rtx reg1 = XEXP (XEXP (arg1, 0), 0);
! 	    rtx shamt = XEXP (XEXP (arg1, 0), 1);
! 	    rtx reg2 = XEXP (arg1, 1);
! 	    HOST_WIDE_INT scale = HOST_WIDE_INT_1U << INTVAL (shamt);
! 	    if (REGNO (reg1) != REGNO (reg2))
  	      {
! 		offset += scale
! 			 * fold_offsets_value (insn, reg1, info, single_use);
! 		offset += fold_offsets_value (insn, reg2, info, single_use);
  	      }
+ 	    else
+ 	      offset += (scale + 1) * fold_offsets_value (insn, reg1, info,
+ 						    single_use);
  	  }
  	else
  	  return false;
  
  	if (REG_P (arg2))
! 	  offset += fold_offsets_value (insn, arg2, info, single_use);
  	else if (CONST_INT_P (arg2))
  	  {
  	    if (REG_P (arg1))
  	      {
  		offset += INTVAL (arg2);
! 		/* This is a R1 = R2 + C instruction, candidate for
! 		   folding.  */
! 		fold_agnostic = false;
  	      }
  	  }
  	else
*************** fold_offsets_1 (rtx_insn *insn, bool ana
*** 366,391 ****
  	rtx arg2 = XEXP (src, 1);
  
  	if (REG_P (arg1))
! 	  {
! 	    if (do_recursion)
! 	      offset += fold_offsets (insn, arg1, analyze, foldable_insns);
! 	  }
  	else
  	  return false;
  
  	if (REG_P (arg2))
! 	  {
! 	    if (do_recursion)
! 	      offset -= fold_offsets (insn, arg2, analyze, foldable_insns);
! 	  }
  	else if (CONST_INT_P (arg2))
  	  {
  	    if (REG_P (arg1))
  	      {
  		offset -= INTVAL (arg2);
! 		/* This is a R1 = R2 - C instruction, candidate for folding.  */
! 		if (!analyze)
! 		  bitmap_set_bit (foldable_insns, INSN_UID (insn));
  	      }
  	  }
  	else
--- 430,449 ----
  	rtx arg2 = XEXP (src, 1);
  
  	if (REG_P (arg1))
! 	  offset += fold_offsets_value (insn, arg1, info, single_use);
  	else
  	  return false;
  
  	if (REG_P (arg2))
! 	  offset -= fold_offsets_value (insn, arg2, info, single_use);
  	else if (CONST_INT_P (arg2))
  	  {
  	    if (REG_P (arg1))
  	      {
  		offset -= INTVAL (arg2);
! 		/* This is a R1 = R2 - C instruction, candidate for
! 		   folding.  */
! 		fold_agnostic = false;
  	      }
  	  }
  	else
*************** fold_offsets_1 (rtx_insn *insn, bool ana
*** 399,408 ****
  	/* Propagate through negation.  */
  	rtx arg1 = XEXP (src, 0);
  	if (REG_P (arg1))
! 	  {
! 	    if (do_recursion)
! 	      offset = -fold_offsets (insn, arg1, analyze, foldable_insns);
! 	  }
  	else
  	  return false;
  
--- 457,463 ----
  	/* Propagate through negation.  */
  	rtx arg1 = XEXP (src, 0);
  	if (REG_P (arg1))
! 	  offset = -fold_offsets_value (insn, arg1, info, single_use);
  	else
  	  return false;
  
*************** fold_offsets_1 (rtx_insn *insn, bool ana
*** 417,428 ****
  
  	if (REG_P (arg1) && CONST_INT_P (arg2))
  	  {
! 	    if (do_recursion)
! 	      {
! 		HOST_WIDE_INT scale = INTVAL (arg2);
! 		offset = scale * fold_offsets (insn, arg1, analyze,
! 					       foldable_insns);
! 	      }
  	  }
  	else
  	  return false;
--- 472,479 ----
  
  	if (REG_P (arg1) && CONST_INT_P (arg2))
  	  {
! 	    HOST_WIDE_INT scale = INTVAL (arg2);
! 	    offset = scale * fold_offsets_value (insn, arg1, info, single_use);
  	  }
  	else
  	  return false;
*************** fold_offsets_1 (rtx_insn *insn, bool ana
*** 438,449 ****
  
  	if (REG_P (arg1) && CONST_INT_P (arg2))
  	  {
! 	    if (do_recursion)
! 	      {
! 		HOST_WIDE_INT scale = (HOST_WIDE_INT_1U << INTVAL (arg2));
! 		offset = scale * fold_offsets (insn, arg1, analyze,
! 					       foldable_insns);
! 	      }
  	  }
  	else
  	  return false;
--- 489,496 ----
  
  	if (REG_P (arg1) && CONST_INT_P (arg2))
  	  {
! 	    HOST_WIDE_INT scale = (HOST_WIDE_INT_1U << INTVAL (arg2));
! 	    offset = scale * fold_offsets_value (insn, arg1, info, single_use);
  	  }
  	else
  	  return false;
*************** fold_offsets_1 (rtx_insn *insn, bool ana
*** 454,461 ****
      case REG:
        {
  	/* Propagate through register move.  */
! 	if (do_recursion)
! 	  offset = fold_offsets (insn, src, analyze, foldable_insns);
  
  	/* Pattern recognized for folding.  */
  	break;
--- 501,507 ----
      case REG:
        {
  	/* Propagate through register move.  */
! 	offset = fold_offsets_value (insn, src, info, single_use);
  
  	/* Pattern recognized for folding.  */
  	break;
*************** fold_offsets_1 (rtx_insn *insn, bool ana
*** 464,471 ****
        {
  	offset = INTVAL (src);
  	/* R1 = C is candidate for folding.  */
! 	if (!analyze)
! 	  bitmap_set_bit (foldable_insns, INSN_UID (insn));
  
  	/* Pattern recognized for folding.  */
  	break;
--- 510,516 ----
        {
  	offset = INTVAL (src);
  	/* R1 = C is candidate for folding.  */
! 	fold_agnostic = false;
  
  	/* Pattern recognized for folding.  */
  	break;
*************** fold_offsets_1 (rtx_insn *insn, bool ana
*** 475,923 ****
        return false;
      }
  
!     if (do_recursion && !analyze)
!       *offset_out = offset;
  
!     return true;
! }
  
! /* Function that computes the offset that would have to be added to all uses
!    of REG if the instructions marked in FOLDABLE_INSNS were to be eliminated.
  
!    If ANALYZE is true then mark in CAN_FOLD_INSNS which instructions
!    transitively only affect other instructions found in CAN_FOLD_INSNS.
!    If ANALYZE is false then compute the offset required for folding.  */
! static HOST_WIDE_INT
! fold_offsets (rtx_insn *insn, rtx reg, bool analyze, bitmap foldable_insns)
  {
!   rtx_insn *def = get_single_def_in_bb (insn, reg);
  
!   if (!def || RTX_FRAME_RELATED_P (def) || GET_CODE (PATTERN (def)) != SET)
!     return 0;
  
!   rtx dest = SET_DEST (PATTERN (def));
  
!   if (!REG_P (dest))
!     return 0;
  
!   /* We can only affect the values of GPR registers.  */
!   unsigned int dest_regno = REGNO (dest);
!   if (fixed_regs[dest_regno]
!       || !TEST_HARD_REG_BIT (reg_class_contents[GENERAL_REGS], dest_regno))
!     return 0;
  
-   if (analyze)
-     {
-       /* Check if we know how to handle DEF.  */
-       if (!fold_offsets_1 (def, true, false, NULL, NULL))
- 	return 0;
  
!       /* We only fold through instructions that are transitively used as
! 	 memory addresses and do not have other uses.  Use the same logic
! 	 from offset calculation to visit instructions that can propagate
! 	 offsets and keep track of them in CAN_FOLD_INSNS.  */
!       bool success;
!       struct df_link *uses = get_uses (def, dest, &success), *ref_link;
  
!       if (!success)
! 	return 0;
  
!       for (ref_link = uses; ref_link; ref_link = ref_link->next)
! 	{
! 	  rtx_insn *use = DF_REF_INSN (ref_link->ref);
  
! 	  if (DEBUG_INSN_P (use))
! 	    continue;
  
! 	  /* Punt if the use is anything more complicated than a set
! 	     (clobber, use, etc).  */
! 	  if (!NONJUMP_INSN_P (use) || GET_CODE (PATTERN (use)) != SET)
! 	    return 0;
  
! 	  /* This use affects instructions outside of CAN_FOLD_INSNS.  */
! 	  if (!bitmap_bit_p (&can_fold_insns, INSN_UID (use)))
! 	    return 0;
  
! 	  rtx use_set = PATTERN (use);
  
! 	  /* Special case: A foldable memory store is not foldable if it
! 	     mentions DEST outside of the address calculation.  */
! 	  if (use_set && MEM_P (SET_DEST (use_set))
! 	      && reg_mentioned_p (dest, SET_SRC (use_set)))
! 	    return 0;
  	}
  
!       bitmap_set_bit (&can_fold_insns, INSN_UID (def));
! 
        if (dump_file && (dump_flags & TDF_DETAILS))
  	{
! 	  fprintf (dump_file, "Instruction marked for propagation: ");
! 	  print_rtl_single (dump_file, def);
  	}
      }
!   else
      {
!       /* We cannot propagate through this instruction.  */
!       if (!bitmap_bit_p (&can_fold_insns, INSN_UID (def)))
! 	return 0;
      }
  
!   HOST_WIDE_INT offset = 0;
!   bool recognized = fold_offsets_1 (def, analyze, true, &offset,
! 				    foldable_insns);
  
!   if (!recognized)
!     return 0;
  
!   return offset;
  }
  
! /* Test if INSN is a memory load / store that can have an offset folded to it.
!    Return true iff INSN is such an instruction and return through MEM_OUT,
!    REG_OUT and OFFSET_OUT the RTX that has a MEM code, the register that is
!    used as a base address and the offset accordingly.
!    All of the out pointers may be NULL in which case they will be ignored.  */
! bool
! get_fold_mem_root (rtx_insn *insn, rtx *mem_out, rtx *reg_out,
! 		   HOST_WIDE_INT *offset_out)
  {
!   rtx set = single_set (insn);
!   rtx mem = NULL_RTX;
! 
!   if (set != NULL_RTX)
      {
!       rtx src = SET_SRC (set);
!       rtx dest = SET_DEST (set);
  
!       /* Don't fold when we have unspec / volatile.  */
!       if (GET_CODE (src) == UNSPEC
! 	  || GET_CODE (src) == UNSPEC_VOLATILE
! 	  || GET_CODE (dest) == UNSPEC
! 	  || GET_CODE (dest) == UNSPEC_VOLATILE)
! 	return false;
  
!       if (MEM_P (src))
! 	mem = src;
!       else if (MEM_P (dest))
! 	mem = dest;
!       else if ((GET_CODE (src) == SIGN_EXTEND
! 		|| GET_CODE (src) == ZERO_EXTEND)
! 	       && MEM_P (XEXP (src, 0)))
! 	mem = XEXP (src, 0);
      }
  
!   if (mem == NULL_RTX)
!     return false;
  
!   rtx mem_addr = XEXP (mem, 0);
!   rtx reg;
!   HOST_WIDE_INT offset;
  
!   if (REG_P (mem_addr))
      {
!       reg = mem_addr;
!       offset = 0;
      }
!   else if (GET_CODE (mem_addr) == PLUS
! 	   && REG_P (XEXP (mem_addr, 0))
! 	   && CONST_INT_P (XEXP (mem_addr, 1)))
      {
!       reg = XEXP (mem_addr, 0);
!       offset = INTVAL (XEXP (mem_addr, 1));
      }
-   else
-     return false;
  
!   if (mem_out)
!     *mem_out = mem;
!   if (reg_out)
!     *reg_out = reg;
!   if (offset_out)
!     *offset_out = offset;
  
!   return true;
  }
  
! /* If INSN is a root memory instruction then do a DFS traversal on its
!    definitions and find folding candidates.  */
! static void
! do_analysis (rtx_insn *insn)
  {
!   rtx reg;
!   if (!get_fold_mem_root (insn, NULL, &reg, NULL))
!     return;
  
!   if (dump_file && (dump_flags & TDF_DETAILS))
!     {
!       fprintf (dump_file, "Starting analysis from root: ");
!       print_rtl_single (dump_file, insn);
!     }
  
!   /* Mark this memory instruction as foldable before the DFS so that its
!      address definitions can see it in can_fold_insns during analysis.
!      This is required because fold_offsets checks that all uses of a
!      definition are in can_fold_insns before marking the definition.  */
!   bitmap_set_bit (&can_fold_insns, INSN_UID (insn));
!   fold_offsets (insn, reg, true, NULL);
  }
  
  static void
! do_fold_info_calculation (rtx_insn *insn, fold_info_map *fold_info)
  {
!   rtx mem, reg;
!   HOST_WIDE_INT cur_offset;
!   if (!get_fold_mem_root (insn, &mem, &reg, &cur_offset))
!     return;
  
!   fold_mem_info *info = new fold_mem_info;
!   info->added_offset = fold_offsets (insn, reg, false, info->fold_insns);
  
!   fold_info->put (insn, info);
  }
  
! /* If INSN is a root memory instruction then compute a potentially new offset
!    for it and test if the resulting instruction is valid.  */
  static void
! do_check_validity (rtx_insn *insn, fold_mem_info *info)
  {
!   rtx mem, reg;
!   HOST_WIDE_INT cur_offset;
!   if (!get_fold_mem_root (insn, &mem, &reg, &cur_offset))
!     return;
  
!   HOST_WIDE_INT new_offset = cur_offset + info->added_offset;
  
!   /* Test if it is valid to change MEM's address offset to NEW_OFFSET.  */
!   int icode = INSN_CODE (insn);
!   INSN_CODE (insn) = -1;
!   rtx mem_addr = XEXP (mem, 0);
!   machine_mode addr_mode = GET_MODE (mem_addr);
!   machine_mode mem_mode = GET_MODE (mem);
!   if (new_offset != 0)
!     XEXP (mem, 0) = gen_rtx_PLUS (addr_mode, reg,
! 				   gen_int_mode (new_offset, addr_mode));
!   else
!     XEXP (mem, 0) = reg;
  
!   bool illegal = insn_invalid_p (insn, false)
! 		 || !memory_address_addr_space_p (mem_mode, XEXP (mem, 0),
! 						  MEM_ADDR_SPACE (mem));
  
!   /* Restore the instruction.  */
!   XEXP (mem, 0) = mem_addr;
!   INSN_CODE (insn) = icode;
  
!   if (illegal)
!     bitmap_ior_into (&cannot_fold_insns, info->fold_insns);
!   else
!     bitmap_ior_into (&candidate_fold_insns, info->fold_insns);
  }
  
! static bool
! compute_validity_closure (fold_info_map *fold_info)
  {
!   /* Let's say we have an arbitrary chain of foldable instructions xN = xN + C
!      and memory operations rN that use xN as shown below.  If folding x1 in r1
!      turns out to be invalid for whatever reason then it's also invalid to fold
!      any of the other xN into any rN.  That means that we need the transitive
!      closure of validity to determine whether we can fold a xN instruction.
  
!      +--------------+    +-------------------+    +-------------------+
!      | r1 = mem[x1] |    | r2 = mem[x1 + x2] |    | r3 = mem[x2 + x3] |   ...
!      +--------------+    +-------------------+    +-------------------+
! 	    ^                ^       ^                ^       ^
! 	    |               /        |               /        |           ...
! 	    |              /         |              /         |
!      +-------------+      /   +-------------+      /   +-------------+
!      | x1 = x1 + 1 |-----+    | x2 = x2 + 1 |-----+    | x3 = x3 + 1 |--- ...
!      +-------------+          +-------------+          +-------------+
! 	    ^                        ^                        ^
! 	    |                        |                        |
! 	   ...                      ...                      ...
!   */
  
!   /* In general three iterations should be enough for most cases, but allow up
!      to five when -fexpensive-optimizations is used.  */
!   int max_iters = 3 + 2 * flag_expensive_optimizations;
!   for (int pass = 0; pass < max_iters; pass++)
      {
!       bool made_changes = false;
!       for (fold_info_map::iterator iter = fold_info->begin ();
! 	   iter != fold_info->end (); ++iter)
! 	{
! 	  fold_mem_info *info = (*iter).second;
! 	  if (bitmap_intersect_p (&cannot_fold_insns, info->fold_insns))
! 	    made_changes |= bitmap_ior_into (&cannot_fold_insns,
! 					     info->fold_insns);
! 	}
  
!       if (!made_changes)
! 	return true;
      }
  
!   return false;
! }
  
! /* If INSN is a root memory instruction that was affected by any folding
!    then update its offset as necessary.  */
! static void
! do_commit_offset (rtx_insn *insn, fold_mem_info *info)
! {
!   rtx mem, reg;
!   HOST_WIDE_INT cur_offset;
!   if (!get_fold_mem_root (insn, &mem, &reg, &cur_offset))
!     return;
  
!   HOST_WIDE_INT new_offset = cur_offset + info->added_offset;
  
!   if (new_offset == cur_offset)
!     return;
  
!   gcc_assert (!bitmap_empty_p (info->fold_insns));
  
!   if (bitmap_intersect_p (&cannot_fold_insns, info->fold_insns))
!     return;
  
    if (dump_file)
      {
!       fprintf (dump_file, "Memory offset changed from "
! 	       HOST_WIDE_INT_PRINT_DEC " to " HOST_WIDE_INT_PRINT_DEC
! 	       " for instruction:\n", cur_offset, new_offset);
!       print_rtl_single (dump_file, insn);
      }
  
!   machine_mode mode = GET_MODE (XEXP (mem, 0));
!   if (new_offset != 0)
!     XEXP (mem, 0) = gen_rtx_PLUS (mode, reg, gen_int_mode (new_offset, mode));
    else
!     XEXP (mem, 0) = reg;
!   INSN_CODE (insn) = recog (PATTERN (insn), insn, 0);
!   df_insn_rescan (insn);
  }
  
! /* If INSN is a move / add instruction that was folded then replace its
!    constant part with zero.  */
! static void
! do_commit_insn (rtx_insn *insn)
  {
!   if (bitmap_bit_p (&candidate_fold_insns, INSN_UID (insn))
!       && !bitmap_bit_p (&cannot_fold_insns, INSN_UID (insn)))
      {
!       if (dump_file)
  	{
! 	  fprintf (dump_file, "Instruction folded:");
! 	  print_rtl_single (dump_file, insn);
  	}
  
!       stats_fold_count++;
  
!       rtx set = single_set (insn);
!       rtx dest = SET_DEST (set);
!       rtx src = SET_SRC (set);
  
!       /* Emit a move and let subsequent passes eliminate it if possible.  */
!       if (GET_CODE (src) == CONST_INT)
  	{
! 	  /* INSN is R1 = C.
! 	     Replace it with R1 = 0 because C was folded.  */
! 	  rtx mov_rtx
! 	    = gen_move_insn (dest, gen_int_mode (0, GET_MODE (dest)));
! 	  df_insn_rescan (emit_insn_after (mov_rtx, insn));
  	}
        else
  	{
! 	  /* INSN is R1 = R2 + C.
! 	     Replace it with R1 = R2 because C was folded.  */
! 	  rtx arg1 = XEXP (src, 0);
  
! 	  /* If the DEST == ARG1 then the move is a no-op.  */
! 	  if (REGNO (dest) != REGNO (arg1))
  	    {
! 	      gcc_checking_assert (GET_MODE (dest) == GET_MODE (arg1));
! 	      rtx mov_rtx = gen_move_insn (dest, arg1);
! 	      df_insn_rescan (emit_insn_after (mov_rtx, insn));
  	    }
  	}
  
!       /* Delete the original move / add instruction.  */
!       delete_insn (insn);
      }
  }
  
! unsigned int
! pass_fold_mem_offsets::execute (function *fn)
  {
!   /* Computing UD/DU chains for flow graphs which have a high connectivity
!      will take a long time and is unlikely to be particularly useful.
  
       In normal circumstances a cfg should have about twice as many
       edges as blocks.  But we do not want to punish small functions
       which have a couple switch statements.  Rather than simply
!      threshold the number of blocks, uses something with a more
       graceful degradation.  */
    if (n_edges_for_fn (fn) > 20000 + n_basic_blocks_for_fn (fn) * 4)
!     {
!       warning (OPT_Wdisabled_optimization,
! 	       "fold-mem-offsets: %d basic blocks and %d edges/basic block",
! 	       n_basic_blocks_for_fn (cfun),
! 	       n_edges_for_fn (cfun) / n_basic_blocks_for_fn (cfun));
!       return 0;
!     }
  
!   df_set_flags (DF_EQ_NOTES + DF_RD_PRUNE_DEAD_DEFS + DF_DEFER_INSN_RESCAN);
!   df_chain_add_problem (DF_UD_CHAIN + DF_DU_CHAIN);
    df_analyze ();
  
!   bitmap_initialize (&can_fold_insns, NULL);
!   bitmap_initialize (&candidate_fold_insns, NULL);
!   bitmap_initialize (&cannot_fold_insns, NULL);
  
!   stats_fold_count = 0;
  
!   basic_block bb;
!   rtx_insn *insn;
!   FOR_ALL_BB_FN (bb, fn)
      {
!       fold_info_map fold_info;
  
!       bitmap_clear (&can_fold_insns);
!       bitmap_clear (&candidate_fold_insns);
!       bitmap_clear (&cannot_fold_insns);
  
!       FOR_BB_INSNS (bb, insn)
! 	do_analysis (insn);
  
!       FOR_BB_INSNS (bb, insn)
! 	do_fold_info_calculation (insn, &fold_info);
  
!       FOR_BB_INSNS (bb, insn)
! 	if (fold_mem_info **info = fold_info.get (insn))
! 	  do_check_validity (insn, *info);
  
!       if (compute_validity_closure (&fold_info))
! 	{
! 	  FOR_BB_INSNS (bb, insn)
! 	    if (fold_mem_info **info = fold_info.get (insn))
! 	      do_commit_offset (insn, *info);
  
! 	  FOR_BB_INSNS (bb, insn)
! 	    do_commit_insn (insn);
! 	}
  
!       for (fold_info_map::iterator iter = fold_info.begin ();
! 	   iter != fold_info.end (); ++iter)
! 	delete (*iter).second;
      }
  
!   statistics_counter_event (cfun, "Number of folded instructions",
! 			    stats_fold_count);
! 
!   bitmap_release (&can_fold_insns);
!   bitmap_release (&candidate_fold_insns);
!   bitmap_release (&cannot_fold_insns);
! 
!   return 0;
! }
  
  } // anon namespace
  
--- 520,1414 ----
        return false;
      }
  
!   if (offset_out)
!     *offset_out = offset;
  
!   if (fold_agnostic)
!     {
!       if (!single_use)
! 	info->fold_agnostic_insns.safe_push (insn);
!     }
!   else if (!info->fold_insns.contains (insn))
!     info->fold_insns.safe_push (insn);
  
!   return true;
! }
  
! /* Returns true when all USEs of DEF (which defines REG) meet certain criteria
!    to be foldable.  Otherwise false.  */
! static bool
! has_foldable_uses_p (set_info *def, rtx reg)
  {
!   /* We only fold through instructions that are transitively used as
!      memory addresses and do not have other uses.  Use the same logic
!      from offset calculation to visit instructions that can propagate
!      offsets and keep track of them in CAN_FOLD_INSNS.  */
!   for (use_info *use : def->nondebug_insn_uses ())
!     {
!       insn_info *use_insn = use->insn ();
!       if (use_insn->is_artificial ())
! 	return false;
  
!       /* Only handle an insn with a simple single set here.  */
!       rtx_insn *use_rtl = use_insn->rtl ();
!       if (!NONJUMP_INSN_P (use_rtl) || GET_CODE (PATTERN (use_rtl)) != SET)
! 	return false;
  
!       /* Special case: A foldable memory store is not foldable if it
! 	 mentions DEST outside of the address calculation.  */
!       rtx use_set = PATTERN (use_rtl);
!       if (use_set && MEM_P (SET_DEST (use_set))
! 	  && reg_mentioned_p (reg, SET_SRC (use_set)))
! 	return false;
  
!       if (use->bb () != def->bb ())
! 	return false;
!     }
  
!   return true;
! }
  
  
! /* Function that calculates the offset for INSN that would have to be added to
!    all its USEs of REG.  Foldable INSNs are added to INFO->fold_insns and
!    fold-agnostic INSNs are added to INFO->fold_agnostic_insns.
!    It is possible that some INSNs are added to both lists; when that happens
!    the INSN is a fold insn.
  
!    On success, returns true and stores the offset in *OFFSET_OUT.  On failure,
!    returns false and sets *OFFSET_OUT to 0.  */
! static bool
! fold_offsets (insn_info *insn, rtx reg, HOST_WIDE_INT *offset_out,
! 	      fold_mem_info *info, bool single_use = true)
! {
!   *offset_out = 0;
  
!   /* We can only affect the values of GPR registers.  */
!   unsigned int regno = REGNO (reg);
!   if (fixed_regs[regno]
!       || !TEST_HARD_REG_BIT (reg_class_contents[GENERAL_REGS], regno))
!     return false;
  
!   /* Get the DEF for REG in INSN.  */
!   set_info *def = get_single_def_in_bb (insn, reg, single_use);
!   if (!def)
!     return false;
  
!   insn_info *def_insn = def->insn ();
!   rtx_insn *def_rtl = def_insn->rtl ();
  
!   if (dump_file && (dump_flags & TDF_DETAILS))
!     {
!       fprintf (dump_file, "For INSN: ");
!       print_rtl_single (dump_file, insn->rtl ());
!       fprintf (dump_file, "...found DEF: ");
!       print_rtl_single (dump_file, def_rtl);
!     }
  
!   gcc_assert (REGNO (reg) == def->regno ());
  
!   /* Check if all USEs of DEF are safe.  */
!   if (!has_foldable_uses_p (def, reg))
!     {
!       if (dump_file && (dump_flags & TDF_DETAILS))
! 	{
! 	  fprintf (dump_file, "has_foldable_uses_p failed for: ");
! 	  print_rtl_single (dump_file, def_rtl);
  	}
+       return false;
+     }
  
!   /* Check if we know how to handle DEF.  */
!   HOST_WIDE_INT offset;
!   if (!fold_offsets_1 (def_insn, &offset, info, single_use))
!     {
        if (dump_file && (dump_flags & TDF_DETAILS))
  	{
! 	  fprintf (dump_file, "fold_offsets_1 failed for: ");
! 	  print_rtl_single (dump_file, def_rtl);
  	}
+       return false;
      }
! 
!   if (dump_file && (dump_flags & TDF_DETAILS))
      {
!       fprintf (dump_file, "Instruction marked for propagation: ");
!       print_rtl_single (dump_file, def_rtl);
      }
  
!   *offset_out = offset;
!   return true;
! }
  
! /* Check if any of the provided INSNs in INSN_LIST is not marked in the
!    given bitmap.  Return true if at least one INSN is not in the bitmap and
!    false otherwise.  */
! static bool
! insn_uses_not_in_bitmap (vec<insn_info *> *insn_list, bitmap bm)
! {
!   for (insn_info *insn : *insn_list)
!     {
!       gcc_assert (insn->num_defs () == 1);
!       set_info *def = dyn_cast<set_info *>(insn->defs ()[0]);
!       for (use_info *use : def->nondebug_insn_uses ())
! 	{
! 	  if (!bitmap_bit_p (bm, use->insn ()->uid ()))
! 	    {
! 	      if (dump_file && (dump_flags & TDF_DETAILS))
! 		{
! 		  fprintf (dump_file, "Cannot ensure correct transformation as "
! 			   "INSN %u has a USE INSN %u that was not analysed.\n",
! 			   insn->uid (), use->insn ()->uid ());
! 		}
  
! 	      return true;
! 	    }
! 	}
!     }
! 
!   return false;
  }
  
! /* Check if all USEs of all instructions have been analysed.
!    If a fold_mem_info is found that has an unknown USE, then
!    drop it from the list.  When this function returns all
!    fold_mem_infos in the worklist reference instructions that
!    have been analysed before and can therefore be committed.  */
! static void
! drop_unsafe_candidates (vec<fold_mem_info *> *worklist)
  {
!   bool changed;
!   do
      {
!       changed = false;
  
!       /* First mark all analysed INSNs in a bitmap.  */
!       auto_bitmap insn_closure;
!       for (fold_mem_info *info : worklist)
! 	{
! 	  bitmap_set_bit (insn_closure, info->insn->uid ());
! 	  for (insn_info *insn : info->fold_agnostic_insns)
! 	    bitmap_set_bit (insn_closure, insn->uid ());
! 	  for (insn_info *insn : info->fold_insns)
! 	    bitmap_set_bit (insn_closure, insn->uid ());
! 	}
  
!       /* Now check if all uses of fold_insns are marked.  */
!       unsigned i;
!       fold_mem_info *info;
!       FOR_EACH_VEC_ELT (*worklist, i, info)
! 	{
! 	  if (insn_uses_not_in_bitmap (&info->fold_agnostic_insns, insn_closure)
! 	      || insn_uses_not_in_bitmap (&info->fold_insns, insn_closure))
! 	    {
! 	      if (dump_file && (dump_flags & TDF_DETAILS))
! 		{
! 		  fprintf (dump_file,
! 			   "Dropping fold-mem-offset root INSN %u.\n",
! 			   info->insn->uid ());
! 		}
! 
! 	      /* Drop INFO from worklist and restart.  */
! 	      worklist->unordered_remove (i);
! 	      delete info;
! 	      changed = true;
! 	      break;
! 	    }
! 	}
      }
+   while (changed);
+ }
  
! /* If INSN is a root memory instruction that was affected by any folding
!    then update its offset as necessary.  */
! static rtx
! do_commit_offset (fold_mem_info *info)
! {
!   rtx mem = info->mem;
!   rtx reg = info->reg;
!   HOST_WIDE_INT new_offset = info->offset + info->added_offset;
  
!   if (info->added_offset == 0)
!     return NULL_RTX;
  
!   rtx new_mem = copy_rtx (mem);
! 
!   machine_mode mode = GET_MODE (XEXP (new_mem, 0));
!   if (new_offset != 0)
!     XEXP (new_mem, 0)
!       = gen_rtx_PLUS (mode, reg, gen_int_mode (new_offset, mode));
!   else
!     XEXP (new_mem, 0) = reg;
! 
!   rtx new_insn = simplify_replace_rtx (info->insn->rtl (), mem, new_mem);
! 
!   return new_insn;
! }
! 
! /* If INSN is a move / add instruction that was folded then replace its
!    constant with zero.  Append the resulting insn_change to CHANGES for the
!    caller to commit.  */
! static rtx_insn *
! do_commit_insn (insn_info *insn, auto_vec<change_info *> *changes)
! {
!   rtx_insn *insn_rtl = insn->rtl ();
!   rtx_insn *new_insn_rtl = as_a<rtx_insn *> (copy_rtx (insn_rtl));
! 
!   /* If we deleted this INSNs before, then nothing left to do here.  */
!   if (insn_rtl->deleted ())
!     return NULL;
! 
!   rtx set = single_set (new_insn_rtl);
!   rtx src = SET_SRC (set);
! 
!   /* Emit a move and let subsequent passes eliminate it if possible.  */
!   if (CONST_INT_P (src))
      {
!       /* Only change if necessary.  */
!       if (INTVAL (src))
! 	{
! 	  /* INSN is R1 = C.  Set C to 0 because it was folded.  */
! 	  SET_SRC (set) = CONST0_RTX (GET_MODE (SET_SRC (set)));
! 	  change_info *change = new change_info (
! 				  new insn_change (insn),
! 				  num_validated_changes ());
! 	  changes->safe_push (change);
! 
! 	  return new_insn_rtl;
! 	}
      }
!   else
      {
!       if (!BINARY_P (src))
! 	return NULL;
! 
!       rtx sec_src_op = XEXP (src, 1);
! 
!       /* Only change if necessary.  */
!       if (INTVAL (sec_src_op))
! 	{
! 	  /* Mark self-assignments for deletion.  */
! 	  rtx dest = SET_DEST (set);
! 	  change_info *change = nullptr;
! 	  if (REGNO (dest) == REGNO (XEXP (src, 0)))
! 	    change = new change_info (
! 		       new insn_change (insn, insn_change::DELETE),
! 		       num_validated_changes ());
! 	  else
! 	    {
! 	      /* If INSN is R1 = R2 + C, C is folded to 0, so emit a mov
! 		 instead.  */
! 	      new_insn_rtl = gen_move_insn (SET_DEST (set), XEXP (src, 0));
! 	      change = new change_info (
! 			 new insn_change (insn), num_validated_changes ());
! 	    }
! 
! 	  changes->safe_push (change);
! 	  return new_insn_rtl;
! 	}
      }
  
!   return NULL;
! }
  
! /* Order two insn_change objects by the program order of their insns.  */
! 
! static bool
! sort_changes (insn_change *a, insn_change *b)
! {
!   return a->insn ()->compare_with (b->insn ()) < 0;
  }
  
! /* A changes_map entry copied out for deterministic, regno-ordered traversal:
!    REGNO is the map key and CHANGES the insn_change list for it.  */
! 
! struct regno_changes
  {
!   unsigned regno;
!   auto_vec<insn_change *> *changes;
! };
  
! /* qsort comparator that orders regno_changes entries by ascending regno.  */
  
! static int
! sort_pairs (const void *p1, const void *p2)
! {
!   const regno_changes *a = (const regno_changes *) p1;
!   const regno_changes *b = (const regno_changes *) p2;
! 
!   if (a->regno < b->regno)
!     return -1;
!   if (a->regno > b->regno)
!     return 1;
!   return 0;
  }
  
+ /* Find and return the last definition of INSN.  */
+ 
+ static def_info *
+ get_last_def (insn_info *insn)
+ {
+   for (def_info *def : insn->defs ())
+     if (def->insn () == insn)
+       return def;
+ 
+   return NULL;
+ }
+ 
+ /* Move uses of DEF to the previous definition.  */
+ 
  static void
! move_uses_to_prev_def (def_info *def)
  {
!   auto set = dyn_cast<set_info *> (def);
!   while (set->first_use ())
!     {
!       auto prev_set = dyn_cast<set_info *> (def->prev_def ());
!       if (!prev_set)
! 	break;
!       crtl->ssa->reparent_use (set->first_use (), prev_set);
!     }
! }
  
! /* Check if CHANGE exists in CHANGES.  */
  
! static bool
! change_in_vec_p (const auto_vec<change_info *> &changes,
! 		 const change_info &change)
! {
!   for (const change_info *other_change : changes)
!     if (other_change->change->insn () == change.change->insn ())
!       return true;
! 
!   return false;
  }
  
! /* Cancel current changes, clear CHANGES vector and update REMOVED_REGNOS.  */
  static void
! cancel_changes_for_group (int change_index, bitmap removed_regnos,
! 			  unsigned regno, int *min_index)
  {
!   if (*min_index == -1 || change_index < *min_index)
!     *min_index = change_index;
!   bitmap_set_bit (removed_regnos, regno);
! }
  
! /* Find the keys in CHANGES_MAP that need to be removed, based on
!    CANCEL_MIN_INDEX and store them in KEYS_TO_REMOVE.  We do this by iterating
!    the entries of the map recalculating the minimum index, until reaching a
!    fixed-point.  */
  
! static void
! find_keys_to_remove (const hash_map<int_hash<unsigned, -1U, -2U>,
! 			      auto_vec<change_info *>> &changes_map,
! 		     bitmap keys_to_remove,
! 		     int *cancel_min_index)
! {
!   bool index_changed;
!   do {
!     index_changed = false;
!     for (const auto &entry : changes_map)
!       {
! 	int min_index = INT_MAX;
! 	bool cancelled_group = bitmap_bit_p (keys_to_remove, entry.first);
! 	for (change_info *change : entry.second)
! 	  {
! 	    int change_index = change->change_index;
! 	    if (change_index < min_index)
! 	      min_index = change_index;
  
! 	    if (!cancelled_group && change_index >= *cancel_min_index)
! 	      {
! 		bitmap_set_bit (keys_to_remove, entry.first);
! 		cancelled_group = true;
! 	      }
! 	  }
  
! 	if (cancelled_group && min_index < *cancel_min_index)
! 	  {
! 	    *cancel_min_index = min_index;
! 	    index_changed = true;
! 	    break;
! 	  }
!       }
!   }
!   while (index_changed);
! }
  
! /* Free all change_info objects (and their inner insn_change) owned by
!    CHANGES_INFO.  Used on early returns in update_insns before ownership
!    is transferred to changes_map.  */
! 
! static void
! free_changes_info (auto_vec<change_info *> &changes_info)
! {
!   for (change_info *ci : changes_info)
!     {
!       delete ci->change;
!       delete ci;
!     }
  }
  
! /* Update the memory offsets and constants in fold insns based on the analysis
!    done in fold_mem_offsets_1, using RTL SSA.  ATTEMPT is the attempt object
!    for the current changes.  CHANGES_MAP holds the changes that are going
!    to performed and is updated inside the function.  REMOVED_REGNOS holds the
!    keys of the map that have been removed, in order to prevent new attempts
!    on these.  */
! static unsigned int
! update_insns (fold_mem_info *info,
! 	      obstack_watermark *attempt,
! 	      hash_map<int_hash<unsigned, -1U, -2U>, auto_vec<change_info *>>
! 	      *changes_map,
! 	      bitmap removed_regnos,
! 	      int *cancel_min_index)
  {
!   insn_info *insn = info->insn;
!   unsigned int stats_fold_count = 0;
  
!   auto_vec<change_info *> changes_info;
  
!   insn_change *change = new insn_change (insn);
!   change_info *change_inf = new change_info (change, num_validated_changes ());
!   int change_index = change_inf->change_index;
!   changes_info.safe_push (change_inf);
! 
!   if (info->fold_insns.is_empty ())
      {
!       free_changes_info (changes_info);
!       return stats_fold_count;
!     }
  
!   const rtx_insn *last_fold_insn_rtl = info->fold_insns.last ()->rtl ();
!   rtx last_set = single_set (last_fold_insn_rtl);
!   if (!last_set)
!     {
!       free_changes_info (changes_info);
!       return stats_fold_count;
      }
+   unsigned regno_key = REGNO (SET_DEST (last_set));
+   auto_vec<change_info *> *prev_changes = changes_map->get (regno_key);
  
!   /* Abort if changes for this key have been cancelled before.  */
!   if (bitmap_bit_p (removed_regnos, regno_key))
!     {
!       cancel_changes_for_group (change_index, removed_regnos, regno_key,
! 				cancel_min_index);
!       free_changes_info (changes_info);
!       return stats_fold_count;
!     }
  
!   /* Keep a copy of insn_change elements only.  */
!   auto_vec<insn_change *> changes (changes_info.length ());
!   for (change_info *ci : changes_info)
!     changes.quick_push (ci->change);
  
!   auto ignore = ignore_changing_insns (changes);
!   if (!rtl_ssa::restrict_movement (*change, ignore))
!     {
!       if (dump_file && (dump_flags & TDF_DETAILS))
! 	fprintf (dump_file, "Restrict movement: Cannot update INSN %u.\n",
! 		 insn->uid ());
!       cancel_changes_for_group (change_index, removed_regnos, regno_key,
! 				cancel_min_index);
!       free_changes_info (changes_info);
!       return stats_fold_count;
!     }
  
!   rtx new_insn = do_commit_offset (info);
!   if (new_insn == NULL_RTX)
!     {
!       free_changes_info (changes_info);
!       return stats_fold_count;
!     }
  
!   rtx_insn *insn_rtl = info->insn->rtl ();
!   validate_change (insn_rtl, &PATTERN (insn_rtl), PATTERN (new_insn), 1);
  
!   /* Check change validity and new instruction cost.  */
!   if (!recog (*attempt, *change, ignore)
!       || !changes_are_worthwhile (changes)
!       || !crtl->ssa->verify_insn_changes (changes))
!     {
!       if (dump_file && (dump_flags & TDF_DETAILS))
! 	fprintf (dump_file, "Recog/verify: Cannot update INSN %u.\n",
! 		 insn->uid ());
!       cancel_changes_for_group (change_index, removed_regnos, regno_key,
! 				cancel_min_index);
!       free_changes_info (changes_info);
!       return stats_fold_count;
!     }
  
    if (dump_file)
+     fprintf (dump_file, "INSN %u: Memory offset changed from "
+ 	 HOST_WIDE_INT_PRINT_DEC " to " HOST_WIDE_INT_PRINT_DEC ".\n",
+ 	 insn->uid (), info->offset, info->offset + info->added_offset);
+ 
+   while (!info->fold_insns.is_empty ())
      {
!       insn_info *fold_insn = info->fold_insns.pop ();
!       rtx_insn *fold_insn_rtl = fold_insn->rtl ();
! 
!       rtx_insn *new_fold_insn = do_commit_insn (fold_insn, &changes_info);
!       if (!new_fold_insn)
! 	continue;
! 
!       change_info *last_change = changes_info.last ();
!       changes.safe_push (last_change->change);
! 
!       std::sort (changes.begin (), changes.end (), sort_changes);
! 
!       auto ignore = ignore_changing_insns (changes);
!       if (!rtl_ssa::restrict_movement (*last_change->change, ignore))
! 	{
! 	  if (dump_file && (dump_flags & TDF_DETAILS))
! 	    fprintf (dump_file, "Restrict movement: Cannot update INSN %u.\n",
! 		     fold_insn->uid ());
! 	  cancel_changes_for_group (change_index, removed_regnos, regno_key,
! 				    cancel_min_index);
! 	  free_changes_info (changes_info);
! 	  return 0;
! 	}
! 
!       if (!changes_are_worthwhile (changes)
! 	  || !crtl->ssa->verify_insn_changes (changes))
! 	{
! 	  if (dump_file && (dump_flags & TDF_DETAILS))
! 	    fprintf (dump_file, "Verify: Cannot update INSN %u.\n",
! 		     fold_insn->uid ());
! 	  cancel_changes_for_group (change_index, removed_regnos, regno_key,
! 				    cancel_min_index);
! 	  free_changes_info (changes_info);
! 	  return 0;
! 	}
! 
!       if (last_change->change->is_deletion ())
! 	{
! 	  /* Find last instruction's def.  */
! 	  def_info *insn_def = get_last_def (last_change->change->insn ());
! 
! 	  /* Move uses of deleted instruction to the previous def.  */
! 	  move_uses_to_prev_def (insn_def);
! 	}
!       else
! 	{
! 	  last_change->change_index = num_validated_changes ();
! 	  validate_change (fold_insn_rtl, &PATTERN (fold_insn_rtl),
! 			   PATTERN (new_fold_insn), 1);
! 	  if (!recog (*attempt, *last_change->change, ignore))
! 	    {
! 	      if (dump_file && (dump_flags & TDF_DETAILS))
! 		fprintf (dump_file, "Recog: Cannot update INSN %u.\n",
! 			 fold_insn->uid ());
! 	      cancel_changes_for_group (change_index, removed_regnos, regno_key,
! 					cancel_min_index);
! 	      free_changes_info (changes_info);
! 	      return 0;
! 	    }
! 	}
! 
!       if (dump_file)
! 	{
! 	  const int last_change_uid = last_change->change->insn ()->uid ();
! 	  if (last_change->change->is_deletion ())
! 	    fprintf (dump_file, "INSN %u: Marked for deletion.\n",
! 		     last_change_uid);
! 	  else
! 	    fprintf (dump_file, "INSN %u: Constant set to zero.\n",
! 		     last_change_uid);
! 	}
! 
!       stats_fold_count++;
      }
  
!   /* Add new changes to changes_map.  */
!   if (prev_changes)
!     {
!       for (change_info *change : changes_info)
! 	if (!change_in_vec_p (*prev_changes, *change))
! 	  prev_changes->safe_push (change);
! 	else
! 	  {
! 	    delete change->change;
! 	    delete change;
! 	  }
!     }
    else
!     for (change_info *change : changes_info)
!       {
! 	auto_vec<change_info *> &change_vect
! 	  = changes_map->get_or_insert (regno_key);
! 
! 	if (!change_in_vec_p (change_vect, *change))
! 	  change_vect.safe_push (change);
! 	else
! 	  {
! 	    delete change->change;
! 	    delete change;
! 	  }
!       }
! 
!   return stats_fold_count;
  }
  
! /* Helper function for fold_mem_offsets.  Fold memory offsets by analysing the
!    DEF-USE chain.  If SINGLE_USE is true the DEFs will only have a single use,
!    otherwise they can have multiple uses.  */
! static unsigned int
! fold_mem_offsets_1 (bool single_use)
  {
!   unsigned int stats_fold_count = 0;
! 
!   /* This maps the instruction changes to the register defined by the last
!      fold_insn of the def-chain (the one nearest the fold-mem-offset root).
!      We use this so that we can group interdependent instructions.  In this
!      way, we can restrict the change cancellation in a group only, if anything
!      goes wrong.  */
!   hash_map<int_hash<unsigned, -1U, -2U>, auto_vec<change_info *>> changes_map;
! 
!   auto attempt = crtl->ssa->new_change_attempt ();
!   insn_change_watermark watermark;
! 
!   /* Set of removed reg numbers (keys to changes_map).  If a change for a reg
!      number has been cancelled, we need to invalidate any future changes.  */
!   auto_bitmap removed_regnos;
! 
!   int cancel_min_index = -1;
! 
!   /* Iterate over all nondebug INSNs get our candidates and fold them.  */
!   auto_vec<fold_mem_info *> worklist;
!   for (auto insn : iterate_safely (crtl->ssa->nondebug_insns ()))
      {
!       if (!insn->is_real () || !insn->can_be_optimized ())
! 	continue;
! 
!       rtx mem, reg;
!       HOST_WIDE_INT offset;
!       if (!get_fold_mem_offset_root (insn, &mem, &reg, &offset))
! 	continue;
! 
!       fold_mem_info *info = new fold_mem_info (insn, mem, reg, offset);
! 
!       if (dump_file && (dump_flags & TDF_DETAILS))
  	{
! 	  fprintf (dump_file, "Starting analysis from root: ");
! 	  print_rtl_single (dump_file, info->insn->rtl ());
  	}
  
!       /* Walk DEF-chain and collect info.fold_insns and the resulting
! 	 offset.  */
!       if (!fold_offsets (info->insn, info->reg, &info->added_offset, info,
! 			 single_use)
! 	  || info->added_offset == 0)
! 	{
! 	  delete info;
! 	  continue;
! 	}
  
!       if (dump_file && (dump_flags & TDF_DETAILS))
! 	fprintf (dump_file,
! 		 "Found root offset delta: " HOST_WIDE_INT_PRINT_DEC "\n",
! 		 info->added_offset);
  
!       if (single_use)
  	{
! 	  stats_fold_count += update_insns (info, &attempt, &changes_map,
! 					    removed_regnos, &cancel_min_index);
! 	  delete info;
  	}
        else
+ 	/* Append candidate.  */
+ 	worklist.safe_push (info);
+     }
+ 
+   if (!single_use)
+     {
+       /* Now drop all fold_mem_infos, which contain INSNs that have unknown
+ 	 USEs and are therefore not safe to change.  */
+       drop_unsafe_candidates (&worklist);
+ 
+       while (!worklist.is_empty ())
  	{
! 	  fold_mem_info *info = worklist.pop ();
! 	  stats_fold_count += update_insns (info, &attempt, &changes_map,
! 					    removed_regnos, &cancel_min_index);
! 	  delete info;
! 	}
!     }
  
!   /* In case that instructions have been cancelled, remove related
!      instructions from the map and find the minimum index to use in
!      cancel_changes.  */
!   if (cancel_min_index != -1)
!     {
!       find_keys_to_remove (changes_map, removed_regnos, &cancel_min_index);
! 
!       bitmap_iterator bi;
!       unsigned int key;
!       EXECUTE_IF_SET_IN_BITMAP (removed_regnos, 0, key, bi)
! 	{
! 	  auto_vec<change_info *> *changes = changes_map.get (key);
! 	  if (changes)
  	    {
! 	      for (change_info *change : *changes)
! 		{
! 		  if (dump_file)
! 		    fprintf (dump_file, "Change cancelled for insn %u.\n",
! 			     change->change->insn ()->uid ());
! 		  delete change->change;
! 		  delete change;
! 		}
  	    }
+ 	  changes_map.remove (key);
  	}
  
!       cancel_changes (cancel_min_index);
      }
+ 
+   if (cancel_min_index != 0)
+     confirm_change_group ();
+ 
+   /* Copy the map into a vector and sort it for traversal.  */
+   unsigned int map_entries_num = changes_map.elements ();
+   auto_vec<regno_changes> regno_changes_vec (map_entries_num);
+ 
+   for (auto entry : changes_map)
+     {
+       auto_vec<insn_change *> *changes_vec
+ 	 = new auto_vec<insn_change *> (entry.second.length ());
+ 
+       for (change_info *change : entry.second)
+ 	changes_vec->quick_push (change->change);
+ 
+       regno_changes rc;
+       rc.regno = static_cast<unsigned> (entry.first);
+       rc.changes = changes_vec;
+       regno_changes_vec.quick_push (rc);
+     }
+ 
+   regno_changes_vec.qsort (sort_pairs);
+ 
+   for (const auto &rc : regno_changes_vec)
+     {
+       auto_vec<insn_change *> &changes = *rc.changes;
+ 
+       /* Skip already deleted instructions.  */
+       auto_vec<insn_change *> live_changes (changes.length ());
+       for (insn_change *change : changes)
+ 	if (change->insn ()->has_been_deleted ())
+ 	  delete change;
+ 	else
+ 	  live_changes.quick_push (change);
+ 
+       std::sort (live_changes.begin (), live_changes.end (), sort_changes);
+       crtl->ssa->change_insns (live_changes);
+ 
+       for (insn_change *change : live_changes)
+ 	delete change;
+ 
+       delete rc.changes;
+     }
+ 
+   /* Free the change_info wrappers for successful (non-cancelled) entries.
+      Their inner insn_change has already been deleted above.  Cancelled
+      entries were removed from changes_map and freed earlier.  */
+   for (auto entry : changes_map)
+     for (change_info *ci : entry.second)
+       delete ci;
+ 
+   return stats_fold_count;
  }
  
! /* Main function of fold-mem-offsets pass.  */
! static unsigned int
! fold_mem_offsets (function *fn)
  {
!   bool multi_use_mode = true;
! 
!   /* Analysing every USE of a DEF (multi-use mode, below) is expensive on
!      flow graphs which have a high connectivity and is unlikely to be
!      particularly useful there, so gate it on the edge count.
  
       In normal circumstances a cfg should have about twice as many
       edges as blocks.  But we do not want to punish small functions
       which have a couple switch statements.  Rather than simply
!      threshold the number of blocks, use something with a more
       graceful degradation.  */
    if (n_edges_for_fn (fn) > 20000 + n_basic_blocks_for_fn (fn) * 4)
!     multi_use_mode = false;
  
!   /* Initialize RTL SSA.  */
!   calculate_dominance_info (CDI_DOMINATORS);
    df_analyze ();
+   crtl->ssa = new rtl_ssa::function_info (cfun);
  
!   /* The number of instructions that were simplified or eliminated.  */
!   int stats_fold_count = 0;
  
!   /* Fold mem offsets with DEFs that have a single USE.  */
!   stats_fold_count += fold_mem_offsets_1 (true);
  
!   /* Fold mem offsets with DEFs that have multiple USEs.  This expensive
!      analysis is skipped for highly-connected CFGs, unless forced on with
!      -fexpensive-optimizations.  As the latter is enabled by default at -O2,
!      the skip only takes effect under -fno-expensive-optimizations.  */
!   if (multi_use_mode || flag_expensive_optimizations)
      {
!       if (dump_file)
! 	fprintf (dump_file, "Starting multi-use analysis\n");
!       stats_fold_count += fold_mem_offsets_1 (false);
!     }
!   else
!     warning (OPT_Wdisabled_optimization,
! 	     "fold-mem-offsets: disabling multi-use analysis for %d basic "
! 	     "blocks and %d edges/basic block",
! 	     n_basic_blocks_for_fn (fn),
! 	     n_edges_for_fn (fn) / n_basic_blocks_for_fn (fn));
  
!   statistics_counter_event (cfun, "Number of folded instructions",
! 			    stats_fold_count);
  
!   free_dominance_info (CDI_DOMINATORS);
!   if (crtl->ssa->perform_pending_updates ())
!     cleanup_cfg (0);
  
!   delete crtl->ssa;
!   crtl->ssa = nullptr;
  
!   return 0;
! }
  
! const pass_data pass_data_fold_mem =
! {
!   RTL_PASS, /* type */
!   "fold_mem_offsets", /* name */
!   OPTGROUP_NONE, /* optinfo_flags */
!   TV_FOLD_MEM_OFFSETS, /* tv_id */
!   0, /* properties_required */
!   0, /* properties_provided */
!   0, /* properties_destroyed */
!   0, /* todo_flags_start */
!   TODO_df_finish, /* todo_flags_finish */
! };
  
! class pass_fold_mem_offsets : public rtl_opt_pass
! {
! public:
!   pass_fold_mem_offsets (gcc::context *ctxt)
!     : rtl_opt_pass (pass_data_fold_mem, ctxt)
!   {}
  
!   /* opt_pass methods: */
!   bool gate (function *) final override
!     {
!       return flag_fold_mem_offsets && optimize >= 2;
      }
  
!   unsigned int execute (function *fn) final override
!     {
!       return fold_mem_offsets (fn);
!     }
! }; // class pass_fold_mem_offsets
  
  } // anon namespace
  
diff -Nrcpad gcc-17-20260705/gcc/fortran/ChangeLog gcc-17-20260712/gcc/fortran/ChangeLog
*** gcc-17-20260705/gcc/fortran/ChangeLog	Sun Jul  5 22:32:07 2026
--- gcc-17-20260712/gcc/fortran/ChangeLog	Sun Jul 12 22:32:08 2026
***************
*** 1,3 ****
--- 1,105 ----
+ 2026-07-11  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	PR fortran/126210
+ 	* module.cc (read_module): Only skip re-importing a symbol
+ 	already visible via host association from the same module
+ 	when that symbol is a derived type.
+ 
+ 2026-07-10  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	PR fortran/126170
+ 	* class.cc (gfc_find_derived_vtab): Fix up a stale
+ 	non-use-associated duplicate vtab symbol.
+ 	(gfc_is_finalizable): Same fix-up, for the finalizer wrapper
+ 	symbol.
+ 	* module.cc (read_module): Skip re-importing a symbol already
+ 	visible via host association from the same module.
+ 
+ 2026-07-09  Paul-Antoine Arras  <parras@baylibre.com>
+ 	    Thomas Schwinge  <tschwinge@baylibre.com>
+ 
+ 	* types.def (BT_FN_COMPLEX_INT): Remove.
+ 	(BT_FN_COMPLEX_INT_ULONGLONG): New.
+ 
+ 2026-07-08  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	* trans-array.cc (gfc_array_init_size): Set the rank for the
+ 	dtype.
+ 
+ 2026-07-08  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/126127
+ 	* interface.cc (find_symtree0): Check for NULL pointer.
+ 	(gfc_find_sym_in_symtree): Also search user-defined operator list
+ 	when the symbol refers to a function.
+ 
+ 2026-07-08  Mikael Morin  <mikael@gcc.gnu.org>
+ 
+ 	* trans-types.h (gfc_array_dim_rank_type): New type node
+ 	declaration.
+ 	* trans-types.cc (gfc_array_dim_rank_type): Likewise.
+ 	(gfc_init_types) : Initialize the new type node.
+ 	(get_dtype_type_node): Use the new type for the rank field.
+ 	* trans-descriptor.cc (gfc_conv_descriptor_rank): Likewise.
+ 	* trans-const.h (gfc_index_zero_node, gfc_index_one_node): Make
+ 	each macro a separate node declaration.
+ 	* trans-const.cc (gfc_index_zero_node, gfc_index_one_node):
+ 	Declare new nodes.
+ 	(gfc_init_constants): Initialize them.  Use the new type for the
+ 	constants of the gfc_rank_cst array.
+ 	* trans-array.cc (gfc_tree_array_size): Use the new type for the
+ 	RANK, IDX and DIM variables.  Avoid negative intermediary value
+ 	in comparison using the new type.
+ 	(gfc_conv_array_parameter): Use the new type when assigning a
+ 	value to the descriptor's rank.  Use the new type for the IDX
+ 	variable.
+ 	* trans-decl.cc (gfc_conv_cfi_to_gfc): Use the new type for the
+ 	rank, and the dimension index variable (including loop initial
+ 	value and step).
+ 	* trans-expr.cc (gfc_conv_gfc_desc_to_cfi_desc): Likewise.
+ 	(gfc_conv_variable): Use the new type for the rank variable.
+ 	(gfc_trans_structure_assign): Use the new type when assigning a
+ 	value to the descriptor's rank.
+ 	* trans-openmp.cc (gfc_omp_get_array_size): Use the new type
+ 	for the dimension index variable and the loop initialization,
+ 	bound and step.
+ 	* trans-intrinsic.cc (gfc_conv_intrinsic_bound): Use the new
+ 	type for the DIM argument and the rank.
+ 	(conv_intrinsic_cobound): Likewise.
+ 	(trans_this_image): Likewise.  Use the new type for the loop
+ 	variable, initialization, bound and step.
+ 	(gfc_conv_intrinsic_sizeof): Likewise.
+ 	* trans-stmt.cc (gfc_trans_select_rank_cases): Use signed char
+ 	as type for the select value.
+ 
+ 2026-07-07  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	PR fortran/103367
+ 	* expr.cc (simplify_const_ref): Hoist the call to
+ 	remove_subobject_ref up a level.
+ 	* primary.cc (gfc_match_rvalue): Don't copy the value expr
+ 	if the type is an EXPR_VARIABLE.
+ 	not
+ 	* trans-array.cc (gfc_conv_array_initializer): Only copy the expr
+ 	value if it does not have a ref.
+ 
+ 2026-07-06  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/121366
+ 	* intrinsic.texi: Remove documentation of GNU intrinsic extensions
+ 	(CCOSD,ZCOSD,CDCOSD) that were never implemented.
+ 	* iresolve.cc (gfc_resolve_trig): Fix resolution of degree
+ 	trigonometric functions and generate references to the proper
+ 	library functions.
+ 	(gfc_resolve_trig2): Likewise.
+ 	* trans-decl.cc (gfc_get_extern_function_decl): Ensure that isym
+ 	is set when resolving intrinsic procedures.
+ 
+ 2026-07-05  Sandra Loosemore  <sloosemore@baylibre.com>
+ 
+ 	* trans.cc (trans_code): Do not try to set location on non-expr
+ 	tree expressions, e.g. error_mark_node.
+ 
  2026-07-04  Thomas Koenig  <tkoenig@gcc.gnu.org>
  
  	PR fortran/126058
diff -Nrcpad gcc-17-20260705/gcc/fortran/class.cc gcc-17-20260712/gcc/fortran/class.cc
*** gcc-17-20260705/gcc/fortran/class.cc	Sun Jul  5 22:32:08 2026
--- gcc-17-20260712/gcc/fortran/class.cc	Sun Jul 12 22:32:08 2026
*************** gfc_find_derived_vtab (gfc_symbol *deriv
*** 2523,2528 ****
--- 2523,2537 ----
        if (vtab == NULL && module_ns != ns)
  	gfc_find_symbol (name, module_ns, 0, &vtab);
  
+       /* Fix up a stale non-use-associated duplicate vtab.  */
+       if (vtab
+ 	  && (derived->attr.use_assoc || derived->attr.used_in_submodule)
+ 	  && !vtab->attr.use_assoc && !vtab->module)
+ 	{
+ 	  vtab->attr.use_assoc = 1;
+ 	  vtab->module = derived->module;
+ 	}
+ 
        if (vtab == NULL)
  	{
  	  gfc_get_symbol (name, ns, &vtab);
*************** yes:
*** 2860,2865 ****
--- 2869,2887 ----
        gcc_assert (final->initializer
  		  && final->initializer->expr_type != EXPR_NULL);
        *final_expr = final->initializer;
+ 
+       /* Fix up a stale non-use-associated duplicate vtab.  */
+       if ((derived->attr.use_assoc || derived->attr.used_in_submodule)
+ 	  && (*final_expr)->expr_type == EXPR_VARIABLE
+ 	  && (*final_expr)->symtree)
+ 	{
+ 	  gfc_symbol *final_sym = (*final_expr)->symtree->n.sym;
+ 	  if (final_sym && !final_sym->attr.use_assoc && !final_sym->module)
+ 	    {
+ 	      final_sym->attr.use_assoc = 1;
+ 	      final_sym->module = derived->module;
+ 	    }
+ 	}
      }
    return true;
  }
diff -Nrcpad gcc-17-20260705/gcc/fortran/expr.cc gcc-17-20260712/gcc/fortran/expr.cc
*** gcc-17-20260705/gcc/fortran/expr.cc	Sun Jul  5 22:32:08 2026
--- gcc-17-20260712/gcc/fortran/expr.cc	Sun Jul 12 22:32:08 2026
*************** simplify_const_ref (gfc_expr *p)
*** 2162,2177 ****
        switch (p->ref->type)
  	{
  	case REF_ARRAY:
! 	  switch (p->ref->u.ar.type)
  	    {
! 	    case AR_ELEMENT:
! 	      /* <type/kind spec>, parameter :: x(<int>) = scalar_expr
! 		 will generate this.  */
! 	      if (p->expr_type != EXPR_ARRAY)
  		{
! 		  remove_subobject_ref (p, NULL);
! 		  break;
  		}
  	      if (!find_array_element (p->value.constructor, &p->ref->u.ar, &cons))
  		return false;
  
--- 2162,2187 ----
        switch (p->ref->type)
  	{
  	case REF_ARRAY:
! 	  /* <type/kind spec>, parameter :: x(<int>) = scalar_expr
! 	     will generate this.  */
! 	  if (p->expr_type != EXPR_ARRAY)
  	    {
! 	      if (p->ref->u.ar.type == AR_ELEMENT)
  		{
! 		  int dim;
! 		  for (dim = 0; dim < p->ref->u.ar.dimen; dim++)
! 		    if (!p->ref->u.ar.start[dim]
! 			|| p->ref->u.ar.start[dim]->expr_type != EXPR_CONSTANT)
! 		      return true;
  		}
+ 
+ 	      remove_subobject_ref (p, NULL);
+ 	      break;
+ 	    }
+ 
+ 	  switch (p->ref->u.ar.type)
+ 	    {
+ 	    case AR_ELEMENT:
  	      if (!find_array_element (p->value.constructor, &p->ref->u.ar, &cons))
  		return false;
  
diff -Nrcpad gcc-17-20260705/gcc/fortran/interface.cc gcc-17-20260712/gcc/fortran/interface.cc
*** gcc-17-20260705/gcc/fortran/interface.cc	Sun Jul  5 22:32:08 2026
--- gcc-17-20260712/gcc/fortran/interface.cc	Sun Jul 12 22:32:08 2026
*************** find_symtree0 (gfc_symtree *root, gfc_sy
*** 4885,4891 ****
  {
    gfc_symtree * st;
  
!   if (root->n.sym == sym)
      return root;
  
    st = NULL;
--- 4885,4891 ----
  {
    gfc_symtree * st;
  
!   if (root == NULL || root->n.sym == sym)
      return root;
  
    st = NULL;
*************** gfc_find_sym_in_symtree (gfc_symbol *sym
*** 4918,4923 ****
--- 4918,4931 ----
        st = find_symtree0 (ns->sym_root, sym);
        if (st)
  	return st;
+ 
+       /* Search user-defined operators.  */
+       if (ns->uop_root && sym->attr.function)
+ 	{
+ 	  st = find_symtree0 (ns->uop_root, sym);
+ 	  if (st)
+ 	    return st;
+ 	}
      }
    gfc_internal_error ("Unable to find symbol %qs", sym->name);
    /* Not reached.  */
diff -Nrcpad gcc-17-20260705/gcc/fortran/intrinsic.texi gcc-17-20260712/gcc/fortran/intrinsic.texi
*** gcc-17-20260705/gcc/fortran/intrinsic.texi	Sun Jul  5 22:32:08 2026
--- gcc-17-20260712/gcc/fortran/intrinsic.texi	Sun Jul 12 22:32:08 2026
*************** Degrees function: @*
*** 4611,4619 ****
  @section @code{COSD} --- Cosine function, degrees
  @fnindex COSD
  @fnindex DCOSD
- @fnindex CCOSD
- @fnindex ZCOSD
- @fnindex CDCOSD
  @cindex trigonometric function, cosine, degrees
  @cindex cosine, degrees
  
--- 4611,4616 ----
*************** end program test_cosd
*** 4649,4657 ****
  @headitem Name            @tab Argument            @tab Return type       @tab Standard
  @item @code{COSD(X)}   @tab @code{REAL(4) X}    @tab @code{REAL(4)}    @tab Fortran 2023
  @item @code{DCOSD(X)}  @tab @code{REAL(8) X}    @tab @code{REAL(8)}    @tab GNU extension
- @item @code{CCOSD(X)}  @tab @code{COMPLEX(4) X} @tab @code{COMPLEX(4)} @tab GNU extension
- @item @code{ZCOSD(X)}  @tab @code{COMPLEX(8) X} @tab @code{COMPLEX(8)} @tab GNU extension
- @item @code{CDCOSD(X)} @tab @code{COMPLEX(8) X} @tab @code{COMPLEX(8)} @tab GNU extension
  @end multitable
  
  @item @emph{Standard}:
--- 4646,4651 ----
*************** Degrees function: @*
*** 14057,14065 ****
  @section @code{SIND} --- Sine function, degrees
  @fnindex SIND
  @fnindex DSIND
- @fnindex CSIND
- @fnindex ZSIND
- @fnindex CDSIND
  @cindex trigonometric function, sine, degrees
  @cindex sine, degrees
  
--- 14051,14056 ----
*************** end program test_sind
*** 14094,14102 ****
  @headitem Name            @tab Argument             @tab Return type       @tab Standard
  @item @code{SIND(X)}   @tab @code{REAL(4) X}     @tab @code{REAL(4)}    @tab Fortran 2023
  @item @code{DSIND(X)}  @tab @code{REAL(8) X}     @tab @code{REAL(8)}    @tab GNU extension
- @item @code{CSIND(X)}  @tab @code{COMPLEX(4) X}  @tab @code{COMPLEX(4)} @tab GNU extension
- @item @code{ZSIND(X)}  @tab @code{COMPLEX(8) X}  @tab @code{COMPLEX(8)} @tab GNU extension
- @item @code{CDSIND(X)} @tab @code{COMPLEX(8) X}  @tab @code{COMPLEX(8)} @tab GNU extension
  @end multitable
  
  @item @emph{Standard}:
--- 14085,14090 ----
diff -Nrcpad gcc-17-20260705/gcc/fortran/iresolve.cc gcc-17-20260712/gcc/fortran/iresolve.cc
*** gcc-17-20260705/gcc/fortran/iresolve.cc	Sun Jul  5 22:32:08 2026
--- gcc-17-20260712/gcc/fortran/iresolve.cc	Sun Jul 12 22:32:08 2026
*************** gfc_resolve_trim (gfc_expr *f, gfc_expr
*** 3477,3501 ****
  
  /* Resolve the trigonometric functions.  This amounts to setting
     the function return type-spec from its argument and building a
!    library function names of the form _gfortran_sind_r4.  */
  
  void
  gfc_resolve_trig (gfc_expr *f, gfc_expr *x)
  {
    f->ts = x->ts;
    f->value.function.name
!     = gfc_get_string (PREFIX ("%s_%c%d"), f->value.function.isym->name,
  		      gfc_type_letter (x->ts.type),
  		      gfc_type_abi_kind (&x->ts));
  }
  
  void
! gfc_resolve_trig2 (gfc_expr *f, gfc_expr *y, gfc_expr *x)
  {
    f->ts = y->ts;
    f->value.function.name
!     = gfc_get_string (PREFIX ("%s_%d"), f->value.function.isym->name,
! 		      x->ts.kind);
  }
  
  
--- 3477,3516 ----
  
  /* Resolve the trigonometric functions.  This amounts to setting
     the function return type-spec from its argument and building a
!    library function names of the form _gfortran_specific__sind_r4.
!    Strip leading "d" from names of GNU extensions (dcosd, dsind, dtand,
!    and their inverses).  */
  
  void
  gfc_resolve_trig (gfc_expr *f, gfc_expr *x)
  {
+   const char *name;
    f->ts = x->ts;
+ 
+   name = f->value.function.isym->name;
+   if (name[0] == 'd')
+     name = &f->value.function.isym->name[1];
+ 
    f->value.function.name
!     = gfc_get_string ("__%s_%c%d", name,
  		      gfc_type_letter (x->ts.type),
  		      gfc_type_abi_kind (&x->ts));
  }
  
  void
! gfc_resolve_trig2 (gfc_expr *f, gfc_expr *y, gfc_expr *x ATTRIBUTE_UNUSED)
  {
+   const char *name;
    f->ts = y->ts;
+ 
+   name = f->value.function.isym->name;
+   if (name[0] == 'd')
+     name = &f->value.function.isym->name[1];
+ 
    f->value.function.name
!     = gfc_get_string ("__%s_%c%d", name,
! 		      gfc_type_letter (y->ts.type),
! 		      gfc_type_abi_kind (&y->ts));
  }
  
  
diff -Nrcpad gcc-17-20260705/gcc/fortran/match.cc gcc-17-20260712/gcc/fortran/match.cc
*** gcc-17-20260705/gcc/fortran/match.cc	Sun Jul  5 22:32:08 2026
--- gcc-17-20260712/gcc/fortran/match.cc	Sun Jul 12 22:32:08 2026
*************** gfc_match_allocate (void)
*** 5249,5255 ****
  
        if (gfc_match (" :: ") == MATCH_YES)
  	{
! 	  if (!gfc_notify_std (GFC_STD_F2003, "typespec in ALLOCATE at %L",
  			       &old_locus))
  	    goto cleanup;
  
--- 5249,5255 ----
  
        if (gfc_match (" :: ") == MATCH_YES)
  	{
! 	  if (!gfc_notify_std (GFC_STD_F2003, "type-spec in ALLOCATE at %L",
  			       &old_locus))
  	    goto cleanup;
  
*************** gfc_match_allocate (void)
*** 5281,5286 ****
--- 5281,5296 ----
  	  ts.type = BT_UNKNOWN;
  	  gfc_current_locus = old_locus;
  	}
+ 
+       /* F2018:C937 (R927) type-spec shall not specify a type that has a
+ 	 coarray ultimate component.  Similar text in F2008:C640 (R626).  */
+       if (ts.type == BT_DERIVED
+ 	  && ts.u.derived->attr.coarray_comp)
+ 	{
+ 	  gfc_error ("Type-spec at %L has a coarray ultimate component",
+ 		     &old_locus);
+ 	  goto cleanup;
+ 	}
      }
  
    for (;;)
*************** gfc_match_allocate (void)
*** 5405,5411 ****
  	  if (!gfc_type_compatible (&tail->expr->ts, &ts))
  	    {
  	      gfc_error ("Type of entity at %L is type incompatible with "
! 			 "typespec", &tail->expr->where);
  	      goto cleanup;
  	    }
  
--- 5415,5421 ----
  	  if (!gfc_type_compatible (&tail->expr->ts, &ts))
  	    {
  	      gfc_error ("Type of entity at %L is type incompatible with "
! 			 "type-spec", &tail->expr->where);
  	      goto cleanup;
  	    }
  
*************** gfc_match_allocate (void)
*** 5413,5419 ****
  	  if (ts.kind != tail->expr->ts.kind && !UNLIMITED_POLY (tail->expr))
  	    {
  	      gfc_error ("Kind type parameter for entity at %L differs from "
! 			 "the kind type parameter of the typespec",
  			 &tail->expr->where);
  	      goto cleanup;
  	    }
--- 5423,5429 ----
  	  if (ts.kind != tail->expr->ts.kind && !UNLIMITED_POLY (tail->expr))
  	    {
  	      gfc_error ("Kind type parameter for entity at %L differs from "
! 			 "the kind type parameter of the type-spec",
  			 &tail->expr->where);
  	      goto cleanup;
  	    }
*************** alloc_opt_list:
*** 5508,5514 ****
  	  /* The next 2 conditionals check C631.  */
  	  if (ts.type != BT_UNKNOWN)
  	    {
! 	      gfc_error ("SOURCE tag at %L conflicts with the typespec at %L",
  			 &tmp->where, &old_locus);
  	      goto cleanup;
  	    }
--- 5518,5524 ----
  	  /* The next 2 conditionals check C631.  */
  	  if (ts.type != BT_UNKNOWN)
  	    {
! 	      gfc_error ("SOURCE tag at %L conflicts with the type-spec at %L",
  			 &tmp->where, &old_locus);
  	      goto cleanup;
  	    }
*************** alloc_opt_list:
*** 5519,5524 ****
--- 5529,5536 ----
  				  &tmp->where))
  	    goto cleanup;
  
+ 
+ 
  	  source = tmp;
  	  tmp = NULL;
  	  saw_source = true;
*************** alloc_opt_list:
*** 5568,5573 ****
--- 5580,5596 ----
    if (gfc_match (" )%t") != MATCH_YES)
      goto syntax;
  
+   /* C949 (R930) The declared type of source-expr shall not have a
+      coarray ultimate component. */
+   if (source
+       && source->ts.type == BT_DERIVED
+       && source->ts.u.derived->attr.coarray_comp)
+     {
+       gfc_error ("Declared type of source expression at %L has a coarray "
+ 		 "ultimate component", &source->where);
+       goto cleanup;
+     }
+ 
    /* Check F08:C637.  */
    if (source && mold)
      {
diff -Nrcpad gcc-17-20260705/gcc/fortran/module.cc gcc-17-20260712/gcc/fortran/module.cc
*** gcc-17-20260705/gcc/fortran/module.cc	Sun Jul  5 22:32:08 2026
--- gcc-17-20260712/gcc/fortran/module.cc	Sun Jul 12 22:32:08 2026
*************** read_module (void)
*** 6053,6058 ****
--- 6053,6072 ----
  				module_name, 0))
  	    continue;
  
+ 	  /* Skip re-importing a derived type already visible via host
+ 	     association from the same module.  */
+ 	  if (!only_flag && !info->u.rsym.renamed
+ 		&& strcmp (name, module_name) != 0
+ 		&& gfc_current_ns->parent)
+ 	    {
+ 	      gfc_symbol *host_sym;
+ 	      gfc_find_symbol (name, gfc_current_ns, 1, &host_sym);
+ 	      if (host_sym && host_sym->attr.flavor == FL_DERIVED
+ 		  && host_sym->module
+ 		  && strcmp (host_sym->module, module_name) == 0)
+ 		continue;
+ 	    }
+ 
  	  st = gfc_find_symtree (gfc_current_ns->sym_root, p);
  
  	  if (st != NULL
diff -Nrcpad gcc-17-20260705/gcc/fortran/primary.cc gcc-17-20260712/gcc/fortran/primary.cc
*** gcc-17-20260705/gcc/fortran/primary.cc	Sun Jul  5 22:32:08 2026
--- gcc-17-20260712/gcc/fortran/primary.cc	Sun Jul 12 22:32:08 2026
*************** gfc_match_rvalue (gfc_expr **result)
*** 4025,4031 ****
  	 end up here.  Unfortunately, sym->value->expr_type is set to
  	 EXPR_CONSTANT, and so the if () branch would be followed without
  	 the !sym->as check.  */
!       if (sym->value && sym->value->expr_type != EXPR_ARRAY && !sym->as)
  	e = gfc_copy_expr (sym->value);
        else
  	{
--- 4025,4032 ----
  	 end up here.  Unfortunately, sym->value->expr_type is set to
  	 EXPR_CONSTANT, and so the if () branch would be followed without
  	 the !sym->as check.  */
!       if (sym->value && sym->value->expr_type != EXPR_ARRAY
! 	  && sym->value->expr_type != EXPR_VARIABLE && !sym->as)
  	e = gfc_copy_expr (sym->value);
        else
  	{
diff -Nrcpad gcc-17-20260705/gcc/fortran/trans-array.cc gcc-17-20260712/gcc/fortran/trans-array.cc
*** gcc-17-20260705/gcc/fortran/trans-array.cc	Sun Jul  5 22:32:08 2026
--- gcc-17-20260712/gcc/fortran/trans-array.cc	Sun Jul 12 22:32:08 2026
*************** gfc_array_init_size (tree descriptor, in
*** 6069,6074 ****
--- 6069,6076 ----
  	   && expr3 && expr3->ts.type != BT_CLASS
  	   && expr3_elem_size != NULL_TREE && expr3_desc == NULL_TREE)
      {
+       tmp = gfc_conv_descriptor_dtype (descriptor);
+       gfc_add_modify (pblock, tmp, gfc_get_dtype (type));
        tmp = gfc_conv_descriptor_elem_len (descriptor);
        gfc_add_modify (pblock, tmp,
  		      fold_convert (TREE_TYPE (tmp), expr3_elem_size));
*************** gfc_conv_array_initializer (tree type, g
*** 6683,6689 ****
  
    if (expr->expr_type == EXPR_VARIABLE
        && expr->symtree->n.sym->attr.flavor == FL_PARAMETER
!       && expr->symtree->n.sym->value)
      expr = expr->symtree->n.sym->value;
  
    /* After parameter substitution the expression should be a constant, array
--- 6685,6692 ----
  
    if (expr->expr_type == EXPR_VARIABLE
        && expr->symtree->n.sym->attr.flavor == FL_PARAMETER
!       && expr->symtree->n.sym->value
!       && !expr->ref)
      expr = expr->symtree->n.sym->value;
  
    /* After parameter substitution the expression should be a constant, array
*************** gfc_tree_array_size (stmtblock_t *block,
*** 8677,8691 ****
    gcc_assert (GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (desc)));
    enum gfc_array_kind akind = GFC_TYPE_ARRAY_AKIND (TREE_TYPE (desc));
    if (expr == NULL || expr->rank < 0)
!     rank = fold_convert (signed_char_type_node,
! 			 gfc_conv_descriptor_rank (desc));
    else
!     rank = build_int_cst (signed_char_type_node, expr->rank);
  
    if (dim || (expr && expr->rank == 1))
      {
!       if (!dim)
! 	dim = gfc_index_zero_node;
        tree ubound = gfc_conv_descriptor_ubound_get (desc, dim);
        tree lbound = gfc_conv_descriptor_lbound_get (desc, dim);
  
--- 8680,8695 ----
    gcc_assert (GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (desc)));
    enum gfc_array_kind akind = GFC_TYPE_ARRAY_AKIND (TREE_TYPE (desc));
    if (expr == NULL || expr->rank < 0)
!     rank = gfc_conv_descriptor_rank (desc);
    else
!     rank = gfc_rank_cst[expr->rank];
  
    if (dim || (expr && expr->rank == 1))
      {
!       if (dim)
! 	dim = fold_convert_loc (input_location, gfc_array_dim_rank_type, dim);
!       else
! 	dim = gfc_rank_cst[0];
        tree ubound = gfc_conv_descriptor_ubound_get (desc, dim);
        tree lbound = gfc_conv_descriptor_lbound_get (desc, dim);
  
*************** gfc_tree_array_size (stmtblock_t *block,
*** 8702,8712 ****
        if (akind == GFC_ARRAY_ASSUMED_RANK_CONT
  	  || akind == GFC_ARRAY_ASSUMED_RANK)
  	{
! 	  tmp = fold_build2_loc (input_location, MINUS_EXPR, signed_char_type_node,
! 				 rank, build_int_cst (signed_char_type_node, 1));
  	  cond = fold_build2_loc (input_location, EQ_EXPR, boolean_type_node,
! 				  fold_convert (signed_char_type_node, dim),
! 				  tmp);
  	  tmp = fold_build2_loc (input_location, EQ_EXPR, boolean_type_node,
  				 gfc_conv_descriptor_ubound_get (desc, dim),
  				 build_int_cst (gfc_array_index_type, -1));
--- 8706,8716 ----
        if (akind == GFC_ARRAY_ASSUMED_RANK_CONT
  	  || akind == GFC_ARRAY_ASSUMED_RANK)
  	{
! 	  tmp = fold_build2_loc (input_location, MINUS_EXPR,
! 				 gfc_array_dim_rank_type, rank,
! 				 gfc_rank_cst[1]);
  	  cond = fold_build2_loc (input_location, EQ_EXPR, boolean_type_node,
! 				  dim, tmp);
  	  tmp = fold_build2_loc (input_location, EQ_EXPR, boolean_type_node,
  				 gfc_conv_descriptor_ubound_get (desc, dim),
  				 build_int_cst (gfc_array_index_type, -1));
*************** gfc_tree_array_size (stmtblock_t *block,
*** 8729,8738 ****
    gfc_init_block (&loop_body);
  
    /* Loop: for (i = 0; i < rank; ++i).  */
!   tree idx = gfc_create_var (signed_char_type_node, "idx");
    /* Loop body.  */
    /* #if (assumed-rank + !allocatable && !pointer)
!        if (idx == rank - 1 && dim[idx].ubound == -1)
  	 extent = -1;
         else
       #endif
--- 8733,8742 ----
    gfc_init_block (&loop_body);
  
    /* Loop: for (i = 0; i < rank; ++i).  */
!   tree idx = gfc_create_var (gfc_array_dim_rank_type, "idx");
    /* Loop body.  */
    /* #if (assumed-rank + !allocatable && !pointer)
!        if (idx + 1 == rank && dim[idx].ubound == -1)
  	 extent = -1;
         else
       #endif
*************** gfc_tree_array_size (stmtblock_t *block,
*** 8743,8752 ****
    cond = NULL_TREE;
    if (akind == GFC_ARRAY_ASSUMED_RANK_CONT || akind == GFC_ARRAY_ASSUMED_RANK)
      {
!       tmp = fold_build2_loc (input_location, MINUS_EXPR, signed_char_type_node,
! 			     rank, build_int_cst (signed_char_type_node, 1));
        cond = fold_build2_loc (input_location, EQ_EXPR, boolean_type_node,
! 				  idx, tmp);
        tmp = fold_build2_loc (input_location, EQ_EXPR, boolean_type_node,
  			     gfc_conv_descriptor_ubound_get (desc, idx),
  			     build_int_cst (gfc_array_index_type, -1));
--- 8747,8756 ----
    cond = NULL_TREE;
    if (akind == GFC_ARRAY_ASSUMED_RANK_CONT || akind == GFC_ARRAY_ASSUMED_RANK)
      {
!       tmp = fold_build2_loc (input_location, PLUS_EXPR,
! 			     gfc_array_dim_rank_type, idx, gfc_rank_cst[1]);
        cond = fold_build2_loc (input_location, EQ_EXPR, boolean_type_node,
! 			      tmp, rank);
        tmp = fold_build2_loc (input_location, EQ_EXPR, boolean_type_node,
  			     gfc_conv_descriptor_ubound_get (desc, idx),
  			     build_int_cst (gfc_array_index_type, -1));
*************** gfc_conv_array_parameter (gfc_se *se, gf
*** 9112,9118 ****
  	      gfc_add_modify (&block, gfc_conv_descriptor_dtype (arr),
  			      gfc_conv_descriptor_dtype (se->expr));
  	      gfc_add_modify (&block, gfc_conv_descriptor_rank (arr),
! 			      build_int_cst (signed_char_type_node, 1));
  	      gfc_conv_descriptor_span_set (&block, arr,
  					    gfc_conv_descriptor_span_get (arr));
  	      gfc_conv_descriptor_offset_set (&block, arr, gfc_index_zero_node);
--- 9116,9122 ----
  	      gfc_add_modify (&block, gfc_conv_descriptor_dtype (arr),
  			      gfc_conv_descriptor_dtype (se->expr));
  	      gfc_add_modify (&block, gfc_conv_descriptor_rank (arr),
! 			      gfc_rank_cst[1]);
  	      gfc_conv_descriptor_span_set (&block, arr,
  					    gfc_conv_descriptor_span_get (arr));
  	      gfc_conv_descriptor_offset_set (&block, arr, gfc_index_zero_node);
*************** gfc_conv_array_parameter (gfc_se *se, gf
*** 9275,9283 ****
  
  	      if (expr->rank == -1)
  		{
! 		  tree idx = gfc_create_var (TREE_TYPE (gfc_conv_descriptor_rank
! 							(old_desc)),
! 					     "idx");
  		  tree stride = gfc_create_var (gfc_array_index_type, "stride");
  		  stmtblock_t loop_body;
  
--- 9279,9285 ----
  
  	      if (expr->rank == -1)
  		{
! 		  tree idx = gfc_create_var (gfc_array_dim_rank_type, "idx");
  		  tree stride = gfc_create_var (gfc_array_index_type, "stride");
  		  stmtblock_t loop_body;
  
diff -Nrcpad gcc-17-20260705/gcc/fortran/trans-const.cc gcc-17-20260712/gcc/fortran/trans-const.cc
*** gcc-17-20260705/gcc/fortran/trans-const.cc	Sun Jul  5 22:32:08 2026
--- gcc-17-20260712/gcc/fortran/trans-const.cc	Sun Jul 12 22:32:08 2026
*************** along with GCC; see the file COPYING3.
*** 35,40 ****
--- 35,42 ----
  #include "target-memory.h"
  
  tree gfc_rank_cst[GFC_MAX_DIMENSIONS + 1];
+ tree gfc_index_zero_node;
+ tree gfc_index_one_node;
  
  /* Build a constant with given type from an int_cst.  */
  
*************** gfc_init_constants (void)
*** 194,200 ****
    int n;
  
    for (n = 0; n <= GFC_MAX_DIMENSIONS; n++)
!     gfc_rank_cst[n] = build_int_cst (gfc_array_index_type, n);
  }
  
  /* Converts a GMP integer into a backend tree node.  */
--- 196,205 ----
    int n;
  
    for (n = 0; n <= GFC_MAX_DIMENSIONS; n++)
!     gfc_rank_cst[n] = build_int_cst (gfc_array_dim_rank_type, n);
! 
!   gfc_index_zero_node = build_zero_cst (gfc_array_index_type);
!   gfc_index_one_node = build_one_cst (gfc_array_index_type);
  }
  
  /* Converts a GMP integer into a backend tree node.  */
diff -Nrcpad gcc-17-20260705/gcc/fortran/trans-const.h gcc-17-20260712/gcc/fortran/trans-const.h
*** gcc-17-20260705/gcc/fortran/trans-const.h	Sun Jul  5 22:32:08 2026
--- gcc-17-20260712/gcc/fortran/trans-const.h	Sun Jul 12 22:32:08 2026
*************** tree gfc_build_const (tree, tree);
*** 65,69 ****
  /* Integer constants 0..GFC_MAX_DIMENSIONS.  */
  extern GTY(()) tree gfc_rank_cst[GFC_MAX_DIMENSIONS + 1];
  
! #define gfc_index_zero_node gfc_rank_cst[0]
! #define gfc_index_one_node gfc_rank_cst[1]
--- 65,70 ----
  /* Integer constants 0..GFC_MAX_DIMENSIONS.  */
  extern GTY(()) tree gfc_rank_cst[GFC_MAX_DIMENSIONS + 1];
  
! /* Integer constants 0 and 1, of array index type.  */
! extern GTY(()) tree gfc_index_zero_node;
! extern GTY(()) tree gfc_index_one_node;
diff -Nrcpad gcc-17-20260705/gcc/fortran/trans-decl.cc gcc-17-20260712/gcc/fortran/trans-decl.cc
*** gcc-17-20260705/gcc/fortran/trans-decl.cc	Sun Jul  5 22:32:08 2026
--- gcc-17-20260712/gcc/fortran/trans-decl.cc	Sun Jul 12 22:32:08 2026
*************** module_sym:
*** 2423,2428 ****
--- 2423,2429 ----
  
        memset (&e, 0, sizeof (e));
        e.expr_type = EXPR_FUNCTION;
+       e.value.function.isym = isym;
  
        memset (&argexpr, 0, sizeof (argexpr));
        gcc_assert (isym->formal);
*************** gfc_conv_cfi_to_gfc (stmtblock_t *init,
*** 7602,7615 ****
    if (sym->as->rank < 0)
      {
        /* Set gfc->dtype.rank, if assumed-rank.  */
!       rank = gfc_get_cfi_desc_rank (cfi);
        gfc_add_modify (&block, gfc_conv_descriptor_rank (gfc_desc), rank);
      }
    else if (!GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (gfc_desc)))
      /* In that case, the CFI rank and the declared rank can differ.  */
!     rank = gfc_get_cfi_desc_rank (cfi);
    else
!     rank = build_int_cst (signed_char_type_node, sym->as->rank);
  
    /* With bind(C), the standard requires that both Fortran callers and callees
       handle noncontiguous arrays passed to an dummy with 'contiguous' attribute
--- 7603,7618 ----
    if (sym->as->rank < 0)
      {
        /* Set gfc->dtype.rank, if assumed-rank.  */
!       rank = fold_convert_loc (input_location, gfc_array_dim_rank_type,
! 			       gfc_get_cfi_desc_rank (cfi));
        gfc_add_modify (&block, gfc_conv_descriptor_rank (gfc_desc), rank);
      }
    else if (!GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (gfc_desc)))
      /* In that case, the CFI rank and the declared rank can differ.  */
!     rank = fold_convert_loc (input_location, gfc_array_dim_rank_type,
! 			     gfc_get_cfi_desc_rank (cfi));
    else
!     rank = gfc_rank_cst[sym->as->rank];
  
    /* With bind(C), the standard requires that both Fortran callers and callees
       handle noncontiguous arrays passed to an dummy with 'contiguous' attribute
*************** gfc_conv_cfi_to_gfc (stmtblock_t *init,
*** 7656,7662 ****
  
        /* for (i = 1; i < rank; ++i)
  	   cond &&= dim[i].sm != (dv->dim[i - 1].sm * dv->dim[i - 1].extent) */
!       idx = gfc_create_var (TREE_TYPE (rank), "idx");
        stmtblock_t loop_body;
        gfc_init_block (&loop_body);
        tmp = fold_build2_loc (input_location, MINUS_EXPR, TREE_TYPE (idx),
--- 7659,7665 ----
  
        /* for (i = 1; i < rank; ++i)
  	   cond &&= dim[i].sm != (dv->dim[i - 1].sm * dv->dim[i - 1].extent) */
!       idx = gfc_create_var (gfc_array_dim_rank_type, "idx");
        stmtblock_t loop_body;
        gfc_init_block (&loop_body);
        tmp = fold_build2_loc (input_location, MINUS_EXPR, TREE_TYPE (idx),
*************** gfc_conv_cfi_to_gfc (stmtblock_t *init,
*** 7706,7712 ****
  	   {
  	     shift = 0;
  	     tmpidx = idx
! 	     for (dim = 0; dim < rank; ++dim)
  		{
  		  shift += (tmpidx % extent[d]) * sm[d]
  		  tmpidx = tmpidx / extend[d]
--- 7709,7715 ----
  	   {
  	     shift = 0;
  	     tmpidx = idx
! 	     for (d = 0; d < rank; ++d)
  		{
  		  shift += (tmpidx % extent[d]) * sm[d]
  		  tmpidx = tmpidx / extend[d]
*************** gfc_conv_cfi_to_gfc (stmtblock_t *init,
*** 7721,7727 ****
        gfc_add_modify (&loop_body, tmpidx, idx);
        stmtblock_t inner_loop;
        gfc_init_block (&inner_loop);
!       tree dim = gfc_create_var (TREE_TYPE (rank), "dim");
        /* shift += (tmpidx % extent[d]) * sm[d] */
        tmp = fold_build2_loc (input_location, TRUNC_MOD_EXPR,
  			     size_type_node, tmpidx,
--- 7724,7730 ----
        gfc_add_modify (&loop_body, tmpidx, idx);
        stmtblock_t inner_loop;
        gfc_init_block (&inner_loop);
!       tree dim = gfc_create_var (gfc_array_dim_rank_type, "dim");
        /* shift += (tmpidx % extent[d]) * sm[d] */
        tmp = fold_build2_loc (input_location, TRUNC_MOD_EXPR,
  			     size_type_node, tmpidx,
*************** gfc_conv_cfi_to_gfc (stmtblock_t *init,
*** 7739,7747 ****
        gfc_add_modify (&inner_loop, tmpidx,
  		      fold_build2_loc (input_location, TRUNC_DIV_EXPR,
  				       size_type_node, tmpidx, tmp));
!       gfc_simple_for_loop (&loop_body, dim, build_zero_cst (TREE_TYPE (rank)),
! 			   rank, LT_EXPR, build_int_cst (TREE_TYPE (dim), 1),
! 			   gfc_finish_block (&inner_loop));
        /* Assign.  */
        tmp = fold_convert (pchar_type_node, gfc_get_cfi_desc_base_addr (cfi));
        tmp = fold_build2 (POINTER_PLUS_EXPR, pchar_type_node, tmp, shift);
--- 7742,7749 ----
        gfc_add_modify (&inner_loop, tmpidx,
  		      fold_build2_loc (input_location, TRUNC_DIV_EXPR,
  				       size_type_node, tmpidx, tmp));
!       gfc_simple_for_loop (&loop_body, dim, gfc_rank_cst[0], rank, LT_EXPR,
! 			   gfc_rank_cst[1], gfc_finish_block (&inner_loop));
        /* Assign.  */
        tmp = fold_convert (pchar_type_node, gfc_get_cfi_desc_base_addr (cfi));
        tmp = fold_build2 (POINTER_PLUS_EXPR, pchar_type_node, tmp, shift);
*************** gfc_conv_cfi_to_gfc (stmtblock_t *init,
*** 7824,7830 ****
        }
  
    /* Loop: for (i = 0; i < rank; ++i).  */
!   idx = gfc_create_var (TREE_TYPE (rank), "idx");
  
    /* Loop body.  */
    stmtblock_t loop_body;
--- 7826,7832 ----
        }
  
    /* Loop: for (i = 0; i < rank; ++i).  */
!   idx = gfc_create_var (gfc_array_dim_rank_type, "idx");
  
    /* Loop body.  */
    stmtblock_t loop_body;
*************** done:
*** 7943,7949 ****
  	   {
  	     shift = 0;
  	     tmpidx = idx
! 	     for (dim = 0; dim < rank; ++dim)
  		{
  		  shift += (tmpidx % extent[d]) * sm[d]
  		  tmpidx = tmpidx / extend[d]
--- 7945,7951 ----
  	   {
  	     shift = 0;
  	     tmpidx = idx
! 	     for (d = 0; d < rank; ++d)
  		{
  		  shift += (tmpidx % extent[d]) * sm[d]
  		  tmpidx = tmpidx / extend[d]
*************** done:
*** 7960,7966 ****
  	  gfc_add_modify (&loop_body, tmpidx, idx);
  	  stmtblock_t inner_loop;
  	  gfc_init_block (&inner_loop);
! 	  tree dim = gfc_create_var (TREE_TYPE (rank), "dim");
  	  /* shift += (tmpidx % extent[d]) * sm[d] */
  	  tmp = fold_convert (size_type_node,
  			      gfc_get_cfi_dim_extent (cfi, dim));
--- 7962,7968 ----
  	  gfc_add_modify (&loop_body, tmpidx, idx);
  	  stmtblock_t inner_loop;
  	  gfc_init_block (&inner_loop);
! 	  tree dim = gfc_create_var (gfc_array_dim_rank_type, "dim");
  	  /* shift += (tmpidx % extent[d]) * sm[d] */
  	  tmp = fold_convert (size_type_node,
  			      gfc_get_cfi_dim_extent (cfi, dim));
*************** done:
*** 7979,7988 ****
  	  gfc_add_modify (&inner_loop, tmpidx,
  			  fold_build2_loc (input_location, TRUNC_DIV_EXPR,
  					   size_type_node, tmpidx, tmp));
! 	  gfc_simple_for_loop (&loop_body, dim,
! 			       build_zero_cst (TREE_TYPE (rank)), rank, LT_EXPR,
! 			       build_int_cst (TREE_TYPE (dim), 1),
! 			       gfc_finish_block (&inner_loop));
  	  /* Assign.  */
  	  tree rhs;
  	  tmp = fold_convert (pchar_type_node,
--- 7981,7988 ----
  	  gfc_add_modify (&inner_loop, tmpidx,
  			  fold_build2_loc (input_location, TRUNC_DIV_EXPR,
  					   size_type_node, tmpidx, tmp));
! 	  gfc_simple_for_loop (&loop_body, dim, gfc_rank_cst[0], rank, LT_EXPR,
! 			       gfc_rank_cst[1], gfc_finish_block (&inner_loop));
  	  /* Assign.  */
  	  tree rhs;
  	  tmp = fold_convert (pchar_type_node,
*************** done:
*** 8049,8055 ****
    gfc_init_block (&block2);
  
    /* Loop: for (i = 0; i < rank; ++i).  */
!   idx = gfc_create_var (TREE_TYPE (rank), "idx");
  
    /* Loop body.  */
    gfc_init_block (&loop_body);
--- 8049,8055 ----
    gfc_init_block (&block2);
  
    /* Loop: for (i = 0; i < rank; ++i).  */
!   idx = gfc_create_var (gfc_array_dim_rank_type, "idx");
  
    /* Loop body.  */
    gfc_init_block (&loop_body);
*************** done:
*** 8070,8078 ****
    gfc_add_modify (&loop_body, gfc_get_cfi_dim_sm (cfi, idx), tmp);
  
    /* Generate loop.  */
!   gfc_simple_for_loop (&block2, idx, build_zero_cst (TREE_TYPE (idx)),
! 		       rank, LT_EXPR, build_int_cst (TREE_TYPE (idx), 1),
! 		       gfc_finish_block (&loop_body));
    /* if (gfc->data != NULL) { block2 }.  */
    tmp = gfc_get_cfi_desc_base_addr (cfi),
    tmp = fold_build2_loc (input_location, NE_EXPR, boolean_type_node,
--- 8070,8077 ----
    gfc_add_modify (&loop_body, gfc_get_cfi_dim_sm (cfi, idx), tmp);
  
    /* Generate loop.  */
!   gfc_simple_for_loop (&block2, idx, gfc_rank_cst[0], rank, LT_EXPR,
! 		       gfc_rank_cst[1], gfc_finish_block (&loop_body));
    /* if (gfc->data != NULL) { block2 }.  */
    tmp = gfc_get_cfi_desc_base_addr (cfi),
    tmp = fold_build2_loc (input_location, NE_EXPR, boolean_type_node,
diff -Nrcpad gcc-17-20260705/gcc/fortran/trans-descriptor.cc gcc-17-20260712/gcc/fortran/trans-descriptor.cc
*** gcc-17-20260705/gcc/fortran/trans-descriptor.cc	Sun Jul  5 22:32:08 2026
--- gcc-17-20260712/gcc/fortran/trans-descriptor.cc	Sun Jul 12 22:32:08 2026
*************** gfc_conv_descriptor_rank (tree desc)
*** 159,165 ****
    dtype = gfc_conv_descriptor_dtype (desc);
    tmp = gfc_advance_chain (TYPE_FIELDS (TREE_TYPE (dtype)), GFC_DTYPE_RANK);
    gcc_assert (tmp != NULL_TREE
! 	      && TREE_TYPE (tmp) == signed_char_type_node);
    return fold_build3_loc (input_location, COMPONENT_REF, TREE_TYPE (tmp),
  			  dtype, tmp, NULL_TREE);
  }
--- 159,165 ----
    dtype = gfc_conv_descriptor_dtype (desc);
    tmp = gfc_advance_chain (TYPE_FIELDS (TREE_TYPE (dtype)), GFC_DTYPE_RANK);
    gcc_assert (tmp != NULL_TREE
! 	      && TREE_TYPE (tmp) == gfc_array_dim_rank_type);
    return fold_build3_loc (input_location, COMPONENT_REF, TREE_TYPE (tmp),
  			  dtype, tmp, NULL_TREE);
  }
diff -Nrcpad gcc-17-20260705/gcc/fortran/trans-expr.cc gcc-17-20260712/gcc/fortran/trans-expr.cc
*** gcc-17-20260705/gcc/fortran/trans-expr.cc	Sun Jul  5 22:32:08 2026
--- gcc-17-20260712/gcc/fortran/trans-expr.cc	Sun Jul 12 22:32:08 2026
*************** gfc_conv_variable (gfc_se * se, gfc_expr
*** 3405,3414 ****
        tree dim, lower, upper, cond;
        char *msg;
  
!       dim = fold_convert (signed_char_type_node,
  			  gfc_conv_descriptor_rank (se->expr));
!       dim = fold_build2_loc (input_location, MINUS_EXPR, signed_char_type_node,
! 			     dim, build_int_cst (signed_char_type_node, 1));
        lower = gfc_conv_descriptor_lbound_get (se->expr, dim);
        upper = gfc_conv_descriptor_ubound_get (se->expr, dim);
  
--- 3405,3414 ----
        tree dim, lower, upper, cond;
        char *msg;
  
!       dim = fold_convert (gfc_array_dim_rank_type,
  			  gfc_conv_descriptor_rank (se->expr));
!       dim = fold_build2_loc (input_location, MINUS_EXPR,
! 			     gfc_array_dim_rank_type, dim, gfc_rank_cst[1]);
        lower = gfc_conv_descriptor_lbound_get (se->expr, dim);
        upper = gfc_conv_descriptor_ubound_get (se->expr, dim);
  
*************** gfc_conv_gfc_desc_to_cfi_desc (gfc_se *p
*** 6277,6287 ****
    gfc_add_modify (&block, tmp,
  		  build_int_cst (TREE_TYPE (tmp), CFI_VERSION));
    if (e->rank < 0)
!     rank = fold_convert (signed_char_type_node, gfc_conv_descriptor_rank (gfc));
    else
!     rank = build_int_cst (signed_char_type_node, e->rank);
    tmp = gfc_get_cfi_desc_rank (cfi);
!   gfc_add_modify (&block, tmp, rank);
    int itype = CFI_type_other;
    if (e->ts.f90_type == BT_VOID)
      itype = (e->ts.u.derived->intmod_sym_id == ISOCBINDING_FUNPTR
--- 6277,6288 ----
    gfc_add_modify (&block, tmp,
  		  build_int_cst (TREE_TYPE (tmp), CFI_VERSION));
    if (e->rank < 0)
!     rank = gfc_conv_descriptor_rank (gfc);
    else
!     rank = gfc_rank_cst[e->rank];
    tmp = gfc_get_cfi_desc_rank (cfi);
!   gfc_add_modify (&block, tmp,
! 		  fold_convert (TREE_TYPE (tmp), rank));
    int itype = CFI_type_other;
    if (e->ts.f90_type == BT_VOID)
      itype = (e->ts.u.derived->intmod_sym_id == ISOCBINDING_FUNPTR
*************** gfc_conv_gfc_desc_to_cfi_desc (gfc_se *p
*** 6491,6497 ****
    if (e->rank != 0)
      {
        /* Loop: for (i = 0; i < rank; ++i).  */
!       tree idx = gfc_create_var (TREE_TYPE (rank), "idx");
        /* Loop body.  */
        stmtblock_t loop_body;
        gfc_init_block (&loop_body);
--- 6492,6498 ----
    if (e->rank != 0)
      {
        /* Loop: for (i = 0; i < rank; ++i).  */
!       tree idx = gfc_create_var (gfc_array_dim_rank_type, "idx");
        /* Loop body.  */
        stmtblock_t loop_body;
        gfc_init_block (&loop_body);
*************** gfc_conv_gfc_desc_to_cfi_desc (gfc_se *p
*** 6516,6524 ****
        gfc_add_modify (&loop_body, gfc_get_cfi_dim_sm (cfi, idx), tmp);
  
        /* Generate loop.  */
!       gfc_simple_for_loop (&block2, idx, build_int_cst (TREE_TYPE (idx), 0),
! 			   rank, LT_EXPR, build_int_cst (TREE_TYPE (idx), 1),
! 			   gfc_finish_block (&loop_body));
  
        if (e->expr_type == EXPR_VARIABLE
  	  && e->ref
--- 6517,6524 ----
        gfc_add_modify (&loop_body, gfc_get_cfi_dim_sm (cfi, idx), tmp);
  
        /* Generate loop.  */
!       gfc_simple_for_loop (&block2, idx, gfc_rank_cst[0], rank, LT_EXPR,
! 			   gfc_rank_cst[1], gfc_finish_block (&loop_body));
  
        if (e->expr_type == EXPR_VARIABLE
  	  && e->ref
*************** done:
*** 6600,6606 ****
        /* Calculate offset + set lbound, ubound and stride.  */
        gfc_conv_descriptor_offset_set (&block2, gfc, gfc_index_zero_node);
        /* Loop: for (i = 0; i < rank; ++i).  */
!       tree idx = gfc_create_var (TREE_TYPE (rank), "idx");
        /* Loop body.  */
        stmtblock_t loop_body;
        gfc_init_block (&loop_body);
--- 6600,6606 ----
        /* Calculate offset + set lbound, ubound and stride.  */
        gfc_conv_descriptor_offset_set (&block2, gfc, gfc_index_zero_node);
        /* Loop: for (i = 0; i < rank; ++i).  */
!       tree idx = gfc_create_var (gfc_array_dim_rank_type, "idx");
        /* Loop body.  */
        stmtblock_t loop_body;
        gfc_init_block (&loop_body);
*************** done:
*** 6632,6640 ****
  			     gfc_conv_descriptor_offset_get (gfc), tmp);
        gfc_conv_descriptor_offset_set (&loop_body, gfc, tmp);
        /* Generate loop.  */
!       gfc_simple_for_loop (&block2, idx, build_int_cst (TREE_TYPE (idx), 0),
! 			   rank, LT_EXPR, build_int_cst (TREE_TYPE (idx), 1),
! 			   gfc_finish_block (&loop_body));
      }
  
    if (e->ts.type == BT_CHARACTER && !e->ts.u.cl->length)
--- 6632,6639 ----
  			     gfc_conv_descriptor_offset_get (gfc), tmp);
        gfc_conv_descriptor_offset_set (&loop_body, gfc, tmp);
        /* Generate loop.  */
!       gfc_simple_for_loop (&block2, idx, gfc_rank_cst[0], rank, LT_EXPR,
! 			   gfc_rank_cst[1], gfc_finish_block (&loop_body));
      }
  
    if (e->ts.type == BT_CHARACTER && !e->ts.u.cl->length)
*************** gfc_trans_structure_assign (tree dest, g
*** 10472,10478 ****
  	      size = build_zero_cst (size_type_node);
  	      desc = field;
  	      gfc_add_modify (&block, gfc_conv_descriptor_rank (desc),
! 			      build_int_cst (signed_char_type_node, rank));
  	    }
  	  else
  	    {
--- 10471,10477 ----
  	      size = build_zero_cst (size_type_node);
  	      desc = field;
  	      gfc_add_modify (&block, gfc_conv_descriptor_rank (desc),
! 			      gfc_rank_cst[rank]);
  	    }
  	  else
  	    {
diff -Nrcpad gcc-17-20260705/gcc/fortran/trans-intrinsic.cc gcc-17-20260712/gcc/fortran/trans-intrinsic.cc
*** gcc-17-20260705/gcc/fortran/trans-intrinsic.cc	Sun Jul  5 22:32:08 2026
--- gcc-17-20260712/gcc/fortran/trans-intrinsic.cc	Sun Jul 12 22:32:08 2026
*************** trans_this_image (gfc_se * se, gfc_expr
*** 1876,1885 ****
        gcc_assert (se->loop->dimen == 1);
        gcc_assert (se->ss->info->expr == expr);
  
!       dim_arg = se->loop->loopvar[0];
        dim_arg = fold_build2_loc (input_location, PLUS_EXPR,
! 				 gfc_array_index_type, dim_arg,
! 				 build_int_cst (TREE_TYPE (dim_arg), 1));
        gfc_advance_se_ss_chain (se);
      }
    else
--- 1876,1886 ----
        gcc_assert (se->loop->dimen == 1);
        gcc_assert (se->ss->info->expr == expr);
  
!       dim_arg = fold_convert_loc (input_location, gfc_array_dim_rank_type,
! 				  se->loop->loopvar[0]);
        dim_arg = fold_build2_loc (input_location, PLUS_EXPR,
! 				 gfc_array_dim_rank_type, dim_arg,
! 				 gfc_rank_cst[1]);
        gfc_advance_se_ss_chain (se);
      }
    else
*************** trans_this_image (gfc_se * se, gfc_expr
*** 1888,1894 ****
        gcc_assert (expr->value.function.actual->next->expr);
        gfc_init_se (&argse, NULL);
        gfc_conv_expr_type (&argse, expr->value.function.actual->next->expr,
! 			  gfc_array_index_type);
        gfc_add_block_to_block (&se->pre, &argse.pre);
        dim_arg = argse.expr;
  
--- 1889,1895 ----
        gcc_assert (expr->value.function.actual->next->expr);
        gfc_init_se (&argse, NULL);
        gfc_conv_expr_type (&argse, expr->value.function.actual->next->expr,
! 			  gfc_array_dim_rank_type);
        gfc_add_block_to_block (&se->pre, &argse.pre);
        dim_arg = argse.expr;
  
*************** trans_this_image (gfc_se * se, gfc_expr
*** 1905,1912 ****
  	{
  	  dim_arg = gfc_evaluate_now (dim_arg, &se->pre);
  	  cond = fold_build2_loc (input_location, LT_EXPR, logical_type_node,
! 				  dim_arg,
! 				  build_int_cst (TREE_TYPE (dim_arg), 1));
  	  tmp = gfc_rank_cst[GFC_TYPE_ARRAY_CORANK (TREE_TYPE (desc))];
  	  tmp = fold_build2_loc (input_location, GT_EXPR, logical_type_node,
  				 dim_arg, tmp);
--- 1906,1912 ----
  	{
  	  dim_arg = gfc_evaluate_now (dim_arg, &se->pre);
  	  cond = fold_build2_loc (input_location, LT_EXPR, logical_type_node,
! 				  dim_arg, gfc_rank_cst[1]);
  	  tmp = gfc_rank_cst[GFC_TYPE_ARRAY_CORANK (TREE_TYPE (desc))];
  	  tmp = fold_build2_loc (input_location, GT_EXPR, logical_type_node,
  				 dim_arg, tmp);
*************** trans_this_image (gfc_se * se, gfc_expr
*** 1962,1984 ****
  
    m = gfc_create_var (type, NULL);
    ml = gfc_create_var (type, NULL);
!   loop_var = gfc_create_var (integer_type_node, NULL);
!   min_var = gfc_create_var (integer_type_node, NULL);
  
    /* m = this_image () - 1.  */
    gfc_add_modify (&se->pre, m, tmp);
  
    /* min_var = min (rank + corank-2, rank + dim_arg - 1).  */
!   tmp = fold_build2_loc (input_location, PLUS_EXPR, integer_type_node,
! 			 fold_convert (integer_type_node, dim_arg),
! 			 build_int_cst (integer_type_node, rank - 1));
!   tmp = fold_build2_loc (input_location, MIN_EXPR, integer_type_node,
! 			 build_int_cst (integer_type_node, rank + corank - 2),
! 			 tmp);
    gfc_add_modify (&se->pre, min_var, tmp);
  
    /* i = rank.  */
!   tmp = build_int_cst (integer_type_node, rank);
    gfc_add_modify (&se->pre, loop_var, tmp);
  
    exit_label = gfc_build_label_decl (NULL_TREE);
--- 1962,1985 ----
  
    m = gfc_create_var (type, NULL);
    ml = gfc_create_var (type, NULL);
!   loop_var = gfc_create_var (gfc_array_dim_rank_type, NULL);
!   min_var = gfc_create_var (gfc_array_dim_rank_type, NULL);
  
    /* m = this_image () - 1.  */
    gfc_add_modify (&se->pre, m, tmp);
  
    /* min_var = min (rank + corank-2, rank + dim_arg - 1).  */
!   tmp = fold_build2_loc (input_location, PLUS_EXPR, signed_char_type_node,
! 			 fold_convert_loc (input_location,
! 					   signed_char_type_node, dim_arg),
! 			 build_int_cst (signed_char_type_node, rank - 1));
!   tmp = fold_convert_loc (input_location, gfc_array_dim_rank_type, tmp);
!   tmp = fold_build2_loc (input_location, MIN_EXPR, gfc_array_dim_rank_type,
! 			 gfc_rank_cst[rank + corank - 2], tmp);
    gfc_add_modify (&se->pre, min_var, tmp);
  
    /* i = rank.  */
!   tmp = gfc_rank_cst[rank];
    gfc_add_modify (&se->pre, loop_var, tmp);
  
    exit_label = gfc_build_label_decl (NULL_TREE);
*************** trans_this_image (gfc_se * se, gfc_expr
*** 2011,2019 ****
  
    /* Increment loop variable: i++.  */
    gfc_add_modify (&loop, loop_var,
!                   fold_build2_loc (input_location, PLUS_EXPR, integer_type_node,
! 				   loop_var,
! 				   integer_one_node));
  
    /* Making the loop... actually loop!  */
    tmp = gfc_finish_block (&loop);
--- 2012,2020 ----
  
    /* Increment loop variable: i++.  */
    gfc_add_modify (&loop, loop_var,
! 		  fold_build2_loc (input_location, PLUS_EXPR,
! 				   TREE_TYPE (loop_var), loop_var,
! 				   gfc_rank_cst[1]));
  
    /* Making the loop... actually loop!  */
    tmp = gfc_finish_block (&loop);
*************** trans_this_image (gfc_se * se, gfc_expr
*** 2032,2038 ****
  
    lbound = gfc_conv_descriptor_lbound_get (desc,
  		fold_build2_loc (input_location, PLUS_EXPR,
! 				 gfc_array_index_type, dim_arg,
  				 build_int_cst (TREE_TYPE (dim_arg), rank-1)));
    lbound = fold_convert (type, lbound);
  
--- 2033,2039 ----
  
    lbound = gfc_conv_descriptor_lbound_get (desc,
  		fold_build2_loc (input_location, PLUS_EXPR,
! 				 TREE_TYPE (dim_arg), dim_arg,
  				 build_int_cst (TREE_TYPE (dim_arg), rank-1)));
    lbound = fold_convert (type, lbound);
  
*************** gfc_conv_intrinsic_bound (gfc_se * se, g
*** 2436,2454 ****
        bound = fold_build2_loc (input_location, MINUS_EXPR,
  			       gfc_array_index_type, bound,
  			       se->loop->from[0]);
      }
    else
      {
        /* use the passed argument.  */
        gcc_assert (arg2->expr);
        gfc_init_se (&argse, NULL);
!       gfc_conv_expr_type (&argse, arg2->expr, gfc_array_index_type);
        gfc_add_block_to_block (&se->pre, &argse.pre);
        bound = argse.expr;
        /* Convert from one based to zero based.  */
        bound = fold_build2_loc (input_location, MINUS_EXPR,
! 			       gfc_array_index_type, bound,
! 			       gfc_index_one_node);
      }
  
    /* TODO: don't re-evaluate the descriptor on each iteration.  */
--- 2437,2457 ----
        bound = fold_build2_loc (input_location, MINUS_EXPR,
  			       gfc_array_index_type, bound,
  			       se->loop->from[0]);
+       bound = fold_convert_loc (input_location, gfc_array_dim_rank_type,
+ 				bound);
      }
    else
      {
        /* use the passed argument.  */
        gcc_assert (arg2->expr);
        gfc_init_se (&argse, NULL);
!       gfc_conv_expr_type (&argse, arg2->expr, gfc_array_dim_rank_type);
        gfc_add_block_to_block (&se->pre, &argse.pre);
        bound = argse.expr;
        /* Convert from one based to zero based.  */
        bound = fold_build2_loc (input_location, MINUS_EXPR,
! 			       gfc_array_dim_rank_type, bound,
! 			       gfc_rank_cst[1]);
      }
  
    /* TODO: don't re-evaluate the descriptor on each iteration.  */
*************** gfc_conv_intrinsic_bound (gfc_se * se, g
*** 2481,2493 ****
          {
            bound = gfc_evaluate_now (bound, &se->pre);
            cond = fold_build2_loc (input_location, LT_EXPR, logical_type_node,
! 				  bound, build_int_cst (TREE_TYPE (bound), 0));
  	  if (as && as->type == AS_ASSUMED_RANK)
  	    tmp = gfc_conv_descriptor_rank (desc);
  	  else
  	    tmp = gfc_rank_cst[GFC_TYPE_ARRAY_RANK (TREE_TYPE (desc))];
            tmp = fold_build2_loc (input_location, GE_EXPR, logical_type_node,
! 				 bound, fold_convert(TREE_TYPE (bound), tmp));
            cond = fold_build2_loc (input_location, TRUTH_ORIF_EXPR,
  				  logical_type_node, cond, tmp);
            gfc_trans_runtime_check (true, false, cond, &se->pre, &expr->where,
--- 2484,2496 ----
          {
            bound = gfc_evaluate_now (bound, &se->pre);
            cond = fold_build2_loc (input_location, LT_EXPR, logical_type_node,
! 				  bound, gfc_rank_cst[0]);
  	  if (as && as->type == AS_ASSUMED_RANK)
  	    tmp = gfc_conv_descriptor_rank (desc);
  	  else
  	    tmp = gfc_rank_cst[GFC_TYPE_ARRAY_RANK (TREE_TYPE (desc))];
            tmp = fold_build2_loc (input_location, GE_EXPR, logical_type_node,
! 				 bound, tmp);
            cond = fold_build2_loc (input_location, TRUTH_ORIF_EXPR,
  				  logical_type_node, cond, tmp);
            gfc_trans_runtime_check (true, false, cond, &se->pre, &expr->where,
*************** gfc_conv_intrinsic_bound (gfc_se * se, g
*** 2577,2586 ****
        if (op != GFC_ISYM_LBOUND && assumed_rank_lb_one)
  	{
  	  tree minus_one = build_int_cst (gfc_array_index_type, -1);
! 	  tree rank = fold_convert (gfc_array_index_type,
! 				    gfc_conv_descriptor_rank (desc));
! 	  rank = fold_build2_loc (input_location, PLUS_EXPR,
! 				  gfc_array_index_type, rank, minus_one);
  
  	  /* Fix the expression to stop it from becoming even more
  	     complicated.  */
--- 2580,2589 ----
        if (op != GFC_ISYM_LBOUND && assumed_rank_lb_one)
  	{
  	  tree minus_one = build_int_cst (gfc_array_index_type, -1);
! 	  tree rank = gfc_conv_descriptor_rank (desc);
! 	  rank = fold_build2_loc (input_location, MINUS_EXPR,
! 				  gfc_array_dim_rank_type, rank,
! 				  gfc_rank_cst[1]);
  
  	  /* Fix the expression to stop it from becoming even more
  	     complicated.  */
*************** conv_intrinsic_cobound (gfc_se * se, gfc
*** 2655,2672 ****
        gcc_assert (se->loop->dimen == 1);
        gcc_assert (se->ss->info->expr == expr);
  
!       bound = se->loop->loopvar[0];
!       bound = fold_build2_loc (input_location, PLUS_EXPR, gfc_array_index_type,
! 			       bound, gfc_rank_cst[arg->expr->rank]);
        gfc_advance_se_ss_chain (se);
      }
    else if (expr->value.function.isym->id == GFC_ISYM_COSHAPE)
!     bound = gfc_index_zero_node;
    else
      {
        gcc_assert (arg2->expr);
        gfc_init_se (&argse, NULL);
!       gfc_conv_expr_type (&argse, arg2->expr, gfc_array_index_type);
        gfc_add_block_to_block (&se->pre, &argse.pre);
        bound = argse.expr;
  
--- 2658,2677 ----
        gcc_assert (se->loop->dimen == 1);
        gcc_assert (se->ss->info->expr == expr);
  
!       bound = fold_convert_loc (input_location, gfc_array_dim_rank_type,
! 				se->loop->loopvar[0]);
!       tree rank = gfc_rank_cst[arg->expr->rank];
!       bound = fold_build2_loc (input_location, PLUS_EXPR,
! 			       gfc_array_dim_rank_type, bound, rank);
        gfc_advance_se_ss_chain (se);
      }
    else if (expr->value.function.isym->id == GFC_ISYM_COSHAPE)
!     bound = gfc_rank_cst[1];
    else
      {
        gcc_assert (arg2->expr);
        gfc_init_se (&argse, NULL);
!       gfc_conv_expr_type (&argse, arg2->expr, gfc_array_dim_rank_type);
        gfc_add_block_to_block (&se->pre, &argse.pre);
        bound = argse.expr;
  
*************** conv_intrinsic_cobound (gfc_se * se, gfc
*** 2683,2692 ****
          {
  	  bound = gfc_evaluate_now (bound, &se->pre);
  	  cond = fold_build2_loc (input_location, LT_EXPR, logical_type_node,
! 				  bound, build_int_cst (TREE_TYPE (bound), 1));
! 	  tmp = gfc_rank_cst[GFC_TYPE_ARRAY_CORANK (TREE_TYPE (desc))];
  	  tmp = fold_build2_loc (input_location, GT_EXPR, logical_type_node,
! 				 bound, tmp);
  	  cond = fold_build2_loc (input_location, TRUTH_ORIF_EXPR,
  				  logical_type_node, cond, tmp);
  	  gfc_trans_runtime_check (true, false, cond, &se->pre, &expr->where,
--- 2688,2697 ----
          {
  	  bound = gfc_evaluate_now (bound, &se->pre);
  	  cond = fold_build2_loc (input_location, LT_EXPR, logical_type_node,
! 				  bound, gfc_rank_cst[1]);
! 	  tree rank = gfc_rank_cst[GFC_TYPE_ARRAY_CORANK (TREE_TYPE (desc))];
  	  tmp = fold_build2_loc (input_location, GT_EXPR, logical_type_node,
! 				 bound, rank);
  	  cond = fold_build2_loc (input_location, TRUTH_ORIF_EXPR,
  				  logical_type_node, cond, tmp);
  	  gfc_trans_runtime_check (true, false, cond, &se->pre, &expr->where,
*************** conv_intrinsic_cobound (gfc_se * se, gfc
*** 2699,2712 ****
  	{
  	case 0:
  	  bound = fold_build2_loc (input_location, MINUS_EXPR,
! 				   gfc_array_index_type, bound,
! 				   gfc_index_one_node);
  	case 1:
  	  break;
  	default:
! 	  bound = fold_build2_loc (input_location, PLUS_EXPR,
! 				   gfc_array_index_type, bound,
! 				   gfc_rank_cst[arg->expr->rank - 1]);
  	}
      }
  
--- 2704,2719 ----
  	{
  	case 0:
  	  bound = fold_build2_loc (input_location, MINUS_EXPR,
! 				   gfc_array_dim_rank_type, bound,
! 				   gfc_rank_cst[1]);
  	case 1:
  	  break;
  	default:
! 	  {
! 	    tree rank = gfc_rank_cst[arg->expr->rank - 1];
! 	    bound = fold_build2_loc (input_location, PLUS_EXPR,
! 				     gfc_array_dim_rank_type, bound, rank);
! 	  }
  	}
      }
  
*************** gfc_conv_intrinsic_sizeof (gfc_se *se, g
*** 8478,8487 ****
  	  tree cond, loop_var, exit_label;
            stmtblock_t body;
  
! 	  tmp = fold_convert (gfc_array_index_type,
! 			      gfc_conv_descriptor_rank (argse.expr));
! 	  loop_var = gfc_create_var (gfc_array_index_type, "i");
! 	  gfc_add_modify (&argse.pre, loop_var, gfc_index_zero_node);
            exit_label = gfc_build_label_decl (NULL_TREE);
  
  	  /* Create loop:
--- 8485,8493 ----
  	  tree cond, loop_var, exit_label;
            stmtblock_t body;
  
! 	  tmp = gfc_conv_descriptor_rank (argse.expr);
! 	  loop_var = gfc_create_var (gfc_array_dim_rank_type, "i");
! 	  gfc_add_modify (&argse.pre, loop_var, gfc_rank_cst[0]);
            exit_label = gfc_build_label_decl (NULL_TREE);
  
  	  /* Create loop:
*************** gfc_conv_intrinsic_sizeof (gfc_se *se, g
*** 8509,8516 ****
  	  gfc_add_modify (&body, source_bytes, tmp);
  
  	  tmp = fold_build2_loc (input_location, PLUS_EXPR,
! 				 gfc_array_index_type, loop_var,
! 				 gfc_index_one_node);
  	  gfc_add_modify_loc (input_location, &body, loop_var, tmp);
  
  	  tmp = gfc_finish_block (&body);
--- 8515,8522 ----
  	  gfc_add_modify (&body, source_bytes, tmp);
  
  	  tmp = fold_build2_loc (input_location, PLUS_EXPR,
! 				 gfc_array_dim_rank_type, loop_var,
! 				 gfc_rank_cst[1]);
  	  gfc_add_modify_loc (input_location, &body, loop_var, tmp);
  
  	  tmp = gfc_finish_block (&body);
diff -Nrcpad gcc-17-20260705/gcc/fortran/trans-openmp.cc gcc-17-20260712/gcc/fortran/trans-openmp.cc
*** gcc-17-20260705/gcc/fortran/trans-openmp.cc	Sun Jul  5 22:32:08 2026
--- gcc-17-20260712/gcc/fortran/trans-openmp.cc	Sun Jul 12 22:32:08 2026
*************** gfc_omp_get_array_size (location_t loc,
*** 2123,2139 ****
    tree extent = build_decl (loc, VAR_DECL, create_tmp_var_name ("extent"),
  			    gfc_array_index_type);
    tree idx = build_decl (loc, VAR_DECL, create_tmp_var_name ("idx"),
! 			 signed_char_type_node);
  
!   tree begin = build_zero_cst (signed_char_type_node);
    tree end;
    if (GFC_TYPE_ARRAY_AKIND (TREE_TYPE (desc)) == GFC_ARRAY_ASSUMED_SHAPE_CONT
        || GFC_TYPE_ARRAY_AKIND (TREE_TYPE (desc)) == GFC_ARRAY_ASSUMED_SHAPE)
      end = gfc_conv_descriptor_rank (desc);
    else
!     end = build_int_cst (signed_char_type_node,
! 			 GFC_TYPE_ARRAY_RANK (TREE_TYPE (desc)));
!   tree step = build_int_cst (signed_char_type_node, 1);
  
    /* size = 0
       for (idx = 0; idx < rank; idx++)
--- 2123,2138 ----
    tree extent = build_decl (loc, VAR_DECL, create_tmp_var_name ("extent"),
  			    gfc_array_index_type);
    tree idx = build_decl (loc, VAR_DECL, create_tmp_var_name ("idx"),
! 			 gfc_array_dim_rank_type);
  
!   tree begin = gfc_rank_cst[0];
    tree end;
    if (GFC_TYPE_ARRAY_AKIND (TREE_TYPE (desc)) == GFC_ARRAY_ASSUMED_SHAPE_CONT
        || GFC_TYPE_ARRAY_AKIND (TREE_TYPE (desc)) == GFC_ARRAY_ASSUMED_SHAPE)
      end = gfc_conv_descriptor_rank (desc);
    else
!     end = gfc_rank_cst[GFC_TYPE_ARRAY_RANK (TREE_TYPE (desc))];
!   tree step = gfc_rank_cst[1];
  
    /* size = 0
       for (idx = 0; idx < rank; idx++)
diff -Nrcpad gcc-17-20260705/gcc/fortran/trans-stmt.cc gcc-17-20260712/gcc/fortran/trans-stmt.cc
*** gcc-17-20260705/gcc/fortran/trans-stmt.cc	Sun Jul  5 22:32:08 2026
--- gcc-17-20260712/gcc/fortran/trans-stmt.cc	Sun Jul 12 22:32:08 2026
*************** gfc_trans_select_rank_cases (gfc_code *
*** 3974,3980 ****
    /* Calculate the switch expression.  */
    gfc_init_se (&se, NULL);
    gfc_conv_expr_descriptor (&se, code->expr1);
!   rank = gfc_conv_descriptor_rank (se.expr);
    rank = gfc_evaluate_now (rank, &block);
    symbol_attribute attr = gfc_expr_attr (code->expr1);
    if (!attr.pointer && !attr.allocatable)
--- 3974,3981 ----
    /* Calculate the switch expression.  */
    gfc_init_se (&se, NULL);
    gfc_conv_expr_descriptor (&se, code->expr1);
!   rank = fold_convert_loc (input_location, signed_char_type_node,
! 			   gfc_conv_descriptor_rank (se.expr));
    rank = gfc_evaluate_now (rank, &block);
    symbol_attribute attr = gfc_expr_attr (code->expr1);
    if (!attr.pointer && !attr.allocatable)
*************** gfc_trans_select_rank_cases (gfc_code *
*** 3983,3998 ****
  	 rank = (rank == 0 || ubound[rank-1] != -1) ? rank : -1.  */
        cond = fold_build2_loc (input_location, EQ_EXPR, logical_type_node,
  			      rank, build_int_cst (TREE_TYPE (rank), 0));
!       tmp = fold_build2_loc (input_location, MINUS_EXPR, gfc_array_index_type,
! 			     fold_convert (gfc_array_index_type, rank),
! 			     gfc_index_one_node);
        tmp = gfc_conv_descriptor_ubound_get (se.expr, tmp);
        tmp = fold_build2_loc (input_location, NE_EXPR, logical_type_node,
  			     tmp, build_int_cst (TREE_TYPE (tmp), -1));
        cond = fold_build2_loc (input_location, TRUTH_ORIF_EXPR,
  			      logical_type_node, cond, tmp);
!       tmp = fold_build3_loc (input_location, COND_EXPR, TREE_TYPE (rank),
! 			     cond, rank, build_int_cst (TREE_TYPE (rank), -1));
        rank = gfc_evaluate_now (tmp, &block);
      }
    TREE_USED (code->exit_label) = 0;
--- 3984,3999 ----
  	 rank = (rank == 0 || ubound[rank-1] != -1) ? rank : -1.  */
        cond = fold_build2_loc (input_location, EQ_EXPR, logical_type_node,
  			      rank, build_int_cst (TREE_TYPE (rank), 0));
!       tmp = fold_build2_loc (input_location, MINUS_EXPR, signed_char_type_node,
! 			     rank, build_one_cst (signed_char_type_node));
        tmp = gfc_conv_descriptor_ubound_get (se.expr, tmp);
        tmp = fold_build2_loc (input_location, NE_EXPR, logical_type_node,
  			     tmp, build_int_cst (TREE_TYPE (tmp), -1));
        cond = fold_build2_loc (input_location, TRUTH_ORIF_EXPR,
  			      logical_type_node, cond, tmp);
!       tmp = fold_build3_loc (input_location, COND_EXPR, signed_char_type_node,
! 			     cond, rank,
! 			     build_minus_one_cst (signed_char_type_node));
        rank = gfc_evaluate_now (tmp, &block);
      }
    TREE_USED (code->exit_label) = 0;
diff -Nrcpad gcc-17-20260705/gcc/fortran/trans-types.cc gcc-17-20260712/gcc/fortran/trans-types.cc
*** gcc-17-20260705/gcc/fortran/trans-types.cc	Sun Jul  5 22:32:08 2026
--- gcc-17-20260712/gcc/fortran/trans-types.cc	Sun Jul 12 22:32:08 2026
*************** along with GCC; see the file COPYING3.
*** 55,60 ****
--- 55,61 ----
  /* array of structs so we don't have to worry about xmalloc or free */
  CInteropKind_t c_interop_kinds_table[ISOCBINDING_NUMBER];
  
+ tree gfc_array_dim_rank_type;
  tree gfc_array_index_type;
  tree gfc_array_range_type;
  tree gfc_character1_type_node;
*************** tree get_dtype_type_node (void)
*** 164,170 ****
        suppress_warning (field);
        field = gfc_add_field_to_struct_1 (dtype_node,
  					 get_identifier ("rank"),
! 					 signed_char_type_node, &dtype_chain);
        suppress_warning (field);
        field = gfc_add_field_to_struct_1 (dtype_node,
  					 get_identifier ("type"),
--- 165,171 ----
        suppress_warning (field);
        field = gfc_add_field_to_struct_1 (dtype_node,
  					 get_identifier ("rank"),
! 					 gfc_array_dim_rank_type, &dtype_chain);
        suppress_warning (field);
        field = gfc_add_field_to_struct_1 (dtype_node,
  					 get_identifier ("type"),
*************** gfc_init_types (void)
*** 1226,1231 ****
--- 1227,1238 ----
    gfc_charlen_int_kind = get_int_kind_from_node (size_type_node);
    gfc_charlen_type_node = gfc_get_int_type (gfc_charlen_int_kind);
  
+   gfc_array_dim_rank_type
+ 		= build_range_type (signed_char_type_node,
+ 				    build_zero_cst (signed_char_type_node),
+ 				    build_int_cst (signed_char_type_node,
+ 						   GFC_MAX_DIMENSIONS));
+ 
    /* Fortran kind number of size_type_node (size_t). This is used for
       the _size member in vtables.  */
    gfc_size_kind = get_int_kind_from_node (size_type_node);
diff -Nrcpad gcc-17-20260705/gcc/fortran/trans-types.h gcc-17-20260712/gcc/fortran/trans-types.h
*** gcc-17-20260705/gcc/fortran/trans-types.h	Sun Jul  5 22:32:08 2026
--- gcc-17-20260712/gcc/fortran/trans-types.h	Sun Jul 12 22:32:08 2026
*************** extern GTY(()) tree logical_false_node;
*** 52,57 ****
--- 52,60 ----
     It must be the same as the corresponding definition in gfortran.h.  */
  extern GTY(()) tree gfc_charlen_type_node;
  
+ /* An integral type with bounds [0, GFC_MAX_DIMENSIONS] suitable to hold an
+    array rank, or an array dimension index.  */
+ extern GTY(()) tree gfc_array_dim_rank_type;
  
  /* The following flags give us information on the correspondence of
     real (and complex) kinds with C floating-point types long double
diff -Nrcpad gcc-17-20260705/gcc/fortran/types.def gcc-17-20260712/gcc/fortran/types.def
*** gcc-17-20260705/gcc/fortran/types.def	Sun Jul  5 22:32:08 2026
--- gcc-17-20260712/gcc/fortran/types.def	Sun Jul 12 22:32:08 2026
*************** DEF_POINTER_TYPE (BT_PTR_PTR, BT_PTR)
*** 77,83 ****
  DEF_FUNCTION_TYPE_0 (BT_FN_BOOL, BT_BOOL)
  DEF_FUNCTION_TYPE_0 (BT_FN_PTR, BT_PTR)
  DEF_FUNCTION_TYPE_0 (BT_FN_INT, BT_INT)
- DEF_FUNCTION_TYPE_0 (BT_FN_COMPLEX_INT, BT_COMPLEX_INT)
  DEF_FUNCTION_TYPE_0 (BT_FN_UINT, BT_UINT)
  DEF_FUNCTION_TYPE_0 (BT_FN_VOID, BT_VOID)
  DEF_FUNCTION_TYPE_0 (BT_FN_ULONGLONG, BT_ULONGLONG)
--- 77,82 ----
*************** DEF_FUNCTION_TYPE_1 (BT_FN_PTR_PTR, BT_P
*** 91,96 ****
--- 90,96 ----
  DEF_FUNCTION_TYPE_1 (BT_FN_VOID_INT, BT_VOID, BT_INT)
  DEF_FUNCTION_TYPE_1 (BT_FN_VOID_BOOL, BT_VOID, BT_BOOL)
  DEF_FUNCTION_TYPE_1 (BT_FN_BOOL_INT, BT_BOOL, BT_INT)
+ DEF_FUNCTION_TYPE_1 (BT_FN_COMPLEX_INT_ULONGLONG, BT_COMPLEX_INT, BT_ULONGLONG)
  
  DEF_POINTER_TYPE (BT_PTR_FN_VOID_PTR, BT_FN_VOID_PTR)
  
diff -Nrcpad gcc-17-20260705/gcc/function.cc gcc-17-20260712/gcc/function.cc
*** gcc-17-20260705/gcc/function.cc	Sun Jul  5 22:32:08 2026
--- gcc-17-20260712/gcc/function.cc	Sun Jul 12 22:32:08 2026
*************** make_epilogue_seq (void)
*** 6091,6096 ****
--- 6091,6099 ----
  void
  thread_prologue_and_epilogue_insns (void)
  {
+   /* We need alias.  */
+   init_alias_analysis ();
+ 
    df_analyze ();
  
    /* Can't deal with multiple successors of the entry block at the
*************** thread_prologue_and_epilogue_insns (void
*** 6323,6328 ****
--- 6326,6334 ----
        df_update_entry_block_defs ();
        df_update_exit_block_uses ();
      }
+ 
+   /* Clean up.  */
+   end_alias_analysis ();
  }
  
  /* Reposition the prologue-end and epilogue-begin notes after
diff -Nrcpad gcc-17-20260705/gcc/gimple-range-cache.cc gcc-17-20260712/gcc/gimple-range-cache.cc
*** gcc-17-20260705/gcc/gimple-range-cache.cc	Sun Jul  5 22:32:08 2026
--- gcc-17-20260712/gcc/gimple-range-cache.cc	Sun Jul 12 22:32:08 2026
*************** ssa_lazy_cache::clear ()
*** 801,813 ****
  
  // --------------------------------------------------------------------------
  
  
! // This class will manage the timestamps for each ssa_name.
! // When a value is calculated, the timestamp is set to the current time.
! // Current time is then incremented.  Any dependencies will already have
! // been calculated, and will thus have older timestamps.
! // If one of those values is ever calculated again, it will get a newer
! // timestamp, and the "current_p" check will fail.
  
  class temporal_cache
  {
--- 801,831 ----
  
  // --------------------------------------------------------------------------
  
+ // A cache timestamp has two components.
+ //
+ // STORED and CALC are maintained separately.  STORED is updated only when
+ // the cached value actually changes, while CALC is updated every time the
+ // value is recalculated.
+ //
+ // This allows stale values to be recalculated without forcing dependent
+ // values to be recalculated as well.  If a recalculation produces the same
+ // value, only CALC changes and the STORED timestamp remains unchanged,
+ // indicating that the observable value has not changed.
  
! struct time_stamp
! {
!   unsigned stored;	// Timestamp of last time value was SET.
!   unsigned calc;	// Timestamp when the value was calcuclated last.
! };
! 
! // Manage dependency timestamps for SSA names.
! //
! // Each SSA name records when its value last changed (stored) and when it
! // was last recalculated (calc).  Dependencies are current if their stored
! // timestamps are no newer than the dependent value.  Recalculating a value
! // without changing it updates only the calc timestamp, avoiding unnecessary
! // invalidation of dependent values.
! // always_current is managed by setting the calcualted timestamp to 0.
  
  class temporal_cache
  {
*************** public:
*** 815,827 ****
    temporal_cache ();
    ~temporal_cache ();
    bool current_p (tree name, tree dep1, tree dep2) const;
!   void set_timestamp (tree name);
!   void set_always_current (tree name, bool value);
    bool always_current_p (tree name) const;
  private:
!   int temporal_value (unsigned ssa) const;
!   int m_current_time;
!   vec <int> m_timestamp;
  };
  
  inline
--- 833,847 ----
    temporal_cache ();
    ~temporal_cache ();
    bool current_p (tree name, tree dep1, tree dep2) const;
!   void set_timestamp_stored (tree name);
!   void set_timestamp_calc (tree name);
!   void set_always_current (tree name);
    bool always_current_p (tree name) const;
  private:
!   unsigned temporal_value_stored (unsigned ssa) const;
!   unsigned temporal_value_calc (unsigned ssa) const;
!   unsigned m_current_time;
!   vec <struct time_stamp> m_timestamp;
  };
  
  inline
*************** temporal_cache::temporal_cache ()
*** 829,835 ****
  {
    m_current_time = 1;
    m_timestamp.create (0);
!   m_timestamp.safe_grow_cleared (num_ssa_names);
  }
  
  inline
--- 849,855 ----
  {
    m_current_time = 1;
    m_timestamp.create (0);
!   m_timestamp.safe_grow_cleared (num_ssa_names + 1);
  }
  
  inline
*************** temporal_cache::~temporal_cache ()
*** 838,854 ****
    m_timestamp.release ();
  }
  
! // Return the timestamp value for SSA, or 0 if there isn't one.
  
! inline int
! temporal_cache::temporal_value (unsigned ssa) const
  {
    if (ssa >= m_timestamp.length ())
      return 0;
!   return abs (m_timestamp[ssa]);
  }
  
! // Return TRUE if the timestamp for NAME is newer than any of its dependents.
  // Up to 2 dependencies can be checked.
  
  bool
--- 858,888 ----
    m_timestamp.release ();
  }
  
! // Return the timestamp value for SSA when it was last stored to
! // or 0 if there isn't one.
  
! inline unsigned
! temporal_cache::temporal_value_stored (unsigned ssa) const
  {
    if (ssa >= m_timestamp.length ())
      return 0;
!   return m_timestamp[ssa].stored;
  }
  
! // Return the timestamp value for SSA when it was last calculated
! // or 0 if there isn't one.
! 
! inline unsigned
! temporal_cache::temporal_value_calc (unsigned ssa) const
! {
!   if (ssa >= m_timestamp.length ())
!     return 0;
!   return m_timestamp[ssa].calc;
! }
! 
! // Return TRUE if the timestamp for when NAME was calculated is newer
! // than the last time any of its dependents were stored.  This indicates
! // it dos not need to be calculated again.
  // Up to 2 dependencies can be checked.
  
  bool
*************** temporal_cache::current_p (tree name, tr
*** 858,898 ****
      return true;
  
    // Any non-registered dependencies will have a value of 0 and thus be older.
!   // Return true if time is newer than either dependent.
!   int ts = temporal_value (SSA_NAME_VERSION (name));
!   if (dep1 && ts < temporal_value (SSA_NAME_VERSION (dep1)))
      return false;
!   if (dep2 && ts < temporal_value (SSA_NAME_VERSION (dep2)))
      return false;
  
    return true;
  }
  
! // This increments the global timer and sets the timestamp for NAME.
  
  inline void
! temporal_cache::set_timestamp (tree name)
  {
    unsigned v = SSA_NAME_VERSION (name);
    if (v >= m_timestamp.length ())
      m_timestamp.safe_grow_cleared (num_ssa_names + 20);
!   m_timestamp[v] = ++m_current_time;
  }
  
! // Set the timestamp to 0, marking it as "always up to date".
  
  inline void
! temporal_cache::set_always_current (tree name, bool value)
  {
    unsigned v = SSA_NAME_VERSION (name);
    if (v >= m_timestamp.length ())
      m_timestamp.safe_grow_cleared (num_ssa_names + 20);
  
!   int ts = abs (m_timestamp[v]);
!   // If this does not have a timestamp, create one.
!   if (ts == 0)
!     ts = ++m_current_time;
!   m_timestamp[v] = value ? -ts : ts;
  }
  
  // Return true if NAME is always current.
--- 892,943 ----
      return true;
  
    // Any non-registered dependencies will have a value of 0 and thus be older.
!   // Return true if the last time this was calculated is newer than either
!   // dependent value.
!   unsigned ts = temporal_value_calc (SSA_NAME_VERSION (name));
!   if (dep1 && ts < temporal_value_stored (SSA_NAME_VERSION (dep1)))
      return false;
!   if (dep2 && ts < temporal_value_stored (SSA_NAME_VERSION (dep2)))
      return false;
  
    return true;
  }
  
! // This increments the global timer and sets both timestamps for NAME.
  
  inline void
! temporal_cache::set_timestamp_stored (tree name)
  {
    unsigned v = SSA_NAME_VERSION (name);
    if (v >= m_timestamp.length ())
      m_timestamp.safe_grow_cleared (num_ssa_names + 20);
!   m_timestamp[v].stored = ++m_current_time;
!   m_timestamp[v].calc = m_current_time;
  }
  
! // This increments the global timer and sets the calculated timestamp for NAME.
  
  inline void
! temporal_cache::set_timestamp_calc (tree name)
  {
    unsigned v = SSA_NAME_VERSION (name);
    if (v >= m_timestamp.length ())
      m_timestamp.safe_grow_cleared (num_ssa_names + 20);
+   m_timestamp[v].calc = ++m_current_time;
+ }
  
! // Set the calculated timestamp to 0, marking it as "always up to date".
! 
! inline void
! temporal_cache::set_always_current (tree name)
! {
!   unsigned v = SSA_NAME_VERSION (name);
!   if (v >= m_timestamp.length ())
!     m_timestamp.safe_grow_cleared (num_ssa_names + 20);
!   // If stored timestamp hasn't been set, set it now.
!   if (m_timestamp[v].stored == 0)
!     m_timestamp[v].stored = ++m_current_time;
!   m_timestamp[v].calc = 0;
  }
  
  // Return true if NAME is always current.
*************** temporal_cache::always_current_p (tree n
*** 903,909 ****
    unsigned v = SSA_NAME_VERSION (name);
    if (v >= m_timestamp.length ())
      return false;
!   return m_timestamp[v] <= 0;
  }
  
  // --------------------------------------------------------------------------
--- 948,954 ----
    unsigned v = SSA_NAME_VERSION (name);
    if (v >= m_timestamp.length ())
      return false;
!   return m_timestamp[v].calc == 0;
  }
  
  // --------------------------------------------------------------------------
*************** ranger_cache::get_global_range (vrange &
*** 1124,1130 ****
  
    // If the existing value was not current, mark it as always current.
    if (!current_p)
!     m_temporal->set_always_current (name, true);
    return had_global;
  }
  
--- 1169,1175 ----
  
    // If the existing value was not current, mark it as always current.
    if (!current_p)
!     m_temporal->set_always_current (name);
    return had_global;
  }
  
*************** ranger_cache::get_global_range (vrange &
*** 1134,1140 ****
  void
  ranger_cache::update_consumers (tree name)
  {
!   m_temporal->set_timestamp (name);
  }
  
  //  Set the global range of NAME to R and give it a timestamp.
--- 1179,1185 ----
  void
  ranger_cache::update_consumers (tree name)
  {
!   m_temporal->set_timestamp_stored (name);
  }
  
  //  Set the global range of NAME to R and give it a timestamp.
*************** ranger_cache::update_consumers (tree nam
*** 1142,1155 ****
  void
  ranger_cache::set_global_range (tree name, const vrange &r, bool changed)
  {
-   // Setting a range always clears the always_current flag.
-   m_temporal->set_always_current (name, false);
    if (!changed)
      {
!       // If there are dependencies, make sure this is not out of date.
!       if (!m_temporal->current_p (name, gori_ssa ()->depend1 (name),
! 				 gori_ssa ()->depend2 (name)))
! 	m_temporal->set_timestamp (name);
        return;
      }
    if (m_globals.set_range (name, r))
--- 1187,1196 ----
  void
  ranger_cache::set_global_range (tree name, const vrange &r, bool changed)
  {
    if (!changed)
      {
!       // If the value did not change, simply update the calculated timestamp.
!       m_temporal->set_timestamp_calc (name);
        return;
      }
    if (m_globals.set_range (name, r))
*************** ranger_cache::set_global_range (tree nam
*** 1177,1183 ****
  
    if (r.singleton_p ())
      gori_ssa ()->set_range_invariant (name);
!   m_temporal->set_timestamp (name);
  }
  
  //  Provide lookup for the gori-computes class to access the best known range
--- 1218,1226 ----
  
    if (r.singleton_p ())
      gori_ssa ()->set_range_invariant (name);
! 
!   // update the stored and calucalted timestamp now.
!   m_temporal->set_timestamp_stored (name);
  }
  
  //  Provide lookup for the gori-computes class to access the best known range
diff -Nrcpad gcc-17-20260705/gcc/gimple-range.cc gcc-17-20260712/gcc/gimple-range.cc
*** gcc-17-20260705/gcc/gimple-range.cc	Sun Jul  5 22:32:08 2026
--- gcc-17-20260712/gcc/gimple-range.cc	Sun Jul 12 22:32:08 2026
*************** gimple_ranger::gimple_ranger (bool use_i
*** 51,56 ****
--- 51,58 ----
    m_stmt_list.create (0);
    m_stmt_list.safe_grow (num_ssa_names);
    m_stmt_list.truncate (0);
+   m_prefill_stack.create (0);
+   m_active_prefill = BITMAP_ALLOC (NULL);
  
    // Ensure the not_executable flag is clear everywhere.
    if (flag_checking)
*************** gimple_ranger::gimple_ranger (bool use_i
*** 68,73 ****
--- 70,77 ----
  
  gimple_ranger::~gimple_ranger ()
  {
+   BITMAP_FREE (m_active_prefill);
+   m_prefill_stack.release ();
    m_stmt_list.release ();
  }
  
*************** gimple_ranger::range_of_stmt (vrange &r,
*** 375,405 ****
    return res;
  }
  
  
! // Check if NAME is a dependency that needs resolving, and push it on the
! // stack if so.  R is a scratch range.
! 
! inline void
! gimple_ranger::prefill_name (vrange &r, tree name)
  {
    if (!gimple_range_ssa_p (name))
!     return;
    gimple *stmt = SSA_NAME_DEF_STMT (name);
    if (!gimple_range_op_handler::supported_p (stmt) && !is_a<gphi *> (stmt))
!     return;
  
!   // If this op has not been processed yet, then push it on the stack
!   if (!m_cache.get_global_range (r, name))
!     {
!       bool current;
!       // Set the global cache value and mark as alway_current.
!       m_cache.get_global_range (r, name, current);
!       m_stmt_list.safe_push (name);
!     }
  }
  
! // This routine will seed the global cache with most of the dependencies of
! // NAME.  This prevents excessive call depth through the normal API.
  
  void
  gimple_ranger::prefill_stmt_dependencies (tree ssa)
--- 379,424 ----
    return res;
  }
  
+ // Return true if NAME has not been calculated yet and is pushed onto
+ // the prefill to be processed.
  
! inline bool
! gimple_ranger::prefill_name (tree name)
  {
    if (!gimple_range_ssa_p (name))
!     return false;
! 
!   unsigned v = SSA_NAME_VERSION (name);
! 
!   // Already active cycle.  Use seeded value and do not chase it.
!   if (bitmap_bit_p (m_active_prefill, v))
!     return false;
! 
!   // Process only range-ops and PHIs.
    gimple *stmt = SSA_NAME_DEF_STMT (name);
    if (!gimple_range_op_handler::supported_p (stmt) && !is_a<gphi *> (stmt))
!     return false;
  
!   // Already calculated.
!   value_range r (TREE_TYPE (name));
!   if (m_cache.get_global_range (r, name))
!     return false;
! 
!   bool current;
!   // Seed the initial cache value to avoid cycles.
!   m_cache.get_global_range (r, name, current);
! 
!   bitmap_set_bit (m_active_prefill, v);
!   m_prefill_stack.safe_push ({ name, 0 });
!   return true;
  }
  
! 
! // This Prefills the global cache with the dependencies of SSA before it is
! // evaluated.  Dependencies are traversed iteratively in depth-first order,
! // ensuring each operand is calculated and cached before the statement which
! // uses it.  This avoids deep recursion through the normal range_of_stmt /
! // range_of_expr interfaces while preserving the natural dependency ordering.
  
  void
  gimple_ranger::prefill_stmt_dependencies (tree ssa)
*************** gimple_ranger::prefill_stmt_dependencies
*** 407,461 ****
    if (SSA_NAME_IS_DEFAULT_DEF (ssa))
      return;
  
-   unsigned idx;
    gimple *stmt = SSA_NAME_DEF_STMT (ssa);
    gcc_checking_assert (stmt);
    if (!gimple_bb (stmt))
      return;
  
!   // Only pre-process range-ops and phis.
    if (!gimple_range_op_handler::supported_p (stmt) && !is_a<gphi *> (stmt))
      return;
  
!   // Mark where on the stack we are starting.
!   unsigned start = m_stmt_list.length ();
!   m_stmt_list.safe_push (ssa);
  
!   idx = tracer.header ("ROS dependence fill\n");
  
!   // Loop until back at the start point.
!   while (m_stmt_list.length () > start)
      {
!       tree name = m_stmt_list.last ();
!       // NULL is a marker which indicates the next name in the stack has now
!       // been fully resolved, so we can fold it.
!       if (!name)
! 	{
! 	  // Pop the NULL, then pop the name.
! 	  m_stmt_list.pop ();
! 	  name = m_stmt_list.pop ();
! 	  // Don't fold initial request, it will be calculated upon return.
! 	  if (m_stmt_list.length () > start)
! 	    {
! 	      // Fold and save the value for NAME.
! 	      stmt = SSA_NAME_DEF_STMT (name);
! 	      value_range r (TREE_TYPE (name));
! 	      fold_range_internal (r, stmt, name);
! 	      // Make sure we don't lose any current global info.
! 	      value_range tmp (TREE_TYPE (name));
! 	      m_cache.get_global_range (tmp, name);
! 	      bool changed = tmp.intersect (r);
! 	      m_cache.set_global_range (name, tmp, changed);
! 	    }
! 	  continue;
! 	}
! 
!       // Add marker indicating previous NAME in list should be folded
!       // when we get to this NULL.
!       m_stmt_list.safe_push (NULL_TREE);
        stmt = SSA_NAME_DEF_STMT (name);
  
!       if (idx)
  	{
  	  tracer.print (idx, "ROS dep fill (");
  	  print_generic_expr (dump_file, name, TDF_SLIM);
--- 426,453 ----
    if (SSA_NAME_IS_DEFAULT_DEF (ssa))
      return;
  
    gimple *stmt = SSA_NAME_DEF_STMT (ssa);
    gcc_checking_assert (stmt);
    if (!gimple_bb (stmt))
      return;
  
!   // Process only range-ops and PHIs.
    if (!gimple_range_op_handler::supported_p (stmt) && !is_a<gphi *> (stmt))
      return;
  
!   unsigned idx = tracer.header ("ROS dependence fill\n");
  
!   bitmap_set_bit (m_active_prefill, SSA_NAME_VERSION (ssa));
!   m_prefill_stack.safe_push ({ ssa, 0 });
  
!   while (!m_prefill_stack.is_empty ())
      {
!       prefill_frame &frame = m_prefill_stack.last ();
!       tree name = frame.name;
        stmt = SSA_NAME_DEF_STMT (name);
  
!       // Print the ROS (Range Of Stmt) data the first time it is seen.
!       if (idx && frame.next_op == 0)
  	{
  	  tracer.print (idx, "ROS dep fill (");
  	  print_generic_expr (dump_file, name, TDF_SLIM);
*************** gimple_ranger::prefill_stmt_dependencies
*** 463,495 ****
  	  print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM);
  	}
  
!       gphi *phi = dyn_cast <gphi *> (stmt);
!       if (phi)
  	{
! 	  value_range r (TREE_TYPE (gimple_phi_result (phi)));
! 	  for (unsigned x = 0; x < gimple_phi_num_args (phi); x++)
! 	    prefill_name (r, gimple_phi_arg_def (phi, x));
  	}
        else
  	{
  	  gimple_range_op_handler handler (stmt);
! 	  if (handler)
  	    {
! 	      tree op = handler.operand2 ();
! 	      if (op)
! 		{
! 		  value_range r (TREE_TYPE (op));
! 		  prefill_name (r, op);
! 		}
! 	      op = handler.operand1 ();
! 	      if (op)
! 		{
! 		  value_range r (TREE_TYPE (op));
! 		  prefill_name (r, op);
! 		}
  	    }
  	}
      }
    if (idx)
      {
        unsupported_range r;
--- 455,504 ----
  	  print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM);
  	}
  
!       if (gphi *phi = dyn_cast <gphi *> (stmt))
  	{
! 	  while (frame.next_op < gimple_phi_num_args (phi))
! 	    {
! 	      tree op = gimple_phi_arg_def (phi, frame.next_op++);
! 	      if (prefill_name (op))
! 		break;
! 	    }
  	}
        else
  	{
  	  gimple_range_op_handler handler (stmt);
! 	  while (handler && frame.next_op < 2)
  	    {
! 	      tree op = (frame.next_op++ == 0) ? handler.operand2 ()
! 					       : handler.operand1 ();
! 	      if (!op)
! 		continue;
! 	      if (prefill_name (op))
! 		break;
  	    }
  	}
+ 
+       // If the same name is not top of stack, keep processing.
+       if (m_prefill_stack.last ().name != name)
+ 	continue;
+ 
+       // All dependencies have been handled.  Pop and fold.
+       m_prefill_stack.pop ();
+       bitmap_clear_bit (m_active_prefill, SSA_NAME_VERSION (name));
+ 
+       // Do not fold the original request.  The caller will calculate it.
+       if (name == ssa)
+ 	continue;
+ 
+       value_range r (TREE_TYPE (name));
+       fold_range_internal (r, stmt, name);
+ 
+       value_range tmp (TREE_TYPE (name));
+       m_cache.get_global_range (tmp, name);
+       bool changed = tmp.intersect (r);
+       m_cache.set_global_range (name, tmp, changed);
      }
+ 
    if (idx)
      {
        unsupported_range r;
*************** gimple_ranger::prefill_stmt_dependencies
*** 497,503 ****
      }
  }
  
- 
  // This routine will invoke the gimple fold_stmt routine, providing context to
  // range_of_expr calls via an private internal API.
  
--- 506,511 ----
diff -Nrcpad gcc-17-20260705/gcc/gimple-range.h gcc-17-20260712/gcc/gimple-range.h
*** gcc-17-20260705/gcc/gimple-range.h	Sun Jul  5 22:32:08 2026
--- gcc-17-20260712/gcc/gimple-range.h	Sun Jul 12 22:32:08 2026
*************** public:
*** 67,78 ****
    range_query &const_query ();
  protected:
    bool fold_range_internal (vrange &r, gimple *s, tree name);
!   void prefill_name (vrange &r, tree name);
    void prefill_stmt_dependencies (tree ssa);
    ranger_cache m_cache;
    range_tracer tracer;
    basic_block current_bb;
    vec<tree> m_stmt_list;
    friend class path_range_query;
  };
  
--- 67,85 ----
    range_query &const_query ();
  protected:
    bool fold_range_internal (vrange &r, gimple *s, tree name);
!   struct prefill_frame
!   {
!     tree name;
!     unsigned next_op;
!   };
!   vec<prefill_frame> m_prefill_stack;
!   bool prefill_name (tree name);
    void prefill_stmt_dependencies (tree ssa);
    ranger_cache m_cache;
    range_tracer tracer;
    basic_block current_bb;
    vec<tree> m_stmt_list;
+   bitmap m_active_prefill;
    friend class path_range_query;
  };
  
diff -Nrcpad gcc-17-20260705/gcc/gimple-ssa-pta-constraints.cc gcc-17-20260712/gcc/gimple-ssa-pta-constraints.cc
*** gcc-17-20260705/gcc/gimple-ssa-pta-constraints.cc	Sun Jul  5 22:32:08 2026
--- gcc-17-20260712/gcc/gimple-ssa-pta-constraints.cc	Sun Jul 12 22:32:08 2026
*************** find_func_aliases_for_builtin_call (stru
*** 2010,2021 ****
  	    {
  	      fi = lookup_vi_for_tree (fn->decl);
  	      rhs = get_function_part_constraint (fi, ~0);
! 	      rhs.type = ADDRESSOF;
  	    }
  	  else
  	    {
  	      rhs.var = nonlocal_id;
! 	      rhs.type = ADDRESSOF;
  	      rhs.offset = 0;
  	    }
  	  FOR_EACH_VEC_ELT (lhsc, i, lhsp)
--- 2010,2021 ----
  	    {
  	      fi = lookup_vi_for_tree (fn->decl);
  	      rhs = get_function_part_constraint (fi, ~0);
! 	      rhs.type = SCALAR;
  	    }
  	  else
  	    {
  	      rhs.var = nonlocal_id;
! 	      rhs.type = SCALAR;
  	      rhs.offset = 0;
  	    }
  	  FOR_EACH_VEC_ELT (lhsc, i, lhsp)
*************** find_func_aliases_for_call (struct funct
*** 2108,2113 ****
--- 2108,2128 ----
        && find_func_aliases_for_builtin_call (fn, t))
      return;
  
+   if (gimple_call_internal_p (t, IFN_VA_ARG)
+       && gimple_call_lhs (t))
+     {
+       tree valist = gimple_call_arg (t, 0);
+       auto_vec<ce_s, 1> rhsc, lhsc;
+       get_constraint_for_rhs (valist, &rhsc);
+       do_deref (&rhsc);
+       get_constraint_for (gimple_call_lhs (t), &lhsc);
+       process_all_all_constraints (lhsc, rhsc);
+       /* va_list is used and clobbered.  */
+       make_constraint_to (get_call_use_vi (t)->id, valist);
+       make_constraint_to (get_call_clobber_vi (t)->id, valist);
+       return;
+     }
+ 
    if (gimple_call_internal_p (t, IFN_DEFERRED_INIT))
      return;
  
diff -Nrcpad gcc-17-20260705/gcc/gimple-ssa-split-paths.cc gcc-17-20260712/gcc/gimple-ssa-split-paths.cc
*** gcc-17-20260705/gcc/gimple-ssa-split-paths.cc	Sun Jul  5 22:32:08 2026
--- gcc-17-20260712/gcc/gimple-ssa-split-paths.cc	Thu Jan  1 00:00:00 1970
***************
*** 1,545 ****
- /* Support routines for Splitting Paths to loop backedges
-    Copyright (C) 2015-2026 Free Software Foundation, Inc.
-    Contributed by Ajit Kumar Agarwal <ajitkum@xilinx.com>.
- 
-  This file is part of GCC.
- 
-  GCC is free software; you can redistribute it and/or modify
-  it under the terms of the GNU General Public License as published by
-  the Free Software Foundation; either version 3, or (at your option)
-  any later version.
- 
- GCC is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- GNU General Public License for more details.
- 
- You should have received a copy of the GNU General Public License
- along with GCC; see the file COPYING3.  If not see
- <http://www.gnu.org/licenses/>.  */
- 
- #include "config.h"
- #include "system.h"
- #include "coretypes.h"
- #include "backend.h"
- #include "tree.h"
- #include "gimple.h"
- #include "tree-pass.h"
- #include "tree-cfg.h"
- #include "cfganal.h"
- #include "cfgloop.h"
- #include "gimple-iterator.h"
- #include "tracer.h"
- #include "predict.h"
- #include "gimple-ssa.h"
- #include "tree-phinodes.h"
- #include "ssa-iterators.h"
- #include "fold-const.h"
- #include "cfghooks.h"
- 
- /* Given LATCH, the latch block in a loop, see if the shape of the
-    path reaching LATCH is suitable for being split by duplication.
-    If so, return the block that will be duplicated into its predecessor
-    paths.  Else return NULL.  */
- 
- static basic_block
- find_block_to_duplicate_for_splitting_paths (basic_block latch)
- {
-   /* We should have simple latches at this point.  So the latch should
-      have a single successor.  This implies the predecessor of the latch
-      likely has the loop exit.  And it's that predecessor we're most
-      interested in. To keep things simple, we're going to require that
-      the latch have a single predecessor too.  */
-   if (single_succ_p (latch) && single_pred_p (latch))
-     {
-       basic_block bb = get_immediate_dominator (CDI_DOMINATORS, latch);
-       gcc_assert (single_pred_edge (latch)->src == bb);
- 
-       /* If BB has been marked as not to be duplicated, then honor that
- 	 request.  */
-       if (ignore_bb_p (bb))
- 	return NULL;
- 
-       gimple *last = gsi_stmt (gsi_last_nondebug_bb (bb));
-       /* The immediate dominator of the latch must end in a conditional.  */
-       if (!last || gimple_code (last) != GIMPLE_COND)
- 	return NULL;
- 
-       /* We're hoping that BB is a join point for an IF-THEN-ELSE diamond
- 	 region.  Verify that it is.
- 
- 	 First, verify that BB has two predecessors (each arm of the
- 	 IF-THEN-ELSE) and two successors (the latch and exit) and that
- 	 all edges are normal.  */
-       if (EDGE_COUNT (bb->preds) == 2
- 	  && !(EDGE_PRED (bb, 0)->flags & EDGE_COMPLEX)
- 	  && !(EDGE_PRED (bb, 1)->flags & EDGE_COMPLEX)
- 	  && EDGE_COUNT (bb->succs) == 2
- 	  && !(EDGE_SUCC (bb, 0)->flags & EDGE_COMPLEX)
- 	  && !(EDGE_SUCC (bb, 1)->flags & EDGE_COMPLEX))
- 	{
- 	  /* Now verify that BB's immediate dominator ends in a
- 	     conditional as well.  */
- 	  basic_block bb_idom = get_immediate_dominator (CDI_DOMINATORS, bb);
- 	  gimple *last = gsi_stmt (gsi_last_nondebug_bb (bb_idom));
- 	  if (!last || gimple_code (last) != GIMPLE_COND)
- 	    return NULL;
- 
- 	  /* And that BB's immediate dominator's successors are the
- 	     predecessors of BB or BB itself.  */
- 	  if (!(EDGE_PRED (bb, 0)->src == bb_idom
- 		|| find_edge (bb_idom, EDGE_PRED (bb, 0)->src))
- 	      || !(EDGE_PRED (bb, 1)->src == bb_idom
- 		   || find_edge (bb_idom, EDGE_PRED (bb, 1)->src)))
- 	    return NULL;
- 
- 	  /* And that the predecessors of BB each have a single successor
- 	     or are BB's immediate domiator itself.  */
- 	  if (!(EDGE_PRED (bb, 0)->src == bb_idom
- 		|| single_succ_p (EDGE_PRED (bb, 0)->src))
- 	      || !(EDGE_PRED (bb, 1)->src == bb_idom
- 		   || single_succ_p (EDGE_PRED (bb, 1)->src)))
- 	    return NULL;
- 
- 	  /* So at this point we have a simple diamond for an IF-THEN-ELSE
- 	     construct starting at BB_IDOM, with a join point at BB.  BB
- 	     pass control outside the loop or to the loop latch.
- 
- 	     We're going to want to create two duplicates of BB, one for
- 	     each successor of BB_IDOM.  */
- 	  return bb;
- 	}
-     }
-   return NULL;
- }
- 
- /* Return the number of non-debug statements in a block.  */
- static unsigned int
- count_stmts_in_block (basic_block bb)
- {
-   gimple_stmt_iterator gsi;
-   unsigned int num_stmts = 0;
- 
-   for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
-     {
-       gimple *stmt = gsi_stmt (gsi);
-       if (!is_gimple_debug (stmt))
- 	num_stmts++;
-     }
-   return num_stmts;
- }
- 
- /* Return TRUE if CODE represents a tree code that is not likely to
-    be easily if-convertible because it likely expands into multiple
-    insns, FALSE otherwise.  */
- static bool
- poor_ifcvt_candidate_code (enum tree_code code)
- {
-   return (code == MIN_EXPR
- 	  || code == MAX_EXPR
- 	  || code == ABS_EXPR
- 	  || code == COND_EXPR);
- }
- 
- /* Return TRUE if PRED of BB is an poor ifcvt candidate. */
- static bool
- poor_ifcvt_pred (basic_block pred, basic_block bb)
- {
-   /* If the edge count of the pred is not 1, then
-      this is the predecessor from the if rather
-      than middle one. */
-   if (EDGE_COUNT (pred->succs) != 1)
-     return false;
- 
-   /* Empty middle bb are never a poor ifcvt candidate. */
-   if (empty_block_p (pred))
-     return false;
-   /* If BB's predecessors are single statement blocks where
-      the output of that statement feed the same PHI in BB,
-      it an ifcvt candidate. */
-   gimple *stmt = last_and_only_stmt (pred);
-   if (!stmt || gimple_code (stmt) != GIMPLE_ASSIGN)
-     return true;
- 
-   /* If the statement could trap, then this is a poor ifcvt candidate. */
-   if (gimple_could_trap_p (stmt))
-     return true;
- 
-   tree_code code = gimple_assign_rhs_code (stmt);
-   if (poor_ifcvt_candidate_code (code))
-     return true;
-   tree lhs = gimple_assign_lhs (stmt);
-   gimple_stmt_iterator gsi;
-   for (gsi = gsi_start_phis (bb); !gsi_end_p (gsi); gsi_next (&gsi))
-     {
-       gimple *phi = gsi_stmt (gsi);
-       if (gimple_phi_arg_def (phi, 0) == lhs
- 	  || gimple_phi_arg_def (phi, 1) == lhs)
- 	return false;
-     }
-   return true;
- }
- 
- /* Return TRUE if BB is a reasonable block to duplicate by examining
-    its size, false otherwise.  BB will always be a loop latch block.
- 
-    Things to consider:
- 
-      We do not want to spoil if-conversion if at all possible.
- 
-      Most of the benefit seems to be from eliminating the unconditional
-      jump rather than CSE/DCE opportunities.  So favor duplicating
-      small latches.  A latch with just a conditional branch is ideal.
- 
-      CSE/DCE opportunities crop up when statements from the predecessors
-      feed statements in the latch and allow statements in the latch to
-      simplify.  */
- 
- static bool
- is_feasible_trace (basic_block bb)
- {
-   basic_block pred1 = EDGE_PRED (bb, 0)->src;
-   basic_block pred2 = EDGE_PRED (bb, 1)->src;
-   int num_stmts_in_join = count_stmts_in_block (bb);
-   int num_stmts_in_pred1
-     = EDGE_COUNT (pred1->succs) == 1 ? count_stmts_in_block (pred1) : 0;
-   int num_stmts_in_pred2
-     = EDGE_COUNT (pred2->succs) == 1 ? count_stmts_in_block (pred2) : 0;
- 
-   /* Upper Hard limit on the number statements to copy.  */
-   if (num_stmts_in_join
-       >= param_max_jump_thread_duplication_stmts)
-     {
-       if (dump_file && (dump_flags & TDF_DETAILS))
- 	fprintf (dump_file,
- 		 "Duplicating block %d would duplicate "
- 		 "too many statements: %d >= %d\n",
- 		 bb->index, num_stmts_in_join,
- 		 param_max_jump_thread_duplication_stmts);
-       return false;
-     }
- 
-   /* This is meant to catch cases that are likely opportunities for
-      if-conversion.  */
-   if (num_stmts_in_pred1 <= 1 && num_stmts_in_pred2 <= 1)
-     {
-       int num_phis = 0;
-       /* The max number of PHIs that should be considered for an ifcvt
- 	 candidate.  */
-       const int max_num_phis = 3;
-       for (gphi_iterator si = gsi_start_phis (bb); ! gsi_end_p (si);
- 	  gsi_next (&si))
- 	{
- 	  num_phis++;
- 	  if (num_phis > max_num_phis)
- 	    break;
- 	}
-       if (num_phis <= max_num_phis
- 	  && !poor_ifcvt_pred (pred1, bb)
- 	  && !poor_ifcvt_pred (pred2, bb))
- 	{
- 	  if (dump_file && (dump_flags & TDF_DETAILS))
- 	    fprintf (dump_file,
- 		     "Block %d appears to be a join point for "
- 		     "if-convertible bbs.\n",
- 		     bb->index);
- 	  return false;
- 	}
-     }
- 
-   /* If the joiner has no PHIs with useful uses there is zero chance
-      of CSE/DCE/jump-threading possibilities exposed by duplicating it.  */
-   bool found_useful_phi = false;
-   for (gphi_iterator si = gsi_start_phis (bb); ! gsi_end_p (si);
-        gsi_next (&si))
-     {
-       gphi *phi = si.phi ();
-       use_operand_p use_p;
-       imm_use_iterator iter;
-       FOR_EACH_IMM_USE_FAST (use_p, iter, gimple_phi_result (phi))
- 	{
- 	  gimple *stmt = USE_STMT (use_p);
- 	  if (is_gimple_debug (stmt))
- 	    continue;
- 	  /* If there's a use in the joiner this might be a CSE/DCE
- 	     opportunity, but not if the use is in a conditional
- 	     which makes this a likely if-conversion candidate.  */
- 	  if (gimple_bb (stmt) == bb
- 	      && (!is_gimple_assign (stmt)
- 		  || (TREE_CODE_CLASS (gimple_assign_rhs_code (stmt))
- 		      != tcc_comparison)))
- 	    {
- 	      found_useful_phi = true;
- 	      break;
- 	    }
- 	  /* If the use is on a loop header PHI and on one path the
- 	     value is unchanged this might expose a jump threading
- 	     opportunity.  */
- 	  if (gimple_code (stmt) == GIMPLE_PHI
- 	      && gimple_bb (stmt) == bb->loop_father->header
- 	      /* But for memory the PHI alone isn't good enough.  */
- 	      && ! virtual_operand_p (gimple_phi_result (stmt)))
- 	    {
- 	      bool found_unchanged_path = false;
- 	      for (unsigned i = 0; i < gimple_phi_num_args (phi); ++i)
- 		if (gimple_phi_arg_def (phi, i) == gimple_phi_result (stmt))
- 		  {
- 		    found_unchanged_path = true;
- 		    break;
- 		  }
- 	      /* If we found an unchanged path this can only be a threading
- 	         opportunity if we have uses of the loop header PHI result
- 		 in a stmt dominating the merge block.  Otherwise the
- 		 splitting may prevent if-conversion.  */
- 	      if (found_unchanged_path)
- 		{
- 		  use_operand_p use2_p;
- 		  imm_use_iterator iter2;
- 		  FOR_EACH_IMM_USE_FAST (use2_p, iter2, gimple_phi_result (stmt))
- 		    {
- 		      gimple *use_stmt = USE_STMT (use2_p);
- 		      if (is_gimple_debug (use_stmt))
- 			continue;
- 		      basic_block use_bb = gimple_bb (use_stmt);
- 		      if (use_bb != bb
- 			  && dominated_by_p (CDI_DOMINATORS, bb, use_bb))
- 			{
- 			  if (gcond *cond = dyn_cast <gcond *> (use_stmt))
- 			    if (gimple_cond_code (cond) == EQ_EXPR
- 				|| gimple_cond_code (cond) == NE_EXPR)
- 			      found_useful_phi = true;
- 			  break;
- 			}
- 		    }
- 		}
- 	      if (found_useful_phi)
- 		break;
- 	    }
- 	}
-       if (found_useful_phi)
- 	break;
-     }
-   /* There is one exception namely a controlling condition we can propagate
-      an equivalence from to the joiner.  */
-   bool found_cprop_opportunity = false;
-   basic_block dom = get_immediate_dominator (CDI_DOMINATORS, bb);
-   gcond *cond = as_a <gcond *> (*gsi_last_bb (dom));
-   if (gimple_cond_code (cond) == EQ_EXPR
-       || gimple_cond_code (cond) == NE_EXPR)
-     for (unsigned i = 0; i < 2; ++i)
-       {
- 	tree op = gimple_op (cond, i);
- 	if (TREE_CODE (op) == SSA_NAME)
- 	  {
- 	    use_operand_p use_p;
- 	    imm_use_iterator iter;
- 	    FOR_EACH_IMM_USE_FAST (use_p, iter, op)
- 	      {
- 		if (is_gimple_debug (USE_STMT (use_p)))
- 		  continue;
- 		if (gimple_bb (USE_STMT (use_p)) == bb)
- 		  {
- 		    found_cprop_opportunity = true;
- 		    break;
- 		  }
- 	      }
- 	  }
- 	if (found_cprop_opportunity)
- 	  break;
-       }
- 
-   if (! found_useful_phi && ! found_cprop_opportunity)
-     {
-       if (dump_file && (dump_flags & TDF_DETAILS))
- 	fprintf (dump_file,
- 		 "Block %d is a join that does not expose CSE/DCE/jump-thread "
- 		 "opportunities when duplicated.\n",
- 		 bb->index);
-       return false;
-     }
- 
-   /* We may want something here which looks at dataflow and tries
-      to guess if duplication of BB is likely to result in simplification
-      of instructions in BB in either the original or the duplicate.  */
-   return true;
- }
- 
- /* If the immediate dominator of the latch of the loop is
-    block with conditional branch, then the loop latch  is
-    duplicated to its predecessors path preserving the SSA
-    semantics.
- 
-    CFG before transformation.
- 
-               2
-               |
-               |
-         +---->3
-         |    / \
-         |   /   \
-         |  4     5
-         |   \   /
-         |    \ /
-         |     6
-         |    / \
-         |   /   \
-         |  8     7
-         |  |     |
-         ---+     E
- 
- 
- 
-     Block 8 is the latch.  We're going to make copies of block 6 (9 & 10)
-     and wire things up so they look like this:
- 
-               2
-               |
-               |
-         +---->3
-         |    / \
-         |   /   \
-         |  4     5
-         |  |     |
-         |  |     |
-         |  9    10
-         |  |\   /|
-         |  | \ / |
-         |  |  7  |
-         |  |  |  |
-         |  |  E  |
-         |  |     |
-         |   \   /
-         |    \ /
-         +-----8
- 
- 
-     Blocks 9 and 10 will get merged into blocks 4 & 5 respectively which
-     enables CSE, DCE and other optimizations to occur on a larger block
-     of code.   */
- 
- static bool
- split_paths ()
- {
-   bool changed = false;
- 
-   loop_optimizer_init (LOOPS_NORMAL | LOOPS_HAVE_RECORDED_EXITS);
-   initialize_original_copy_tables ();
-   calculate_dominance_info (CDI_DOMINATORS);
- 
-   for (auto loop : loops_list (cfun, LI_FROM_INNERMOST))
-     {
-       /* Only split paths if we are optimizing this loop for speed.  */
-       if (!optimize_loop_for_speed_p (loop))
- 	continue;
- 
-       /* See if there is a block that we can duplicate to split the
- 	 path to the loop latch.  */
-       basic_block bb
- 	= find_block_to_duplicate_for_splitting_paths (loop->latch);
- 
-       /* BB is the merge point for an IF-THEN-ELSE we want to transform.
- 
- 	 Essentially we want to create a duplicate of bb and redirect the
- 	 first predecessor of BB to the duplicate (leaving the second
- 	 predecessor as is.  This will split the path leading to the latch
- 	 re-using BB to avoid useless copying.  */
-       if (bb && is_feasible_trace (bb))
- 	{
- 	  if (dump_file && (dump_flags & TDF_DETAILS))
- 	    fprintf (dump_file,
- 		     "Duplicating join block %d into predecessor paths\n",
- 		     bb->index);
- 	  basic_block pred0 = EDGE_PRED (bb, 0)->src;
- 	  if (EDGE_COUNT (pred0->succs) != 1)
- 	    pred0 = EDGE_PRED (bb, 1)->src;
- 	  transform_duplicate (pred0, bb);
- 	  changed = true;
- 
- 	  /* If BB has an outgoing edge marked as IRREDUCIBLE, then
- 	     duplicating BB may result in an irreducible region turning
- 	     into a natural loop.
- 
- 	     Long term we might want to hook this into the block
- 	     duplication code, but as we've seen with similar changes
- 	     for edge removal, that can be somewhat risky.  */
- 	  if (EDGE_SUCC (bb, 0)->flags & EDGE_IRREDUCIBLE_LOOP
- 	      || EDGE_SUCC (bb, 1)->flags & EDGE_IRREDUCIBLE_LOOP)
- 	    {
- 	      if (dump_file && (dump_flags & TDF_DETAILS))
- 		  fprintf (dump_file,
- 			   "Join block %d has EDGE_IRREDUCIBLE_LOOP set.  "
- 			   "Scheduling loop fixups.\n",
- 			   bb->index);
- 	      loops_state_set (LOOPS_NEED_FIXUP);
- 	    }
- 	}
-     }
- 
-   loop_optimizer_finalize ();
-   free_original_copy_tables ();
-   return changed;
- }
- 
- /* Main entry point for splitting paths.  Returns TODO_cleanup_cfg if any
-    paths where split, otherwise return zero.  */
- 
- static unsigned int
- execute_split_paths ()
- {
-   /* If we don't have at least 2 real blocks and backedges in the
-      CFG, then there's no point in trying to perform path splitting.  */
-   if (n_basic_blocks_for_fn (cfun) <= NUM_FIXED_BLOCKS + 1
-       || !mark_dfs_back_edges ())
-     return 0;
- 
-   bool changed = split_paths();
-   if (changed)
-     free_dominance_info (CDI_DOMINATORS);
- 
-   return changed ? TODO_cleanup_cfg : 0;
- }
- 
- static bool
- gate_split_paths ()
- {
-   return flag_split_paths;
- }
- 
- namespace {
- 
- const pass_data pass_data_split_paths =
- {
-   GIMPLE_PASS, /* type */
-   "split-paths", /* name */
-   OPTGROUP_NONE, /* optinfo_flags */
-   TV_SPLIT_PATHS, /* tv_id */
-   PROP_ssa, /* properties_required */
-   0, /* properties_provided */
-   0, /* properties_destroyed */
-   0, /* todo_flags_start */
-   TODO_update_ssa, /* todo_flags_finish */
- };
- 
- class pass_split_paths : public gimple_opt_pass
- {
-    public:
-     pass_split_paths (gcc::context *ctxt)
-       : gimple_opt_pass (pass_data_split_paths, ctxt)
-     {}
-    /* opt_pass methods: */
-   opt_pass * clone () final override { return new pass_split_paths (m_ctxt); }
-   bool gate (function *) final override { return gate_split_paths (); }
-   unsigned int execute (function *) final override
-   {
-     return execute_split_paths ();
-   }
- 
- }; // class pass_split_paths
- 
- } // anon namespace
- 
- gimple_opt_pass *
- make_pass_split_paths (gcc::context *ctxt)
- {
-   return new pass_split_paths (ctxt);
- }
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/ifcvt.cc gcc-17-20260712/gcc/ifcvt.cc
*** gcc-17-20260705/gcc/ifcvt.cc	Sun Jul  5 22:32:08 2026
--- gcc-17-20260712/gcc/ifcvt.cc	Sun Jul 12 22:32:08 2026
*************** noce_try_store_flag_logical (struct noce
*** 1797,1808 ****
    if (!noce_simple_bbs (if_info))
      return false;
  
!   bool swapped = false;
    if (a == CONSTM1_RTX (GET_MODE (dest))
        && if_info->rev_cond)
      {
        std::swap (a, b);
!       swapped = true;
      }
  
    if (b != CONSTM1_RTX (GET_MODE (dest)))
--- 1797,1808 ----
    if (!noce_simple_bbs (if_info))
      return false;
  
!   bool swapped = STORE_FLAG_VALUE == -1;
    if (a == CONSTM1_RTX (GET_MODE (dest))
        && if_info->rev_cond)
      {
        std::swap (a, b);
!       swapped = !swapped;
      }
  
    if (b != CONSTM1_RTX (GET_MODE (dest)))
diff -Nrcpad gcc-17-20260705/gcc/ipa-cp.cc gcc-17-20260712/gcc/ipa-cp.cc
*** gcc-17-20260705/gcc/ipa-cp.cc	Sun Jul  5 22:32:08 2026
--- gcc-17-20260712/gcc/ipa-cp.cc	Sun Jul 12 22:32:08 2026
*************** decide_about_value (struct cgraph_node *
*** 5958,5964 ****
    else if (val->local_size_cost + overall_size > get_max_overall_size (node))
      {
        if (dump_file && (dump_flags & TDF_DETAILS))
! 	fprintf (dump_file, "   Ignoring candidate value because "
  		 "maximum unit size would be reached with %li.\n",
  		 val->local_size_cost + overall_size);
        return false;
--- 5958,5964 ----
    else if (val->local_size_cost + overall_size > get_max_overall_size (node))
      {
        if (dump_file && (dump_flags & TDF_DETAILS))
! 	fprintf (dump_file, " - ignoring candidate value because "
  		 "maximum unit size would be reached with %li.\n",
  		 val->local_size_cost + overall_size);
        return false;
*************** decide_about_value (struct cgraph_node *
*** 5966,5972 ****
    else if (!get_info_about_necessary_edges (val, node, &freq_sum, &caller_count,
  					    &rec_count_sum, &count_sum,
  					    &called_without_ipa_profile))
!     return false;
  
    if (!dbg_cnt (ipa_cp_values))
      return false;
--- 5966,5984 ----
    else if (!get_info_about_necessary_edges (val, node, &freq_sum, &caller_count,
  					    &rec_count_sum, &count_sum,
  					    &called_without_ipa_profile))
!     {
!       if (dump_file && (dump_flags & TDF_DETAILS))
! 	{
! 	  fprintf (dump_file, " - skipping candidate value ");
! 	  print_ipcp_constant_value (dump_file, val->value);
! 	  fprintf (dump_file, " for ");
! 	  ipa_dump_param (dump_file, ipa_node_params_sum->get (node), index);
! 	  if (offset != -1)
! 	    fprintf (dump_file, ", offset: " HOST_WIDE_INT_PRINT_DEC, offset);
! 	  fprintf (dump_file, ": no relevant callers\n");
! 	}
!       return false;
!     }
  
    if (!dbg_cnt (ipa_cp_values))
      return false;
*************** decide_whether_version_node (struct cgra
*** 6168,6189 ****
    if (info->node_dead || count == 0)
      return false;
  
    if (dump_file && (dump_flags & TDF_DETAILS))
!     fprintf (dump_file, "\nEvaluating opportunities for %s.\n",
! 	     node->dump_name ());
  
    auto_vec <cloning_opportunity_ranking, 32> opp_ranking;
    for (int i = 0; i < count;i++)
      {
        if (!ipa_is_param_used (info, i))
! 	continue;
  
        class ipcp_param_lattices *plats = ipa_get_parm_lattices (info, i);
        ipcp_lattice<tree> *lat = &plats->itself;
        ipcp_lattice<ipa_polymorphic_call_context> *ctxlat = &plats->ctxlat;
  
        if (!lat->bottom
! 	  && !lat->is_single_const ())
  	{
  	  ipcp_value<tree> *val;
  	  for (val = lat->values; val; val = val->next)
--- 6180,6212 ----
    if (info->node_dead || count == 0)
      return false;
  
+   bool clone_for_all_contexts = node->local;
    if (dump_file && (dump_flags & TDF_DETAILS))
!     {
!       fprintf (dump_file, "\nEvaluating opportunities for %s.",
! 	       node->dump_name ());
!       if (clone_for_all_contexts)
! 	fprintf (dump_file, "  Will try to create a special all-context "
! 		 "clone.\n");
!       fprintf (dump_file, "\n");
!     }
  
    auto_vec <cloning_opportunity_ranking, 32> opp_ranking;
    for (int i = 0; i < count;i++)
      {
        if (!ipa_is_param_used (info, i))
! 	{
! 	  if (dump_file && (dump_flags & TDF_DETAILS))
! 	    fprintf (dump_file, " - ignoring unused parameter %i.\n", i);
! 	  continue;
! 	}
  
        class ipcp_param_lattices *plats = ipa_get_parm_lattices (info, i);
        ipcp_lattice<tree> *lat = &plats->itself;
        ipcp_lattice<ipa_polymorphic_call_context> *ctxlat = &plats->ctxlat;
  
        if (!lat->bottom
! 	  && (!clone_for_all_contexts || !lat->is_single_const ()))
  	{
  	  ipcp_value<tree> *val;
  	  for (val = lat->values; val; val = val->next)
*************** decide_whether_version_node (struct cgra
*** 6225,6233 ****
  	  ipcp_value<tree> *val;
  	  for (aglat = plats->aggs; aglat; aglat = aglat->next)
  	    if (!aglat->bottom && aglat->values
! 		/* If the following is false, the one value has been considered
  		   for cloning for all contexts.  */
! 		&& (plats->aggs_contain_variable
  		    || !aglat->is_single_const ()))
  	      for (val = aglat->values; val; val = val->next)
  		{
--- 6248,6257 ----
  	  ipcp_value<tree> *val;
  	  for (aglat = plats->aggs; aglat; aglat = aglat->next)
  	    if (!aglat->bottom && aglat->values
! 		/* If the following is false, the one value will be considered
  		   for cloning for all contexts.  */
! 		&& (!clone_for_all_contexts
! 		    || plats->aggs_contain_variable
  		    || !aglat->is_single_const ()))
  	      for (val = aglat->values; val; val = val->next)
  		{
*************** decide_whether_version_node (struct cgra
*** 6241,6247 ****
  	}
  
        if (!ctxlat->bottom
! 	  && !ctxlat->is_single_const ())
  	{
  	  ipcp_value<ipa_polymorphic_call_context> *val;
  	  for (val = ctxlat->values; val; val = val->next)
--- 6265,6271 ----
  	}
  
        if (!ctxlat->bottom
! 	  && (!clone_for_all_contexts || !ctxlat->is_single_const ()))
  	{
  	  ipcp_value<ipa_polymorphic_call_context> *val;
  	  for (val = ctxlat->values; val; val = val->next)
*************** decide_whether_version_node (struct cgra
*** 6284,6302 ****
  	}
      }
  
    struct caller_statistics stats;
    init_caller_stats (&stats);
    node->call_for_symbol_thunks_and_aliases (gather_caller_stats, &stats,
  						false);
    if (!stats.n_calls)
      {
!       if (dump_file)
  	fprintf (dump_file, "   Not cloning for all contexts because "
  		 "there are no callers of the original node (any more).\n");
        return ret;
      }
  
-   bool do_clone_for_all_contexts = false;
    ipa_auto_call_arg_values avals;
    int removable_params_cost;
    bool ctx_independent_const
--- 6308,6328 ----
  	}
      }
  
+   if (!clone_for_all_contexts)
+     return ret;
+ 
    struct caller_statistics stats;
    init_caller_stats (&stats);
    node->call_for_symbol_thunks_and_aliases (gather_caller_stats, &stats,
  						false);
    if (!stats.n_calls)
      {
!       if (dump_file && (dump_flags & TDF_DETAILS))
  	fprintf (dump_file, "   Not cloning for all contexts because "
  		 "there are no callers of the original node (any more).\n");
        return ret;
      }
  
    ipa_auto_call_arg_values avals;
    int removable_params_cost;
    bool ctx_independent_const
*************** decide_whether_version_node (struct cgra
*** 6305,6364 ****
    if (ctx_independent_const || devirt_bonus > 0
        || (removable_params_cost && clone_for_param_removal_p (node)))
      {
!        ipa_call_estimates estimates;
! 
!       estimate_ipcp_clone_size_and_time (node, &avals, &estimates);
!       sreal time = estimates.nonspecialized_time - estimates.time;
!       time += devirt_bonus;
!       time += hint_time_bonus (node, estimates);
!       time += removable_params_cost;
!       int size = estimates.size - stats.n_calls * removable_params_cost;
! 
!       if (dump_file && (dump_flags & TDF_DETAILS))
! 	fprintf (dump_file, " - context independent values, size: %i, "
! 		 "time_benefit: %f\n", size, (time).to_double ());
! 
!       if (size <= 0 || node->local)
! 	{
! 	  if (!dbg_cnt (ipa_cp_values))
! 	    return ret;
! 
! 	  do_clone_for_all_contexts = true;
! 	  if (dump_file)
! 	    fprintf (dump_file, "   Decided to specialize for all "
! 		     "known contexts, code not going to grow.\n");
! 	}
!       else if (good_cloning_opportunity_p (node, time, stats.freq_sum,
! 					   stats.count_sum, size,
! 					   stats.called_without_ipa_profile,
! 					   cur_sweep))
! 	{
! 	  if (size + overall_size <= get_max_overall_size (node))
! 	    {
! 	      if (!dbg_cnt (ipa_cp_values))
! 		return ret;
! 
! 	      do_clone_for_all_contexts = true;
! 	      overall_size += size;
! 	      if (dump_file)
! 		fprintf (dump_file, "   Decided to specialize for all "
! 			 "known contexts, growth (to %li) deemed "
! 			 "beneficial.\n", overall_size);
! 	    }
! 	  else if (dump_file && (dump_flags & TDF_DETAILS))
! 	    fprintf (dump_file, "   Not cloning for all contexts because "
! 		     "maximum unit size would be reached with %li.\n",
! 		     size + overall_size);
! 	}
!       else if (dump_file && (dump_flags & TDF_DETAILS))
! 	fprintf (dump_file, "   Not cloning for all contexts because "
! 		 "!good_cloning_opportunity_p.\n");
!     }
  
-   if (do_clone_for_all_contexts)
-     {
        auto_vec<cgraph_edge *> callers = node->collect_callers ();
- 
        for (int i = callers.length () - 1; i >= 0; i--)
  	{
  	  cgraph_edge *cs = callers[i];
--- 6331,6340 ----
    if (ctx_independent_const || devirt_bonus > 0
        || (removable_params_cost && clone_for_param_removal_p (node)))
      {
!       if (!dbg_cnt (ipa_cp_values))
! 	return ret;
  
        auto_vec<cgraph_edge *> callers = node->collect_callers ();
        for (int i = callers.length () - 1; i >= 0; i--)
  	{
  	  cgraph_edge *cs = callers[i];
diff -Nrcpad gcc-17-20260705/gcc/m2/ChangeLog gcc-17-20260712/gcc/m2/ChangeLog
*** gcc-17-20260705/gcc/m2/ChangeLog	Sun Jul  5 22:32:08 2026
--- gcc-17-20260712/gcc/m2/ChangeLog	Sun Jul 12 22:32:08 2026
***************
*** 1,3 ****
--- 1,8 ----
+ 2026-07-10  Léo Hardt  <leom.hardt@inf.ufrgs.br>
+ 
+ 	* plugin/m2rte.cc: Removed unused extern bool
+ 	ggc_force_collect.
+ 
  2026-06-03  Gaius Mulley  <gaiusmod2@gmail.com>
  
  	PR modula2/125512
diff -Nrcpad gcc-17-20260705/gcc/m2/plugin/m2rte.cc gcc-17-20260712/gcc/m2/plugin/m2rte.cc
*** gcc-17-20260705/gcc/m2/plugin/m2rte.cc	Sun Jul  5 22:32:08 2026
--- gcc-17-20260712/gcc/m2/plugin/m2rte.cc	Sun Jul 12 22:32:08 2026
*************** along with GNU Modula-2; see the file CO
*** 41,47 ****
  #include "context.h"
  
  #include "rtegraph.h"
- extern bool ggc_force_collect;
  extern void ggc_collect (void);
  
  #undef DEBUG_BASICBLOCK
--- 41,46 ----
diff -Nrcpad gcc-17-20260705/gcc/machmode.h gcc-17-20260712/gcc/machmode.h
*** gcc-17-20260705/gcc/machmode.h	Sun Jul  5 22:32:08 2026
--- gcc-17-20260712/gcc/machmode.h	Sun Jul 12 22:32:08 2026
*************** class opt_mode
*** 264,276 ****
  public:
    enum from_int { dummy = MAX_MACHINE_MODE };
  
!   ALWAYS_INLINE CONSTEXPR opt_mode () : m_mode (E_VOIDmode) {}
!   ALWAYS_INLINE CONSTEXPR opt_mode (const T &m) : m_mode (m) {}
    template<typename U>
!   ALWAYS_INLINE CONSTEXPR opt_mode (const U &m) : m_mode (T (m)) {}
    template<typename U>
!   ALWAYS_INLINE CONSTEXPR opt_mode (const opt_mode<U> &);
!   ALWAYS_INLINE CONSTEXPR opt_mode (from_int m) : m_mode (machine_mode (m)) {}
  
    machine_mode else_void () const;
    machine_mode else_blk () const { return else_mode (BLKmode); }
--- 264,276 ----
  public:
    enum from_int { dummy = MAX_MACHINE_MODE };
  
!   ALWAYS_INLINE constexpr opt_mode () : m_mode (E_VOIDmode) {}
!   ALWAYS_INLINE constexpr opt_mode (const T &m) : m_mode (m) {}
    template<typename U>
!   ALWAYS_INLINE constexpr opt_mode (const U &m) : m_mode (T (m)) {}
    template<typename U>
!   ALWAYS_INLINE constexpr opt_mode (const opt_mode<U> &);
!   ALWAYS_INLINE constexpr opt_mode (from_int m) : m_mode (machine_mode (m)) {}
  
    machine_mode else_void () const;
    machine_mode else_blk () const { return else_mode (BLKmode); }
*************** private:
*** 289,295 ****
  
  template<typename T>
  template<typename U>
! ALWAYS_INLINE CONSTEXPR
  opt_mode<T>::opt_mode (const opt_mode<U> &m)
    : m_mode (m.exists () ? T (m.require ()) : E_VOIDmode)
  {
--- 289,295 ----
  
  template<typename T>
  template<typename U>
! ALWAYS_INLINE constexpr
  opt_mode<T>::opt_mode (const opt_mode<U> &m)
    : m_mode (m.exists () ? T (m.require ()) : E_VOIDmode)
  {
*************** struct pod_mode
*** 357,366 ****
    typedef typename T::measurement_type measurement_type;
  
    machine_mode m_mode;
!   ALWAYS_INLINE CONSTEXPR
    operator machine_mode () const { return m_mode; }
  
!   ALWAYS_INLINE CONSTEXPR
    operator T () const { return from_int (m_mode); }
  
    ALWAYS_INLINE pod_mode &operator = (const T &m) { m_mode = m; return *this; }
--- 357,366 ----
    typedef typename T::measurement_type measurement_type;
  
    machine_mode m_mode;
!   ALWAYS_INLINE constexpr
    operator machine_mode () const { return m_mode; }
  
!   ALWAYS_INLINE constexpr
    operator T () const { return from_int (m_mode); }
  
    ALWAYS_INLINE pod_mode &operator = (const T &m) { m_mode = m; return *this; }
*************** public:
*** 441,450 ****
  
    ALWAYS_INLINE scalar_int_mode () {}
  
!   ALWAYS_INLINE CONSTEXPR
    scalar_int_mode (from_int m) : m_mode (machine_mode (m)) {}
  
!   ALWAYS_INLINE CONSTEXPR operator machine_mode () const { return m_mode; }
  
    static bool includes_p (machine_mode);
  
--- 441,450 ----
  
    ALWAYS_INLINE scalar_int_mode () {}
  
!   ALWAYS_INLINE constexpr
    scalar_int_mode (from_int m) : m_mode (machine_mode (m)) {}
  
!   ALWAYS_INLINE constexpr operator machine_mode () const { return m_mode; }
  
    static bool includes_p (machine_mode);
  
*************** public:
*** 469,478 ****
  
    ALWAYS_INLINE scalar_float_mode () {}
  
!   ALWAYS_INLINE CONSTEXPR
    scalar_float_mode (from_int m) : m_mode (machine_mode (m)) {}
  
!   ALWAYS_INLINE CONSTEXPR operator machine_mode () const { return m_mode; }
  
    static bool includes_p (machine_mode);
  
--- 469,478 ----
  
    ALWAYS_INLINE scalar_float_mode () {}
  
!   ALWAYS_INLINE constexpr
    scalar_float_mode (from_int m) : m_mode (machine_mode (m)) {}
  
!   ALWAYS_INLINE constexpr operator machine_mode () const { return m_mode; }
  
    static bool includes_p (machine_mode);
  
*************** public:
*** 497,515 ****
  
    ALWAYS_INLINE scalar_mode () {}
  
!   ALWAYS_INLINE CONSTEXPR
    scalar_mode (from_int m) : m_mode (machine_mode (m)) {}
  
!   ALWAYS_INLINE CONSTEXPR
    scalar_mode (const scalar_int_mode &m) : m_mode (m) {}
  
!   ALWAYS_INLINE CONSTEXPR
    scalar_mode (const scalar_float_mode &m) : m_mode (m) {}
  
!   ALWAYS_INLINE CONSTEXPR
    scalar_mode (const scalar_int_mode_pod &m) : m_mode (m) {}
  
!   ALWAYS_INLINE CONSTEXPR operator machine_mode () const { return m_mode; }
  
    static bool includes_p (machine_mode);
  
--- 497,515 ----
  
    ALWAYS_INLINE scalar_mode () {}
  
!   ALWAYS_INLINE constexpr
    scalar_mode (from_int m) : m_mode (machine_mode (m)) {}
  
!   ALWAYS_INLINE constexpr
    scalar_mode (const scalar_int_mode &m) : m_mode (m) {}
  
!   ALWAYS_INLINE constexpr
    scalar_mode (const scalar_float_mode &m) : m_mode (m) {}
  
!   ALWAYS_INLINE constexpr
    scalar_mode (const scalar_int_mode_pod &m) : m_mode (m) {}
  
!   ALWAYS_INLINE constexpr operator machine_mode () const { return m_mode; }
  
    static bool includes_p (machine_mode);
  
*************** public:
*** 547,556 ****
  
    ALWAYS_INLINE complex_mode () {}
  
!   ALWAYS_INLINE CONSTEXPR
    complex_mode (from_int m) : m_mode (machine_mode (m)) {}
  
!   ALWAYS_INLINE CONSTEXPR operator machine_mode () const { return m_mode; }
  
    static bool includes_p (machine_mode);
  
--- 547,556 ----
  
    ALWAYS_INLINE complex_mode () {}
  
!   ALWAYS_INLINE constexpr
    complex_mode (from_int m) : m_mode (machine_mode (m)) {}
  
!   ALWAYS_INLINE constexpr operator machine_mode () const { return m_mode; }
  
    static bool includes_p (machine_mode);
  
*************** public:
*** 837,864 ****
  
    ALWAYS_INLINE fixed_size_mode () {}
  
!   ALWAYS_INLINE CONSTEXPR
    fixed_size_mode (from_int m) : m_mode (machine_mode (m)) {}
  
!   ALWAYS_INLINE CONSTEXPR
    fixed_size_mode (const scalar_mode &m) : m_mode (m) {}
  
!   ALWAYS_INLINE CONSTEXPR
    fixed_size_mode (const scalar_int_mode &m) : m_mode (m) {}
  
!   ALWAYS_INLINE CONSTEXPR
    fixed_size_mode (const scalar_float_mode &m) : m_mode (m) {}
  
!   ALWAYS_INLINE CONSTEXPR
    fixed_size_mode (const scalar_mode_pod &m) : m_mode (m) {}
  
!   ALWAYS_INLINE CONSTEXPR
    fixed_size_mode (const scalar_int_mode_pod &m) : m_mode (m) {}
  
!   ALWAYS_INLINE CONSTEXPR
    fixed_size_mode (const complex_mode &m) : m_mode (m) {}
  
!   ALWAYS_INLINE CONSTEXPR operator machine_mode () const { return m_mode; }
  
    static bool includes_p (machine_mode);
  
--- 837,864 ----
  
    ALWAYS_INLINE fixed_size_mode () {}
  
!   ALWAYS_INLINE constexpr
    fixed_size_mode (from_int m) : m_mode (machine_mode (m)) {}
  
!   ALWAYS_INLINE constexpr
    fixed_size_mode (const scalar_mode &m) : m_mode (m) {}
  
!   ALWAYS_INLINE constexpr
    fixed_size_mode (const scalar_int_mode &m) : m_mode (m) {}
  
!   ALWAYS_INLINE constexpr
    fixed_size_mode (const scalar_float_mode &m) : m_mode (m) {}
  
!   ALWAYS_INLINE constexpr
    fixed_size_mode (const scalar_mode_pod &m) : m_mode (m) {}
  
!   ALWAYS_INLINE constexpr
    fixed_size_mode (const scalar_int_mode_pod &m) : m_mode (m) {}
  
!   ALWAYS_INLINE constexpr
    fixed_size_mode (const complex_mode &m) : m_mode (m) {}
  
!   ALWAYS_INLINE constexpr operator machine_mode () const { return m_mode; }
  
    static bool includes_p (machine_mode);
  
diff -Nrcpad gcc-17-20260705/gcc/match.pd gcc-17-20260712/gcc/match.pd
*** gcc-17-20260705/gcc/match.pd	Sun Jul  5 22:32:08 2026
--- gcc-17-20260712/gcc/match.pd	Sun Jul 12 22:32:08 2026
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 632,638 ****
        && !integer_zerop (@1)
        && (!flag_non_call_exceptions || tree_expr_nonzero_p (@1)))
    (if (TYPE_UNSIGNED (type))
!    (convert (eq:boolean_type_node @1 { build_one_cst (type); }))
     (if (fold_before_rtl_expansion_p ())
      (with { tree utype = unsigned_type_for (type); }
       (cond (le (plus (convert:utype @1) { build_one_cst (utype); })
--- 632,638 ----
        && !integer_zerop (@1)
        && (!flag_non_call_exceptions || tree_expr_nonzero_p (@1)))
    (if (TYPE_UNSIGNED (type))
!    (convert (eq:boolean_type_node @1 @0))
     (if (fold_before_rtl_expansion_p ())
      (with { tree utype = unsigned_type_for (type); }
       (cond (le (plus (convert:utype @1) { build_one_cst (utype); })
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 1229,1234 ****
--- 1229,1241 ----
   (mult (absu@1 @0) @1)
   (mult (convert@2 @0) @2))
  
+ #if GIMPLE
+ /* Simplify SAD(x, x, acc) -> acc since the absolute difference is zero.  */
+ (simplify
+  (sad @0 @0 @1)
+  @1)
+ #endif
+ 
  /* cos(copysign(x, y)) -> cos(x).  Similarly for cosh.  */
  (for coss (COS COSH)
   (for copysigns (COPYSIGN)
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 1321,1334 ****
  
  /* Fold a * !a into 0.  */
  (simplify
!  (mult:c @0 (convert? (eq @0 integer_zerop)))
!   { build_zero_cst (type); })
  (simplify
!  (mult:c @0 (vec_cond (eq @0 integer_zerop) @1 integer_zerop))
!   { build_zero_cst (type); })
  (simplify
!  (mult:c @0 (vec_cond (ne @0 integer_zerop) integer_zerop @1))
!   { build_zero_cst (type); })
  
  /* Shifts by precision or greater result in zero.  */
  (for shift (lshift rshift)
--- 1328,1341 ----
  
  /* Fold a * !a into 0.  */
  (simplify
!  (mult:c @0 (convert? (eq @0 integer_zerop@2)))
!   @2)
  (simplify
!  (mult:c @0 (vec_cond (eq @0 integer_zerop) @1 integer_zerop@2))
!   @2)
  (simplify
!  (mult:c @0 (vec_cond (ne @0 integer_zerop) integer_zerop@2 @1))
!   @2)
  
  /* Shifts by precision or greater result in zero.  */
  (for shift (lshift rshift)
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 1587,1596 ****
     (a - 1) ^ -a -> -1.  */
  (for bit_op (bit_ior bit_xor bit_and)
   (simplify
!   (bit_op:c (plus @0 integer_minus_onep) (negate @0))
    (if (bit_op == BIT_AND_EXPR)
      { build_zero_cst (type); }
!     { build_minus_one_cst (type); }))
   (simplify
    (bit_op:c (minus @0 integer_onep) (negate @0))
    (if (bit_op == BIT_AND_EXPR)
--- 1594,1603 ----
     (a - 1) ^ -a -> -1.  */
  (for bit_op (bit_ior bit_xor bit_and)
   (simplify
!   (bit_op:c (plus @0 integer_minus_onep@1) (negate @0))
    (if (bit_op == BIT_AND_EXPR)
      { build_zero_cst (type); }
!     @1))
   (simplify
    (bit_op:c (minus @0 integer_onep) (negate @0))
    (if (bit_op == BIT_AND_EXPR)
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 3095,3109 ****
     (op @1 { build_zero_cst (TREE_TYPE (@1)); }))))
  
  /* Transform:
!    (X / Y) == 0 -> X < Y if X, Y are unsigned.
!    (X / Y) != 0 -> X >= Y, if X, Y are unsigned.  */
  (for cmp (eq ne)
       ocmp (lt ge)
   (simplify
!   (cmp (trunc_div @0 @1) integer_zerop)
!   (if (TYPE_UNSIGNED (TREE_TYPE (@0))
         /* Complex ==/!= is allowed, but not </>=.  */
!        && TREE_CODE (TREE_TYPE (@0)) != COMPLEX_TYPE
         && (VECTOR_TYPE_P (type) || !VECTOR_TYPE_P (TREE_TYPE (@0))))
     (ocmp @0 @1))))
  
--- 3102,3115 ----
     (op @1 { build_zero_cst (TREE_TYPE (@1)); }))))
  
  /* Transform:
!    (X / Y) == 0 -> X < Y if X, Y are non-negative.
!    (X / Y) != 0 -> X >= Y, if X, Y are non-negative.  */
  (for cmp (eq ne)
       ocmp (lt ge)
   (simplify
!   (cmp (trunc_div tree_expr_nonnegative_p@0 tree_expr_nonnegative_p@1) integer_zerop)
         /* Complex ==/!= is allowed, but not </>=.  */
!   (if (TREE_CODE (TREE_TYPE (@0)) != COMPLEX_TYPE
         && (VECTOR_TYPE_P (type) || !VECTOR_TYPE_P (TREE_TYPE (@0))))
     (ocmp @0 @1))))
  
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 3820,3854 ****
      (if (types_match (type, TREE_TYPE (@0)))
       (bit_xor @0 { build_one_cst (type); } ))))))
  
  /* ((a ^ b) & c) cmp d || a != b --> (0 cmp d || a != b). */
! (for cmp (simple_comparison)
    (simplify
!     (bit_ior
        (cmp:c
  	(bit_and:c
! 	  (bit_xor:c @0 @1)
  	  tree_expr_nonzero_p@2)
  	@3)
!       (ne@4 @0 @1))
!     (bit_ior
        (cmp
  	{ build_zero_cst (TREE_TYPE (@0)); }
  	@3)
!       @4)))
! 
  /* (a ^ b) cmp c || a != b --> (0 cmp c || a != b). */
! (for cmp (simple_comparison)
    (simplify
!     (bit_ior
        (cmp:c
! 	(bit_xor:c @0 @1)
  	@2)
!       (ne@3 @0 @1))
!     (bit_ior
        (cmp
! 	{ build_zero_cst (TREE_TYPE (@0)); }
! 	@2)
!       @3)))
  
  /* We can't reassociate at all for saturating types.  */
  (if (!TYPE_SATURATING (type))
--- 3826,3862 ----
      (if (types_match (type, TREE_TYPE (@0)))
       (bit_xor @0 { build_one_cst (type); } ))))))
  
+ 
  /* ((a ^ b) & c) cmp d || a != b --> (0 cmp d || a != b). */
! /* ((a ^ b) & c) cmp d && a == b --> (0 cmp d && a == b). */
! (for bitop (bit_ior bit_and)
!      neeq  (ne      eq)
!  (for cmp  (simple_comparison)
    (simplify
!     (bitop:c
        (cmp:c
  	(bit_and:c
! 	  (bit_xor @0 @1)
  	  tree_expr_nonzero_p@2)
  	@3)
!       (neeq@4 @0 @1))
!     (bitop
        (cmp
  	{ build_zero_cst (TREE_TYPE (@0)); }
  	@3)
!       @4))
  /* (a ^ b) cmp c || a != b --> (0 cmp c || a != b). */
! /* (a ^ b) cmp c && a == b --> (0 cmp c || a == b). */
    (simplify
!     (bitop:c
        (cmp:c
! 	(bit_xor @0 @1)
  	@2)
!       (neeq@3 @0 @1))
!     (bitop
        (cmp
! 	{ build_zero_cst (TREE_TYPE (@0)); } @2)
!       @3))))
  
  /* We can't reassociate at all for saturating types.  */
  (if (!TYPE_SATURATING (type))
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 5109,5114 ****
--- 5117,5184 ----
         && TYPE_UNSIGNED (TREE_TYPE (@1)))
     (cmp @0 @1))))
  
+ /* PR124808: (A >> CST1) CMP CST2 -> A CMP (CST2 << CST1)
+    Canonicalize non-equality comparisons between a right
+    shift and a constant, turning it into a comparison
+    with a constant that is left shifted.  If we view A as:
+ 
+    A: "|--- CST2 ----|--CST1--|"
+ 
+    A >> CST1 will be equal to CST2 for all A values in the
+    range CST2 << CST1 to (CST2 << CST1) | 1s_mask (CST1).
+ 
+    Therefore:
+    - (A >> CST1) < CST2 -> A < (CST2 << CST1), A must
+      be smaller than all values from the range;
+    - (A >> CST1) <= CST2 -> A <= (CST2 << CST1) | mask,
+      A must be smaller or equal than the range end;
+    - (A >> CST1) > CST2 -> A > (CST2 << CST1) | mask,
+      A must be greater than all values from the range;
+    - (A >> CST1) >= CST2 -> A >= (CST2 << CST1), A must
+      be greater or equal than the range start.
+ 
+    We're also using "single_use" and wrapping around "if GIMPLE"
+    because (1) this class "VA1 LSHIFT/RSHIFT VAL2 CMP VAL3" of
+    optimizations tend to match CTZ|CLZ builtin patterns and we
+    don't want to trip on them and (2) we will get in the way of
+    certain optimizations (see ARM's sat-1.c test) that are done
+    using GENERIC due to how forwprop currently works.  */
+ #if GIMPLE
+ (for cmp (le lt ge gt)
+  (simplify
+   (cmp (rshift@3 @0 INTEGER_CST@1) INTEGER_CST@2)
+   (if (INTEGRAL_TYPE_P (TREE_TYPE (@0))
+        && single_use (@3)
+        && tree_fits_uhwi_p (@1)
+        && tree_to_uhwi (@1) < TYPE_PRECISION (TREE_TYPE (@0))
+        && tree_int_cst_sgn (@2) >= 0
+        && tree_to_uhwi (@1) < TYPE_PRECISION (TREE_TYPE (@2))
+        && (wi::to_wide (@2) == 0
+ 	   /* If @2 is nonzero, verify if we'll overflow when
+ 	      doing @2 << @1 by checking if the shift amount
+ 	      can start throwing 1s away if type_unsigned, or
+ 	      if the shift amount can reach the sign bit.  */
+ 	   || (TYPE_UNSIGNED (TREE_TYPE (@2))
+ 	       && wi::leu_p (wi::to_wide (@1), wi::clz (wi::to_wide (@2))))
+ 	   || (!TYPE_UNSIGNED (TREE_TYPE (@2))
+ 	       && wi::ltu_p (wi::to_wide (@1), wi::clz (wi::to_wide (@2))))))
+ 
+    /* No need to set the lower @1 bits of the resulting
+       lshift for "<" and ">=" comparisons.  */
+    (if (cmp == LT_EXPR || cmp == GE_EXPR)
+     (cmp @0 (lshift @2 @1))
+ 
+      /* For "<=" and ">" set the lower @1 lshift bits.  */
+      (with {
+ 	tree type2 = TREE_TYPE (@2);
+ 	unsigned prec = TYPE_PRECISION (type2);
+ 	unsigned mask_len = tree_to_uhwi (@1);
+ 	wide_int cst1_mask = wi::mask (mask_len, false, prec);
+       }
+        (cmp @0 (bit_ior (lshift @2 @1)
+ 			{ wide_int_to_tree (type2, cst1_mask); })))))))
+ #endif
+ 
  /* Rewrite an LROTATE_EXPR by a constant into an
     RROTATE_EXPR by a new constant.  */
  (simplify
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 7730,7735 ****
--- 7800,7806 ----
      (with
       {
         tree itype = TREE_TYPE (@0);
+        signop isign = TYPE_SIGN (itype);
         format_helper fmt (REAL_MODE_FORMAT (TYPE_MODE (TREE_TYPE (@1))));
         bool itype_ok = fmt.can_represent_integral_type_p (itype);
         bool value_ok = itype_ok;
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 7747,7756 ****
  	   && gimple_match_range_of_expr (vr, @0, @2))
  	 value_ok = fmt.can_represent_range_value_p (&vr);
  #endif
       }
!      /* TODO: allow non-fitting itype and SNaNs when
! 	-fno-trapping-math.  */
!      (if (value_ok && ! exception_p)
        (with
         {
  	 signop isign = TYPE_SIGN (itype);
--- 7818,7829 ----
  	   && gimple_match_range_of_expr (vr, @0, @2))
  	 value_ok = fmt.can_represent_range_value_p (&vr);
  #endif
+        /* Conversion may raise FPE_INEXACT with -ftrapping-math.  */
+        if (flag_trapping_math && !value_ok)
+ 	 exception_p = true;
       }
! 
!      (if (! exception_p)
        (with
         {
  	 signop isign = TYPE_SIGN (itype);
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 7775,7781 ****
  	 else
  	   real_trunc (&icst, fmt, cst);
  
! 	 bool cst_int_p = !real_isnan (cst) && real_identical (&icst, cst);
  
  	 bool overflow_p = false;
  	 wide_int icst_val
--- 7848,7854 ----
  	 else
  	   real_trunc (&icst, fmt, cst);
  
! 	 bool cst_int_p = real_isfinite (cst) && real_identical (&icst, cst);
  
  	 bool overflow_p = false;
  	 wide_int icst_val
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 7789,7809 ****
  	(if (real_compare (GT_EXPR, cst, &imax))
  	 { constant_boolean_node (cmp == LT_EXPR || cmp == LE_EXPR || cmp == NE_EXPR,
  				  type); })
! 	/* Remove cast if CST is an integer representable by ITYPE.  */
! 	(if (cst_int_p)
! 	 (cmp @0 { gcc_assert (!overflow_p);
! 		   wide_int_to_tree (itype, icst_val); })
! 	)
! 	/* When CST is fractional, optimize
  	    (FTYPE) N == CST -> 0
  	    (FTYPE) N != CST -> 1.  */
! 	(if (cmp == EQ_EXPR || cmp == NE_EXPR)
  	 { constant_boolean_node (cmp == NE_EXPR, type); })
  	/* Otherwise replace with sensible integer constant.  */
! 	(with
! 	 {
! 	   gcc_checking_assert (!overflow_p);
! 	 }
  	 (icmp @0 { wide_int_to_tree (itype, icst_val); })))))))))
  
  /* Fold A /[ex] B CMP C to A CMP B * C.  */
--- 7862,7884 ----
  	(if (real_compare (GT_EXPR, cst, &imax))
  	 { constant_boolean_node (cmp == LT_EXPR || cmp == LE_EXPR || cmp == NE_EXPR,
  				  type); })
! 	/* When CST is fractional, infinity or NaN, then optimize
  	    (FTYPE) N == CST -> 0
  	    (FTYPE) N != CST -> 1.  */
! 	(if (!cst_int_p
! 	     && (cmp == EQ_EXPR || cmp == NE_EXPR))
  	 { constant_boolean_node (cmp == NE_EXPR, type); })
+ 	/* Remove cast if CST is an integer representable by ITYPE,
+ 	   and it is safe to do so.  */
+ 	(if (cst_int_p
+ 	     && fold_cmp_float_cst_p (imin_val, imax_val, cmp, &icst, fmt,
+ 				      icst_val, isign))
+ 	 (cmp @0 { wide_int_to_tree (itype, icst_val); })
+ 	)
  	/* Otherwise replace with sensible integer constant.  */
! 	(if (!cst_int_p
! 	     && fold_cmp_float_cst_p (imin_val, imax_val, icmp, &icst, fmt,
! 				      icst_val, isign))
  	 (icmp @0 { wide_int_to_tree (itype, icst_val); })))))))))
  
  /* Fold A /[ex] B CMP C to A CMP B * C.  */
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 8652,8661 ****
     (with { tree t = TREE_TYPE (@0), cpx = build_complex_type (t); }
      (out (imagpart (IFN_MUL_OVERFLOW:cpx @0 @1)) { build_zero_cst (t); })))))
  
! /* Similarly, for unsigned operands, (((type) A * B) >> prec) != 0 where type
!    is at least twice as wide as type of A and B, simplify to
!    __builtin_mul_overflow (A, B, <unused>).  */
  (for cmp (eq ne)
   (simplify
    (cmp (rshift (mult:s (convert@3 @0) (convert @1)) INTEGER_CST@2)
         integer_zerop)
--- 8727,8737 ----
     (with { tree t = TREE_TYPE (@0), cpx = build_complex_type (t); }
      (out (imagpart (IFN_MUL_OVERFLOW:cpx @0 @1)) { build_zero_cst (t); })))))
  
! /* Similarly, for unsigned operands, (((type) A * B) >> prec) != 0
!    (or == 0) where type is at least twice as wide as type of A and B,
!    canonicalize to the following ((utype) A * B) > max (or <= max) pattern.  */
  (for cmp (eq ne)
+      out (le gt)
   (simplify
    (cmp (rshift (mult:s (convert@3 @0) (convert @1)) INTEGER_CST@2)
         integer_zerop)
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 8667,8677 ****
         && tree_fits_uhwi_p (@2)
         && tree_to_uhwi (@2) == TYPE_PRECISION (TREE_TYPE (@0))
         && types_match (@0, @1)
         && type_has_mode_precision_p (TREE_TYPE (@0))
         && (optab_handler (umulv4_optab, TYPE_MODE (TREE_TYPE (@0)))
  	   != CODE_FOR_nothing))
     (with { tree t = TREE_TYPE (@0), cpx = build_complex_type (t); }
!     (cmp (imagpart (IFN_MUL_OVERFLOW:cpx @0 @1)) { build_zero_cst (t); })))))
  
  /* Demote operands of IFN_{ADD,SUB,MUL}_OVERFLOW.  */
  (for ovf (IFN_ADD_OVERFLOW IFN_SUB_OVERFLOW IFN_MUL_OVERFLOW)
--- 8743,8775 ----
         && tree_fits_uhwi_p (@2)
         && tree_to_uhwi (@2) == TYPE_PRECISION (TREE_TYPE (@0))
         && types_match (@0, @1)
+        && TYPE_MAX_VALUE (TREE_TYPE (@0)))
+    (with { tree utype = unsigned_type_for (TREE_TYPE (@3)); }
+     (out (mult:utype (convert:utype @0) (convert:utype @1))
+ 	 { fold_convert (utype, TYPE_MAX_VALUE (TREE_TYPE (@0))); })))))
+ 
+ /* For unsigned operands, ((type) A * B) > max where type is at least twice as wide
+    as the type of unsigned A and B.
+    Simplify it to __builtin_mul_overflow (A, B, <unused>). */
+ (for cmp (gt le)
+      out (ne eq)
+  (simplify
+   (cmp (mult:s (convert@3 @0) (convert @1)) INTEGER_CST@2)
+   (if (INTEGRAL_TYPE_P (TREE_TYPE (@0))
+        && INTEGRAL_TYPE_P (TREE_TYPE (@3))
+        && TYPE_UNSIGNED (TREE_TYPE (@0))
+        && TYPE_UNSIGNED (TREE_TYPE (@3))
+        && (TYPE_PRECISION (TREE_TYPE (@3))
+ 	   >= 2 * TYPE_PRECISION (TREE_TYPE (@0)))
+        && TYPE_MAX_VALUE (TREE_TYPE (@0))
+        && (wi::to_widest (@2)
+ 	   == wi::to_widest (TYPE_MAX_VALUE (TREE_TYPE (@0))))
+        && types_match (@0, @1)
         && type_has_mode_precision_p (TREE_TYPE (@0))
         && (optab_handler (umulv4_optab, TYPE_MODE (TREE_TYPE (@0)))
  	   != CODE_FOR_nothing))
     (with { tree t = TREE_TYPE (@0), cpx = build_complex_type (t); }
!     (out (imagpart (IFN_MUL_OVERFLOW:cpx @0 @1)) { build_zero_cst (t); })))))
  
  /* Demote operands of IFN_{ADD,SUB,MUL}_OVERFLOW.  */
  (for ovf (IFN_ADD_OVERFLOW IFN_SUB_OVERFLOW IFN_MUL_OVERFLOW)
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 9395,9401 ****
         && TYPE_PRECISION (type) < TYPE_PRECISION (TREE_TYPE (@2))
         && direct_internal_fn_supported_p (IFN_COPYSIGN,
  					  type, OPTIMIZE_FOR_BOTH))
!     (IFN_COPYSIGN @0 @1))))
  
  (for froms (BUILT_IN_FMAF BUILT_IN_FMA BUILT_IN_FMAL)
       tos (IFN_FMA IFN_FMA IFN_FMA)
--- 9493,9520 ----
         && TYPE_PRECISION (type) < TYPE_PRECISION (TREE_TYPE (@2))
         && direct_internal_fn_supported_p (IFN_COPYSIGN,
  					  type, OPTIMIZE_FOR_BOTH))
!     (IFN_COPYSIGN @0 @1)))
!  /* Simplify (trunc)copysign ((extend)x, CST) to copysign (x, -1.0/1.0).  */
!  (simplify
!   (convert (copysigns (convert@2 @0) REAL_CST@1))
!    (if (optimize
!        && !HONOR_SNANS (@2)
!        && types_match (type, TREE_TYPE (@0))
!        && TYPE_PRECISION (type) < TYPE_PRECISION (TREE_TYPE (@2))
!        && direct_internal_fn_supported_p (IFN_COPYSIGN,
! 					  type, OPTIMIZE_FOR_BOTH))
!     (if (REAL_VALUE_NEGATIVE (TREE_REAL_CST (@1)))
!      (IFN_COPYSIGN @0 { build_minus_one_cst (type); })
!      (IFN_COPYSIGN @0 { build_one_cst (type); })))))
! 
! /* (trunc)abs (extend x) --> abs (x)  */
! (simplify
!  (convert (abs (convert@1 @0)))
!   (if (optimize
!       && !HONOR_SNANS (@1)
!       && types_match (type, TREE_TYPE (@0))
!       && TYPE_PRECISION (type) < TYPE_PRECISION (TREE_TYPE (@1)))
!    (abs @0)))
  
  (for froms (BUILT_IN_FMAF BUILT_IN_FMA BUILT_IN_FMAL)
       tos (IFN_FMA IFN_FMA IFN_FMA)
*************** and,
*** 12275,12280 ****
--- 12394,12462 ----
    (if (can_fold)
      (view_convert (vec_perm @0 @1 @2)))))
  
+ /* Simplify
+      v = VEC_PERM_EXPR <op0, op1, sel>;
+      res = BIT_INSERT_EXPR <v, new_elt, bit_pos>;
+    by replacing either op0 or op1 with the other one when
+      1) BIT_INSERT_EXPR inserts exactly one full lane of v.
+      2) All other lanes come from a single source, either op0 or op1.
+ 
+    The vector operand that contributes only to the overwritten lane is dead.
+    Replacing it avoids materializing a filler vector.  */
+ 
+ (simplify
+  (bit_insert (vec_perm:s @0 @1 VECTOR_CST@2) @3 INTEGER_CST@4)
+  (with
+   {
+     bool from0 = false;
+     bool from1 = false;
+     tree single_op = NULL_TREE;
+     unsigned elt_size = vector_element_bits (type);
+ 
+     unsigned HOST_WIDE_INT nelts;
+     unsigned ins_lane_idx;
+     vec_perm_indices sel;
+ 
+     /* Require fixed-length vectors, different operands to VEC_PERM_EXPR and
+        BIT_INSERT_EXPR to insert exactly one full lane.  */
+     if (TYPE_VECTOR_SUBPARTS (type).is_constant (&nelts)
+ 	&& @0 != @1
+ 	&& tree_to_vec_perm_indices (&sel, @0, @1, @2)
+ 	&& tree_to_uhwi (TYPE_SIZE (TREE_TYPE (@3))) == elt_size
+ 	&& multiple_p (tree_to_uhwi (@4), elt_size, &ins_lane_idx))
+       {
+ 	for (unsigned i = 0; i < nelts; i++)
+ 	  {
+ 	    /* Skip the overwritten lane.  */
+ 	    if (i == ins_lane_idx)
+ 	      continue;
+ 
+ 	    /* Set FROM0 / FROM1 if current lane comes from @0 / @1.  */
+ 	    unsigned HOST_WIDE_INT elt = sel[i].to_constant ();
+ 	    if (elt < nelts)
+ 	      from0 = true;
+ 	    else
+ 	      from1 = true;
+ 	  }
+ 
+ 	/* If only one of FROM0 and FROM1 is true, all live lanes come from
+ 	   a single source.  */
+ 	if (from0 ^ from1)
+ 	  {
+ 	    single_op = from0 ? @0 : @1;
+ 	    vec_perm_indices new_sel;
+ 	    if (!tree_to_vec_perm_indices (&new_sel, single_op, single_op, @2)
+ 		|| !can_vec_perm_const_p (TYPE_MODE (type),
+ 					  TYPE_MODE (TREE_TYPE (single_op)),
+ 					  new_sel,
+ 					  false))
+ 	      single_op = NULL_TREE;
+ 	  }
+       }
+   }
+   (if (single_op != NULL_TREE)
+     (bit_insert (vec_perm { single_op; } { single_op; } @2) @3 @4))))
+ 
  #if GIMPLE
  /* Simplify (a >> 1) + (b >> 1) + ((a | b) & 1) to .AVG_CEIL (a, b).
     Similar for (a | b) - ((a ^ b) >> 1).  */
diff -Nrcpad gcc-17-20260705/gcc/objc/ChangeLog gcc-17-20260712/gcc/objc/ChangeLog
*** gcc-17-20260705/gcc/objc/ChangeLog	Sun Jul  5 22:32:08 2026
--- gcc-17-20260712/gcc/objc/ChangeLog	Sun Jul 12 22:32:08 2026
***************
*** 1,3 ****
--- 1,86 ----
+ 2026-07-05  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	PR objc/124260
+ 	* objc-act.cc (objc_build_constructor): Check sanity of arguments.
+ 	Remove special-casing for Objective-C++.
+ 	* objc-gnu-runtime-abi-01.cc (build_selector_table_decl,
+ 	gnu_runtime_abi_01_class_decl,gnu_runtime_abi_01_metaclass_decl,
+ 	gnu_runtime_abi_01_category_decl, gnu_runtime_abi_01_protocol_decl,
+ 	gnu_runtime_abi_01_string_decl,
+ 	gnu_runtime_abi_01_build_typed_selector_reference,
+ 	gnu_runtime_abi_01_get_protocol_reference,
+ 	gnu_runtime_abi_01_build_const_string_constructor,
+ 	generate_classref_translation_entry, handle_impent,
+ 	build_protocol_initializer, generate_protocol_list,
+ 	generate_v1_meth_descriptor_table, generate_protocols,
+ 	generate_dispatch_table, build_category_initializer,generate_category,
+ 	build_shared_structure_initializer, generate_ivars_list,
+ 	generate_class_structures, handle_class_ref,
+ 	build_gnu_selector_translation_table,generate_static_references,
+ 	init_def_list, init_objc_symtab, generate_objc_symtab_decl): Use
+ 	revised names for meta-data decl start/finish.  Add integer indicies
+ 	to array and field ids to aggregate constructors.
+ 	* objc-next-runtime-abi-01.cc (next_runtime_abi_01_class_decl,
+ 	next_runtime_abi_01_metaclass_decl, next_runtime_abi_01_category_decl,
+ 	next_runtime_abi_01_protocol_decl, next_runtime_abi_01_string_decl,
+ 	build_class_reference_decl, build_selector_reference_decl,
+ 	build_objc_method_call, next_runtime_abi_01_get_protocol_reference,
+ 	next_runtime_abi_01_build_const_string_constructor,
+ 	generate_v1_meth_descriptor_table, generate_v1_objc_protocol_extension,
+ 	build_v1_property_table_initializer, generate_v1_property_table,
+ 	generate_v1_protocol_list, build_v1_protocol_initializer,
+ 	generate_v1_protocols, generate_dispatch_table,
+ 	build_v1_category_initializer, generate_v1_category,
+ 	generate_objc_class_ext, build_v1_shared_structure_initializer,
+ 	generate_ivars_list, generate_v1_class_structs, init_def_list,
+ 	init_objc_symtab, generate_objc_symtab_decl,
+ 	generate_classref_translation_entry,
+ 	next_sjlj_build_try_catch_finally): Likewise.
+ 	* objc-next-runtime-abi-02.cc (create_extern_decl) Renamed to
+ 	create_extern_meta. (create_hidden_decl): Renamed to create_hidden_meta.
+ 	(create_global_decl): Renamed to create_global_meta.
+ 	(next_runtime_02_initialize, next_runtime_abi_02_class_decl,
+ 	next_runtime_abi_02_metaclass_decl, next_runtime_abi_02_category_decl,
+ 	next_runtime_abi_02_protocol_decl, next_runtime_abi_02_string_decl,
+ 	build_v2_class_reference_decl, build_selector_reference_decl,
+ 	build_v2_message_reference_decl, build_v2_protocollist_ref_decl,
+ 	objc_v2_build_ivar_ref, build_v2_superclass_ref_decl,
+ 	next_runtime_abi_02_setup_const_string_class_decl,
+ 	next_runtime_abi_02_build_const_string_constructor,
+ 	build_v2_message_ref_translation_table, build_v2_classrefs_table,
+ 	build_v2_super_classrefs_table, build_v2_address_table,
+ 	build_v2_protocol_list_translation_table,
+ 	build_v2_protocol_list_address_table, generate_v2_protocol_list,
+ 	build_v2_descriptor_table_initializer,
+ 	generate_v2_meth_descriptor_table, generate_v2_meth_type_list,
+ 	build_v2_property_table_initializer, generate_v2_property_table,
+ 	build_v2_protocol_initializer, generate_v2_protocols,
+ 	generate_v2_dispatch_table, build_v2_category_initializer,
+ 	generate_v2_category, ivar_offset_ref, build_v2_ivar_list_initializer,
+ 	generate_v2_ivars_list, build_v2_class_t_initializer,
+ 	build_v2_class_ro_t_initializer, generate_v2_class_structs,
+ 	build_v2_ivar_offset_ref_table, objc_generate_v2_next_metadata,
+ 	objc2_build_ehtype_initializer, build_ehtype,
+ 	build_v2_eh_catch_objects, next_runtime_02_eh_type):Use revised
+ 	names for meta-data decl start/finish.  Add integer indicies
+ 	to array and field ids to aggregate constructors.
+ 	* objc-runtime-shared-support.cc (build_sized_array_type): Update to
+ 	use newer APIs.
+ 	(start_var_decl): Renamed to start_meta_decl.  Updated to handle
+ 	constructors that have indices and are typed.
+ 	(finish_var_decl): Renamed to finish_meta_decl.  Updated to handle
+ 	constructors that have indices and are typed.
+ 	(build_method_list_template, build_descriptor_table_initializer,
+ 	build_dispatch_table_initializer, init_module_descriptor,
+ 	build_module_descriptor, build_ivar_list_initializer,
+ 	build_next_selector_translation_table,
+ 	generate_strings): Use revised names for meta-data decl start/finish.
+ 	Add integer indicies to array and field ids to aggregate constructors.
+ 	* objc-runtime-shared-support.h (start_var_decl): Renamed to
+ 	start_meta_decl.
+ 	(finish_var_decl): Renamed to finish_meta_decl.
+ 	(first_type_field, next_type_field): New.
+ 
  2026-07-03  Iain Sandoe  <iain@sandoe.co.uk>
  
  	PR objc/124260
diff -Nrcpad gcc-17-20260705/gcc/objcp/ChangeLog gcc-17-20260712/gcc/objcp/ChangeLog
*** gcc-17-20260705/gcc/objcp/ChangeLog	Sun Jul  5 22:32:08 2026
--- gcc-17-20260712/gcc/objcp/ChangeLog	Sun Jul 12 22:32:08 2026
***************
*** 1,3 ****
--- 1,9 ----
+ 2026-07-05  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	PR objc/124260
+ 	* objcp-decl.h (finish_decl): Update to set the flag indicating
+ 	that the constructor is a constant init.
+ 
  2026-06-25  Iain Sandoe  <iain@sandoe.co.uk>
  
  	* Make-lang.in: Test in parallel with up to 6 instances.
diff -Nrcpad gcc-17-20260705/gcc/omp-builtins.def gcc-17-20260712/gcc/omp-builtins.def
*** gcc-17-20260705/gcc/omp-builtins.def	Sun Jul  5 22:32:08 2026
--- gcc-17-20260712/gcc/omp-builtins.def	Sun Jul 12 22:32:08 2026
*************** DEF_GOMP_BUILTIN (BUILT_IN_GOMP_SECTIONS
*** 445,450 ****
--- 445,455 ----
  		  BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST)
  DEF_GOMP_BUILTIN (BUILT_IN_GOMP_SINGLE_START, "GOMP_single_start",
  		  BT_FN_BOOL, ATTR_NOTHROW_LEAF_LIST)
+ DEF_GOMP_BUILTIN (BUILT_IN_GOMP_SINGLE_START_WITH_END,
+ 		  "GOMP_single_start_with_end", BT_FN_BOOL,
+ 		  ATTR_NOTHROW_LEAF_LIST)
+ DEF_GOMP_BUILTIN (BUILT_IN_GOMP_SINGLE_END, "GOMP_single_end", BT_FN_VOID,
+ 		  ATTR_NOTHROW_LEAF_LIST)
  DEF_GOMP_BUILTIN (BUILT_IN_GOMP_SINGLE_COPY_START, "GOMP_single_copy_start",
  		  BT_FN_PTR, ATTR_NOTHROW_LEAF_LIST)
  DEF_GOMP_BUILTIN (BUILT_IN_GOMP_SINGLE_COPY_END, "GOMP_single_copy_end",
*************** DEF_GOMP_BUILTIN (BUILT_IN_GOMP_ERROR, "
*** 503,511 ****
  DEF_GOMP_BUILTIN (BUILT_IN_GOMP_HAS_MASKED_THREAD_NUM,
  		  "GOMP_has_masked_thread_num", BT_FN_BOOL_INT,
  		  ATTR_CONST_NOTHROW_LEAF_LIST)
  DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_STATIC_WORKSHARING,
! 		  "GOMP_loop_static_worksharing", BT_FN_COMPLEX_INT,
  		  ATTR_CONST_NOTHROW_LEAF_LIST)
  DEF_GOMP_BUILTIN (BUILT_IN_GOMP_DISTRIBUTE_STATIC_WORKSHARING,
! 		  "GOMP_distribute_static_worksharing", BT_FN_COMPLEX_INT,
  		  ATTR_CONST_NOTHROW_LEAF_LIST)
--- 508,541 ----
  DEF_GOMP_BUILTIN (BUILT_IN_GOMP_HAS_MASKED_THREAD_NUM,
  		  "GOMP_has_masked_thread_num", BT_FN_BOOL_INT,
  		  ATTR_CONST_NOTHROW_LEAF_LIST)
+ DEF_GOMP_BUILTIN (BUILT_IN_GOMP_MASKED_END, "GOMP_masked_end", BT_FN_VOID,
+ 		  ATTR_NOTHROW_LEAF_LIST)
+ /* TODO review these function attributes once OMPT implementation done  */
  DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_STATIC_WORKSHARING,
! 		  "GOMP_loop_static_worksharing",
! 		  BT_FN_COMPLEX_INT_ULONGLONG,
! 		  ATTR_CONST_NOTHROW_LEAF_LIST)
! DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_STATIC_WORKSHARING_START,
! 		  "GOMP_loop_static_worksharing_start",
! 		  BT_FN_COMPLEX_INT_ULONGLONG,
  		  ATTR_CONST_NOTHROW_LEAF_LIST)
+ DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_STATIC_WORKSHARING_END,
+ 		  "GOMP_loop_static_worksharing_end", BT_FN_VOID,
+ 		  ATTR_NOTHROW_LEAF_LIST)
+ DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_STATIC_WORKSHARING_DISPATCH,
+ 		  "GOMP_loop_static_worksharing_dispatch", BT_FN_VOID,
+ 		  ATTR_NOTHROW_LEAF_LIST)
  DEF_GOMP_BUILTIN (BUILT_IN_GOMP_DISTRIBUTE_STATIC_WORKSHARING,
! 		  "GOMP_distribute_static_worksharing",
! 		  BT_FN_COMPLEX_INT_ULONGLONG,
  		  ATTR_CONST_NOTHROW_LEAF_LIST)
+ DEF_GOMP_BUILTIN (BUILT_IN_GOMP_DISTRIBUTE_STATIC_WORKSHARING_START,
+ 		  "GOMP_distribute_static_worksharing_start",
+ 		  BT_FN_COMPLEX_INT_ULONGLONG,
+ 		  ATTR_CONST_NOTHROW_LEAF_LIST)
+ DEF_GOMP_BUILTIN (BUILT_IN_GOMP_DISTRIBUTE_STATIC_WORKSHARING_END,
+ 		  "GOMP_distribute_static_worksharing_end", BT_FN_VOID,
+ 		  ATTR_NOTHROW_LEAF_LIST)
+ DEF_GOMP_BUILTIN (BUILT_IN_GOMP_DISTRIBUTE_STATIC_WORKSHARING_DISPATCH,
+ 		  "GOMP_distribute_static_worksharing_dispatch", BT_FN_VOID,
+ 		  ATTR_NOTHROW_LEAF_LIST)
diff -Nrcpad gcc-17-20260705/gcc/omp-expand.cc gcc-17-20260712/gcc/omp-expand.cc
*** gcc-17-20260705/gcc/omp-expand.cc	Sun Jul  5 22:32:08 2026
--- gcc-17-20260712/gcc/omp-expand.cc	Sun Jul 12 22:32:08 2026
*************** expand_omp_for_static_nochunk (struct om
*** 5190,5227 ****
  	  release_ssa_name (gimple_assign_lhs (g));
  	}
      }
-   /* Fetch the thread/team id and the number of threads/teams in a single
-      call to GOMP_loop_static_worksharing or GOMP_distribute_static_worksharing.
-      The helper returns both values packed into one complex int, with
-      the id as the imaginary part and the count as the real part.  Returning
-      (rather than writing through pointers) keeps both values as plain SSA
-      names, which lets later passes - notably IPA-CP propagating constants
-      into the outlined kernel - reason about them.  */
-   tree decl;
-   switch (gimple_omp_for_kind (fd->for_stmt))
-     {
-     case GF_OMP_FOR_KIND_FOR:
-       decl = builtin_decl_explicit (BUILT_IN_GOMP_LOOP_STATIC_WORKSHARING);
-       break;
-     case GF_OMP_FOR_KIND_DISTRIBUTE:
-       decl = builtin_decl_explicit (BUILT_IN_GOMP_DISTRIBUTE_STATIC_WORKSHARING);
-       break;
-     default:
-       gcc_unreachable ();
-     }
-   {
-     tree packed = build_call_expr (decl, 0);
-     packed = force_gimple_operand_gsi (&gsi, packed, true, NULL_TREE,
- 				       true, GSI_SAME_STMT);
-     threadid = fold_build1 (IMAGPART_EXPR, integer_type_node, packed);
-     threadid = fold_convert (itype, threadid);
-     threadid = force_gimple_operand_gsi (&gsi, threadid, true, NULL_TREE,
- 					 true, GSI_SAME_STMT);
-     nthreads = fold_build1 (REALPART_EXPR, integer_type_node, packed);
-     nthreads = fold_convert (itype, nthreads);
-     nthreads = force_gimple_operand_gsi (&gsi, nthreads, true, NULL_TREE,
- 					 true, GSI_SAME_STMT);
-   }
  
    n1 = fd->loop.n1;
    n2 = fd->loop.n2;
--- 5190,5195 ----
*************** expand_omp_for_static_nochunk (struct om
*** 5257,5262 ****
--- 5225,5269 ----
    t = fold_convert (itype, t);
    n = force_gimple_operand_gsi (&gsi, t, true, NULL_TREE, true, GSI_SAME_STMT);
  
+   {
+     /* Fetch the thread/team id and the number of threads/teams in a single
+        call to GOMP_loop_static_worksharing or
+        GOMP_distribute_static_worksharing. The helper returns both values packed
+        into one complex int, with the id as the imaginary part and the count as
+        the real part.  Returning (rather than writing through pointers) keeps
+        both values as plain SSA names, which lets later passes - notably IPA-CP
+        propagating constants into the outlined kernel - reason about them.
+        Also pass the total number of iterations for OMPT.  */
+     tree decl;
+     switch (gimple_omp_for_kind (fd->for_stmt))
+       {
+       case GF_OMP_FOR_KIND_FOR:
+ 	decl = builtin_decl_explicit (
+ 	  flag_openmp_ompt ? BUILT_IN_GOMP_LOOP_STATIC_WORKSHARING_START
+ 			   : BUILT_IN_GOMP_LOOP_STATIC_WORKSHARING);
+ 	break;
+       case GF_OMP_FOR_KIND_DISTRIBUTE:
+ 	decl = builtin_decl_explicit (
+ 	  flag_openmp_ompt ? BUILT_IN_GOMP_DISTRIBUTE_STATIC_WORKSHARING_START
+ 			   : BUILT_IN_GOMP_DISTRIBUTE_STATIC_WORKSHARING);
+ 	break;
+       default:
+ 	gcc_unreachable ();
+       }
+     tree n_ull = fold_convert (long_long_unsigned_type_node, n);
+     tree packed = build_call_expr (decl, 1, n_ull);
+     packed = force_gimple_operand_gsi (&gsi, packed, true, NULL_TREE,
+ 				       true, GSI_SAME_STMT);
+     threadid = fold_build1 (IMAGPART_EXPR, integer_type_node, packed);
+     threadid = fold_convert (itype, threadid);
+     threadid = force_gimple_operand_gsi (&gsi, threadid, true, NULL_TREE,
+ 					 true, GSI_SAME_STMT);
+     nthreads = fold_build1 (REALPART_EXPR, integer_type_node, packed);
+     nthreads = fold_convert (itype, nthreads);
+     nthreads = force_gimple_operand_gsi (&gsi, nthreads, true, NULL_TREE,
+ 					 true, GSI_SAME_STMT);
+   }
+ 
    q = create_tmp_reg (itype, "q");
    t = fold_build2 (TRUNC_DIV_EXPR, itype, n, nthreads);
    t = force_gimple_operand_gsi (&gsi, t, false, NULL_TREE, true, GSI_SAME_STMT);
*************** expand_omp_for_static_nochunk (struct om
*** 5576,5583 ****
  						   cont_bb, body_bb);
      }
  
!   /* Replace the GIMPLE_OMP_RETURN with a barrier, or nothing.  */
    gsi = gsi_last_nondebug_bb (exit_bb);
    if (!gimple_omp_return_nowait_p (gsi_stmt (gsi)))
      {
        t = gimple_omp_return_lhs (gsi_stmt (gsi));
--- 5583,5635 ----
  						   cont_bb, body_bb);
      }
  
!   if (flag_openmp_ompt_detailed)
!     {
!       /* Insert call to GOMP_*_static_worksharing_dispatch at the end of
! 	 seq_start_bb.  */
!       gsi = gsi_last_nondebug_bb (seq_start_bb);
!       tree decl;
!       switch (gimple_omp_for_kind (fd->for_stmt))
! 	{
! 	case GF_OMP_FOR_KIND_FOR:
! 	  decl = builtin_decl_explicit (
! 	    BUILT_IN_GOMP_LOOP_STATIC_WORKSHARING_DISPATCH);
! 	  break;
! 	case GF_OMP_FOR_KIND_DISTRIBUTE:
! 	  decl = builtin_decl_explicit (
! 	    BUILT_IN_GOMP_DISTRIBUTE_STATIC_WORKSHARING_DISPATCH);
! 	  break;
! 	default:
! 	  gcc_unreachable ();
! 	}
!       gcall *g = gimple_build_call (decl, 0);
!       gsi_insert_before (&gsi, g, GSI_SAME_STMT);
!     }
! 
    gsi = gsi_last_nondebug_bb (exit_bb);
+   if (flag_openmp_ompt)
+     {
+       /* Insert call to GOMP_*_static_worksharing_end at the end of exit_bb.
+        */
+       tree decl;
+       switch (gimple_omp_for_kind (fd->for_stmt))
+ 	{
+ 	case GF_OMP_FOR_KIND_FOR:
+ 	  decl
+ 	    = builtin_decl_explicit (BUILT_IN_GOMP_LOOP_STATIC_WORKSHARING_END);
+ 	  break;
+ 	case GF_OMP_FOR_KIND_DISTRIBUTE:
+ 	  decl = builtin_decl_explicit (
+ 	    BUILT_IN_GOMP_DISTRIBUTE_STATIC_WORKSHARING_END);
+ 	  break;
+ 	default:
+ 	  gcc_unreachable ();
+ 	}
+       gcall *g = gimple_build_call (decl, 0);
+       gsi_insert_after (&gsi, g, GSI_SAME_STMT);
+     }
+ 
+   /* Replace the GIMPLE_OMP_RETURN with a barrier, or nothing.  */
    if (!gimple_omp_return_nowait_p (gsi_stmt (gsi)))
      {
        t = gimple_omp_return_lhs (gsi_stmt (gsi));
*************** expand_omp_for_static_nochunk (struct om
*** 5646,5651 ****
--- 5698,5704 ----
        exit3_bb = split_block (exit2_bb, g)->dest;
        gsi = gsi_after_labels (exit3_bb);
      }
+ 
    gsi_remove (&gsi, true);
  
    /* Connect all the blocks.  */
*************** expand_omp_for_static_chunk (struct omp_
*** 5958,5995 ****
  	  release_ssa_name (gimple_assign_lhs (g));
  	}
      }
-   /* Fetch the thread/team id and the number of threads/teams in a single
-      call to GOMP_loop_static_worksharing or GOMP_distribute_static_worksharing.
-      The helper returns both values packed into one complex int, with
-      the id as the imaginary part and the count as the real part.  Returning
-      (rather than writing through pointers) keeps both values as plain SSA
-      names, which lets later passes - notably IPA-CP propagating constants
-      into the outlined kernel - reason about them.  */
-   tree decl;
-   switch (gimple_omp_for_kind (fd->for_stmt))
-     {
-     case GF_OMP_FOR_KIND_FOR:
-       decl = builtin_decl_explicit (BUILT_IN_GOMP_LOOP_STATIC_WORKSHARING);
-       break;
-     case GF_OMP_FOR_KIND_DISTRIBUTE:
-       decl = builtin_decl_explicit (BUILT_IN_GOMP_DISTRIBUTE_STATIC_WORKSHARING);
-       break;
-     default:
-       gcc_unreachable ();
-     }
-   {
-     tree packed = build_call_expr (decl, 0);
-     packed = force_gimple_operand_gsi (&gsi, packed, true, NULL_TREE,
- 				       true, GSI_SAME_STMT);
-     threadid = fold_build1 (IMAGPART_EXPR, integer_type_node, packed);
-     threadid = fold_convert (itype, threadid);
-     threadid = force_gimple_operand_gsi (&gsi, threadid, true, NULL_TREE,
- 					 true, GSI_SAME_STMT);
-     nthreads = fold_build1 (REALPART_EXPR, integer_type_node, packed);
-     nthreads = fold_convert (itype, nthreads);
-     nthreads = force_gimple_operand_gsi (&gsi, nthreads, true, NULL_TREE,
- 					 true, GSI_SAME_STMT);
-   }
  
    n1 = fd->loop.n1;
    n2 = fd->loop.n2;
--- 6011,6016 ----
*************** expand_omp_for_static_chunk (struct omp_
*** 6032,6037 ****
--- 6053,6097 ----
    n = force_gimple_operand_gsi (&gsi, t, true, NULL_TREE,
  				true, GSI_SAME_STMT);
  
+   {
+     /* Fetch the thread/team id and the number of threads/teams in a single
+        call to GOMP_loop_static_worksharing or
+        GOMP_distribute_static_worksharing. The helper returns both values packed
+        into one complex int, with the id as the imaginary part and the count as
+        the real part.  Returning (rather than writing through pointers) keeps
+        both values as plain SSA names, which lets later passes - notably IPA-CP
+        propagating constants into the outlined kernel - reason about them.
+        Also pass the total number of iterations for OMPT.  */
+     tree decl;
+     switch (gimple_omp_for_kind (fd->for_stmt))
+       {
+       case GF_OMP_FOR_KIND_FOR:
+ 	decl = builtin_decl_explicit (
+ 	  flag_openmp_ompt ? BUILT_IN_GOMP_LOOP_STATIC_WORKSHARING_START
+ 			   : BUILT_IN_GOMP_LOOP_STATIC_WORKSHARING);
+ 	break;
+       case GF_OMP_FOR_KIND_DISTRIBUTE:
+ 	decl = builtin_decl_explicit (
+ 	  flag_openmp_ompt ? BUILT_IN_GOMP_DISTRIBUTE_STATIC_WORKSHARING_START
+ 			   : BUILT_IN_GOMP_DISTRIBUTE_STATIC_WORKSHARING);
+ 	break;
+       default:
+ 	gcc_unreachable ();
+       }
+     tree n_ull = fold_convert (long_long_unsigned_type_node, n);
+     tree packed = build_call_expr (decl, 1, n_ull);
+     packed = force_gimple_operand_gsi (&gsi, packed, true, NULL_TREE, true,
+ 				       GSI_SAME_STMT);
+     threadid = fold_build1 (IMAGPART_EXPR, integer_type_node, packed);
+     threadid = fold_convert (itype, threadid);
+     threadid = force_gimple_operand_gsi (&gsi, threadid, true, NULL_TREE, true,
+ 					 GSI_SAME_STMT);
+     nthreads = fold_build1 (REALPART_EXPR, integer_type_node, packed);
+     nthreads = fold_convert (itype, nthreads);
+     nthreads = force_gimple_operand_gsi (&gsi, nthreads, true, NULL_TREE, true,
+ 					 GSI_SAME_STMT);
+   }
+ 
    trip_var = create_tmp_reg (itype, ".trip");
    if (gimple_in_ssa_p (cfun))
      {
*************** expand_omp_for_static_chunk (struct omp_
*** 6303,6310 ****
        gsi_insert_after (&gsi, assign_stmt, GSI_CONTINUE_LINKING);
      }
  
-   /* Replace the GIMPLE_OMP_RETURN with a barrier, or nothing.  */
    gsi = gsi_last_nondebug_bb (exit_bb);
    if (!gimple_omp_return_nowait_p (gsi_stmt (gsi)))
      {
        t = gimple_omp_return_lhs (gsi_stmt (gsi));
--- 6363,6392 ----
        gsi_insert_after (&gsi, assign_stmt, GSI_CONTINUE_LINKING);
      }
  
    gsi = gsi_last_nondebug_bb (exit_bb);
+   if (flag_openmp_ompt)
+     {
+       /* Insert call to GOMP_*_static_worksharing_end at the end of exit_bb.
+        */
+       tree decl;
+       switch (gimple_omp_for_kind (fd->for_stmt))
+ 	{
+ 	case GF_OMP_FOR_KIND_FOR:
+ 	  decl
+ 	    = builtin_decl_explicit (BUILT_IN_GOMP_LOOP_STATIC_WORKSHARING_END);
+ 	  break;
+ 	case GF_OMP_FOR_KIND_DISTRIBUTE:
+ 	  decl = builtin_decl_explicit (
+ 	    BUILT_IN_GOMP_DISTRIBUTE_STATIC_WORKSHARING_END);
+ 	  break;
+ 	default:
+ 	  gcc_unreachable ();
+ 	}
+       gcall *g = gimple_build_call (decl, 0);
+       gsi_insert_after (&gsi, g, GSI_SAME_STMT);
+     }
+ 
+   /* Replace the GIMPLE_OMP_RETURN with a barrier, or nothing.  */
    if (!gimple_omp_return_nowait_p (gsi_stmt (gsi)))
      {
        t = gimple_omp_return_lhs (gsi_stmt (gsi));
*************** expand_omp_for_static_chunk (struct omp_
*** 6340,6345 ****
--- 6422,6450 ----
      }
    gsi_remove (&gsi, true);
  
+   if (flag_openmp_ompt_detailed)
+     {
+       /* Insert call to GOMP_*_static_worksharing_dispatch at the end of
+ 	 seq_start_bb.  */
+       gsi = gsi_last_nondebug_bb (seq_start_bb);
+       tree decl;
+       switch (gimple_omp_for_kind (fd->for_stmt))
+ 	{
+ 	case GF_OMP_FOR_KIND_FOR:
+ 	  decl = builtin_decl_explicit (
+ 	    BUILT_IN_GOMP_LOOP_STATIC_WORKSHARING_DISPATCH);
+ 	  break;
+ 	case GF_OMP_FOR_KIND_DISTRIBUTE:
+ 	  decl = builtin_decl_explicit (
+ 	    BUILT_IN_GOMP_DISTRIBUTE_STATIC_WORKSHARING_DISPATCH);
+ 	  break;
+ 	default:
+ 	  gcc_unreachable ();
+ 	}
+       gcall *g = gimple_build_call (decl, 0);
+       gsi_insert_before (&gsi, g, GSI_SAME_STMT);
+     }
+ 
    /* Connect the new blocks.  */
    find_edge (iter_part_bb, seq_start_bb)->flags = EDGE_TRUE_VALUE;
    find_edge (iter_part_bb, fin_bb)->flags = EDGE_FALSE_VALUE;
diff -Nrcpad gcc-17-20260705/gcc/omp-low.cc gcc-17-20260712/gcc/omp-low.cc
*** gcc-17-20260705/gcc/omp-low.cc	Sun Jul  5 22:32:08 2026
--- gcc-17-20260712/gcc/omp-low.cc	Sun Jul 12 22:32:08 2026
*************** lower_omp_single_simple (gomp_single *si
*** 8825,8831 ****
    gimple *call, *cond;
    tree lhs, decl;
  
!   decl = builtin_decl_explicit (BUILT_IN_GOMP_SINGLE_START);
    lhs = create_tmp_var (TREE_TYPE (TREE_TYPE (decl)));
    call = gimple_build_call (decl, 0);
    gimple_call_set_lhs (call, lhs);
--- 8825,8833 ----
    gimple *call, *cond;
    tree lhs, decl;
  
!   decl = builtin_decl_explicit (flag_openmp_ompt
! 				  ? BUILT_IN_GOMP_SINGLE_START_WITH_END
! 				  : BUILT_IN_GOMP_SINGLE_START);
    lhs = create_tmp_var (TREE_TYPE (TREE_TYPE (decl)));
    call = gimple_build_call (decl, 0);
    gimple_call_set_lhs (call, lhs);
*************** lower_omp_single (gimple_stmt_iterator *
*** 8962,8967 ****
--- 8964,8978 ----
    gimple *g = gimple_build_omp_return (nowait);
    gimple_seq_add_stmt (&bind_body_tail, g);
    maybe_add_implicit_barrier_cancel (ctx, g, &bind_body_tail);
+ 
+   if (flag_openmp_ompt && !ctx->record_type)
+     {
+       /* Insert call to GOMP_single_end.  */
+       tree decl = builtin_decl_explicit (BUILT_IN_GOMP_SINGLE_END);
+       gimple *stmt = gimple_build_call (decl, 0);
+       gimple_seq_add_stmt (&bind_body_tail, stmt);
+     }
+ 
    if (ctx->record_type)
      {
        gimple_stmt_iterator gsi = gsi_start (bind_body_tail);
*************** lower_omp_master (gimple_stmt_iterator *
*** 9138,9143 ****
--- 9149,9162 ----
    gimple_bind_add_seq (bind, gimple_omp_body (stmt));
    gimple_omp_set_body (stmt, NULL);
  
+   if (flag_openmp_ompt)
+     {
+       /* Insert call to GOMP_masked_end at the end of the body.  */
+       tree decl = builtin_decl_explicit (BUILT_IN_GOMP_MASKED_END);
+       gcall *g = gimple_build_call (decl, 0);
+       gimple_bind_add_stmt (bind, g);
+     }
+ 
    gimple_bind_add_stmt (bind, gimple_build_label (lab));
  
    gimple_bind_add_stmt (bind, gimple_build_omp_return (true));
diff -Nrcpad gcc-17-20260705/gcc/opts.cc gcc-17-20260712/gcc/opts.cc
*** gcc-17-20260705/gcc/opts.cc	Sun Jul  5 22:32:08 2026
--- gcc-17-20260712/gcc/opts.cc	Sun Jul 12 22:32:08 2026
*************** static const struct default_options defa
*** 707,713 ****
      { OPT_LEVELS_3_PLUS, OPT_fpeel_loops, NULL, 1 },
      { OPT_LEVELS_3_PLUS, OPT_fpredictive_commoning, NULL, 1 },
      { OPT_LEVELS_3_PLUS, OPT_fsplit_loops, NULL, 1 },
-     { OPT_LEVELS_3_PLUS, OPT_fsplit_paths, NULL, 1 },
      { OPT_LEVELS_3_PLUS, OPT_ftree_loop_distribution, NULL, 1 },
      { OPT_LEVELS_3_PLUS, OPT_ftree_partial_pre, NULL, 1 },
      { OPT_LEVELS_3_PLUS, OPT_funswitch_loops, NULL, 1 },
--- 707,712 ----
*************** finish_options (struct gcc_options *opts
*** 1538,1543 ****
--- 1537,1548 ----
  		    " %<-fstrict-flex-arrays%> is not present");
        }
  
+   if ((opts->x_flag_openmp_ompt || opts->x_flag_openmp_ompt_detailed)
+       && !opts->x_flag_openmp)
+     error_at (
+       loc,
+       "%<-fopenmp-ompt%> and %<-fopenmp-ompt-detailed%> require %<-fopenmp%>");
+ 
    diagnose_options (opts, opts_set, loc);
  }
  
diff -Nrcpad gcc-17-20260705/gcc/params.opt gcc-17-20260712/gcc/params.opt
*** gcc-17-20260705/gcc/params.opt	Sun Jul  5 22:32:08 2026
--- gcc-17-20260712/gcc/params.opt	Sun Jul 12 22:32:08 2026
*************** Maximum number of outgoing edges in a sw
*** 1323,1326 ****
--- 1323,1332 ----
  Common Joined UInteger Var(param_vrp_vector_threshold) Init(250) Optimization Param
  Maximum number of basic blocks for VRP to use a basic cache vector.
  
+ -param=widening-mul-defer-fma=
+ Common Joined UInteger Var(param_widening_mul_defer_fma) Init(1) IntegerRange(0, 1) Param Optimization
+ When nonzero, the widening-multiply pass defers forming an FMA whose result
+ feeds a loop-header PHI, leaving a separate multiply and add.  Set to zero to
+ contract such loop-carried reductions into an FMA instead.
+ 
  ; This comment is to ensure we retain the blank line above.
diff -Nrcpad gcc-17-20260705/gcc/passes.def gcc-17-20260712/gcc/passes.def
*** gcc-17-20260705/gcc/passes.def	Sun Jul  5 22:32:08 2026
--- gcc-17-20260712/gcc/passes.def	Sun Jul 12 22:32:08 2026
*************** along with GCC; see the file COPYING3.
*** 351,357 ****
        NEXT_PASS (pass_cse_reciprocals);
        NEXT_PASS (pass_reassoc, false /* early_p */);
        NEXT_PASS (pass_strength_reduction);
-       NEXT_PASS (pass_split_paths);
        NEXT_PASS (pass_tracer);
        NEXT_PASS (pass_fre, false /* may_iterate */);
        /* After late FRE we rewrite no longer addressed locals into SSA
--- 351,356 ----
diff -Nrcpad gcc-17-20260705/gcc/print-rtl.cc gcc-17-20260712/gcc/print-rtl.cc
*** gcc-17-20260705/gcc/print-rtl.cc	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/print-rtl.cc	Sun Jul 12 22:32:10 2026
*************** rtx_writer::print_rtx_operand_code_0 (co
*** 319,325 ****
      {
        cselib_val *val = CSELIB_VAL_PTR (in_rtx);
  
!       fprintf (m_outfile, " %u:%u", val->uid, val->hash);
        dump_addr (m_outfile, " @", in_rtx);
        dump_addr (m_outfile, "/", (void*)val);
      }
--- 319,325 ----
      {
        cselib_val *val = CSELIB_VAL_PTR (in_rtx);
  
!       fprintf (m_outfile, " %u:%u", CSELIB_VAL_UID (in_rtx), val->hash);
        dump_addr (m_outfile, " @", in_rtx);
        dump_addr (m_outfile, "/", (void*)val);
      }
diff -Nrcpad gcc-17-20260705/gcc/rtl.h gcc-17-20260712/gcc/rtl.h
*** gcc-17-20260705/gcc/rtl.h	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rtl.h	Sun Jul 12 22:32:11 2026
*************** struct GTY((desc("0"), tag("0"),
*** 426,431 ****
--- 426,434 ----
         HOST_WIDE_INTs in the hwivec_def.  */
      unsigned int num_elem;
  
+     /* The unique identifier of a VALUE rtx.  */
+     int value_uid;
+ 
      /* Information about a CONST_VECTOR.  */
      struct
      {
*************** jump_table_for_label (const rtx_code_lab
*** 1625,1630 ****
--- 1628,1637 ----
     This is a "struct cselib_val", see cselib.h.  */
  #define CSELIB_VAL_PTR(RTX) X0CSELIB (RTX, 0)
  
+ /* A VALUE's unique identifier.  */
+ #define CSELIB_VAL_UID(RTX) \
+   RTL_FLAG_CHECK1 ("CSELIB_VAL_UID", (RTX), VALUE)->u2.value_uid
+ 
  /* Holds a list of notes on what this insn does to various REGs.
     It is a chain of EXPR_LIST rtx's, where the second operand is the
     chain pointer and the first operand is the REG being described.
*************** extern struct target_rtl *this_target_rt
*** 4015,4020 ****
--- 4022,4029 ----
    (this_target_rtl->x_top_of_stack)
  #define mode_mem_attrs \
    (this_target_rtl->x_mode_mem_attrs)
+ #define static_reg_base_value \
+   (this_target_rtl->x_static_reg_base_value)
  
  /* All references to certain hard regs, except those created
     by allocating pseudo regs into them (when that's possible),
diff -Nrcpad gcc-17-20260705/gcc/rust/ChangeLog gcc-17-20260712/gcc/rust/ChangeLog
*** gcc-17-20260705/gcc/rust/ChangeLog	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/ChangeLog	Sun Jul 12 22:32:11 2026
***************
*** 1,3 ****
--- 1,535 ----
+ 2026-07-08  Philip Herron  <herron.philip@googlemail.com>
+ 
+ 	* typecheck/rust-hir-type-check-expr.cc (TypeCheckExpr::visit): respect context for labels
+ 
+ 2026-07-08  Lucas Ly Ba  <hi@lucaslyba.com>
+ 
+ 	* hir/tree/rust-hir-item.h (ExternBlock): Track whether the ABI
+ 	was explicit and expose it through has_abi.
+ 	* hir/tree/rust-hir-item.cc (ExternBlock::ExternBlock): Likewise.
+ 	(ExternBlock::operator=): Likewise.
+ 	* hir/rust-ast-lower-base.cc (ASTLoweringBase::lower_extern_block):
+ 	Forward the AST has_abi flag to the HIR node.
+ 	* checks/lints/unused/rust-unused-checker.cc (UnusedChecker::visit):
+ 	New.
+ 	* checks/lints/unused/rust-unused-checker.h (UnusedChecker::visit):
+ 	New.
+ 
+ 2026-07-08  Enes Cevik  <enes@nsvke.com>
+ 
+ 	* backend/rust-compile.cc
+ 	(HIRCompileBase::compute_address_for_trait_item): Ensure the
+ 	impl block type matches the receiver type.
+ 
+ 2026-07-08  Philip Herron  <herron.philip@googlemail.com>
+ 
+ 	* rust-gcc.cc (pointer_type): turn on can alias
+ 
+ 2026-07-08  Enes Cevik  <enes@nsvke.com>
+ 
+ 	* backend/rust-compile-intrinsic.cc (generic_intrinsics): Add
+ 	min_align_of_val_handler to the map.
+ 	* backend/rust-intrinsic-handlers.cc (min_align_of_val_handler):
+ 	New function.
+ 	* backend/rust-intrinsic-handlers.h (min_align_of_val_handler):
+ 	New declaration.
+ 	* typecheck/rust-hir-type-check-intrinsic.cc
+ 	(IntrinsicChecker::intrinsic_rules): Add min_align_of_val
+ 	signature rule to the map.
+ 	* util/rust-intrinsic-values.h (class Intrinsics): Add
+ 	MIN_ALIGN_OF_VAL constexpr.
+ 
+ 2026-07-08  Enes Cevik  <enes@nsvke.com>
+ 
+ 	* backend/rust-compile-intrinsic.cc (generic_intrinsics): Add
+ 	size_of_val_handler to the map.
+ 	* backend/rust-intrinsic-handlers.cc (size_of_val_handler): New
+ 	function.
+ 	* backend/rust-intrinsic-handlers.h (size_of_val_handler): New
+ 	declaration.
+ 	* typecheck/rust-hir-type-check-intrinsic.cc
+ 	(IntrinsicChecker::intrinsic_rules): Add size_of_val signature
+ 	rule to the map.
+ 	* util/rust-intrinsic-values.h (class Intrinsics): Add
+ 	SIZE_OF_VAL constexpr.
+ 
+ 2026-07-08  Philip Herron  <herron.philip@googlemail.com>
+ 
+ 	* typecheck/rust-unify.cc (UnifyRules::expect_adt): check defid
+ 
+ 2026-07-08  Philip Herron  <herron.philip@googlemail.com>
+ 
+ 	* typecheck/rust-hir-type-check-item.cc (TypeCheckItem::visit): check valid
+ 
+ 2026-07-08  João Novo  <joao.c.novo@tecnico.ulisboa.pt>
+ 
+ 	* typecheck/rust-hir-type-check-item.cc (TypeCheckItem::visit):
+ 	Add check for infer type on struct's attribute or its subtypes.
+ 	* typecheck/rust-tyty.cc (BaseType::contains_infer):
+ 	Add check for an array type's capacity being an infer type.
+ 
+ 2026-07-08  Enes Cevik  <enes@nsvke.com>
+ 
+ 	* ast/rust-expr.h (BoxExpr): Add comment description to class.
+ 	* backend/rust-compile-block.h (visit): Add stub for BoxExpr.
+ 	* backend/rust-compile-expr.cc (compile_box_struct): New
+ 	function.
+ 	(compile_box): New function.
+ 	(build_box_inner_ptr): New function.
+ 	(CompileExpr::visit): Implement BoxExpr lowering using
+ 	exchange_malloc and constructor expressions. Handle owned_box
+ 	in FieldAccessExpr and DereferenceExpr.
+ 	(HIRCompileBase::resolve_deref_adjustment): Support owned_box
+ 	in deref adjustments.
+ 	* backend/rust-compile-expr.h (visit): Declare BoxExpr visitor.
+ 	* checks/errors/borrowck/rust-bir-builder-expr-stmt.cc
+ 	(ExprStmtBuilder::visit): Evaluate inner expression and push
+ 	tmp assignment for BoxExpr.
+ 	* checks/errors/borrowck/rust-bir-builder-expr-stmt.h (visit):
+ 	Declare BoxExpr visitor.
+ 	* checks/errors/borrowck/rust-bir-builder-lazyboolexpr.h
+ 	(visit): Mark BoxExpr as unreachable.
+ 	* checks/errors/borrowck/rust-bir-builder-struct.h (visit):
+ 	Likewise.
+ 	* checks/errors/borrowck/rust-function-collector.h (visit):
+ 	Add visit stub for BoxExpr.
+ 	* checks/errors/privacy/rust-privacy-reporter.cc
+ 	(PrivacyReporter::visit): Delegate privacy reporting to inner
+ 	expression of BoxExpr.
+ 	* checks/errors/privacy/rust-privacy-reporter.h (visit):
+ 	Declare BoxExpr visitor.
+ 	* checks/errors/rust-const-checker.cc (ConstChecker::visit):
+ 	Delegate const checking to inner expression.
+ 	* checks/errors/rust-const-checker.h (visit): Declare BoxExpr
+ 	visitor.
+ 	* checks/errors/rust-hir-pattern-analysis.cc
+ 	(PatternChecker::visit): Delegate pattern analysis to inner
+ 	expression.
+ 	* checks/errors/rust-hir-pattern-analysis.h (visit): Declare
+ 	BoxExpr visitor.
+ 	* checks/errors/rust-unsafe-checker.cc (UnsafeChecker::visit):
+ 	Delegate unsafe checking to inner expression.
+ 	* checks/errors/rust-unsafe-checker.h (visit): Declare BoxExpr
+ 	visitor.
+ 	* checks/lints/rust-lint-marklive.cc (MarkLive::visit): Resolve
+ 	inner ADT type for owned_box when marking live fields.
+ 	* checks/lints/rust-lint-marklive.h (visit): Declare BoxExpr
+ 	visitor.
+ 	* hir/rust-ast-lower-expr.cc (ASTLoweringExpr::visit): Translate
+ 	AST BoxExpr to HIR BoxExpr.
+ 	* hir/rust-hir-dump.cc (Dump::visit): Dump HIR BoxExpr.
+ 	* hir/rust-hir-dump.h (visit): Declare BoxExpr visitor.
+ 	* hir/tree/rust-hir-expr-abstract.h (ExprType): Add Box to enum.
+ 	* hir/tree/rust-hir-expr.cc (BoxExpr::BoxExpr): Implement
+ 	constructors for BoxExpr. (BoxExpr::operator=): Implement
+ 	assignment operator.
+ 	* hir/tree/rust-hir-expr.h (class BoxExpr): Define HIR BoxExpr
+ 	node.
+ 	* hir/tree/rust-hir-full-decls.h (class BoxExpr): Forward
+ 	declaration.
+ 	* hir/tree/rust-hir-visitor.cc (DefaultHIRVisitor::walk): Walk
+ 	inner expression of BoxExpr.
+ 	* hir/tree/rust-hir-visitor.h (visit): Add routing for BoxExpr.
+ 	* hir/tree/rust-hir.cc (BoxExpr::to_string): Implement
+ 	to_string.
+ 	(BoxExpr::accept_vis): Implement visitor acceptance.
+ 	* typecheck/rust-autoderef.cc (AutoderefCycle::cycle): Attempt
+ 	autoderef using the owned_box lang item.
+ 	* typecheck/rust-hir-type-check-expr.cc (TypeCheckExpr::visit):
+ 	Implement type checking, validation, and generic substitution
+ 	for BoxExpr. Support owned_box autoderef in field access and
+ 	dereferencing operations.
+ 	* typecheck/rust-tyty.cc (try_get_box_inner_type): New function.
+ 	* typecheck/rust-tyty.h (try_get_box_inner_type): New
+ 	declaration.
+ 	* typecheck/rust-hir-type-check-expr.h (visit): Declare BoxExpr
+ 	visitor.
+ 	* util/rust-lang-item.cc (Rust::LangItem::lang_items): Register
+ 	owned_box to BiMap.
+ 	* util/rust-lang-item.h (LangItem::Kind): Add OWNED_BOX.
+ 
+ 2026-07-08  Lishin  <lishin1008@gmail.com>
+ 
+ 	* Make-lang.in: Add rust-compile-drop-builder.o.
+ 	* backend/rust-compile-base.cc
+ 	(HIRCompileBase::compile_function_body):
+ 	Update CompileDrop calls.
+ 	* backend/rust-compile-block.cc (CompileBlock::visit):
+ 	Update CompileDrop calls.
+ 	* backend/rust-compile-context.h (Context): Allow
+ 	DropBuilder to access drop candidate storage and move
+ 	drop candidate APIs to DropBuilder.
+ 	* backend/rust-compile-drop.cc (CompileDrop::CompileDrop):
+ 	Add constructor.
+ 	(CompileDrop::type_has_drop_impl): Use stored Context member.
+ 	(CompileDrop::compile_drop_call): Likewise.
+ 	(CompileDrop::emit_current_scope_drop_calls): Use stored
+ 	Context member and get drop candidates from DropBuilder.
+ 	* backend/rust-compile-drop.h: Store Context as a member.
+ 	* backend/rust-compile-pattern.cc (CompilePatternLet::visit):
+ 	Use DropBuilder and update CompileDrop calls.
+ 	* backend/rust-compile-drop-builder.cc: New file.
+ 	* backend/rust-compile-drop-builder.h: New file.
+ 
+ 2026-07-08  Enes Cevik  <enes@nsvke.com>
+ 
+ 	* backend/rust-compile-context.h (class Context): Add
+ 	insert_vtable and lookup_vtable methods.
+ 	* backend/rust-compile-expr.cc
+ 	(CompileExpr::get_fn_addr_from_dyn): Change access method
+ 	array access to struct field access.
+ 	* backend/rust-compile-type.cc
+ 	(TyTyResolveCompile::create_dyn_obj_record): Create vtable type
+ 	as a record instead of an array.
+ 	* backend/rust-compile.cc
+ 	(HIRCompileBase::coerce_to_dyn_object): Change vtable structure.
+ 
+ 2026-07-08  Enes Cevik  <enes@nsvke.com>
+ 
+ 	* backend/rust-compile-intrinsic.cc (generic_intrinsics): Add
+ 	arith_offset handler to map.
+ 	* backend/rust-intrinsic-handlers.cc (arith_offset_handler): New
+ 	function.
+ 	* backend/rust-intrinsic-handlers.h (arith_offset_handler): New
+ 	declaration.
+ 	* typecheck/rust-hir-type-check-intrinsic.cc
+ 	(IntrinsicChecker::intrinsic_rules): Add arith_offset rule.
+ 	* util/rust-intrinsic-values.h (class Intrinsics): Add
+ 	ARITH_OFFSET constexpr.
+ 
+ 2026-07-08  Enes Cevik  <enes@nsvke.com>
+ 
+ 	* backend/rust-compile-intrinsic.cc (generic_intrinsics): Add
+ 	write_bytes handler to map.
+ 	* backend/rust-intrinsic-handlers.cc (write_bytes_handler): New
+ 	function.
+ 	* backend/rust-intrinsic-handlers.h (write_bytes_handler): New
+ 	declaration.
+ 	* typecheck/rust-hir-type-check-intrinsic.cc
+ 	(IntrinsicChecker::intrinsic_rules): Add write_bytes rule.
+ 	* util/rust-intrinsic-values.h (class Intrinsics): Add
+ 	WRITE_BYTES constexpr.
+ 
+ 2026-07-08  Lucas Ly Ba  <lucas.ly-ba@outlook.com>
+ 
+ 	* backend/rust-compile-expr.cc (CompileExpr::visit): Associate the loop
+ 	result temporary with the loop label.
+ 
+ 2026-07-08  Lucas Ly Ba  <lucas.ly-ba@outlook.com>
+ 
+ 	* typecheck/rust-hir-type-check-item.cc (TypeCheckItem::visit): Resolve
+ 	the generic parameters of a type alias.
+ 
+ 2026-07-08  Lucas Ly Ba  <hi@lucaslyba.com>
+ 
+ 	* checks/lints/unused/rust-unused-checker.cc (UnusedChecker::visit):
+ 	New.
+ 	* checks/lints/unused/rust-unused-checker.h (UnusedChecker::visit):
+ 	New.
+ 
+ 2026-07-08  Owen Avery  <powerboat9.gamer@gmail.com>
+ 
+ 	* expand/rust-macro-expand.cc
+ 	(MacroExpander::expand_eager_invocations): Handle errors during
+ 	eager expansion.
+ 	(MacroExpander::expand_invoc): Avoid expanding macros which have
+ 	pending eager invocations and return error fragments in more
+ 	cases.
+ 
+ 2026-07-08  Yap Zhi Heng  <yapzhhg@gmail.com>
+ 
+ 	* backend/rust-compile-expr.cc (CompileExpr::visit (FieldAccessExpr)):
+ 	Handle DST fat pointers by reinterpreting the fat pointer as its field type.
+ 
+ 2026-07-08  Yap Zhi Heng  <yapzhhg@gmail.com>
+ 
+ 	* util/rust-lang-item.h (LangItem::Kind): New CSTR kind.
+ 	* util/rust-lang-item.cc (LangItem::lang_items): Ditto.
+ 	* backend/rust-compile-type.cc (visit(TyTy::ReferenceType)): Add specific record
+ 	type for CStr.
+ 	* typecheck/rust-tyty.h (ReferenceType): Add function definition for is_dyn_cstr_type.
+ 	* typecheck/rust-tyty.cc (ReferenceType::is_dyn_object): Update to include
+ 	is_dyn_cstr_type.
+ 	(ReferenceType::is_dyn_cstr_type): Add implementation to check whether the
+ 	ReferenceType is of type CStr.
+ 	* typecheck/rust-hir-type-check-base.cc(resolve_literal): Update C_STRING case to
+ 	resolve to the CStr language item instead.
+ 
+ 2026-07-08  Yap Zhi Heng  <yapzhhg@gmail.com>
+ 
+ 	* lang.opt: Add new -frust-c-style-string-literals option.
+ 	* parse/rust-parse.h: Import options.h for reading flag_c_style_string_literals.
+ 	* parse/rust-parse-impl-expr.hxx (Parser<ManagedTokenSource>::parse_literal_expr):
+ 	Abort parsing C-style string literals if flag_c_style_string_literals is not set.
+ 	(Parser<ManagedTokenSource>::null_denotation_not_path): Ditto.
+ 
+ 2026-07-08  Yap Zhi Heng  <yapzhhg@gmail.com>
+ 
+ 	* lex/rust-token.h (RS_TOKEN_LIST): Add C_STRING_LITERAL and RAW_C_STRING_LITERAL
+ 	(unused for now).
+ 	* lex/rust-lex.h (Lexer): Define new parse_c_string function.
+ 	* lex/rust-lex.cc (Lexer::build_token): Implement lexing for C-style string
+ 	literals.
+ 	(Lexer::parse_c_string): Add implementation.
+ 	* hir/tree/rust-hir-literal.h (HIR::Literal): Define new C_STRING LitType.
+ 	* hir/rust-ast-lower-base.cc (ASTLoweringBase::lower_literal): Add new case for
+ 	C_STRING.
+ 	* parse/rust-parse-impl-attribute.hxx (Parser<ManagedTokenSource>::parse_attr_input):
+ 	Add new case for C_STRING.
+ 	* parse/rust-parse-impl-expr.hxx (Parser<ManagedTokenSource>::parse_literal_expr):
+ 	Add new case for parsing C_STRING.
+ 	(Parser<ManagedTokenSource>::null_denotation_not_path): Add new case for C_STRING.
+ 	* ast/rust-ast.h (Token::is_string_lit): Add new case for C_STRING_LITERAL.
+ 	* ast/rust-ast.cc (AttributeParser::parse_meta_item_inner): Add new case for
+ 	C_STRING_LITERAL.
+ 	* ast/rust-ast-collector.cc (TokenCollector::visit): Add new case for
+ 	C_STRING_LITERAL.
+ 	* typecheck/rust-hir-type-check-base.cc (TypeCheckBase::resolve_literal):
+ 	Implement type checking for the new C_STRING type.
+ 	* backend/rust-compile-expr.h (CompileExpr): Define new function
+ 	compile_c_string_literal.
+ 	* backend/rust-compile-expr.cc (CompileExpr::visit(LiteralExpr)): Add new case
+ 	for C_STRING.
+ 	(CompileExpr::compile_c_string_literal): Implement compilation of C-style string
+ 	literals.
+ 
+ 2026-07-08  hriztam  <hritamstark05@gmail.com>
+ 
+ 	* parse/rust-parse-error.h (StructExprField): Add
+ 	STRUCT_BASE_ATTRIBUTES.
+ 	* parse/rust-parse-impl-expr.hxx
+ 	(Parser<ManagedTokenSource>::parse_struct_expr_field):
+ 	Reject attributes before struct-base `..`.
+ 	(Parser<ManagedTokenSource>::parse_struct_expr_struct_partial):
+ 	Handle struct-base parse results without dereferencing an errored
+ 	expected.
+ 
+ 2026-07-08  Lucas Ly Ba  <lucas.ly-ba@outlook.com>
+ 
+ 	* checks/lints/unused/rust-unused-checker.cc (UnusedChecker::visit):
+ 	New.
+ 	* checks/lints/unused/rust-unused-checker.h (UnusedChecker::visit):
+ 	New.
+ 
+ 2026-07-08  Lucas Ly Ba  <lucas.ly-ba@outlook.com>
+ 
+ 	* checks/lints/unused/rust-unused-checker.cc (UnusedChecker::visit):
+ 	Warn on a visibility qualifier on a `const _` item.
+ 
+ 2026-07-08  Owen Avery  <powerboat9.gamer@gmail.com>
+ 
+ 	* expand/rust-macro-builtins-log-debug.cc
+ 	(MacroBuiltin::assert_handler): Forward any custom message on to
+ 	the built-in panic macro.
+ 
+ 2026-07-08  Philip Herron  <herron.philip@googlemail.com>
+ 
+ 	* backend/rust-compile-resolve-path.cc: use error_mark_node
+ 
+ 2026-07-08  Philip Herron  <herron.philip@googlemail.com>
+ 
+ 	* typecheck/rust-hir-type-check-item.cc (TypeCheckItem::visit): remove error_at
+ 
+ 2026-07-08  Philip Herron  <herron.philip@googlemail.com>
+ 
+ 	* backend/rust-compile-extern.h: add expr locus
+ 	* backend/rust-compile-intrinsic.cc (Intrinsics::compile): likewise
+ 	* backend/rust-compile-intrinsic.h: likewise
+ 	* backend/rust-compile-resolve-path.cc: likewise
+ 	* backend/rust-intrinsic-handlers.cc (op_with_overflow): likewise
+ 	(rotate_left): likewise
+ 	(rotate_right): likewise
+ 	(wrapping_op): likewise
+ 	(atomic_store): likewise
+ 	(atomic_load): likewise
+ 	(unchecked_op): likewise
+ 	(copy): likewise
+ 	(expect): likewise
+ 	(try_handler): likewise
+ 	(sorry): likewise
+ 	(assume): likewise
+ 	(discriminant_value): likewise
+ 	(variant_count): likewise
+ 	(move_val_init): likewise
+ 	(uninit): likewise
+ 	(prefetch_read_data): likewise
+ 	(prefetch_write_data): likewise
+ 	(transmute): likewise
+ 	(sizeof_handler): likewise
+ 	(min_align_of_handler): likewise
+ 	(offset): likewise
+ 	(bswap_handler): likewise
+ 	(ctlz_handler): likewise
+ 	(ctlz_nonzero_handler): likewise
+ 	(cttz_handler): likewise
+ 	(cttz_nonzero_handler): likewise
+ 	* backend/rust-intrinsic-handlers.h (std::function<tree): likewise
+ 	(rotate_left): likewise
+ 	(rotate_right): likewise
+ 	(offset): likewise
+ 	(sizeof_handler): likewise
+ 	(min_align_of_handler): likewise
+ 	(transmute): likewise
+ 	(uninit): likewise
+ 	(move_val_init): likewise
+ 	(assume): likewise
+ 	(discriminant_value): likewise
+ 	(variant_count): likewise
+ 	(bswap_handler): likewise
+ 	(ctlz_handler): likewise
+ 	(ctlz_nonzero_handler): likewise
+ 	(cttz_handler): likewise
+ 	(cttz_nonzero_handler): likewise
+ 	(wrapping_op): likewise
+ 	(prefetch_read_data): likewise
+ 	(prefetch_write_data): likewise
+ 	(sorry): likewise
+ 	* backend/rust-tree.cc (pointer_offset_expression): check for size
+ 
+ 2026-07-08  Philip Herron  <herron.philip@googlemail.com>
+ 
+ 	* backend/rust-compile-item.cc (CompileItem::visit): check instead of assert
+ 
+ 2026-07-08  Philip Herron  <herron.philip@googlemail.com>
+ 
+ 	* backend/rust-compile-expr.cc (CompileExpr::generate_closure_fntype):
+ 	Stop eagerly setting FnOnce::Output
+ 	* backend/rust-compile-item.cc (CompileItem::visit): Push impl-trait
+ 	* backend/rust-compile-type.cc (TyTyResolveCompile::visit): Normalize
+ 	projection types
+ 	* backend/rust-intrinsic-handlers.cc (discriminant_value): Handle
+ 	projection
+ 	* checks/errors/privacy/rust-privacy-reporter.cc
+ 	(PrivacyReporter::check_base_type_privacy): Skip unresolved
+ 	* typecheck/rust-hir-type-check-intrinsic.cc (IntrinsicChecker::check_type): make permissive
+ 	* typecheck/rust-autoderef.cc: remove old
+ 	* typecheck/rust-hir-impl-trait-context.h: New file.
+ 	* typecheck/rust-hir-trait-reference.cc (TraitReference::on_resolved):
+ 	Pass the trait reference into item resolution.
+ 	(TraitReference::clear_associated_types): Remove.
+ 	(TraitReference::clear_associated_type_projections): Remove.
+ 	(AssociatedImplTrait::AssociatedImplTrait): Store an impl trait frame
+ 	(AssociatedImplTrait::get_frame): New function.
+ 	* typecheck/rust-hir-trait-reference.h: Add impl trait context
+ 	* typecheck/rust-hir-trait-resolve.cc (TraitItemReference::on_resolved):
+ 	Pass trait reference
+ 	(TraitItemReference::resolve_item): Represent associated types as
+ 	projection types
+ 	(TraitItemReference::associated_type_set): Remove.
+ 	(TraitItemReference::associated_type_reset): Remove.
+ 	(AssociatedImplTrait::setup_raw_associated_types): Remove.
+ 	(AssociatedImplTrait::bind_impl_for_projection): New function.
+ 	(AssociatedImplTrait::bind_impl_for_bound): New function.
+ 	(AssociatedImplTrait::reset_associated_types): Remove.
+ 	* typecheck/rust-hir-type-check-base.cc
+ 	(TypeCheckBase::ResolvePredicateFromBound): New function.
+ 	* typecheck/rust-hir-type-check-base.h
+ 	(TypeCheckBase::ResolvePredicateFromBound): Declare.
+ 	* typecheck/rust-hir-type-check-expr.cc (TypeCheckExpr::visit):
+ 	Handle projection
+ 	(TypeCheckExpr::resolve_fn_trait_call): monomorphized
+ 	* typecheck/rust-hir-type-check-implitem.cc
+ 	(TypeCheckImplItemWithTrait::visit): Store impl associated types as
+ 	projections
+ 	* typecheck/rust-hir-type-check-item.cc
+ 	(TypeCheckItem::ResolveImplBlockSubstitutions): New function.
+ 	(TypeCheckItem::ResolveImplTraitAssociatedTypes): New function.
+ 	(TypeCheckItem::validate_trait_impl_block): cleanup
+ 	(TypeCheckItem::visit): Split inherent and trait impl handling.
+ 	(TypeCheckItem::resolve_impl_block): New function.
+ 	(TypeCheckItem::resolve_trait_impl_block): New function.
+ 	(TypeCheckItem::resolve_impl_block_substitutions): cleanup
+ 	* typecheck/rust-hir-type-check-item.h: helpers
+ 	* typecheck/rust-hir-type-check-path.cc (TypeCheckExpr::visit):
+ 	cleanup
+ 	(TypeCheckExpr::resolve_segments): Use lazy projection normalization
+ 	* typecheck/rust-hir-type-check-type.cc (TypeCheckType::visit):
+ 	Normalize type path projections and build qualified associated types
+ 	* typecheck/rust-hir-type-check.h (class ScopedPush): New class.
+ 	(class ImplTraitFrameGuard): New class.
+ 	* typecheck/rust-type-util.cc (query_type): Push impl trait frames
+ 	while resolving impl items.
+ 	(rebind_projection_self_from_fn): New function.
+ 	(normalize_projection): New function.
+ 	* typecheck/rust-type-util.h (normalize_projection): Declare.
+ 	(rebind_projection_self_from_fn): Declare.
+ 	* typecheck/rust-typecheck-context.cc
+ 	(TypeCheckContext::find_matching_impl_trait_frame): New function.
+ 	(TypeCheckContext::have_impl_trait_context): New function.
+ 	(TypeCheckContext::push_impl_trait_context): New function.
+ 	(TypeCheckContext::pop_impl_trait_context): New function.
+ 	(TypeCheckContext::peek_impl_trait_context): New function.
+ 	* typecheck/rust-tyty-bounds.cc
+ 	(TypeBoundPredicate::apply_argument_mappings): Stop mutating
+ 	associated type items for binding arguments.
+ 	(TypeBoundPredicateItem::get_tyty_for_receiver): Rebase projections
+ 	using trait substitution coordinates.
+ 	(TypeBoundPredicate::handle_substitions): Stop mutating associated
+ 	type items for binding arguments.
+ 	* typecheck/rust-tyty-call.cc (TypeCheckCallExpr::visit): Rebind
+ 	projection self types after function monomorphization.
+ 	* typecheck/rust-tyty-subst.cc
+ 	(SubstitutionParamMapping::fill_param_ty): Guard recursive
+ 	(SubstitutionRef::get_mappings_from_generic_args): Account for outer
+ 	GAT parameters.
+ 	(SubstitutionRef::prepare_higher_ranked_bounds): Remove.
+ 	(SubstitutionRef::monomorphize): Bind matching impls
+ 	* typecheck/rust-tyty-subst.h
+ 	(SubstitutionRef::get_outer_param_count): New function.
+ 	(SubstitutionRef::prepare_higher_ranked_bounds): Remove.
+ 	* typecheck/rust-tyty.cc (BaseType::satisfies_bound): Check
+ 	associated type bindings through projection types.
+ 	(BaseType::destructure): Stop destructuring through projections.
+ 	(BaseType::monomorphized_clone): Normalize projection clones.
+ 	(BaseType::is_concrete): Handle projections
+ 	(ClosureType::setup_fn_once_output): Remove.
+ 	(destructure_through_projections): New function.
+ 	(ReferenceType::is_dyn_slice_type): Normalize projections
+ 	(ReferenceType::is_dyn_str_type): Likewise.
+ 	(ReferenceType::is_dyn_obj_type): Likewise.
+ 	(PointerType::is_dyn_slice_type): Likewise.
+ 	(PointerType::is_dyn_str_type): Likewise.
+ 	(PointerType::is_dyn_obj_type): Likewise.
+ 	(ParamType::get_name): Guard recursive
+ 	(PlaceholderType::set_associated_type): Remove
+ 	(PlaceholderType::clear_associated_type): Remove
+ 	(ProjectionType::ProjectionType): Track projection self type and
+ 	inherited trait substitutions.
+ 	(ProjectionType::is_trait_position): New function
+ 	(ProjectionType::get): Handle non-trait-position projections
+ 	(ProjectionType::get_self): New function.
+ 	(ProjectionType::get_trait_ref): New function.
+ 	(ProjectionType::get_item_defid): New function.
+ 	(ProjectionType::as_string): Include projection self and trait
+ 	(ProjectionType::clone): Clone projection self and preserve bounds
+ 	(ProjectionType::handle_substitions): Substitute projection self
+ 	* typecheck/rust-tyty.h: Update projection
+ 	* typecheck/rust-unify.cc (UnifyRules::go): Normalize projections
+ 	(UnifyRules::expect_projection): Support projection-to-projection
+ 
+ 2026-07-08  Philip Herron  <herron.philip@googlemail.com>
+ 
+ 	* typecheck/rust-hir-type-check-expr.cc (TypeCheckExpr::visit): push expected type
+ 	* typecheck/rust-hir-type-check-stmt.cc (TypeCheckStmt::visit): apply expected ty on tail
+ 	* typecheck/rust-hir-type-check.h: helpers
+ 	* typecheck/rust-typecheck-context.cc (TypeCheckContext::push_expected_type): likewise
+ 	(TypeCheckContext::pop_expected_type): likewise
+ 	(TypeCheckContext::peek_expected_type): likewise
+ 	* typecheck/rust-tyty-call.cc (TypeCheckCallExpr::visit): check expected
+ 
+ 2026-07-08  Philip Herron  <herron.philip@googlemail.com>
+ 
+ 	* ast/rust-ast-collector.cc (TokenCollector::visit): check for lang item
+ 
+ 2026-07-08  Philip Herron  <herron.philip@googlemail.com>
+ 
+ 	* typecheck/rust-tyty-bounds.cc (TypeBoundPredicate::TypeBoundPredicate): missing argument
+ 	(TypeBoundPredicate::operator=): likewise
+ 
+ 2026-07-08  Philip Herron  <herron.philip@googlemail.com>
+ 
+ 	* typecheck/rust-tyty-subst.cc: we can optionally apply inherited arguments
+ 
  2026-06-28  Kevin Stefanov  <kevinstefanov15@gmail.com>
  
  	PR middle-end/125274
diff -Nrcpad gcc-17-20260705/gcc/rust/Make-lang.in gcc-17-20260712/gcc/rust/Make-lang.in
*** gcc-17-20260705/gcc/rust/Make-lang.in	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/Make-lang.in	Sun Jul 12 22:32:11 2026
*************** GRS_OBJS = \
*** 226,231 ****
--- 226,232 ----
      rust/rust-compile-struct-field-expr.o \
      rust/rust-constexpr.o \
      rust/rust-compile-base.o \
+     rust/rust-compile-drop-builder.o \
      rust/rust-compile-drop.o \
      rust/rust-tree.o \
      rust/rust-compile-context.o \
diff -Nrcpad gcc-17-20260705/gcc/rust/ast/rust-ast-collector.cc gcc-17-20260712/gcc/rust/ast/rust-ast-collector.cc
*** gcc-17-20260705/gcc/rust/ast/rust-ast-collector.cc	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/ast/rust-ast-collector.cc	Sun Jul 12 22:32:11 2026
*************** TokenCollector::visit (Token &tok)
*** 429,434 ****
--- 429,437 ----
      case RAW_STRING_LITERAL:
        push (Rust::Token::make_raw_string (tok.get_locus (), std::move (data)));
        break;
+     case C_STRING_LITERAL:
+       push (Rust::Token::make_c_string (tok.get_locus (), std::move (data)));
+       break;
      case INNER_DOC_COMMENT:
        push (Rust::Token::make_inner_doc_comment (tok.get_locus (),
  						 std::move (data)));
*************** TokenCollector::visit (TypePathSegmentGe
*** 639,645 ****
    //    `<` `>`
    //    | `<` ( GenericArg `,` )* GenericArg `,`? `>`
    describe_node (std::string ("TypePathSegmentGeneric"), [this, &segment] () {
!     auto ident_segment = segment.get_ident_segment ();
      auto id = ident_segment.as_string ();
      push (Rust::Token::make_identifier (ident_segment.get_locus (),
  					std::move (id)));
--- 642,651 ----
    //    `<` `>`
    //    | `<` ( GenericArg `,` )* GenericArg `,`? `>`
    describe_node (std::string ("TypePathSegmentGeneric"), [this, &segment] () {
!     auto ident_segment
!       = segment.is_lang_item ()
! 	  ? PathIdentSegment ("LANG_ITEM", segment.get_locus ())
! 	  : segment.get_ident_segment ();
      auto id = ident_segment.as_string ();
      push (Rust::Token::make_identifier (ident_segment.get_locus (),
  					std::move (id)));
*************** TokenCollector::visit (Literal &lit, loc
*** 863,868 ****
--- 869,877 ----
      case Literal::LitType::RAW_STRING:
        push (Rust::Token::make_raw_string (locus, std::move (value)));
        break;
+     case Literal::LitType::C_STRING:
+       push (Rust::Token::make_c_string (locus, std::move (value)));
+       break;
      case Literal::LitType::INT:
        {
  	auto val_len = value.length ();
diff -Nrcpad gcc-17-20260705/gcc/rust/ast/rust-ast.cc gcc-17-20260712/gcc/rust/ast/rust-ast.cc
*** gcc-17-20260705/gcc/rust/ast/rust-ast.cc	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/ast/rust-ast.cc	Sun Jul 12 22:32:11 2026
*************** AttributeParser::parse_meta_item_inner (
*** 3620,3625 ****
--- 3620,3626 ----
  	case BYTE_CHAR_LITERAL:
  	case BYTE_STRING_LITERAL:
  	case RAW_STRING_LITERAL:
+ 	case C_STRING_LITERAL:
  	case INT_LITERAL:
  	case FLOAT_LITERAL:
  	case TRUE_LITERAL:
diff -Nrcpad gcc-17-20260705/gcc/rust/ast/rust-ast.h gcc-17-20260712/gcc/rust/ast/rust-ast.h
*** gcc-17-20260705/gcc/rust/ast/rust-ast.h	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/ast/rust-ast.h	Sun Jul 12 22:32:11 2026
*************** public:
*** 209,214 ****
--- 209,215 ----
        case STRING_LITERAL:
        case BYTE_STRING_LITERAL:
        case RAW_STRING_LITERAL:
+       case C_STRING_LITERAL:
  	return true;
        default:
  	return false;
*************** public:
*** 272,277 ****
--- 273,279 ----
      BYTE,
      BYTE_STRING,
      RAW_STRING,
+     C_STRING,
      INT,
      FLOAT,
      BOOL,
diff -Nrcpad gcc-17-20260705/gcc/rust/ast/rust-expr.h gcc-17-20260712/gcc/rust/ast/rust-expr.h
*** gcc-17-20260705/gcc/rust/ast/rust-expr.h	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/ast/rust-expr.h	Sun Jul 12 22:32:11 2026
*************** protected:
*** 3751,3756 ****
--- 3751,3757 ----
    }
  };
  
+ // Box expression AST node representation
  class BoxExpr : public ExprWithoutBlock
  {
    std::unique_ptr<Expr> expr;
diff -Nrcpad gcc-17-20260705/gcc/rust/backend/rust-compile-base.cc gcc-17-20260712/gcc/rust/backend/rust-compile-base.cc
*** gcc-17-20260705/gcc/rust/backend/rust-compile-base.cc	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/backend/rust-compile-base.cc	Sun Jul 12 22:32:11 2026
*************** HIRCompileBase::compile_function_body (t
*** 708,714 ****
  	  return_value = coercion_site (id, return_value, actual, expected,
  					lvalue_locus, rvalue_locus);
  
! 	  CompileDrop::emit_current_scope_drop_calls (ctx);
  
  	  tree return_stmt
  	    = Backend::return_statement (fndecl, return_value, locus);
--- 708,714 ----
  	  return_value = coercion_site (id, return_value, actual, expected,
  					lvalue_locus, rvalue_locus);
  
! 	  CompileDrop (ctx).emit_current_scope_drop_calls ();
  
  	  tree return_stmt
  	    = Backend::return_statement (fndecl, return_value, locus);
*************** HIRCompileBase::compile_function_body (t
*** 732,738 ****
        // errors should have occurred
        location_t locus = function_body.get_locus ();
        tree return_value = unit_expression (locus);
!       CompileDrop::emit_current_scope_drop_calls (ctx);
        tree return_stmt
  	= Backend::return_statement (fndecl, return_value, locus);
        ctx->add_statement (return_stmt);
--- 732,738 ----
        // errors should have occurred
        location_t locus = function_body.get_locus ();
        tree return_value = unit_expression (locus);
!       CompileDrop (ctx).emit_current_scope_drop_calls ();
        tree return_stmt
  	= Backend::return_statement (fndecl, return_value, locus);
        ctx->add_statement (return_stmt);
diff -Nrcpad gcc-17-20260705/gcc/rust/backend/rust-compile-block.cc gcc-17-20260712/gcc/rust/backend/rust-compile-block.cc
*** gcc-17-20260705/gcc/rust/backend/rust-compile-block.cc	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/backend/rust-compile-block.cc	Sun Jul 12 22:32:11 2026
*************** CompileBlock::visit (HIR::BlockExpr &exp
*** 85,91 ****
  					 expr.get_locus ());
        ctx->add_statement (assignment);
      }
!   CompileDrop::emit_current_scope_drop_calls (ctx);
  
    ctx->pop_block ();
    translated = new_block;
--- 85,91 ----
  					 expr.get_locus ());
        ctx->add_statement (assignment);
      }
!   CompileDrop (ctx).emit_current_scope_drop_calls ();
  
    ctx->pop_block ();
    translated = new_block;
diff -Nrcpad gcc-17-20260705/gcc/rust/backend/rust-compile-block.h gcc-17-20260712/gcc/rust/backend/rust-compile-block.h
*** gcc-17-20260705/gcc/rust/backend/rust-compile-block.h	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/backend/rust-compile-block.h	Sun Jul 12 22:32:11 2026
*************** public:
*** 94,99 ****
--- 94,100 ----
    void visit (HIR::RangeFullExpr &) override {}
    void visit (HIR::RangeFromToInclExpr &) override {}
    void visit (HIR::RangeToInclExpr &) override {}
+   void visit (HIR::BoxExpr &) override {}
    void visit (HIR::ReturnExpr &) override {}
    void visit (HIR::UnsafeBlockExpr &) override {}
    void visit (HIR::LoopExpr &) override {}
*************** public:
*** 184,189 ****
--- 185,191 ----
    void visit (HIR::RangeFullExpr &) override {}
    void visit (HIR::RangeFromToInclExpr &) override {}
    void visit (HIR::RangeToInclExpr &) override {}
+   void visit (HIR::BoxExpr &) override {}
    void visit (HIR::ReturnExpr &) override {}
    void visit (HIR::UnsafeBlockExpr &) override {}
    void visit (HIR::LoopExpr &) override {}
diff -Nrcpad gcc-17-20260705/gcc/rust/backend/rust-compile-context.h gcc-17-20260712/gcc/rust/backend/rust-compile-context.h
*** gcc-17-20260705/gcc/rust/backend/rust-compile-context.h	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/backend/rust-compile-context.h	Sun Jul 12 22:32:11 2026
*************** struct CustomDeriveInfo
*** 51,56 ****
--- 51,58 ----
    std::vector<std::string> attributes;
  };
  
+ class DropBuilder;
+ 
  class Context
  {
  public:
*************** public:
*** 136,153 ****
  
    void add_statement (tree stmt) { statements.back ().push_back (stmt); }
  
-   std::vector<DropCandidate> &peek_block_drop_candidates ()
-   {
-     rust_assert (!block_drop_candidates.empty ());
-     return block_drop_candidates.back ();
-   }
- 
-   void note_simple_drop_candidate (HirId hirid, location_t locus)
-   {
-     rust_assert (!block_drop_candidates.empty ());
-     block_drop_candidates.back ().emplace_back (hirid, locus);
-   }
- 
    void insert_var_decl (HirId id, ::Bvariable *decl)
    {
      compiled_var_decls[id] = decl;
--- 138,143 ----
*************** public:
*** 298,303 ****
--- 288,308 ----
      return true;
    }
  
+   void insert_vtable (std::pair<size_t, size_t> pair, ::Bvariable *vtable)
+   {
+     compiled_vtables[pair] = vtable;
+   }
+ 
+   bool lookup_vtable (std::pair<size_t, size_t> pair, ::Bvariable **vtable)
+   {
+     auto it = compiled_vtables.find (pair);
+     if (it == compiled_vtables.end ())
+       return false;
+ 
+     *vtable = it->second;
+     return true;
+   }
+ 
    void push_fn (tree fn, ::Bvariable *ret_addr, TyTy::BaseType *retty)
    {
      fn_stack.emplace_back (fn, ret_addr, retty);
*************** public:
*** 421,426 ****
--- 426,432 ----
    }
  
  private:
+   friend class DropBuilder;
    Context ();
  
    Resolver::TypeCheckContext *tyctx;
*************** private:
*** 434,439 ****
--- 440,446 ----
    std::map<HirId, tree> compiled_fn_map;
    std::map<HirId, tree> compiled_consts;
    std::map<HirId, tree> compiled_labels;
+   std::map<std::pair<size_t, size_t>, ::Bvariable *> compiled_vtables;
    std::vector<::std::vector<tree>> statements;
    std::vector<tree> scope_stack;
    std::vector<::std::vector<DropCandidate>> block_drop_candidates;
diff -Nrcpad gcc-17-20260705/gcc/rust/backend/rust-compile-drop-builder.cc gcc-17-20260712/gcc/rust/backend/rust-compile-drop-builder.cc
*** gcc-17-20260705/gcc/rust/backend/rust-compile-drop-builder.cc	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/rust/backend/rust-compile-drop-builder.cc	Sun Jul 12 22:32:11 2026
***************
*** 0 ****
--- 1,42 ----
+ // Copyright (C) 2026 Free Software Foundation, Inc.
+ 
+ // This file is part of GCC.
+ 
+ // GCC is free software; you can redistribute it and/or modify it under
+ // the terms of the GNU General Public License as published by the Free
+ // Software Foundation; either version 3, or (at your option) any later
+ // version.
+ 
+ // GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+ // WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ // FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ // for more details.
+ 
+ // 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-compile-drop-builder.h"
+ #include "rust-compile-context.h"
+ 
+ namespace Rust {
+ namespace Compile {
+ 
+ DropBuilder::DropBuilder (Context &ctx) : ctx (ctx) {}
+ 
+ void
+ DropBuilder::note_simple_drop_candidate (HirId hirid, location_t locus)
+ {
+   rust_assert (!ctx.block_drop_candidates.empty ());
+   ctx.block_drop_candidates.back ().emplace_back (hirid, locus);
+ }
+ 
+ std::vector<DropCandidate> &
+ DropBuilder::peek_block_drop_candidates ()
+ {
+   rust_assert (!ctx.block_drop_candidates.empty ());
+   return ctx.block_drop_candidates.back ();
+ }
+ 
+ } // namespace Compile
+ } // namespace Rust
\ No newline at end of file
diff -Nrcpad gcc-17-20260705/gcc/rust/backend/rust-compile-drop-builder.h gcc-17-20260712/gcc/rust/backend/rust-compile-drop-builder.h
*** gcc-17-20260705/gcc/rust/backend/rust-compile-drop-builder.h	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/rust/backend/rust-compile-drop-builder.h	Sun Jul 12 22:32:11 2026
***************
*** 0 ****
--- 1,44 ----
+ // Copyright (C) 2026 Free Software Foundation, Inc.
+ 
+ // This file is part of GCC.
+ 
+ // GCC is free software; you can redistribute it and/or modify it under
+ // the terms of the GNU General Public License as published by the Free
+ // Software Foundation; either version 3, or (at your option) any later
+ // version.
+ 
+ // GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+ // WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ // FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ // for more details.
+ 
+ // You should have received a copy of the GNU General Public License
+ // along with GCC; see the file COPYING3.  If not see
+ // <http://www.gnu.org/licenses/>.
+ 
+ #ifndef RUST_COMPILE_DROP_BUILDER_H
+ #define RUST_COMPILE_DROP_BUILDER_H
+ 
+ #include "rust-compile-drop-candidate.h"
+ 
+ namespace Rust {
+ namespace Compile {
+ 
+ class Context;
+ 
+ class DropBuilder
+ {
+ public:
+   DropBuilder (Context &ctx);
+ 
+   void note_simple_drop_candidate (HirId hirid, location_t locus);
+   std::vector<DropCandidate> &peek_block_drop_candidates ();
+ 
+ private:
+   Context &ctx;
+ };
+ 
+ } // namespace Compile
+ } // namespace Rust
+ 
+ #endif // RUST_COMPILE_DROP_BUILDER_H
\ No newline at end of file
diff -Nrcpad gcc-17-20260705/gcc/rust/backend/rust-compile-drop.cc gcc-17-20260712/gcc/rust/backend/rust-compile-drop.cc
*** gcc-17-20260705/gcc/rust/backend/rust-compile-drop.cc	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/backend/rust-compile-drop.cc	Sun Jul 12 22:32:11 2026
***************
*** 17,22 ****
--- 17,23 ----
  // <http://www.gnu.org/licenses/>.
  
  #include "rust-compile-drop.h"
+ #include "rust-compile-drop-builder.h"
  #include "rust-compile-base.h"
  #include "rust-compile-context.h"
  #include "rust-compile-implitem.h"
***************
*** 29,36 ****
  namespace Rust {
  namespace Compile {
  
  bool
! CompileDrop::type_has_drop_impl (Context *ctx, TyTy::BaseType *ty)
  {
    auto drop_lang_item
      = ctx->get_mappings ().lookup_lang_item (LangItem::Kind::DROP);
--- 30,39 ----
  namespace Rust {
  namespace Compile {
  
+ CompileDrop::CompileDrop (Context *ctx) : ctx (ctx) {}
+ 
  bool
! CompileDrop::type_has_drop_impl (TyTy::BaseType *ty)
  {
    auto drop_lang_item
      = ctx->get_mappings ().lookup_lang_item (LangItem::Kind::DROP);
*************** CompileDrop::type_has_drop_impl (Context
*** 53,60 ****
  
  // Find the Drop trait, look for the drop method, and build the function call.
  tree
! CompileDrop::compile_drop_call (Context *ctx, Bvariable *var,
! 				TyTy::BaseType *ty, location_t locus)
  {
    auto drop_lang = ctx->get_mappings ().lookup_lang_item (LangItem::Kind::DROP);
    if (!drop_lang.has_value ())
--- 56,63 ----
  
  // Find the Drop trait, look for the drop method, and build the function call.
  tree
! CompileDrop::compile_drop_call (Bvariable *var, TyTy::BaseType *ty,
! 				location_t locus)
  {
    auto drop_lang = ctx->get_mappings ().lookup_lang_item (LangItem::Kind::DROP);
    if (!drop_lang.has_value ())
*************** CompileDrop::compile_drop_call (Context
*** 88,96 ****
  }
  
  void
! CompileDrop::emit_current_scope_drop_calls (Context *ctx)
  {
!   auto &drop_candidates = ctx->peek_block_drop_candidates ();
  
    for (auto it = drop_candidates.rbegin (); it != drop_candidates.rend (); ++it)
      {
--- 91,100 ----
  }
  
  void
! CompileDrop::emit_current_scope_drop_calls ()
  {
!   DropBuilder drop_builder (*ctx);
!   auto &drop_candidates = drop_builder.peek_block_drop_candidates ();
  
    for (auto it = drop_candidates.rbegin (); it != drop_candidates.rend (); ++it)
      {
*************** CompileDrop::emit_current_scope_drop_cal
*** 103,109 ****
        ok = ctx->lookup_var_decl (it->hirid, &var);
        rust_assert (ok);
  
!       tree drop_call = CompileDrop::compile_drop_call (ctx, var, ty, it->locus);
        if (drop_call != NULL_TREE)
  	ctx->add_statement (convert_to_void (drop_call, ICV_STATEMENT));
      }
--- 107,113 ----
        ok = ctx->lookup_var_decl (it->hirid, &var);
        rust_assert (ok);
  
!       tree drop_call = compile_drop_call (var, ty, it->locus);
        if (drop_call != NULL_TREE)
  	ctx->add_statement (convert_to_void (drop_call, ICV_STATEMENT));
      }
diff -Nrcpad gcc-17-20260705/gcc/rust/backend/rust-compile-drop.h gcc-17-20260712/gcc/rust/backend/rust-compile-drop.h
*** gcc-17-20260705/gcc/rust/backend/rust-compile-drop.h	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/backend/rust-compile-drop.h	Sun Jul 12 22:32:11 2026
*************** namespace Compile {
*** 27,38 ****
  class CompileDrop
  {
  public:
!   static bool type_has_drop_impl (Context *ctx, TyTy::BaseType *ty);
  
!   static tree compile_drop_call (Context *ctx, Bvariable *var,
! 				 TyTy::BaseType *ty, location_t locus);
  
!   static void emit_current_scope_drop_calls (Context *ctx);
  };
  
  } // namespace Compile
--- 27,42 ----
  class CompileDrop
  {
  public:
!   CompileDrop (Context *ctx);
  
!   bool type_has_drop_impl (TyTy::BaseType *ty);
  
!   void emit_current_scope_drop_calls ();
! 
! private:
!   tree compile_drop_call (Bvariable *var, TyTy::BaseType *ty, location_t locus);
! 
!   Context *ctx;
  };
  
  } // namespace Compile
diff -Nrcpad gcc-17-20260705/gcc/rust/backend/rust-compile-expr.cc gcc-17-20260712/gcc/rust/backend/rust-compile-expr.cc
*** gcc-17-20260705/gcc/rust/backend/rust-compile-expr.cc	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/backend/rust-compile-expr.cc	Sun Jul 12 22:32:11 2026
***************
*** 45,50 ****
--- 45,158 ----
  namespace Rust {
  namespace Compile {
  
+ namespace {
+ tree
+ compile_box_struct (Context *ctx, TyTy::BaseType *curr_ty, tree typed_ptr,
+ 		    location_t locus, int depth = 0)
+ {
+   // infinite loop guard
+   rust_assert (depth < 100);
+ 
+   if (curr_ty->get_kind () == TyTy::TypeKind::POINTER
+       || curr_ty->get_kind () == TyTy::TypeKind::REF)
+     return typed_ptr;
+ 
+   if (curr_ty->get_kind () == TyTy::TypeKind::ADT)
+     {
+       TyTy::ADTType *adt = static_cast<TyTy::ADTType *> (curr_ty);
+       tree adt_ty_tree = TyTyResolveCompile::compile (ctx, adt);
+       tree size_tree = TYPE_SIZE_UNIT (adt_ty_tree);
+ 
+       if (integer_zerop (size_tree))
+ 	return Backend::constructor_expression (adt_ty_tree, false, {}, -1,
+ 						locus);
+       rust_assert (!adt->is_enum ());
+       rust_assert (adt->number_of_variants () == 1);
+ 
+       std::vector<tree> args;
+       TyTy::VariantDef *variant = adt->get_variants ().at (0);
+       for (size_t i = 0; i < variant->num_fields (); i++)
+ 	{
+ 	  TyTy::StructFieldType *field = variant->get_field_at_index (i);
+ 	  TyTy::BaseType *field_ty = field->get_field_type ();
+ 	  tree field_tree
+ 	    = compile_box_struct (ctx, field_ty, typed_ptr, locus, depth + 1);
+ 	  args.push_back (field_tree);
+ 	}
+       return Backend::constructor_expression (adt_ty_tree, false, args, -1,
+ 					      locus);
+     }
+   if (curr_ty->get_kind () == TyTy::TypeKind::PARAM)
+     {
+       TyTy::ParamType *param_ty = static_cast<TyTy::ParamType *> (curr_ty);
+       TyTy::BaseType *resolved_ty = param_ty->resolve ();
+       rust_assert (resolved_ty != nullptr && resolved_ty != curr_ty);
+       return compile_box_struct (ctx, resolved_ty, typed_ptr, locus, depth + 1);
+     }
+   rust_unreachable ();
+   return error_mark_node;
+ };
+ 
+ tree
+ compile_box (Context *ctx, TyTy::BaseType *box_tyty, TyTy::BaseType *inner_tyty,
+ 	     tree inner_expr_tree, location_t locus)
+ {
+   tree inner_type_tree = TyTyResolveCompile::compile (ctx, inner_tyty);
+ 
+   if (!COMPLETE_TYPE_P (inner_type_tree))
+     {
+       rust_sorry_at (locus,
+ 		     "dynamically sized types in boxes are not supported yet");
+       return error_mark_node;
+     }
+   tree size_tree = TYPE_SIZE_UNIT (inner_type_tree);
+   tree align_tree
+     = build_int_cst (size_type_node, TYPE_ALIGN_UNIT (inner_type_tree));
+ 
+   DefId exchange_malloc_defid
+     = ctx->get_mappings ().get_lang_item (LangItem::Kind::EXCHANGE_MALLOC,
+ 					  locus);
+   HIR::Item *item
+     = ctx->get_mappings ().lookup_defid (exchange_malloc_defid).value ();
+ 
+   tree exchange_malloc_decl = nullptr;
+   ctx->lookup_function_decl (item->get_mappings ().get_hirid (),
+ 			     &exchange_malloc_decl, exchange_malloc_defid);
+ 
+   tree raw_ptr = save_expr (build_call_expr_loc (locus, exchange_malloc_decl, 2,
+ 						 size_tree, align_tree));
+   tree typed_ptr = fold_convert (build_pointer_type (inner_type_tree), raw_ptr);
+ 
+   tree deref = build1_loc (locus, INDIRECT_REF, inner_type_tree, typed_ptr);
+   tree assignment
+     = build2_loc (locus, MODIFY_EXPR, inner_type_tree, deref, inner_expr_tree);
+ 
+   tree box_struct = compile_box_struct (ctx, box_tyty, typed_ptr, locus);
+ 
+   return build2_loc (locus, COMPOUND_EXPR, TREE_TYPE (box_struct), assignment,
+ 		     box_struct);
+ }
+ 
+ tree
+ build_box_inner_ptr (tree main_expr, location_t locus)
+ {
+   // We continuously extract the first field of the struct until we hit the
+   // actual underlying raw pointer. This handles both simple Box layouts (ptr:
+   // *mut T) and complex ones like this (Box<Unique<NonNull<T>>>). This relies
+   // on the standard library's layout guarantees and will break if a stateful
+   // custom allocator is placed as the first field in the RECORD_TYPE.
+   while (TREE_CODE (TREE_TYPE (main_expr)) == RECORD_TYPE)
+     {
+       tree first_field = TYPE_FIELDS (TREE_TYPE (main_expr));
+       if (first_field == NULL_TREE)
+ 	break;
+       main_expr = build3_loc (locus, COMPONENT_REF, TREE_TYPE (first_field),
+ 			      main_expr, first_field, NULL_TREE);
+     }
+   return main_expr;
+ }
+ } // namespace
+ 
  CompileExpr::CompileExpr (Context *ctx)
    : HIRCompileBase (ctx), translated (error_mark_node)
  {}
*************** CompileExpr::visit (HIR::TupleExpr &expr
*** 116,121 ****
--- 224,249 ----
  }
  
  void
+ CompileExpr::visit (HIR::BoxExpr &expr)
+ {
+   TyTy::BaseType *inner_tyty = nullptr;
+   bool ok = ctx->get_tyctx ()->lookup_type (
+     expr.get_expr ().get_mappings ().get_hirid (), &inner_tyty);
+   rust_assert (ok);
+ 
+   TyTy::BaseType *box_tyty = nullptr;
+   ok = ctx->get_tyctx ()->lookup_type (expr.get_mappings ().get_hirid (),
+ 				       &box_tyty);
+   rust_assert (ok);
+ 
+   tree inner_expr_tree
+     = save_expr (CompileExpr::Compile (expr.get_expr (), ctx));
+ 
+   translated = compile_box (ctx, box_tyty, inner_tyty, inner_expr_tree,
+ 			    expr.get_locus ());
+ }
+ 
+ void
  CompileExpr::visit (HIR::ReturnExpr &expr)
  {
    auto fncontext = ctx->peek_fn ();
*************** CompileExpr::visit (HIR::FieldAccessExpr
*** 691,697 ****
      }
  
    size_t field_index = 0;
!   if (receiver->get_kind () == TyTy::TypeKind::ADT)
      {
        TyTy::ADTType *adt = static_cast<TyTy::ADTType *> (receiver);
        rust_assert (!adt->is_enum ());
--- 819,839 ----
      }
  
    size_t field_index = 0;
! 
!   if (auto inner_ty = TyTy::try_get_box_inner_type (receiver))
!     {
!       rust_assert ((*inner_ty)->get_kind () == TyTy::TypeKind::ADT);
!       TyTy::ADTType *inner_adt = static_cast<TyTy::ADTType *> (*inner_ty);
!       TyTy::VariantDef *variant = inner_adt->get_variants ().at (0);
! 
!       bool ok = variant->lookup_field (expr.get_field_name ().as_string (),
! 				       nullptr, &field_index);
!       rust_assert (ok);
! 
!       receiver_ref = build_box_inner_ptr (receiver_ref, expr.get_locus ());
!       receiver_ref = indirect_expression (receiver_ref, expr.get_locus ());
!     }
!   else if (receiver->get_kind () == TyTy::TypeKind::ADT)
      {
        TyTy::ADTType *adt = static_cast<TyTy::ADTType *> (receiver);
        rust_assert (!adt->is_enum ());
*************** CompileExpr::visit (HIR::FieldAccessExpr
*** 717,724 ****
  				       nullptr, &field_index);
        rust_assert (ok);
  
!       tree indirect = indirect_expression (receiver_ref, expr.get_locus ());
!       receiver_ref = indirect;
      }
  
    translated = Backend::struct_field_expression (receiver_ref, field_index,
--- 859,881 ----
  				       nullptr, &field_index);
        rust_assert (ok);
  
!       // TODO this check is only used for CStr, test again when we support
!       // compilation of #[repr(transparent)] structs
!       if (RS_DST_FLAG_P (TREE_TYPE (receiver_ref)))
! 	{
! 	  const TyTy::StructFieldType *field
! 	    = variant->get_field_at_index (field_index);
! 	  tree field_type
! 	    = TyTyResolveCompile::compile (ctx, field->get_field_type ());
! 	  translated = fold_build1_loc (expr.get_locus (), VIEW_CONVERT_EXPR,
! 					field_type, receiver_ref);
! 	  return;
! 	}
!       else
! 	{
! 	  tree indirect = indirect_expression (receiver_ref, expr.get_locus ());
! 	  receiver_ref = indirect;
! 	}
      }
  
    translated = Backend::struct_field_expression (receiver_ref, field_index,
*************** CompileExpr::visit (HIR::LoopExpr &expr)
*** 779,784 ****
--- 936,945 ----
        ctx->add_statement (label_decl);
        ctx->insert_label_decl (
  	loop_label.get_lifetime ().get_mappings ().get_hirid (), label);
+       // Associate the loop's result temporary with the label so that a
+       // `break 'label value` can locate it (see visit (HIR::BreakExpr)).
+       ctx->insert_var_decl (
+ 	loop_label.get_lifetime ().get_mappings ().get_hirid (), tmp);
      }
  
    tree loop_begin_label
*************** CompileExpr::visit (HIR::DereferenceExpr
*** 1026,1031 ****
--- 1187,1207 ----
  
    tree main_expr = CompileExpr::Compile (expr.get_expr (), ctx);
  
+   // Box<T> Dereference Hook
+   // Typechecker treats 'Box<T>' as a privileged pointer and allows
+   // explicit dereferencing.However, the backend sees Box as a normal
+   // RECORD_TYPE (struct). To solve this, if the type is the 'owned_box'
+   // lang item, we drill down.
+   TyTy::BaseType *base_tyty;
+   if (ctx->get_tyctx ()->lookup_type (
+ 	expr.get_expr ().get_mappings ().get_hirid (), &base_tyty))
+     {
+       if (TyTy::try_get_box_inner_type (base_tyty))
+ 	{
+ 	  main_expr = build_box_inner_ptr (main_expr, expr.get_locus ());
+ 	}
+     }
+ 
    // this might be an operator overload situation lets check
    TyTy::FnType *fntype;
    bool is_op_overload = ctx->get_tyctx ()->lookup_operator_overload (
*************** CompileExpr::visit (HIR::LiteralExpr &ex
*** 1089,1094 ****
--- 1265,1274 ----
      case HIR::Literal::BYTE_STRING:
        translated = compile_byte_string_literal (expr, tyty);
        return;
+ 
+     case HIR::Literal::C_STRING:
+       translated = compile_c_string_literal (expr, tyty);
+       return;
      }
  }
  
*************** CompileExpr::get_fn_addr_from_dyn (const
*** 1623,1634 ****
  
    tree vtable_ptr
      = Backend::struct_field_expression (receiver_ref, 1, expr_locus);
!   tree vtable_array_access
!     = build4_loc (expr_locus, ARRAY_REF, TREE_TYPE (TREE_TYPE (vtable_ptr)),
! 		  vtable_ptr, idx, NULL_TREE, NULL_TREE);
  
    tree vcall = build3_loc (expr_locus, OBJ_TYPE_REF, expected_fntype,
! 			   vtable_array_access, receiver_ref, idx);
  
    return vcall;
  }
--- 1803,1821 ----
  
    tree vtable_ptr
      = Backend::struct_field_expression (receiver_ref, 1, expr_locus);
!   tree vtable_struct_type = TREE_TYPE (TREE_TYPE (vtable_ptr));
!   rust_assert (TREE_CODE (vtable_struct_type) == RECORD_TYPE);
!   tree vtable_field = TYPE_FIELDS (vtable_struct_type);
!   for (size_t i = 0; i < offs + 3; i++) // drop, size, align, [methods]
!     vtable_field = DECL_CHAIN (vtable_field);
!   rust_assert (vtable_field != NULL_TREE);
!   tree vtable = build_fold_indirect_ref_loc (expr_locus, vtable_ptr);
!   tree vtable_field_access
!     = build3_loc (expr_locus, COMPONENT_REF, TREE_TYPE (vtable_field), vtable,
! 		  vtable_field, NULL_TREE);
  
    tree vcall = build3_loc (expr_locus, OBJ_TYPE_REF, expected_fntype,
! 			   vtable_field_access, receiver_ref, idx);
  
    return vcall;
  }
*************** CompileExpr::compile_byte_string_literal
*** 1903,1908 ****
--- 2090,2120 ----
  }
  
  tree
+ CompileExpr::compile_c_string_literal (const HIR::LiteralExpr &expr,
+ 				       const TyTy::BaseType *tyty)
+ {
+   // Copied from compile_string_literal
+   tree fat_pointer = TyTyResolveCompile::compile (ctx, tyty);
+ 
+   rust_assert (expr.get_lit_type () == HIR::Literal::C_STRING);
+   const auto literal_value = expr.get_literal ();
+ 
+   auto base = Backend::string_constant_expression (literal_value.as_string ());
+   tree data = address_expression (base, expr.get_locus ());
+ 
+   TyTy::BaseType *usize = nullptr;
+   bool ok = ctx->get_tyctx ()->lookup_builtin ("usize", &usize);
+   rust_assert (ok);
+   tree type = TyTyResolveCompile::compile (ctx, usize);
+ 
+   // +1 for null terminator, unlike Rust string literals.
+   tree size = build_int_cstu (type, literal_value.as_string ().size () + 1);
+ 
+   return Backend::constructor_expression (fat_pointer, false, {data, size}, -1,
+ 					  expr.get_locus ());
+ }
+ 
+ tree
  CompileExpr::type_cast_expression (tree type_to_cast_to, tree expr_tree,
  				   location_t location)
  {
*************** HIRCompileBase::resolve_deref_adjustment
*** 2198,2204 ****
  {
    rust_assert (adjustment.is_deref_adjustment ()
  	       || adjustment.is_deref_mut_adjustment ());
!   rust_assert (adjustment.has_operator_overload ());
  
    TyTy::FnType *lookup = adjustment.get_deref_operator_fn ();
    TyTy::BaseType *receiver = adjustment.get_actual ();
--- 2410,2426 ----
  {
    rust_assert (adjustment.is_deref_adjustment ()
  	       || adjustment.is_deref_mut_adjustment ());
!   if (!adjustment.has_operator_overload ())
!     {
!       TyTy::BaseType *receiver = adjustment.get_actual ();
!       if (TyTy::try_get_box_inner_type (receiver))
! 	{
! 	  tree receiver_ref = expression;
! 	  receiver_ref = build_box_inner_ptr (receiver_ref, locus);
! 	  return indirect_expression (receiver_ref, locus);
! 	}
!       rust_assert (false);
!     }
  
    TyTy::FnType *lookup = adjustment.get_deref_operator_fn ();
    TyTy::BaseType *receiver = adjustment.get_actual ();
*************** CompileExpr::generate_closure_fntype (HI
*** 2681,2688 ****
    const TyTy::TypeBoundPredicate &predicate
      = *closure_tyty.get_specified_bounds ().begin ();
  
!   // ensure the fn_once_output associated type is set
!   closure_tyty.setup_fn_once_output ();
  
    // the function signature is based on the trait bound that the closure
    // implements which is determined at the type resolution time
--- 2903,2910 ----
    const TyTy::TypeBoundPredicate &predicate
      = *closure_tyty.get_specified_bounds ().begin ();
  
!   // FnOnce::Output is normalized on demand by normalize_projection's closure
!   // special-case
  
    // the function signature is based on the trait bound that the closure
    // implements which is determined at the type resolution time
diff -Nrcpad gcc-17-20260705/gcc/rust/backend/rust-compile-expr.h gcc-17-20260712/gcc/rust/backend/rust-compile-expr.h
*** gcc-17-20260705/gcc/rust/backend/rust-compile-expr.h	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/backend/rust-compile-expr.h	Sun Jul 12 22:32:11 2026
*************** public:
*** 76,81 ****
--- 76,82 ----
    void visit (HIR::InlineAsm &expr) override;
    void visit (HIR::LlvmInlineAsm &expr) override;
    void visit (HIR::OffsetOf &expr) override;
+   void visit (HIR::BoxExpr &expr) override;
  
    // TODO
    void visit (HIR::ErrorPropagationExpr &) override {}
*************** protected:
*** 131,136 ****
--- 132,140 ----
    tree compile_byte_string_literal (const HIR::LiteralExpr &expr,
  				    const TyTy::BaseType *tyty);
  
+   tree compile_c_string_literal (const HIR::LiteralExpr &expr,
+ 				 const TyTy::BaseType *tyty);
+ 
    tree type_cast_expression (tree type_to_cast_to, tree expr, location_t locus);
  
    tree array_value_expr (location_t expr_locus,
diff -Nrcpad gcc-17-20260705/gcc/rust/backend/rust-compile-extern.h gcc-17-20260712/gcc/rust/backend/rust-compile-extern.h
*** gcc-17-20260705/gcc/rust/backend/rust-compile-extern.h	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/backend/rust-compile-extern.h	Sun Jul 12 22:32:11 2026
*************** public:
*** 118,124 ****
      if (fntype->get_abi () == ABI::INTRINSIC)
        {
  	Intrinsics compile (ctx);
! 	tree fndecl = compile.compile (fntype);
  	ctx->insert_function_decl (fntype, fndecl);
  	return;
        }
--- 118,124 ----
      if (fntype->get_abi () == ABI::INTRINSIC)
        {
  	Intrinsics compile (ctx);
! 	tree fndecl = compile.compile (fntype, ref_locus);
  	ctx->insert_function_decl (fntype, fndecl);
  	return;
        }
diff -Nrcpad gcc-17-20260705/gcc/rust/backend/rust-compile-intrinsic.cc gcc-17-20260712/gcc/rust/backend/rust-compile-intrinsic.cc
*** gcc-17-20260705/gcc/rust/backend/rust-compile-intrinsic.cc	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/backend/rust-compile-intrinsic.cc	Sun Jul 12 22:32:11 2026
*************** using IValue = Values::Intrinsics;
*** 29,36 ****
--- 29,40 ----
  
  static const std::map<std::string, handlers::HandlerBuilder> generic_intrinsics
    = {{IValue::OFFSET, handlers::offset},
+      {IValue::ARITH_OFFSET, handlers::arith_offset_handler},
+      {IValue::WRITE_BYTES, handlers::write_bytes_handler},
       {IValue::SIZE_OF, handlers::sizeof_handler},
+      {IValue::SIZE_OF_VAL, handlers::size_of_val_handler},
       {IValue::MIN_ALIGN_OF, handlers::min_align_of_handler},
+      {IValue::MIN_ALIGN_OF_VAL, handlers::min_align_of_val_handler},
       {IValue::TRANSMUTE, handlers::transmute},
       {IValue::ROTATE_LEFT, handlers::rotate_left},
       {IValue::ROTATE_RIGHT, handlers::rotate_right},
*************** Intrinsics::Intrinsics (Context *ctx) :
*** 86,92 ****
   * compiler
   */
  tree
! Intrinsics::compile (TyTy::FnType *fntype)
  {
    rust_assert (fntype->get_abi () == ABI::INTRINSIC);
  
--- 90,96 ----
   * compiler
   */
  tree
! Intrinsics::compile (TyTy::FnType *fntype, location_t expr_locus)
  {
    rust_assert (fntype->get_abi () == ABI::INTRINSIC);
  
*************** Intrinsics::compile (TyTy::FnType *fntyp
*** 99,105 ****
    // is it an generic builtin?
    auto it = generic_intrinsics.find (fntype->get_identifier ());
    if (it != generic_intrinsics.end ())
!     return it->second (ctx, fntype);
  
    location_t locus = ctx->get_mappings ().lookup_location (fntype->get_ref ());
    rust_error_at (locus, ErrorCode::E0093,
--- 103,109 ----
    // is it an generic builtin?
    auto it = generic_intrinsics.find (fntype->get_identifier ());
    if (it != generic_intrinsics.end ())
!     return it->second (ctx, fntype, expr_locus);
  
    location_t locus = ctx->get_mappings ().lookup_location (fntype->get_ref ());
    rust_error_at (locus, ErrorCode::E0093,
diff -Nrcpad gcc-17-20260705/gcc/rust/backend/rust-compile-intrinsic.h gcc-17-20260712/gcc/rust/backend/rust-compile-intrinsic.h
*** gcc-17-20260705/gcc/rust/backend/rust-compile-intrinsic.h	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/backend/rust-compile-intrinsic.h	Sun Jul 12 22:32:11 2026
***************
*** 18,24 ****
  #define RUST_COMPILE_INTRINSIC
  
  #include "rust-compile-context.h"
- #include "langhooks.h"
  
  namespace Rust {
  namespace Compile {
--- 18,23 ----
*************** class Intrinsics
*** 28,34 ****
  public:
    Intrinsics (Context *ctx);
  
!   tree compile (TyTy::FnType *fntype);
  
  private:
    Context *ctx;
--- 27,33 ----
  public:
    Intrinsics (Context *ctx);
  
!   tree compile (TyTy::FnType *fntype, location_t expr_locus);
  
  private:
    Context *ctx;
diff -Nrcpad gcc-17-20260705/gcc/rust/backend/rust-compile-item.cc gcc-17-20260712/gcc/rust/backend/rust-compile-item.cc
*** gcc-17-20260705/gcc/rust/backend/rust-compile-item.cc	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/backend/rust-compile-item.cc	Sun Jul 12 22:32:11 2026
*************** CompileItem::visit (HIR::Function &funct
*** 180,208 ****
  				    TyTy::TyWithLocation (concrete),
  				    function.get_locus ());
  
! 	  rust_assert (resolved->is<TyTy::FnType> ());
  	  fntype = resolved->as<TyTy::FnType> ();
  	}
  
        fntype->monomorphize ();
      }
!   else
      {
!       // if this is part of a trait impl block which is not generic we need to
!       // ensure associated types are setup
!       HirId id = function.get_mappings ().get_hirid ();
!       if (auto impl_item = ctx->get_mappings ().lookup_hir_implitem (id))
! 	{
! 	  Resolver::AssociatedImplTrait *impl = nullptr;
! 	  bool found = ctx->get_tyctx ()->lookup_associated_trait_impl (
! 	    impl_item->second, &impl);
! 	  if (found)
! 	    impl->setup_raw_associated_types ();
! 	}
      }
  
    auto &nr_ctx = Resolver2_0::FinalizedNameResolutionContext::get ();
  
    Resolver::CanonicalPath canonical_path
      = nr_ctx.to_canonical_path (function.get_mappings ().get_nodeid (),
  				Resolver2_0::Namespace::Values);
--- 180,208 ----
  				    TyTy::TyWithLocation (concrete),
  				    function.get_locus ());
  
! 	  if (!resolved->is<TyTy::FnType> ())
! 	    return;
! 
  	  fntype = resolved->as<TyTy::FnType> ();
  	}
  
        fntype->monomorphize ();
      }
! 
!   Resolver::AssociatedImplTrait *impl = nullptr;
!   HirId id = function.get_mappings ().get_hirid ();
!   if (auto impl_item = ctx->get_mappings ().lookup_hir_implitem (id))
      {
!       ctx->get_tyctx ()->lookup_associated_trait_impl (impl_item->second,
! 						       &impl);
      }
  
    auto &nr_ctx = Resolver2_0::FinalizedNameResolutionContext::get ();
  
+   tl::optional<Resolver::ImplTraitFrameGuard> guard;
+   if (impl)
+     guard.emplace (impl->get_frame ());
+ 
    Resolver::CanonicalPath canonical_path
      = nr_ctx.to_canonical_path (function.get_mappings ().get_nodeid (),
  				Resolver2_0::Namespace::Values);
diff -Nrcpad gcc-17-20260705/gcc/rust/backend/rust-compile-pattern.cc gcc-17-20260712/gcc/rust/backend/rust-compile-pattern.cc
*** gcc-17-20260705/gcc/rust/backend/rust-compile-pattern.cc	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/backend/rust-compile-pattern.cc	Sun Jul 12 22:32:11 2026
***************
*** 17,22 ****
--- 17,23 ----
  // <http://www.gnu.org/licenses/>.
  
  #include "rust-compile-pattern.h"
+ #include "rust-compile-drop-builder.h"
  #include "print-tree.h"
  #include "rust-compile-drop.h"
  #include "rust-compile-expr.h"
*************** CompilePatternLet::visit (HIR::Identifie
*** 1356,1367 ****
        drop_ty = ref_ty->get_base ();
      }
  
!   if (!CompileDrop::type_has_drop_impl (ctx, drop_ty))
      return;
  
    if (!pattern.has_subpattern () && !pattern.get_is_ref ())
!     ctx->note_simple_drop_candidate (pattern.get_mappings ().get_hirid (),
! 				     pattern.get_locus ());
    else
      rust_sorry_at (pattern.get_locus (),
  		   "drop trait not supported for subpatterns and ref patterns");
--- 1357,1371 ----
        drop_ty = ref_ty->get_base ();
      }
  
!   if (!CompileDrop (ctx).type_has_drop_impl (drop_ty))
      return;
  
    if (!pattern.has_subpattern () && !pattern.get_is_ref ())
!     {
!       DropBuilder drop_builder (*ctx);
!       drop_builder.note_simple_drop_candidate (
! 	pattern.get_mappings ().get_hirid (), pattern.get_locus ());
!     }
    else
      rust_sorry_at (pattern.get_locus (),
  		   "drop trait not supported for subpatterns and ref patterns");
diff -Nrcpad gcc-17-20260705/gcc/rust/backend/rust-compile-resolve-path.cc gcc-17-20260712/gcc/rust/backend/rust-compile-resolve-path.cc
*** gcc-17-20260705/gcc/rust/backend/rust-compile-resolve-path.cc	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/backend/rust-compile-resolve-path.cc	Sun Jul 12 22:32:11 2026
*************** ResolvePathRef::resolve_with_node_id (
*** 182,188 ****
        else if (fntype->get_abi () == ABI::INTRINSIC)
  	{
  	  Intrinsics compile (ctx);
! 	  fn = compile.compile (fntype);
  	  TREE_USED (fn) = 1;
  	  return address_expression (fn, expr_locus);
  	}
--- 182,188 ----
        else if (fntype->get_abi () == ABI::INTRINSIC)
  	{
  	  Intrinsics compile (ctx);
! 	  fn = compile.compile (fntype, expr_locus);
  	  TREE_USED (fn) = 1;
  	  return address_expression (fn, expr_locus);
  	}
*************** ResolvePathRef::resolve_with_node_id (
*** 194,200 ****
        auto d = lookup->destructure ();
        rust_assert (d->get_kind () == TyTy::TypeKind::CONST);
        auto c = d->as_const_type ();
!       rust_assert (c->const_kind () == TyTy::BaseConstType::ConstKind::Value);
        auto val = static_cast<TyTy::ConstValueType *> (c);
        return val->get_value ();
      }
--- 194,202 ----
        auto d = lookup->destructure ();
        rust_assert (d->get_kind () == TyTy::TypeKind::CONST);
        auto c = d->as_const_type ();
!       if (c->const_kind () != TyTy::BaseConstType::ConstKind::Value)
! 	return error_mark_node;
! 
        auto val = static_cast<TyTy::ConstValueType *> (c);
        return val->get_value ();
      }
diff -Nrcpad gcc-17-20260705/gcc/rust/backend/rust-compile-type.cc gcc-17-20260712/gcc/rust/backend/rust-compile-type.cc
*** gcc-17-20260705/gcc/rust/backend/rust-compile-type.cc	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/backend/rust-compile-type.cc	Sun Jul 12 22:32:11 2026
***************
*** 19,25 ****
--- 19,27 ----
  #include "rust-compile-type.h"
  #include "rust-constexpr.h"
  #include "rust-compile-base.h"
+ #include "rust-type-util.h"
  
+ #include "rust-tyty.h"
  #include "tree.h"
  #include "fold-const.h"
  #include "stor-layout.h"
*************** TyTyResolveCompile::visit (const TyTy::C
*** 168,174 ****
  void
  TyTyResolveCompile::visit (const TyTy::ProjectionType &type)
  {
!   translated = error_mark_node;
  }
  
  void
--- 170,188 ----
  void
  TyTyResolveCompile::visit (const TyTy::ProjectionType &type)
  {
!   // workaround to get around const here
!   TyTy::ProjectionType *projection
!     = static_cast<TyTy::ProjectionType *> (type.clone ());
!   auto normalized
!     = Resolver::normalize_projection (projection, BUILTINS_LOCATION, false,
! 				      false);
!   if (normalized == projection)
!     {
!       translated = error_mark_node;
!       return;
!     }
! 
!   translated = TyTyResolveCompile::compile (ctx, normalized, false);
  }
  
  void
*************** TyTyResolveCompile::visit (const TyTy::R
*** 650,655 ****
--- 664,670 ----
    const TyTy::SliceType *slice = nullptr;
    const TyTy::StrType *str = nullptr;
    const TyTy::DynamicObjectType *dyn = nullptr;
+   const TyTy::ADTType *adt = nullptr;
    if (type.is_dyn_slice_type (&slice))
      {
        tree type_record = create_slice_type_record (*slice);
*************** TyTyResolveCompile::visit (const TyTy::R
*** 684,689 ****
--- 699,726 ----
  
        return;
      }
+   // Check for CStr, create a specific record for it
+   else if (type.is_dyn_cstr_type (&adt))
+     {
+       // CStr in core crate is defined as the following:
+       //
+       // #[repr(transparent)]
+       // pub struct CStr {
+       //    inner: [u8]
+       // }
+       //
+       // Reuse the c_char (u8) slice fat-pointer layout
+       TyTy::BaseType *u8 = nullptr;
+       ctx->get_tyctx ()->lookup_builtin ("u8", &u8);
+       // Create a synthetic SliceType over u8 and use that record layout
+       TyTy::SliceType synthetic_slice (adt->get_ref (), adt->get_ident ().locus,
+ 				       TyTy::TyVar (u8->get_ref ()));
+       tree type_record = create_slice_type_record (synthetic_slice);
+       translated
+ 	= Backend::named_type ("&CStr", type_record, adt->get_ident ().locus);
+ 
+       return;
+     }
  
    tree base_compiled_type
      = TyTyResolveCompile::compile (ctx, type.get_base (), trait_object_mode);
*************** TyTyResolveCompile::visit (const TyTy::O
*** 791,812 ****
  tree
  TyTyResolveCompile::create_dyn_obj_record (const TyTy::DynamicObjectType &type)
  {
    // create implicit struct
-   auto items = type.get_object_items ();
    std::vector<Backend::typed_identifier> fields;
  
!   tree uint = Backend::integer_type (true, Backend::get_pointer_size ());
!   tree uintptr_ty = build_pointer_type (uint);
  
!   fields.emplace_back ("pointer", uintptr_ty,
! 		       ctx->get_mappings ().lookup_location (
! 			 type.get_ty_ref ()));
  
!   tree vtable_size = build_int_cst (size_type_node, items.size ());
!   tree vtable_type = Backend::array_type (uintptr_ty, vtable_size);
!   fields.emplace_back ("vtable", vtable_type,
! 		       ctx->get_mappings ().lookup_location (
! 			 type.get_ty_ref ()));
  
    tree record = Backend::struct_type (fields);
    RS_DST_FLAG (record) = 1;
--- 828,857 ----
  tree
  TyTyResolveCompile::create_dyn_obj_record (const TyTy::DynamicObjectType &type)
  {
+   location_t locus = ctx->get_mappings ().lookup_location (type.get_ty_ref ());
    // create implicit struct
    std::vector<Backend::typed_identifier> fields;
  
!   tree voidptr_ty = build_pointer_type (void_type_node);
  
!   fields.emplace_back ("data", voidptr_ty, locus);
  
!   std::vector<Backend::typed_identifier> vtable_fields;
! 
!   // drop_in_place is not implemented yet!
!   vtable_fields.emplace_back ("__drop_in_place", voidptr_ty, locus);
!   vtable_fields.emplace_back ("__size", size_type_node, locus);
!   vtable_fields.emplace_back ("__align", size_type_node, locus);
! 
!   size_t items_size = type.get_object_items ().size ();
!   for (size_t method_idx = 0; method_idx < items_size; method_idx++)
!     vtable_fields.emplace_back ("__method_" + std::to_string (method_idx),
! 				voidptr_ty, locus);
! 
!   tree vtable_record = Backend::struct_type (vtable_fields);
!   tree vtable_ptr_ty = build_pointer_type (vtable_record);
! 
!   fields.emplace_back ("vtable", vtable_ptr_ty, locus);
  
    tree record = Backend::struct_type (fields);
    RS_DST_FLAG (record) = 1;
diff -Nrcpad gcc-17-20260705/gcc/rust/backend/rust-compile.cc gcc-17-20260712/gcc/rust/backend/rust-compile.cc
*** gcc-17-20260705/gcc/rust/backend/rust-compile.cc	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/backend/rust-compile.cc	Sun Jul 12 22:32:11 2026
***************
*** 17,22 ****
--- 17,23 ----
  // <http://www.gnu.org/licenses/>.
  
  #include "rust-compile.h"
+ #include "fold-const.h"
  #include "rust-compile-item.h"
  #include "rust-compile-implitem.h"
  #include "rust-hir-type-bounds.h"
*************** HIRCompileBase::coerce_to_dyn_object (tr
*** 193,231 ****
  
    tree dynamic_object = TyTyResolveCompile::compile (ctx, &r);
    tree dynamic_object_fields = TYPE_FIELDS (dynamic_object);
!   tree vtable_field = DECL_CHAIN (dynamic_object_fields);
!   rust_assert (TREE_CODE (TREE_TYPE (vtable_field)) == ARRAY_TYPE);
  
    //' this assumes ordering and current the structure is
    // __trait_object_ptr
!   // [list of function ptrs]
  
    auto probed_bounds_for_receiver = Resolver::TypeBoundsProbe::Probe (actual);
    tree address_of_compiled_ref = null_pointer_node;
    if (!actual->is_unit ())
      address_of_compiled_ref = address_expression (compiled_ref, locus);
  
!   std::vector<tree> vtable_ctor_elems;
!   std::vector<unsigned long> vtable_ctor_idx;
!   unsigned long i = 0;
!   for (auto &bound : ty->get_object_items ())
!     {
!       const Resolver::TraitItemReference *item = bound.first;
!       const TyTy::TypeBoundPredicate *predicate = bound.second;
  
!       auto address = compute_address_for_trait_item (item, predicate,
! 						     probed_bounds_for_receiver,
! 						     actual, actual, locus);
!       vtable_ctor_elems.push_back (address);
!       vtable_ctor_idx.push_back (i++);
      }
  
!   tree vtable_ctor
!     = Backend::array_constructor_expression (TREE_TYPE (vtable_field),
! 					     vtable_ctor_idx, vtable_ctor_elems,
! 					     locus);
  
!   std::vector<tree> dyn_ctor = {address_of_compiled_ref, vtable_ctor};
    return Backend::constructor_expression (dynamic_object, false, dyn_ctor, -1,
  					  locus);
  }
--- 194,274 ----
  
    tree dynamic_object = TyTyResolveCompile::compile (ctx, &r);
    tree dynamic_object_fields = TYPE_FIELDS (dynamic_object);
!   tree vtableptr_field = DECL_CHAIN (dynamic_object_fields);
!   rust_assert (TREE_CODE (TREE_TYPE (vtableptr_field)) == POINTER_TYPE);
!   rust_assert (TREE_CODE (TREE_TYPE (TREE_TYPE (vtableptr_field))));
  
    //' this assumes ordering and current the structure is
    // __trait_object_ptr
!   // __trait_vtable_ptr
  
    auto probed_bounds_for_receiver = Resolver::TypeBoundsProbe::Probe (actual);
    tree address_of_compiled_ref = null_pointer_node;
    if (!actual->is_unit ())
      address_of_compiled_ref = address_expression (compiled_ref, locus);
  
!   size_t dyn_obj_ty_hash = TYPE_HASH (dynamic_object);
!   size_t compiled_ref_ty_hash = TYPE_HASH (TREE_TYPE (compiled_ref));
!   auto pair = std::make_pair (compiled_ref_ty_hash, dyn_obj_ty_hash);
  
!   tree vtable_decl = NULL_TREE;
!   Bvariable *cached_vtable = nullptr;
!   if (ctx->lookup_vtable (pair, &cached_vtable))
!     {
!       vtable_decl = Backend::var_expression (cached_vtable, locus);
      }
+   else
+     {
+       tree compiled_ref_ty = TREE_TYPE (compiled_ref);
+       // drop_in_place is not implemented yet!
+       tree drop_in_place = null_pointer_node;
+       tree size = TYPE_SIZE_UNIT (compiled_ref_ty);
+       tree align
+ 	= build_int_cst (size_type_node, TYPE_ALIGN_UNIT (compiled_ref_ty));
  
!       std::vector<tree> vtable_ctor_elems;
!       vtable_ctor_elems.emplace_back (drop_in_place);
!       vtable_ctor_elems.emplace_back (size);
!       vtable_ctor_elems.emplace_back (align);
  
!       for (auto &bound : ty->get_object_items ())
! 	{
! 	  const Resolver::TraitItemReference *item = bound.first;
! 	  const TyTy::TypeBoundPredicate *predicate = bound.second;
! 
! 	  auto address
! 	    = compute_address_for_trait_item (item, predicate,
! 					      probed_bounds_for_receiver,
! 					      actual, actual, locus);
! 	  vtable_ctor_elems.push_back (address);
! 	}
!       tree vtable_ctor
! 	= Backend::constructor_expression (TREE_TYPE (
! 					     TREE_TYPE (vtableptr_field)),
! 					   false, vtable_ctor_elems, -1, locus);
! 
!       std::string vtable_name = "__R_vtable_"
! 				+ std::to_string (compiled_ref_ty_hash) + "_"
! 				+ std::to_string (dyn_obj_ty_hash);
! 
!       // https://github.com/rust-lang/rust/blob/e1884a8e3c3e813aada8254edfa120e85bf5ffca/compiler/rustc_mir/src/interpret/traits.rs#L17
!       Bvariable *vtable_bvar
! 	= Backend::global_variable (vtable_name, vtable_name,
! 				    TREE_TYPE (vtable_ctor), false, true, true,
! 				    locus);
!       Backend::global_variable_set_init (vtable_bvar, vtable_ctor);
!       ctx->push_var (vtable_bvar);
!       ctx->insert_vtable (pair, vtable_bvar);
! 
!       vtable_decl = Backend::var_expression (vtable_bvar, locus);
! 
!       DECL_ARTIFICIAL (vtable_decl) = 1;
!       TREE_READONLY (vtable_decl) = 1;
!       DECL_IGNORED_P (vtable_decl) = 1;
!     }
! 
!   tree address_of_vtable = build_fold_addr_expr_loc (locus, vtable_decl);
!   std::vector<tree> dyn_ctor = {address_of_compiled_ref, address_of_vtable};
    return Backend::constructor_expression (dynamic_object, false, dyn_ctor, -1,
  					  locus);
  }
*************** HIRCompileBase::compute_address_for_trai
*** 271,276 ****
--- 314,328 ----
  
        rust_assert (ok);
  
+       TyTy::BaseType *mut_receiver = const_cast<TyTy::BaseType *> (receiver);
+       bool receiver_matches = Resolver::types_compatable (
+ 	TyTy::TyWithLocation (self, self->get_locus ()),
+ 	TyTy::TyWithLocation (mut_receiver, mut_receiver->get_locus ()),
+ 	UNDEF_LOCATION, false);
+ 
+       if (!receiver_matches)
+ 	continue;
+ 
        // Look through the relevant bounds on our type, and find which one our
        // impl block satisfies
        TyTy::TypeBoundPredicate *self_bound = nullptr;
diff -Nrcpad gcc-17-20260705/gcc/rust/backend/rust-intrinsic-handlers.cc gcc-17-20260712/gcc/rust/backend/rust-intrinsic-handlers.cc
*** gcc-17-20260705/gcc/rust/backend/rust-intrinsic-handlers.cc	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/backend/rust-intrinsic-handlers.cc	Sun Jul 12 22:32:11 2026
*************** cttz_handler (Context *ctx, TyTy::FnType
*** 1029,1047 ****
  const HandlerBuilder
  op_with_overflow (tree_code op)
  {
!   return [op] (Context *ctx, TyTy::FnType *fntype) {
      return inner::op_with_overflow (ctx, fntype, op);
    };
  }
  
  tree
! rotate_left (Context *ctx, TyTy::FnType *fntype)
  {
    return handlers::rotate (ctx, fntype, LROTATE_EXPR);
  }
  
  tree
! rotate_right (Context *ctx, TyTy::FnType *fntype)
  {
    return handlers::rotate (ctx, fntype, RROTATE_EXPR);
  }
--- 1029,1047 ----
  const HandlerBuilder
  op_with_overflow (tree_code op)
  {
!   return [op] (Context *ctx, TyTy::FnType *fntype, location_t) {
      return inner::op_with_overflow (ctx, fntype, op);
    };
  }
  
  tree
! rotate_left (Context *ctx, TyTy::FnType *fntype, location_t)
  {
    return handlers::rotate (ctx, fntype, LROTATE_EXPR);
  }
  
  tree
! rotate_right (Context *ctx, TyTy::FnType *fntype, location_t)
  {
    return handlers::rotate (ctx, fntype, RROTATE_EXPR);
  }
*************** rotate_right (Context *ctx, TyTy::FnType
*** 1049,1055 ****
  const HandlerBuilder
  wrapping_op (tree_code op)
  {
!   return [op] (Context *ctx, TyTy::FnType *fntype) {
      return inner::wrapping_op (ctx, fntype, op);
    };
  }
--- 1049,1055 ----
  const HandlerBuilder
  wrapping_op (tree_code op)
  {
!   return [op] (Context *ctx, TyTy::FnType *fntype, location_t) {
      return inner::wrapping_op (ctx, fntype, op);
    };
  }
*************** wrapping_op (tree_code op)
*** 1057,1063 ****
  HandlerBuilder
  atomic_store (int ordering)
  {
!   return [ordering] (Context *ctx, TyTy::FnType *fntype) {
      return inner::atomic_store (ctx, fntype, ordering);
    };
  }
--- 1057,1063 ----
  HandlerBuilder
  atomic_store (int ordering)
  {
!   return [ordering] (Context *ctx, TyTy::FnType *fntype, location_t) {
      return inner::atomic_store (ctx, fntype, ordering);
    };
  }
*************** atomic_store (int ordering)
*** 1065,1071 ****
  HandlerBuilder
  atomic_load (int ordering)
  {
!   return [ordering] (Context *ctx, TyTy::FnType *fntype) {
      return inner::atomic_load (ctx, fntype, ordering);
    };
  }
--- 1065,1071 ----
  HandlerBuilder
  atomic_load (int ordering)
  {
!   return [ordering] (Context *ctx, TyTy::FnType *fntype, location_t) {
      return inner::atomic_load (ctx, fntype, ordering);
    };
  }
*************** atomic_load (int ordering)
*** 1073,1079 ****
  const HandlerBuilder
  unchecked_op (tree_code op)
  {
!   return [op] (Context *ctx, TyTy::FnType *fntype) {
      return inner::unchecked_op (ctx, fntype, op);
    };
  }
--- 1073,1079 ----
  const HandlerBuilder
  unchecked_op (tree_code op)
  {
!   return [op] (Context *ctx, TyTy::FnType *fntype, location_t) {
      return inner::unchecked_op (ctx, fntype, op);
    };
  }
*************** unchecked_op (tree_code op)
*** 1081,1087 ****
  const HandlerBuilder
  copy (bool overlaps)
  {
!   return [overlaps] (Context *ctx, TyTy::FnType *fntype) {
      return inner::copy (ctx, fntype, overlaps);
    };
  }
--- 1081,1087 ----
  const HandlerBuilder
  copy (bool overlaps)
  {
!   return [overlaps] (Context *ctx, TyTy::FnType *fntype, location_t) {
      return inner::copy (ctx, fntype, overlaps);
    };
  }
*************** copy (bool overlaps)
*** 1089,1095 ****
  const HandlerBuilder
  expect (bool likely)
  {
!   return [likely] (Context *ctx, TyTy::FnType *fntype) {
      return inner::expect (ctx, fntype, likely);
    };
  }
--- 1089,1095 ----
  const HandlerBuilder
  expect (bool likely)
  {
!   return [likely] (Context *ctx, TyTy::FnType *fntype, location_t) {
      return inner::expect (ctx, fntype, likely);
    };
  }
*************** expect (bool likely)
*** 1097,1109 ****
  const HandlerBuilder
  try_handler (bool is_new_api)
  {
!   return [is_new_api] (Context *ctx, TyTy::FnType *fntype) {
      return inner::try_handler (ctx, fntype, is_new_api);
    };
  }
  
  tree
! sorry (Context *ctx, TyTy::FnType *fntype)
  {
    rust_sorry_at (fntype->get_locus (), "intrinsic %qs is not yet implemented",
  		 fntype->get_identifier ().c_str ());
--- 1097,1109 ----
  const HandlerBuilder
  try_handler (bool is_new_api)
  {
!   return [is_new_api] (Context *ctx, TyTy::FnType *fntype, location_t) {
      return inner::try_handler (ctx, fntype, is_new_api);
    };
  }
  
  tree
! sorry (Context *ctx, TyTy::FnType *fntype, location_t)
  {
    rust_sorry_at (fntype->get_locus (), "intrinsic %qs is not yet implemented",
  		 fntype->get_identifier ().c_str ());
*************** sorry (Context *ctx, TyTy::FnType *fntyp
*** 1112,1118 ****
  }
  
  tree
! assume (Context *ctx, TyTy::FnType *fntype)
  {
    // TODO: make sure this is actually helping the compiler optimize
  
--- 1112,1118 ----
  }
  
  tree
! assume (Context *ctx, TyTy::FnType *fntype, location_t)
  {
    // TODO: make sure this is actually helping the compiler optimize
  
*************** assume (Context *ctx, TyTy::FnType *fnty
*** 1157,1173 ****
  }
  
  tree
! discriminant_value (Context *ctx, TyTy::FnType *fntype)
  {
    rust_assert (fntype->get_params ().size () == 1);
-   rust_assert (fntype->get_return_type ()->is<TyTy::PlaceholderType> ());
    rust_assert (fntype->has_substitutions ());
    rust_assert (fntype->get_num_type_params () == 1);
    auto &mapping = fntype->get_substs ().at (0);
    auto param_ty = mapping.get_param_ty ();
    rust_assert (param_ty->can_resolve ());
    auto resolved = param_ty->resolve ();
-   auto p = static_cast<TyTy::PlaceholderType *> (fntype->get_return_type ());
  
    TyTy::BaseType *return_type = nullptr;
    bool ok = ctx->get_tyctx ()->lookup_builtin ("isize", &return_type);
--- 1157,1171 ----
  }
  
  tree
! discriminant_value (Context *ctx, TyTy::FnType *fntype, location_t)
  {
    rust_assert (fntype->get_params ().size () == 1);
    rust_assert (fntype->has_substitutions ());
    rust_assert (fntype->get_num_type_params () == 1);
    auto &mapping = fntype->get_substs ().at (0);
    auto param_ty = mapping.get_param_ty ();
    rust_assert (param_ty->can_resolve ());
    auto resolved = param_ty->resolve ();
  
    TyTy::BaseType *return_type = nullptr;
    bool ok = ctx->get_tyctx ()->lookup_builtin ("isize", &return_type);
*************** discriminant_value (Context *ctx, TyTy::
*** 1178,1190 ****
    if (is_adt)
      {
        const auto &adt = *static_cast<TyTy::ADTType *> (resolved);
!       return_type = adt.get_repr_options ().repr;
!       rust_assert (return_type != nullptr);
        is_enum = adt.is_enum ();
      }
  
-   p->set_associated_type (return_type->get_ref ());
- 
    tree lookup = NULL_TREE;
    if (check_for_cached_intrinsic (ctx, fntype, &lookup))
      return lookup;
--- 1176,1187 ----
    if (is_adt)
      {
        const auto &adt = *static_cast<TyTy::ADTType *> (resolved);
!       auto *repr = adt.get_repr_options ().repr;
!       if (repr != nullptr)
! 	return_type = repr;
        is_enum = adt.is_enum ();
      }
  
    tree lookup = NULL_TREE;
    if (check_for_cached_intrinsic (ctx, fntype, &lookup))
      return lookup;
*************** discriminant_value (Context *ctx, TyTy::
*** 1221,1227 ****
  }
  
  tree
! variant_count (Context *ctx, TyTy::FnType *fntype)
  {
    rust_assert (fntype->get_num_type_params () == 1);
    auto &mapping = fntype->get_substs ().at (0);
--- 1218,1224 ----
  }
  
  tree
! variant_count (Context *ctx, TyTy::FnType *fntype, location_t)
  {
    rust_assert (fntype->get_num_type_params () == 1);
    auto &mapping = fntype->get_substs ().at (0);
*************** variant_count (Context *ctx, TyTy::FnTyp
*** 1272,1278 ****
  }
  
  tree
! move_val_init (Context *ctx, TyTy::FnType *fntype)
  {
    rust_assert (fntype->get_params ().size () == 2);
  
--- 1269,1275 ----
  }
  
  tree
! move_val_init (Context *ctx, TyTy::FnType *fntype, location_t)
  {
    rust_assert (fntype->get_params ().size () == 2);
  
*************** move_val_init (Context *ctx, TyTy::FnTyp
*** 1326,1332 ****
  }
  
  tree
! uninit (Context *ctx, TyTy::FnType *fntype)
  {
    // uninit has _zero_ parameters its parameter is the generic one
    rust_assert (fntype->get_params ().size () == 0);
--- 1323,1329 ----
  }
  
  tree
! uninit (Context *ctx, TyTy::FnType *fntype, location_t)
  {
    // uninit has _zero_ parameters its parameter is the generic one
    rust_assert (fntype->get_params ().size () == 0);
*************** uninit (Context *ctx, TyTy::FnType *fnty
*** 1392,1403 ****
  }
  
  tree
! prefetch_read_data (Context *ctx, TyTy::FnType *fntype)
  {
    return prefetch_data (ctx, fntype, Prefetch::Read);
  }
  tree
! prefetch_write_data (Context *ctx, TyTy::FnType *fntype)
  {
    return prefetch_data (ctx, fntype, Prefetch::Write);
  }
--- 1389,1400 ----
  }
  
  tree
! prefetch_read_data (Context *ctx, TyTy::FnType *fntype, location_t)
  {
    return prefetch_data (ctx, fntype, Prefetch::Read);
  }
  tree
! prefetch_write_data (Context *ctx, TyTy::FnType *fntype, location_t)
  {
    return prefetch_data (ctx, fntype, Prefetch::Write);
  }
*************** rotate (Context *ctx, TyTy::FnType *fnty
*** 1505,1511 ****
  }
  
  tree
! transmute (Context *ctx, TyTy::FnType *fntype)
  {
    // transmute intrinsic has one parameter
    rust_assert (fntype->get_params ().size () == 1);
--- 1502,1508 ----
  }
  
  tree
! transmute (Context *ctx, TyTy::FnType *fntype, location_t)
  {
    // transmute intrinsic has one parameter
    rust_assert (fntype->get_params ().size () == 1);
*************** transmute (Context *ctx, TyTy::FnType *f
*** 1579,1585 ****
  }
  
  tree
! sizeof_handler (Context *ctx, TyTy::FnType *fntype)
  {
    // size_of has _zero_ parameters its parameter is the generic one
    rust_assert (fntype->get_params ().size () == 0);
--- 1576,1582 ----
  }
  
  tree
! sizeof_handler (Context *ctx, TyTy::FnType *fntype, location_t)
  {
    // size_of has _zero_ parameters its parameter is the generic one
    rust_assert (fntype->get_params ().size () == 0);
*************** sizeof_handler (Context *ctx, TyTy::FnTy
*** 1613,1622 ****
  }
  
  /**
   * pub fn min_align_of<T>() -> usize;
   */
  tree
! min_align_of_handler (Context *ctx, TyTy::FnType *fntype)
  {
    // min_align_of has _zero_ parameters its parameter is the generic one
    rust_assert (fntype->get_params ().size () == 0);
--- 1610,1721 ----
  }
  
  /**
+  * pub fn size_of_val<T: ?Sized>(_: *const T) -> usize;
+  */
+ tree
+ size_of_val_handler (Context *ctx, TyTy::FnType *fntype, location_t)
+ {
+   rust_assert (fntype->get_params ().size () == 1);
+ 
+   tree lookup = NULL_TREE;
+   if (check_for_cached_intrinsic (ctx, fntype, &lookup))
+     return lookup;
+ 
+   auto fndecl = compile_intrinsic_function (ctx, fntype);
+ 
+   auto locus = fntype->get_locus ();
+ 
+   std::vector<Bvariable *> param_vars;
+   compile_fn_params (ctx, fntype, fndecl, &param_vars);
+ 
+   auto &__param = param_vars.at (0);
+   rust_assert (param_vars.size () == 1);
+   if (!Backend::function_set_parameters (fndecl, param_vars))
+     return error_mark_node;
+ 
+   rust_assert (fntype->get_num_substitutions () == 1);
+   auto &param_mapping = fntype->get_substs ().at (0);
+   const auto param_tyty = param_mapping.get_param_ty ();
+   auto resolved_tyty = param_tyty->resolve ();
+   tree template_parameter_type
+     = TyTyResolveCompile::compile (ctx, resolved_tyty);
+ 
+   enter_intrinsic_block (ctx, fndecl);
+ 
+   // BUILTIN size_of FN BODY BEGIN
+ 
+   tree size_expr = NULL_TREE;
+   if (RS_DST_FLAG_P (template_parameter_type))
+     {
+       tree param = Backend::var_expression (__param, UNDEF_LOCATION);
+       tree param_ty = TREE_TYPE (param);
+       tree data_field = TYPE_FIELDS (param_ty);
+       tree meta_field = DECL_CHAIN (data_field);
+       tree meta_field_expr
+ 	= build3_loc (locus, COMPONENT_REF, TREE_TYPE (meta_field), param,
+ 		      meta_field, NULL_TREE);
+ 
+       if (resolved_tyty->get_kind () == TyTy::TypeKind::SLICE
+ 	  || resolved_tyty->get_kind () == TyTy::TypeKind::STR)
+ 	{
+ 	  tree elem_type = NULL_TREE;
+ 	  if (resolved_tyty->get_kind () == TyTy::TypeKind::SLICE)
+ 	    {
+ 	      auto slice_tyty = static_cast<TyTy::SliceType *> (resolved_tyty);
+ 	      elem_type
+ 		= TyTyResolveCompile::compile (ctx,
+ 					       slice_tyty->get_element_type ());
+ 	    }
+ 	  else
+ 	    elem_type = char_type_node;
+ 
+ 	  tree elem_size = TYPE_SIZE_UNIT (elem_type);
+ 	  size_expr
+ 	    = build2_loc (locus, MULT_EXPR, size_type_node,
+ 			  fold_convert_loc (locus, size_type_node,
+ 					    meta_field_expr),
+ 			  fold_convert_loc (locus, size_type_node, elem_size));
+ 	}
+       else if (resolved_tyty->get_kind () == TyTy::TypeKind::DYNAMIC)
+ 	{
+ 	  tree vtable_ptr_ty = TREE_TYPE (meta_field_expr);
+ 	  tree vtable_ty = TREE_TYPE (vtable_ptr_ty);
+ 
+ 	  tree vtable_ref
+ 	    = build1_loc (locus, INDIRECT_REF, vtable_ty, meta_field_expr);
+ 
+ 	  tree vtable_field_0 = TYPE_FIELDS (vtable_ty);
+ 	  tree vtable_field_size = DECL_CHAIN (vtable_field_0);
+ 	  rust_assert (vtable_field_size != NULL_TREE);
+ 
+ 	  size_expr
+ 	    = build3_loc (locus, COMPONENT_REF, TREE_TYPE (vtable_field_size),
+ 			  vtable_ref, vtable_field_size, NULL_TREE);
+ 	}
+       else
+ 	{
+ 	  rust_unreachable ();
+ 	}
+     }
+   else
+     size_expr = TYPE_SIZE_UNIT (template_parameter_type);
+ 
+   auto return_statement
+     = Backend::return_statement (fndecl, size_expr, UNDEF_LOCATION);
+   ctx->add_statement (return_statement);
+ 
+   // BUILTIN size_of FN BODY END
+ 
+   finalize_intrinsic_block (ctx, fndecl);
+ 
+   return fndecl;
+ }
+ 
+ /**
   * pub fn min_align_of<T>() -> usize;
   */
  tree
! min_align_of_handler (Context *ctx, TyTy::FnType *fntype, location_t)
  {
    // min_align_of has _zero_ parameters its parameter is the generic one
    rust_assert (fntype->get_params ().size () == 0);
*************** min_align_of_handler (Context *ctx, TyTy
*** 1651,1658 ****
    return fndecl;
  }
  
  tree
! offset (Context *ctx, TyTy::FnType *fntype)
  {
    // offset intrinsic has two params dst pointer and offset isize
    rust_assert (fntype->get_params ().size () == 2);
--- 1750,1857 ----
    return fndecl;
  }
  
+ /**
+  * pub fn min_align_of_val<T: ?Sized>(_: *const T) -> usize;
+  */
  tree
! min_align_of_val_handler (Context *ctx, TyTy::FnType *fntype, location_t)
! {
!   rust_assert (fntype->get_params ().size () == 1);
! 
!   tree lookup = NULL_TREE;
!   if (check_for_cached_intrinsic (ctx, fntype, &lookup))
!     return lookup;
! 
!   auto fndecl = compile_intrinsic_function (ctx, fntype);
! 
!   auto locus = fntype->get_locus ();
! 
!   std::vector<Bvariable *> param_vars;
!   compile_fn_params (ctx, fntype, fndecl, &param_vars);
! 
!   auto &__param = param_vars.at (0);
!   rust_assert (param_vars.size () == 1);
!   if (!Backend::function_set_parameters (fndecl, param_vars))
!     return error_mark_node;
! 
!   rust_assert (fntype->get_num_substitutions () == 1);
!   auto &param_mapping = fntype->get_substs ().at (0);
!   const auto param_tyty = param_mapping.get_param_ty ();
!   auto resolved_tyty = param_tyty->resolve ();
!   tree template_parameter_type
!     = TyTyResolveCompile::compile (ctx, resolved_tyty);
! 
!   enter_intrinsic_block (ctx, fndecl);
! 
!   // BUILTIN size_of FN BODY BEGIN
! 
!   tree align_expr = NULL_TREE;
!   if (RS_DST_FLAG_P (template_parameter_type))
!     {
!       tree param = Backend::var_expression (__param, UNDEF_LOCATION);
!       tree param_ty = TREE_TYPE (param);
!       tree data_field = TYPE_FIELDS (param_ty);
!       tree meta_field = DECL_CHAIN (data_field);
!       tree meta_field_expr
! 	= build3_loc (locus, COMPONENT_REF, TREE_TYPE (meta_field), param,
! 		      meta_field, NULL_TREE);
! 
!       if (resolved_tyty->get_kind () == TyTy::TypeKind::SLICE
! 	  || resolved_tyty->get_kind () == TyTy::TypeKind::STR)
! 	{
! 	  tree elem_type = NULL_TREE;
! 	  if (resolved_tyty->get_kind () == TyTy::TypeKind::SLICE)
! 	    {
! 	      auto slice_tyty = static_cast<TyTy::SliceType *> (resolved_tyty);
! 	      elem_type
! 		= TyTyResolveCompile::compile (ctx,
! 					       slice_tyty->get_element_type ());
! 	    }
! 	  else
! 	    elem_type = char_type_node;
! 
! 	  align_expr
! 	    = build_int_cst (size_type_node, TYPE_ALIGN_UNIT (elem_type));
! 	}
!       else if (resolved_tyty->get_kind () == TyTy::TypeKind::DYNAMIC)
! 	{
! 	  tree vtable_ptr_ty = TREE_TYPE (meta_field_expr);
! 	  tree vtable_ty = TREE_TYPE (vtable_ptr_ty);
! 
! 	  tree vtable_ref
! 	    = build1_loc (locus, INDIRECT_REF, vtable_ty, meta_field_expr);
! 
! 	  tree vtable_field_0 = TYPE_FIELDS (vtable_ty);
! 	  tree vtable_field_1 = DECL_CHAIN (vtable_field_0);
! 	  tree vtable_field_align = DECL_CHAIN (vtable_field_1);
! 	  rust_assert (vtable_field_align != NULL_TREE);
! 
! 	  align_expr
! 	    = build3_loc (locus, COMPONENT_REF, TREE_TYPE (vtable_field_align),
! 			  vtable_ref, vtable_field_align, NULL_TREE);
! 	}
!       else
! 	{
! 	  rust_unreachable ();
! 	}
!     }
!   else
!     align_expr = build_int_cst (size_type_node,
! 				TYPE_ALIGN_UNIT (template_parameter_type));
! 
!   auto return_statement
!     = Backend::return_statement (fndecl, align_expr, UNDEF_LOCATION);
!   ctx->add_statement (return_statement);
! 
!   // BUILTIN size_of FN BODY END
! 
!   finalize_intrinsic_block (ctx, fndecl);
! 
!   return fndecl;
! }
! 
! tree
! offset (Context *ctx, TyTy::FnType *fntype, location_t expr_locus)
  {
    // offset intrinsic has two params dst pointer and offset isize
    rust_assert (fntype->get_params ().size () == 2);
*************** offset (Context *ctx, TyTy::FnType *fnty
*** 1673,1680 ****
    // BUILTIN offset FN BODY BEGIN
    tree dst = Backend::var_expression (dst_param, UNDEF_LOCATION);
    tree size = Backend::var_expression (size_param, UNDEF_LOCATION);
!   tree pointer_offset_expr
!     = pointer_offset_expression (dst, size, BUILTINS_LOCATION);
    auto return_statement
      = Backend::return_statement (fndecl, pointer_offset_expr, UNDEF_LOCATION);
    ctx->add_statement (return_statement);
--- 1872,1878 ----
    // BUILTIN offset FN BODY BEGIN
    tree dst = Backend::var_expression (dst_param, UNDEF_LOCATION);
    tree size = Backend::var_expression (size_param, UNDEF_LOCATION);
!   tree pointer_offset_expr = pointer_offset_expression (dst, size, expr_locus);
    auto return_statement
      = Backend::return_statement (fndecl, pointer_offset_expr, UNDEF_LOCATION);
    ctx->add_statement (return_statement);
*************** offset (Context *ctx, TyTy::FnType *fnty
*** 1689,1695 ****
   * pub const fn bswap<T: Copy>(x: T) -> T;
   */
  tree
! bswap_handler (Context *ctx, TyTy::FnType *fntype)
  {
    rust_assert (fntype->get_params ().size () == 1);
  
--- 1887,1893 ----
   * pub const fn bswap<T: Copy>(x: T) -> T;
   */
  tree
! bswap_handler (Context *ctx, TyTy::FnType *fntype, location_t)
  {
    rust_assert (fntype->get_params ().size () == 1);
  
*************** bswap_handler (Context *ctx, TyTy::FnTyp
*** 1846,1874 ****
  }
  
  tree
! ctlz_handler (Context *ctx, TyTy::FnType *fntype)
  {
    return inner::ctlz_handler (ctx, fntype, false);
  }
  
  tree
! ctlz_nonzero_handler (Context *ctx, TyTy::FnType *fntype)
  {
    return inner::ctlz_handler (ctx, fntype, true);
  }
  
  tree
! cttz_handler (Context *ctx, TyTy::FnType *fntype)
  {
    return inner::cttz_handler (ctx, fntype, false);
  }
  
  tree
! cttz_nonzero_handler (Context *ctx, TyTy::FnType *fntype)
  {
    return inner::cttz_handler (ctx, fntype, true);
  }
  
  } // namespace handlers
  } // namespace Compile
  } // namespace Rust
--- 2044,2181 ----
  }
  
  tree
! ctlz_handler (Context *ctx, TyTy::FnType *fntype, location_t)
  {
    return inner::ctlz_handler (ctx, fntype, false);
  }
  
  tree
! ctlz_nonzero_handler (Context *ctx, TyTy::FnType *fntype, location_t)
  {
    return inner::ctlz_handler (ctx, fntype, true);
  }
  
  tree
! cttz_handler (Context *ctx, TyTy::FnType *fntype, location_t)
  {
    return inner::cttz_handler (ctx, fntype, false);
  }
  
  tree
! cttz_nonzero_handler (Context *ctx, TyTy::FnType *fntype, location_t)
  {
    return inner::cttz_handler (ctx, fntype, true);
  }
  
+ /**
+  * pub unsafe fn write_bytes<T>(dst: *mut T, val: u8, count: usize);
+  */
+ tree
+ write_bytes_handler (Context *ctx, TyTy::FnType *fntype, location_t)
+ {
+   rust_assert (fntype->get_params ().size () == 3);
+ 
+   tree lookup = NULL_TREE;
+   if (check_for_cached_intrinsic (ctx, fntype, &lookup))
+     return lookup;
+ 
+   tree fndecl = compile_intrinsic_function (ctx, fntype);
+ 
+   auto locus = fntype->get_locus ();
+ 
+   std::vector<Bvariable *> param_vars;
+   compile_fn_params (ctx, fntype, fndecl, &param_vars);
+ 
+   auto &dst_param = param_vars.at (0);
+   auto &val_param = param_vars.at (1);
+   auto &count_param = param_vars.at (2);
+   rust_assert (param_vars.size () == 3);
+   if (!Backend::function_set_parameters (fndecl, param_vars))
+     return error_mark_node;
+ 
+   auto *monomorphized_type
+     = fntype->get_substs ().at (0).get_param_ty ()->resolve ();
+ 
+   tree template_parameter_type
+     = TyTyResolveCompile::compile (ctx, monomorphized_type);
+   tree dst_size_expr = TYPE_SIZE_UNIT (template_parameter_type);
+   rust_assert (dst_size_expr != NULL_TREE);
+ 
+   enter_intrinsic_block (ctx, fndecl);
+ 
+   // BUILTIN WRITE_BYTES FN BODY START
+ 
+   tree expr_dst = Backend::var_expression (dst_param, locus);
+   tree expr_val = Backend::var_expression (val_param, locus);
+   tree expr_count = Backend::var_expression (count_param, locus);
+ 
+   tree expr_count_final
+     = fold_build2_loc (locus, MULT_EXPR, size_type_node,
+ 		       fold_convert_loc (locus, size_type_node, expr_count),
+ 		       fold_convert_loc (locus, size_type_node, dst_size_expr));
+ 
+   tree write_bytes_raw = nullptr;
+   // void* memset( void* dest, int ch, size_t count );
+   bool ok = BuiltinsContext::get ().lookup_simple_builtin ("__builtin_memset",
+ 							   &write_bytes_raw);
+   rust_assert (ok);
+ 
+   tree write_bytes_fn = build_fold_addr_expr_loc (locus, write_bytes_raw);
+   tree write_bytes_call
+     = Backend::call_expression (write_bytes_fn,
+ 				{expr_dst, expr_val, expr_count_final},
+ 				NULL_TREE, locus);
+ 
+   ctx->add_statement (write_bytes_call);
+ 
+   // BUILTIN WRITE_BYTES FN BODY END
+ 
+   finalize_intrinsic_block (ctx, fndecl);
+ 
+   TREE_READONLY (fndecl) = 0;
+ 
+   return fndecl;
+ }
+ 
+ /**
+  * pub fn arith_offset<T>(dst: *const T, offset: isize) -> *const T;
+  */
+ tree
+ arith_offset_handler (Context *ctx, TyTy::FnType *fntype, location_t expr_locus)
+ {
+   rust_assert (fntype->get_params ().size () == 2);
+ 
+   auto fndecl = compile_intrinsic_function (ctx, fntype);
+ 
+   auto locus = fntype->get_locus ();
+ 
+   std::vector<Bvariable *> param_vars;
+   compile_fn_params (ctx, fntype, fndecl, &param_vars);
+ 
+   auto &dst_param = param_vars.at (0);
+   auto &size_param = param_vars.at (1);
+   rust_assert (param_vars.size () == 2);
+   if (!Backend::function_set_parameters (fndecl, param_vars))
+     return error_mark_node;
+ 
+   enter_intrinsic_block (ctx, fndecl);
+ 
+   // BUILTIN arith_offset FN BODY BEGIN
+ 
+   tree dst = Backend::var_expression (dst_param, locus);
+   tree size = Backend::var_expression (size_param, locus);
+   tree pointer_offset_expr = pointer_offset_expression (dst, size, expr_locus);
+   auto return_statement
+     = Backend::return_statement (fndecl, pointer_offset_expr, locus);
+   ctx->add_statement (return_statement);
+ 
+   // BUILTIN arith_offset FN BODY END
+ 
+   finalize_intrinsic_block (ctx, fndecl);
+ 
+   return fndecl;
+ }
+ 
  } // namespace handlers
  } // namespace Compile
  } // namespace Rust
diff -Nrcpad gcc-17-20260705/gcc/rust/backend/rust-intrinsic-handlers.h gcc-17-20260712/gcc/rust/backend/rust-intrinsic-handlers.h
*** gcc-17-20260705/gcc/rust/backend/rust-intrinsic-handlers.h	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/backend/rust-intrinsic-handlers.h	Sun Jul 12 22:32:11 2026
*************** inline tree unchecked_op (Context *ctx,
*** 47,81 ****
  
  } // namespace inner
  
! using HandlerBuilder = std::function<tree (Context *, TyTy::FnType *)>;
  
  const HandlerBuilder op_with_overflow (tree_code op);
  
! tree rotate_left (Context *ctx, TyTy::FnType *fntype);
! tree rotate_right (Context *ctx, TyTy::FnType *fntype);
  
  const HandlerBuilder wrapping_op (tree_code op);
! tree offset (Context *ctx, TyTy::FnType *fntype);
! tree sizeof_handler (Context *ctx, TyTy::FnType *fntype);
! tree min_align_of_handler (Context *ctx, TyTy::FnType *fntype);
! tree transmute (Context *ctx, TyTy::FnType *fntype);
  tree rotate (Context *ctx, TyTy::FnType *fntype, tree_code op);
! tree uninit (Context *ctx, TyTy::FnType *fntype);
! tree move_val_init (Context *ctx, TyTy::FnType *fntype);
! tree assume (Context *ctx, TyTy::FnType *fntype);
! tree discriminant_value (Context *ctx, TyTy::FnType *fntype);
! tree variant_count (Context *ctx, TyTy::FnType *fntype);
! tree bswap_handler (Context *ctx, TyTy::FnType *fntype);
! tree ctlz_handler (Context *ctx, TyTy::FnType *fntype);
! tree ctlz_nonzero_handler (Context *ctx, TyTy::FnType *fntype);
! tree cttz_handler (Context *ctx, TyTy::FnType *fntype);
! tree cttz_nonzero_handler (Context *ctx, TyTy::FnType *fntype);
  
  tree prefetch_data (Context *ctx, TyTy::FnType *fntype, Prefetch kind);
  
- const std::function<tree (Context *, TyTy::FnType *)>
- wrapping_op (tree_code op);
- 
  HandlerBuilder atomic_store (int ordering);
  
  HandlerBuilder atomic_load (int ordering);
--- 47,87 ----
  
  } // namespace inner
  
! using HandlerBuilder
!   = std::function<tree (Context *, TyTy::FnType *, location_t)>;
  
  const HandlerBuilder op_with_overflow (tree_code op);
  
! tree rotate_left (Context *ctx, TyTy::FnType *fntype, location_t expr_locus);
! tree rotate_right (Context *ctx, TyTy::FnType *fntype, location_t expr_locus);
  
  const HandlerBuilder wrapping_op (tree_code op);
! tree offset (Context *ctx, TyTy::FnType *fntype, location_t expr_locus);
! tree sizeof_handler (Context *ctx, TyTy::FnType *fntype, location_t expr_locus);
! tree size_of_val_handler (Context *ctx, TyTy::FnType *fntype,
! 			  location_t expr_locus);
! tree min_align_of_handler (Context *ctx, TyTy::FnType *fntype,
! 			   location_t expr_locus);
! tree min_align_of_val_handler (Context *ctx, TyTy::FnType *fntype,
! 			       location_t expr_locus);
! tree transmute (Context *ctx, TyTy::FnType *fntype, location_t expr_locus);
  tree rotate (Context *ctx, TyTy::FnType *fntype, tree_code op);
! tree uninit (Context *ctx, TyTy::FnType *fntype, location_t expr_locus);
! tree move_val_init (Context *ctx, TyTy::FnType *fntype, location_t expr_locus);
! tree assume (Context *ctx, TyTy::FnType *fntype, location_t expr_locus);
! tree discriminant_value (Context *ctx, TyTy::FnType *fntype,
! 			 location_t expr_locus);
! tree variant_count (Context *ctx, TyTy::FnType *fntype, location_t expr_locus);
! tree bswap_handler (Context *ctx, TyTy::FnType *fntype, location_t expr_locus);
! tree ctlz_handler (Context *ctx, TyTy::FnType *fntype, location_t expr_locus);
! tree ctlz_nonzero_handler (Context *ctx, TyTy::FnType *fntype,
! 			   location_t expr_locus);
! tree cttz_handler (Context *ctx, TyTy::FnType *fntype, location_t expr_locus);
! tree cttz_nonzero_handler (Context *ctx, TyTy::FnType *fntype,
! 			   location_t expr_locus);
  
  tree prefetch_data (Context *ctx, TyTy::FnType *fntype, Prefetch kind);
  
  HandlerBuilder atomic_store (int ordering);
  
  HandlerBuilder atomic_load (int ordering);
*************** const HandlerBuilder expect (bool likely
*** 88,96 ****
  
  const HandlerBuilder try_handler (bool is_new_api);
  
! tree prefetch_read_data (Context *ctx, TyTy::FnType *fntype);
! tree prefetch_write_data (Context *ctx, TyTy::FnType *fntype);
! tree sorry (Context *ctx, TyTy::FnType *fntype);
  
  } // namespace handlers
  
--- 94,109 ----
  
  const HandlerBuilder try_handler (bool is_new_api);
  
! tree prefetch_read_data (Context *ctx, TyTy::FnType *fntype,
! 			 location_t expr_locus);
! tree prefetch_write_data (Context *ctx, TyTy::FnType *fntype,
! 			  location_t expr_locus);
! tree sorry (Context *ctx, TyTy::FnType *fntype, location_t expr_locus);
! 
! tree write_bytes_handler (Context *ctx, TyTy::FnType *fntype,
! 			  location_t expr_locus);
! tree arith_offset_handler (Context *ctx, TyTy::FnType *fntype,
! 			   location_t expr_locus);
  
  } // namespace handlers
  
diff -Nrcpad gcc-17-20260705/gcc/rust/backend/rust-tree.cc gcc-17-20260712/gcc/rust/backend/rust-tree.cc
*** gcc-17-20260705/gcc/rust/backend/rust-tree.cc	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/backend/rust-tree.cc	Sun Jul 12 22:32:11 2026
*************** get_fndecl_from_callee (tree fn)
*** 688,697 ****
  tree
  pointer_offset_expression (tree base_tree, tree index_tree, location_t location)
  {
!   tree element_type_tree = TREE_TYPE (TREE_TYPE (base_tree));
    if (base_tree == error_mark_node || TREE_TYPE (base_tree) == error_mark_node
        || index_tree == error_mark_node || element_type_tree == error_mark_node)
!     return error_mark_node;
  
    tree element_size = TYPE_SIZE_UNIT (element_type_tree);
    index_tree = fold_convert_loc (location, sizetype, index_tree);
--- 688,702 ----
  tree
  pointer_offset_expression (tree base_tree, tree index_tree, location_t location)
  {
!   tree base_type_tree = TREE_TYPE (base_tree);
!   tree element_type_tree
!     = TREE_TYPE (base_type_tree) ? TREE_TYPE (base_type_tree) : error_mark_node;
    if (base_tree == error_mark_node || TREE_TYPE (base_tree) == error_mark_node
        || index_tree == error_mark_node || element_type_tree == error_mark_node)
!     {
!       error_at (location, "unknown element size type for %qT", base_type_tree);
!       return error_mark_node;
!     }
  
    tree element_size = TYPE_SIZE_UNIT (element_type_tree);
    index_tree = fold_convert_loc (location, sizetype, index_tree);
diff -Nrcpad gcc-17-20260705/gcc/rust/checks/errors/borrowck/rust-bir-builder-expr-stmt.cc gcc-17-20260712/gcc/rust/checks/errors/borrowck/rust-bir-builder-expr-stmt.cc
*** gcc-17-20260705/gcc/rust/checks/errors/borrowck/rust-bir-builder-expr-stmt.cc	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/checks/errors/borrowck/rust-bir-builder-expr-stmt.cc	Sun Jul 12 22:32:11 2026
*************** ExprStmtBuilder::visit (HIR::RangeToIncl
*** 507,512 ****
--- 507,521 ----
  }
  
  void
+ ExprStmtBuilder::visit (HIR::BoxExpr &expr)
+ {
+   PlaceId result = visit_expr (expr.get_expr ());
+ 
+   rust_assert (result != INVALID_PLACE);
+   push_tmp_assignment (result, expr.get_locus ());
+ }
+ 
+ void
  ExprStmtBuilder::visit (HIR::ReturnExpr &ret)
  {
    if (ret.has_return_expr ())
diff -Nrcpad gcc-17-20260705/gcc/rust/checks/errors/borrowck/rust-bir-builder-expr-stmt.h gcc-17-20260712/gcc/rust/checks/errors/borrowck/rust-bir-builder-expr-stmt.h
*** gcc-17-20260705/gcc/rust/checks/errors/borrowck/rust-bir-builder-expr-stmt.h	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/checks/errors/borrowck/rust-bir-builder-expr-stmt.h	Sun Jul 12 22:32:11 2026
*************** protected: // Expr
*** 95,100 ****
--- 95,101 ----
    void visit (HIR::RangeFullExpr &expr) override;
    void visit (HIR::RangeFromToInclExpr &expr) override;
    void visit (HIR::RangeToInclExpr &expr) override;
+   void visit (HIR::BoxExpr &expr) override;
    void visit (HIR::ReturnExpr &ret) override;
    void visit (HIR::UnsafeBlockExpr &expr) override;
    void visit (HIR::LoopExpr &expr) override;
diff -Nrcpad gcc-17-20260705/gcc/rust/checks/errors/borrowck/rust-bir-builder-lazyboolexpr.h gcc-17-20260712/gcc/rust/checks/errors/borrowck/rust-bir-builder-lazyboolexpr.h
*** gcc-17-20260705/gcc/rust/checks/errors/borrowck/rust-bir-builder-lazyboolexpr.h	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/checks/errors/borrowck/rust-bir-builder-lazyboolexpr.h	Sun Jul 12 22:32:11 2026
*************** protected: // Illegal at this position.
*** 240,245 ****
--- 240,246 ----
    void visit (HIR::RangeFromToInclExpr &expr) override { rust_unreachable (); }
    void visit (HIR::RangeToInclExpr &expr) override { rust_unreachable (); }
    void visit (HIR::ReturnExpr &expr) override { rust_unreachable (); }
+   void visit (HIR::BoxExpr &expr) override { rust_unreachable (); }
  };
  
  } // namespace BIR
diff -Nrcpad gcc-17-20260705/gcc/rust/checks/errors/borrowck/rust-bir-builder-struct.h gcc-17-20260712/gcc/rust/checks/errors/borrowck/rust-bir-builder-struct.h
*** gcc-17-20260705/gcc/rust/checks/errors/borrowck/rust-bir-builder-struct.h	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/checks/errors/borrowck/rust-bir-builder-struct.h	Sun Jul 12 22:32:11 2026
*************** protected:
*** 145,150 ****
--- 145,151 ----
    void visit (HIR::RangeFullExpr &expr) override { rust_unreachable (); }
    void visit (HIR::RangeFromToInclExpr &expr) override { rust_unreachable (); }
    void visit (HIR::RangeToInclExpr &expr) override { rust_unreachable (); }
+   void visit (HIR::BoxExpr &expr) override { rust_unreachable (); }
    void visit (HIR::ReturnExpr &expr) override { rust_unreachable (); }
    void visit (HIR::UnsafeBlockExpr &expr) override { rust_unreachable (); }
    void visit (HIR::LoopExpr &expr) override { rust_unreachable (); }
diff -Nrcpad gcc-17-20260705/gcc/rust/checks/errors/borrowck/rust-function-collector.h gcc-17-20260712/gcc/rust/checks/errors/borrowck/rust-function-collector.h
*** gcc-17-20260705/gcc/rust/checks/errors/borrowck/rust-function-collector.h	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/checks/errors/borrowck/rust-function-collector.h	Sun Jul 12 22:32:11 2026
*************** public:
*** 115,120 ****
--- 115,121 ----
    void visit (HIR::RangeFullExpr &expr) override {}
    void visit (HIR::RangeFromToInclExpr &expr) override {}
    void visit (HIR::RangeToInclExpr &expr) override {}
+   void visit (HIR::BoxExpr &expr) override {}
    void visit (HIR::ReturnExpr &expr) override {}
    void visit (HIR::UnsafeBlockExpr &expr) override {}
    void visit (HIR::LoopExpr &expr) override {}
diff -Nrcpad gcc-17-20260705/gcc/rust/checks/errors/privacy/rust-privacy-reporter.cc gcc-17-20260712/gcc/rust/checks/errors/privacy/rust-privacy-reporter.cc
*** gcc-17-20260705/gcc/rust/checks/errors/privacy/rust-privacy-reporter.cc	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/checks/errors/privacy/rust-privacy-reporter.cc	Sun Jul 12 22:32:11 2026
*************** PrivacyReporter::check_base_type_privacy
*** 244,251 ****
  	return recursive_check (p->resolve ());
        }
      case TyTy::PROJECTION:
!       return recursive_check (
! 	static_cast<const TyTy::ProjectionType *> (ty)->get ());
      case TyTy::CLOSURE:
        rust_sorry_at (locus, "privacy pass for closures is not handled yet");
        break;
--- 244,256 ----
  	return recursive_check (p->resolve ());
        }
      case TyTy::PROJECTION:
!       {
! 	auto p = static_cast<const TyTy::ProjectionType *> (ty);
! 	if (p->is_trait_position ())
! 	  return;
! 	return recursive_check (
! 	  static_cast<const TyTy::ProjectionType *> (ty)->get ());
!       }
      case TyTy::CLOSURE:
        rust_sorry_at (locus, "privacy pass for closures is not handled yet");
        break;
*************** PrivacyReporter::visit (HIR::RangeToIncl
*** 584,589 ****
--- 589,600 ----
  }
  
  void
+ PrivacyReporter::visit (HIR::BoxExpr &expr)
+ {
+   expr.get_expr ().accept_vis (*this);
+ }
+ 
+ void
  PrivacyReporter::visit (HIR::ReturnExpr &expr)
  {
    if (expr.has_expr ())
diff -Nrcpad gcc-17-20260705/gcc/rust/checks/errors/privacy/rust-privacy-reporter.h gcc-17-20260712/gcc/rust/checks/errors/privacy/rust-privacy-reporter.h
*** gcc-17-20260705/gcc/rust/checks/errors/privacy/rust-privacy-reporter.h	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/checks/errors/privacy/rust-privacy-reporter.h	Sun Jul 12 22:32:11 2026
*************** types
*** 127,132 ****
--- 127,133 ----
    virtual void visit (HIR::RangeFullExpr &expr);
    virtual void visit (HIR::RangeFromToInclExpr &expr);
    virtual void visit (HIR::RangeToInclExpr &expr);
+   virtual void visit (HIR::BoxExpr &expr);
    virtual void visit (HIR::ReturnExpr &expr);
    virtual void visit (HIR::UnsafeBlockExpr &expr);
    virtual void visit (HIR::LoopExpr &expr);
diff -Nrcpad gcc-17-20260705/gcc/rust/checks/errors/rust-const-checker.cc gcc-17-20260712/gcc/rust/checks/errors/rust-const-checker.cc
*** gcc-17-20260705/gcc/rust/checks/errors/rust-const-checker.cc	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/checks/errors/rust-const-checker.cc	Sun Jul 12 22:32:11 2026
*************** ConstChecker::visit (RangeToInclExpr &)
*** 473,478 ****
--- 473,484 ----
  }
  
  void
+ ConstChecker::visit (BoxExpr &expr)
+ {
+   expr.get_expr ().accept_vis (*this);
+ }
+ 
+ void
  ConstChecker::visit (ReturnExpr &expr)
  {
    if (expr.has_return_expr ())
diff -Nrcpad gcc-17-20260705/gcc/rust/checks/errors/rust-const-checker.h gcc-17-20260712/gcc/rust/checks/errors/rust-const-checker.h
*** gcc-17-20260705/gcc/rust/checks/errors/rust-const-checker.h	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/checks/errors/rust-const-checker.h	Sun Jul 12 22:32:11 2026
*************** private:
*** 123,128 ****
--- 123,129 ----
    virtual void visit (RangeFullExpr &expr) override;
    virtual void visit (RangeFromToInclExpr &expr) override;
    virtual void visit (RangeToInclExpr &expr) override;
+   virtual void visit (BoxExpr &expr) override;
    virtual void visit (ReturnExpr &expr) override;
    virtual void visit (UnsafeBlockExpr &expr) override;
    virtual void visit (LoopExpr &expr) override;
diff -Nrcpad gcc-17-20260705/gcc/rust/checks/errors/rust-hir-pattern-analysis.cc gcc-17-20260712/gcc/rust/checks/errors/rust-hir-pattern-analysis.cc
*** gcc-17-20260705/gcc/rust/checks/errors/rust-hir-pattern-analysis.cc	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/checks/errors/rust-hir-pattern-analysis.cc	Sun Jul 12 22:32:11 2026
*************** PatternChecker::visit (RangeToInclExpr &
*** 344,349 ****
--- 344,355 ----
  }
  
  void
+ PatternChecker::visit (BoxExpr &expr)
+ {
+   expr.get_expr ().accept_vis (*this);
+ }
+ 
+ void
  PatternChecker::visit (ReturnExpr &expr)
  {
    if (expr.has_return_expr ())
diff -Nrcpad gcc-17-20260705/gcc/rust/checks/errors/rust-hir-pattern-analysis.h gcc-17-20260712/gcc/rust/checks/errors/rust-hir-pattern-analysis.h
*** gcc-17-20260705/gcc/rust/checks/errors/rust-hir-pattern-analysis.h	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/checks/errors/rust-hir-pattern-analysis.h	Sun Jul 12 22:32:11 2026
*************** private:
*** 97,102 ****
--- 97,103 ----
    virtual void visit (RangeFullExpr &expr) override;
    virtual void visit (RangeFromToInclExpr &expr) override;
    virtual void visit (RangeToInclExpr &expr) override;
+   virtual void visit (BoxExpr &expr) override;
    virtual void visit (ReturnExpr &expr) override;
    virtual void visit (UnsafeBlockExpr &expr) override;
    virtual void visit (LoopExpr &expr) override;
diff -Nrcpad gcc-17-20260705/gcc/rust/checks/errors/rust-unsafe-checker.cc gcc-17-20260712/gcc/rust/checks/errors/rust-unsafe-checker.cc
*** gcc-17-20260705/gcc/rust/checks/errors/rust-unsafe-checker.cc	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/checks/errors/rust-unsafe-checker.cc	Sun Jul 12 22:32:11 2026
*************** UnsafeChecker::visit (RangeToInclExpr &e
*** 574,579 ****
--- 574,585 ----
  }
  
  void
+ UnsafeChecker::visit (BoxExpr &expr)
+ {
+   expr.get_expr ().accept_vis (*this);
+ }
+ 
+ void
  UnsafeChecker::visit (ReturnExpr &expr)
  {
    if (expr.has_return_expr ())
diff -Nrcpad gcc-17-20260705/gcc/rust/checks/errors/rust-unsafe-checker.h gcc-17-20260712/gcc/rust/checks/errors/rust-unsafe-checker.h
*** gcc-17-20260705/gcc/rust/checks/errors/rust-unsafe-checker.h	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/checks/errors/rust-unsafe-checker.h	Sun Jul 12 22:32:11 2026
*************** private:
*** 105,110 ****
--- 105,111 ----
    virtual void visit (RangeFullExpr &expr) override;
    virtual void visit (RangeFromToInclExpr &expr) override;
    virtual void visit (RangeToInclExpr &expr) override;
+   virtual void visit (BoxExpr &expr) override;
    virtual void visit (ReturnExpr &expr) override;
    virtual void visit (UnsafeBlockExpr &expr) override;
    virtual void visit (LoopExpr &expr) override;
diff -Nrcpad gcc-17-20260705/gcc/rust/checks/lints/rust-lint-marklive.cc gcc-17-20260712/gcc/rust/checks/lints/rust-lint-marklive.cc
*** gcc-17-20260705/gcc/rust/checks/lints/rust-lint-marklive.cc	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/checks/lints/rust-lint-marklive.cc	Sun Jul 12 22:32:11 2026
***************
*** 28,33 ****
--- 28,34 ----
  #include "rust-finalized-name-resolution-context.h"
  #include "rust-rib.h"
  #include "rust-system.h"
+ #include "rust-tyty.h"
  
  namespace Rust {
  namespace Analysis {
*************** MarkLive::visit (HIR::FieldAccessExpr &e
*** 199,204 ****
--- 200,211 ----
    if (receiver->get_kind () == TyTy::TypeKind::ADT)
      {
        adt = static_cast<TyTy::ADTType *> (receiver);
+ 
+       if (auto inner_ty = TyTy::try_get_box_inner_type (receiver))
+ 	{
+ 	  rust_assert ((*inner_ty)->get_kind () == TyTy::TypeKind::ADT);
+ 	  adt = static_cast<TyTy::ADTType *> (*inner_ty);
+ 	}
      }
    else if (receiver->get_kind () == TyTy::TypeKind::REF)
      {
diff -Nrcpad gcc-17-20260705/gcc/rust/checks/lints/rust-lint-marklive.h gcc-17-20260712/gcc/rust/checks/lints/rust-lint-marklive.h
*** gcc-17-20260705/gcc/rust/checks/lints/rust-lint-marklive.h	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/checks/lints/rust-lint-marklive.h	Sun Jul 12 22:32:11 2026
*************** public:
*** 139,144 ****
--- 139,149 ----
      function.get_definition ().accept_vis (*this);
    }
  
+   void visit (HIR::BoxExpr &expr) override
+   {
+     expr.get_expr ().accept_vis (*this);
+   }
+ 
    void visit (HIR::ReturnExpr &expr) override
    {
      if (expr.has_return_expr ())
diff -Nrcpad gcc-17-20260705/gcc/rust/checks/lints/unused/rust-unused-checker.cc gcc-17-20260712/gcc/rust/checks/lints/unused/rust-unused-checker.cc
*** gcc-17-20260705/gcc/rust/checks/lints/unused/rust-unused-checker.cc	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/checks/lints/unused/rust-unused-checker.cc	Sun Jul 12 22:32:11 2026
***************
*** 20,25 ****
--- 20,26 ----
  #include "rust-hir-expr.h"
  #include "rust-hir-generic-param.h"
  #include "rust-hir-item.h"
+ #include "rust-hir-pattern.h"
  
  #include "options.h"
  #include "rust-keyword-values.h"
*************** UnusedChecker::visit (HIR::ConstantItem
*** 58,63 ****
--- 59,70 ----
      rust_warning_at (item.get_locus (), OPT_Wunused_variable,
  		     "unused variable %qs",
  		     item.get_identifier ().as_string ().c_str ());
+ 
+   // The unused_visibilities lint: a visibility qualifier on a `const _` item
+   // has no effect.
+   if (var_name == "_" && item.get_visibility ().is_public ())
+     rust_warning_at (item.get_locus (), OPT_Wunused_variable,
+ 		     "visibility qualifier on a %<const _%> item is unused");
  }
  
  void
*************** UnusedChecker::visit (HIR::LifetimeParam
*** 182,187 ****
--- 189,204 ----
  }
  
  void
+ UnusedChecker::visit (HIR::ExternBlock &block)
+ {
+   if (!block.has_abi ())
+     rust_warning_at (block.get_locus (), OPT_Wunused_variable,
+ 		     "extern declarations without an explicit ABI are "
+ 		     "deprecated");
+   walk (block);
+ }
+ 
+ void
  UnusedChecker::visit_loop_label (HIR::LoopLabel &label)
  {
    auto lifetime = label.get_lifetime ();
*************** UnusedChecker::visit_loop_label (HIR::Lo
*** 192,196 ****
--- 209,337 ----
  		     "unused label %qs", lifetime.to_string ().c_str ());
  }
  
+ void
+ UnusedChecker::visit (HIR::StructPatternFieldIdentPat &field)
+ {
+   auto &pattern = field.get_pattern ();
+   if (pattern.get_pattern_type () == HIR::Pattern::PatternType::IDENTIFIER)
+     {
+       auto &ident = static_cast<HIR::IdentifierPattern &> (pattern);
+       if (!ident.has_subpattern ()
+ 	  && ident.get_identifier ().as_string ()
+ 	       == field.get_identifier ().as_string ())
+ 	rust_warning_at (field.get_locus (), OPT_Wunused_variable,
+ 			 "the %qs in this pattern is redundant",
+ 			 (field.get_identifier ().as_string () + ":").c_str ());
+     }
+   walk (field);
+ }
+ 
+ namespace {
+ 
+ bool
+ literal_int_value (const HIR::Literal &lit, bool minus, int64_t &out)
+ {
+   if (lit.get_lit_type () != HIR::Literal::LitType::INT)
+     return false;
+ 
+   std::string digits = lit.as_string ();
+   digits.erase (std::remove (digits.begin (), digits.end (), '_'),
+ 		digits.end ());
+ 
+   char *end = nullptr;
+   long long value = std::strtoll (digits.c_str (), &end, 10);
+   if (end == digits.c_str () || *end != '\0')
+     return false;
+ 
+   out = minus ? -value : value;
+   return true;
+ }
+ 
+ bool
+ range_bound_int (HIR::RangePatternBound &bound, int64_t &out)
+ {
+   if (bound.get_bound_type ()
+       != HIR::RangePatternBound::RangePatternBoundType::LITERAL)
+     return false;
+ 
+   auto &lit = static_cast<HIR::RangePatternBoundLiteral &> (bound);
+   return literal_int_value (lit.get_literal (), lit.get_has_minus (), out);
+ }
+ 
+ } // namespace
+ 
+ void
+ UnusedChecker::visit (HIR::MatchExpr &expr)
+ {
+   struct Range
+   {
+     int64_t lo;
+     int64_t hi;
+     bool inclusive;
+     location_t locus;
+   };
+   std::vector<Range> ranges;
+   std::vector<int64_t> starts;
+ 
+   for (auto &match_case : expr.get_match_cases ())
+     {
+       auto &pattern = match_case.get_arm ().get_pattern ();
+       if (!pattern)
+ 	continue;
+ 
+       if (pattern->get_pattern_type () == HIR::Pattern::PatternType::RANGE)
+ 	{
+ 	  auto &range = static_cast<HIR::RangePattern &> (*pattern);
+ 	  int64_t lo, hi;
+ 	  if (range_bound_int (range.get_lower_bound (), lo)
+ 	      && range_bound_int (range.get_upper_bound (), hi))
+ 	    {
+ 	      ranges.push_back (
+ 		{lo, hi, range.is_inclusive_range (), range.get_locus ()});
+ 	      starts.push_back (lo);
+ 	    }
+ 	}
+       else if (pattern->get_pattern_type ()
+ 	       == HIR::Pattern::PatternType::LITERAL)
+ 	{
+ 	  auto &lit = static_cast<HIR::LiteralPattern &> (*pattern);
+ 	  int64_t value;
+ 	  if (literal_int_value (lit.get_literal (), lit.get_has_minus (),
+ 				 value))
+ 	    starts.push_back (value);
+ 	}
+     }
+ 
+   // A value is covered if a range matches it or some arm starts exactly on it.
+   auto covered = [&] (int64_t value) {
+     if (std::find (starts.begin (), starts.end (), value) != starts.end ())
+       return true;
+     for (auto &range : ranges)
+       {
+ 	int64_t top = range.inclusive ? range.hi : range.hi - 1;
+ 	if (value >= range.lo && value <= top)
+ 	  return true;
+       }
+     return false;
+   };
+ 
+   // An exclusive range `lo..hi` leaves `hi` unmatched. If another arm picks up
+   // at `hi + 1`, that single value was almost certainly meant to be included.
+   for (auto &range : ranges)
+     {
+       if (range.inclusive)
+ 	continue;
+ 
+       int64_t missed = range.hi;
+       if (!covered (missed)
+ 	  && std::find (starts.begin (), starts.end (), missed + 1)
+ 	       != starts.end ())
+ 	rust_warning_at (range.locus, OPT_Wunused_variable,
+ 			 "multiple ranges are one apart");
+     }
+ 
+   walk (expr);
+ }
+ 
  } // namespace Analysis
  } // namespace Rust
diff -Nrcpad gcc-17-20260705/gcc/rust/checks/lints/unused/rust-unused-checker.h gcc-17-20260712/gcc/rust/checks/lints/unused/rust-unused-checker.h
*** gcc-17-20260705/gcc/rust/checks/lints/unused/rust-unused-checker.h	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/checks/lints/unused/rust-unused-checker.h	Sun Jul 12 22:32:11 2026
*************** private:
*** 48,53 ****
--- 48,56 ----
    virtual void visit (HIR::Function &fct) override;
    virtual void visit (HIR::Module &mod) override;
    virtual void visit (HIR::LifetimeParam &lft) override;
+   virtual void visit (HIR::StructPatternFieldIdentPat &field) override;
+   virtual void visit (HIR::MatchExpr &expr) override;
+   virtual void visit (HIR::ExternBlock &block) override;
    virtual void visit_loop_label (HIR::LoopLabel &label) override;
  };
  } // namespace Analysis
diff -Nrcpad gcc-17-20260705/gcc/rust/expand/rust-macro-builtins-log-debug.cc gcc-17-20260712/gcc/rust/expand/rust-macro-builtins-log-debug.cc
*** gcc-17-20260705/gcc/rust/expand/rust-macro-builtins-log-debug.cc	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/expand/rust-macro-builtins-log-debug.cc	Sun Jul 12 22:32:11 2026
*************** MacroBuiltin::assert_handler (location_t
*** 35,67 ****
    Parser<MacroInvocLexer> parser (lex);
  
    auto last_token_id = macro_end_token (tt, parser);
-   bool has_error = false;
  
!   auto expanded_expr = try_expand_many_expr (parser, last_token_id,
! 					     invoc.get_expander (), has_error);
!   if (expanded_expr.size () < 1)
      {
        rust_error_at (invoc_locus,
  		     "macro requires a boolean expression as an argument");
        return AST::Fragment::create_error ();
      }
-   auto expr_to_assert = std::move (expanded_expr[0]);
-   expanded_expr.erase (expanded_expr.begin ());
- 
-   if (expanded_expr.size () > 1)
-     {
-       rust_sorry_at (
- 	invoc_locus,
- 	"The second form of assert with a message is not supported yet");
- 
-       return AST::Fragment::create_error ();
-     }
  
!   auto pending_invocations = check_for_eager_invocations (expanded_expr);
!   if (!pending_invocations.empty ())
!     return make_eager_builtin_invocation (BuiltinMacro::Assert, invoc_locus,
! 					  invoc.get_delim_tok_tree (),
! 					  std::move (pending_invocations));
  
    AST::Builder b (invoc_locus);
  
--- 35,51 ----
    Parser<MacroInvocLexer> parser (lex);
  
    auto last_token_id = macro_end_token (tt, parser);
  
!   // TODO: less args?
!   auto expr_to_assert = parser.parse_expr ();
!   if (!expr_to_assert.has_value ())
      {
        rust_error_at (invoc_locus,
  		     "macro requires a boolean expression as an argument");
        return AST::Fragment::create_error ();
      }
  
!   // don't need to expand macros -- panic! will handle it
  
    AST::Builder b (invoc_locus);
  
*************** MacroBuiltin::assert_handler (location_t
*** 69,74 ****
--- 53,80 ----
    const_TokenPtr open = Token::make (TokenId::LEFT_PAREN, invoc_locus);
    panic_tree.push_back (std::make_unique<AST::Token> (std::move (open)));
  
+   if (parser.maybe_skip_token (COMMA))
+     {
+       bool needs_stringify = true;
+       while (parser.peek_current_token ()->get_id () != last_token_id
+ 	     && parser.peek_current_token ()->get_id () != END_OF_FILE)
+ 	{
+ 	  needs_stringify = false;
+ 	  auto token_tree = parser.parse_token_tree ();
+ 	  if (!token_tree.has_value ())
+ 	    {
+ 	      // error already emitted (?)
+ 	      return AST::Fragment::create_error ();
+ 	    }
+ 	  panic_tree.push_back (std::move (token_tree.value ()));
+ 	}
+       if (needs_stringify)
+ 	{
+ 	  // TODO: insert stringify invocation
+ 	  (void) 0;
+ 	}
+     }
+ 
    const_TokenPtr close = Token::make (TokenId::RIGHT_PAREN, invoc_locus);
    panic_tree.push_back (std::make_unique<AST::Token> (std::move (close)));
  
*************** MacroBuiltin::assert_handler (location_t
*** 83,89 ****
    stmts.push_back (std::move (stmt));
    auto block = b.block (std::move (stmts));
    auto negated_condition = std::unique_ptr<AST::NegationExpr> (
!     new AST::NegationExpr (std::move (expr_to_assert),
  			   AST::NegationExpr::ExprType::NOT, {}, invoc_locus));
  
    auto if_expr = std::make_unique<AST::IfExpr> (
--- 89,95 ----
    stmts.push_back (std::move (stmt));
    auto block = b.block (std::move (stmts));
    auto negated_condition = std::unique_ptr<AST::NegationExpr> (
!     new AST::NegationExpr (std::move (expr_to_assert.value ()),
  			   AST::NegationExpr::ExprType::NOT, {}, invoc_locus));
  
    auto if_expr = std::make_unique<AST::IfExpr> (
diff -Nrcpad gcc-17-20260705/gcc/rust/expand/rust-macro-expand.cc gcc-17-20260712/gcc/rust/expand/rust-macro-expand.cc
*** gcc-17-20260705/gcc/rust/expand/rust-macro-expand.cc	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/expand/rust-macro-expand.cc	Sun Jul 12 22:32:11 2026
*************** MacroExpander::expand_eager_invocations
*** 186,193 ****
  
    // we want to build a substitution map - basically, associating a `start` and
    // `end` index for each of the pending macro invocations
!   std::map<std::pair<size_t, size_t>, std::unique_ptr<AST::MacroInvocation> &>
!     substitution_map;
  
    for (size_t i = 0; i < stream.size (); i++)
      {
--- 186,194 ----
  
    // we want to build a substitution map - basically, associating a `start` and
    // `end` index for each of the pending macro invocations
!   std::map<std::pair<size_t, size_t>, AST::MacroInvocation *> substitution_map;
! 
!   auto &pending = invoc.get_pending_eager_invocations ();
  
    for (size_t i = 0; i < stream.size (); i++)
      {
*************** MacroExpander::expand_eager_invocations
*** 199,218 ****
        // offset and store them in the substitution map. Otherwise, we skip one
        // token and try parsing again
        if (invocation)
! 	substitution_map.insert (
! 	  {{i, parser.get_token_source ().get_offs ()},
! 	   invoc.get_pending_eager_invocations ()[current_pending++]});
        else
  	parser.skip_token (stream[i]->get_id ());
      }
  
    size_t current_idx = 0;
    for (auto kv : substitution_map)
      {
!       auto &to_expand = kv.second;
        expand_invoc (*to_expand, AST::InvocKind::Expr);
  
        auto fragment = take_expanded_fragment ();
        auto &new_tokens = fragment.get_tokens ();
  
        auto start = kv.first.first;
--- 200,228 ----
        // offset and store them in the substitution map. Otherwise, we skip one
        // token and try parsing again
        if (invocation)
! 	substitution_map.insert ({{i, parser.get_token_source ().get_offs ()},
! 				  pending[current_pending++].get ()});
        else
  	parser.skip_token (stream[i]->get_id ());
      }
  
+   auto pending_it = pending.begin ();
    size_t current_idx = 0;
    for (auto kv : substitution_map)
      {
!       AST::MacroInvocation *to_expand = kv.second;
        expand_invoc (*to_expand, AST::InvocKind::Expr);
  
        auto fragment = take_expanded_fragment ();
+ 
+       if (fragment.is_error ())
+ 	{
+ 	  // skip expansion of this macro
+ 	  // leave current_idx as-is, and continue
+ 	  pending_it++;
+ 	  continue;
+ 	}
+ 
        auto &new_tokens = fragment.get_tokens ();
  
        auto start = kv.first.first;
*************** MacroExpander::expand_eager_invocations
*** 233,238 ****
--- 243,249 ----
  	new_stream.emplace_back (tok->clone_token ());
  
        current_idx = end;
+       pending_it = pending.erase (pending_it);
      }
  
    // Once all of that is done, we copy the last remaining tokens from the
*************** MacroExpander::expand_eager_invocations
*** 243,249 ****
    auto new_dtt
      = AST::DelimTokenTree (dtt.get_delim_type (), std::move (new_stream));
  
-   invoc.get_pending_eager_invocations ().clear ();
    invoc.get_invoc_data ().set_delim_tok_tree (new_dtt);
  }
  
--- 254,259 ----
*************** MacroExpander::expand_invoc (AST::MacroI
*** 263,268 ****
--- 273,285 ----
        push_context (ContextType::EXPR);
        expand_eager_invocations (invoc);
        pop_context ();
+ 
+       // if we have pending eager invocations still, don't expand
+       if (!invoc.get_pending_eager_invocations ().empty ())
+ 	{
+ 	  set_expanded_fragment (AST::Fragment::create_error ());
+ 	  return;
+ 	}
      }
  
    AST::MacroInvocData &invoc_data = invoc.get_invoc_data ();
*************** MacroExpander::expand_invoc (AST::MacroI
*** 314,320 ****
    // If there's no rule associated with the invocation, we can simply return
    // early. The early name resolver will have already emitted an error.
    if (!rules_def)
!     return;
  
    auto rdef = rules_def.value ();
  
--- 331,341 ----
    // If there's no rule associated with the invocation, we can simply return
    // early. The early name resolver will have already emitted an error.
    if (!rules_def)
!     {
!       // error fragment
!       set_expanded_fragment (std::move (fragment));
!       return;
!     }
  
    auto rdef = rules_def.value ();
  
*************** MacroExpander::expand_invoc (AST::MacroI
*** 331,344 ****
    else
      fragment
        = expand_decl_macro (invoc.get_locus (), invoc_data, *rdef, semicolon);
!   // fix: if the expansion is failing, we must replace the marco with an empty
!   // error or node
!   // makes sure that it doesn't panic on Rouge macro (it -> Lowering Phase)
!   // added the parsing errors in gcc/testsuite/rust/compile/issue-4213.rs
!   if (fragment.is_error ())
!     {
!       fragment = AST::Fragment::create_empty ();
!     }
    set_expanded_fragment (std::move (fragment));
  }
  
--- 352,358 ----
    else
      fragment
        = expand_decl_macro (invoc.get_locus (), invoc_data, *rdef, semicolon);
! 
    set_expanded_fragment (std::move (fragment));
  }
  
diff -Nrcpad gcc-17-20260705/gcc/rust/hir/rust-ast-lower-base.cc gcc-17-20260712/gcc/rust/hir/rust-ast-lower-base.cc
*** gcc-17-20260705/gcc/rust/hir/rust-ast-lower-base.cc	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/hir/rust-ast-lower-base.cc	Sun Jul 12 22:32:11 2026
*************** ASTLoweringBase::lower_literal (const AS
*** 1018,1023 ****
--- 1018,1026 ----
      case AST::Literal::LitType::RAW_STRING:
        type = HIR::Literal::LitType::STRING;
        break;
+     case AST::Literal::LitType::C_STRING:
+       type = HIR::Literal::LitType::C_STRING;
+       break;
      case AST::Literal::LitType::INT:
        type = HIR::Literal::LitType::INT;
        break;
*************** ASTLoweringBase::lower_extern_block (AST
*** 1068,1075 ****
      }
  
    HIR::ExternBlock *hir_extern_block
!     = new HIR::ExternBlock (mapping, abi, std::move (extern_items),
! 			    std::move (vis), extern_block.get_inner_attrs (),
  			    extern_block.get_outer_attrs (),
  			    extern_block.get_locus ());
  
--- 1071,1079 ----
      }
  
    HIR::ExternBlock *hir_extern_block
!     = new HIR::ExternBlock (mapping, abi, extern_block.has_abi (),
! 			    std::move (extern_items), std::move (vis),
! 			    extern_block.get_inner_attrs (),
  			    extern_block.get_outer_attrs (),
  			    extern_block.get_locus ());
  
diff -Nrcpad gcc-17-20260705/gcc/rust/hir/rust-ast-lower-expr.cc gcc-17-20260712/gcc/rust/hir/rust-ast-lower-expr.cc
*** gcc-17-20260705/gcc/rust/hir/rust-ast-lower-expr.cc	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/hir/rust-ast-lower-expr.cc	Sun Jul 12 22:32:11 2026
*************** ASTLoweringExpr::visit (AST::QualifiedPa
*** 192,199 ****
  void
  ASTLoweringExpr::visit (AST::BoxExpr &expr)
  {
!   rust_sorry_at (expr.get_locus (),
! 		 "box expression syntax is not supported yet");
  }
  
  void
--- 192,206 ----
  void
  ASTLoweringExpr::visit (AST::BoxExpr &expr)
  {
!   HIR::Expr *box_expr = ASTLoweringExpr::translate (expr.get_boxed_expr ());
! 
!   auto crate_num = mappings.get_current_crate ();
!   Analysis::NodeMapping mapping (crate_num, expr.get_node_id (),
! 				 mappings.get_next_hir_id (crate_num),
! 				 UNKNOWN_LOCAL_DEFID);
! 
!   translated = new HIR::BoxExpr (mapping, expr.get_locus (),
! 				 std::unique_ptr<HIR::Expr> (box_expr));
  }
  
  void
diff -Nrcpad gcc-17-20260705/gcc/rust/hir/rust-hir-dump.cc gcc-17-20260712/gcc/rust/hir/rust-hir-dump.cc
*** gcc-17-20260705/gcc/rust/hir/rust-hir-dump.cc	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/hir/rust-hir-dump.cc	Sun Jul 12 22:32:11 2026
*************** Dump::visit (RangeToInclExpr &e)
*** 1413,1418 ****
--- 1413,1429 ----
  }
  
  void
+ Dump::visit (BoxExpr &e)
+ {
+   begin ("BoxExpr");
+   do_mappings (e.get_mappings ());
+ 
+   visit_field ("box_expr", e.get_expr ());
+ 
+   end ("BoxExpr");
+ }
+ 
+ void
  Dump::visit (ReturnExpr &e)
  {
    begin ("ReturnExpr");
diff -Nrcpad gcc-17-20260705/gcc/rust/hir/rust-hir-dump.h gcc-17-20260712/gcc/rust/hir/rust-hir-dump.h
*** gcc-17-20260705/gcc/rust/hir/rust-hir-dump.h	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/hir/rust-hir-dump.h	Sun Jul 12 22:32:11 2026
*************** private:
*** 156,161 ****
--- 156,162 ----
    virtual void visit (RangeFullExpr &) override;
    virtual void visit (RangeFromToInclExpr &) override;
    virtual void visit (RangeToInclExpr &) override;
+   virtual void visit (BoxExpr &) override;
    virtual void visit (ReturnExpr &) override;
    virtual void visit (UnsafeBlockExpr &) override;
    virtual void visit (LoopExpr &) override;
diff -Nrcpad gcc-17-20260705/gcc/rust/hir/tree/rust-hir-expr-abstract.h gcc-17-20260712/gcc/rust/hir/tree/rust-hir-expr-abstract.h
*** gcc-17-20260705/gcc/rust/hir/tree/rust-hir-expr-abstract.h	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/hir/tree/rust-hir-expr-abstract.h	Sun Jul 12 22:32:11 2026
*************** public:
*** 75,80 ****
--- 75,81 ----
      InlineAsm,
      LlvmInlineAsm,
      OffsetOf,
+     Box,
    };
  
    BaseKind get_hir_kind () override final { return Node::BaseKind::EXPR; }
diff -Nrcpad gcc-17-20260705/gcc/rust/hir/tree/rust-hir-expr.cc gcc-17-20260712/gcc/rust/hir/tree/rust-hir-expr.cc
*** gcc-17-20260705/gcc/rust/hir/tree/rust-hir-expr.cc	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/hir/tree/rust-hir-expr.cc	Sun Jul 12 22:32:11 2026
*************** RangeToInclExpr::operator= (RangeToInclE
*** 972,977 ****
--- 972,1004 ----
    return *this;
  }
  
+ BoxExpr::BoxExpr (Analysis::NodeMapping mappings, location_t locus,
+ 		  std::unique_ptr<Expr> expr, AST::AttrVec outer_attribs)
+   : ExprWithoutBlock (std::move (mappings), std::move (outer_attribs)),
+     expr (std::move (expr)), locus (locus)
+ {
+   rust_assert (this->expr != nullptr);
+ }
+ 
+ BoxExpr::BoxExpr (BoxExpr const &other)
+   : ExprWithoutBlock (other), locus (other.locus)
+ {
+   rust_assert (other.expr != nullptr);
+   expr = other.expr->clone_expr ();
+ }
+ 
+ BoxExpr &
+ BoxExpr::operator= (BoxExpr const &other)
+ {
+   ExprWithoutBlock::operator= (other);
+ 
+   rust_assert (other.expr != nullptr);
+   expr = other.expr->clone_expr ();
+   locus = other.locus;
+ 
+   return *this;
+ }
+ 
  ReturnExpr::ReturnExpr (Analysis::NodeMapping mappings, location_t locus,
  			std::unique_ptr<Expr> returned_expr,
  			AST::AttrVec outer_attribs)
diff -Nrcpad gcc-17-20260705/gcc/rust/hir/tree/rust-hir-expr.h gcc-17-20260712/gcc/rust/hir/tree/rust-hir-expr.h
*** gcc-17-20260705/gcc/rust/hir/tree/rust-hir-expr.h	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/hir/tree/rust-hir-expr.h	Sun Jul 12 22:32:11 2026
*************** protected:
*** 2267,2272 ****
--- 2267,2318 ----
    }
  };
  
+ // Box expression HIR node representation
+ class BoxExpr : public ExprWithoutBlock
+ {
+ public:
+   std::unique_ptr<Expr> expr;
+ 
+   location_t locus;
+ 
+   std::string to_string () const override;
+ 
+   // Constructor for BoxExpr.
+   BoxExpr (Analysis::NodeMapping mappings, location_t locus,
+ 	   std::unique_ptr<Expr> expr,
+ 	   AST::AttrVec outer_attribs = AST::AttrVec ());
+   // Copy constructor with clone
+   BoxExpr (BoxExpr const &other);
+ 
+   // Overloaded assignment operator to clone expr pointer
+   BoxExpr &operator= (BoxExpr const &other);
+ 
+   // move constructors
+   BoxExpr (BoxExpr &&other) = default;
+   BoxExpr &operator= (BoxExpr &&other) = default;
+ 
+   location_t get_locus () const override final { return locus; }
+ 
+   void accept_vis (HIRFullVisitor &vis) override;
+   void accept_vis (HIRExpressionVisitor &vis) override;
+ 
+   Expr &get_expr () { return *expr; }
+ 
+   ExprType get_expression_type () const override final { return ExprType::Box; }
+ 
+ protected:
+   /* Use covariance to implement clone function as returning this object rather
+    * than base */
+   BoxExpr *clone_expr_impl () const override { return new BoxExpr (*this); }
+ 
+   /* Use covariance to implement clone function as returning this object rather
+    * than base */
+   BoxExpr *clone_expr_without_block_impl () const override
+   {
+     return new BoxExpr (*this);
+   }
+ };
+ 
  // Return expression HIR node representation
  class ReturnExpr : public ExprWithoutBlock
  {
diff -Nrcpad gcc-17-20260705/gcc/rust/hir/tree/rust-hir-full-decls.h gcc-17-20260712/gcc/rust/hir/tree/rust-hir-full-decls.h
*** gcc-17-20260705/gcc/rust/hir/tree/rust-hir-full-decls.h	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/hir/tree/rust-hir-full-decls.h	Sun Jul 12 22:32:11 2026
*************** class RangeToExpr;
*** 106,111 ****
--- 106,112 ----
  class RangeFullExpr;
  class RangeFromToInclExpr;
  class RangeToInclExpr;
+ class BoxExpr;
  class ReturnExpr;
  class UnsafeBlockExpr;
  class LoopLabel;
diff -Nrcpad gcc-17-20260705/gcc/rust/hir/tree/rust-hir-item.cc gcc-17-20260712/gcc/rust/hir/tree/rust-hir-item.cc
*** gcc-17-20260705/gcc/rust/hir/tree/rust-hir-item.cc	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/hir/tree/rust-hir-item.cc	Sun Jul 12 22:32:11 2026
*************** ExternalTypeItem::ExternalTypeItem (Exte
*** 1001,1017 ****
  {}
  
  ExternBlock::ExternBlock (
!   Analysis::NodeMapping mappings, ABI abi,
    std::vector<std::unique_ptr<ExternalItem>> extern_items, Visibility vis,
    AST::AttrVec inner_attrs, AST::AttrVec outer_attrs, location_t locus)
    : VisItem (std::move (mappings), std::move (vis), std::move (outer_attrs)),
      WithInnerAttrs (std::move (inner_attrs)), abi (abi),
!     extern_items (std::move (extern_items)), locus (locus)
  {}
  
  ExternBlock::ExternBlock (ExternBlock const &other)
    : VisItem (other), WithInnerAttrs (other.inner_attrs), abi (other.abi),
!     locus (other.locus)
  {
    extern_items.reserve (other.extern_items.size ());
    for (const auto &e : other.extern_items)
--- 1001,1018 ----
  {}
  
  ExternBlock::ExternBlock (
!   Analysis::NodeMapping mappings, ABI abi, bool explicit_abi,
    std::vector<std::unique_ptr<ExternalItem>> extern_items, Visibility vis,
    AST::AttrVec inner_attrs, AST::AttrVec outer_attrs, location_t locus)
    : VisItem (std::move (mappings), std::move (vis), std::move (outer_attrs)),
      WithInnerAttrs (std::move (inner_attrs)), abi (abi),
!     explicit_abi (explicit_abi), extern_items (std::move (extern_items)),
!     locus (locus)
  {}
  
  ExternBlock::ExternBlock (ExternBlock const &other)
    : VisItem (other), WithInnerAttrs (other.inner_attrs), abi (other.abi),
!     explicit_abi (other.explicit_abi), locus (other.locus)
  {
    extern_items.reserve (other.extern_items.size ());
    for (const auto &e : other.extern_items)
*************** ExternBlock::operator= (ExternBlock cons
*** 1023,1028 ****
--- 1024,1030 ----
  {
    VisItem::operator= (other);
    abi = other.abi;
+   explicit_abi = other.explicit_abi;
    inner_attrs = other.inner_attrs;
    locus = other.locus;
  
diff -Nrcpad gcc-17-20260705/gcc/rust/hir/tree/rust-hir-item.h gcc-17-20260712/gcc/rust/hir/tree/rust-hir-item.h
*** gcc-17-20260705/gcc/rust/hir/tree/rust-hir-item.h	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/hir/tree/rust-hir-item.h	Sun Jul 12 22:32:11 2026
*************** protected:
*** 2638,2643 ****
--- 2638,2644 ----
  class ExternBlock : public VisItem, public WithInnerAttrs
  {
    ABI abi;
+   bool explicit_abi;
    std::vector<std::unique_ptr<ExternalItem>> extern_items;
    location_t locus;
  
*************** public:
*** 2647,2655 ****
    // Returns whether extern block has extern items.
    bool has_extern_items () const { return !extern_items.empty (); }
  
    ABI get_abi () const { return abi; }
  
!   ExternBlock (Analysis::NodeMapping mappings, ABI abi,
  	       std::vector<std::unique_ptr<ExternalItem>> extern_items,
  	       Visibility vis, AST::AttrVec inner_attrs,
  	       AST::AttrVec outer_attrs, location_t locus);
--- 2648,2659 ----
    // Returns whether extern block has extern items.
    bool has_extern_items () const { return !extern_items.empty (); }
  
+   // Returns whether the extern block was given an explicit ABI string.
+   bool has_abi () const { return explicit_abi; }
+ 
    ABI get_abi () const { return abi; }
  
!   ExternBlock (Analysis::NodeMapping mappings, ABI abi, bool explicit_abi,
  	       std::vector<std::unique_ptr<ExternalItem>> extern_items,
  	       Visibility vis, AST::AttrVec inner_attrs,
  	       AST::AttrVec outer_attrs, location_t locus);
diff -Nrcpad gcc-17-20260705/gcc/rust/hir/tree/rust-hir-literal.h gcc-17-20260712/gcc/rust/hir/tree/rust-hir-literal.h
*** gcc-17-20260705/gcc/rust/hir/tree/rust-hir-literal.h	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/hir/tree/rust-hir-literal.h	Sun Jul 12 22:32:11 2026
*************** public:
*** 33,38 ****
--- 33,39 ----
      STRING,
      BYTE,
      BYTE_STRING,
+     C_STRING,
      INT,
      FLOAT,
      BOOL
diff -Nrcpad gcc-17-20260705/gcc/rust/hir/tree/rust-hir-visitor.cc gcc-17-20260712/gcc/rust/hir/tree/rust-hir-visitor.cc
*** gcc-17-20260705/gcc/rust/hir/tree/rust-hir-visitor.cc	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/hir/tree/rust-hir-visitor.cc	Sun Jul 12 22:32:11 2026
*************** DefaultHIRVisitor::walk (RangeToInclExpr
*** 436,441 ****
--- 436,448 ----
  }
  
  void
+ DefaultHIRVisitor::walk (BoxExpr &expr)
+ {
+   visit_outer_attrs (expr);
+   expr.get_expr ().accept_vis (*this);
+ }
+ 
+ void
  DefaultHIRVisitor::walk (ReturnExpr &expr)
  {
    visit_outer_attrs (expr);
diff -Nrcpad gcc-17-20260705/gcc/rust/hir/tree/rust-hir-visitor.h gcc-17-20260712/gcc/rust/hir/tree/rust-hir-visitor.h
*** gcc-17-20260705/gcc/rust/hir/tree/rust-hir-visitor.h	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/hir/tree/rust-hir-visitor.h	Sun Jul 12 22:32:11 2026
*************** public:
*** 76,81 ****
--- 76,82 ----
    virtual void visit (RangeFullExpr &expr) = 0;
    virtual void visit (RangeFromToInclExpr &expr) = 0;
    virtual void visit (RangeToInclExpr &expr) = 0;
+   virtual void visit (BoxExpr &expr) = 0;
    virtual void visit (ReturnExpr &expr) = 0;
    virtual void visit (UnsafeBlockExpr &expr) = 0;
    virtual void visit (LoopExpr &expr) = 0;
*************** public:
*** 245,250 ****
--- 246,252 ----
    virtual void visit (RangeFullExpr &node) override { walk (node); }
    virtual void visit (RangeFromToInclExpr &node) override { walk (node); }
    virtual void visit (RangeToInclExpr &node) override { walk (node); }
+   virtual void visit (BoxExpr &node) override { walk (node); }
    virtual void visit (ReturnExpr &node) override { walk (node); }
    virtual void visit (UnsafeBlockExpr &node) override { walk (node); }
    virtual void visit (LoopExpr &node) override { walk (node); }
*************** protected:
*** 386,391 ****
--- 388,394 ----
    virtual void walk (RangeFullExpr &) final;
    virtual void walk (RangeFromToInclExpr &) final;
    virtual void walk (RangeToInclExpr &) final;
+   virtual void walk (BoxExpr &) final;
    virtual void walk (ReturnExpr &) final;
    virtual void walk (UnsafeBlockExpr &) final;
    virtual void walk (LoopExpr &) final;
*************** public:
*** 527,532 ****
--- 530,536 ----
    virtual void visit (RangeFullExpr &) override {}
    virtual void visit (RangeFromToInclExpr &) override {}
    virtual void visit (RangeToInclExpr &) override {}
+   virtual void visit (BoxExpr &) override {}
    virtual void visit (ReturnExpr &) override {}
    virtual void visit (UnsafeBlockExpr &) override {}
    virtual void visit (LoopExpr &) override {}
*************** public:
*** 759,764 ****
--- 763,769 ----
    virtual void visit (RangeFullExpr &expr) = 0;
    virtual void visit (RangeFromToInclExpr &expr) = 0;
    virtual void visit (RangeToInclExpr &expr) = 0;
+   virtual void visit (BoxExpr &expr) = 0;
    virtual void visit (ReturnExpr &expr) = 0;
    virtual void visit (UnsafeBlockExpr &expr) = 0;
    virtual void visit (LoopExpr &expr) = 0;
diff -Nrcpad gcc-17-20260705/gcc/rust/hir/tree/rust-hir.cc gcc-17-20260712/gcc/rust/hir/tree/rust-hir.cc
*** gcc-17-20260705/gcc/rust/hir/tree/rust-hir.cc	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/hir/tree/rust-hir.cc	Sun Jul 12 22:32:11 2026
*************** BorrowExpr::to_string () const
*** 1309,1314 ****
--- 1309,1323 ----
  }
  
  std::string
+ BoxExpr::to_string () const
+ {
+   std::string str = "box ";
+   rust_assert (expr != nullptr);
+   str += expr->to_string ();
+   return str;
+ }
+ 
+ std::string
  ReturnExpr::to_string () const
  {
    std::string str ("return ");
*************** RangeToInclExpr::accept_vis (HIRFullVisi
*** 4250,4255 ****
--- 4259,4270 ----
  }
  
  void
+ BoxExpr::accept_vis (HIRFullVisitor &vis)
+ {
+   vis.visit (*this);
+ }
+ 
+ void
  ReturnExpr::accept_vis (HIRFullVisitor &vis)
  {
    vis.visit (*this);
*************** RangeToExpr::accept_vis (HIRExpressionVi
*** 5130,5135 ****
--- 5145,5156 ----
  {
    vis.visit (*this);
  }
+ 
+ void
+ BoxExpr::accept_vis (HIRExpressionVisitor &vis)
+ {
+   vis.visit (*this);
+ }
  
  void
  ReturnExpr::accept_vis (HIRExpressionVisitor &vis)
diff -Nrcpad gcc-17-20260705/gcc/rust/lang.opt gcc-17-20260712/gcc/rust/lang.opt
*** gcc-17-20260705/gcc/rust/lang.opt	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/lang.opt	Sun Jul 12 22:32:11 2026
*************** frust-unused-check-2.0
*** 237,240 ****
--- 237,244 ----
  Rust Var(flag_unused_check_2_0)
  Use the new unused variable check implementation.
  
+ frust-c-style-string-literals
+ Rust Var(flag_c_style_string_literals)
+ Enable parsing and compilation of C-styled string literals.
+ 
  ; This comment is to ensure we retain the blank line above.
diff -Nrcpad gcc-17-20260705/gcc/rust/lex/rust-lex.cc gcc-17-20260712/gcc/rust/lex/rust-lex.cc
*** gcc-17-20260705/gcc/rust/lex/rust-lex.cc	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/lex/rust-lex.cc	Sun Jul 12 22:32:11 2026
*************** Lexer::build_token ()
*** 1063,1068 ****
--- 1063,1072 ----
  	    return parse_raw_byte_string (loc);
  	}
  
+       // C-style strings
+       else if (current_char == 'c' && peek_input () == '"')
+ 	return parse_c_string (loc);
+ 
        // raw identifiers and raw strings
        if (current_char == 'r')
  	{
*************** Lexer::parse_byte_string (location_t loc
*** 1749,1754 ****
--- 1753,1834 ----
    return Token::make_byte_string (loc, std::move (str));
  }
  
+ // Parses a C-style string.
+ TokenPtr
+ Lexer::parse_c_string (location_t loc)
+ {
+   skip_input ();
+   current_column++;
+ 
+   // Mostly same code copied from parse_string...
+ 
+   std::string str;
+   str.reserve (16); // some sensible default
+ 
+   current_char = peek_input ();
+ 
+   const location_t string_begin_locus = get_current_location ();
+ 
+   while (current_char.value != '"' && !current_char.is_eof ())
+     {
+       if (current_char.value == '\\')
+ 	{
+ 	  int length = 1;
+ 
+ 	  auto escape_pair = parse_escape ('"');
+ 	  current_char = std::get<0> (escape_pair);
+ 
+ 	  if (current_char == Codepoint (0) && std::get<2> (escape_pair))
+ 	    length = std::get<1> (escape_pair) - 1;
+ 	  else
+ 	    length += std::get<1> (escape_pair);
+ 
+ 	  if (current_char != Codepoint (0) || !std::get<2> (escape_pair))
+ 	    str += current_char.as_string ();
+ 
+ 	  current_column += length;
+ 
+ 	  // FIXME: parse_escape does not update current_char correctly.
+ 	  current_char = peek_input ();
+ 	  continue;
+ 	}
+ 
+       current_column++;
+       if (current_char.value == '\n')
+ 	{
+ 	  current_line++;
+ 	  current_column = 1;
+ 	  // tell line_table that new line starts
+ 	  start_line (current_line, max_column_hint);
+ 	}
+ 
+       str += current_char;
+       skip_input ();
+       current_char = peek_input ();
+     }
+ 
+   if (current_char.value == '"')
+     {
+       current_column++;
+ 
+       skip_input ();
+       current_char = peek_input ();
+     }
+   else if (current_char.is_eof ())
+     {
+       rust_error_at (string_begin_locus, "unended C string literal");
+       return Token::make (END_OF_FILE, get_current_location ());
+     }
+   else
+     {
+       rust_unreachable ();
+     }
+ 
+   str.shrink_to_fit ();
+ 
+   return Token::make_c_string (loc, std::move (str));
+ }
+ 
  // Parses a raw byte string.
  TokenPtr
  Lexer::parse_raw_byte_string (location_t loc)
diff -Nrcpad gcc-17-20260705/gcc/rust/lex/rust-lex.h gcc-17-20260712/gcc/rust/lex/rust-lex.h
*** gcc-17-20260705/gcc/rust/lex/rust-lex.h	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/lex/rust-lex.h	Sun Jul 12 22:32:11 2026
*************** private:
*** 147,152 ****
--- 147,153 ----
    TokenPtr parse_string (location_t loc);
    TokenPtr maybe_parse_raw_string (location_t loc);
    TokenPtr parse_raw_string (location_t loc, int initial_hash_count);
+   TokenPtr parse_c_string (location_t loc);
    TokenPtr parse_non_decimal_int_literals (location_t loc);
    TokenPtr parse_decimal_int_or_float (location_t loc);
    TokenPtr parse_char_or_lifetime (location_t loc);
diff -Nrcpad gcc-17-20260705/gcc/rust/lex/rust-token.h gcc-17-20260712/gcc/rust/lex/rust-token.h
*** gcc-17-20260705/gcc/rust/lex/rust-token.h	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/lex/rust-token.h	Sun Jul 12 22:32:11 2026
*************** enum PrimitiveCoreType
*** 134,139 ****
--- 134,141 ----
    RS_TOKEN (BYTE_STRING_LITERAL, "byte string literal")                        \
    RS_TOKEN (RAW_STRING_LITERAL, "raw string literal")                          \
    RS_TOKEN (BYTE_CHAR_LITERAL, "byte character literal")                       \
+   RS_TOKEN (C_STRING_LITERAL, "C string literal")                              \
+   RS_TOKEN (RAW_C_STRING_LITERAL, "raw C string literal")                      \
    RS_TOKEN (LIFETIME, "lifetime") /* TODO: improve token type */               \
    /* Have "interpolated" tokens (whatever that means)? identifer, path, type,  \
     * pattern, */                                                               \
*************** public:
*** 422,427 ****
--- 424,434 ----
      return TokenPtr (new Token (RAW_STRING_LITERAL, locus, std::move (str)));
    }
  
+   static TokenPtr make_c_string (location_t locus, std::string str)
+   {
+     return TokenPtr (new Token (C_STRING_LITERAL, locus, std::move (str)));
+   }
+ 
    // Makes and returns a new TokenPtr of type INNER_DOC_COMMENT.
    static TokenPtr make_inner_doc_comment (location_t locus, std::string str)
    {
*************** public:
*** 504,509 ****
--- 511,517 ----
        case BYTE_CHAR_LITERAL:
        case BYTE_STRING_LITERAL:
        case RAW_STRING_LITERAL:
+       case C_STRING_LITERAL:
  	return true;
        default:
  	return false;
diff -Nrcpad gcc-17-20260705/gcc/rust/parse/rust-parse-error.h gcc-17-20260712/gcc/rust/parse/rust-parse-error.h
*** gcc-17-20260705/gcc/rust/parse/rust-parse-error.h	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/parse/rust-parse-error.h	Sun Jul 12 22:32:11 2026
*************** enum class StructExprField
*** 358,363 ****
--- 358,364 ----
  {
    MALFORMED,
    CHILD_ERROR,
+   STRUCT_BASE_ATTRIBUTES,
    // Not a hard error
    STRUCT_BASE,
  };
diff -Nrcpad gcc-17-20260705/gcc/rust/parse/rust-parse-impl-attribute.hxx gcc-17-20260712/gcc/rust/parse/rust-parse-impl-attribute.hxx
*** gcc-17-20260705/gcc/rust/parse/rust-parse-impl-attribute.hxx	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/parse/rust-parse-impl-attribute.hxx	Sun Jul 12 22:32:11 2026
*************** Parser<ManagedTokenSource>::parse_attr_i
*** 336,341 ****
--- 336,344 ----
  	  case BYTE_STRING_LITERAL:
  	    lit_type = AST::Literal::BYTE_STRING;
  	    break;
+ 	  case C_STRING_LITERAL:
+ 	    lit_type = AST::Literal::C_STRING;
+ 	    break;
  	  case RAW_STRING_LITERAL:
  	    lit_type = AST::Literal::RAW_STRING;
  	    break;
diff -Nrcpad gcc-17-20260705/gcc/rust/parse/rust-parse-impl-expr.hxx gcc-17-20260712/gcc/rust/parse/rust-parse-impl-expr.hxx
*** gcc-17-20260705/gcc/rust/parse/rust-parse-impl-expr.hxx	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/parse/rust-parse-impl-expr.hxx	Sun Jul 12 22:32:11 2026
*************** Parser<ManagedTokenSource>::parse_litera
*** 342,347 ****
--- 342,369 ----
        literal_value = t->get_str ();
        lexer.skip_token ();
        break;
+     case C_STRING_LITERAL:
+       {
+ 	if (flag_c_style_string_literals)
+ 	  {
+ 	    type = AST::Literal::C_STRING;
+ 	    literal_value = t->get_str ();
+ 	    lexer.skip_token ();
+ 	  }
+ 	else
+ 	  {
+ 	    add_error (
+ 	      Error (t->get_locus (),
+ 		     "unexpected token %qs when parsing literal expression - "
+ 		     "C-style string literals require "
+ 		     "%<-frust-c-style-string-literals%> to be enabled",
+ 		     t->get_token_description ()));
+ 	    return tl::unexpected<Parse::Error::Node> (
+ 	      Parse::Error::Node::MALFORMED);
+ 	  }
+       }
+ 
+       break;
      case INT_LITERAL:
        type = AST::Literal::INT;
        literal_value = LiteralResolve::evaluate_integer_literal (t);
*************** Parser<ManagedTokenSource>::parse_struct
*** 1752,1757 ****
--- 1774,1789 ----
      case DOT_DOT:
        /* this is a struct base and can't be parsed here, so just return
         * nothing without erroring */
+       if (!outer_attrs.empty ())
+ 	{
+ 	  add_error (
+ 	    Error (t->get_locus (),
+ 		   "attributes are not allowed before %<..%> in a struct "
+ 		   "expression"));
+ 
+ 	  return tl::unexpected<Parse::Error::StructExprField> (
+ 	    Parse::Error::StructExprField::STRUCT_BASE_ATTRIBUTES);
+ 	}
  
        return tl::unexpected<Parse::Error::StructExprField> (
  	Parse::Error::StructExprField::STRUCT_BASE);
*************** Parser<ManagedTokenSource>::null_denotat
*** 2101,2106 ****
--- 2133,2155 ----
        return std::unique_ptr<AST::LiteralExpr> (
  	new AST::LiteralExpr (tok->get_str (), AST::Literal::RAW_STRING,
  			      tok->get_type_hint (), {}, tok->get_locus ()));
+     case C_STRING_LITERAL:
+       if (flag_c_style_string_literals)
+ 	{
+ 	  return std::unique_ptr<AST::LiteralExpr> (
+ 	    new AST::LiteralExpr (tok->get_str (), AST::Literal::C_STRING,
+ 				  tok->get_type_hint (), {},
+ 				  tok->get_locus ()));
+ 	}
+       else
+ 	{
+ 	  Error error (tok->get_locus (),
+ 		       "C-style string literals require "
+ 		       "%<-frust-c-style-string-literals%> to be enabled");
+ 	  add_error (std::move (error));
+ 	  return tl::unexpected<Parse::Error::Expr> (
+ 	    Parse::Error::Expr::MALFORMED);
+ 	}
      case CHAR_LITERAL:
        return std::unique_ptr<AST::LiteralExpr> (
  	new AST::LiteralExpr (tok->get_str (), AST::Literal::CHAR,
*************** Parser<ManagedTokenSource>::parse_struct
*** 4068,4076 ****
  	while (t->get_id () != RIGHT_CURLY && t->get_id () != DOT_DOT)
  	  {
  	    auto field = parse_struct_expr_field ();
! 	    if (!field
! 		&& field.error () != Parse::Error::StructExprField::STRUCT_BASE)
  	      {
  		Error error (t->get_locus (),
  			     "failed to parse struct (or enum) expr field");
  		add_error (std::move (error));
--- 4117,4131 ----
  	while (t->get_id () != RIGHT_CURLY && t->get_id () != DOT_DOT)
  	  {
  	    auto field = parse_struct_expr_field ();
! 	    if (!field)
  	      {
+ 		if (field.error () == Parse::Error::StructExprField::STRUCT_BASE)
+ 		  break;
+ 		if (field.error ()
+ 		    == Parse::Error::StructExprField::STRUCT_BASE_ATTRIBUTES)
+ 		  return tl::unexpected<Parse::Error::Expr> (
+ 		    Parse::Error::Expr::CHILD_ERROR);
+ 
  		Error error (t->get_locus (),
  			     "failed to parse struct (or enum) expr field");
  		add_error (std::move (error));
diff -Nrcpad gcc-17-20260705/gcc/rust/parse/rust-parse.h gcc-17-20260712/gcc/rust/parse/rust-parse.h
*** gcc-17-20260705/gcc/rust/parse/rust-parse.h	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/parse/rust-parse.h	Sun Jul 12 22:32:11 2026
*************** along with GCC; see the file COPYING3.
*** 28,33 ****
--- 28,34 ----
  #include "rust-feature-store.h"
  
  #include "expected.h"
+ #include "options.h"
  
  namespace Rust {
  
diff -Nrcpad gcc-17-20260705/gcc/rust/rust-gcc.cc gcc-17-20260712/gcc/rust/rust-gcc.cc
*** gcc-17-20260705/gcc/rust/rust-gcc.cc	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/rust-gcc.cc	Sun Jul 12 22:32:11 2026
*************** pointer_type (tree to_type)
*** 444,450 ****
  {
    if (error_operand_p (to_type))
      return error_mark_node;
!   tree type = build_pointer_type (to_type);
    return type;
  }
  
--- 444,450 ----
  {
    if (error_operand_p (to_type))
      return error_mark_node;
!   tree type = build_pointer_type_for_mode (to_type, VOIDmode, true);
    return type;
  }
  
diff -Nrcpad gcc-17-20260705/gcc/rust/typecheck/rust-autoderef.cc gcc-17-20260712/gcc/rust/typecheck/rust-autoderef.cc
*** gcc-17-20260705/gcc/rust/typecheck/rust-autoderef.cc	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/typecheck/rust-autoderef.cc	Sun Jul 12 22:32:11 2026
*************** resolve_operator_overload_fn (
*** 235,241 ****
      }
  
    // we found a valid operator overload
-   fn->prepare_higher_ranked_bounds ();
    rust_debug ("resolved operator overload to: {%u} {%s}",
  	      candidate.candidate.ty->get_ref (),
  	      candidate.candidate.ty->debug_str ().c_str ());
--- 235,240 ----
*************** AutoderefCycle::cycle (TyTy::BaseType *r
*** 331,336 ****
--- 330,350 ----
        if (autoderef_flag)
  	return false;
  
+       // try owned_box
+       if (auto deref_r = try_get_box_inner_type (r))
+ 	{
+ 	  Adjustment box_deref (Adjustment::AdjustmentType::DEREF, r, *deref_r);
+ 	  adjustments.push_back (box_deref);
+ 
+ 	  rust_debug ("autoderef try owned_box: {%s}",
+ 		      (*deref_r)->debug_str ().c_str ());
+ 
+ 	  if (try_autoderefed (*deref_r))
+ 	    return true;
+ 
+ 	  adjustments.pop_back ();
+ 	}
+ 
        // try unsize
        Adjustment unsize = Adjuster::try_unsize_type (r);
        if (!unsize.is_error ())
diff -Nrcpad gcc-17-20260705/gcc/rust/typecheck/rust-hir-impl-trait-context.h gcc-17-20260712/gcc/rust/typecheck/rust-hir-impl-trait-context.h
*** gcc-17-20260705/gcc/rust/typecheck/rust-hir-impl-trait-context.h	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/rust/typecheck/rust-hir-impl-trait-context.h	Sun Jul 12 22:32:11 2026
***************
*** 0 ****
--- 1,51 ----
+ // Copyright (C) 2021-2026 Free Software Foundation, Inc.
+ 
+ // This file is part of GCC.
+ 
+ // GCC is free software; you can redistribute it and/or modify it under
+ // the terms of the GNU General Public License as published by the Free
+ // Software Foundation; either version 3, or (at your option) any later
+ // version.
+ 
+ // GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+ // WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ // FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ // for more details.
+ 
+ // You should have received a copy of the GNU General Public License
+ // along with GCC; see the file COPYING3.  If not see
+ // <http://www.gnu.org/licenses/>.
+ 
+ #ifndef RUST_HIR_IMPL_TRAIT_CONTEXT_H
+ #define RUST_HIR_IMPL_TRAIT_CONTEXT_H
+ 
+ #include "rust-hir-map.h"
+ 
+ namespace Rust {
+ 
+ namespace TyTy {
+ class BaseType;
+ }
+ 
+ namespace Resolver {
+ 
+ class TraitReference;
+ 
+ struct AssocTypeEntry
+ {
+   DefId trait_item_defid;
+   DefId impl_item_defid;
+   TyTy::BaseType *value;
+ };
+ 
+ struct ImplTraitContextFrame
+ {
+   const TraitReference *trait;
+   TyTy::BaseType *self;
+   std::map<DefId, AssocTypeEntry> assoc_types_by_trait_item;
+ };
+ 
+ } // namespace Resolver
+ } // namespace Rust
+ 
+ #endif // RUST_HIR_IMPL_TRAIT_CONTEXT_H
diff -Nrcpad gcc-17-20260705/gcc/rust/typecheck/rust-hir-trait-reference.cc gcc-17-20260712/gcc/rust/typecheck/rust-hir-trait-reference.cc
*** gcc-17-20260705/gcc/rust/typecheck/rust-hir-trait-reference.cc	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/typecheck/rust-hir-trait-reference.cc	Sun Jul 12 22:32:11 2026
***************
*** 17,22 ****
--- 17,23 ----
  // <http://www.gnu.org/licenses/>.
  
  #include "rust-hir-trait-reference.h"
+ #include "rust-hir-type-check.h"
  
  namespace Rust {
  namespace Resolver {
*************** TraitReference::on_resolved ()
*** 344,380 ****
      {
        if (item.get_trait_item_type ()
  	  == TraitItemReference::TraitItemType::TYPE)
! 	item.on_resolved ();
      }
    for (auto &item : item_refs)
      {
        if (item.get_trait_item_type ()
  	  != TraitItemReference::TraitItemType::TYPE)
! 	item.on_resolved ();
!     }
! }
! 
! void
! TraitReference::clear_associated_types () const
! {
!   for (const auto &item : item_refs)
!     {
!       bool is_assoc_type = item.get_trait_item_type ()
! 			   == TraitItemReference::TraitItemType::TYPE;
!       if (is_assoc_type)
! 	item.associated_type_reset (false);
!     }
! }
! 
! void
! TraitReference::clear_associated_type_projections () const
! {
!   for (const auto &item : item_refs)
!     {
!       bool is_assoc_type = item.get_trait_item_type ()
! 			   == TraitItemReference::TraitItemType::TYPE;
!       if (is_assoc_type)
! 	item.associated_type_reset (true);
      }
  }
  
--- 345,357 ----
      {
        if (item.get_trait_item_type ()
  	  == TraitItemReference::TraitItemType::TYPE)
! 	item.on_resolved (this);
      }
    for (auto &item : item_refs)
      {
        if (item.get_trait_item_type ()
  	  != TraitItemReference::TraitItemType::TYPE)
! 	item.on_resolved (this);
      }
  }
  
*************** AssociatedImplTrait::AssociatedImplTrait
*** 463,471 ****
  					  TyTy::TypeBoundPredicate predicate,
  					  HIR::ImplBlock *impl,
  					  TyTy::BaseType *self,
! 					  Resolver::TypeCheckContext *context)
    : trait (trait), predicate (predicate), impl (impl), self (self),
!     context (context)
  {}
  
  TyTy::TypeBoundPredicate &
--- 440,448 ----
  					  TyTy::TypeBoundPredicate predicate,
  					  HIR::ImplBlock *impl,
  					  TyTy::BaseType *self,
! 					  ImplTraitContextFrame frame)
    : trait (trait), predicate (predicate), impl (impl), self (self),
!     context (TypeCheckContext::get ()), frame (frame)
  {}
  
  TyTy::TypeBoundPredicate &
*************** AssociatedImplTrait::get_self () const
*** 492,496 ****
--- 469,479 ----
    return self;
  }
  
+ ImplTraitContextFrame
+ AssociatedImplTrait::get_frame () const
+ {
+   return frame;
+ }
+ 
  } // namespace Resolver
  } // namespace Rust
diff -Nrcpad gcc-17-20260705/gcc/rust/typecheck/rust-hir-trait-reference.h gcc-17-20260712/gcc/rust/typecheck/rust-hir-trait-reference.h
*** gcc-17-20260705/gcc/rust/typecheck/rust-hir-trait-reference.h	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/typecheck/rust-hir-trait-reference.h	Sun Jul 12 22:32:11 2026
***************
*** 21,26 ****
--- 21,27 ----
  
  #include "rust-hir-full.h"
  #include "rust-tyty-visitor.h"
+ #include "rust-hir-impl-trait-context.h"
  
  namespace Rust {
  namespace Resolver {
*************** public:
*** 101,111 ****
    // resolution on construction it can lead to a case where the trait being
    // resolved recursively trying to resolve the trait itself infinitely since
    // the trait will not be stored in its own map yet
!   void on_resolved ();
! 
!   void associated_type_set (TyTy::BaseType *ty) const;
! 
!   void associated_type_reset (bool only_projections) const;
  
    bool is_object_safe () const;
  
--- 102,108 ----
    // resolution on construction it can lead to a case where the trait being
    // resolved recursively trying to resolve the trait itself infinitely since
    // the trait will not be stored in its own map yet
!   void on_resolved (const TraitReference *tref);
  
    bool is_object_safe () const;
  
*************** private:
*** 121,129 ****
    TyTy::BaseType *get_type_from_fn (/*const*/ HIR::TraitItemFunc &fn) const;
  
    bool is_item_resolved () const;
!   void resolve_item (HIR::TraitItemType &type);
!   void resolve_item (HIR::TraitItemConst &constant);
!   void resolve_item (HIR::TraitItemFunc &func);
  
    std::string identifier;
    bool optional_flag;
--- 118,126 ----
    TyTy::BaseType *get_type_from_fn (/*const*/ HIR::TraitItemFunc &fn) const;
  
    bool is_item_resolved () const;
!   void resolve_item (const TraitReference *tref, HIR::TraitItemType &type);
!   void resolve_item (const TraitReference *tref, HIR::TraitItemConst &constant);
!   void resolve_item (const TraitReference *tref, HIR::TraitItemFunc &func);
  
    std::string identifier;
    bool optional_flag;
*************** public:
*** 212,221 ****
  
    void on_resolved ();
  
-   void clear_associated_types () const;
- 
-   void clear_associated_type_projections () const;
- 
    bool is_equal (const TraitReference &other) const;
  
    std::vector<TyTy::TypeBoundPredicate> get_super_traits () const;
--- 209,214 ----
*************** class AssociatedImplTrait
*** 242,249 ****
  public:
    AssociatedImplTrait (TraitReference *trait,
  		       TyTy::TypeBoundPredicate predicate, HIR::ImplBlock *impl,
! 		       TyTy::BaseType *self,
! 		       Resolver::TypeCheckContext *context);
  
    TyTy::TypeBoundPredicate &get_predicate ();
  
--- 235,241 ----
  public:
    AssociatedImplTrait (TraitReference *trait,
  		       TyTy::TypeBoundPredicate predicate, HIR::ImplBlock *impl,
! 		       TyTy::BaseType *self, ImplTraitContextFrame frame);
  
    TyTy::TypeBoundPredicate &get_predicate ();
  
*************** public:
*** 254,266 ****
    TyTy::BaseType *get_self ();
    const TyTy::BaseType *get_self () const;
  
!   void setup_raw_associated_types ();
  
!   TyTy::BaseType *setup_associated_types (
!     const TyTy::BaseType *self, const TyTy::TypeBoundPredicate &bound,
!     TyTy::SubstitutionArgumentMappings *args = nullptr, bool infer = true);
  
!   void reset_associated_types ();
  
  private:
    TraitReference *trait;
--- 246,259 ----
    TyTy::BaseType *get_self ();
    const TyTy::BaseType *get_self () const;
  
!   ImplTraitContextFrame get_frame () const;
  
!   TyTy::SubstitutionArgumentMappings
!   bind_impl_for_projection (TyTy::ProjectionType &proj, location_t locus);
  
!   TyTy::SubstitutionArgumentMappings
!   bind_impl_for_bound (TyTy::BaseType *receiver,
! 		       const TyTy::TypeBoundPredicate &bound, location_t locus);
  
  private:
    TraitReference *trait;
*************** private:
*** 268,273 ****
--- 261,267 ----
    HIR::ImplBlock *impl;
    TyTy::BaseType *self;
    Resolver::TypeCheckContext *context;
+   ImplTraitContextFrame frame;
  };
  
  } // namespace Resolver
diff -Nrcpad gcc-17-20260705/gcc/rust/typecheck/rust-hir-trait-resolve.cc gcc-17-20260712/gcc/rust/typecheck/rust-hir-trait-resolve.cc
*** gcc-17-20260705/gcc/rust/typecheck/rust-hir-trait-resolve.cc	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/typecheck/rust-hir-trait-resolve.cc	Sun Jul 12 22:32:11 2026
***************
*** 17,22 ****
--- 17,23 ----
  // <http://www.gnu.org/licenses/>.
  
  #include "rust-hir-trait-resolve.h"
+ #include "rust-hir-trait-reference.h"
  #include "rust-hir-type-check-expr.h"
  #include "rust-rib.h"
  #include "rust-substitution-mapper.h"
*************** TraitResolver::lookup_path (HIR::TypePat
*** 339,358 ****
  }
  
  void
! TraitItemReference::on_resolved ()
  {
    switch (type)
      {
      case CONST:
!       resolve_item (static_cast<HIR::TraitItemConst &> (*hir_trait_item));
        break;
  
      case TYPE:
!       resolve_item (static_cast<HIR::TraitItemType &> (*hir_trait_item));
        break;
  
      case FN:
!       resolve_item (static_cast<HIR::TraitItemFunc &> (*hir_trait_item));
        break;
  
      default:
--- 340,359 ----
  }
  
  void
! TraitItemReference::on_resolved (const TraitReference *tref)
  {
    switch (type)
      {
      case CONST:
!       resolve_item (tref, static_cast<HIR::TraitItemConst &> (*hir_trait_item));
        break;
  
      case TYPE:
!       resolve_item (tref, static_cast<HIR::TraitItemType &> (*hir_trait_item));
        break;
  
      case FN:
!       resolve_item (tref, static_cast<HIR::TraitItemFunc &> (*hir_trait_item));
        break;
  
      default:
*************** TraitItemReference::on_resolved ()
*** 361,377 ****
  }
  
  void
! TraitItemReference::resolve_item (HIR::TraitItemType &type)
  {
!   TyTy::BaseType *ty
!     = new TyTy::PlaceholderType (type.get_name ().as_string (),
! 				 type.get_mappings ().get_defid (),
! 				 type.get_mappings ().get_hirid ());
!   context->insert_type (type.get_mappings (), ty);
  }
  
  void
! TraitItemReference::resolve_item (HIR::TraitItemConst &constant)
  {
    TyTy::BaseType *ty = nullptr;
    if (constant.has_type ())
--- 362,419 ----
  }
  
  void
! TraitItemReference::resolve_item (const TraitReference *tref,
! 				  HIR::TraitItemType &type)
  {
!   auto substitutions = inherited_substitutions;
!   if (type.has_generics ())
!     {
!       auto binder_pin = context->push_lifetime_binder ();
!       TypeCheckBase::ResolveGenericParams (HIR::Item::ItemKind::TypeAlias,
! 					   type.get_locus (),
! 					   type.get_generic_params (),
! 					   substitutions, false, ABI::RUST);
!     }
! 
!   size_t inherited_count = inherited_substitutions.size ();
!   auto projection
!     = new TyTy::ProjectionType (type.get_mappings ().get_hirid (), nullptr,
! 				tref, type.get_mappings ().get_defid (),
! 				substitutions, self,
! 				TyTy::SubstitutionArgumentMappings::error (),
! 				{}, {}, inherited_count);
! 
!   // Attach the bounds declared on the associated type itself:
!   //
!   //     type IntoIter: Iterator<Item = Self::Item>
!   //
!   // so satisfies_bound finds them in specified_bounds
!   if (type.has_type_param_bounds ())
!     {
!       std::vector<TyTy::TypeBoundPredicate> trait_item_bounds;
!       for (auto &bound : type.get_type_param_bounds ())
! 	{
! 	  if (bound->get_bound_type ()
! 	      != HIR::TypeParamBound::BoundType::TRAITBOUND)
! 	    continue;
! 	  auto *b = static_cast<HIR::TraitBound *> (bound.get ());
! 	  auto predicate = TypeCheckBase::ResolvePredicateFromBound (
! 	    b->get_path (),
! 	    tl::nullopt /*this will setup a PLACEHOLDER for self*/,
! 	    BoundPolarity::RegularBound, false, true);
! 	  if (!predicate.is_error ())
! 	    trait_item_bounds.push_back (std::move (predicate));
! 	}
!       if (!trait_item_bounds.empty ())
! 	projection->inherit_bounds (trait_item_bounds);
!     }
! 
!   context->insert_type (type.get_mappings (), projection);
  }
  
  void
! TraitItemReference::resolve_item (const TraitReference *tref,
! 				  HIR::TraitItemConst &constant)
  {
    TyTy::BaseType *ty = nullptr;
    if (constant.has_type ())
*************** TraitItemReference::resolve_item (HIR::T
*** 396,402 ****
  }
  
  void
! TraitItemReference::resolve_item (HIR::TraitItemFunc &func)
  {
    TyTy::BaseType *item_tyty = get_tyty ();
    if (item_tyty->get_kind () == TyTy::TypeKind::ERROR)
--- 438,445 ----
  }
  
  void
! TraitItemReference::resolve_item (const TraitReference *tref,
! 				  HIR::TraitItemFunc &func)
  {
    TyTy::BaseType *item_tyty = get_tyty ();
    if (item_tyty->get_kind () == TyTy::TypeKind::ERROR)
*************** TraitItemReference::resolve_item (HIR::T
*** 427,737 ****
    context->pop_return_type ();
  }
  
! void
! TraitItemReference::associated_type_set (TyTy::BaseType *ty) const
  {
!   rust_assert (get_trait_item_type () == TraitItemType::TYPE);
! 
!   // this isnt super safe there are cases like the FnTraits where the type is
!   // set to the impls placeholder associated type. For example
!   //
!   // type Output = F::Output; -- see the fn trait impls in libcore
!   //
!   // then this projection ends up resolving back to this placeholder so it just
!   // ends up being cyclical
! 
!   TyTy::BaseType *item_ty = get_tyty ();
!   rust_assert (item_ty->get_kind () == TyTy::TypeKind::PLACEHOLDER);
!   TyTy::PlaceholderType *placeholder
!     = static_cast<TyTy::PlaceholderType *> (item_ty);
! 
!   if (ty->is<TyTy::ProjectionType> ())
      {
!       const auto &projection = *static_cast<const TyTy::ProjectionType *> (ty);
!       const auto resolved = projection.get ();
!       if (resolved == item_ty)
! 	return;
      }
  
!   placeholder->set_associated_type (ty->get_ty_ref ());
! }
! 
! void
! TraitItemReference::associated_type_reset (bool only_projections) const
! {
!   rust_assert (get_trait_item_type () == TraitItemType::TYPE);
  
!   TyTy::BaseType *item_ty = get_tyty ();
!   rust_assert (item_ty->get_kind () == TyTy::TypeKind::PLACEHOLDER);
!   TyTy::PlaceholderType *placeholder
!     = static_cast<TyTy::PlaceholderType *> (item_ty);
  
!   if (!only_projections)
      {
!       placeholder->clear_associated_type ();
      }
!   else
      {
!       if (!placeholder->can_resolve ())
! 	return;
  
!       const TyTy::BaseType *r = placeholder->resolve ();
!       if (r->get_kind () == TyTy::TypeKind::PROJECTION)
  	{
! 	  placeholder->clear_associated_type ();
  	}
      }
- }
  
! void
! AssociatedImplTrait::setup_raw_associated_types ()
! {
!   auto &impl_items = impl->get_impl_items ();
!   for (auto &impl_item : impl_items)
      {
!       bool is_type_alias = impl_item->get_impl_item_type ()
! 			   == HIR::ImplItem::ImplItemType::TYPE_ALIAS;
!       if (!is_type_alias)
  	continue;
! 
!       HIR::TypeAlias &type = *static_cast<HIR::TypeAlias *> (impl_item.get ());
! 
!       TraitItemReference *resolved_trait_item = nullptr;
!       bool ok
! 	= trait->lookup_trait_item (type.get_new_type_name ().as_string (),
! 				    &resolved_trait_item);
        if (!ok)
  	continue;
!       if (resolved_trait_item->get_trait_item_type ()
! 	  != TraitItemReference::TraitItemType::TYPE)
! 	continue;
! 
!       TyTy::BaseType *lookup;
!       ok = context->lookup_type (type.get_mappings ().get_hirid (), &lookup);
!       rust_assert (ok);
! 
!       resolved_trait_item->associated_type_set (lookup);
      }
  }
  
! TyTy::BaseType *
! AssociatedImplTrait::setup_associated_types (
!   const TyTy::BaseType *self, const TyTy::TypeBoundPredicate &bound,
!   TyTy::SubstitutionArgumentMappings *args, bool infer)
  {
!   // compute the constrained impl block generic arguments based on self and the
!   // higher ranked trait bound
!   TyTy::BaseType *receiver = self->clone ();
! 
!   // impl<Y> SliceIndex<[Y]> for Range<usize>
!   // vs
!   // I: SliceIndex<[<integer>]> and Range<<integer>>
!   //
!   // we need to figure out what Y is
! 
!   TyTy::BaseType *associated_self = get_self ();
! 
!   rust_debug ("setup_associated_types for: %s->%s bound %s",
! 	      associated_self->debug_str ().c_str (),
! 	      self->debug_str ().c_str (), bound.as_string ().c_str ());
! 
!   // grab the parameters
!   HIR::ImplBlock &impl_block = *get_impl_block ();
!   std::vector<TyTy::SubstitutionParamMapping> substitutions;
!   for (auto &generic_param : impl_block.get_generic_params ())
      {
!       switch (generic_param.get ()->get_kind ())
! 	{
! 	case HIR::GenericParam::GenericKind::LIFETIME:
! 	case HIR::GenericParam::GenericKind::CONST:
! 	  // FIXME: Skipping Lifetime and Const completely until better
! 	  // handling.
! 	  break;
! 
! 	case HIR::GenericParam::GenericKind::TYPE:
! 	  {
! 	    TyTy::BaseType *l = nullptr;
! 	    bool ok = context->lookup_type (
! 	      generic_param->get_mappings ().get_hirid (), &l);
! 	    if (ok && l->get_kind () == TyTy::TypeKind::PARAM)
! 	      {
! 		substitutions.emplace_back (static_cast<HIR::TypeParam &> (
! 					      *generic_param),
! 					    static_cast<TyTy::ParamType *> (l));
! 	      }
! 	  }
! 	  break;
! 	}
      }
  
!   // this callback gives us the parameters that get substituted so we can
!   // compute the constrained type parameters for this impl block
    std::map<std::string, HirId> param_mappings;
!   TyTy::ParamSubstCb param_subst_cb
!     = [&] (const TyTy::ParamType &p, const TyTy::SubstitutionArg &a) {
! 	param_mappings[p.get_symbol ()] = a.get_tyty ()->get_ref ();
!       };
! 
!   // generate inference variables for these bound arguments so we can compute
!   // their values
!   location_t locus = UNKNOWN_LOCATION;
!   std::vector<TyTy::SubstitutionArg> subst_args;
!   for (auto &p : substitutions)
      {
!       if (p.needs_substitution () && infer)
! 	{
! 	  TyTy::TyVar infer_var = TyTy::TyVar::get_implicit_infer_var (locus);
! 	  subst_args.emplace_back (&p, infer_var.get_tyty ());
! 	}
!       else
! 	{
! 	  auto param = p.get_param_ty ();
! 	  auto resolved = param->destructure ();
! 	  subst_args.emplace_back (&p, resolved);
! 	  param_mappings[param->get_symbol ()] = resolved->get_ref ();
! 	}
      }
- 
    TyTy::SubstitutionArgumentMappings infer_arguments (
!     std::move (subst_args), {},
!     TyTy::SubstitutionArgumentMappings::regions_from_nullable_args (args),
!     locus, param_subst_cb);
!   TyTy::BaseType *impl_self_infer
!     = (!associated_self->is_concrete ())
! 	? SubstMapperInternal::Resolve (associated_self, infer_arguments)
! 	: associated_self;
! 
!   const TyTy::TypeBoundPredicate &impl_predicate
!     = associated_self->lookup_predicate (bound.get_id ());
!   rust_assert (!impl_predicate.is_error ());
! 
!   // infer the arguments on the predicate
!   std::vector<TyTy::BaseType *> impl_trait_predicate_args;
! 
!   for (size_t i = 0; i < impl_predicate.get_substs ().size (); i++)
!     {
!       const auto &arg = impl_predicate.get_substs ().at (i);
!       if (i == 0)
! 	continue;
  
!       const auto p = arg.get_param_ty ();
!       auto r = p->resolve ();
!       if (!r->is_concrete ())
! 	{
! 	  r = SubstMapperInternal::Resolve (r, infer_arguments);
! 	}
!       impl_trait_predicate_args.push_back (r);
!     }
  
!   // unify the bounds arguments
!   std::vector<TyTy::BaseType *> hrtb_bound_arguments;
!   for (size_t i = 0; i < bound.get_substs ().size (); i++)
      {
!       const auto &arg = bound.get_substs ().at (i);
!       if (i == 0)
! 	continue;
! 
!       const auto p = arg.get_param_ty ();
!       auto r = p->resolve ();
        if (!r->is_concrete ())
! 	{
! 	  r = SubstMapperInternal::Resolve (r, infer_arguments);
! 	}
!       hrtb_bound_arguments.push_back (r);
      }
  
!   rust_assert (impl_trait_predicate_args.size ()
! 	       == hrtb_bound_arguments.size ());
!   for (size_t i = 0; i < impl_trait_predicate_args.size (); i++)
      {
!       TyTy::BaseType *a = impl_trait_predicate_args.at (i);
!       TyTy::BaseType *b = hrtb_bound_arguments.at (i);
! 
!       TyTy::BaseType *result
! 	= unify_site_and (a->get_ref (), TyTy::TyWithLocation (a),
! 			  TyTy::TyWithLocation (b), impl_predicate.get_locus (),
! 			  true /*emit-errors*/, true /*commit-if-ok*/,
! 			  true /*infer*/, true /*cleanup-on-fail*/);
!       rust_assert (result->get_kind () != TyTy::TypeKind::ERROR);
      }
  
!   // we need to unify the receiver with the impl-block Self so that we compute
!   // the type correctly as our receiver may be generic and we are inferring its
!   // generic arguments and this Self might be the concrete version or vice
!   // versa.
!   auto result = unify_site_and (get_impl_block ()->get_mappings ().get_hirid (),
! 				TyTy::TyWithLocation (receiver),
! 				TyTy::TyWithLocation (impl_self_infer),
! 				impl_predicate.get_locus (),
! 				true /*emit-errors*/, true /*commit-if-ok*/,
! 				true /*infer*/, true /*cleanup-on-fail*/);
!   rust_assert (result->get_kind () != TyTy::TypeKind::ERROR);
!   TyTy::BaseType *self_result = result;
  
!   // create the argument list
!   std::vector<TyTy::SubstitutionArg> associated_arguments;
!   for (auto &p : substitutions)
      {
!       std::string symbol = p.get_param_ty ()->get_symbol ();
!       auto it = param_mappings.find (symbol);
!       rust_assert (it != param_mappings.end ());
! 
!       HirId id = it->second;
!       TyTy::BaseType *argument = nullptr;
!       bool ok = context->lookup_type (id, &argument);
!       rust_assert (ok);
! 
!       TyTy::SubstitutionArg arg (&p, argument);
!       associated_arguments.push_back (arg);
      }
  
!   TyTy::SubstitutionArgumentMappings associated_type_args (
!     std::move (associated_arguments), {},
!     TyTy::SubstitutionArgumentMappings::regions_from_nullable_args (args),
!     locus);
  
!   auto &impl_items = impl->get_impl_items ();
!   for (auto &impl_item : impl_items)
      {
!       bool is_type_alias = impl_item->get_impl_item_type ()
! 			   == HIR::ImplItem::ImplItemType::TYPE_ALIAS;
!       if (!is_type_alias)
  	continue;
! 
!       HIR::TypeAlias &type = *static_cast<HIR::TypeAlias *> (impl_item.get ());
! 
!       TraitItemReference *resolved_trait_item = nullptr;
!       bool ok
! 	= trait->lookup_trait_item (type.get_new_type_name ().as_string (),
! 				    &resolved_trait_item);
        if (!ok)
  	continue;
!       if (resolved_trait_item->get_trait_item_type ()
! 	  != TraitItemReference::TraitItemType::TYPE)
! 	continue;
! 
!       TyTy::BaseType *lookup;
!       if (!context->lookup_type (type.get_mappings ().get_hirid (), &lookup))
! 	continue;
! 
!       // this might be generic
!       TyTy::BaseType *substituted
! 	= SubstMapperInternal::Resolve (lookup, associated_type_args);
!       resolved_trait_item->associated_type_set (substituted);
!     }
! 
!   if (args != nullptr)
!     {
!       *args = associated_type_args;
      }
  
!   return self_result;
! }
! 
! void
! AssociatedImplTrait::reset_associated_types ()
! {
!   trait->clear_associated_types ();
  }
  
  location_t
--- 470,721 ----
    context->pop_return_type ();
  }
  
! TyTy::SubstitutionArgumentMappings
! AssociatedImplTrait::bind_impl_for_projection (TyTy::ProjectionType &proj,
! 					       location_t locus)
  {
!   std::vector<TyTy::SubstitutionParamMapping> impl_substitutions;
!   for (auto &generic_param : impl->get_generic_params ())
      {
!       if (generic_param->get_kind () != HIR::GenericParam::GenericKind::TYPE)
! 	continue;
!       TyTy::BaseType *l = nullptr;
!       bool ok
! 	= context->lookup_type (generic_param->get_mappings ().get_hirid (),
! 				&l);
!       if (!ok || l->get_kind () != TyTy::TypeKind::PARAM)
! 	continue;
!       impl_substitutions.emplace_back (static_cast<HIR::TypeParam &> (
! 					 *generic_param),
! 				       static_cast<TyTy::ParamType *> (l));
      }
  
!   // Build infer args for each impl param so we dont mutate the impls own
!   // ParamTys when unifying. param_mappings records impl_param_symbol ->
!   // hirid_of_fresh_infer_var so we can read out what each param resolved to
!   // after unification.
!   std::vector<TyTy::SubstitutionArg> infer_arg_vec;
!   std::map<std::string, HirId> param_mappings;
!   for (auto &p : impl_substitutions)
!     {
!       const std::string &symbol = p.get_param_ty ()->get_symbol ();
!       TyTy::TyVar infer_var = TyTy::TyVar::get_implicit_infer_var (locus);
!       TyTy::BaseType *resolved = infer_var.get_tyty ();
!       infer_arg_vec.emplace_back (&p, resolved);
!       param_mappings[symbol] = resolved->get_ref ();
!     }
!   TyTy::SubstitutionArgumentMappings infer_arguments (
!     std::move (infer_arg_vec), {} /*binding_args*/,
!     TyTy::RegionParamList (0) /*regions*/, locus);
  
!   TyTy::BaseType *impl_self_infer
!     = !self->is_concrete ()
! 	? SubstMapperInternal::Resolve (self->clone (), infer_arguments)
! 	: self->clone ();
  
!   // sub the impls trait predicate args with infers:
!   //   SliceIndex<[Y]> -> SliceIndex<[?Y]>
!   const TyTy::TypeBoundPredicate &impl_predicate = predicate;
!   std::vector<TyTy::BaseType *> impl_predicate_args;
!   for (size_t i = 1; i < impl_predicate.get_substs ().size (); i++)
      {
!       auto p = impl_predicate.get_substs ().at (i).get_param_ty ();
!       TyTy::BaseType *r = p->resolve ();
!       if (!r->is_concrete ())
! 	r = SubstMapperInternal::Resolve (r, infer_arguments);
!       impl_predicate_args.push_back (r);
      }
! 
!   // Read the projections own (trait-coord) substs and skip Self at index 0.
!   // The projection's substs match by symbol in handle_substitions, so a
!   // fn-level substitution that binds T won't have walked into the
!   // projections X slot whose resolved value is [T]. Re-apply the
!   // projections own used_arguments to each arg so any stale impl-coord
!   // params inside (the T inside [T]) are followed through to their
!   // current bindings
!   TyTy::SubstitutionArgumentMappings proj_used
!     = proj.get_substitution_arguments ();
!   std::vector<TyTy::BaseType *> proj_args;
!   for (size_t i = 1; i < proj.get_substs ().size (); i++)
      {
!       auto p = proj.get_substs ().at (i).get_param_ty ();
!       TyTy::BaseType *r = p->resolve ();
!       if (!r->is_concrete () && !proj_used.is_empty ())
! 	r = SubstMapperInternal::Resolve (r, proj_used);
!       proj_args.push_back (r);
!     }
  
!   if (impl_predicate_args.size () != proj_args.size ())
!     return TyTy::SubstitutionArgumentMappings::error ();
! 
!   // unify trait args [?Y] -> [{integer}]
!   for (size_t i = 0; i < proj_args.size (); i++)
!     {
!       TyTy::BaseType *proj_arg = proj_args[i];
!       if (impl_predicate_args[i]->get_kind () == TyTy::TypeKind::SLICE
! 	  && proj_arg->get_kind () != TyTy::TypeKind::SLICE)
  	{
! 	  auto &mappings = Analysis::Mappings::get ();
! 	  HirId id = mappings.get_next_hir_id ();
! 	  auto *wrapped
! 	    = new TyTy::SliceType (id, proj_arg->get_locus (),
! 				   TyTy::TyVar (proj_arg->get_ref ()));
! 	  context->insert_implicit_type (id, wrapped);
! 	  proj_arg = wrapped;
  	}
+ 
+       auto *res = unify_site_and (0 /*id*/,
+ 				  TyTy::TyWithLocation (impl_predicate_args[i]),
+ 				  TyTy::TyWithLocation (proj_arg), locus,
+ 				  false /*emit_errors*/, true /*commit_if_ok*/,
+ 				  true /*infer*/, true /*cleanup_on_fail*/,
+ 				  false /*check_bounds*/);
+       if (res->get_kind () == TyTy::TypeKind::ERROR)
+ 	return TyTy::SubstitutionArgumentMappings::error ();
      }
  
!   // unify self Range<{integer}> -> Range<usize>
!   auto *res = unify_site_and (impl->get_mappings ().get_hirid (),
! 			      TyTy::TyWithLocation (proj.get_self ()),
! 			      TyTy::TyWithLocation (impl_self_infer), locus,
! 			      false /*emit_errors*/, true /*commit_if_ok*/,
! 			      true /*infer*/, true /*cleanup_on_fail*/,
! 			      false /*check_bounds*/);
!   if (res->get_kind () == TyTy::TypeKind::ERROR)
!     return TyTy::SubstitutionArgumentMappings::error ();
! 
!   std::vector<TyTy::SubstitutionArg> resolved_args;
!   for (auto &p : impl_substitutions)
      {
!       const std::string &symbol = p.get_param_ty ()->get_symbol ();
!       auto it = param_mappings.find (symbol);
!       if (it == param_mappings.end ())
  	continue;
!       TyTy::BaseType *r = nullptr;
!       bool ok = context->lookup_type (it->second, &r);
        if (!ok)
  	continue;
!       resolved_args.emplace_back (&p, r);
      }
+ 
+   return TyTy::SubstitutionArgumentMappings (std::move (resolved_args),
+ 					     {} /*binding_args*/,
+ 					     TyTy::RegionParamList (0)
+ 					     /*regions*/,
+ 					     locus);
  }
  
! TyTy::SubstitutionArgumentMappings
! AssociatedImplTrait::bind_impl_for_bound (TyTy::BaseType *receiver,
! 					  const TyTy::TypeBoundPredicate &bound,
! 					  location_t locus)
  {
!   // Same shape as bind_impl_for_projection but the receiver/trait-args are
!   // taken from the (binding, bound) pair instead of a ProjectionType.
!   std::vector<TyTy::SubstitutionParamMapping> impl_substitutions;
!   for (auto &generic_param : impl->get_generic_params ())
      {
!       if (generic_param->get_kind () != HIR::GenericParam::GenericKind::TYPE)
! 	continue;
!       TyTy::BaseType *l = nullptr;
!       bool ok
! 	= context->lookup_type (generic_param->get_mappings ().get_hirid (),
! 				&l);
!       if (!ok || l->get_kind () != TyTy::TypeKind::PARAM)
! 	continue;
!       impl_substitutions.emplace_back (static_cast<HIR::TypeParam &> (
! 					 *generic_param),
! 				       static_cast<TyTy::ParamType *> (l));
      }
  
!   std::vector<TyTy::SubstitutionArg> infer_arg_vec;
    std::map<std::string, HirId> param_mappings;
!   for (auto &p : impl_substitutions)
      {
!       const std::string &symbol = p.get_param_ty ()->get_symbol ();
!       TyTy::TyVar infer_var = TyTy::TyVar::get_implicit_infer_var (locus);
!       TyTy::BaseType *resolved = infer_var.get_tyty ();
!       infer_arg_vec.emplace_back (&p, resolved);
!       param_mappings[symbol] = resolved->get_ref ();
      }
    TyTy::SubstitutionArgumentMappings infer_arguments (
!     std::move (infer_arg_vec), {} /*binding_args*/,
!     TyTy::RegionParamList (0) /*regions*/, locus);
  
!   TyTy::BaseType *impl_self_infer
!     = !self->is_concrete ()
! 	? SubstMapperInternal::Resolve (self->clone (), infer_arguments)
! 	: self->clone ();
  
!   const TyTy::TypeBoundPredicate &impl_predicate = predicate;
!   std::vector<TyTy::BaseType *> impl_predicate_args;
!   for (size_t i = 1; i < impl_predicate.get_substs ().size (); i++)
      {
!       auto p = impl_predicate.get_substs ().at (i).get_param_ty ();
!       TyTy::BaseType *r = p->resolve ();
        if (!r->is_concrete ())
! 	r = SubstMapperInternal::Resolve (r, infer_arguments);
!       impl_predicate_args.push_back (r);
      }
  
!   // Trait args from the bound predicate the caller passed in (skip Self).
!   // Apply the bound's own used_arguments so any stale impl-coord params
!   // inside follow through to their current bindings.
!   TyTy::SubstitutionArgumentMappings bound_used
!     = bound.get_substitution_arguments ();
!   std::vector<TyTy::BaseType *> bound_args;
!   for (size_t i = 1; i < bound.get_substs ().size (); i++)
      {
!       auto p = bound.get_substs ().at (i).get_param_ty ();
!       TyTy::BaseType *r = p->resolve ();
!       if (!r->is_concrete () && !bound_used.is_empty ())
! 	r = SubstMapperInternal::Resolve (r, bound_used);
!       bound_args.push_back (r);
      }
  
!   if (impl_predicate_args.size () != bound_args.size ())
!     return TyTy::SubstitutionArgumentMappings::error ();
  
!   for (size_t i = 0; i < bound_args.size (); i++)
      {
!       auto *res = unify_site_and (0 /*id*/,
! 				  TyTy::TyWithLocation (impl_predicate_args[i]),
! 				  TyTy::TyWithLocation (bound_args[i]), locus,
! 				  false /*emit_errors*/, true /*commit_if_ok*/,
! 				  true /*infer*/, true /*cleanup_on_fail*/,
! 				  false /*check_bounds*/);
!       if (res->get_kind () == TyTy::TypeKind::ERROR)
! 	return TyTy::SubstitutionArgumentMappings::error ();
      }
  
!   auto *res = unify_site_and (impl->get_mappings ().get_hirid (),
! 			      TyTy::TyWithLocation (receiver),
! 			      TyTy::TyWithLocation (impl_self_infer), locus,
! 			      false /*emit_errors*/, true /*commit_if_ok*/,
! 			      true /*infer*/, true /*cleanup_on_fail*/,
! 			      false /*check_bounds*/);
!   if (res->get_kind () == TyTy::TypeKind::ERROR)
!     return TyTy::SubstitutionArgumentMappings::error ();
  
!   std::vector<TyTy::SubstitutionArg> resolved_args;
!   for (auto &p : impl_substitutions)
      {
!       const std::string &symbol = p.get_param_ty ()->get_symbol ();
!       auto it = param_mappings.find (symbol);
!       if (it == param_mappings.end ())
  	continue;
!       TyTy::BaseType *r = nullptr;
!       bool ok = context->lookup_type (it->second, &r);
        if (!ok)
  	continue;
!       resolved_args.emplace_back (&p, r);
      }
  
!   return TyTy::SubstitutionArgumentMappings (std::move (resolved_args),
! 					     {} /*binding_args*/,
! 					     TyTy::RegionParamList (0)
! 					     /*regions*/,
! 					     locus);
  }
  
  location_t
diff -Nrcpad gcc-17-20260705/gcc/rust/typecheck/rust-hir-type-check-base.cc gcc-17-20260712/gcc/rust/typecheck/rust-hir-type-check-base.cc
*** gcc-17-20260705/gcc/rust/typecheck/rust-hir-type-check-base.cc	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/typecheck/rust-hir-type-check-base.cc	Sun Jul 12 22:32:11 2026
*************** TypeCheckBase::ResolveGenericParams (
*** 46,51 ****
--- 46,62 ----
  			      substitutions, is_foreign, abi);
  }
  
+ TyTy::TypeBoundPredicate
+ TypeCheckBase::ResolvePredicateFromBound (
+   HIR::TypePath &path,
+   tl::optional<std::reference_wrapper<HIR::Type>> associated_self,
+   BoundPolarity polarity, bool is_qualified_type, bool is_super_trait)
+ {
+   TypeCheckBase ctx;
+   return ctx.get_predicate_from_bound (path, associated_self, polarity,
+ 				       is_qualified_type, is_super_trait);
+ }
+ 
  static void
  walk_types_to_constrain (std::set<HirId> &constrained_symbols,
  			 const TyTy::SubstitutionArgumentMappings &constraints)
*************** TypeCheckBase::resolve_literal (const An
*** 386,392 ****
--- 397,439 ----
  					   TyTy::Region::make_static ());
        }
        break;
+     case HIR::Literal::LitType::C_STRING:
+       {
+ 	// Throw error if C string literal contains null byte
+ 	if (literal.as_string ().find ('\0') != std::string::npos)
+ 	  {
+ 	    rust_error_at (
+ 	      locus, "null characters in C string literals are not supported");
+ 	    infered = new TyTy::ErrorType (expr_mappings.get_hirid (), locus);
+ 	    break;
+ 	  }
+ 
+ 	auto lang_item_defined
+ 	  = mappings.lookup_lang_item (LangItem::Kind::CSTR);
  
+ 	if (!lang_item_defined)
+ 	  {
+ 	    rust_error_at (locus, "unable to find lang item: %<c_str%>");
+ 	    infered = new TyTy::ErrorType (expr_mappings.get_hirid (), locus);
+ 	    break;
+ 	  }
+ 
+ 	DefId cstr_defid = lang_item_defined.value ();
+ 	HIR::Item *item = mappings.lookup_defid (cstr_defid).value ();
+ 
+ 	TyTy::BaseType *item_type = nullptr;
+ 	bool ok = context->lookup_type (item->get_mappings ().get_hirid (),
+ 					&item_type);
+ 
+ 	rust_assert (ok);
+ 	rust_assert (item_type->get_kind () == TyTy::TypeKind::ADT);
+ 
+ 	infered = new TyTy::ReferenceType (expr_mappings.get_hirid (),
+ 					   TyTy::TyVar (item_type->get_ref ()),
+ 					   Mutability::Imm,
+ 					   TyTy::Region::make_static ());
+       }
+       break;
      default:
        rust_unreachable ();
        break;
diff -Nrcpad gcc-17-20260705/gcc/rust/typecheck/rust-hir-type-check-base.h gcc-17-20260712/gcc/rust/typecheck/rust-hir-type-check-base.h
*** gcc-17-20260705/gcc/rust/typecheck/rust-hir-type-check-base.h	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/typecheck/rust-hir-type-check-base.h	Sun Jul 12 22:32:11 2026
*************** public:
*** 38,43 ****
--- 38,49 ----
      std::vector<TyTy::SubstitutionParamMapping> &substitutions, bool is_foreign,
      ABI abi);
  
+   static TyTy::TypeBoundPredicate ResolvePredicateFromBound (
+     HIR::TypePath &path,
+     tl::optional<std::reference_wrapper<HIR::Type>> associated_self,
+     BoundPolarity polarity = BoundPolarity::RegularBound,
+     bool is_qualified_type = false, bool is_super_trait = false);
+ 
  protected:
    TypeCheckBase ();
  
diff -Nrcpad gcc-17-20260705/gcc/rust/typecheck/rust-hir-type-check-expr.cc gcc-17-20260712/gcc/rust/typecheck/rust-hir-type-check-expr.cc
*** gcc-17-20260705/gcc/rust/typecheck/rust-hir-type-check-expr.cc	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/typecheck/rust-hir-type-check-expr.cc	Sun Jul 12 22:32:11 2026
***************
*** 18,23 ****
--- 18,24 ----
  
  #include "optional.h"
  #include "rust-common.h"
+ #include "rust-diagnostics.h"
  #include "rust-hir-expr.h"
  #include "rust-hir-map.h"
  #include "rust-rib.h"
***************
*** 37,43 ****
  #include "rust-compile-base.h"
  #include "rust-tyty-util.h"
  #include "rust-tyty.h"
- #include "tree.h"
  
  namespace Rust {
  namespace Resolver {
--- 38,43 ----
*************** TypeCheckExpr::visit (HIR::TupleExpr &ex
*** 185,190 ****
--- 185,249 ----
  }
  
  void
+ TypeCheckExpr::visit (HIR::BoxExpr &expr)
+ {
+   auto owned_box_defid
+     = mappings.get_lang_item (LangItem::Kind::OWNED_BOX, expr.get_locus ());
+ 
+   HIR::Item *item = mappings.lookup_defid (owned_box_defid).value ();
+   TyTy::BaseType *item_type = nullptr;
+ 
+   bool ok
+     = context->lookup_type (item->get_mappings ().get_hirid (), &item_type);
+   rust_assert (ok);
+   if (item_type->get_kind () != TyTy::TypeKind::ADT)
+     {
+       rust_error_at (item->get_locus (), ErrorCode::E0718,
+ 		     "%qs language item must be applied to a struct",
+ 		     "owned_box");
+       return;
+     }
+   TyTy::ADTType *adt = static_cast<TyTy::ADTType *> (item_type);
+   if (!adt->is_tuple_struct () && !adt->is_struct_struct ())
+     {
+       rust_error_at (item->get_locus (), ErrorCode::E0718,
+ 		     "%qs language item must be applied to a struct",
+ 		     "owned_box");
+       return;
+     }
+ 
+   // this is at least one generic item
+   if (adt->get_num_substitutions () < 1)
+     {
+       rust_error_at (expr.get_locus (),
+ 		     "%qs lang item must be applied to a struct with at least "
+ 		     "1 generic argument",
+ 		     "owned_box");
+       return;
+     }
+ 
+   TyTy::BaseType *inner_ty = TypeCheckExpr::Resolve (expr.get_expr ());
+   if (inner_ty->get_kind () == TyTy::TypeKind::ERROR)
+     {
+       infered = inner_ty;
+       return;
+     }
+ 
+   auto lookup = SubstMapper::InferSubst (adt, expr.get_locus ());
+   rust_assert (lookup->get_kind () == TyTy::TypeKind::ADT);
+   TyTy::ADTType *adt_box = static_cast<TyTy::ADTType *> (lookup);
+ 
+   TyTy::BaseType *infer = adt_box->get_substs ().at (0).get_param_ty ();
+ 
+   unify_site (expr.get_mappings ().get_hirid (),
+ 	      TyTy::TyWithLocation (infer, expr.get_locus ()),
+ 	      TyTy::TyWithLocation (inner_ty, expr.get_locus ()),
+ 	      expr.get_locus ());
+ 
+   infered = adt_box;
+ }
+ 
+ void
  TypeCheckExpr::visit (HIR::ReturnExpr &expr)
  {
    if (!context->have_function_context ())
*************** TypeCheckExpr::visit (HIR::ReturnExpr &e
*** 200,208 ****
  			    ? expr.get_expr ().get_locus ()
  			    : expr.get_locus ();
  
!   TyTy::BaseType *expr_ty = expr.has_return_expr ()
! 			      ? TypeCheckExpr::Resolve (expr.get_expr ())
! 			      : TyTy::TupleType::get_unit_type ();
  
    coercion_site (expr.get_mappings ().get_hirid (),
  		 TyTy::TyWithLocation (fn_return_tyty),
--- 259,281 ----
  			    ? expr.get_expr ().get_locus ()
  			    : expr.get_locus ();
  
!   // Push expected type so the resolver of the return expression
!   // inference before checking its arguments which is needed
!   // for things like:
!   //
!   //    return Try::from_error(...)
!   //
!   // Where Self has to bind from the fn return type before the param
!   // projection can be normalized.
!   TyTy::BaseType *expr_ty;
!   if (expr.has_return_expr ())
!     {
!       context->push_expected_type (fn_return_tyty);
!       expr_ty = TypeCheckExpr::Resolve (expr.get_expr ());
!       context->pop_expected_type ();
!     }
!   else
!     expr_ty = TyTy::TupleType::get_unit_type ();
  
    coercion_site (expr.get_mappings ().get_hirid (),
  		 TyTy::TyWithLocation (fn_return_tyty),
*************** TypeCheckExpr::visit (HIR::CallExpr &exp
*** 275,323 ****
  
    infered = TyTy::TypeCheckCallExpr::go (function_tyty, expr, variant, context);
  
    auto discriminant_type_lookup
      = mappings.lookup_lang_item (LangItem::Kind::DISCRIMINANT_TYPE);
!   if (infered->is<TyTy::PlaceholderType> () && discriminant_type_lookup)
      {
!       const auto &p = *static_cast<const TyTy::PlaceholderType *> (infered);
!       if (p.get_def_id () == discriminant_type_lookup.value ())
! 	{
! 	  // this is a special case where this will actually return the repr of
! 	  // the enum. We dont currently support repr on enum yet to change the
! 	  // discriminant type but the default is always isize. We need to
! 	  // assert this is a generic function with one param
! 	  //
! 	  // fn<BookFormat> (v & T=BookFormat{Paperback) -> <placeholder:>
! 	  //
! 	  // note the default is isize
! 
! 	  bool ok = context->lookup_builtin ("isize", &infered);
! 	  rust_assert (ok);
  
! 	  rust_assert (function_tyty->is<TyTy::FnType> ());
! 	  auto &fn = *static_cast<TyTy::FnType *> (function_tyty);
! 	  rust_assert (fn.has_substitutions ());
! 	  rust_assert (fn.get_num_type_params () == 1);
! 	  auto &mapping = fn.get_substs ().at (0);
! 	  auto param_ty = mapping.get_param_ty ();
  
! 	  if (!param_ty->can_resolve ())
! 	    {
! 	      // this could be a valid error need to test more weird cases and
! 	      // look at rustc
! 	      rust_internal_error_at (expr.get_locus (),
! 				      "something wrong computing return type");
! 	      return;
! 	    }
  
! 	  auto resolved = param_ty->resolve ();
! 	  bool is_adt = resolved->is<TyTy::ADTType> ();
! 	  if (is_adt)
! 	    {
! 	      const auto &adt = *static_cast<TyTy::ADTType *> (resolved);
! 	      infered = adt.get_repr_options ().repr;
! 	      rust_assert (infered != nullptr);
! 	    }
  	}
      }
  }
--- 348,395 ----
  
    infered = TyTy::TypeCheckCallExpr::go (function_tyty, expr, variant, context);
  
+   // Pre-GATS: associated types were PlaceholderType; post-GATS they are
+   // ProjectionType, this hHandle both so the isize special-case still fires
    auto discriminant_type_lookup
      = mappings.lookup_lang_item (LangItem::Kind::DISCRIMINANT_TYPE);
!   bool is_discriminant_type = false;
!   if (discriminant_type_lookup)
      {
!       if (auto *p = infered->try_as<TyTy::PlaceholderType> ())
! 	is_discriminant_type
! 	  = p->get_def_id () == discriminant_type_lookup.value ();
!       else if (auto *p = infered->try_as<TyTy::ProjectionType> ())
! 	is_discriminant_type
! 	  = p->get_item_defid () == discriminant_type_lookup.value ();
!     }
!   if (is_discriminant_type)
!     {
!       // This is a special case: discriminant_value returns the repr of the
!       // enum. We don't currently support repr on enum yet, so the default
!       // is always isize.
!       bool ok = context->lookup_builtin ("isize", &infered);
!       rust_assert (ok);
  
!       rust_assert (function_tyty->is<TyTy::FnType> ());
!       auto &fn = *static_cast<TyTy::FnType *> (function_tyty);
!       rust_assert (fn.has_substitutions ());
!       rust_assert (fn.get_num_type_params () == 1);
!       auto &mapping = fn.get_substs ().at (0);
!       auto param_ty = mapping.get_param_ty ();
  
!       if (!param_ty->can_resolve ())
! 	{
! 	  rust_internal_error_at (expr.get_locus (),
! 				  "something wrong computing return type");
! 	  return;
! 	}
  
!       auto resolved = param_ty->resolve ();
!       if (resolved->is<TyTy::ADTType> ())
! 	{
! 	  const auto &adt = *static_cast<TyTy::ADTType *> (resolved);
! 	  infered = adt.get_repr_options ().repr;
! 	  rust_assert (infered != nullptr);
  	}
      }
  }
*************** TypeCheckExpr::visit (HIR::UnsafeBlockEx
*** 620,629 ****
--- 692,706 ----
  void
  TypeCheckExpr::visit (HIR::BlockExpr &expr)
  {
+   bool has_label = expr.has_label ();
    if (expr.has_label ())
      context->push_new_loop_context (expr.get_mappings ().get_hirid (),
  				    expr.get_locus ());
  
+   // Forward the caller's expected type to the block's tail expression only.
+   TyTy::BaseType *outer_expected = context->peek_expected_type ();
+   context->push_expected_type (nullptr);
+ 
    for (auto &s : expr.get_statements ())
      {
        if (!s->is_item ())
*************** TypeCheckExpr::visit (HIR::BlockExpr &ex
*** 641,646 ****
--- 718,726 ----
        if (resolved == nullptr)
  	{
  	  rust_error_at (s->get_locus (), "failure to resolve type");
+ 	  context->pop_expected_type ();
+ 	  if (has_label)
+ 	    context->pop_loop_context ();
  	  return;
  	}
  
*************** TypeCheckExpr::visit (HIR::BlockExpr &ex
*** 653,675 ****
  	}
      }
  
    if (expr.has_expr ())
-     infered = TypeCheckExpr::Resolve (expr.get_final_expr ())->clone ();
-   else if (expr.is_tail_reachable ())
-     infered = TyTy::TupleType::get_unit_type ();
-   else if (expr.has_label ())
      {
!       TyTy::BaseType *loop_context_type = context->pop_loop_context ();
  
!       bool loop_context_type_infered
! 	= (loop_context_type->get_kind () != TyTy::TypeKind::INFER)
! 	  || ((loop_context_type->get_kind () == TyTy::TypeKind::INFER)
! 	      && (((TyTy::InferType *) loop_context_type)->get_infer_kind ()
  		  != TyTy::InferType::GENERAL));
  
!       infered = loop_context_type_infered ? loop_context_type
! 					  : TyTy::TupleType::get_unit_type ();
      }
    else
      {
        // FIXME this seems wrong
--- 733,782 ----
  	}
      }
  
+   context->pop_expected_type ();
+ 
+   TyTy::BaseType *tail_expr_type = nullptr;
    if (expr.has_expr ())
      {
!       context->push_expected_type (outer_expected);
!       tail_expr_type = TypeCheckExpr::Resolve (expr.get_final_expr ());
!       context->pop_expected_type ();
!     }
  
!   TyTy::BaseType *label_context_type = nullptr;
!   bool label_context_type_infered = false;
!   if (has_label)
!     {
!       label_context_type = context->pop_loop_context ();
! 
!       label_context_type_infered
! 	= (label_context_type->get_kind () != TyTy::TypeKind::INFER)
! 	  || ((label_context_type->get_kind () == TyTy::TypeKind::INFER)
! 	      && (((TyTy::InferType *) label_context_type)->get_infer_kind ()
  		  != TyTy::InferType::GENERAL));
+     }
  
!   if (tail_expr_type != nullptr)
!     {
!       if (label_context_type_infered)
! 	{
! 	  if (tail_expr_type->get_kind () == TyTy::TypeKind::NEVER)
! 	    infered = label_context_type;
! 	  else
! 	    infered = unify_site (
! 	      expr.get_mappings ().get_hirid (),
! 	      TyTy::TyWithLocation (label_context_type),
! 	      TyTy::TyWithLocation (tail_expr_type,
! 				    expr.get_final_expr ().get_locus ()),
! 	      expr.get_locus ());
! 	}
!       else
! 	infered = tail_expr_type;
      }
+   else if (label_context_type_infered)
+     infered = label_context_type;
+   else if (expr.is_tail_reachable ())
+     infered = TyTy::TupleType::get_unit_type ();
    else
      {
        // FIXME this seems wrong
*************** TypeCheckExpr::visit (HIR::FieldAccessEx
*** 1261,1266 ****
--- 1368,1379 ----
  {
    auto struct_base = TypeCheckExpr::Resolve (expr.get_receiver_expr ());
  
+   // Box<T> autoderef
+   if (auto try_struct_base = TyTy::try_get_box_inner_type (struct_base))
+     {
+       struct_base = *try_struct_base;
+     }
+ 
    // FIXME does this require autoderef here?
    if (struct_base->get_kind () == TyTy::TypeKind::REF)
      {
*************** TypeCheckExpr::visit (HIR::MethodCallExp
*** 1468,1474 ****
        return;
      }
  
-   fn->prepare_higher_ranked_bounds ();
    rust_debug_loc (expr.get_locus (), "resolved method call to: {%u} {%s}",
  		  found_candidate.candidate.ty->get_ref (),
  		  found_candidate.candidate.ty->debug_str ().c_str ());
--- 1581,1586 ----
*************** TypeCheckExpr::visit (HIR::MethodCallExp
*** 1493,1502 ****
  	}
  
        if (!infer_arguments.is_empty ())
! 	{
! 	  lookup = SubstMapperInternal::Resolve (lookup, infer_arguments);
! 	  lookup->debug ();
! 	}
      }
  
    // apply any remaining generic arguments
--- 1605,1611 ----
  	}
  
        if (!infer_arguments.is_empty ())
! 	lookup = SubstMapperInternal::Resolve (lookup, infer_arguments);
      }
  
    // apply any remaining generic arguments
*************** TypeCheckExpr::visit (HIR::DereferenceEx
*** 1708,1721 ****
  
    bool is_valid_type = resolved_base->get_kind () == TyTy::TypeKind::REF
  		       || resolved_base->get_kind () == TyTy::TypeKind::POINTER;
!   if (!is_valid_type)
      {
        rust_error_at (expr.get_locus (), "expected reference type got %s",
  		     resolved_base->as_string ().c_str ());
        return;
      }
  
!   if (resolved_base->get_kind () == TyTy::TypeKind::REF)
      {
        TyTy::ReferenceType *ref_base
  	= static_cast<TyTy::ReferenceType *> (resolved_base);
--- 1817,1837 ----
  
    bool is_valid_type = resolved_base->get_kind () == TyTy::TypeKind::REF
  		       || resolved_base->get_kind () == TyTy::TypeKind::POINTER;
! 
!   auto try_owned_box = TyTy::try_get_box_inner_type (resolved_base);
! 
!   if (!is_valid_type && !try_owned_box)
      {
        rust_error_at (expr.get_locus (), "expected reference type got %s",
  		     resolved_base->as_string ().c_str ());
        return;
      }
  
!   if (try_owned_box)
!     {
!       infered = (*try_owned_box)->clone ();
!     }
!   else if (resolved_base->get_kind () == TyTy::TypeKind::REF)
      {
        TyTy::ReferenceType *ref_base
  	= static_cast<TyTy::ReferenceType *> (resolved_base);
*************** TypeCheckExpr::resolve_operator_overload
*** 2138,2144 ****
      }
  
    // we found a valid operator overload
-   fn->prepare_higher_ranked_bounds ();
    rust_debug_loc (expr.get_locus (), "resolved operator overload to: {%u} {%s}",
  		  candidate.candidate.ty->get_ref (),
  		  candidate.candidate.ty->debug_str ().c_str ());
--- 2254,2259 ----
*************** TypeCheckExpr::resolve_fn_trait_call (HI
*** 2287,2298 ****
        return false;
      }
  
!   if (receiver_tyty->get_kind () == TyTy::TypeKind::CLOSURE)
!     {
!       const TyTy::ClosureType &closure
! 	= static_cast<TyTy::ClosureType &> (*receiver_tyty);
!       closure.setup_fn_once_output ();
!     }
  
    auto candidate = *candidates.begin ();
    rust_debug_loc (expr.get_locus (),
--- 2402,2409 ----
        return false;
      }
  
!   // FnOnce::Output is normalized lazily by normalize_projection's closure
!   // special-case; no explicit setup is required here.
  
    auto candidate = *candidates.begin ();
    rust_debug_loc (expr.get_locus (),
*************** TypeCheckExpr::resolve_fn_trait_call (HI
*** 2392,2398 ****
  		      Resolver2_0::Namespace::Types);
  
    // return the result of the function back
!   *result = function_ret_tyty;
  
    return true;
  }
--- 2503,2510 ----
  		      Resolver2_0::Namespace::Types);
  
    // return the result of the function back
!   auto mono = function_ret_tyty->monomorphized_clone ();
!   *result = mono;
  
    return true;
  }
diff -Nrcpad gcc-17-20260705/gcc/rust/typecheck/rust-hir-type-check-expr.h gcc-17-20260712/gcc/rust/typecheck/rust-hir-type-check-expr.h
*** gcc-17-20260705/gcc/rust/typecheck/rust-hir-type-check-expr.h	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/typecheck/rust-hir-type-check-expr.h	Sun Jul 12 22:32:11 2026
*************** public:
*** 80,85 ****
--- 80,86 ----
    void visit (HIR::InlineAsm &expr) override;
    void visit (HIR::LlvmInlineAsm &expr) override;
    void visit (HIR::OffsetOf &expr) override;
+   void visit (HIR::BoxExpr &expr) override;
  
    // TODO
    void visit (HIR::ErrorPropagationExpr &) override {}
diff -Nrcpad gcc-17-20260705/gcc/rust/typecheck/rust-hir-type-check-implitem.cc gcc-17-20260712/gcc/rust/typecheck/rust-hir-type-check-implitem.cc
*** gcc-17-20260705/gcc/rust/typecheck/rust-hir-type-check-implitem.cc	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/typecheck/rust-hir-type-check-implitem.cc	Sun Jul 12 22:32:11 2026
*************** TypeCheckImplItemWithTrait::visit (HIR::
*** 565,574 ****
      = resolved_trait_item.get_raw_item ()->get_hir_trait_item ();
    merge_attributes (type.get_outer_attrs (), *hir_trait_item);
  
    // check the types are compatible
    auto trait_item_type = resolved_trait_item.get_tyty_for_receiver (self);
    if (!types_compatable (TyTy::TyWithLocation (trait_item_type),
! 			 TyTy::TyWithLocation (lookup), type.get_locus (),
  			 true /*emit_errors*/))
      {
        rich_location r (line_table, type.get_locus ());
--- 565,587 ----
      = resolved_trait_item.get_raw_item ()->get_hir_trait_item ();
    merge_attributes (type.get_outer_attrs (), *hir_trait_item);
  
+   // unwrap a ProjectionType that already wraps a concrete
+   if (auto *p = lookup->try_as<TyTy::ProjectionType> ())
+     if (!p->is_trait_position () && p->get () != nullptr
+ 	&& p->get ()->get_kind () != TyTy::TypeKind::PROJECTION)
+       lookup = p->get ();
+ 
+   // The impl alias is itself a projection so the substitution machinery has a
+   // handle to bind the impl's generic arguments to the alias body.
+   auto projection
+     = new TyTy::ProjectionType (type.get_mappings ().get_hirid (), lookup, tref,
+ 				raw_trait_item->get_mappings ().get_defid (),
+ 				substitutions, self);
+ 
    // check the types are compatible
    auto trait_item_type = resolved_trait_item.get_tyty_for_receiver (self);
    if (!types_compatable (TyTy::TyWithLocation (trait_item_type),
! 			 TyTy::TyWithLocation (projection), type.get_locus (),
  			 true /*emit_errors*/))
      {
        rich_location r (line_table, type.get_locus ());
*************** TypeCheckImplItemWithTrait::visit (HIR::
*** 579,593 ****
  		     trait_reference.get_name ().c_str ());
      }
  
-   // its actually a projection, since we need a way to actually bind the
-   // generic substitutions to the type itself
-   TyTy::ProjectionType *projection
-     = new TyTy::ProjectionType (type.get_mappings ().get_hirid (), lookup, tref,
- 				raw_trait_item->get_mappings ().get_defid (),
- 				substitutions);
- 
    context->insert_type (type.get_mappings (), projection);
-   raw_trait_item->associated_type_set (projection);
  }
  
  void
--- 592,598 ----
diff -Nrcpad gcc-17-20260705/gcc/rust/typecheck/rust-hir-type-check-intrinsic.cc gcc-17-20260712/gcc/rust/typecheck/rust-hir-type-check-intrinsic.cc
*** gcc-17-20260705/gcc/rust/typecheck/rust-hir-type-check-intrinsic.cc	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/typecheck/rust-hir-type-check-intrinsic.cc	Sun Jul 12 22:32:11 2026
*************** const std::unordered_map<std::string, In
*** 128,133 ****
--- 128,135 ----
       {1, {IRT::ConstPtrFirstGeneric, IRT::Isize}, IRT::ConstPtrFirstGeneric}},
      // pub fn size_of<T>() -> usize;
      {IValue::SIZE_OF, {1, {}, IRT::Usize}},
+     // pub fn size_of_val<T: ?Sized>(_: *const T) -> usize;
+     {IValue::SIZE_OF_VAL, {1, {IRT::ConstPtrFirstGeneric}, IRT::Usize}},
      // pub fn transmute<T, U>(e: T) -> U;
      {IValue::TRANSMUTE, {2, {IRT::FirstGeneric}, IRT::SecondGeneric}},
      // pub fn add_with_overflow<T: Copy>(x: T, y: T) -> (T, bool);
*************** const std::unordered_map<std::string, In
*** 265,270 ****
--- 267,274 ----
      {IValue::ASSUME, {0, {IRT::Bool}, IRT::Unit}},
      // pub fn min_align_of<T>() -> usize;
      {IValue::MIN_ALIGN_OF, {1, {}, IRT::Usize}},
+     // pub fn min_align_of_val<T: ?Sized>(_: *const T) -> usize;
+     {IValue::MIN_ALIGN_OF_VAL, {1, {IRT::ConstPtrFirstGeneric}, IRT::Usize}},
      // pub fn needs_drop<T>() -> bool;
      {IValue::NEEDS_DROP, {1, {}, IRT::Bool}},
      // pub fn caller_location() -> &'static crate::panic::Location<'static>;
*************** const std::unordered_map<std::string, In
*** 300,305 ****
--- 304,317 ----
      {IValue::FORGET, {1, {IRT::FirstGeneric}, IRT::Unit}},
      // pub fn black_box<T>(mut dummy: T) -> T
      {IValue::BLACK_BOX, {1, {IRT::FirstGeneric}, IRT::FirstGeneric}},
+ 
+     // pub fn arith_offset<T>(dst: *const T, offset: isize) -> *const T;
+     {IValue::ARITH_OFFSET,
+      {1, {IRT::ConstPtrFirstGeneric, IRT::Isize}, IRT::ConstPtrFirstGeneric}},
+     // fn write_bytes<T>(dst: *mut T, val: u8, count: usize)
+     {IValue::WRITE_BYTES,
+      {1, {IRT::MutPtrFirstGeneric, IRT::U8, IRT::Usize}, IRT::Unit}},
+ 
  };
  
  IntrinsicCheckResult
*************** IntrinsicChecker::check_type (const TyTy
*** 480,486 ****
  	return ref->get_base ()->get_kind () == TyTy::TypeKind::STR;
        }
      case IRT::AssocTypePlaceholder:
!       return actual->get_kind () == TyTy::TypeKind::PLACEHOLDER;
  
      case IRT::TupleFirstGenericAndBool:
        {
--- 492,498 ----
  	return ref->get_base ()->get_kind () == TyTy::TypeKind::STR;
        }
      case IRT::AssocTypePlaceholder:
!       return true;
  
      case IRT::TupleFirstGenericAndBool:
        {
diff -Nrcpad gcc-17-20260705/gcc/rust/typecheck/rust-hir-type-check-item.cc gcc-17-20260712/gcc/rust/typecheck/rust-hir-type-check-item.cc
*** gcc-17-20260705/gcc/rust/typecheck/rust-hir-type-check-item.cc	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/typecheck/rust-hir-type-check-item.cc	Sun Jul 12 22:32:11 2026
***************
*** 27,32 ****
--- 27,33 ----
  #include "rust-hir-type-check-expr.h"
  #include "rust-hir-type-check-pattern.h"
  #include "rust-hir-trait-resolve.h"
+ #include "rust-hir-type-check.h"
  #include "rust-identifier.h"
  #include "rust-rib.h"
  #include "rust-session-manager.h"
***************
*** 34,39 ****
--- 35,41 ----
  #include "rust-substitution-mapper.h"
  #include "rust-type-util.h"
  #include "rust-tyty-variance-analysis.h"
+ #include "rust-tyty.h"
  
  namespace Rust {
  namespace Resolver {
*************** TypeCheckItem::ResolveImplBlockSelfWithI
*** 156,164 ****
--- 158,240 ----
    return infer;
  }
  
+ std::vector<TyTy::SubstitutionParamMapping>
+ TypeCheckItem::ResolveImplBlockSubstitutions (HIR::ImplBlock &impl_block,
+ 					      bool &failure_flag)
+ {
+   TypeCheckItem resolver;
+   auto result
+     = resolver.resolve_impl_block_substitutions (impl_block, failure_flag);
+   return std::move (result.first);
+ }
+ 
+ void
+ TypeCheckItem::validate_trait_impl_block (
+   const TyTy::TypeBoundPredicate &specified_bound,
+   std::vector<const TraitItemReference *> trait_item_refs,
+   TraitReference *trait_reference, HIR::ImplBlock &impl_block,
+   TyTy::BaseType *self,
+   std::vector<TyTy::SubstitutionParamMapping> &substitutions)
+ {
+   bool impl_block_missing_trait_items
+     = !specified_bound.is_error ()
+       && trait_reference->size () != trait_item_refs.size ();
+   if (impl_block_missing_trait_items
+       && impl_block.get_polarity () == BoundPolarity::RegularBound)
+     {
+       // filter the missing impl_items
+       std::vector<std::reference_wrapper<const TraitItemReference>>
+ 	missing_trait_items;
+       for (const auto &trait_item_ref : trait_reference->get_trait_items ())
+ 	{
+ 	  bool found = false;
+ 	  for (auto implemented_trait_item : trait_item_refs)
+ 	    {
+ 	      std::string trait_item_name = trait_item_ref.get_identifier ();
+ 	      std::string impl_item_name
+ 		= implemented_trait_item->get_identifier ();
+ 	      found = trait_item_name == impl_item_name;
+ 	      if (found)
+ 		break;
+ 	    }
+ 
+ 	  bool is_required_trait_item = !trait_item_ref.is_optional ();
+ 	  if (!found && is_required_trait_item)
+ 	    missing_trait_items.emplace_back (trait_item_ref);
+ 	}
+ 
+       if (!missing_trait_items.empty ())
+ 	{
+ 	  std::string missing_items_buf;
+ 	  rich_location r (line_table, impl_block.get_locus ());
+ 	  for (size_t i = 0; i < missing_trait_items.size (); i++)
+ 	    {
+ 	      bool has_more = (i + 1) < missing_trait_items.size ();
+ 	      const TraitItemReference &missing_trait_item
+ 		= missing_trait_items.at (i);
+ 	      missing_items_buf += missing_trait_item.get_identifier ()
+ 				   + (has_more ? ", " : "");
+ 	      r.add_range (missing_trait_item.get_locus ());
+ 	    }
+ 
+ 	  rust_error_at (r, ErrorCode::E0046,
+ 			 "missing %s in implementation of trait %qs",
+ 			 missing_items_buf.c_str (),
+ 			 trait_reference->get_name ().c_str ());
+ 	}
+     }
+ }
+ 
  void
  TypeCheckItem::visit (HIR::TypeAlias &alias)
  {
+   auto lifetime_pin = context->push_clean_lifetime_resolver ();
+ 
+   std::vector<TyTy::SubstitutionParamMapping> substitutions;
+   if (alias.has_generics ())
+     resolve_generic_params (HIR::Item::ItemKind::TypeAlias, alias.get_locus (),
+ 			    alias.get_generic_params (), substitutions);
+ 
    TyTy::BaseType *actual_type
      = TypeCheckType::Resolve (alias.get_type_aliased ());
  
*************** void
*** 249,254 ****
--- 325,331 ----
  TypeCheckItem::visit (HIR::StructStruct &struct_decl)
  {
    auto lifetime_pin = context->push_clean_lifetime_resolver ();
+   auto &mappings = Analysis::Mappings::get ();
  
    std::vector<TyTy::SubstitutionParamMapping> substitutions;
    if (struct_decl.has_generics ())
*************** TypeCheckItem::visit (HIR::StructStruct
*** 267,272 ****
--- 344,357 ----
      {
        TyTy::BaseType *field_type
  	= TypeCheckType::Resolve (field.get_field_type ());
+       auto infer_type = field_type->contains_infer ();
+       if (infer_type)
+ 	{
+ 	  rust_error_at (mappings.lookup_location (infer_type->get_ref ()),
+ 			 "the placeholder %<_%> is not allowed within types on "
+ 			 "item signatures for structs");
+ 	  return;
+ 	}
        auto *ty_field
  	= new TyTy::StructFieldType (field.get_mappings ().get_hirid (),
  				     field.get_field_name ().as_string (),
*************** TypeCheckItem::visit (HIR::Enum &enum_de
*** 336,344 ****
      {
        TyTy::VariantDef *field_type
  	= TypeCheckEnumItem::Resolve (*variant, discriminant_value);
! 
!       discriminant_value++;
!       variants.push_back (field_type);
      }
  
    // Check for zero-variant enum compatibility
--- 421,431 ----
      {
        TyTy::VariantDef *field_type
  	= TypeCheckEnumItem::Resolve (*variant, discriminant_value);
!       if (field_type)
! 	{
! 	  discriminant_value++;
! 	  variants.push_back (field_type);
! 	}
      }
  
    // Check for zero-variant enum compatibility
*************** TypeCheckItem::visit (HIR::ConstantItem
*** 472,487 ****
  void
  TypeCheckItem::visit (HIR::ImplBlock &impl_block)
  {
    auto binder_pin = context->push_clean_lifetime_resolver (true);
  
!   TraitReference *trait_reference = &TraitReference::error_node ();
!   if (impl_block.has_trait_ref ())
      {
!       HIR::TypePath &ref = impl_block.get_trait_ref ();
!       trait_reference = TraitResolver::Resolve (ref);
!       if (trait_reference->is_error ())
! 	return;
      }
  
    bool failed_flag = false;
    auto result = resolve_impl_block_substitutions (impl_block, failed_flag);
--- 559,596 ----
  void
  TypeCheckItem::visit (HIR::ImplBlock &impl_block)
  {
+   if (impl_block.has_trait_ref ())
+     resolve_trait_impl_block (impl_block);
+   else
+     resolve_impl_block (impl_block);
+ }
+ 
+ void
+ TypeCheckItem::resolve_impl_block (HIR::ImplBlock &impl_block)
+ {
    auto binder_pin = context->push_clean_lifetime_resolver (true);
  
!   bool failed_flag = false;
!   auto result = resolve_impl_block_substitutions (impl_block, failed_flag);
!   if (failed_flag)
      {
!       infered = new TyTy::ErrorType (impl_block.get_mappings ().get_hirid ());
!       return;
      }
+   std::vector<TyTy::SubstitutionParamMapping> substitutions
+     = std::move (result.first);
+   TyTy::RegionConstraints region_constraints = std::move (result.second);
+ 
+   TyTy::BaseType *self = resolve_impl_block_self (impl_block);
+ 
+   for (auto &impl_item : impl_block.get_impl_items ())
+     TypeCheckImplItem::Resolve (impl_block, *impl_item, self, substitutions);
+ }
+ 
+ void
+ TypeCheckItem::resolve_trait_impl_block (HIR::ImplBlock &impl_block)
+ {
+   auto binder_pin = context->push_clean_lifetime_resolver (true);
  
    bool failed_flag = false;
    auto result = resolve_impl_block_substitutions (impl_block, failed_flag);
*************** TypeCheckItem::visit (HIR::ImplBlock &im
*** 494,509 ****
      = std::move (result.first);
    TyTy::RegionConstraints region_constraints = std::move (result.second);
  
    TyTy::BaseType *self = resolve_impl_block_self (impl_block);
  
!   // resolve each impl_item
    for (auto &impl_item : impl_block.get_impl_items ())
      {
!       TypeCheckImplItem::Resolve (impl_block, *impl_item, self, substitutions);
      }
  
!   // validate the impl items
!   validate_trait_impl_block (trait_reference, impl_block, self, substitutions);
  }
  
  TyTy::BaseType *
--- 603,701 ----
      = std::move (result.first);
    TyTy::RegionConstraints region_constraints = std::move (result.second);
  
+   auto specified_bound = TyTy::TypeBoundPredicate::error ();
+   TraitReference *trait_reference = &TraitReference::error_node ();
    TyTy::BaseType *self = resolve_impl_block_self (impl_block);
  
!   HIR::TypePath &ref = impl_block.get_trait_ref ();
!   trait_reference = TraitResolver::Resolve (ref);
!   if (trait_reference->is_error ())
!     return;
! 
!   // we don't error out here see: gcc/testsuite/rust/compile/traits2.rs
!   // for example
!   specified_bound = get_predicate_from_bound (ref, impl_block.get_type (),
! 					      impl_block.get_polarity ());
! 
!   // need to check that if this specified bound has super traits does this
!   // Self implement them?
!   specified_bound.validate_type_implements_super_traits (
!     *self, impl_block.get_type (), impl_block.get_trait_ref ());
! 
!   std::map<DefId, AssocTypeEntry> assoc_types_by_trait_item;
!   std::vector<const TraitItemReference *> trait_item_refs;
!   ResolveImplTraitAssociatedTypes (context, impl_block, specified_bound, self,
! 				   substitutions, assoc_types_by_trait_item,
! 				   trait_item_refs);
! 
!   ImplTraitContextFrame frame{trait_reference, self,
! 			      std::move (assoc_types_by_trait_item)};
!   ImplTraitFrameGuard guard (frame);
    for (auto &impl_item : impl_block.get_impl_items ())
      {
!       bool is_type_alias = impl_item->get_impl_item_type ()
! 			   == HIR::ImplItem::ImplItemType::TYPE_ALIAS;
!       if (is_type_alias)
! 	continue;
! 
!       auto trait_item_ref
! 	= TypeCheckImplItemWithTrait::Resolve (impl_block, *impl_item, self,
! 					       specified_bound, substitutions);
!       if (!trait_item_ref.is_error ())
! 	trait_item_refs.push_back (trait_item_ref.get_raw_item ());
      }
  
!   validate_trait_impl_block (specified_bound, trait_item_refs, trait_reference,
! 			     impl_block, self, substitutions);
! 
!   AssociatedImplTrait associated (trait_reference, specified_bound, &impl_block,
! 				  self, frame);
!   context->insert_associated_trait_impl (
!     impl_block.get_mappings ().get_hirid (), std::move (associated));
!   context->insert_associated_impl_mapping (
!     trait_reference->get_mappings ().get_hirid (), self,
!     impl_block.get_mappings ().get_hirid ());
! }
! 
! void
! TypeCheckItem::ResolveImplTraitAssociatedTypes (
!   TypeCheckContext *context, HIR::ImplBlock &impl_block,
!   TyTy::TypeBoundPredicate &specified_bound, TyTy::BaseType *self,
!   std::vector<TyTy::SubstitutionParamMapping> &substitutions,
!   std::map<DefId, AssocTypeEntry> &assoc_types_by_trait_item,
!   std::vector<const TraitItemReference *> &trait_item_refs)
! {
!   for (auto &impl_item : impl_block.get_impl_items ())
!     {
!       bool is_type_alias = impl_item->get_impl_item_type ()
! 			   == HIR::ImplItem::ImplItemType::TYPE_ALIAS;
!       if (!is_type_alias)
! 	continue;
! 
!       rust_debug_loc (impl_item->get_locus (), "RESOLVE ITEM 1");
!       self->debug ();
!       auto trait_item_ref
! 	= TypeCheckImplItemWithTrait::Resolve (impl_block, *impl_item, self,
! 					       specified_bound, substitutions);
!       rust_debug_loc (impl_item->get_locus (), "RESOLVE ITEM 2");
!       if (!trait_item_ref.is_error ())
! 	{
! 	  const TraitItemReference *tiref = trait_item_ref.get_raw_item ();
! 	  trait_item_refs.push_back (tiref);
! 
! 	  DefId impl_item_defid = impl_item->get_impl_mappings ().get_defid ();
! 	  DefId trait_item_defid = tiref->get_mappings ().get_defid ();
! 	  TyTy::BaseType *impl_item_ty;
! 
! 	  bool ok = context->lookup_type (
! 	    impl_item->get_impl_mappings ().get_hirid (), &impl_item_ty);
! 	  rust_assert (ok);
! 
! 	  AssocTypeEntry entry
! 	    = {trait_item_defid, impl_item_defid, impl_item_ty};
! 	  assoc_types_by_trait_item[trait_item_defid] = std::move (entry);
! 	}
!     }
  }
  
  TyTy::BaseType *
*************** TypeCheckItem::visit (HIR::Function &fun
*** 549,559 ****
      {
        auto resolved = TypeCheckType::Resolve (function.get_return_type ());
        if (resolved->get_kind () == TyTy::TypeKind::ERROR)
! 	{
! 	  rust_error_at (function.get_locus (),
! 			 "failed to resolve return type");
! 	  return;
! 	}
  
        ret_type = resolved->clone ();
        ret_type->set_ref (
--- 741,747 ----
      {
        auto resolved = TypeCheckType::Resolve (function.get_return_type ());
        if (resolved->get_kind () == TyTy::TypeKind::ERROR)
! 	return;
  
        ret_type = resolved->clone ();
        ret_type->set_ref (
*************** TypeCheckItem::visit (HIR::Module &modul
*** 655,660 ****
--- 843,850 ----
  void
  TypeCheckItem::visit (HIR::Trait &trait)
  {
+   auto lifetime_pin = context->push_clean_lifetime_resolver ();
+ 
    if (trait.has_type_param_bounds ())
      {
        for (auto &tp_bound : trait.get_type_param_bounds ())
*************** TypeCheckItem::resolve_impl_block_substi
*** 736,747 ****
      {
        auto &ref = impl_block.get_trait_ref ();
        trait_reference = TraitResolver::Resolve (ref);
!       rust_assert (!trait_reference->is_error ());
! 
!       // we don't error out here see: gcc/testsuite/rust/compile/traits2.rs
!       // for example
!       specified_bound = get_predicate_from_bound (ref, impl_block.get_type (),
! 						  impl_block.get_polarity ());
      }
  
    TyTy::BaseType *self = TypeCheckType::Resolve (impl_block.get_type ());
--- 926,939 ----
      {
        auto &ref = impl_block.get_trait_ref ();
        trait_reference = TraitResolver::Resolve (ref);
!       if (!trait_reference->is_error ())
! 	{
! 	  // we don't error out here see: gcc/testsuite/rust/compile/traits2.rs
! 	  // for example
! 	  specified_bound
! 	    = get_predicate_from_bound (ref, impl_block.get_type (),
! 					impl_block.get_polarity ());
! 	}
      }
  
    TyTy::BaseType *self = TypeCheckType::Resolve (impl_block.get_type ());
*************** TypeCheckItem::resolve_impl_block_substi
*** 770,878 ****
    return {substitutions, region_constraints};
  }
  
- void
- TypeCheckItem::validate_trait_impl_block (
-   TraitReference *trait_reference, HIR::ImplBlock &impl_block,
-   TyTy::BaseType *self,
-   std::vector<TyTy::SubstitutionParamMapping> &substitutions)
- {
-   auto specified_bound = TyTy::TypeBoundPredicate::error ();
-   if (impl_block.has_trait_ref ())
-     {
-       auto &ref = impl_block.get_trait_ref ();
-       trait_reference = TraitResolver::Resolve (ref);
-       if (trait_reference->is_error ())
- 	return;
- 
-       // we don't error out here see: gcc/testsuite/rust/compile/traits2.rs
-       // for example
-       specified_bound = get_predicate_from_bound (ref, impl_block.get_type (),
- 						  impl_block.get_polarity ());
- 
-       // need to check that if this specified bound has super traits does this
-       // Self
-       // implement them?
-       specified_bound.validate_type_implements_super_traits (
- 	*self, impl_block.get_type (), impl_block.get_trait_ref ());
-     }
- 
-   bool is_trait_impl_block = !trait_reference->is_error ();
-   std::vector<const TraitItemReference *> trait_item_refs;
-   for (auto &impl_item : impl_block.get_impl_items ())
-     {
-       if (!specified_bound.is_error ())
- 	{
- 	  auto trait_item_ref
- 	    = TypeCheckImplItemWithTrait::Resolve (impl_block, *impl_item, self,
- 						   specified_bound,
- 						   substitutions);
- 	  if (!trait_item_ref.is_error ())
- 	    trait_item_refs.push_back (trait_item_ref.get_raw_item ());
- 	}
-     }
- 
-   bool impl_block_missing_trait_items
-     = !specified_bound.is_error ()
-       && trait_reference->size () != trait_item_refs.size ();
-   if (impl_block_missing_trait_items
-       && impl_block.get_polarity () == BoundPolarity::RegularBound)
-     {
-       // filter the missing impl_items
-       std::vector<std::reference_wrapper<const TraitItemReference>>
- 	missing_trait_items;
-       for (const auto &trait_item_ref : trait_reference->get_trait_items ())
- 	{
- 	  bool found = false;
- 	  for (auto implemented_trait_item : trait_item_refs)
- 	    {
- 	      std::string trait_item_name = trait_item_ref.get_identifier ();
- 	      std::string impl_item_name
- 		= implemented_trait_item->get_identifier ();
- 	      found = trait_item_name == impl_item_name;
- 	      if (found)
- 		break;
- 	    }
- 
- 	  bool is_required_trait_item = !trait_item_ref.is_optional ();
- 	  if (!found && is_required_trait_item)
- 	    missing_trait_items.emplace_back (trait_item_ref);
- 	}
- 
-       if (!missing_trait_items.empty ())
- 	{
- 	  std::string missing_items_buf;
- 	  rich_location r (line_table, impl_block.get_locus ());
- 	  for (size_t i = 0; i < missing_trait_items.size (); i++)
- 	    {
- 	      bool has_more = (i + 1) < missing_trait_items.size ();
- 	      const TraitItemReference &missing_trait_item
- 		= missing_trait_items.at (i);
- 	      missing_items_buf += missing_trait_item.get_identifier ()
- 				   + (has_more ? ", " : "");
- 	      r.add_range (missing_trait_item.get_locus ());
- 	    }
- 
- 	  rust_error_at (r, ErrorCode::E0046,
- 			 "missing %s in implementation of trait %qs",
- 			 missing_items_buf.c_str (),
- 			 trait_reference->get_name ().c_str ());
- 	}
-     }
- 
-   if (is_trait_impl_block)
-     {
-       trait_reference->clear_associated_types ();
- 
-       AssociatedImplTrait associated (trait_reference, specified_bound,
- 				      &impl_block, self, context);
-       context->insert_associated_trait_impl (
- 	impl_block.get_mappings ().get_hirid (), std::move (associated));
-       context->insert_associated_impl_mapping (
- 	trait_reference->get_mappings ().get_hirid (), self,
- 	impl_block.get_mappings ().get_hirid ());
-     }
- }
- 
  TyTy::BaseType *
  TypeCheckItem::resolve_impl_block_self (HIR::ImplBlock &impl_block)
  {
--- 962,967 ----
diff -Nrcpad gcc-17-20260705/gcc/rust/typecheck/rust-hir-type-check-item.h gcc-17-20260712/gcc/rust/typecheck/rust-hir-type-check-item.h
*** gcc-17-20260705/gcc/rust/typecheck/rust-hir-type-check-item.h	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/typecheck/rust-hir-type-check-item.h	Sun Jul 12 22:32:11 2026
*************** public:
*** 39,44 ****
--- 39,55 ----
      HIR::ImplBlock &impl, location_t locus,
      TyTy::SubstitutionArgumentMappings *infer_arguments);
  
+   static std::vector<TyTy::SubstitutionParamMapping>
+   ResolveImplBlockSubstitutions (HIR::ImplBlock &impl_block,
+ 				 bool &failure_flag);
+ 
+   static void ResolveImplTraitAssociatedTypes (
+     TypeCheckContext *context, HIR::ImplBlock &impl_block,
+     TyTy::TypeBoundPredicate &specified_bound, TyTy::BaseType *self,
+     std::vector<TyTy::SubstitutionParamMapping> &substitutions,
+     std::map<DefId, AssocTypeEntry> &assoc_types_by_trait_item,
+     std::vector<const TraitItemReference *> &trait_item_refs);
+ 
    void visit (HIR::Module &module) override;
    void visit (HIR::Function &function) override;
    void visit (HIR::TypeAlias &alias) override;
*************** public:
*** 57,68 ****
--- 68,84 ----
    void visit (HIR::UseDeclaration &) override {}
  
  protected:
+   void resolve_impl_block (HIR::ImplBlock &impl_block);
+   void resolve_trait_impl_block (HIR::ImplBlock &impl_block);
+ 
    std::pair<std::vector<TyTy::SubstitutionParamMapping>,
  	    TyTy::RegionConstraints>
    resolve_impl_block_substitutions (HIR::ImplBlock &impl_block,
  				    bool &failure_flag);
  
    void validate_trait_impl_block (
+     const TyTy::TypeBoundPredicate &specified_bound,
+     std::vector<const TraitItemReference *> trait_item_refs,
      TraitReference *trait_reference, HIR::ImplBlock &impl_block,
      TyTy::BaseType *self,
      std::vector<TyTy::SubstitutionParamMapping> &substitutions);
diff -Nrcpad gcc-17-20260705/gcc/rust/typecheck/rust-hir-type-check-path.cc gcc-17-20260712/gcc/rust/typecheck/rust-hir-type-check-path.cc
*** gcc-17-20260705/gcc/rust/typecheck/rust-hir-type-check-path.cc	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/typecheck/rust-hir-type-check-path.cc	Sun Jul 12 22:32:11 2026
*************** TypeCheckExpr::visit (HIR::QualifiedPath
*** 94,101 ****
      = lookup_associated_impl_block (specified_bound, root);
    if (associated_impl_trait != nullptr)
      {
-       associated_impl_trait->setup_associated_types (root, specified_bound);
- 
        for (auto &i :
  	   associated_impl_trait->get_impl_block ()->get_impl_items ())
  	{
--- 94,99 ----
*************** TypeCheckExpr::resolve_segments (NodeId
*** 480,501 ****
  
        if (associated_impl_block != nullptr && !receiver_is_dyn)
  	{
! 	  // associated types
! 	  HirId impl_block_id
! 	    = associated_impl_block->get_mappings ().get_hirid ();
! 
! 	  AssociatedImplTrait *associated = nullptr;
! 	  bool found_impl_trait
! 	    = context->lookup_associated_trait_impl (impl_block_id,
! 						     &associated);
! 
  	  auto mappings = TyTy::SubstitutionArgumentMappings::error ();
  	  TyTy::BaseType *impl_block_ty
  	    = TypeCheckItem::ResolveImplBlockSelfWithInference (
  	      *associated_impl_block, seg.get_locus (), &mappings);
  
- 	  // we need to apply the arguments to the segment type so they get
- 	  // unified properly
  	  if (!mappings.is_error ())
  	    tyseg = SubstMapperInternal::Resolve (tyseg, mappings);
  
--- 478,490 ----
  
        if (associated_impl_block != nullptr && !receiver_is_dyn)
  	{
! 	  // unify the segments receiver against the impls self so
! 	  // infer vars on either side get pinned
  	  auto mappings = TyTy::SubstitutionArgumentMappings::error ();
  	  TyTy::BaseType *impl_block_ty
  	    = TypeCheckItem::ResolveImplBlockSelfWithInference (
  	      *associated_impl_block, seg.get_locus (), &mappings);
  
  	  if (!mappings.is_error ())
  	    tyseg = SubstMapperInternal::Resolve (tyseg, mappings);
  
*************** TypeCheckExpr::resolve_segments (NodeId
*** 503,526 ****
  				     TyTy::TyWithLocation (prev_segment),
  				     TyTy::TyWithLocation (impl_block_ty),
  				     seg.get_locus ());
! 	  bool ok = prev_segment->get_kind () != TyTy::TypeKind::ERROR;
! 	  if (!ok)
  	    return;
- 
- 	  if (found_impl_trait)
- 	    {
- 	      // we need to setup with apropriate bounds
- 	      HIR::TypePath &bound_path
- 		= associated->get_impl_block ()->get_trait_ref ();
- 	      const auto &trait_ref = *TraitResolver::Resolve (bound_path);
- 	      rust_assert (!trait_ref.is_error ());
- 
- 	      const auto &predicate
- 		= impl_block_ty->lookup_predicate (trait_ref.get_defid ());
- 	      if (!predicate.is_error ())
- 		associated->setup_associated_types (prev_segment, predicate,
- 						    nullptr, false);
- 	    }
  	}
  
        if (seg.has_generic_args ())
--- 492,499 ----
  				     TyTy::TyWithLocation (prev_segment),
  				     TyTy::TyWithLocation (impl_block_ty),
  				     seg.get_locus ());
! 	  if (prev_segment->get_kind () == TyTy::TypeKind::ERROR)
  	    return;
  	}
  
        if (seg.has_generic_args ())
diff -Nrcpad gcc-17-20260705/gcc/rust/typecheck/rust-hir-type-check-stmt.cc gcc-17-20260712/gcc/rust/typecheck/rust-hir-type-check-stmt.cc
*** gcc-17-20260705/gcc/rust/typecheck/rust-hir-type-check-stmt.cc	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/typecheck/rust-hir-type-check-stmt.cc	Sun Jul 12 22:32:11 2026
*************** TypeCheckStmt::visit (HIR::LetStmt &stmt
*** 82,93 ****
--- 82,118 ----
    infered = TyTy::TupleType::get_unit_type ();
  
    auto &stmt_pattern = stmt.get_pattern ();
+ 
+   // Resolve the type annotation before the init expression so the normal
+   // coercion site below can check the init against the declared type.
+   TyTy::BaseType *specified_ty = nullptr;
+   location_t specified_ty_locus = UNKNOWN_LOCATION;
+   if (stmt.has_type ())
+     {
+       specified_ty = TypeCheckType::Resolve (stmt.get_type ());
+       specified_ty_locus = stmt.get_type ().get_locus ();
+     }
+ 
    TyTy::BaseType *init_expr_ty = nullptr;
    location_t init_expr_locus = UNKNOWN_LOCATION;
    if (stmt.has_init_expr ())
      {
        init_expr_locus = stmt.get_init_expr ().get_locus ();
+ 
+       // Try blocks have a block whose tail expression is:
+       //
+       //     Try::from_ok(tail)
+       //
+       // We can forward the annotated let type to block initializers so
+       // the block can pass it to its tail expression
+       bool push_expected = specified_ty != nullptr
+ 			   && stmt.get_init_expr ().get_expression_type ()
+ 				== HIR::Expr::ExprType::Block;
+       if (push_expected)
+ 	context->push_expected_type (specified_ty);
        init_expr_ty = TypeCheckExpr::Resolve (stmt.get_init_expr ());
+       if (push_expected)
+ 	context->pop_expected_type ();
        if (init_expr_ty->get_kind () == TyTy::TypeKind::ERROR)
  	return;
  
*************** TypeCheckStmt::visit (HIR::LetStmt &stmt
*** 95,108 ****
  	stmt_pattern.get_mappings ().get_hirid ());
      }
  
-   TyTy::BaseType *specified_ty = nullptr;
-   location_t specified_ty_locus;
-   if (stmt.has_type ())
-     {
-       specified_ty = TypeCheckType::Resolve (stmt.get_type ());
-       specified_ty_locus = stmt.get_type ().get_locus ();
-     }
- 
    // let x:i32 = 123;
    if (specified_ty != nullptr && init_expr_ty != nullptr)
      {
--- 120,125 ----
diff -Nrcpad gcc-17-20260705/gcc/rust/typecheck/rust-hir-type-check-type.cc gcc-17-20260712/gcc/rust/typecheck/rust-hir-type-check-type.cc
*** gcc-17-20260705/gcc/rust/typecheck/rust-hir-type-check-type.cc	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/typecheck/rust-hir-type-check-type.cc	Sun Jul 12 22:32:11 2026
*************** TypeCheckType::visit (HIR::TupleType &tu
*** 140,147 ****
  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
    bool wasBigSelf = false;
--- 140,145 ----
*************** TypeCheckType::visit (HIR::TypePath &pat
*** 171,176 ****
--- 169,179 ----
  			offset, path_type, path.get_mappings (),
  			path.get_locus (), wasBigSelf);
  
+   if (auto p = translated->try_as<TyTy::ProjectionType> ())
+     translated
+       = normalize_projection (p, path.get_locus (), false /*emit errors*/,
+ 			      false /*unify self*/);
+ 
    rust_debug_loc (path.get_locus (), "resolved type-path to: [%s]",
  		  translated->debug_str ().c_str ());
  }
*************** TypeCheckType::visit (HIR::QualifiedPath
*** 234,290 ****
        return;
      }
  
!   // we try to look for the real impl item if possible
!   TyTy::SubstitutionArgumentMappings args
!     = TyTy::SubstitutionArgumentMappings::error ();
!   HIR::ImplItem *impl_item = nullptr;
!   if (root->is_concrete ())
!     {
!       // lookup the associated impl trait for this if we can (it might be
!       // generic)
!       AssociatedImplTrait *associated_impl_trait
! 	= lookup_associated_impl_block (specified_bound, root);
!       if (associated_impl_trait != nullptr)
! 	{
! 	  associated_impl_trait->setup_associated_types (root, specified_bound,
! 							 &args);
! 
! 	  for (auto &i :
! 	       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)
! 		{
! 		  impl_item = i.get ();
! 		  break;
! 		}
! 	    }
! 	}
!     }
! 
!   if (impl_item == nullptr)
!     {
!       // this may be valid as there could be a default trait implementation here
!       // and we dont need to worry if the trait item is actually implemented or
!       // not because this will have already been validated as part of the trait
!       // impl block
!       translated = item->get_tyty_for_receiver (root);
!     }
    else
!     {
!       HirId impl_item_id = impl_item->get_impl_mappings ().get_hirid ();
!       bool ok = query_type (impl_item_id, &translated);
!       if (!ok)
! 	return;
! 
!       if (!args.is_error ())
! 	{
! 	  // apply the args
! 	  translated = SubstMapperInternal::Resolve (translated, args);
! 	}
!     }
  
    // turbo-fish segment path::<ty>
    if (item_seg.get_type () == HIR::TypePathSegment::SegmentType::GENERIC)
--- 237,253 ----
        return;
      }
  
!   // Build projection via the predicates own rebasing helper so the
!   // projection's substitutions are populated with the trait-coord args from
!   // the qualified path:
!   //   (<Bar<i32> as Foo<i32>>::A -> Projection Self=Bar<i32>, T=i32)
!   TyTy::BaseType *rebased_item = item->get_tyty_for_receiver (root);
!   if (auto *proj = rebased_item->try_as<TyTy::ProjectionType> ())
!     translated
!       = normalize_projection (proj, path.get_locus (), false /*emit errors*/,
! 			      false /*unify self*/);
    else
!     translated = rebased_item;
  
    // turbo-fish segment path::<ty>
    if (item_seg.get_type () == HIR::TypePathSegment::SegmentType::GENERIC)
*************** TypeCheckType::visit (HIR::QualifiedPath
*** 308,313 ****
--- 271,281 ----
  				    &generic_seg.get_generic_args (),
  				    context->regions_from_generic_args (
  				      generic_seg.get_generic_args ()));
+ 
+ 	  // unwrap the sweets
+ 	  if (auto *proj = translated->try_as<TyTy::ProjectionType> ())
+ 	    if (!proj->is_trait_position () && proj->get () != nullptr)
+ 	      translated = proj->get ();
  	}
      }
  
*************** TypeCheckType::resolve_segments (
*** 588,594 ****
  					ignore_mandatory_trait_items);
  	      if (candidates.size () == 0)
  		{
- 		  prev_segment->debug ();
  		  rust_error_at (
  		    seg->get_locus (),
  		    "failed to resolve path segment using an impl Probe");
--- 556,561 ----
diff -Nrcpad gcc-17-20260705/gcc/rust/typecheck/rust-hir-type-check.h gcc-17-20260712/gcc/rust/typecheck/rust-hir-type-check.h
*** gcc-17-20260705/gcc/rust/typecheck/rust-hir-type-check.h	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/typecheck/rust-hir-type-check.h	Sun Jul 12 22:32:11 2026
***************
*** 22,27 ****
--- 22,28 ----
  #include "rust-hir-map.h"
  #include "rust-mapping-common.h"
  #include "rust-tyty.h"
+ #include "rust-hir-impl-trait-context.h"
  #include "rust-hir-trait-reference.h"
  #include "rust-stacked-contexts.h"
  #include "rust-autoderef.h"
*************** public:
*** 220,225 ****
--- 221,230 ----
  			 TyTy::BaseType *return_type);
    void pop_return_type ();
  
+   void push_expected_type (TyTy::BaseType *expected);
+   void pop_expected_type ();
+   TyTy::BaseType *peek_expected_type () const;
+ 
    StackedContexts<TypeCheckBlockContextItem> &block_context ();
  
    void iterate (std::function<bool (HirId, TyTy::BaseType *)> cb);
*************** public:
*** 232,237 ****
--- 237,250 ----
  
    void swap_head_loop_context (TyTy::BaseType *val);
  
+   bool
+   find_matching_impl_trait_frame (const TraitReference &tref,
+ 				  struct ImplTraitContextFrame *find) const;
+   bool have_impl_trait_context () const;
+   void push_impl_trait_context (struct ImplTraitContextFrame frame);
+   struct ImplTraitContextFrame pop_impl_trait_context ();
+   struct ImplTraitContextFrame peek_impl_trait_context ();
+ 
    void insert_trait_reference (DefId id, TraitReference &&ref);
    bool lookup_trait_reference (DefId id, TraitReference **ref);
  
*************** private:
*** 319,328 ****
--- 332,343 ----
    std::vector<std::unique_ptr<TyTy::BaseType>> builtins;
    std::vector<std::pair<TypeCheckContextItem, TyTy::BaseType *>>
      return_type_stack;
+   std::vector<TyTy::BaseType *> expected_type_stack;
    std::vector<TyTy::BaseType *> loop_type_stack;
    StackedContexts<TypeCheckBlockContextItem> block_stack;
    std::map<DefId, TraitReference> trait_context;
    std::map<HirId, AssociatedImplTrait> associated_impl_traits;
+   std::vector<ImplTraitContextFrame> impl_trait_frame_stack;
  
    // trait-id -> list of < self-tyty:impl-id>
    std::map<HirId, std::vector<std::pair<TyTy::BaseType *, HirId>>>
*************** private:
*** 558,563 ****
--- 573,619 ----
    TypeCheckContext &ctx;
  };
  
+ template <typename T> class ScopedPush
+ {
+ public:
+   ScopedPush (std::vector<T> &stack, T value, bool enabled = true)
+     : stack (stack), enabled (enabled)
+   {
+     if (enabled)
+       stack.push_back (value);
+   }
+ 
+   ~ScopedPush ()
+   {
+     if (enabled)
+       stack.pop_back ();
+   }
+ 
+   static bool contains (const std::vector<T> &stack, const T &value)
+   {
+     return std::find (stack.begin (), stack.end (), value) != stack.end ();
+   }
+ 
+ private:
+   std::vector<T> &stack;
+   bool enabled;
+ };
+ 
+ class ImplTraitFrameGuard
+ {
+ public:
+   ImplTraitFrameGuard (ImplTraitContextFrame frame)
+     : ctx (*TypeCheckContext::get ())
+   {
+     ctx.push_impl_trait_context (frame);
+   }
+ 
+   ~ImplTraitFrameGuard () { ctx.pop_impl_trait_context (); }
+ 
+ private:
+   Resolver::TypeCheckContext &ctx;
+ };
+ 
  } // namespace Resolver
  } // namespace Rust
  
diff -Nrcpad gcc-17-20260705/gcc/rust/typecheck/rust-type-util.cc gcc-17-20260712/gcc/rust/typecheck/rust-type-util.cc
*** gcc-17-20260705/gcc/rust/typecheck/rust-type-util.cc	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/typecheck/rust-type-util.cc	Sun Jul 12 22:32:11 2026
***************
*** 16,40 ****
  // along with GCC; see the file COPYING3.  If not see
  // <http://www.gnu.org/licenses/>.
  
  #include "rust-type-util.h"
  #include "rust-diagnostics.h"
  #include "rust-hir-map.h"
  #include "rust-hir-type-check-implitem.h"
  #include "rust-hir-type-check-item.h"
  #include "rust-hir-type-check.h"
- #include "rust-hir-type-check-type.h"
  #include "rust-casts.h"
  #include "rust-mapping-common.h"
  #include "rust-rib.h"
  #include "rust-unify.h"
  #include "rust-coercion.h"
  #include "rust-hir-type-bounds.h"
  #include "rust-finalized-name-resolution-context.h"
- #include "options.h"
  
  namespace Rust {
  namespace Resolver {
  
  bool
  query_type (HirId reference, TyTy::BaseType **result)
  {
--- 16,43 ----
  // along with GCC; see the file COPYING3.  If not see
  // <http://www.gnu.org/licenses/>.
  
+ #include "rust-system.h"
  #include "rust-type-util.h"
  #include "rust-diagnostics.h"
  #include "rust-hir-map.h"
  #include "rust-hir-type-check-implitem.h"
  #include "rust-hir-type-check-item.h"
  #include "rust-hir-type-check.h"
  #include "rust-casts.h"
  #include "rust-mapping-common.h"
  #include "rust-rib.h"
  #include "rust-unify.h"
  #include "rust-coercion.h"
  #include "rust-hir-type-bounds.h"
+ #include "rust-hir-trait-resolve.h"
+ #include "rust-substitution-mapper.h"
  #include "rust-finalized-name-resolution-context.h"
  
  namespace Rust {
  namespace Resolver {
  
+ const size_t kNormalizeProjectionLimit = 10;
+ 
  bool
  query_type (HirId reference, TyTy::BaseType **result)
  {
*************** query_type (HirId reference, TyTy::BaseT
*** 80,85 ****
--- 83,133 ----
        auto impl_block
  	= mappings.lookup_hir_impl_block (impl_item->second).value ();
  
+       tl::optional<ImplTraitFrameGuard> guard;
+       if (impl_block->has_trait_ref ())
+ 	{
+ 	  bool failure_flag = false;
+ 	  auto substitutions
+ 	    = TypeCheckItem::ResolveImplBlockSubstitutions (*impl_block,
+ 							    failure_flag);
+ 	  if (failure_flag)
+ 	    {
+ 	      context->query_completed (reference);
+ 	      return false;
+ 	    }
+ 
+ 	  TyTy::BaseType *self = nullptr;
+ 	  bool ok
+ 	    = query_type (impl_block->get_type ().get_mappings ().get_hirid (),
+ 			  &self);
+ 	  if (!ok)
+ 	    {
+ 	      context->query_completed (reference);
+ 	      return false;
+ 	    }
+ 
+ 	  HIR::TypePath &ref = impl_block->get_trait_ref ();
+ 	  auto trait_reference = TraitResolver::Resolve (ref);
+ 	  if (trait_reference->is_error ())
+ 	    {
+ 	      context->query_completed (reference);
+ 	      return false;
+ 	    }
+ 
+ 	  auto specified_bound = TypeCheckBase::ResolvePredicateFromBound (
+ 	    ref, impl_block->get_type (), impl_block->get_polarity ());
+ 
+ 	  std::map<DefId, AssocTypeEntry> assoc_types_by_trait_item;
+ 	  std::vector<const TraitItemReference *> trait_item_refs;
+ 	  TypeCheckItem::ResolveImplTraitAssociatedTypes (
+ 	    context, *impl_block, specified_bound, self, substitutions,
+ 	    assoc_types_by_trait_item, trait_item_refs);
+ 
+ 	  ImplTraitContextFrame frame{trait_reference, self,
+ 				      std::move (assoc_types_by_trait_item)};
+ 	  guard.emplace (frame);
+ 	}
+ 
        // found an impl item
        rust_debug_loc (impl_item->first->get_locus (),
  		      "resolved impl-item {%u} to", reference);
*************** lookup_associated_impl_block (const TyTy
*** 433,437 ****
--- 481,816 ----
    return associate_impl_trait;
  }
  
+ void
+ rebind_projection_self_from_fn (TyTy::FnType &fn, TyTy::BaseType *root)
+ {
+   // After substitution+monomorphize the fn's substitution clones carry the
+   // call-site bindings. Inner projections in the return/params can still
+   // reference the traits formal Self via TyVar(formal.ref) whose type table
+   // entry resolves to the unbound formal
+   std::map<HirId, TyTy::BaseGeneric *> bound_by_formal;
+   for (auto &sub : fn.get_substs ())
+     {
+       auto *pty = sub.get_param_ty ();
+       if (pty == nullptr || pty->get_kind () != TyTy::TypeKind::PARAM
+ 	  || !pty->can_resolve ())
+ 	continue;
+       bound_by_formal[pty->get_ref ()] = pty;
+     }
+ 
+   std::function<void (TyTy::BaseType *)> rebind;
+   rebind = [&] (TyTy::BaseType *ty) {
+     if (ty == nullptr)
+       return;
+ 
+     if (auto *proj = ty->try_as<TyTy::ProjectionType> ())
+       {
+ 	auto *self = proj->get_self ();
+ 	if (self->get_kind () == TyTy::TypeKind::PARAM)
+ 	  {
+ 	    auto it = bound_by_formal.find (self->get_ref ());
+ 	    if (it != bound_by_formal.end ())
+ 	      proj->set_self (it->second);
+ 	  }
+ 
+ 	for (auto &sub : proj->get_substs ())
+ 	  {
+ 	    auto *param = sub.get_param_ty ();
+ 	    if (param == nullptr || param->get_kind () != TyTy::TypeKind::PARAM
+ 		|| param->can_resolve ())
+ 	      continue;
+ 
+ 	    auto it = bound_by_formal.find (param->get_ref ());
+ 	    if (it == bound_by_formal.end ()
+ 		|| it->second->get_kind () != TyTy::TypeKind::PARAM)
+ 	      continue;
+ 
+ 	    auto *bound = static_cast<TyTy::ParamType *> (it->second);
+ 	    if (bound->can_resolve ())
+ 	      param->set_ty_ref (bound->get_ty_ref ());
+ 	  }
+ 	return;
+       }
+ 
+     if (auto *adt = ty->try_as<TyTy::ADTType> ())
+       {
+ 	for (auto &variant : adt->get_variants ())
+ 	  for (auto &field : variant->get_fields ())
+ 	    rebind (field->get_field_type ());
+ 	return;
+       }
+ 
+     if (auto *ref = ty->try_as<TyTy::ReferenceType> ())
+       rebind (ref->get_base ());
+     else if (auto *ptr = ty->try_as<TyTy::PointerType> ())
+       rebind (ptr->get_base ());
+     else if (auto *tup = ty->try_as<TyTy::TupleType> ())
+       for (size_t i = 0; i < tup->num_fields (); i++)
+ 	rebind (tup->get_field (i));
+   };
+ 
+   rebind (root);
+ }
+ 
+ TyTy::BaseType *
+ normalize_projection (TyTy::ProjectionType *proj, location_t locus,
+ 		      bool emit_errors, bool unify_self)
+ {
+   static std::vector<TyTy::ProjectionType *> active_projections;
+   if (ScopedPush<TyTy::ProjectionType *>::contains (active_projections, proj))
+     return proj;
+ 
+   ScopedPush<TyTy::ProjectionType *> guard (active_projections, proj);
+ 
+   if (!proj->is_trait_position ())
+     return proj->get ();
+ 
+   // special case the discriminant_type lang item
+   auto &mappings = Analysis::Mappings::get ();
+   auto *ctx = TypeCheckContext::get ();
+   if (auto discriminant_type_id
+       = mappings.lookup_lang_item (LangItem::Kind::DISCRIMINANT_TYPE))
+     {
+       if (proj->get_item_defid () == discriminant_type_id.value ())
+ 	{
+ 	  TyTy::BaseType *isize_ty = nullptr;
+ 	  bool ok = ctx->lookup_builtin ("isize", &isize_ty);
+ 	  rust_assert (ok);
+ 
+ 	  // If the self type is a concrete ADT, use its repr.
+ 	  TyTy::BaseType *self = proj->get_self ()->destructure ();
+ 	  if (auto *adt = self->try_as<TyTy::ADTType> ())
+ 	    {
+ 	      auto *repr = adt->get_repr_options ().repr;
+ 	      if (repr != nullptr)
+ 		return repr;
+ 	    }
+ 	  return isize_ty;
+ 	}
+     }
+ 
+   ImplTraitContextFrame frame;
+   if (!ctx->find_matching_impl_trait_frame (*proj->get_trait_ref (), &frame))
+     {
+       // No concrete impl frame check WHERE clause bindings on the self type
+       //
+       //   fn foo<T: Trait<AssocType = X>>()
+       //
+       // normalizes
+       //
+       //    <T as Trait>::AssocType -> X.
+ 
+       TyTy::BaseType *self = proj->get_self ()->destructure ();
+       const DefId item_defid = proj->get_item_defid ();
+ 
+       // find the name of the associated type from the trait reference
+       std::string assoc_name;
+       for (const auto &ti : proj->get_trait_ref ()->get_trait_items ())
+ 	{
+ 	  if (ti.get_mappings ().get_defid () == item_defid)
+ 	    {
+ 	      assoc_name = ti.get_identifier ();
+ 	      break;
+ 	    }
+ 	}
+ 
+       if (!assoc_name.empty ())
+ 	{
+ 	  for (auto &bound : self->get_specified_bounds ())
+ 	    {
+ 	      if (!bound.get ()->is_equal (*proj->get_trait_ref ()))
+ 		continue;
+ 
+ 	      auto &binding
+ 		= bound.get_substitution_arguments ().get_binding_args ();
+ 	      auto it = binding.find (assoc_name);
+ 	      if (it != binding.end ())
+ 		return it->second;
+ 	    }
+ 	}
+ 
+       // If self is a trait-position projection recursively normalize it first
+       // so the impl-block lookup below works on a concrete type.
+       if (auto *self_proj = self->try_as<TyTy::ProjectionType> ())
+ 	{
+ 	  if (self_proj->is_trait_position ())
+ 	    {
+ 	      auto *norm = normalize_projection (self_proj, locus, emit_errors,
+ 						 unify_self);
+ 	      if (norm != self_proj
+ 		  && norm->get_kind () != TyTy::TypeKind::ERROR)
+ 		self = norm->destructure ();
+ 	    }
+ 	  else
+ 	    {
+ 	      auto *base = self_proj->get ();
+ 	      if (base && base != self_proj)
+ 		self = base->destructure ();
+ 	    }
+ 	}
+ 
+       // Direct impl-block lookup for concrete self types (no active frame).
+       if (!assoc_name.empty () && self->get_kind () != TyTy::TypeKind::PARAM
+ 	  && self->get_kind () != TyTy::TypeKind::INFER
+ 	  && self->get_kind () != TyTy::TypeKind::PROJECTION)
+ 	{
+ 	  auto candidates = TypeBoundsProbe::Probe (self);
+ 	  for (auto &probed : candidates)
+ 	    {
+ 	      HIR::ImplBlock *impl_block = probed.second;
+ 	      if (!impl_block->has_trait_ref ())
+ 		continue;
+ 
+ 	      HIR::TypePath &ref = impl_block->get_trait_ref ();
+ 	      auto *tref = TraitResolver::Resolve (ref);
+ 	      if (tref->is_error ()
+ 		  || !tref->is_equal (*proj->get_trait_ref ()))
+ 		continue;
+ 
+ 	      for (auto &impl_item : impl_block->get_impl_items ())
+ 		{
+ 		  if (impl_item->get_impl_item_name ().compare (assoc_name)
+ 		      != 0)
+ 		    continue;
+ 
+ 		  TyTy::BaseType *result = nullptr;
+ 		  if (query_type (impl_item->get_impl_mappings ().get_hirid (),
+ 				  &result))
+ 		    {
+ 		      AssociatedImplTrait *associated = nullptr;
+ 		      if (ctx->lookup_associated_trait_impl (
+ 			    impl_block->get_mappings ().get_hirid (),
+ 			    &associated)
+ 			  && associated != nullptr)
+ 			{
+ 			  auto mapping
+ 			    = associated->bind_impl_for_projection (*proj,
+ 								    locus);
+ 			  if (!mapping.is_error ())
+ 			    result
+ 			      = SubstMapperInternal::Resolve (result, mapping);
+ 			}
+ 
+ 		      // impl type aliases are stored as non-trait-position
+ 		      // ProjectionType; unwrap to base only when there are no
+ 		      // substitution params (non-GAT)
+ 		      if (auto *p = result->try_as<TyTy::ProjectionType> ())
+ 			{
+ 			  if (!p->is_trait_position ())
+ 			    {
+ 			      bool all_substs_bound = true;
+ 			      for (auto &s : p->get_substs ())
+ 				{
+ 				  auto *sp = s.get_param_ty ();
+ 				  if (sp == nullptr || !sp->can_resolve ()
+ 				      || sp->resolve ()->get_kind ()
+ 					   == TyTy::TypeKind::PARAM)
+ 				    {
+ 				      all_substs_bound = false;
+ 				      break;
+ 				    }
+ 				}
+ 
+ 			      // Also unwrap when the base is already concrete
+ 			      bool base_is_concrete
+ 				= p->get () != nullptr
+ 				  && p->get ()->is_concrete ();
+ 			      if (!p->has_substitutions () || all_substs_bound
+ 				  || base_is_concrete)
+ 				result = p->get ();
+ 			    }
+ 			}
+ 
+ 		      return result;
+ 		    }
+ 		  break;
+ 		}
+ 	    }
+ 	}
+ 
+       // special-case FnOnce::Output
+       if (proj->is_trait_position ())
+ 	{
+ 	  auto fn_once_lookup
+ 	    = mappings.lookup_lang_item (LangItem::Kind::FN_ONCE);
+ 	  auto fn_once_output_lookup
+ 	    = mappings.lookup_lang_item (LangItem::Kind::FN_ONCE_OUTPUT);
+ 	  if (!fn_once_lookup || !fn_once_output_lookup)
+ 	    return proj;
+ 
+ 	  DefId &fn_once_trait_id = fn_once_lookup.value ();
+ 	  DefId &fn_once_output_id = fn_once_output_lookup.value ();
+ 	  DefId proj_trait_id = proj->get_trait_ref ()->get_defid ();
+ 	  DefId proj_trait_item_id = proj->get_item_defid ();
+ 
+ 	  if (proj_trait_id == fn_once_trait_id
+ 	      && proj_trait_item_id == fn_once_output_id)
+ 	    {
+ 	      auto pself = proj->get_self ();
+ 	      if (auto closure = pself->try_as<TyTy::ClosureType> ())
+ 		return &closure->get_result_type ();
+ 	    }
+ 	}
+ 
+       return proj;
+     }
+ 
+   if (unify_self)
+     {
+       TyTy::BaseType *proj_self = proj->get_self ();
+       TyTy::BaseType *impl_self = frame.self;
+       TyTy::BaseType *self
+ 	= unify_site_and (/*id*/ 0, TyTy::TyWithLocation (proj_self, locus),
+ 			  TyTy::TyWithLocation (impl_self, locus), locus,
+ 			  /*emit_errors*/ false,
+ 			  /*commit*/ false,
+ 			  /*infer*/ false,
+ 			  /*cleanup*/ true,
+ 			  /*check_bounds*/ false);
+ 
+       if (self->get_kind () == TyTy::TypeKind::ERROR)
+ 	return self;
+     }
+ 
+   // Lookup the trait item -> impl type mapping (key = trait item DefId).
+   const DefId item = proj->get_item_defid ();
+   auto it = frame.assoc_types_by_trait_item.find (item);
+   if (it == frame.assoc_types_by_trait_item.end ())
+     {
+       return proj;
+     }
+ 
+   auto &entry = it->second;
+   auto impl_value = entry.value;
+ 
+   // chase the impl body through any further projections it contains
+   TyTy::BaseType *normalized = impl_value;
+   for (size_t i = 0; i < kNormalizeProjectionLimit; i++)
+     {
+       if (!normalized->is<TyTy::ProjectionType> ())
+ 	break;
+ 
+       auto p = normalized->as<TyTy::ProjectionType> ();
+       if (p->is_trait_position ())
+ 	{
+ 	  auto *n = normalize_projection (p, locus, emit_errors, unify_self);
+ 	  if (n == p)
+ 	    break;
+ 
+ 	  normalized = n;
+ 	}
+       else
+ 	{
+ 	  auto *v = p->get ();
+ 	  if (v == nullptr || v == p)
+ 	    break;
+ 
+ 	  normalized = v;
+ 	}
+     }
+ 
+   return normalized;
+ }
+ 
  } // namespace Resolver
  } // namespace Rust
diff -Nrcpad gcc-17-20260705/gcc/rust/typecheck/rust-type-util.h gcc-17-20260712/gcc/rust/typecheck/rust-type-util.h
*** gcc-17-20260705/gcc/rust/typecheck/rust-type-util.h	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/typecheck/rust-type-util.h	Sun Jul 12 22:32:11 2026
*************** lookup_associated_impl_block (const TyTy
*** 56,61 ****
--- 56,67 ----
  			      TyTy::BaseType *binding,
  			      bool *ambigious = nullptr);
  
+ TyTy::BaseType *normalize_projection (TyTy::ProjectionType *proj,
+ 				      location_t locus, bool emit_errors,
+ 				      bool unify_self);
+ 
+ void rebind_projection_self_from_fn (TyTy::FnType &fn, TyTy::BaseType *root);
+ 
  } // namespace Resolver
  } // namespace Rust
  
diff -Nrcpad gcc-17-20260705/gcc/rust/typecheck/rust-typecheck-context.cc gcc-17-20260712/gcc/rust/typecheck/rust-typecheck-context.cc
*** gcc-17-20260705/gcc/rust/typecheck/rust-typecheck-context.cc	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/typecheck/rust-typecheck-context.cc	Sun Jul 12 22:32:11 2026
*************** TypeCheckContext::peek_context ()
*** 171,176 ****
--- 171,197 ----
    return return_type_stack.back ().first;
  }
  
+ void
+ TypeCheckContext::push_expected_type (TyTy::BaseType *expected)
+ {
+   expected_type_stack.push_back (expected);
+ }
+ 
+ void
+ TypeCheckContext::pop_expected_type ()
+ {
+   rust_assert (!expected_type_stack.empty ());
+   expected_type_stack.pop_back ();
+ }
+ 
+ TyTy::BaseType *
+ TypeCheckContext::peek_expected_type () const
+ {
+   if (expected_type_stack.empty ())
+     return nullptr;
+   return expected_type_stack.back ();
+ }
+ 
  StackedContexts<TypeCheckBlockContextItem> &
  TypeCheckContext::block_context ()
  {
*************** TypeCheckContext::swap_head_loop_context
*** 230,235 ****
--- 251,303 ----
    loop_type_stack.push_back (val);
  }
  
+ bool
+ TypeCheckContext::find_matching_impl_trait_frame (
+   const TraitReference &tref, struct ImplTraitContextFrame *find) const
+ {
+   if (!have_impl_trait_context ())
+     return false;
+ 
+   for (auto it = impl_trait_frame_stack.rbegin ();
+        it != impl_trait_frame_stack.rend (); ++it)
+     {
+       const auto &i = *it;
+       if (i.trait->is_equal (tref))
+ 	{
+ 	  *find = i;
+ 	  return true;
+ 	}
+     }
+ 
+   return false;
+ }
+ 
+ bool
+ TypeCheckContext::have_impl_trait_context () const
+ {
+   return !impl_trait_frame_stack.empty ();
+ }
+ 
+ void
+ TypeCheckContext::push_impl_trait_context (struct ImplTraitContextFrame frame)
+ {
+   impl_trait_frame_stack.push_back (frame);
+ }
+ 
+ struct ImplTraitContextFrame
+ TypeCheckContext::pop_impl_trait_context ()
+ {
+   auto back = peek_impl_trait_context ();
+   impl_trait_frame_stack.pop_back ();
+   return back;
+ }
+ 
+ struct ImplTraitContextFrame
+ TypeCheckContext::peek_impl_trait_context ()
+ {
+   return impl_trait_frame_stack.back ();
+ }
+ 
  void
  TypeCheckContext::insert_trait_reference (DefId id, TraitReference &&ref)
  {
diff -Nrcpad gcc-17-20260705/gcc/rust/typecheck/rust-tyty-bounds.cc gcc-17-20260712/gcc/rust/typecheck/rust-tyty-bounds.cc
*** gcc-17-20260705/gcc/rust/typecheck/rust-tyty-bounds.cc	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/typecheck/rust-tyty-bounds.cc	Sun Jul 12 22:32:11 2026
*************** TypeBoundPredicate::TypeBoundPredicate (
*** 426,432 ****
      }
  
    used_arguments
!     = SubstitutionArgumentMappings (copied_arg_mappings, {},
  				    other.used_arguments.get_regions (),
  				    other.used_arguments.get_locus ());
  }
--- 426,433 ----
      }
  
    used_arguments
!     = SubstitutionArgumentMappings (copied_arg_mappings,
! 				    other.used_arguments.get_binding_args (),
  				    other.used_arguments.get_regions (),
  				    other.used_arguments.get_locus ());
  }
*************** TypeBoundPredicate::operator= (const Typ
*** 467,473 ****
      }
  
    used_arguments
!     = SubstitutionArgumentMappings (copied_arg_mappings, {},
  				    other.used_arguments.get_regions (),
  				    other.used_arguments.get_locus ());
    super_traits = other.super_traits;
--- 468,475 ----
      }
  
    used_arguments
!     = SubstitutionArgumentMappings (copied_arg_mappings,
! 				    other.used_arguments.get_binding_args (),
  				    other.used_arguments.get_regions (),
  				    other.used_arguments.get_locus ());
    super_traits = other.super_traits;
*************** TypeBoundPredicate::apply_argument_mappi
*** 565,586 ****
  			   substs_need_bounds_check);
      }
  
!   // associated argument mappings
!   for (auto &it : subst_mappings.get_binding_args ())
!     {
!       std::string identifier = it.first;
!       TyTy::BaseType *type = it.second;
! 
!       tl::optional<TypeBoundPredicateItem> item
! 	= lookup_associated_item (identifier);
! 
!       if (!item.has_value ())
! 	continue;
! 
!       const auto item_ref = item->get_raw_item ();
!       item_ref->associated_type_set (type);
!     }
! 
    for (auto &super_trait : super_traits)
      {
        auto adjusted
--- 567,574 ----
  			   substs_need_bounds_check);
      }
  
!   // Associated type binding args (Iterator<Item = i32>) are consumed
!   // by BaseType::satisfies_bound at check time
    for (auto &super_trait : super_traits)
      {
        auto adjusted
*************** TypeBoundPredicate::lookup_associated_it
*** 665,684 ****
  BaseType *
  TypeBoundPredicateItem::get_tyty_for_receiver (const TyTy::BaseType *receiver)
  {
    TyTy::BaseType *trait_item_tyty = get_raw_item ()->get_tyty ();
    if (parent.get_substitution_arguments ().is_empty ())
      return trait_item_tyty;
  
-   const Resolver::TraitItemReference *tref = get_raw_item ();
-   bool is_associated_type = tref->get_trait_item_type ();
-   if (is_associated_type)
-     return trait_item_tyty;
- 
    // set up the self mapping
    SubstitutionArgumentMappings gargs = parent.get_substitution_arguments ();
    rust_assert (!gargs.is_empty ());
  
!   // setup the adjusted mappings
    std::vector<SubstitutionArg> adjusted_mappings;
    for (size_t i = 0; i < gargs.get_mappings ().size (); i++)
      {
--- 653,683 ----
  BaseType *
  TypeBoundPredicateItem::get_tyty_for_receiver (const TyTy::BaseType *receiver)
  {
+   auto ctx = Resolver::TypeCheckContext::get ();
+ 
    TyTy::BaseType *trait_item_tyty = get_raw_item ()->get_tyty ();
    if (parent.get_substitution_arguments ().is_empty ())
      return trait_item_tyty;
  
    // set up the self mapping
    SubstitutionArgumentMappings gargs = parent.get_substitution_arguments ();
    rust_assert (!gargs.is_empty ());
  
!   // The associated-type projection we are rebasing is stored in trait
!   // coordinates
!   //
!   //   Self/X for trait SliceIndex<X>
!   //
!   // The predicate's own  SubstitutionParamMappings may have already been
!   // mutated by SubstitutionParamMapping::fill_param_ty when the bound is a
!   // where-clause like I: SliceIndex<[T]>: substituting Self with the
!   // ParamType I rebinds the predicate's first param from Self to I.
!   // Building adjusted_mappings from those renamed mappings would make
!   // name-based lookup (get_argument_for_symbol) miss the trait's Self/X
!   // symbols inside the projection.
!   const auto &trait_substs = parent.get ()->get_trait_substs ();
!   rust_assert (gargs.get_mappings ().size () <= trait_substs.size ());
! 
    std::vector<SubstitutionArg> adjusted_mappings;
    for (size_t i = 0; i < gargs.get_mappings ().size (); i++)
      {
*************** TypeBoundPredicateItem::get_tyty_for_rec
*** 688,694 ****
        TyTy::BaseType *argument
  	= is_implicit_self ? receiver->clone () : mapping.get_tyty ();
  
!       adjusted_mappings.emplace_back (mapping.get_param_mapping (), argument);
      }
  
    SubstitutionArgumentMappings adjusted (adjusted_mappings, {},
--- 687,693 ----
        TyTy::BaseType *argument
  	= is_implicit_self ? receiver->clone () : mapping.get_tyty ();
  
!       adjusted_mappings.emplace_back (&trait_substs.at (i), argument);
      }
  
    SubstitutionArgumentMappings adjusted (adjusted_mappings, {},
*************** TypeBoundPredicateItem::get_tyty_for_rec
*** 696,702 ****
  					 gargs.get_locus (),
  					 gargs.get_subst_cb (),
  					 true /* trait-mode-flag */);
!   return Resolver::SubstMapperInternal::Resolve (trait_item_tyty, adjusted);
  }
  bool
  TypeBoundPredicate::is_error () const
--- 695,713 ----
  					 gargs.get_locus (),
  					 gargs.get_subst_cb (),
  					 true /* trait-mode-flag */);
!   TyTy::BaseType *res
!     = Resolver::SubstMapperInternal::Resolve (trait_item_tyty, adjusted);
! 
!   if (res != trait_item_tyty)
!     {
!       auto &mappings = Analysis::Mappings::get ();
!       HirId fresh = mappings.get_next_hir_id ();
!       res->set_ref (fresh);
!       res->set_ty_ref (fresh);
!       ctx->insert_implicit_type (fresh, res);
!     }
! 
!   return res;
  }
  bool
  TypeBoundPredicate::is_error () const
*************** TypeBoundPredicate::handle_substitions (
*** 725,745 ****
        p->set_ty_ref (s->get_ty_ref ());
      }
  
-   // associated argument mappings
-   for (auto &it : subst_mappings.get_binding_args ())
-     {
-       std::string identifier = it.first;
-       TyTy::BaseType *type = it.second;
- 
-       tl::optional<TypeBoundPredicateItem> item
- 	= lookup_associated_item (identifier);
-       if (item.has_value ())
- 	{
- 	  const auto item_ref = item->get_raw_item ();
- 	  item_ref->associated_type_set (type);
- 	}
-     }
- 
    // FIXME more error handling at some point
    // used_arguments = subst_mappings;
    // error_flag |= used_arguments.is_error ();
--- 736,741 ----
diff -Nrcpad gcc-17-20260705/gcc/rust/typecheck/rust-tyty-call.cc gcc-17-20260712/gcc/rust/typecheck/rust-tyty-call.cc
*** gcc-17-20260705/gcc/rust/typecheck/rust-tyty-call.cc	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/typecheck/rust-tyty-call.cc	Sun Jul 12 22:32:11 2026
***************
*** 18,23 ****
--- 18,24 ----
  
  #include "rust-tyty-call.h"
  #include "rust-hir-type-check-expr.h"
+ #include "rust-hir-type-check.h"
  #include "rust-type-util.h"
  
  namespace Rust {
*************** TypeCheckCallExpr::visit (FnType &type)
*** 135,145 ****
--- 136,174 ----
  	}
      }
  
+   // if the surrounding context has pushed an expected type, try unifying it
+   // with the fn's return type before checking arguments. This lets the callee
+   // result constrain inference variables that may appear in parameter
+   // projections.
+ 
+   auto *ctx = Resolver::TypeCheckContext::get ();
+   TyTy::BaseType *expected = ctx->peek_expected_type ();
+   const TyTy::BaseType *return_infer
+     = type.get_return_type ()->contains_infer ();
+   if (expected != nullptr && return_infer != nullptr)
+     {
+       Resolver::unify_site_and (call.get_mappings ().get_hirid (),
+ 				TyWithLocation (expected),
+ 				TyWithLocation (type.get_return_type ()),
+ 				call.get_locus (), false /*emit_errors*/,
+ 				true /*commit_if_ok*/,
+ 				true /*implicit_infer_vars*/, true /*cleanup*/);
+     }
+ 
    size_t i = 0;
    for (auto &argument : call.get_arguments ())
      {
        location_t arg_locus = argument->get_locus ();
+ 
+       TyTy::BaseType *param_ty = nullptr;
+       if (i < type.num_params ())
+ 	param_ty = type.param_at (i).get_type ();
+ 
+       if (param_ty != nullptr)
+ 	ctx->push_expected_type (param_ty);
        auto argument_expr_tyty = Resolver::TypeCheckExpr::Resolve (*argument);
+       if (param_ty != nullptr)
+ 	ctx->pop_expected_type ();
        if (argument_expr_tyty->is<TyTy::ErrorType> ())
  	return;
  
*************** TypeCheckCallExpr::visit (FnType &type)
*** 147,153 ****
        if (i < type.num_params ())
  	{
  	  auto &fnparam = type.param_at (i);
- 	  BaseType *param_ty = fnparam.get_type ();
  	  location_t param_locus
  	    = fnparam.has_pattern ()
  		? fnparam.get_pattern ().get_locus ()
--- 176,181 ----
*************** TypeCheckCallExpr::visit (FnType &type)
*** 251,257 ****
      }
  
    type.monomorphize ();
!   resolved = type.get_return_type ()->monomorphized_clone ();
  }
  
  void
--- 279,287 ----
      }
  
    type.monomorphize ();
!   Resolver::rebind_projection_self_from_fn (type, type.get_return_type ());
! 
!   resolved = type.get_return_type ();
  }
  
  void
diff -Nrcpad gcc-17-20260705/gcc/rust/typecheck/rust-tyty-subst.cc gcc-17-20260712/gcc/rust/typecheck/rust-tyty-subst.cc
*** gcc-17-20260705/gcc/rust/typecheck/rust-tyty-subst.cc	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/typecheck/rust-tyty-subst.cc	Sun Jul 12 22:32:11 2026
*************** SubstitutionParamMapping::fill_param_ty
*** 156,161 ****
--- 156,190 ----
      return true;
  
    TyTy::BaseType &type = *arg.get_tyty ();
+   std::pair<HirId, HirId> subst_key (param->get_ref (), type.get_ref ());
+   static std::vector<std::pair<HirId, HirId>> active_substs;
+   bool is_recursive_subst
+     = Resolver::ScopedPush<std::pair<HirId, HirId>>::contains (active_substs,
+ 							       subst_key);
+   bool skip_recursive_bounds
+     = is_recursive_subst && type.get_kind () == TyTy::TypeKind::INFER;
+   if (skip_recursive_bounds)
+     {
+       type.append_reference (param->get_ref ());
+       type.append_reference (param->get_ty_ref ());
+       for (auto ref : param->get_combined_refs ())
+ 	type.append_reference (ref);
+       if (param->can_resolve ())
+ 	{
+ 	  TyTy::BaseType *resolved = param->resolve ();
+ 	  type.append_reference (resolved->get_ref ());
+ 	  type.append_reference (resolved->get_ty_ref ());
+ 	  for (auto ref : resolved->get_combined_refs ())
+ 	    type.append_reference (ref);
+ 	  if (resolved->get_kind () != TyTy::TypeKind::PARAM
+ 	      && resolved->get_kind () != TyTy::TypeKind::INFER)
+ 	    return true;
+ 	}
+     }
+ 
+   Resolver::ScopedPush<std::pair<HirId, HirId>> guard (active_substs, subst_key,
+ 						       !is_recursive_subst);
+ 
    if (type.get_kind () == TyTy::TypeKind::INFER)
      {
        type.inherit_bounds (*param);
*************** SubstitutionParamMapping::fill_param_ty
*** 182,196 ****
        rust_debug_loc (locus,
  		      "fill_param_ty bounds_compatible: param %s type %s",
  		      param->get_name ().c_str (), type.get_name ().c_str ());
!       if (needs_bounds_check && !p.is_implicit_self_trait ())
  	{
  	  if (!param->bounds_compatible (type, locus, true))
  	    return false;
  	}
  
        // recursively pass this down to all HRTB's
!       for (auto &bound : param->get_specified_bounds ())
! 	bound.handle_substitions (subst_mappings);
  
        param->set_ty_ref (type.get_ref ());
        subst_mappings.on_param_subst (p, arg);
--- 211,227 ----
        rust_debug_loc (locus,
  		      "fill_param_ty bounds_compatible: param %s type %s",
  		      param->get_name ().c_str (), type.get_name ().c_str ());
!       if (!skip_recursive_bounds && needs_bounds_check
! 	  && !p.is_implicit_self_trait ())
  	{
  	  if (!param->bounds_compatible (type, locus, true))
  	    return false;
  	}
  
        // recursively pass this down to all HRTB's
!       if (!skip_recursive_bounds)
! 	for (auto &bound : param->get_specified_bounds ())
! 	  bound.handle_substitions (subst_mappings);
  
        param->set_ty_ref (type.get_ref ());
        subst_mappings.on_param_subst (p, arg);
*************** SubstitutionRef::get_mappings_from_gener
*** 706,715 ****
  	}
      }
  
!   // for inherited arguments
!   size_t offs = used_arguments.size ();
    size_t total_arguments
!     = args.get_type_args ().size () + args.get_const_args ().size () + offs;
    if (total_arguments > substitutions.size ())
      {
        rich_location r (line_table, args.get_locus ());
--- 737,753 ----
  	}
      }
  
!   // check if we need to use inherited arguments or nothing
!   size_t offs = 0;
    size_t total_arguments
!     = args.get_type_args ().size () + args.get_const_args ().size ();
!   if (total_arguments < substitutions.size ())
!     {
!       offs = used_arguments.get_mappings ().empty () ? get_outer_param_count ()
! 						     : used_arguments.size ();
!       total_arguments += offs;
!     }
! 
    if (total_arguments > substitutions.size ())
      {
        rich_location r (line_table, args.get_locus ());
*************** SubstitutionRef::solve_mappings_from_rec
*** 1066,1085 ****
  				       mappings.get_locus ());
  }
  
- void
- SubstitutionRef::prepare_higher_ranked_bounds ()
- {
-   for (const auto &subst : get_substs ())
-     {
-       const auto pty = subst.get_param_ty ();
-       for (const auto &bound : pty->get_specified_bounds ())
- 	{
- 	  const auto ref = bound.get ();
- 	  ref->clear_associated_type_projections ();
- 	}
-     }
- }
- 
  bool
  SubstitutionRef::monomorphize ()
  {
--- 1104,1109 ----
*************** SubstitutionRef::monomorphize ()
*** 1093,1098 ****
--- 1117,1135 ----
        if (binding->get_kind () == TyTy::TypeKind::PARAM)
  	continue;
  
+       // For each where-clause bound on this fn-substitution param, find the
+       // impl block that satisfies the bound for binding and unify
+       // its signature against binding + bound. This pins inference
+       // variables that should be constrained
+       //
+       //   fn into_iter<I: Iterator> with binding = Range<{integer}>
+       //
+       // the only matching
+       //
+       //   <A: Step> Iterator for Range<A>
+       //
+       // Step for usize impl together force {integer} = usize instead of
+       // letting it default.
        for (const auto &bound : pty->get_specified_bounds ())
  	{
  	  bool ambigious = false;
*************** SubstitutionRef::monomorphize ()
*** 1100,1106 ****
  	    = Resolver::lookup_associated_impl_block (bound, binding,
  						      &ambigious);
  	  if (associated != nullptr)
! 	    associated->setup_associated_types (binding, bound);
  	}
      }
  
--- 1137,1143 ----
  	    = Resolver::lookup_associated_impl_block (bound, binding,
  						      &ambigious);
  	  if (associated != nullptr)
! 	    associated->bind_impl_for_bound (binding, bound, UNKNOWN_LOCATION);
  	}
      }
  
diff -Nrcpad gcc-17-20260705/gcc/rust/typecheck/rust-tyty-subst.h gcc-17-20260712/gcc/rust/typecheck/rust-tyty-subst.h
*** gcc-17-20260705/gcc/rust/typecheck/rust-tyty-subst.h	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/typecheck/rust-tyty-subst.h	Sun Jul 12 22:32:11 2026
*************** public:
*** 274,279 ****
--- 274,284 ----
    // construct which supports associated types
    virtual size_t get_num_associated_bindings () const;
  
+   // Number of substitution params inherited from an outer scope (e.g. trait
+   // params inherited by a GAT). These are not supplied by the user when writing
+   // angle-bracket args and are skipped during arity checking.
+   virtual size_t get_outer_param_count () const { return 0; }
+ 
    // this is overridden in TypeBoundPredicate
    virtual TypeBoundPredicateItem
    lookup_associated_type (const std::string &search);
*************** public:
*** 398,407 ****
    // parameters X and Y
    BaseType *infer_substitions (location_t locus);
  
-   // this clears any possible projections from higher ranked trait bounds which
-   // could be hanging around from a previous resolution
-   void prepare_higher_ranked_bounds ();
- 
    // FIXME
    // this is bad name for this, i think it should be something like
    // compute-higher-ranked-bounds
--- 403,408 ----
diff -Nrcpad gcc-17-20260705/gcc/rust/typecheck/rust-tyty.cc gcc-17-20260712/gcc/rust/typecheck/rust-tyty.cc
*** gcc-17-20260705/gcc/rust/typecheck/rust-tyty.cc	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/typecheck/rust-tyty.cc	Sun Jul 12 22:32:11 2026
***************
*** 27,32 ****
--- 27,33 ----
  #include "rust-substitution-mapper.h"
  #include "rust-hir-trait-reference.h"
  #include "rust-hir-trait-resolve.h"
+ #include "rust-hir-type-check.h"
  #include "tree-pretty-print.h"
  
  #include "optional.h"
*************** BaseType::satisfies_bound (const TypeBou
*** 337,348 ****
  	  if (!is_associated_type)
  	    continue;
  
- 	  TyTy::BaseType *impl_item_ty = nullptr;
- 	  Analysis::NodeMapping i = item->get_impl_mappings ();
- 	  bool query_ok = Resolver::query_type (i.get_hirid (), &impl_item_ty);
- 	  if (!query_ok)
- 	    return false;
- 
  	  std::string item_name = item->get_impl_item_name ();
  	  tl::optional<TypeBoundPredicateItem> lookup
  	    = predicate.lookup_associated_item (item_name);
--- 338,343 ----
*************** BaseType::satisfies_bound (const TypeBou
*** 351,356 ****
--- 346,377 ----
  
  	  const auto *item_ref = lookup->get_raw_item ();
  	  TyTy::BaseType *bound_ty = item_ref->get_tyty ();
+ 	  const auto &bindings
+ 	    = predicate.get_substitution_arguments ().get_binding_args ();
+ 	  auto bind_it = bindings.find (item_name);
+ 	  if (bind_it != bindings.end ())
+ 	    bound_ty = bind_it->second;
+ 	  else if (auto *proj = bound_ty->try_as<TyTy::ProjectionType> ())
+ 	    if (proj->is_trait_position ())
+ 	      continue;
+ 
+ 	  TyTy::BaseType *impl_item_ty = nullptr;
+ 	  Analysis::NodeMapping i = item->get_impl_mappings ();
+ 	  bool query_ok = Resolver::query_type (i.get_hirid (), &impl_item_ty);
+ 	  if (!query_ok)
+ 	    return false;
+ 
+ 	  // If the impl alias still depends on the impl's own generics
+ 	  // defer the binding check to monomorphization.
+ 	  //
+ 	  // The receiver-vs-impl substitution that pins T = i32 only
+ 	  // happens with a committing unification at the call site
+ 	  bool impl_item_concrete = impl_item_ty->is_concrete ();
+ 	  if (auto *p = impl_item_ty->try_as<TyTy::ProjectionType> ())
+ 	    if (!p->is_trait_position () && p->get () != nullptr)
+ 	      impl_item_concrete = p->get ()->is_concrete ();
+ 	  if (!impl_item_concrete)
+ 	    continue;
  
  	  if (!Resolver::types_compatable (
  		TyTy::TyWithLocation (bound_ty, predicate.get_locus ()),
*************** BaseType::destructure ()
*** 496,505 ****
  
  	  x = p->resolve ();
  	}
-       else if (auto p = x->try_as<ProjectionType> ())
- 	{
- 	  x = p->get ();
- 	}
        else
  	{
  	  return x;
--- 517,522 ----
*************** BaseType::destructure () const
*** 558,567 ****
  
  	  x = p->resolve ();
  	}
-       else if (auto p = x->try_as<const ProjectionType> ())
- 	{
- 	  x = p->get ();
- 	}
        else if (auto p = x->try_as<const OpaqueType> ())
  	{
  	  auto pr = p->resolve ();
--- 575,580 ----
*************** BaseType::monomorphized_clone () const
*** 659,664 ****
--- 672,684 ----
  			  adt->get_region_constraints (),
  			  adt->get_combined_refs ());
      }
+   else if (auto proj = x->try_as<const ProjectionType> ())
+     {
+       TyTy::ProjectionType *xx
+ 	= static_cast<TyTy::ProjectionType *> (proj->clone ());
+       return Resolver::normalize_projection (xx, UNKNOWN_LOCATION /*FIXME*/,
+ 					     false, true);
+     }
    else
      {
        return x->clone ();
*************** BaseType::contains_infer () const
*** 743,749 ****
      }
    else if (auto arr = x->try_as<const ArrayType> ())
      {
!       return arr->get_element_type ()->contains_infer ();
      }
    else if (auto slice = x->try_as<const SliceType> ())
      {
--- 763,772 ----
      }
    else if (auto arr = x->try_as<const ArrayType> ())
      {
!       auto type_infer = (arr->get_element_type ()->contains_infer ());
!       if (type_infer)
! 	return type_infer;
!       return arr->get_capacity ()->contains_infer ();
      }
    else if (auto slice = x->try_as<const SliceType> ())
      {
*************** BaseType::contains_infer () const
*** 778,783 ****
--- 801,813 ----
      {
        return x;
      }
+   else if (x->get_kind () == TyTy::TypeKind::CONST)
+     {
+       if (x->as_const_type ()->const_kind () == BaseConstType::Infer)
+ 	{
+ 	  return x;
+ 	}
+     }
  
    return nullptr;
  }
*************** BaseType::is_concrete () const
*** 787,793 ****
  {
    const TyTy::BaseType *x = destructure ();
  
!   if (x->is<ParamType> () || x->is<ProjectionType> ())
      {
        return false;
      }
--- 817,823 ----
  {
    const TyTy::BaseType *x = destructure ();
  
!   if (x->is<ParamType> ())
      {
        return false;
      }
*************** BaseType::is_concrete () const
*** 799,804 ****
--- 829,839 ----
  
        return true;
      }
+   else if (x->is<ProjectionType> ())
+     {
+       const auto p = x->as<const TyTy::ProjectionType> ();
+       return p->get_self ()->is_concrete ();
+     }
    // placeholder is a special case for this case when it is not resolvable
    // it means we its just an empty placeholder associated type which is
    // concrete
*************** ClosureType::handle_substitions (Substit
*** 2444,2499 ****
  }
  
  void
- ClosureType::setup_fn_once_output () const
- {
-   // lookup the lang items
-   auto fn_once_lookup = mappings.lookup_lang_item (LangItem::Kind::FN_ONCE);
-   auto fn_once_output_lookup
-     = mappings.lookup_lang_item (LangItem::Kind::FN_ONCE_OUTPUT);
-   if (!fn_once_lookup)
-     {
-       rust_fatal_error (UNKNOWN_LOCATION,
- 			"Missing required %<fn_once%> lang item");
-       return;
-     }
-   if (!fn_once_output_lookup)
-     {
-       rust_fatal_error (UNKNOWN_LOCATION,
- 			"Missing required %<fn_once_ouput%> lang item");
-       return;
-     }
- 
-   DefId &trait_id = fn_once_lookup.value ();
-   DefId &trait_item_id = fn_once_output_lookup.value ();
- 
-   // resolve to the trait
-   HIR::Item *item = mappings.lookup_defid (trait_id).value ();
-   rust_assert (item->get_item_kind () == HIR::Item::ItemKind::Trait);
-   HIR::Trait *trait = static_cast<HIR::Trait *> (item);
- 
-   Resolver::TraitReference *trait_ref
-     = Resolver::TraitResolver::Resolve (*trait);
-   rust_assert (!trait_ref->is_error ());
- 
-   // resolve to trait item
-   HIR::TraitItem *trait_item
-     = mappings.lookup_trait_item_defid (trait_item_id).value ();
-   rust_assert (trait_item->get_item_kind ()
- 	       == HIR::TraitItem::TraitItemKind::TYPE);
-   std::string item_identifier = trait_item->trait_identifier ();
- 
-   // setup associated types  #[lang = "fn_once_output"]
-   Resolver::TraitItemReference *item_reference = nullptr;
-   bool found = trait_ref->lookup_trait_item_by_type (
-     item_identifier, Resolver::TraitItemReference::TraitItemType::TYPE,
-     &item_reference);
-   rust_assert (found);
- 
-   // setup
-   item_reference->associated_type_set (&get_result_type ());
- }
- 
- void
  ArrayType::accept_vis (TyVisitor &vis)
  {
    vis.visit (*this);
--- 2479,2484 ----
*************** ReferenceType::get_region () const
*** 3085,3097 ****
  bool
  ReferenceType::is_dyn_object () const
  {
!   return is_dyn_slice_type () || is_dyn_str_type () || is_dyn_obj_type ();
  }
  
  bool
  ReferenceType::is_dyn_slice_type (const TyTy::SliceType **slice) const
  {
!   const TyTy::BaseType *element = get_base ()->destructure ();
    if (element->get_kind () != TyTy::TypeKind::SLICE)
      return false;
    if (slice == nullptr)
--- 3070,3103 ----
  bool
  ReferenceType::is_dyn_object () const
  {
!   return is_dyn_slice_type () || is_dyn_str_type () || is_dyn_obj_type ()
! 	 || is_dyn_cstr_type ();
! }
! 
! static const TyTy::BaseType *
! destructure_through_projections (const TyTy::BaseType *t)
! {
!   const TyTy::BaseType *element = t->destructure ();
!   for (int guard = 0; guard < 16; guard++)
!     {
!       auto *proj = element->try_as<const TyTy::ProjectionType> ();
!       if (proj == nullptr)
! 	break;
!       auto *normalized = Resolver::normalize_projection (
! 	const_cast<TyTy::ProjectionType *> (proj), BUILTINS_LOCATION,
! 	false /*emit_errors*/, false /*unify_self*/);
!       if (normalized == proj || normalized == nullptr
! 	  || normalized->get_kind () == TyTy::TypeKind::ERROR)
! 	break;
!       element = normalized->destructure ();
!     }
!   return element;
  }
  
  bool
  ReferenceType::is_dyn_slice_type (const TyTy::SliceType **slice) const
  {
!   const TyTy::BaseType *element = destructure_through_projections (get_base ());
    if (element->get_kind () != TyTy::TypeKind::SLICE)
      return false;
    if (slice == nullptr)
*************** ReferenceType::is_dyn_slice_type (const
*** 3104,3110 ****
  bool
  ReferenceType::is_dyn_str_type (const TyTy::StrType **str) const
  {
!   const TyTy::BaseType *element = get_base ()->destructure ();
    if (element->get_kind () != TyTy::TypeKind::STR)
      return false;
    if (str == nullptr)
--- 3110,3116 ----
  bool
  ReferenceType::is_dyn_str_type (const TyTy::StrType **str) const
  {
!   const TyTy::BaseType *element = destructure_through_projections (get_base ());
    if (element->get_kind () != TyTy::TypeKind::STR)
      return false;
    if (str == nullptr)
*************** ReferenceType::is_dyn_str_type (const Ty
*** 3117,3123 ****
  bool
  ReferenceType::is_dyn_obj_type (const TyTy::DynamicObjectType **dyn) const
  {
!   const TyTy::BaseType *element = get_base ()->destructure ();
    if (element->get_kind () != TyTy::TypeKind::DYNAMIC)
      return false;
    if (dyn == nullptr)
--- 3123,3129 ----
  bool
  ReferenceType::is_dyn_obj_type (const TyTy::DynamicObjectType **dyn) const
  {
!   const TyTy::BaseType *element = destructure_through_projections (get_base ());
    if (element->get_kind () != TyTy::TypeKind::DYNAMIC)
      return false;
    if (dyn == nullptr)
*************** ReferenceType::is_dyn_obj_type (const Ty
*** 3127,3132 ****
--- 3133,3159 ----
    return true;
  }
  
+ bool
+ ReferenceType::is_dyn_cstr_type (const TyTy::ADTType **adt) const
+ {
+   if (get_base ()->get_kind () != TyTy::TypeKind::ADT)
+     return false;
+ 
+   const TyTy::ADTType *adt_ty
+     = static_cast<const TyTy::ADTType *> (get_base ());
+   auto &mappings = Analysis::Mappings::get ();
+   auto cstr_item = mappings.lookup_lang_item (LangItem::Kind::CSTR);
+ 
+   if (!cstr_item.has_value ())
+     return false;
+ 
+   if (cstr_item.value () != adt_ty->get_id ())
+     return false;
+ 
+   *adt = adt_ty;
+   return true;
+ }
+ 
  void
  ReferenceType::accept_vis (TyVisitor &vis)
  {
*************** PointerType::is_dyn_object () const
*** 3246,3252 ****
  bool
  PointerType::is_dyn_slice_type (const TyTy::SliceType **slice) const
  {
!   const TyTy::BaseType *element = get_base ()->destructure ();
    if (element->get_kind () != TyTy::TypeKind::SLICE)
      return false;
    if (slice == nullptr)
--- 3273,3279 ----
  bool
  PointerType::is_dyn_slice_type (const TyTy::SliceType **slice) const
  {
!   const TyTy::BaseType *element = destructure_through_projections (get_base ());
    if (element->get_kind () != TyTy::TypeKind::SLICE)
      return false;
    if (slice == nullptr)
*************** PointerType::is_dyn_slice_type (const Ty
*** 3259,3265 ****
  bool
  PointerType::is_dyn_str_type (const TyTy::StrType **str) const
  {
!   const TyTy::BaseType *element = get_base ()->destructure ();
    if (element->get_kind () != TyTy::TypeKind::STR)
      return false;
    if (str == nullptr)
--- 3286,3292 ----
  bool
  PointerType::is_dyn_str_type (const TyTy::StrType **str) const
  {
!   const TyTy::BaseType *element = destructure_through_projections (get_base ());
    if (element->get_kind () != TyTy::TypeKind::STR)
      return false;
    if (str == nullptr)
*************** PointerType::is_dyn_str_type (const TyTy
*** 3272,3278 ****
  bool
  PointerType::is_dyn_obj_type (const TyTy::DynamicObjectType **dyn) const
  {
!   const TyTy::BaseType *element = get_base ()->destructure ();
    if (element->get_kind () != TyTy::TypeKind::DYNAMIC)
      return false;
    if (dyn == nullptr)
--- 3299,3305 ----
  bool
  PointerType::is_dyn_obj_type (const TyTy::DynamicObjectType **dyn) const
  {
!   const TyTy::BaseType *element = destructure_through_projections (get_base ());
    if (element->get_kind () != TyTy::TypeKind::DYNAMIC)
      return false;
    if (dyn == nullptr)
*************** ParamType::get_name () const
*** 3415,3420 ****
--- 3442,3453 ----
    if (!can_resolve ())
      return get_symbol ();
  
+   static std::vector<const ParamType *> active;
+   if (Resolver::ScopedPush<const ParamType *>::contains (active, this))
+     return get_symbol ();
+ 
+   Resolver::ScopedPush<const ParamType *> guard (active, this);
+ 
    return destructure ()->get_name ();
  }
  
*************** PlaceholderType::clone () const
*** 4146,4165 ****
  			      get_ty_ref (), get_combined_refs ());
  }
  
- void
- PlaceholderType::set_associated_type (HirId ref)
- {
-   auto context = Resolver::TypeCheckContext::get ();
-   context->insert_associated_type_mapping (get_ty_ref (), ref);
- }
- 
- void
- PlaceholderType::clear_associated_type ()
- {
-   auto context = Resolver::TypeCheckContext::get ();
-   context->clear_associated_type_mapping (get_ty_ref ());
- }
- 
  bool
  PlaceholderType::can_resolve () const
  {
--- 4179,4184 ----
*************** PlaceholderType::get_def_id () const
*** 4214,4242 ****
  
  ProjectionType::ProjectionType (
    HirId ref, BaseType *base, const Resolver::TraitReference *trait, DefId item,
!   std::vector<SubstitutionParamMapping> subst_refs,
    SubstitutionArgumentMappings generic_arguments,
!   RegionConstraints region_constraints, std::set<HirId> refs)
    : BaseType (ref, ref, KIND,
  	      {Resolver::CanonicalPath::create_empty (), BUILTINS_LOCATION},
  	      std::move (refs)),
      SubstitutionRef (std::move (subst_refs), std::move (generic_arguments),
  		     std::move (region_constraints)),
!     base (base), trait (trait), item (item)
  {}
  
  ProjectionType::ProjectionType (
    HirId ref, HirId ty_ref, BaseType *base,
    const Resolver::TraitReference *trait, DefId item,
!   std::vector<SubstitutionParamMapping> subst_refs,
    SubstitutionArgumentMappings generic_arguments,
!   RegionConstraints region_constraints, std::set<HirId> refs)
    : BaseType (ref, ty_ref, KIND,
  	      {Resolver::CanonicalPath::create_empty (), BUILTINS_LOCATION},
  	      refs),
      SubstitutionRef (std::move (subst_refs), std::move (generic_arguments),
  		     std::move (region_constraints)),
!     base (base), trait (trait), item (item)
  {}
  
  std::string
--- 4233,4265 ----
  
  ProjectionType::ProjectionType (
    HirId ref, BaseType *base, const Resolver::TraitReference *trait, DefId item,
!   std::vector<SubstitutionParamMapping> subst_refs, TyTy::BaseType *self,
    SubstitutionArgumentMappings generic_arguments,
!   RegionConstraints region_constraints, std::set<HirId> refs,
!   size_t num_trait_substitutions)
    : BaseType (ref, ref, KIND,
  	      {Resolver::CanonicalPath::create_empty (), BUILTINS_LOCATION},
  	      std::move (refs)),
      SubstitutionRef (std::move (subst_refs), std::move (generic_arguments),
  		     std::move (region_constraints)),
!     base (base), trait (trait), item (item), self (self),
!     num_trait_substitutions (num_trait_substitutions)
  {}
  
  ProjectionType::ProjectionType (
    HirId ref, HirId ty_ref, BaseType *base,
    const Resolver::TraitReference *trait, DefId item,
!   std::vector<SubstitutionParamMapping> subst_refs, TyTy::BaseType *self,
    SubstitutionArgumentMappings generic_arguments,
!   RegionConstraints region_constraints, std::set<HirId> refs,
!   size_t num_trait_substitutions)
    : BaseType (ref, ty_ref, KIND,
  	      {Resolver::CanonicalPath::create_empty (), BUILTINS_LOCATION},
  	      refs),
      SubstitutionRef (std::move (subst_refs), std::move (generic_arguments),
  		     std::move (region_constraints)),
!     base (base), trait (trait), item (item), self (self),
!     num_trait_substitutions (num_trait_substitutions)
  {}
  
  std::string
*************** ProjectionType::get_name () const
*** 4245,4262 ****
--- 4268,4317 ----
    return as_string ();
  }
  
+ bool
+ ProjectionType::is_trait_position () const
+ {
+   return base == nullptr;
+ }
+ 
  const BaseType *
  ProjectionType::get () const
  {
+   rust_assert (base != nullptr);
    return base;
  }
  
  BaseType *
  ProjectionType::get ()
  {
+   rust_assert (base != nullptr);
    return base;
  }
  
+ const BaseType *
+ ProjectionType::get_self () const
+ {
+   return self;
+ }
+ 
+ BaseType *
+ ProjectionType::get_self ()
+ {
+   return self;
+ }
+ 
+ const Resolver::TraitReference *
+ ProjectionType::get_trait_ref () const
+ {
+   return trait;
+ }
+ 
+ DefId
+ ProjectionType::get_item_defid () const
+ {
+   return item;
+ }
+ 
  void
  ProjectionType::accept_vis (TyVisitor &vis)
  {
*************** ProjectionType::accept_vis (TyConstVisit
*** 4272,4300 ****
  std::string
  ProjectionType::as_string () const
  {
!   return "<Projection=" + subst_as_string () + "::" + base->as_string () + ">";
  }
  
  BaseType *
  ProjectionType::clone () const
  {
!   return new ProjectionType (get_ref (), get_ty_ref (), base->clone (), trait,
! 			     item, clone_substs (), used_arguments,
! 			     region_constraints, get_combined_refs ());
  }
  
  ProjectionType *
  ProjectionType::handle_substitions (
    SubstitutionArgumentMappings &subst_mappings)
  {
-   // // do we really need to substitute this?
-   // if (base->needs_generic_substitutions () ||
-   // base->contains_type_parameters
-   // ())
-   //   {
-   //     return this;
-   //   }
- 
    ProjectionType *projection = static_cast<ProjectionType *> (clone ());
    projection->set_ty_ref (mappings.get_next_hir_id ());
    projection->used_arguments = subst_mappings;
--- 4327,4354 ----
  std::string
  ProjectionType::as_string () const
  {
!   return "<Projection=" + subst_as_string ()
! 	 + "::" + (base == nullptr ? "TRAIT_POSITION" : base->as_string ())
! 	 + "::" + self->as_string () + ">";
  }
  
  BaseType *
  ProjectionType::clone () const
  {
!   auto *cloned
!     = new ProjectionType (get_ref (), get_ty_ref (),
! 			  base != nullptr ? base->clone () : nullptr, trait,
! 			  item, clone_substs (), self->clone (), used_arguments,
! 			  region_constraints, get_combined_refs (),
! 			  num_trait_substitutions);
!   cloned->inherit_bounds (get_specified_bounds ());
!   return cloned;
  }
  
  ProjectionType *
  ProjectionType::handle_substitions (
    SubstitutionArgumentMappings &subst_mappings)
  {
    ProjectionType *projection = static_cast<ProjectionType *> (clone ());
    projection->set_ty_ref (mappings.get_next_hir_id ());
    projection->used_arguments = subst_mappings;
*************** ProjectionType::handle_substitions (
*** 4311,4319 ****
  	sub.fill_param_ty (subst_mappings, subst_mappings.get_locus ());
      }
  
!   auto fty = projection->base;
!   bool is_param_ty = fty->get_kind () == TypeKind::PARAM;
!   if (is_param_ty)
      {
        ParamType *p = static_cast<ParamType *> (fty);
  
--- 4365,4416 ----
  	sub.fill_param_ty (subst_mappings, subst_mappings.get_locus ());
      }
  
!   auto fty = projection->self;
!   if (fty->get_kind () == TypeKind::PARAM)
!     {
!       ParamType *p = static_cast<ParamType *> (fty);
! 
!       SubstitutionArg arg = SubstitutionArg::error ();
!       bool ok = subst_mappings.get_argument_for_symbol (p, &arg);
!       if (ok)
! 	{
! 	  auto argt = arg.get_tyty ();
! 	  bool arg_is_param = argt->get_kind () == TyTy::TypeKind::PARAM;
! 	  bool arg_is_concrete = argt->get_kind () != TyTy::TypeKind::INFER;
! 
! 	  if (arg_is_param || arg_is_concrete)
! 	    {
! 	      auto new_field = argt->clone ();
! 	      new_field->set_ref (fty->get_ref ());
! 	      projection->self = new_field;
! 	    }
! 	  else
! 	    {
! 	      fty->set_ty_ref (argt->get_ref ());
! 	    }
! 	}
!     }
!   else if (fty->needs_generic_substitutions () || !fty->is_concrete ())
!     {
!       BaseType *concrete
! 	= Resolver::SubstMapperInternal::Resolve (fty, subst_mappings);
! 
!       if (concrete == nullptr || concrete->get_kind () == TyTy::TypeKind::ERROR)
! 	{
! 	  rust_error_at (subst_mappings.get_locus (),
! 			 "Failed to resolve field substitution type: %s",
! 			 fty->as_string ().c_str ());
! 	  return nullptr;
! 	}
! 
!       projection->self = concrete;
!     }
! 
!   fty = projection->base;
!   if (fty == nullptr)
!     return projection;
! 
!   if (fty->get_kind () == TypeKind::PARAM)
      {
        ParamType *p = static_cast<ParamType *> (fty);
  
*************** DynamicObjectType::get_object_items () c
*** 4451,4455 ****
--- 4548,4575 ----
    return items;
  }
  
+ WARN_UNUSED_RESULT tl::optional<BaseType *>
+ try_get_box_inner_type (BaseType *base)
+ {
+   if (base->get_kind () != TypeKind::ADT)
+     return tl::nullopt;
+ 
+   ADTType *adt = static_cast<ADTType *> (base);
+   auto owned_box_lookup
+     = Analysis::Mappings::get ().lookup_lang_item (LangItem::Kind::OWNED_BOX);
+ 
+   if (owned_box_lookup && adt->get_id () == *owned_box_lookup)
+     {
+       auto args = adt->get_substitution_arguments ();
+       if (!args.is_empty ())
+ 	{
+ 	  auto inner = args.get_mappings ().front ().get_tyty ();
+ 	  rust_assert (inner != nullptr);
+ 	  return inner;
+ 	}
+     }
+   return tl::nullopt;
+ }
+ 
  } // namespace TyTy
  } // namespace Rust
diff -Nrcpad gcc-17-20260705/gcc/rust/typecheck/rust-tyty.h gcc-17-20260712/gcc/rust/typecheck/rust-tyty.h
*** gcc-17-20260705/gcc/rust/typecheck/rust-tyty.h	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/typecheck/rust-tyty.h	Sun Jul 12 22:32:11 2026
*************** public:
*** 1338,1345 ****
  
    DefId get_def_id () const { return id; }
  
-   void setup_fn_once_output () const;
- 
    const std::set<NodeId> &get_captures () const { return captures; }
  
  private:
--- 1338,1343 ----
*************** public:
*** 1693,1698 ****
--- 1691,1697 ----
    bool is_dyn_slice_type (const TyTy::SliceType **slice = nullptr) const;
    bool is_dyn_str_type (const TyTy::StrType **str = nullptr) const;
    bool is_dyn_obj_type (const TyTy::DynamicObjectType **dyn = nullptr) const;
+   bool is_dyn_cstr_type (const TyTy::ADTType **adt = nullptr) const;
  
  private:
    TyVar base;
*************** public:
*** 1792,1801 ****
  
    std::string get_symbol () const;
  
-   void set_associated_type (HirId ref);
- 
-   void clear_associated_type ();
- 
    bool can_resolve () const;
  
    BaseType *resolve () const;
--- 1791,1796 ----
*************** public:
*** 1817,1838 ****
    ProjectionType (HirId ref, BaseType *base,
  		  const Resolver::TraitReference *trait, DefId item,
  		  std::vector<SubstitutionParamMapping> subst_refs,
  		  SubstitutionArgumentMappings generic_arguments
  		  = SubstitutionArgumentMappings::error (),
  		  RegionConstraints region_constraints = {},
! 		  std::set<HirId> refs = std::set<HirId> ());
  
    ProjectionType (HirId ref, HirId ty_ref, BaseType *base,
  		  const Resolver::TraitReference *trait, DefId item,
  		  std::vector<SubstitutionParamMapping> subst_refs,
  		  SubstitutionArgumentMappings generic_arguments
  		  = SubstitutionArgumentMappings::error (),
  		  RegionConstraints region_constraints = {},
! 		  std::set<HirId> refs = std::set<HirId> ());
  
    void accept_vis (TyVisitor &vis) override;
    void accept_vis (TyConstVisitor &vis) const override;
  
    std::string as_string () const override;
  
    BaseType *clone () const final override;
--- 1812,1839 ----
    ProjectionType (HirId ref, BaseType *base,
  		  const Resolver::TraitReference *trait, DefId item,
  		  std::vector<SubstitutionParamMapping> subst_refs,
+ 		  TyTy::BaseType *self,
  		  SubstitutionArgumentMappings generic_arguments
  		  = SubstitutionArgumentMappings::error (),
  		  RegionConstraints region_constraints = {},
! 		  std::set<HirId> refs = std::set<HirId> (),
! 		  size_t num_trait_substitutions = 0);
  
    ProjectionType (HirId ref, HirId ty_ref, BaseType *base,
  		  const Resolver::TraitReference *trait, DefId item,
  		  std::vector<SubstitutionParamMapping> subst_refs,
+ 		  TyTy::BaseType *self,
  		  SubstitutionArgumentMappings generic_arguments
  		  = SubstitutionArgumentMappings::error (),
  		  RegionConstraints region_constraints = {},
! 		  std::set<HirId> refs = std::set<HirId> (),
! 		  size_t num_trait_substitutions = 0);
  
    void accept_vis (TyVisitor &vis) override;
    void accept_vis (TyConstVisitor &vis) const override;
  
+   bool is_trait_position () const;
+ 
    std::string as_string () const override;
  
    BaseType *clone () const final override;
*************** public:
*** 1842,1854 ****
--- 1843,1870 ----
    const BaseType *get () const;
    BaseType *get ();
  
+   const BaseType *get_self () const;
+   BaseType *get_self ();
+   void set_self (BaseType *s) { self = s; }
+ 
+   const Resolver::TraitReference *get_trait_ref () const;
+ 
+   DefId get_item_defid () const;
+ 
    ProjectionType *
    handle_substitions (SubstitutionArgumentMappings &mappings) override final;
  
+   size_t get_outer_param_count () const override
+   {
+     return num_trait_substitutions;
+   }
+ 
  private:
    BaseType *base;
    const Resolver::TraitReference *trait;
    DefId item;
+   TyTy::BaseType *self;
+   size_t num_trait_substitutions = 0;
  };
  
  template <>
*************** BaseType::try_as<const SubstitutionRef>
*** 1944,1949 ****
--- 1960,1968 ----
    return nullptr;
  }
  
+ WARN_UNUSED_RESULT tl::optional<BaseType *>
+ try_get_box_inner_type (BaseType *base);
+ 
  } // namespace TyTy
  } // namespace Rust
  
diff -Nrcpad gcc-17-20260705/gcc/rust/typecheck/rust-unify.cc gcc-17-20260712/gcc/rust/typecheck/rust-unify.cc
*** gcc-17-20260705/gcc/rust/typecheck/rust-unify.cc	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/typecheck/rust-unify.cc	Sun Jul 12 22:32:11 2026
***************
*** 18,25 ****
--- 18,27 ----
  
  #include "rust-unify.h"
  #include "fold-const.h"
+ #include "rust-substitution-mapper.h"
  #include "rust-tyty-util.h"
  #include "rust-tyty.h"
+ #include "rust-type-util.h"
  
  namespace Rust {
  namespace Resolver {
*************** UnifyRules::go ()
*** 242,248 ****
  	    }
  	}
      }
- 
    if (infer_flag)
      {
        bool rgot_param = rtype->get_kind () == TyTy::TypeKind::PARAM;
--- 244,249 ----
*************** UnifyRules::go ()
*** 347,352 ****
--- 348,356 ----
  		}
  	    }
  	}
+       // For PROJECTION vs PROJECTION, expect_projection handles the structural
+       // comparison directly. InferSubst on projections creates fresh infer vars
+       // that are not tracked in `infers` and thus leak when commit=false.
      }
  
    if (ltype->get_kind () != TyTy::TypeKind::CONST
*************** UnifyRules::go ()
*** 363,368 ****
--- 367,379 ----
        ltype = lc->get_specified_type ();
      }
  
+   if (ltype->get_kind () != TyTy::TypeKind::PROJECTION
+       && rtype->get_kind () == TyTy::TypeKind::PROJECTION)
+     {
+       auto *rtype_proj = static_cast<TyTy::ProjectionType *> (rtype);
+       rtype = normalize_projection (rtype_proj, locus, false, false);
+     }
+ 
    switch (ltype->get_kind ())
      {
      case TyTy::INFER:
*************** UnifyRules::expect_adt (TyTy::ADTType *l
*** 580,585 ****
--- 591,601 ----
  	    return unify_error_type_node ();
  	  }
  
+ 	if (ltype->get_id () != type.get_id ())
+ 	  {
+ 	    return unify_error_type_node ();
+ 	  }
+ 
  	if (ltype->get_identifier ().compare (type.get_identifier ()) != 0)
  	  {
  	    return unify_error_type_node ();
*************** UnifyRules::expect_projection (TyTy::Pro
*** 1869,1880 ****
  	  = r->get_infer_kind () == TyTy::InferType::InferTypeKind::GENERAL;
  	if (is_valid)
  	  return ltype;
        }
        break;
  
-       // FIXME
      case TyTy::PROJECTION:
!       rust_unreachable ();
        break;
  
      case TyTy::DYNAMIC:
--- 1885,1966 ----
  	  = r->get_infer_kind () == TyTy::InferType::InferTypeKind::GENERAL;
  	if (is_valid)
  	  return ltype;
+ 	// For non-GENERAL infers (INTEGRAL/FLOAT), try normalizing the
+ 	// projection first — e.g. unifying `<Bar<i32> as Foo<i32>>::A`
+ 	// (still trait-position) with an integer literal needs the
+ 	// projection to collapse to `i32` via the impl's `type A = T`.
+ 	if (ltype->is_trait_position ())
+ 	  {
+ 	    TyTy::BaseType *ln
+ 	      = normalize_projection (ltype, locus, false, false);
+ 	    if (ln != nullptr && ln != ltype)
+ 	      return resolve_subtype (TyTy::TyWithLocation (ln),
+ 				      TyTy::TyWithLocation (rtype));
+ 	  }
        }
        break;
  
      case TyTy::PROJECTION:
!       {
! 	auto *rtype_proj = static_cast<TyTy::ProjectionType *> (rtype);
! 
! 	const auto ltype_tref = ltype->get_trait_ref ();
! 	const auto rtype_tref = rtype_proj->get_trait_ref ();
! 	if (!ltype_tref->is_equal (*rtype_tref))
! 	  {
! 	    // Trait refs differ: try normalizing ltype via the active
! 	    // ImplTraitContextFrame before giving up.  This handles cases like
! 	    // <[T] as Index<I>>::Output vs <I as SliceIndex<[T]>>::Output where
! 	    // the frame resolves Index::Output -> I::Output
! 	    // (SliceIndex::Output).
! 	    if (ltype->is_trait_position ())
! 	      {
! 		TyTy::BaseType *ln
! 		  = normalize_projection (ltype, locus, false, false);
! 		if (ln != nullptr && ln != ltype)
! 		  return resolve_subtype (TyTy::TyWithLocation (ln),
! 					  TyTy::TyWithLocation (rtype));
! 	      }
! 	    return unify_error_type_node ();
! 	  }
! 
! 	auto ltype_item = ltype->get_item_defid ();
! 	auto rtype_item = rtype_proj->get_item_defid ();
! 	if (ltype_item != rtype_item)
! 	  return unify_error_type_node ();
! 
! 	auto lrecv = ltype->get_self ();
! 	auto rrecv = rtype_proj->get_self ();
! 	auto res = resolve_subtype (TyTy::TyWithLocation (lrecv),
! 				    TyTy::TyWithLocation (rrecv));
! 	if (res->get_kind () == TyTy::TypeKind::ERROR)
! 	  return unify_error_type_node ();
! 
! 	auto base_res = unify_error_type_node ();
! 	bool ltrait = ltype->is_trait_position ();
! 	bool rtrait = rtype_proj->is_trait_position ();
! 	if (!ltrait && !rtrait)
! 	  {
! 	    auto lbase = ltype->get ();
! 	    auto rbase = rtype_proj->get ();
! 	    base_res = resolve_subtype (TyTy::TyWithLocation (lbase),
! 					TyTy::TyWithLocation (rbase));
! 	    if (base_res->get_kind () == TyTy::TypeKind::ERROR)
! 	      return unify_error_type_node ();
! 	  }
! 	else if (!ltrait)
! 	  base_res = ltype->get ();
! 	else if (!rtrait)
! 	  base_res = rtype_proj->get ();
! 	else
! 	  base_res = nullptr;
! 
! 	auto result
! 	  = new TyTy::ProjectionType (ltype->get_ref (), ltype->get_ty_ref (),
! 				      base_res, ltype_tref, ltype_item,
! 				      ltype->get_substs (), res);
! 	return result;
!       }
        break;
  
      case TyTy::DYNAMIC:
*************** UnifyRules::expect_projection (TyTy::Pro
*** 1900,1905 ****
--- 1986,2010 ----
      case TyTy::PLACEHOLDER:
      case TyTy::OPAQUE:
      case TyTy::CONST:
+       {
+ 	if (ltype->is_trait_position ())
+ 	  {
+ 	    TyTy::BaseType *ln
+ 	      = normalize_projection (ltype, locus, false, false);
+ 	    if (ln != nullptr && ln != ltype)
+ 	      return resolve_subtype (TyTy::TyWithLocation (ln),
+ 				      TyTy::TyWithLocation (rtype));
+ 	  }
+ 	else
+ 	  {
+ 	    TyTy::BaseType *lb = ltype->get ();
+ 	    if (lb != nullptr && lb != ltype)
+ 	      return resolve_subtype (TyTy::TyWithLocation (lb),
+ 				      TyTy::TyWithLocation (rtype));
+ 	  }
+       }
+       break;
+ 
      case TyTy::ERROR:
        return unify_error_type_node ();
      }
diff -Nrcpad gcc-17-20260705/gcc/rust/util/rust-intrinsic-values.h gcc-17-20260712/gcc/rust/util/rust-intrinsic-values.h
*** gcc-17-20260705/gcc/rust/util/rust-intrinsic-values.h	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/util/rust-intrinsic-values.h	Sun Jul 12 22:32:11 2026
*************** public:
*** 84,89 ****
--- 84,90 ----
    static constexpr auto &ABORT = "abort";
    static constexpr auto &OFFSET = "offset";
    static constexpr auto &SIZE_OF = "size_of";
+   static constexpr auto &SIZE_OF_VAL = "size_of_val";
    static constexpr auto &TRANSMUTE = "transmute";
  
    static constexpr auto &ADD_WITH_OVERFLOW = "add_with_overflow";
*************** public:
*** 137,142 ****
--- 138,144 ----
    static constexpr auto &ASSUME = "assume";
  
    static constexpr auto &MIN_ALIGN_OF = "min_align_of";
+   static constexpr auto &MIN_ALIGN_OF_VAL = "min_align_of_val";
    static constexpr auto &NEEDS_DROP = "needs_drop";
    static constexpr auto &CALLER_LOCATION = "caller_location";
    static constexpr auto &CTPOP = "ctpop";
*************** public:
*** 157,162 ****
--- 159,166 ----
    static constexpr auto &TYPE_NAME = "type_name";
    static constexpr auto &FORGET = "forget";
    static constexpr auto &BLACK_BOX = "black_box";
+   static constexpr auto &ARITH_OFFSET = "arith_offset";
+   static constexpr auto &WRITE_BYTES = "write_bytes";
  };
  } // namespace Values
  } // namespace Rust
diff -Nrcpad gcc-17-20260705/gcc/rust/util/rust-lang-item.cc gcc-17-20260712/gcc/rust/util/rust-lang-item.cc
*** gcc-17-20260705/gcc/rust/util/rust-lang-item.cc	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/util/rust-lang-item.cc	Sun Jul 12 22:32:11 2026
*************** const BiMap<std::string, LangItem::Kind>
*** 92,97 ****
--- 92,100 ----
    {"slice_u8", Kind::SLICE_U8},
    {"slice", Kind::SLICE},
    {"str", Kind::STR},
+   // NOTE: CStr is not present in Rust 1.49, and is only backported for
+   // compilation of Rust for Linux with a patched core lib.
+   {"CStr", Kind::CSTR},
    {"f32_runtime", Kind::F32_RUNTIME},
    {"f64_runtime", Kind::F64_RUNTIME},
  
*************** const BiMap<std::string, LangItem::Kind>
*** 122,127 ****
--- 125,131 ----
    {"manually_drop", Kind::MANUALLY_DROP},
  
    {"exchange_malloc", Kind::EXCHANGE_MALLOC},
+   {"owned_box", Kind::OWNED_BOX},
  }};
  
  tl::optional<LangItem::Kind>
diff -Nrcpad gcc-17-20260705/gcc/rust/util/rust-lang-item.h gcc-17-20260712/gcc/rust/util/rust-lang-item.h
*** gcc-17-20260705/gcc/rust/util/rust-lang-item.h	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/rust/util/rust-lang-item.h	Sun Jul 12 22:32:11 2026
*************** public:
*** 125,130 ****
--- 125,133 ----
      SLICE_U8,
      SLICE,
      STR,
+     // NOTE: CStr is not present in Rust 1.49, and is only backported for
+     // compilation of Rust for Linux with a patched core lib.
+     CSTR,
      F32_RUNTIME,
      F64_RUNTIME,
  
*************** public:
*** 157,163 ****
  
      MANUALLY_DROP,
  
!     EXCHANGE_MALLOC
    };
  
    static const BiMap<std::string, Kind> lang_items;
--- 160,167 ----
  
      MANUALLY_DROP,
  
!     EXCHANGE_MALLOC,
!     OWNED_BOX,
    };
  
    static const BiMap<std::string, Kind> lang_items;
diff -Nrcpad gcc-17-20260705/gcc/sel-sched-ir.cc gcc-17-20260712/gcc/sel-sched-ir.cc
*** gcc-17-20260705/gcc/sel-sched-ir.cc	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/sel-sched-ir.cc	Sun Jul 12 22:32:11 2026
*************** vec<sel_region_bb_info_def> sel_region_b
*** 53,61 ****
  /* A pool for allocating all lists.  */
  object_allocator<_list_node> sched_lists_pool ("sel-sched-lists");
  
- /* This contains information about successors for compute_av_set.  */
- struct succs_info current_succs;
- 
  /* Data structure to describe interaction with the generic scheduler utils.  */
  static struct common_sched_info_def sel_common_sched_info;
  
--- 53,58 ----
diff -Nrcpad gcc-17-20260705/gcc/system.h gcc-17-20260712/gcc/system.h
*** gcc-17-20260705/gcc/system.h	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/system.h	Sun Jul 12 22:32:11 2026
*************** extern int fprintf_unlocked (FILE *, con
*** 228,233 ****
--- 228,236 ----
  #ifdef INCLUDE_SSTREAM
  # include <sstream>
  #endif
+ #ifdef INCLUDE_ITERATOR
+ # include <iterator>
+ #endif
  # include <memory>
  # include <cstring>
  # include <initializer_list>
*************** extern void fancy_abort (const char *, i
*** 1066,1072 ****
  	STANDARD_INCLUDE_DIR STANDARD_INCLUDE_COMPONENT			   \
  	LINK_ELIMINATE_DUPLICATE_LDIRECTORIES MIPS_DEBUGGING_INFO	   \
  	IDENT_ASM_OP ALL_COP_ADDITIONAL_REGISTER_NAMES			   \
! 	RANGE_TEST_NON_SHORT_CIRCUIT					   \
  	REAL_VALUE_TRUNCATE REVERSE_CONDEXEC_PREDICATES_P		   \
  	TARGET_ALIGN_ANON_BITFIELDS TARGET_NARROW_VOLATILE_BITFIELDS	   \
  	IDENT_ASM_OP UNALIGNED_SHORT_ASM_OP UNALIGNED_INT_ASM_OP	   \
--- 1069,1075 ----
  	STANDARD_INCLUDE_DIR STANDARD_INCLUDE_COMPONENT			   \
  	LINK_ELIMINATE_DUPLICATE_LDIRECTORIES MIPS_DEBUGGING_INFO	   \
  	IDENT_ASM_OP ALL_COP_ADDITIONAL_REGISTER_NAMES			   \
! 	RANGE_TEST_NON_SHORT_CIRCUIT EXTENDED_SDB_BASIC_TYPES		   \
  	REAL_VALUE_TRUNCATE REVERSE_CONDEXEC_PREDICATES_P		   \
  	TARGET_ALIGN_ANON_BITFIELDS TARGET_NARROW_VOLATILE_BITFIELDS	   \
  	IDENT_ASM_OP UNALIGNED_SHORT_ASM_OP UNALIGNED_INT_ASM_OP	   \
*************** extern void fancy_abort (const char *, i
*** 1086,1092 ****
  	EH_FRAME_IN_DATA_SECTION TARGET_FLT_EVAL_METHOD_NON_DEFAULT	   \
  	JCR_SECTION_NAME TARGET_USE_JCR_SECTION SDB_DEBUGGING_INFO	   \
  	SDB_DEBUG NO_IMPLICIT_EXTERN_C NOTICE_UPDATE_CC			   \
! 	CC_STATUS_MDEP_INIT CC_STATUS_MDEP CC_STATUS SLOW_SHORT_ACCESS
  
  /* Hooks that are no longer used.  */
   #pragma GCC poison LANG_HOOKS_FUNCTION_MARK LANG_HOOKS_FUNCTION_FREE	\
--- 1089,1096 ----
  	EH_FRAME_IN_DATA_SECTION TARGET_FLT_EVAL_METHOD_NON_DEFAULT	   \
  	JCR_SECTION_NAME TARGET_USE_JCR_SECTION SDB_DEBUGGING_INFO	   \
  	SDB_DEBUG NO_IMPLICIT_EXTERN_C NOTICE_UPDATE_CC			   \
! 	CC_STATUS_MDEP_INIT CC_STATUS_MDEP CC_STATUS SLOW_SHORT_ACCESS	   \
! 	WIDEST_HARDWARE_FP_SIZE ADA_LONG_TYPE_SIZE
  
  /* Hooks that are no longer used.  */
   #pragma GCC poison LANG_HOOKS_FUNCTION_MARK LANG_HOOKS_FUNCTION_FREE	\
*************** extern void fancy_abort (const char *, i
*** 1103,1109 ****
  	TARGET_VECTORIZE_BUILTIN_MUL_WIDEN_EVEN \
  	TARGET_VECTORIZE_BUILTIN_MUL_WIDEN_ODD \
  	TARGET_MD_ASM_CLOBBERS TARGET_RELAXED_ORDERING \
! 	EXTENDED_SDB_BASIC_TYPES TARGET_INVALID_PARAMETER_TYPE \
  	TARGET_INVALID_RETURN_TYPE
  
  /* Arrays that were deleted in favor of a functional interface.  */
--- 1107,1113 ----
  	TARGET_VECTORIZE_BUILTIN_MUL_WIDEN_EVEN \
  	TARGET_VECTORIZE_BUILTIN_MUL_WIDEN_ODD \
  	TARGET_MD_ASM_CLOBBERS TARGET_RELAXED_ORDERING \
! 	TARGET_INVALID_PARAMETER_TYPE \
  	TARGET_INVALID_RETURN_TYPE
  
  /* Arrays that were deleted in favor of a functional interface.  */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/ChangeLog gcc-17-20260712/gcc/testsuite/ChangeLog
*** gcc-17-20260705/gcc/testsuite/ChangeLog	Sun Jul  5 22:32:10 2026
--- gcc-17-20260712/gcc/testsuite/ChangeLog	Sun Jul 12 22:32:11 2026
***************
*** 1,3 ****
--- 1,961 ----
+ 2026-07-11  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	PR fortran/126210
+ 	* gfortran.dg/pr126210.f90: New test.
+ 
+ 2026-07-11  Robert Dubner  <rdubner@symas.com>
+ 
+ 	* cobol.dg/group2/BINARY_and_COMP-5.cob: Removed.
+ 	* cobol.dg/group2/BINARY_and_COMP-5.out: Removed.
+ 	* cobol.dg/group2/Non-numeric_data_in_numeric_items__1_.cob: Removed.
+ 	* cobol.dg/group2/Non-numeric_data_in_numeric_items__1_.out: Removed.
+ 
+ 2026-07-11  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR testsuite/36190
+ 	* gcc.dg/vect/vect-111.c: New test.
+ 	* gcc.dg/vect/vect-ifcvt-11a.c: New test.
+ 	* gcc.dg/vect/vect-ifcvt-12.c: New test.
+ 	* gcc.dg/vect/vect-ifcvt-13.c: New test.
+ 	* gcc.dg/vect/vect-ifcvt-14.c: New test.
+ 	* gcc.dg/vect/vect-ifcvt-15.c: New test.
+ 
+ 2026-07-10  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	PR tree-optimization/57371
+ 	* c-c++-common/pr57371-6.c: New test case.
+ 	* c-c++-common/pr57371-7.c: Likewise.
+ 	* c-c++-common/pr57371-8.c: Likewise.
+ 	* c-c++-common/pr57371-9.c: Likewise.
+ 	* c-c++-common/pr57371-10.c: Likewise.
+ 
+ 2026-07-10  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	PR target/48609
+ 	* gcc.target/i386/pr48609-2.c: New test case.
+ 
+ 2026-07-10  Roger Sayle  <roger@nextmovesoftware.com>
+ 	    Richard Biener  <rguenther@suse.de>
+ 
+ 	PR target/99668
+ 	* gcc.target/i386/pr99668.c: New test case.
+ 
+ 2026-07-10  Robert Dubner  <rdubner@symas.com>
+ 
+ 	* cobol.dg/group2/Assorted_SPECIAL-NAMES_CLASS.cob: Modified for
+ 	endian neutrality.
+ 	* cobol.dg/group2/Non-numeric_data_in_numeric_items__2_.out: Likewise.
+ 	* cobol.dg/group2/FUNCTION_TRIM_with_NATIONAL_characters.cob: Likewise.
+ 	* cobol.dg/group2/Hexadecimal_literal.cob: Likewise.
+ 	* cobol.dg/group2/PACKED-DECIMAL_basic_comp-3_comp-6__2_.cob: Likewise.
+ 	* cobol.dg/group2/PACKED-DECIMAL_basic_comp-3_comp-6__2_.out: Likewise.
+ 	* cobol.dg/group2/compare_national_to_display.cob: Likewise.
+ 	* cobol.dg/group2/Complex_HEX__VALUE_and_MOVE_-_UTF-16.cob: Removed.
+ 	* cobol.dg/group2/Complex_HEX__VALUE_and_MOVE_-_UTF-16.out: Removed.
+ 	* cobol.dg/group2/DISPLAY__Sign_ASCII.out: Removed.
+ 	* cobol.dg/group2/Non-numeric_data_in_numeric_items__2_.cob: Removed.
+ 	* cobol.dg/group2/DISPLAY__Sign_ASCII.cob: Removed.
+ 	* cobol.dg/group2/BINARY_and_COMP-5__little-endian_.cob: New test.
+ 	* cobol.dg/group2/BINARY_and_COMP-5__little-endian_.out: New test.
+ 	* cobol.dg/group2/Checking_IS_NUMERIC.cob: New test.
+ 	* cobol.dg/group2/Checking_IS_NUMERIC.out: New test.
+ 	* cobol.dg/group2/Non-numeric_data_in_numeric-display__1_.cob: New test.
+ 	* cobol.dg/group2/Non-numeric_data_in_packed_decimal.cob: New test.
+ 	* cobol.dg/group2/Non-numeric_data_in_packed_decimal.out: New test.
+ 	* cobol.dg/group2/Numeric-display_sign_encoding__2_.cob: New test.
+ 	* cobol.dg/group2/Numeric-display_sign_encoding__2_.out: New test.
+ 	* cobol.dg/group2/Numeric-display_sign_encoding_sanity_check.cob: New test.
+ 	* cobol.dg/group2/Numeric-display_sign_encoding_sanity_check.out: New test.
+ 	* cobol.dg/group2/Non-numeric_data_in_numeric-display__1_.out: New file.
+ 	* cobol.dg/group2/PR59_RT3586_-_Code_format_heuristic_fails.cob: New file.
+ 	* cobol.dg/group2/RT3609_Unexpected_PROCESS.cob: New file.
+ 
+ 2026-07-10  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	PR fortran/126170
+ 	* gfortran.dg/lto/pr126170_0.f90: New test.
+ 	* gfortran.dg/lto/pr126170_1.f90: New test.
+ 
+ 2026-07-10  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+ 
+ 	* gcc.target/x86_64/abi/ms-sysv/ms-sysv.c (long_optarg): Cast
+ 	isspace arg to unsigned char.
+ 	* gcc.target/x86_64/abi/ms-sysv/ms-sysv.exp (runtest_ms_sysv): Add
+ 	--omit-rbp-clobbers on NetBSD.
+ 
+ 2026-07-10  Pengfei Li  <Pengfei.Li2@arm.com>
+ 
+ 	* gcc.dg/fold-vecperm-insert-1.c: New test.
+ 
+ 2026-07-10  Kael Andrew Franco  <kaelfandrew@gmail.com>
+ 
+ 	PR tree-optimization/125738
+ 	PR tree-optimization/64130
+ 	* gcc.dg/pr125738.c: New test.
+ 	* gcc.dg/tree-ssa/pr64130.c: Remove scan-tree-dump [2, 8589934591].
+ 	(funsigned): Remove.
+ 	(funsigned2): Rename to funsigned.
+ 
+ 2026-07-10  Daniel Barboza  <daniel.barboza@oss.qualcomm.com>
+ 
+ 	PR tree-optimization/124808
+ 	* gcc.dg/tree-ssa/pr124808-2.c: New test.
+ 	* gcc.dg/tree-ssa/pr124808.c: New test.
+ 
+ 2026-07-10  Konstantinos Eleftheriou  <konstantinos.eleftheriou@vrull.eu>
+ 
+ 	* g++.target/aarch64/fold-mem-offsets.C: New test.
+ 	* gcc.target/aarch64/fold-mem-offsets.c: New test.
+ 
+ 2026-07-10  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/107187
+ 	* g++.dg/cpp0x/attr-trivial_abi8.C: New test.
+ 
+ 2026-07-10  Pan Li  <pan2.li@intel.com>
+ 
+ 	* gcc.target/riscv/rvv/base/pr112431-16.c: Remove xfail.
+ 	* gcc.target/riscv/rvv/base/pr112431-17.c: Ditto.
+ 
+ 2026-07-10  Pan Li  <pan2.li@intel.com>
+ 
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i16-m1.c:
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i16-m2.c:
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i16-m4.c:
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i16-mf2.c:
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i16-mf4.c:
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i32-m1.c:
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i32-m2.c:
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i32-mf2.c:
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i8-m1.c:
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i8-m2.c:
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i8-mf2.c:
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i8-mf4.c:
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i8-mf8.c:
+ 
+ 2026-07-10  Pan Li  <pan2.li@intel.com>
+ 
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf4-u16-m1.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf4-u16-m2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf4-u16-mf2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf4-u16-mf4.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf4-u8-m1.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf4-u8-m2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf4-u8-mf2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf4-u8-mf4.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf4-u8-mf8.c: New test.
+ 
+ 2026-07-10  Pan Li  <pan2.li@intel.com>
+ 
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf4-i16-m1.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf4-i16-m2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf4-i16-mf2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf4-i16-mf4.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf4-i8-m1.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf4-i8-m2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf4-i8-mf2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf4-i8-mf4.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf4-i8-mf8.c: New test.
+ 
+ 2026-07-10  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR tree-optimization/116860
+ 	PR tree-optimization/114326
+ 	* gcc.dg/tree-ssa/fold-xor-and-or-1.c: New test.
+ 	* gcc.dg/tree-ssa/fold-xor-or-1.c: New test.
+ 	* gcc.dg/tree-ssa/pr102793-1.c: Update for the optimization
+ 	happening in pre.
+ 
+ 2026-07-09  Paul-Antoine Arras  <parras@baylibre.com>
+ 	    Thomas Schwinge  <tschwinge@baylibre.com>
+ 
+ 	* c-c++-common/gomp/for-static-1.c: Update scan pattern to match
+ 	niter argument.
+ 	* c-c++-common/gomp/for-static-2.c: Likewise.
+ 	* c-c++-common/gomp/for-static-3.c: Likewise.
+ 
+ 2026-07-09  Paul-Antoine Arras  <parras@baylibre.com>
+ 
+ 	* c-c++-common/gomp/masked-1.c: Add scan-tree-dump-not check that
+ 	GOMP_masked_end is not emitted without -fopenmp-ompt.
+ 	* c-c++-common/gomp/for-8.c: Remove; superseded by for-static-*.c.
+ 	* c-c++-common/gomp/for-static-1.c: New test; checks that the plain
+ 	worksharing builtins are emitted without -fopenmp-ompt.
+ 	* c-c++-common/gomp/for-static-2.c: New test; checks that _start and
+ 	_end variants are emitted with -fopenmp-ompt.
+ 	* c-c++-common/gomp/for-static-3.c: New test; checks that _dispatch is
+ 	also emitted with -fopenmp-ompt-detailed.
+ 	* c-c++-common/gomp/for-static.h: New shared test header.
+ 	* c-c++-common/gomp/masked-3.c: New test for GOMP_masked_end emission
+ 	with -fopenmp-ompt.
+ 	* c-c++-common/gomp/openmp-ompt-1.c: New test; checks that
+ 	-fopenmp-ompt without -fopenmp is diagnosed.
+ 	* c-c++-common/gomp/openmp-ompt-2.c: New test; checks that
+ 	-fopenmp-ompt-detailed without -fopenmp is diagnosed.
+ 	* c-c++-common/gomp/single2.c: New test for GOMP_single_start_with_end
+ 	and GOMP_single_end emission with -fopenmp-ompt.
+ 
+ 2026-07-09  Richard Sandiford  <rdsandiford@googlemail.com>
+ 
+ 	PR debug/126169
+ 	* gcc.dg/pr126169.c: New file.
+ 
+ 2026-07-09  Andreas Schwab  <schwab@linux-m68k.org>
+ 
+ 	PR target/126121
+ 	* gcc.dg/torture/pr126121.c: New test.
+ 
+ 2026-07-09  Karl Meakin  <karl.meakin@arm.com>
+ 
+ 	* gcc.target/aarch64/advsimd-intrinsics/vcopy_lane_indices.c:
+ 	Don't test this file on 32-bit targets.
+ 
+ 2026-07-09  Andrew Stubbs  <ams@baylibre.com>
+ 
+ 	* gcc.target/gcn/cond_fmaxnm_3.c: Fix assembler scan patterns.
+ 	* gcc.target/gcn/cond_fmaxnm_4.c: Fix assembler scan patterns.
+ 	* gcc.target/gcn/cond_fminnm_3.c: Fix assembler scan patterns.
+ 	* gcc.target/gcn/cond_fminnm_4.c: Fix assembler scan patterns.
+ 
+ 2026-07-09  Philipp Tomsich  <philipp.tomsich@vrull.eu>
+ 
+ 	* gcc.target/aarch64/widening-mul-defer-fma-1.c: New test.
+ 	* gcc.target/aarch64/widening-mul-defer-fma-2.c: New test.
+ 	* gcc.target/aarch64/widening-mul-defer-fma-3.c: New test.
+ 
+ 2026-07-09  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	PR ipa/125207
+ 	* gcc.dg/ipa/pr125207.c: New test.
+ 	* gcc.dg/vla-1.c (f1): Make function f1 static.
+ 
+ 2026-07-09  Eikansh Gupta  <eikansh.gupta@oss.qualcomm.com>
+ 
+ 	PR tree-optimization/112472
+ 	* gcc.dg/tree-ssa/pr112472.c: New test.
+ 
+ 2026-07-09  Zhou Xuhang  <zhouxh2002@gmail.com>
+ 
+ 	* g++.target/i386/mul-overflow-widen-1.C: New test.
+ 	* g++.target/i386/mul-overflow-widen-2.C: New test.
+ 
+ 2026-07-09  Avinash Jayakar  <avinashd@linux.ibm.com>
+ 
+ 	* gcc.target/powerpc/aes-builtin-1.c: Add future_compile_ok and lp64
+ 	testsuite directive.
+ 	* gcc.target/powerpc/aes-builtin-2.c: Add future_compile_ok and lp64
+ 	testsuite directive.
+ 	* gcc.target/powerpc/aes-builtin-3.c: Add future_compile_ok and lp64
+ 	testsuite directive.
+ 
+ 2026-07-09  Stefan Schulze Frielinghaus  <stefansf@gcc.gnu.org>
+ 
+ 	* gcc.dg/asm-hard-reg-error-3.c: Remove target s390-*.
+ 	* gcc.dg/builtin-bswap-8.c: Remove target s390-*.
+ 	* gcc.dg/ifcvt-4.c: Remove -m31 part.
+ 	* gcc.dg/optimize-bswaphi-1.c: Ditto.
+ 	* gcc.dg/optimize-bswapsi-3.c: Ditto.
+ 	* gcc.dg/optimize-bswapsi-4.c: Ditto.
+ 	* gcc.dg/optimize-bswapsi-5.c: Ditto.
+ 	* gcc.dg/optimize-bswapsi-6.c: Ditto.
+ 	* gcc.dg/optimize-bswapsi-7.c: Ditto.
+ 	* gcc.dg/pr120525.c: Ditto.
+ 	* gcc.dg/tree-ssa/loop-1.c: Ditto.
+ 	* gcc.misc-tests/linkage.exp: Ditto.
+ 	* gcc.target/s390/addsub-signed-overflow-1.c: Ditto.
+ 	* gcc.target/s390/addsub-signed-overflow-2.c: Ditto.
+ 	* gcc.target/s390/asm-constant-1.c: Ditto.
+ 	* gcc.target/s390/call-z10-pic-nodatarel.c: Ditto.
+ 	* gcc.target/s390/call-z10-pic.c: Ditto.
+ 	* gcc.target/s390/call-z10.c: Ditto.
+ 	* gcc.target/s390/call-z9-pic-nodatarel.c: Ditto.
+ 	* gcc.target/s390/call-z9-pic.c: Ditto.
+ 	* gcc.target/s390/call-z9.c: Ditto.
+ 	* gcc.target/s390/fcall-saved.c: Ditto.
+ 	* gcc.target/s390/global-array-element-pic2.c: Ditto.
+ 	* gcc.target/s390/insv-1.c: Ditto.
+ 	* gcc.target/s390/isfinite-isinf-isnormal-signbit-2.c: Ditto.
+ 	* gcc.target/s390/isfinite-isinf-isnormal-signbit-3.c: Ditto.
+ 	* gcc.target/s390/larl-1.c: Ditto.
+ 	* gcc.target/s390/leaf-profile.c: Ditto.
+ 	* gcc.target/s390/load-relative-check.c: Ditto.
+ 	* gcc.target/s390/load-thread-pointer-once-2.c: Ditto.
+ 	* gcc.target/s390/load-thread-pointer-once.c: Ditto.
+ 	* gcc.target/s390/loc-1.c: Ditto.
+ 	* gcc.target/s390/md/andc-splitter-2.c: Ditto.
+ 	* gcc.target/s390/mrecord-mcount.c: Ditto.
+ 	* gcc.target/s390/mul-signed-overflow-1.c: Ditto.
+ 	* gcc.target/s390/mul-signed-overflow-2.c: Ditto.
+ 	* gcc.target/s390/not.c: Ditto.
+ 	* gcc.target/s390/pr42224.c: Guard as a TPF test.
+ 	* gcc.target/s390/preserve-args-1.c: Remove -m31 part.
+ 	* gcc.target/s390/preserve-args-3.c: Ditto.
+ 	* gcc.target/s390/risbg-ll-1.c: Ditto.
+ 	* gcc.target/s390/risbg-ll-2.c: Ditto.
+ 	* gcc.target/s390/risbg-ll-3.c: Ditto.
+ 	* gcc.target/s390/stack-protector-guard-tls-1.c: Ditto.
+ 	* gcc.target/s390/target-attribute/tattr-12.c: Ditto.
+ 	* gcc.target/s390/target-attribute/tattr-15.c: Ditto.
+ 	* gcc.target/s390/tls.c: Ditto.
+ 	* gcc.target/s390/uaddc-1.c: Ditto.
+ 	* gcc.target/s390/uaddc-2.c: Ditto.
+ 	* gcc.target/s390/uaddc-3.c: Ditto.
+ 	* gcc.target/s390/usubc-1.c: Ditto.
+ 	* gcc.target/s390/usubc-2.c: Ditto.
+ 	* gcc.target/s390/usubc-3.c: Ditto.
+ 	* gcc.target/s390/vector/pattern-avg-1.c: Ditto.
+ 	* gcc.target/s390/vector/vec-abi-1.c: Ditto.
+ 	* gcc.target/s390/vector/vec-abi-3.c: Ditto.
+ 	* gcc.target/s390/vector/vec-abi-4.c: Ditto.
+ 	* gcc.target/s390/vector/vec-abi-vararg-1.c: Ditto.
+ 	* gcc.target/s390/vector/vec-scalar-cmp-1.c: Ditto.
+ 	* gcc.target/s390/zero-scratch-regs-1.c: Ditto.
+ 	* gcc.target/s390/zvector/vec-cmp-1.c: Ditto.
+ 	* gcc.target/s390/20020926-1.c: Removed.
+ 	* gcc.target/s390/20140327-1.c: Removed.
+ 	* gcc.target/s390/dwarfregtable-1.c: Removed.
+ 	* gcc.target/s390/dwarfregtable-2.c: Removed.
+ 	* gcc.target/s390/fp2int1.c: Removed.
+ 	* gcc.target/s390/mnop-mcount-m31-mzarch.c: Removed.
+ 	* gcc.target/s390/pr102222.c: Removed.
+ 	* gcc.target/s390/pr106355-2.c: Removed.
+ 	* gcc.target/s390/pr106355-3.c: Removed.
+ 	* gcc.target/s390/pr119873-5.c: Removed.
+ 	* gcc.target/s390/pr61078.c: Removed.
+ 	* gcc.target/s390/stack-clash-4.c: Removed.
+ 	* gcc.target/s390/stack-clash-5.c: Removed.
+ 	* gcc.target/s390/target-attribute/tattr-m31-1.c: Removed.
+ 	* gcc.target/s390/target-attribute/tattr-m31-10.c: Removed.
+ 	* gcc.target/s390/target-attribute/tattr-m31-11.c: Removed.
+ 	* gcc.target/s390/target-attribute/tattr-m31-12.c: Removed.
+ 	* gcc.target/s390/target-attribute/tattr-m31-13.c: Removed.
+ 	* gcc.target/s390/target-attribute/tattr-m31-14.c: Removed.
+ 	* gcc.target/s390/target-attribute/tattr-m31-15.c: Removed.
+ 	* gcc.target/s390/target-attribute/tattr-m31-16.c: Removed.
+ 	* gcc.target/s390/target-attribute/tattr-m31-17.c: Removed.
+ 	* gcc.target/s390/target-attribute/tattr-m31-18.c: Removed.
+ 	* gcc.target/s390/target-attribute/tattr-m31-19.c: Removed.
+ 	* gcc.target/s390/target-attribute/tattr-m31-2.c: Removed.
+ 	* gcc.target/s390/target-attribute/tattr-m31-20.c: Removed.
+ 	* gcc.target/s390/target-attribute/tattr-m31-21.c: Removed.
+ 	* gcc.target/s390/target-attribute/tattr-m31-22.c: Removed.
+ 	* gcc.target/s390/target-attribute/tattr-m31-23.c: Removed.
+ 	* gcc.target/s390/target-attribute/tattr-m31-24.c: Removed.
+ 	* gcc.target/s390/target-attribute/tattr-m31-25.c: Removed.
+ 	* gcc.target/s390/target-attribute/tattr-m31-26.c: Removed.
+ 	* gcc.target/s390/target-attribute/tattr-m31-27.c: Removed.
+ 	* gcc.target/s390/target-attribute/tattr-m31-28.c: Removed.
+ 	* gcc.target/s390/target-attribute/tattr-m31-29.c: Removed.
+ 	* gcc.target/s390/target-attribute/tattr-m31-3.c: Removed.
+ 	* gcc.target/s390/target-attribute/tattr-m31-30.c: Removed.
+ 	* gcc.target/s390/target-attribute/tattr-m31-31.c: Removed.
+ 	* gcc.target/s390/target-attribute/tattr-m31-32.c: Removed.
+ 	* gcc.target/s390/target-attribute/tattr-m31-4.c: Removed.
+ 	* gcc.target/s390/target-attribute/tattr-m31-5.c: Removed.
+ 	* gcc.target/s390/target-attribute/tattr-m31-6.c: Removed.
+ 	* gcc.target/s390/target-attribute/tattr-m31-7.c: Removed.
+ 	* gcc.target/s390/target-attribute/tattr-m31-8.c: Removed.
+ 	* gcc.target/s390/target-attribute/tattr-m31-9.c: Removed.
+ 
+ 2026-07-08  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	* gfortran.dg/allocate_with_mold_6.f90: New test.
+ 	* gfortran.dg/allocate_with_mold_7.f90: New test.
+ 
+ 2026-07-08  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	PR libfortran/126116
+ 	* gfortran.dg/pr126116.f90: New test.
+ 
+ 2026-07-08  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/126127
+ 	* gfortran.dg/block_18.f90: New test.
+ 
+ 2026-07-08  Uros Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/126148
+ 	* gcc.target/i386/pr126148.c: New test.
+ 
+ 2026-07-08  Jeff Law  <jeffrey.law@oss.qualcomm.com>
+ 
+ 	PR rtl-optimization/126136
+ 	* gcc.dg/torture/pr126136.c: New test.
+ 
+ 2026-07-08  Philip Herron  <herron.philip@googlemail.com>
+ 
+ 	* rust/compile/issue-4538.rs: New test.
+ 
+ 2026-07-08  Lucas Ly Ba  <hi@lucaslyba.com>
+ 
+ 	* rust/compile/missing-abi_0.rs: New test.
+ 
+ 2026-07-08  Enes Cevik  <enes@nsvke.com>
+ 
+ 	* rust/execute/trait-multi-impl.rs: New test.
+ 	* rust/execute/trait-multi-impl-generic.rs: New test.
+ 	* rust/execute/trait-multi-impl-generic2.rs: New test.
+ 
+ 2026-07-08  Philip Herron  <herron.philip@googlemail.com>
+ 
+ 	* rust/execute/raw-pointer-aliasing.rs: New test.
+ 
+ 2026-07-08  Enes Cevik  <enes@nsvke.com>
+ 
+ 	* rust/execute/min-align-of-val.rs: New test.
+ 
+ 2026-07-08  Enes Cevik  <enes@nsvke.com>
+ 
+ 	* rust/execute/size-of-val.rs: New test.
+ 
+ 2026-07-08  Philip Herron  <herron.philip@googlemail.com>
+ 
+ 	* rust/compile/issue-4617.rs: New test.
+ 
+ 2026-07-08  João Novo  <joao.c.novo@tecnico.ulisboa.pt>
+ 
+ 	* rust/compile/infer-type-issue-3583.rs: New test.
+ 
+ 2026-07-08  Enes Cevik  <enes@nsvke.com>
+ 
+ 	* rust/compile/box-expr.rs: New test.
+ 	* rust/compile/lang-owned-box-error1.rs: New test.
+ 	* rust/compile/lang-owned-box-error2.rs: New test.
+ 
+ 2026-07-08  Lishin  <lishin1008@gmail.com>
+ 
+ 	* rust/execute/drop-local-binding-lifo.rs: New test.
+ 	* rust/execute/drop-nested-block-scope.rs: New test.
+ 
+ 2026-07-08  Enes Cevik  <enes@nsvke.com>
+ 
+ 	* rust/execute/torture/dyn_object.rs: New test.
+ 
+ 2026-07-08  Enes Cevik  <enes@nsvke.com>
+ 
+ 	* rust/execute/arith-offset.rs: New test.
+ 
+ 2026-07-08  Enes Cevik  <enes@nsvke.com>
+ 
+ 	* rust/execute/write-bytes.rs: New test.
+ 
+ 2026-07-08  Lucas Ly Ba  <lucas.ly-ba@outlook.com>
+ 
+ 	* rust/compile/break-label-loop.rs: New test.
+ 
+ 2026-07-08  Lucas Ly Ba  <lucas.ly-ba@outlook.com>
+ 
+ 	* rust/compile/type-alias-generic-params.rs: New test.
+ 
+ 2026-07-08  Lucas Ly Ba  <hi@lucaslyba.com>
+ 
+ 	* rust/compile/non-contiguous-range-endpoints_0.rs: New test.
+ 
+ 2026-07-08  Owen Avery  <powerboat9.gamer@gmail.com>
+ 
+ 	* rust/compile/macros/builtin/eager4.rs: New test.
+ 
+ 2026-07-08  Yap Zhi Heng  <yapzhhg@gmail.com>
+ 
+ 	* rust/execute/torture/c_string.rs: Add CStr language item definition.
+ 	* rust/compile/c_string_null_byte_check.rs: Ditto.
+ 	* rust/execute/torture/c_string_ensure_null_term.rs: New test.
+ 
+ 2026-07-08  Yap Zhi Heng  <yapzhhg@gmail.com>
+ 
+ 	* rust/execute/torture/c_string.rs: Set -frust-c-style-string-literals.
+ 	* rust/compile/c_string_null_byte_check.rs: Set -frust-c-style-string-literals.
+ 
+ 2026-07-08  Yap Zhi Heng  <yapzhhg@gmail.com>
+ 
+ 	* rust/compile/c_string_null_byte_check.rs: New file.
+ 	* rust/execute/torture/c_string.rs: New file.
+ 
+ 2026-07-08  hriztam  <hritamstark05@gmail.com>
+ 
+ 	* rust/compile/issue-4476.rs: New test.
+ 
+ 2026-07-08  Lucas Ly Ba  <lucas.ly-ba@outlook.com>
+ 
+ 	* rust/compile/non-shorthand-field-patterns_0.rs: New test.
+ 
+ 2026-07-08  Lucas Ly Ba  <lucas.ly-ba@outlook.com>
+ 
+ 	* rust/compile/unused-visibilities_0.rs: New test.
+ 
+ 2026-07-08  Owen Avery  <powerboat9.gamer@gmail.com>
+ 
+ 	* rust/compile/assert_missing_panic.rs: Add usage of the second
+ 	form of assert.
+ 
+ 2026-07-08  Philip Herron  <herron.philip@googlemail.com>
+ 
+ 	* rust/compile/issue-4302.rs: New test.
+ 
+ 2026-07-08  Philip Herron  <herron.philip@googlemail.com>
+ 
+ 	* rust/compile/issue-2479.rs: update test
+ 
+ 2026-07-08  Philip Herron  <herron.philip@googlemail.com>
+ 
+ 	* rust/compile/issue-4471-1.rs: New test.
+ 	* rust/compile/issue-4471-2.rs: New test.
+ 
+ 2026-07-08  Philip Herron  <herron.philip@googlemail.com>
+ 
+ 	* rust/compile/issue-4481.rs: New test.
+ 
+ 2026-07-08  Philip Herron  <herron.philip@googlemail.com>
+ 
+ 	* rust/compile/issue-4592.rs: New test.
+ 
+ 2026-07-08  Philip Herron  <herron.philip@googlemail.com>
+ 
+ 	* rust/compile/issue-4486-1.rs: New test.
+ 	* rust/compile/issue-4486-2.rs: New test.
+ 
+ 2026-07-08  Philip Herron  <herron.philip@googlemail.com>
+ 
+ 	* rust/compile/gat1.rs: Add lang item setup.
+ 	* rust/compile/gat2.rs: Use no_core setup.
+ 	* rust/compile/issue-2036.rs: Remove obsolete type inference error.
+ 	* rust/compile/issue-2905-2.rs: Enable iterator impl coverage.
+ 	* rust/compile/torture/traits18.rs: Move to...
+ 	* rust/compile/torture/traits18.rs.disabled: ...here.
+ 	* rust/compile/gat3.rs: New test.
+ 	* rust/compile/gat4.rs: New test.
+ 	* rust/compile/gat5.rs: New test.
+ 	* rust/compile/gat6.rs: New test.
+ 	* rust/compile/gat7.rs: New test.
+ 	* rust/compile/gat8.rs: New test.
+ 	* rust/compile/issue-4293.rs: New test.
+ 
+ 2026-07-08  Philip Herron  <herron.philip@googlemail.com>
+ 
+ 	* rust/compile/gat2.rs: New test.
+ 
+ 2026-07-08  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/126150
+ 	* g++.dg/pr126150.C: New testcase.
+ 
+ 2026-07-08  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/126159
+ 	* gcc.dg/vect/vect-pr126159-1.c: New testcase.
+ 	* gcc.dg/vect/vect-pr126159-2.c: Likewise.
+ 
+ 2026-07-08  Pengfei Li  <Pengfei.Li2@arm.com>
+ 
+ 	* gcc.target/aarch64/sve/sad_2.c: New test.
+ 
+ 2026-07-08  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	* gcc.target/aarch64/sve/vect-early-break-cbranch_18.c: New test.
+ 
+ 2026-07-08  Richard Biener  <rguenther@suse.de>
+ 
+ 	* gcc.dg/ipa/ipa-pta-20.c: New testcase.
+ 	* g++.target/i386/pr99679-1.C: Remove expected error.
+ 	* g++.target/i386/pr99679-2.C: Likewise.
+ 
+ 2026-07-08  Philipp Tomsich  <philipp.tomsich@vrull.eu>
+ 
+ 	* gcc.target/aarch64/ampere1-reduction-unroll-1.c: New test.
+ 
+ 2026-07-08  H.J. Lu  <hjl.tools@gmail.com>
+ 	    Richard Sandiford  <rdsandiford@googlemail.com>
+ 
+ 	PR target/124798
+ 	PR target/125436
+ 	* gcc.target/i386/abi-mix-1.c: New test.
+ 	* gcc.target/i386/abi-mix-2.c: Likewise.
+ 	* gcc.target/i386/no-callee-saved-20.c: Likewise.
+ 	* gcc.target/i386/no-caller-saved-1-ms.c: Likewise.
+ 	* gcc.target/i386/no-caller-saved-1-sysv.c: Likewise.
+ 	* gcc.target/i386/no-caller-saved-1.c: Likewise.
+ 	* gcc.target/i386/no-caller-saved-2.c: Likewise.
+ 	* gcc.target/i386/no-caller-saved-3.c: Likewise.
+ 	* gcc.target/i386/no-caller-saved-4.c: Likewise.
+ 	* gcc.target/i386/no-caller-saved-5.c: Likewise.
+ 	* gcc.target/i386/no-caller-saved-6.c: Likewise.
+ 	* gcc.target/i386/no-caller-saved-7.c: Likewise.
+ 	* gcc.target/i386/no-caller-saved-8.c: Likewise.
+ 	* gcc.target/i386/no-caller-saved-9.c: Likewise.
+ 	* gcc.target/i386/no-caller-saved-10.c: Likewise.
+ 	* gcc.target/i386/no-caller-saved-11.c: Likewise.
+ 	* gcc.target/i386/pr125436-1a.c: Likewise.
+ 	* gcc.target/i386/pr125436-1b.c: Likewise.
+ 	* gcc.target/i386/pr125436-2a.c: Likewise.
+ 	* gcc.target/i386/pr125436-2b.c: Likewise.
+ 	* gcc.target/i386/pr125436-3.c: Likewise.
+ 	* gcc.target/i386/pr125436-4.c: Likewise.
+ 	* gcc.target/i386/pr119784b.c: Adjusted for unused RBP.
+ 	* gcc.target/i386/no-callee-saved-18.c: Don't check frame
+ 	register.
+ 	* gcc.target/i386/no-callee-saved-19b.c: Update the expected
+ 	instruction order.
+ 	* gcc.target/i386/no-callee-saved-19d.c: Likewise.
+ 	* gcc.target/i386/no-callee-saved-19e.c: Likewise.
+ 	* gcc.target/i386/no-callee-saved-2.c: Check frame register isn't
+ 	saved nor restored in 64-bit mode.
+ 	* gcc.target/i386/no-callee-saved-8.c: Expect no saving nor
+ 	restoring caller-saved registers.
+ 	* gcc.target/i386/no-callee-saved-9.c: Likewise.
+ 	* gcc.target/i386/preserve-none-14.c: Don't check frame register.
+ 	* gcc.target/i386/preserve-none-23.c: Likewise.
+ 	* gcc.target/i386/preserve-none-7.c: Check frame register isn't
+ 	saved nor restored in 64-bit mode.
+ 
+ 2026-07-08  Pan Li  <pan2.li@intel.com>
+ 
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u16-m1.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u16-m2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u16-m4.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u16-mf2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u16-mf4.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u32-m1.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u32-m2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u32-m4.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u32-mf2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u8-m1.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u8-m2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u8-m4.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u8-mf2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u8-mf4.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u8-mf8.c: New test.
+ 
+ 2026-07-08  Pan Li  <pan2.li@intel.com>
+ 
+ 	* gcc.target/riscv/rvv/rvv.exp: Add group_overlap folder.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/group_overlap.h: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i16-m1.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i16-m2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i16-m4.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i16-mf2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i16-mf4.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i32-m1.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i32-m2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i32-m4.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i32-mf2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i8-m1.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i8-m2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i8-m4.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i8-mf2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i8-mf4.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i8-mf8.c: New test.
+ 
+ 2026-07-07  Egas Ribeiro  <egas.g.ribeiro@gmail.com>
+ 
+ 	* g++.dg/eh/can-convert-nullptr.C: New test.
+ 
+ 2026-07-07  Vladislav Semykin  <vladislav.semykin@gmail.com>
+ 
+ 	PR c++/125886
+ 	PR c++/116385
+ 	PR c++/68604
+ 	* g++.dg/cpp0x/pr125886.C: New test.
+ 	* g++.dg/rtti/typeid14.C, g++.dg/rtti/typeid15.C: New tests.
+ 	* g++.dg/coroutines/unevaluated.C: Drop stale xfail.
+ 
+ 2026-07-07  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	PR fortran/103367
+ 	* gfortran.dg/pr103367_2.f90: New test.
+ 	* gfortran.dg/pr103367_3.f90: New test.
+ 	* gfortran.dg/pr103367_4.f90: New test.
+ 
+ 2026-07-07  wangjue  <juewang@linux.alibaba.com>
+ 
+ 	* gcc.target/riscv/unroll-explicit.c: New test.
+ 	* gcc.target/riscv/unroll-large-loop.c: New test.
+ 	* gcc.target/riscv/unroll-pragma.c: New test.
+ 	* gcc.target/riscv/unroll-small-loop-tune.c: New test.
+ 	* gcc.target/riscv/unroll-small-loop.c: New test.
+ 	* g++.dg/tree-prof/pr57451.C: Add -fno-unroll-loops.
+ 	* g++.target/riscv/pr97682.C: Likewise.
+ 	* gcc.dg/tree-ssa/pr117973-1.c: Likewise.
+ 	* gcc.dg/vect/vect-alias-check-4.c: Likewise.
+ 	* gcc.target/riscv/pr67731.c: Likewise.
+ 	* gcc.target/riscv/rvv/autovec/pr113206-1.c: Likewise.
+ 	* gcc.target/riscv/rvv/autovec/unop/math-nearbyint-0.c: Likewise.
+ 	* gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-1u.c: Likewise.
+ 	* gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-2u.c: Likewise.
+ 	* gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-3u.c: Likewise.
+ 	* gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-4u.c: Likewise.
+ 	* gcc.target/riscv/rvv/autovec/vls/calling-convention-1.c: Likewise.
+ 	* gcc.target/riscv/rvv/autovec/vls/calling-convention-2.c: Likewise.
+ 	* gcc.target/riscv/rvv/autovec/vls/calling-convention-3.c: Likewise.
+ 	* gcc.target/riscv/rvv/autovec/vls/calling-convention-4.c: Likewise.
+ 	* gcc.target/riscv/rvv/autovec/vls/calling-convention-5.c: Likewise.
+ 	* gcc.target/riscv/rvv/autovec/vls/calling-convention-6.c: Likewise.
+ 	* gcc.target/riscv/rvv/autovec/vls/calling-convention-7.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-39.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-41.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-45.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-46.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-48.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-49.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-50.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-52.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-56.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-59.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-60.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-61.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-62.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-64.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-65.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-66.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-67.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-68.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-69.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-70.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-71.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-frm-insert-4.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-frm-insert-5.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/pr114352-3.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/scalar_move-7.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/spill-10.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/spill-11.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/spill-12.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/spill-8.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/spill-9.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/vwaddsub-1.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/zvbb_vandn_vx_constraint.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/zvbc_vx_constraint-2.c: Likewise.
+ 	* gcc.target/riscv/rvv/vsetvl/avl_multiple-3.c: Likewise.
+ 	* gcc.target/riscv/rvv/vsetvl/avl_multiple-4.c: Likewise.
+ 	* gcc.target/riscv/rvv/vsetvl/avl_single-4.c: Likewise.
+ 	* gcc.target/riscv/rvv/vsetvl/avl_single-6.c: Likewise.
+ 	* gcc.target/riscv/rvv/vsetvl/avl_single-66.c: Likewise.
+ 	* gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-1.c: Likewise.
+ 	* gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-2.c: Likewise.
+ 	* gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-3.c: Likewise.
+ 	* gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-4.c: Likewise.
+ 	* gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-5.c: Likewise.
+ 	* gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-6.c: Likewise.
+ 	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-1.c: Likewise.
+ 	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-10.c: Likewise.
+ 	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-14.c: Likewise.
+ 	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-15.c: Likewise.
+ 	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-16.c: Likewise.
+ 	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-17.c: Likewise.
+ 	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-18.c: Likewise.
+ 	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-19.c: Likewise.
+ 	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-20.c: Likewise.
+ 	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-21.c: Likewise.
+ 	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-22.c: Likewise.
+ 	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-23.c: Likewise.
+ 	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-25.c: Likewise.
+ 	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-27.c: Likewise.
+ 	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-28.c: Likewise.
+ 	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-29.c: Likewise.
+ 	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-3.c: Likewise.
+ 	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-30.c: Likewise.
+ 	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-31.c: Likewise.
+ 	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-35.c: Likewise.
+ 	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-37.c: Likewise.
+ 	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-7.c: Likewise.
+ 	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-8.c: Likewise.
+ 	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-9.c: Likewise.
+ 	* gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-17.c: Likewise.
+ 	* gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-18.c: Likewise.
+ 	* gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-19.c: Likewise.
+ 	* gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-20.c: Likewise.
+ 	* gcc.target/riscv/rvv/vsetvl/vlmax_conflict-11.c: Likewise.
+ 	* gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-14.c: Likewise.
+ 	* gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-15.c: Likewise.
+ 	* gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-16.c: Likewise.
+ 	* gcc.target/riscv/slt-1.c: Likewise.
+ 	* gcc.target/riscv/struct_vect_24.c: Likewise.
+ 
+ 2026-07-07  Alfie Richards  <alfie.richards@arm.com>
+ 
+ 	* gcc.target/aarch64/add_abs.c: New test.
+ 
+ 2026-07-07  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	PR target/124146
+ 	* gcc.target/aarch64/pr124146.c: New test.
+ 	* gcc.target/aarch64/pr124146-2.c: New test.
+ 	* gcc.target/aarch64/pr124146-3.c: New test.
+ 	* gcc.target/aarch64/pr124146-4.c: New test.
+ 
+ 2026-07-07  Kishan Parmar  <kishan@linux.ibm.com>
+ 
+ 	* gcc.target/powerpc/future-vucmpr-altivec.c: New test.
+ 	* gcc.target/powerpc/future-vucmpr-vsx.c: Likewise.
+ 	* gcc.target/powerpc/future-vupk.c: Likewise.
+ 
+ 2026-07-07  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	* gcc.src/maintainers.exp:
+ 
+ 2026-07-07  Stafford Horne  <shorne@gmail.com>
+ 
+ 	PR target/126081
+ 	* gcc.target/or1k/pr126081.c: New test.
+ 
+ 2026-07-07  Naveen  <naveen.siddegowda@oss.qualcomm.com>
+ 
+ 	PR tree-optimization/102202
+ 	* gcc.dg/pr102202-3.c: New test.
+ 	* gcc.dg/pr102202-4.c: New test.
+ 
+ 2026-07-06  Philipp Tomsich  <philipp.tomsich@vrull.eu>
+ 
+ 	PR tree-optimization/124545
+ 	* gcc.dg/pr124545-2.c: Use __UINT32_TYPE__ / __UINT64_TYPE__
+ 	instead of unsigned int/long/long long so the runtime check
+ 	works on ILP32 targets.
+ 
+ 2026-07-06  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/121366
+ 	* gfortran.dg/trigd_1.f90: New test.
+ 
+ 2026-07-06  Jim Lin  <jim@andestech.com>
+ 
+ 	* gcc.target/riscv/ext-dce-4.c (test_half_sign_needed): Shift
+ 	by 4 instead of 8 to keep the lh load.
+ 
+ 2026-07-06  Jim Lin  <jim@andestech.com>
+ 
+ 	* gcc.target/riscv/shift-shift-7.c: Skip under -Og.
+ 
+ 2026-07-06  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/125901
+ 	* g++.dg/reflect/type_trait16.C: New test.
+ 	* g++.dg/reflect/type_trait17.C: New test.
+ 	* g++.dg/reflect/type_trait18.C: New test.
+ 
+ 2026-07-06  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/126031
+ 	PR c++/121552
+ 	* g++.dg/cpp2a/typedef2.C: New test.
+ 
+ 2026-07-06  Jim Lin  <jim@andestech.com>
+ 
+ 	* gcc.target/riscv/zbb-min-max-05.c: Skip under -funroll-loops.
+ 
+ 2026-07-06  Mark Zhuang  <zhuangqiubin@linux.spacemit.com>
+ 
+ 	* gcc.target/riscv/mcpu-spacemit-x60.c: New test.
+ 
+ 2026-07-06  Torbjörn SVENSSON  <torbjorn.svensson@foss.st.com>
+ 
+ 	* gcc.target/arm/tls-disable-literal-pool.c: Add quotation for
+ 	command line arguments.
+ 
+ 2026-07-06  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	PR tree-optimization/120892
+ 	* gcc.dg/tree-ssa/split-path-1.c: Move to...
+ 	* gcc.c-torture/execute/split-path-1.c: ...here.  Adjust to a plain
+ 	compile and run test without the split-paths dump scan.
+ 	* gcc.dg/tree-ssa/split-path-2.c: Move to...
+ 	* gcc.c-torture/compile/split-path-2.c: ...here.  Adjust to a
+ 	compile-only test without the split-paths dump scan.
+ 	* gcc.dg/tree-ssa/split-path-3.c: Move to...
+ 	* gcc.c-torture/compile/split-path-3.c: ...here.  Likewise.
+ 	* gcc.dg/tree-ssa/split-path-4.c: Move to...
+ 	* gcc.c-torture/compile/split-path-4.c: ...here.  Likewise.
+ 	* gcc.dg/tree-ssa/split-path-5.c: Move to...
+ 	* gcc.c-torture/compile/split-path-5.c: ...here.  Likewise.
+ 	* gcc.dg/tree-ssa/split-path-6.c: Move to...
+ 	* gcc.c-torture/compile/split-path-6.c: ...here.  Likewise.
+ 	* gcc.dg/tree-ssa/split-path-7.c: Move to...
+ 	* gcc.c-torture/compile/split-path-7.c: ...here.  Likewise.
+ 	* gcc.dg/tree-ssa/split-path-8.c: Move to...
+ 	* gcc.c-torture/compile/split-path-8.c: ...here.  Likewise.
+ 	* gcc.dg/tree-ssa/split-path-9.c: Move to...
+ 	* gcc.c-torture/compile/split-path-9.c: ...here.  Likewise.
+ 	* gcc.dg/tree-ssa/split-path-10.c: Move to...
+ 	* gcc.c-torture/compile/split-path-10.c: ...here.  Likewise.
+ 	* gcc.dg/tree-ssa/split-path-11.c: Move to...
+ 	* gcc.c-torture/compile/split-path-11.c: ...here.  Likewise.
+ 	* gcc.dg/tree-ssa/split-path-12.c: Move to...
+ 	* gcc.c-torture/compile/split-path-12.c: ...here.  Likewise.
+ 	* gcc.dg/tree-ssa/split-path-13.c: Move to...
+ 	* gcc.c-torture/compile/split-path-13.c: ...here.  Likewise.
+ 	* gcc.dg/tree-ssa/pr69270.c: Move to...
+ 	* gcc.c-torture/compile/pr69270.c: ...here.  Likewise.
+ 	* g++.dg/tree-ssa/pr88797.C: Move to...
+ 	* g++.dg/torture/pr88797.C: ...here.  Adjust to a compile-only test.
+ 	* gcc.target/i386/pr106450.c: Remove -fsplit-paths from dg-options.
+ 
+ 2026-07-06  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/126098
+ 	* gcc.target/i386/pr126098.c: New test.
+ 
+ 2026-07-05  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* g++.dg/opt/20260703-1.C: New test.
+ 
+ 2026-07-05  Jose E. Marchesi  <jemarch@gnu.org>
+ 
+ 	* algol68/compile/module-extracts-1.a68: Fix expected regexp for
+ 	priority extract.
+ 	* algol68/compile/module-pub-mangling-7.a68: Fix expected regexp
+ 	for mangled operator name.
+ 	* algol68/compile/module-pub-mangling-9.a68: Likewise.
+ 
+ 2026-07-05  Jose E. Marchesi  <jemarch@gnu.org>
+ 
+ 	* algol68/compile/error-bits-denotation-1.a68: New test.
+ 	* algol68/execute/and-bits-1.a68: Fix invalid bits denotations.
+ 	* algol68/execute/bits-shift-2.a68: Likewise.
+ 	* algol68/execute/bits-shift-3.a68: Likewise.
+ 	* algol68/execute/not-bits-1.a68: Likewise.
+ 	* algol68/execute/or-bits-1.a68: Likewise.
+ 
+ 2026-07-05  Jose E. Marchesi  <jemarch@gnu.org>
+ 
+ 	* algol68/compile/error-radix-5.a68: New test.
+ 	* algol68/compile/error-radix-6.a68: Likewise.
+ 	* algol68/compile/error-radix-7.a68: Likewise.
+ 	* algol68/execute/bits-radix-ten-1.a68: Likewise.
+ 
+ 2026-07-05  Thomas Koenig  <tkoenig@gcc.gnu.org>
+ 
+ 	PR fortran/126090
+ 	* gfortran.dg/warn_undefined_vars_6.f90: Add warnings
+ 	about deleted feature.
+ 
+ 2026-07-05  Oleg Endo  <olegendo@gcc.gnu.org>
+ 
+ 	PR target/67643
+ 	* gcc.target/sh/pr67643.c: New test.
+ 
+ 2026-07-05  Oleg Endo  <olegendo@gcc.gnu.org>
+ 
+ 	PR target/55212
+ 	* gcc.target/sh/pr64366.c: Remove -mlra option.
+ 	* g++.target/sh/torture/pr55212-c311.C: Likewise.
+ 	* g++.target/sh/torture/pr55212-c333.C: Likewise.
+ 	* g++.target/sh/torture/pr55212-c373.C: Likewise.
+ 	* g++.target/sh/torture/pr55212-c384.C: Likewise.
+ 	* g++.target/sh/torture/pr55212-c413.C: Likewise.
+ 
+ 2026-07-05  Oleg Endo  <olegendo@gcc.gnu.org>
+ 
+ 	PR target/69765
+ 	* gcc.target/sh/pr69765.c: New test.
+ 
+ 2026-07-05  Oleg Endo  <olegendo@gcc.gnu.org>
+ 
+ 	PR target/116709
+ 	* gcc.target/sh/pr116709.c: New file.
+ 
+ 2026-07-05  Oleg Endo  <olegendo@gcc.gnu.org>
+ 
+ 	PR target/67459
+ 	PR target/122948
+ 	* gcc.target/sh/pr122948.c: New test.
+ 
  2026-07-04  Thomas Koenig  <tkoenig@gcc.gnu.org>
  
  	PR fortran/126058
diff -Nrcpad gcc-17-20260705/gcc/testsuite/c-c++-common/gomp/for-8.c gcc-17-20260712/gcc/testsuite/c-c++-common/gomp/for-8.c
*** gcc-17-20260705/gcc/testsuite/c-c++-common/gomp/for-8.c	Sun Jul  5 22:32:11 2026
--- gcc-17-20260712/gcc/testsuite/c-c++-common/gomp/for-8.c	Thu Jan  1 00:00:00 1970
***************
*** 1,67 ****
- /* { dg-do compile } */
- /* { dg-additional-options "-fdump-tree-ompexp" } */
- 
- /* Check that the static loop and distribute expanders fetch the thread/team
-    id and count through a single GOMP_loop_static_worksharing /
-    GOMP_distribute_static_worksharing call rather than separate
-    omp_get_thread_num/omp_get_num_threads or omp_get_team_num/omp_get_num_teams
-    calls.  */
- 
- void bar (int);
- 
- /* Static schedule without a chunk size goes through
-    expand_omp_for_static_nochunk.  */
- 
- void
- f1 (int n)
- {
-   int i;
-   #pragma omp for schedule(static)
-   for (i = 0; i < n; ++i)
-     bar (i);
- }
- 
- /* Static schedule with a chunk size goes through
-    expand_omp_for_static_chunk.  */
- 
- void
- f2 (int n)
- {
-   int i;
-   #pragma omp for schedule(static, 4)
-   for (i = 0; i < n; ++i)
-     bar (i);
- }
- 
- /* Distribute without a chunk size goes through
-    expand_omp_for_static_nochunk.  */
- 
- void
- f3 (int n)
- {
-   int i;
- #pragma omp teams
- #pragma omp distribute
-   for (i = 0; i < n; ++i)
-     bar (i);
- }
- 
- /* Distribute with a chunk size goes through
-    expand_omp_for_static_chunk.  */
- 
- void
- f4 (int n)
- {
-   int i;
- #pragma omp teams
- #pragma omp distribute dist_schedule(static, 4)
-   for (i = 0; i < n; ++i)
-     bar (i);
- }
- 
- /* { dg-final { scan-tree-dump "GOMP_loop_static_worksharing" "ompexp" } } */
- /* { dg-final { scan-tree-dump "GOMP_distribute_static_worksharing" "ompexp" } } */
- /* { dg-final { scan-tree-dump-not "omp_get_num_threads" "ompexp" } } */
- /* { dg-final { scan-tree-dump-not "omp_get_thread_num" "ompexp" } } */
- /* { dg-final { scan-tree-dump-not "omp_get_num_teams" "ompexp" } } */
- /* { dg-final { scan-tree-dump-not "omp_get_team_num" "ompexp" } } */
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/c-c++-common/gomp/for-static-1.c gcc-17-20260712/gcc/testsuite/c-c++-common/gomp/for-static-1.c
*** gcc-17-20260705/gcc/testsuite/c-c++-common/gomp/for-static-1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/c-c++-common/gomp/for-static-1.c	Sun Jul 12 22:32:11 2026
***************
*** 0 ****
--- 1,20 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-fdump-tree-ompexp" } */
+ 
+ /* Check that the static loop and distribute expanders fetch the thread/team
+    id and count through a single GOMP_loop_static_worksharing /
+    GOMP_distribute_static_worksharing call rather than separate
+    omp_get_thread_num/omp_get_num_threads or omp_get_team_num/omp_get_num_teams
+    calls.  */
+ 
+ #include "for-static.h"
+ 
+ /* { dg-final { scan-tree-dump-times "GOMP_loop_static_worksharing \\(\[^\\)\]" 2 "ompexp" } } */
+ /* { dg-final { scan-tree-dump-not "GOMP_loop_static_worksharing_start" "ompexp" } } */
+ /* { dg-final { scan-tree-dump-not "GOMP_loop_static_worksharing_dispatch" "ompexp" } } */
+ /* { dg-final { scan-tree-dump-not "GOMP_loop_static_worksharing_end" "ompexp" } } */
+ /* { dg-final { scan-tree-dump-times "GOMP_distribute_static_worksharing \\(\[^\\)\]" 2 "ompexp" } } */
+ /* { dg-final { scan-tree-dump-not "omp_get_num_threads" "ompexp" } } */
+ /* { dg-final { scan-tree-dump-not "omp_get_thread_num" "ompexp" } } */
+ /* { dg-final { scan-tree-dump-not "omp_get_num_teams" "ompexp" } } */
+ /* { dg-final { scan-tree-dump-not "omp_get_team_num" "ompexp" } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/c-c++-common/gomp/for-static-2.c gcc-17-20260712/gcc/testsuite/c-c++-common/gomp/for-static-2.c
*** gcc-17-20260705/gcc/testsuite/c-c++-common/gomp/for-static-2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/c-c++-common/gomp/for-static-2.c	Sun Jul 12 22:32:11 2026
***************
*** 0 ****
--- 1,19 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-fopenmp-ompt -fdump-tree-ompexp" } */
+ 
+ /* Check that, with -fopenmp-ompt, the _start and _end variants are called.  */
+ 
+ #include "for-static.h"
+ 
+ /* { dg-final { scan-tree-dump-not "GOMP_loop_static_worksharing \\(" "ompexp" } } */
+ /* { dg-final { scan-tree-dump-times "GOMP_loop_static_worksharing_start \\(\[^\\)\]" 2 "ompexp" } } */
+ /* { dg-final { scan-tree-dump-not "GOMP_loop_static_worksharing_dispatch" "ompexp" } } */
+ /* { dg-final { scan-tree-dump-times "GOMP_loop_static_worksharing_end \\(\\)" 2 "ompexp" } } */
+ /* { dg-final { scan-tree-dump-not "GOMP_distribute_static_worksharing \\(" "ompexp" } } */
+ /* { dg-final { scan-tree-dump-times "GOMP_distribute_static_worksharing_start \\(\[^\\)\]" 2 "ompexp" } } */
+ /* { dg-final { scan-tree-dump-not "GOMP_distribute_static_worksharing_dispatch" "ompexp" } } */
+ /* { dg-final { scan-tree-dump-times "GOMP_distribute_static_worksharing_end \\(\\)" 2 "ompexp" } } */
+ /* { dg-final { scan-tree-dump-not "omp_get_num_threads" "ompexp" } } */
+ /* { dg-final { scan-tree-dump-not "omp_get_thread_num" "ompexp" } } */
+ /* { dg-final { scan-tree-dump-not "omp_get_num_teams" "ompexp" } } */
+ /* { dg-final { scan-tree-dump-not "omp_get_team_num" "ompexp" } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/c-c++-common/gomp/for-static-3.c gcc-17-20260712/gcc/testsuite/c-c++-common/gomp/for-static-3.c
*** gcc-17-20260705/gcc/testsuite/c-c++-common/gomp/for-static-3.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/c-c++-common/gomp/for-static-3.c	Sun Jul 12 22:32:11 2026
***************
*** 0 ****
--- 1,20 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-fopenmp-ompt-detailed -fdump-tree-ompexp" } */
+ 
+ /* Check that, with -fopenmp-ompt-detailed, _dispatch builtins are called along
+    with the _start and _end variants.  */
+ 
+ #include "for-static.h"
+ 
+ /* { dg-final { scan-tree-dump-not "GOMP_loop_static_worksharing \\(" "ompexp" } } */
+ /* { dg-final { scan-tree-dump-times "GOMP_loop_static_worksharing_start \\(\[^\\)\]" 2 "ompexp" } } */
+ /* { dg-final { scan-tree-dump-times "GOMP_loop_static_worksharing_dispatch \\(\\)" 2 "ompexp" } } */
+ /* { dg-final { scan-tree-dump-times "GOMP_loop_static_worksharing_end \\(\\)" 2 "ompexp" } } */
+ /* { dg-final { scan-tree-dump-not "GOMP_distribute_static_worksharing \\(" "ompexp" } } */
+ /* { dg-final { scan-tree-dump-times "GOMP_distribute_static_worksharing_start \\(\[^\\)\]" 2 "ompexp" } } */
+ /* { dg-final { scan-tree-dump-times "GOMP_distribute_static_worksharing_dispatch \\(\\)" 2 "ompexp" } } */
+ /* { dg-final { scan-tree-dump-times "GOMP_distribute_static_worksharing_end \\(\\)" 2 "ompexp" } } */
+ /* { dg-final { scan-tree-dump-not "omp_get_num_threads" "ompexp" } } */
+ /* { dg-final { scan-tree-dump-not "omp_get_thread_num" "ompexp" } } */
+ /* { dg-final { scan-tree-dump-not "omp_get_num_teams" "ompexp" } } */
+ /* { dg-final { scan-tree-dump-not "omp_get_team_num" "ompexp" } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/c-c++-common/gomp/for-static.h gcc-17-20260712/gcc/testsuite/c-c++-common/gomp/for-static.h
*** gcc-17-20260705/gcc/testsuite/c-c++-common/gomp/for-static.h	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/c-c++-common/gomp/for-static.h	Sun Jul 12 22:32:11 2026
***************
*** 0 ****
--- 1,51 ----
+ void bar (int);
+ 
+ /* Static schedule without a chunk size goes through
+    expand_omp_for_static_nochunk.  */
+ 
+ void
+ f1 (int n)
+ {
+   int i;
+   #pragma omp for schedule(static)
+   for (i = 0; i < n; ++i)
+     bar (i);
+ }
+ 
+ /* Static schedule with a chunk size goes through
+    expand_omp_for_static_chunk.  */
+ 
+ void
+ f2 (int n)
+ {
+   int i;
+   #pragma omp for schedule(static, 4)
+   for (i = 0; i < n; ++i)
+     bar (i);
+ }
+ 
+ /* Distribute without a chunk size goes through
+    expand_omp_for_static_nochunk.  */
+ 
+ void
+ f3 (int n)
+ {
+   int i;
+ #pragma omp teams
+ #pragma omp distribute
+   for (i = 0; i < n; ++i)
+     bar (i);
+ }
+ 
+ /* Distribute with a chunk size goes through
+    expand_omp_for_static_chunk.  */
+ 
+ void
+ f4 (int n)
+ {
+   int i;
+ #pragma omp teams
+ #pragma omp distribute dist_schedule(static, 4)
+   for (i = 0; i < n; ++i)
+     bar (i);
+ }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/c-c++-common/gomp/masked-1.c gcc-17-20260712/gcc/testsuite/c-c++-common/gomp/masked-1.c
*** gcc-17-20260705/gcc/testsuite/c-c++-common/gomp/masked-1.c	Sun Jul  5 22:32:11 2026
--- gcc-17-20260712/gcc/testsuite/c-c++-common/gomp/masked-1.c	Sun Jul 12 22:32:11 2026
*************** foo (int x, int *a)
*** 26,29 ****
--- 26,30 ----
  }
  
  /* { dg-final { scan-tree-dump "GOMP_has_masked_thread_num" "omplower" } } */
+ /* { dg-final { scan-tree-dump-not "GOMP_masked_end" "omplower" } } */
  /* { dg-final { scan-tree-dump-not "omp_get_thread_num" "omplower" } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/c-c++-common/gomp/masked-3.c gcc-17-20260712/gcc/testsuite/c-c++-common/gomp/masked-3.c
*** gcc-17-20260705/gcc/testsuite/c-c++-common/gomp/masked-3.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/c-c++-common/gomp/masked-3.c	Sun Jul 12 22:32:11 2026
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-fopenmp-ompt -fdump-tree-omplower" } */
+ 
+ void bar (void);
+ 
+ void
+ foo (void)
+ {
+   #pragma omp masked
+   bar ();
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "GOMP_has_masked_thread_num" 1 "omplower" } } */
+ /* { dg-final { scan-tree-dump-times "GOMP_masked_end" 1 "omplower" } } */
+ /* { dg-final { scan-tree-dump-not "omp_get_thread_num" "omplower" } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/c-c++-common/gomp/openmp-ompt-1.c gcc-17-20260712/gcc/testsuite/c-c++-common/gomp/openmp-ompt-1.c
*** gcc-17-20260705/gcc/testsuite/c-c++-common/gomp/openmp-ompt-1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/c-c++-common/gomp/openmp-ompt-1.c	Sun Jul 12 22:32:11 2026
***************
*** 0 ****
--- 1,4 ----
+ /* { dg-do compile } */
+ /* { dg-options "-fopenmp-ompt" } */
+ 
+ /* { dg-error ".-fopenmp-ompt. and .-fopenmp-ompt-detailed. require .-fopenmp." "" { target *-*-* } 0 } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/c-c++-common/gomp/openmp-ompt-2.c gcc-17-20260712/gcc/testsuite/c-c++-common/gomp/openmp-ompt-2.c
*** gcc-17-20260705/gcc/testsuite/c-c++-common/gomp/openmp-ompt-2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/c-c++-common/gomp/openmp-ompt-2.c	Sun Jul 12 22:32:11 2026
***************
*** 0 ****
--- 1,4 ----
+ /* { dg-do compile } */
+ /* { dg-options "-fopenmp-ompt-detailed" } */
+ 
+ /* { dg-error ".-fopenmp-ompt. and .-fopenmp-ompt-detailed. require .-fopenmp." "" { target *-*-* } 0 } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/c-c++-common/gomp/single2.c gcc-17-20260712/gcc/testsuite/c-c++-common/gomp/single2.c
*** gcc-17-20260705/gcc/testsuite/c-c++-common/gomp/single2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/c-c++-common/gomp/single2.c	Sun Jul 12 22:32:11 2026
***************
*** 0 ****
--- 1,13 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-fopenmp-ompt -fdump-tree-ompexp" } */
+ 
+ void
+ foo (void)
+ {
+   #pragma omp single
+     ;
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "GOMP_single_start_with_end" 1 "ompexp" } } */
+ /* { dg-final { scan-tree-dump-times "GOMP_single_end" 1 "ompexp" } } */
+ /* { dg-final { scan-tree-dump-not "GOMP_single_start \\(" "ompexp" } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/c-c++-common/pr57371-10.c gcc-17-20260712/gcc/testsuite/c-c++-common/pr57371-10.c
*** gcc-17-20260705/gcc/testsuite/c-c++-common/pr57371-10.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/c-c++-common/pr57371-10.c	Sun Jul 12 22:32:11 2026
***************
*** 0 ****
--- 1,20 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fdump-tree-optimized -fno-trapping-math -frounding-math" } */
+ 
+ int foo1 (int a) {
+   return (float) a != 16777222.0f;
+ }
+ 
+ int foo2 (unsigned int b) {
+   return (float) b != 16777222.0f;
+ }
+ 
+ int foo3 (unsigned long long c) {
+   return (float) c != 16777222.0f;
+ }
+ 
+ int foo4 (long long d) {
+   return (float) d != 16777222.0f;
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "\\(float\\)" 4 "optimized" } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/c-c++-common/pr57371-6.c gcc-17-20260712/gcc/testsuite/c-c++-common/pr57371-6.c
*** gcc-17-20260705/gcc/testsuite/c-c++-common/pr57371-6.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/c-c++-common/pr57371-6.c	Sun Jul 12 22:32:11 2026
***************
*** 0 ****
--- 1,200 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fdump-tree-optimized -fno-trapping-math" } */
+ 
+ int foo1 (int p) {
+   return (float) p != 0;
+   /* { dg-final { scan-tree-dump "p_\[0-9]+\\(D\\) != 0;" "optimized" } } */
+ }
+ 
+ int foo2 (unsigned int q) {
+   return (float) q != 0;
+   /* { dg-final { scan-tree-dump "q_\[0-9]+\\(D\\) != 0;" "optimized" } } */
+ }
+ 
+ int foo3 (long long r) {
+   return (float) r != 0;
+   /* { dg-final { scan-tree-dump "r_\[0-9]+\\(D\\) != 0;" "optimized" } } */
+ }
+ 
+ int foo4 (unsigned long long s) {
+   return (float) s != 0;
+   /* { dg-final { scan-tree-dump "s_\[0-9]+\\(D\\) != 0;" "optimized" } } */
+ }
+ 
+ int foo5 (long long t) {
+   return (double) t != 0;
+   /* { dg-final { scan-tree-dump "t_\[0-9]+\\(D\\) != 0;" "optimized" } } */
+ }
+ 
+ int foo6 (unsigned long long u) {
+   return (double) u != 0;
+   /* { dg-final { scan-tree-dump "u_\[0-9]+\\(D\\) != 0;" "optimized" } } */
+ }
+ 
+ /* Tests when RHS is within range of integer type.  */
+ 
+ void in_range (unsigned int x)
+ {
+   {
+     volatile int in_range_1;
+     in_range_1 = (float) x > 100.0f;
+     /* { dg-final { scan-tree-dump "x_\[0-9]+\\(D\\) > 100;" "optimized" } } */
+   }
+ 
+   {
+     volatile int in_range_2;
+     in_range_2 = (float) x < 200.0f;
+     /* { dg-final { scan-tree-dump "\[0-9]+\\(D\\) <= 199;" "optimized" } } */
+   }
+ 
+   {
+     volatile int in_range_3;
+     in_range_3 = (float) x > 300.5f;
+     /* { dg-final { scan-tree-dump "\[0-9]+\\(D\\) > 300;" "optimized" } } */
+   }
+ 
+   {
+     volatile int in_range_4;
+     in_range_4 = (float) x < 400.5f;
+     /* { dg-final { scan-tree-dump "\[0-9]+\\(D\\) <= 400;" "optimized" } } */
+   }
+ 
+   {
+     volatile int in_range_5;
+     in_range_5 = (float) x == 500.0f;
+     /* { dg-final { scan-tree-dump "\[0-9]+\\(D\\) == 500;" "optimized" } } */
+   }
+ 
+   {
+     volatile int in_range_6;
+     in_range_6 = (float) x != 600.0f;
+     /* { dg-final { scan-tree-dump "\[0-9]+\\(D\\) != 600;" "optimized" } } */
+   }
+ 
+   {
+     volatile int in_range_7;
+     in_range_7 = (float) x == 700.5f;
+     /* { dg-final { scan-tree-dump "in_range_7 ={v} 0" "optimized" } } */
+   }
+ 
+   {
+     volatile int in_range_8;
+     in_range_8 = (float) x != 800.5f;
+     /* { dg-final { scan-tree-dump "in_range_8 ={v} 1" "optimized" } } */
+   }
+ }
+ 
+ /* Tests for cases where RHS is out of range of integer type.  */
+ 
+ void out_range (unsigned int x)
+ {
+   {
+     volatile int out_range_1;
+     out_range_1 = (float) x > -100.5f;
+     /* { dg-final { scan-tree-dump "out_range_1 ={v} 1" "optimized" } } */
+   }
+ 
+   {
+     volatile int out_range_2;
+     out_range_2 = (float) x >= -100.5f;
+     /* { dg-final { scan-tree-dump "out_range_2 ={v} 1" "optimized" } } */
+   }
+ 
+   {
+     volatile int out_range_3;
+     out_range_3 = (float) x < -100.5f;
+     /* { dg-final { scan-tree-dump "out_range_3 ={v} 0" "optimized" } } */
+   }
+ 
+   {
+     volatile int out_range_4;
+     out_range_4 = (float) x <= -100.5f;
+     /* { dg-final { scan-tree-dump "out_range_4 ={v} 0" "optimized" } } */
+   }
+ 
+   {
+     volatile int out_range_5;
+     out_range_5 = (float) x == -100.5f;
+     /* { dg-final { scan-tree-dump "out_range_5 ={v} 0" "optimized" } } */
+   }
+ 
+   {
+     volatile int out_range_6;
+     out_range_6 = (float) x != -100.5f;
+     /* { dg-final { scan-tree-dump "out_range_6 ={v} 1" "optimized" } } */
+   }
+ }
+ 
+ /* Tests with non-finite float consts.  */
+ 
+ void nonfinite (unsigned int x)
+ {
+ #define INFINITY __builtin_inff ()
+ 
+   {
+     volatile int nonfinite_1;
+     nonfinite_1 = (float) x > INFINITY;
+     /* { dg-final { scan-tree-dump "nonfinite_1 ={v} 0" "optimized" } } */
+   }
+ 
+   {
+     volatile int nonfinite_2;
+     nonfinite_2 = (float) x >= INFINITY;
+     /* { dg-final { scan-tree-dump "nonfinite_2 ={v} 0" "optimized" } } */
+   }
+ 
+   {
+     volatile int nonfinite_3;
+     nonfinite_3 = (float) x < INFINITY;
+     /* { dg-final { scan-tree-dump "nonfinite_3 ={v} 1" "optimized" } } */
+   }
+ 
+   {
+     volatile int nonfinite_4;
+     nonfinite_4 = (float) x <= INFINITY;
+     /* { dg-final { scan-tree-dump "nonfinite_4 ={v} 1" "optimized" } } */
+   }
+ 
+   {
+     volatile int nonfinite_5;
+     nonfinite_5 = (float) x > -INFINITY;
+     /* { dg-final { scan-tree-dump "nonfinite_5 ={v} 1" "optimized" } } */
+   }
+ 
+   {
+     volatile int nonfinite_6;
+     nonfinite_6 = (float) x >= -INFINITY;
+     /* { dg-final { scan-tree-dump "nonfinite_6 ={v} 1" "optimized" } } */
+   }
+ 
+   {
+     volatile int nonfinite_7;
+     nonfinite_7 = (float) x < -INFINITY;
+     /* { dg-final { scan-tree-dump "nonfinite_7 ={v} 0" "optimized" } } */
+   }
+ 
+   {
+     volatile int nonfinite_8;
+     nonfinite_8 = (float) x <= -INFINITY;
+     /* { dg-final { scan-tree-dump "nonfinite_8 ={v} 0" "optimized" } } */
+   }
+ 
+ #define QNAN __builtin_nanf ("0")
+ 
+   /* Even for qNaNs, only == and != are quiet.  */
+ 
+   {
+     volatile int nonfinite_9;
+     nonfinite_9 = (float) x == QNAN;
+     /* { dg-final { scan-tree-dump "nonfinite_9 ={v} 0" "optimized" } } */
+   }
+ 
+   {
+     volatile int nonfinite_10;
+     nonfinite_10 = (float) x != QNAN;
+     /* { dg-final { scan-tree-dump "nonfinite_10 ={v} 1" "optimized" } } */
+   }
+ }
+ 
+ /* { dg-final { scan-tree-dump-not "\\(float\\)" "optimized" } } */
+ /* { dg-final { scan-tree-dump-not "\\(double\\)" "optimized" } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/c-c++-common/pr57371-7.c gcc-17-20260712/gcc/testsuite/c-c++-common/pr57371-7.c
*** gcc-17-20260705/gcc/testsuite/c-c++-common/pr57371-7.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/c-c++-common/pr57371-7.c	Sun Jul 12 22:32:11 2026
***************
*** 0 ****
--- 1,218 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fdump-tree-optimized" } */
+ 
+ int foo1 (int a) {
+   a &= 4095;
+   return (float) a != 0.0f;
+   /* { dg-final { scan-tree-dump "a_\[0-9]+ != 0;" "optimized" } } */
+ }
+ 
+ int foo2 (unsigned int b) {
+   b &= 4095;
+   return (float) b != 0.0f;
+   /* { dg-final { scan-tree-dump "b_\[0-9]+ != 0;" "optimized" } } */
+ }
+ 
+ int foo3 (unsigned long long c) {
+   c &= 4095;
+   return (float) c != 0.0f;
+   /* { dg-final { scan-tree-dump "c_\[0-9]+ != 0;" "optimized" } } */
+ }
+ 
+ int foo4 (long long d) {
+   d &= 4095;
+   return (float) d != 0.0f;
+   /* { dg-final { scan-tree-dump "d_\[0-9]+ != 0;" "optimized" } } */
+ }
+ 
+ /* Tests when RHS is within range of integer type.  */
+ 
+ void in_range (unsigned int x)
+ {
+   {
+     volatile int in_range_1;
+     x &= 4095;
+     in_range_1 = (float) x > 100.0f;
+     /* { dg-final { scan-tree-dump "x_\[0-9]+ > 100" "optimized" } } */
+   }
+ 
+   {
+     volatile int in_range_2;
+     x &= 4095;
+     in_range_2 = (float) x < 200.0f;
+     /* { dg-final { scan-tree-dump "x_\[0-9]+ <= 199" "optimized" } } */
+   }
+ 
+   {
+     volatile int in_range_3;
+     x &= 4095;
+     in_range_3 = (float) x > 300.5f;
+     /* { dg-final { scan-tree-dump "x_\[0-9]+ > 300" "optimized" } } */
+   }
+ 
+   {
+     volatile int in_range_4;
+     x &= 4095;
+     in_range_4 = (float) x < 400.5f;
+     /* { dg-final { scan-tree-dump "x_\[0-9]+ <= 400" "optimized" } } */
+   }
+ 
+   {
+     volatile int in_range_5;
+     x &= 4095;
+     in_range_5 = (float) x == 500.0f;
+     /* { dg-final { scan-tree-dump "x_\[0-9]+ == 500" "optimized" } } */
+   }
+ 
+   {
+     volatile int in_range_6;
+     x &= 4095;
+     in_range_6 = (float) x != 600.0f;
+     /* { dg-final { scan-tree-dump "x_\[0-9]+ != 600" "optimized" } } */
+   }
+ 
+   {
+     volatile int in_range_7;
+     x &= 4095;
+     in_range_7 = (float) x == 700.5f;
+     /* { dg-final { scan-tree-dump "in_range_7 ={v} 0" "optimized" } } */
+   }
+ 
+   {
+     volatile int in_range_8;
+     x &= 4095;
+     in_range_8 = (float) x != 800.5f;
+     /* { dg-final { scan-tree-dump "in_range_8 ={v} 1" "optimized" } } */
+   }
+ }
+ 
+ /* Tests for cases where RHS is out of range of integer type.  */
+ 
+ void out_range (unsigned int x)
+ {
+   {
+     volatile int out_range_1;
+     x &= 4095;
+     out_range_1 = (float) x > -100.5f;
+     /* { dg-final { scan-tree-dump "out_range_1 ={v} 1" "optimized" } } */
+   }
+ 
+   {
+     volatile int out_range_2;
+     x &= 4095;
+     out_range_2 = (float) x >= -100.5f;
+     /* { dg-final { scan-tree-dump "out_range_2 ={v} 1" "optimized" } } */
+   }
+ 
+   {
+     volatile int out_range_3;
+     x &= 4095;
+     out_range_3 = (float) x < -100.5f;
+     /* { dg-final { scan-tree-dump "out_range_3 ={v} 0" "optimized" } } */
+   }
+ 
+   {
+     volatile int out_range_4;
+     x &= 4095;
+     out_range_4 = (float) x <= -100.5f;
+     /* { dg-final { scan-tree-dump "out_range_4 ={v} 0" "optimized" } } */
+   }
+ 
+   {
+     volatile int out_range_5;
+     x &= 4095;
+     out_range_5 = (float) x == -100.5f;
+     /* { dg-final { scan-tree-dump "out_range_5 ={v} 0" "optimized" } } */
+   }
+ 
+   {
+     volatile int out_range_6;
+     x &= 4095;
+     out_range_6 = (float) x != -100.5f;
+     /* { dg-final { scan-tree-dump "out_range_6 ={v} 1" "optimized" } } */
+   }
+ }
+ 
+ /* Tests with non-finite float consts.  */
+ 
+ void nonfinite (unsigned int x)
+ {
+ #define INFINITY __builtin_inff ()
+ 
+   {
+     volatile int nonfinite_1;
+     x &= 4095;
+     nonfinite_1 = (float) x > INFINITY;
+     /* { dg-final { scan-tree-dump "nonfinite_1 ={v} 0" "optimized" } } */
+   }
+ 
+   {
+     volatile int nonfinite_2;
+     x &= 4095;
+     nonfinite_2 = (float) x >= INFINITY;
+     /* { dg-final { scan-tree-dump "nonfinite_2 ={v} 0" "optimized" } } */
+   }
+ 
+   {
+     volatile int nonfinite_3;
+     x &= 4095;
+     nonfinite_3 = (float) x < INFINITY;
+     /* { dg-final { scan-tree-dump "nonfinite_3 ={v} 1" "optimized" } } */
+   }
+ 
+   {
+     volatile int nonfinite_4;
+     x &= 4095;
+     nonfinite_4 = (float) x <= INFINITY;
+     /* { dg-final { scan-tree-dump "nonfinite_4 ={v} 1" "optimized" } } */
+   }
+ 
+   {
+     volatile int nonfinite_5;
+     x &= 4095;
+     nonfinite_5 = (float) x > -INFINITY;
+     /* { dg-final { scan-tree-dump "nonfinite_5 ={v} 1" "optimized" } } */
+   }
+ 
+   {
+     volatile int nonfinite_6;
+     x &= 4095;
+     nonfinite_6 = (float) x >= -INFINITY;
+     /* { dg-final { scan-tree-dump "nonfinite_6 ={v} 1" "optimized" } } */
+   }
+ 
+   {
+     volatile int nonfinite_7;
+     x &= 4095;
+     nonfinite_7 = (float) x < -INFINITY;
+     /* { dg-final { scan-tree-dump "nonfinite_7 ={v} 0" "optimized" } } */
+   }
+ 
+   {
+     volatile int nonfinite_8;
+     x &= 4095;
+     nonfinite_8 = (float) x <= -INFINITY;
+     /* { dg-final { scan-tree-dump "nonfinite_8 ={v} 0" "optimized" } } */
+   }
+ 
+ #define QNAN __builtin_nanf ("0")
+ 
+   /* Even for qNaNs, only == and != are quiet.  */
+ 
+   {
+     volatile int nonfinite_9;
+     x &= 4095;
+     nonfinite_9 = (float) x == QNAN;
+     /* { dg-final { scan-tree-dump "nonfinite_9 ={v} 0" "optimized" } } */
+   }
+ 
+   {
+     volatile int nonfinite_10;
+     x &= 4095;
+     nonfinite_10 = (float) x != QNAN;
+     /* { dg-final { scan-tree-dump "nonfinite_10 ={v} 1" "optimized" } } */
+   }
+ }
+ 
+ /* { dg-final { scan-tree-dump-not "\\(float\\)" "optimized" } } */
+ /* { dg-final { scan-tree-dump-not "\\(double\\)" "optimized" } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/c-c++-common/pr57371-8.c gcc-17-20260712/gcc/testsuite/c-c++-common/pr57371-8.c
*** gcc-17-20260705/gcc/testsuite/c-c++-common/pr57371-8.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/c-c++-common/pr57371-8.c	Sun Jul 12 22:32:11 2026
***************
*** 0 ****
--- 1,20 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fdump-tree-optimized -fno-trapping-math" } */
+ 
+ int foo1 (int a) {
+   return (float) a != 16777220.0f;
+ }
+ 
+ int foo2 (unsigned int b) {
+   return (float) b != 16777220.0f;
+ }
+ 
+ int foo3 (unsigned long long c) {
+   return (float) c != 16777220.0f;
+ }
+ 
+ int foo4 (long long d) {
+   return (float) d != 16777220.0f;
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "\\(float\\)" 4 "optimized" } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/c-c++-common/pr57371-9.c gcc-17-20260712/gcc/testsuite/c-c++-common/pr57371-9.c
*** gcc-17-20260705/gcc/testsuite/c-c++-common/pr57371-9.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/c-c++-common/pr57371-9.c	Sun Jul 12 22:32:11 2026
***************
*** 0 ****
--- 1,24 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fdump-tree-optimized -fno-trapping-math" } */
+ 
+ int foo1 (int a) {
+   return (float) a != 16777222.0f;
+   /* { dg-final { scan-tree-dump "a_\[0-9]+\\(D\\) != 16777222;" "optimized" } } */
+ }
+ 
+ int foo2 (unsigned int b) {
+   return (float) b != 16777222.0f;
+   /* { dg-final { scan-tree-dump "b_\[0-9]+\\(D\\) != 16777222;" "optimized" } } */
+ }
+ 
+ int foo3 (unsigned long long c) {
+   return (float) c != 16777222.0f;
+   /* { dg-final { scan-tree-dump "c_\[0-9]+\\(D\\) != 16777222;" "optimized" } } */
+ }
+ 
+ int foo4 (long long d) {
+   return (float) d != 16777222.0f;
+   /* { dg-final { scan-tree-dump "d_\[0-9]+\\(D\\) != 16777222;" "optimized" } } */
+ }
+ 
+ /* { dg-final { scan-tree-dump-not "\\(float\\)" "optimized" } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/cobol.dg/group2/Assorted_SPECIAL-NAMES_CLASS.cob gcc-17-20260712/gcc/testsuite/cobol.dg/group2/Assorted_SPECIAL-NAMES_CLASS.cob
*** gcc-17-20260705/gcc/testsuite/cobol.dg/group2/Assorted_SPECIAL-NAMES_CLASS.cob	Sun Jul  5 22:32:11 2026
--- gcc-17-20260712/gcc/testsuite/cobol.dg/group2/Assorted_SPECIAL-NAMES_CLASS.cob	Sun Jul 12 22:32:11 2026
***************
*** 14,20 ****
              *> to declare what is "right".  This code works with ASCII, EBCDIC,
              *> and UTF-8 as the ALPHANUMERIC/DISPLAY encoding.
  
!             locale unicode   is "utf16le"
              CLASS HexNumber  IS "0" THRU "9", "A" THRU "F", 
                                                 "a" THRU "f"
              CLASS RealName   IS "A" THRU "Z", 
--- 14,20 ----
              *> to declare what is "right".  This code works with ASCII, EBCDIC,
              *> and UTF-8 as the ALPHANUMERIC/DISPLAY encoding.
  
!             locale unicode   is "utf16"
              CLASS HexNumber  IS "0" THRU "9", "A" THRU "F", 
                                                 "a" THRU "f"
              CLASS RealName   IS "A" THRU "Z", 
diff -Nrcpad gcc-17-20260705/gcc/testsuite/cobol.dg/group2/BINARY_and_COMP-5.cob gcc-17-20260712/gcc/testsuite/cobol.dg/group2/BINARY_and_COMP-5.cob
*** gcc-17-20260705/gcc/testsuite/cobol.dg/group2/BINARY_and_COMP-5.cob	Sun Jul  5 22:32:11 2026
--- gcc-17-20260712/gcc/testsuite/cobol.dg/group2/BINARY_and_COMP-5.cob	Thu Jan  1 00:00:00 1970
***************
*** 1,158 ****
-        *> { dg-do run }
-        *> { dg-output-file "group2/BINARY_and_COMP-5.out" }
-         identification          division.
-         program-id.             prog.
-         procedure               division.
-         call "prog1"
-         call "prog2"
-         goback.
-         end program             prog.
- 
-         identification          division.
-         program-id.             prog1.
-         data                    division.
-         working-storage         section.
-         01.
-         02 var-binary   binary          pic  9v9(10) .
-         02 var-binaryp  redefines var-binary pointer.
-         02 var-comp     comp            pic  9v9(10) .
-         02 var-compp    redefines       var-comp pointer.
-         02 var-compu    computational   pic  9v9(10) .
-         02 var-compup   redefines       var-compu pointer.
-         02 var-comp4    comp-4          pic  9v9(10) .
-         02 var-comp4p   redefines       var-comp4 pointer.
-         02 var-compu4   computational-4 pic  9v9(10) .
-         02 var-compu4p  redefines       var-compu4 pointer.
- 
-         02 var-comp5    comp-5          pic  9v9(10) .
-         02 var-comp5p   redefines       var-comp5 pointer.
-         02 var-compu5   computational-5 pic  9v9(10) .
-         02 var-compu5p  redefines       var-compu5 pointer.
- 
-         02 var-sbinary  binary          pic s9v9(10) .
-         02 var-sbinaryp redefines       var-sbinary pointer.
-         02 var-scomp    comp            pic s9v9(10) .
-         02 var-scompp   redefines       var-scomp pointer.
-         02 var-scompu   computational   pic s9v9(10) .
-         02 var-scompup  redefines       var-scompu pointer.
-         02 var-scomp4   comp-4          pic s9v9(10) .
-         02 var-scomp4p  redefines       var-scomp4 pointer.
-         02 var-scompu4  computational-4 pic s9v9(10) .
-         02 var-scompu4p redefines       var-scompu4 pointer.
- 
-         02 var-scomp5   comp-5          pic s9v9(10) .
-         02 var-scomp5p  redefines       var-scomp5 pointer.
-         02 var-scompu5  computational-5 pic s9v9(10) .
-         02 var-scompu5p redefines       var-scompu5 pointer.
-         procedure               division.
-             move  0.0001193046 to var-binary var-comp var-compu
-                                      var-comp4 var-compu4 var-comp5
-                                      var-compu5
-             display " " var-binary "  " var-comp "  " var-compu "  "
-                                     var-comp4 "  " var-compu4 "  "
-                                     var-comp5 "  " var-compu5
-             move  0.0001193046 to var-sbinary var-scomp var-scompu
-                                     var-scomp4 var-scompu4 var-scomp5
-                                     var-scompu5
-             display var-sbinary " " var-scomp " " var-scompu " "
-                                     var-scomp4 " " var-scompu4 " "
-                                     var-scomp5 " " var-scompu5
-             move -0.0001193046 to var-sbinary var-scomp var-scompu
-                                     var-scomp4 var-scompu4 var-scomp5
-                                     var-scompu5
-             display var-sbinary " " var-scomp " " var-scompu " "
-                                     var-scomp4 " " var-scompu4 " "
-                                     var-scomp5 " " var-scompu5
-             display var-binaryp
-             display var-compp
-             display var-compup
-             display var-comp4p
-             display var-compu4p
-             display var-comp5p
-             display var-compu5p
- 
-             display var-sbinaryp
-             display var-scompp
-             display var-scompup
-             display var-scomp4p
-             display var-scompu4p
-             display var-scomp5p
-             display var-scompu5p
- 
-             goback.
-         end program             prog1.
- 
-         identification          division.
-         program-id.             prog2.
-         data                    division.
-         working-storage         section.
-         01.
-         02 var-binary   pic  9v9(10) binary          .
-         02 var-binaryp  redefines var-binary pointer.
-         02 var-comp     pic  9v9(10) comp            .
-         02 var-compp    redefines       var-comp pointer.
-         02 var-compu    pic  9v9(10) computational   .
-         02 var-compup   redefines       var-compu pointer.
-         02 var-comp4    pic  9v9(10) comp-4          .
-         02 var-comp4p   redefines       var-comp4 pointer.
-         02 var-compu4   pic  9v9(10) computational-4 .
-         02 var-compu4p  redefines       var-compu4 pointer.
- 
-         02 var-comp5    pic  9v9(10) comp-5          .
-         02 var-comp5p   redefines       var-comp5 pointer.
-         02 var-compu5   pic  9v9(10) computational-5 .
-         02 var-compu5p  redefines       var-compu5 pointer.
- 
-         02 var-sbinary  pic s9v9(10) binary          .
-         02 var-sbinaryp redefines       var-sbinary pointer.
-         02 var-scomp    pic s9v9(10) comp            .
-         02 var-scompp   redefines       var-scomp pointer.
-         02 var-scompu   pic s9v9(10) computational   .
-         02 var-scompup  redefines       var-scompu pointer.
-         02 var-scomp4   pic s9v9(10) comp-4          .
-         02 var-scomp4p  redefines       var-scomp4 pointer.
-         02 var-scompu4  pic s9v9(10) computational-4 .
-         02 var-scompu4p redefines       var-scompu4 pointer.
- 
-         02 var-scomp5   pic s9v9(10) comp-5          .
-         02 var-scomp5p  redefines       var-scomp5 pointer.
-         02 var-scompu5  pic s9v9(10) computational-5 .
-         02 var-scompu5p redefines       var-scompu5 pointer.
-         procedure               division.
-             move  0.0001193046 to var-binary var-comp var-compu
-                                      var-comp4 var-compu4 var-comp5
-                                      var-compu5
-             display " " var-binary "  " var-comp "  " var-compu "  "
-                                     var-comp4 "  " var-compu4 "  "
-                                     var-comp5 "  " var-compu5
-             move  0.0001193046 to var-sbinary var-scomp var-scompu
-                                     var-scomp4 var-scompu4 var-scomp5
-                                     var-scompu5
-             display var-sbinary " " var-scomp " " var-scompu " "
-                                     var-scomp4 " " var-scompu4 " "
-                                     var-scomp5 " " var-scompu5
-             move -0.0001193046 to var-sbinary var-scomp var-scompu
-                                     var-scomp4 var-scompu4 var-scomp5
-                                     var-scompu5
-             display var-sbinary " " var-scomp " " var-scompu " "
-                                     var-scomp4 " " var-scompu4 " "
-                                     var-scomp5 " " var-scompu5
-             display var-binaryp
-             display var-compp
-             display var-compup
-             display var-comp4p
-             display var-compu4p
-             display var-comp5p
-             display var-compu5p
- 
-             display var-sbinaryp
-             display var-scompp
-             display var-scompup
-             display var-scomp4p
-             display var-scompu4p
-             display var-scomp5p
-             display var-scompu5p
- 
-             goback.
-         end program             prog2.
- 
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/cobol.dg/group2/BINARY_and_COMP-5.out gcc-17-20260712/gcc/testsuite/cobol.dg/group2/BINARY_and_COMP-5.out
*** gcc-17-20260705/gcc/testsuite/cobol.dg/group2/BINARY_and_COMP-5.out	Sun Jul  5 22:32:11 2026
--- gcc-17-20260712/gcc/testsuite/cobol.dg/group2/BINARY_and_COMP-5.out	Thu Jan  1 00:00:00 1970
***************
*** 1,35 ****
-  0.0001193046  0.0001193046  0.0001193046  0.0001193046  0.0001193046  0.0001193046  0.0001193046
- +0.0001193046 +0.0001193046 +0.0001193046 +0.0001193046 +0.0001193046 +0.0001193046 +0.0001193046
- -0.0001193046 -0.0001193046 -0.0001193046 -0.0001193046 -0.0001193046 -0.0001193046 -0.0001193046
- 0x5634120000000000
- 0x5634120000000000
- 0x5634120000000000
- 0x5634120000000000
- 0x5634120000000000
- 0x0000000000123456
- 0x0000000000123456
- 0xaacbedffffffffff
- 0xaacbedffffffffff
- 0xaacbedffffffffff
- 0xaacbedffffffffff
- 0xaacbedffffffffff
- 0xffffffffffedcbaa
- 0xffffffffffedcbaa
-  0.0001193046  0.0001193046  0.0001193046  0.0001193046  0.0001193046  0.0001193046  0.0001193046
- +0.0001193046 +0.0001193046 +0.0001193046 +0.0001193046 +0.0001193046 +0.0001193046 +0.0001193046
- -0.0001193046 -0.0001193046 -0.0001193046 -0.0001193046 -0.0001193046 -0.0001193046 -0.0001193046
- 0x5634120000000000
- 0x5634120000000000
- 0x5634120000000000
- 0x5634120000000000
- 0x5634120000000000
- 0x0000000000123456
- 0x0000000000123456
- 0xaacbedffffffffff
- 0xaacbedffffffffff
- 0xaacbedffffffffff
- 0xaacbedffffffffff
- 0xaacbedffffffffff
- 0xffffffffffedcbaa
- 0xffffffffffedcbaa
- 
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/cobol.dg/group2/BINARY_and_COMP-5__little-endian_.cob gcc-17-20260712/gcc/testsuite/cobol.dg/group2/BINARY_and_COMP-5__little-endian_.cob
*** gcc-17-20260705/gcc/testsuite/cobol.dg/group2/BINARY_and_COMP-5__little-endian_.cob	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/cobol.dg/group2/BINARY_and_COMP-5__little-endian_.cob	Sun Jul 12 22:32:11 2026
***************
*** 0 ****
--- 1,158 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/BINARY_and_COMP-5__little-endian_.out" }
+         identification          division.
+         program-id.             prog.
+         procedure               division.
+         call "prog1"
+         call "prog2"
+         goback.
+         end program             prog.
+ 
+         identification          division.
+         program-id.             prog1.
+         data                    division.
+         working-storage         section.
+         01.
+         02 var-binary   binary          pic  9v9(10) .
+         02 var-binaryp  redefines var-binary pointer.
+         02 var-comp     comp            pic  9v9(10) .
+         02 var-compp    redefines       var-comp pointer.
+         02 var-compu    computational   pic  9v9(10) .
+         02 var-compup   redefines       var-compu pointer.
+         02 var-comp4    comp-4          pic  9v9(10) .
+         02 var-comp4p   redefines       var-comp4 pointer.
+         02 var-compu4   computational-4 pic  9v9(10) .
+         02 var-compu4p  redefines       var-compu4 pointer.
+ 
+         02 var-comp5    comp-5          pic  9v9(10) .
+         02 var-comp5p   redefines       var-comp5 pointer.
+         02 var-compu5   computational-5 pic  9v9(10) .
+         02 var-compu5p  redefines       var-compu5 pointer.
+ 
+         02 var-sbinary  binary          pic s9v9(10) .
+         02 var-sbinaryp redefines       var-sbinary pointer.
+         02 var-scomp    comp            pic s9v9(10) .
+         02 var-scompp   redefines       var-scomp pointer.
+         02 var-scompu   computational   pic s9v9(10) .
+         02 var-scompup  redefines       var-scompu pointer.
+         02 var-scomp4   comp-4          pic s9v9(10) .
+         02 var-scomp4p  redefines       var-scomp4 pointer.
+         02 var-scompu4  computational-4 pic s9v9(10) .
+         02 var-scompu4p redefines       var-scompu4 pointer.
+ 
+         02 var-scomp5   comp-5          pic s9v9(10) .
+         02 var-scomp5p  redefines       var-scomp5 pointer.
+         02 var-scompu5  computational-5 pic s9v9(10) .
+         02 var-scompu5p redefines       var-scompu5 pointer.
+         procedure               division.
+             move  0.0001193046 to var-binary var-comp var-compu
+                                      var-comp4 var-compu4 var-comp5
+                                      var-compu5
+             display " " var-binary "  " var-comp "  " var-compu "  "
+                                     var-comp4 "  " var-compu4 "  "
+                                     var-comp5 "  " var-compu5
+             move  0.0001193046 to var-sbinary var-scomp var-scompu
+                                     var-scomp4 var-scompu4 var-scomp5
+                                     var-scompu5
+             display var-sbinary " " var-scomp " " var-scompu " "
+                                     var-scomp4 " " var-scompu4 " "
+                                     var-scomp5 " " var-scompu5
+             move -0.0001193046 to var-sbinary var-scomp var-scompu
+                                     var-scomp4 var-scompu4 var-scomp5
+                                     var-scompu5
+             display var-sbinary " " var-scomp " " var-scompu " "
+                                     var-scomp4 " " var-scompu4 " "
+                                     var-scomp5 " " var-scompu5
+             display var-binaryp
+             display var-compp
+             display var-compup
+             display var-comp4p
+             display var-compu4p
+             display var-comp5p
+             display var-compu5p
+ 
+             display var-sbinaryp
+             display var-scompp
+             display var-scompup
+             display var-scomp4p
+             display var-scompu4p
+             display var-scomp5p
+             display var-scompu5p
+ 
+             goback.
+         end program             prog1.
+ 
+         identification          division.
+         program-id.             prog2.
+         data                    division.
+         working-storage         section.
+         01.
+         02 var-binary   pic  9v9(10) binary          .
+         02 var-binaryp  redefines var-binary pointer.
+         02 var-comp     pic  9v9(10) comp            .
+         02 var-compp    redefines       var-comp pointer.
+         02 var-compu    pic  9v9(10) computational   .
+         02 var-compup   redefines       var-compu pointer.
+         02 var-comp4    pic  9v9(10) comp-4          .
+         02 var-comp4p   redefines       var-comp4 pointer.
+         02 var-compu4   pic  9v9(10) computational-4 .
+         02 var-compu4p  redefines       var-compu4 pointer.
+ 
+         02 var-comp5    pic  9v9(10) comp-5          .
+         02 var-comp5p   redefines       var-comp5 pointer.
+         02 var-compu5   pic  9v9(10) computational-5 .
+         02 var-compu5p  redefines       var-compu5 pointer.
+ 
+         02 var-sbinary  pic s9v9(10) binary          .
+         02 var-sbinaryp redefines       var-sbinary pointer.
+         02 var-scomp    pic s9v9(10) comp            .
+         02 var-scompp   redefines       var-scomp pointer.
+         02 var-scompu   pic s9v9(10) computational   .
+         02 var-scompup  redefines       var-scompu pointer.
+         02 var-scomp4   pic s9v9(10) comp-4          .
+         02 var-scomp4p  redefines       var-scomp4 pointer.
+         02 var-scompu4  pic s9v9(10) computational-4 .
+         02 var-scompu4p redefines       var-scompu4 pointer.
+ 
+         02 var-scomp5   pic s9v9(10) comp-5          .
+         02 var-scomp5p  redefines       var-scomp5 pointer.
+         02 var-scompu5  pic s9v9(10) computational-5 .
+         02 var-scompu5p redefines       var-scompu5 pointer.
+         procedure               division.
+             move  0.0001193046 to var-binary var-comp var-compu
+                                      var-comp4 var-compu4 var-comp5
+                                      var-compu5
+             display " " var-binary "  " var-comp "  " var-compu "  "
+                                     var-comp4 "  " var-compu4 "  "
+                                     var-comp5 "  " var-compu5
+             move  0.0001193046 to var-sbinary var-scomp var-scompu
+                                     var-scomp4 var-scompu4 var-scomp5
+                                     var-scompu5
+             display var-sbinary " " var-scomp " " var-scompu " "
+                                     var-scomp4 " " var-scompu4 " "
+                                     var-scomp5 " " var-scompu5
+             move -0.0001193046 to var-sbinary var-scomp var-scompu
+                                     var-scomp4 var-scompu4 var-scomp5
+                                     var-scompu5
+             display var-sbinary " " var-scomp " " var-scompu " "
+                                     var-scomp4 " " var-scompu4 " "
+                                     var-scomp5 " " var-scompu5
+             display var-binaryp
+             display var-compp
+             display var-compup
+             display var-comp4p
+             display var-compu4p
+             display var-comp5p
+             display var-compu5p
+ 
+             display var-sbinaryp
+             display var-scompp
+             display var-scompup
+             display var-scomp4p
+             display var-scompu4p
+             display var-scomp5p
+             display var-scompu5p
+ 
+             goback.
+         end program             prog2.
+ 
diff -Nrcpad gcc-17-20260705/gcc/testsuite/cobol.dg/group2/BINARY_and_COMP-5__little-endian_.out gcc-17-20260712/gcc/testsuite/cobol.dg/group2/BINARY_and_COMP-5__little-endian_.out
*** gcc-17-20260705/gcc/testsuite/cobol.dg/group2/BINARY_and_COMP-5__little-endian_.out	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/cobol.dg/group2/BINARY_and_COMP-5__little-endian_.out	Sun Jul 12 22:32:11 2026
***************
*** 0 ****
--- 1,35 ----
+  0.0001193046  0.0001193046  0.0001193046  0.0001193046  0.0001193046  0.0001193046  0.0001193046
+ +0.0001193046 +0.0001193046 +0.0001193046 +0.0001193046 +0.0001193046 +0.0001193046 +0.0001193046
+ -0.0001193046 -0.0001193046 -0.0001193046 -0.0001193046 -0.0001193046 -0.0001193046 -0.0001193046
+ 0x5634120000000000
+ 0x5634120000000000
+ 0x5634120000000000
+ 0x5634120000000000
+ 0x5634120000000000
+ 0x0000000000123456
+ 0x0000000000123456
+ 0xaacbedffffffffff
+ 0xaacbedffffffffff
+ 0xaacbedffffffffff
+ 0xaacbedffffffffff
+ 0xaacbedffffffffff
+ 0xffffffffffedcbaa
+ 0xffffffffffedcbaa
+  0.0001193046  0.0001193046  0.0001193046  0.0001193046  0.0001193046  0.0001193046  0.0001193046
+ +0.0001193046 +0.0001193046 +0.0001193046 +0.0001193046 +0.0001193046 +0.0001193046 +0.0001193046
+ -0.0001193046 -0.0001193046 -0.0001193046 -0.0001193046 -0.0001193046 -0.0001193046 -0.0001193046
+ 0x5634120000000000
+ 0x5634120000000000
+ 0x5634120000000000
+ 0x5634120000000000
+ 0x5634120000000000
+ 0x0000000000123456
+ 0x0000000000123456
+ 0xaacbedffffffffff
+ 0xaacbedffffffffff
+ 0xaacbedffffffffff
+ 0xaacbedffffffffff
+ 0xaacbedffffffffff
+ 0xffffffffffedcbaa
+ 0xffffffffffedcbaa
+ 
diff -Nrcpad gcc-17-20260705/gcc/testsuite/cobol.dg/group2/Checking_IS_NUMERIC.cob gcc-17-20260712/gcc/testsuite/cobol.dg/group2/Checking_IS_NUMERIC.cob
*** gcc-17-20260705/gcc/testsuite/cobol.dg/group2/Checking_IS_NUMERIC.cob	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/cobol.dg/group2/Checking_IS_NUMERIC.cob	Sun Jul 12 22:32:11 2026
***************
*** 0 ****
--- 1,56 ----
+        *> { dg-do run }
+        *> { dg-options "-dialect mf" }
+        *> { dg-output-file "group2/Checking_IS_NUMERIC.out" }
+         identification              division.
+         program-id.                 prog.
+         data                        division.
+         working-storage             section.
+             01 var0 pic xxxx.
+             01 var1 redefines var0 pic 9999.
+             01 var2 redefines var0 pic s9999 trailing.
+             01 var3 redefines var0 pic s9999 leading.
+             01 var4 redefines var0 pic s999  trailing separate.
+             01 var5 redefines var0 pic s999  leading separate.
+         procedure                   division.
+             move "1234" to var0 display var0
+             if var1 is not numeric display "Failure 1-1" space var0 end-if
+             if var2 is not numeric display "Failure 1-2" space var0 end-if
+             if var3 is not numeric display "Failure 1-3" space var0 end-if
+             if var4 is     numeric display "Failure 1-4" space var0 end-if
+             if var5 is     numeric display "Failure 1-5" space var0 end-if
+             move "12a4" to var0 display var0
+             if var1 is     numeric display "Failure 2-1" space var0 end-if
+             if var2 is     numeric display "Failure 2-2" space var0 end-if
+             if var3 is     numeric display "Failure 2-3" space var0 end-if
+             if var4 is     numeric display "Failure 2-4" space var0 end-if
+             if var5 is     numeric display "Failure 2-5" space var0 end-if
+             move "+123" to var0 display var0
+             if var1 is     numeric display "Failure 3-1" space var0 end-if
+             if var2 is     numeric display "Failure 3-2" space var0 end-if
+             if var3 is     numeric display "Failure 3-3" space var0 end-if
+             if var4 is     numeric display "Failure 3-4" space var0 end-if
+             if var5 is not numeric display "Failure 3-5" space var0 end-if
+             move "123-" to var0 display var0
+             if var1 is     numeric display "Failure 4-1" space var0 end-if
+             if var2 is     numeric display "Failure 4-2" space var0 end-if
+             if var3 is     numeric display "Failure 4-3" space var0 end-if
+             if var4 is not numeric display "Failure 4-4" space var0 end-if
+             if var5 is     numeric display "Failure 4-5" space var0 end-if
+             move -123 to var2 display var2
+             move var2(1:) to var0(1:)
+             if var1 is     numeric display "Failure 5-1" space var0 end-if
+             if var2 is not numeric display "Failure 5-2" space var0 end-if
+             if var3 is     numeric display "Failure 5-3" space var0 end-if
+             if var4 is     numeric display "Failure 5-4" space var0 end-if
+             if var5 is     numeric display "Failure 5-5" space var0 end-if
+             move -123 to var3 display var3
+             move var2(1:) to var0(1:)
+             if var1 is     numeric display "Failure 6-1" space var0 end-if
+             if var2 is     numeric display "Failure 6-2" space var0 end-if
+             if var3 is not numeric display "Failure 6-3" space var0 end-if
+             if var4 is     numeric display "Failure 6-4" space var0 end-if
+             if var5 is     numeric display "Failure 6-5" space var0 end-if
+             goback.
+         end program                 prog.
+ 
+ 
diff -Nrcpad gcc-17-20260705/gcc/testsuite/cobol.dg/group2/Checking_IS_NUMERIC.out gcc-17-20260712/gcc/testsuite/cobol.dg/group2/Checking_IS_NUMERIC.out
*** gcc-17-20260705/gcc/testsuite/cobol.dg/group2/Checking_IS_NUMERIC.out	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/cobol.dg/group2/Checking_IS_NUMERIC.out	Sun Jul 12 22:32:11 2026
***************
*** 0 ****
--- 1,7 ----
+ 1234
+ 12a4
+ +123
+ 123-
+ -0123
+ -0123
+ 
diff -Nrcpad gcc-17-20260705/gcc/testsuite/cobol.dg/group2/Complex_HEX__VALUE_and_MOVE_-_UTF-16.cob gcc-17-20260712/gcc/testsuite/cobol.dg/group2/Complex_HEX__VALUE_and_MOVE_-_UTF-16.cob
*** gcc-17-20260705/gcc/testsuite/cobol.dg/group2/Complex_HEX__VALUE_and_MOVE_-_UTF-16.cob	Sun Jul  5 22:32:11 2026
--- gcc-17-20260712/gcc/testsuite/cobol.dg/group2/Complex_HEX__VALUE_and_MOVE_-_UTF-16.cob	Thu Jan  1 00:00:00 1970
***************
*** 1,93 ****
-        *> { dg-do run }
-        *> { dg-options "-fexec-charset=utf16le" }
-        *> { dg-output-file "group2/Complex_HEX__VALUE_and_MOVE_-_UTF-16.out" }
-         identification division.
-         program-id. hex-init.
-         data division.
-         working-storage section.
-         01 template.
-             05 under-test   pic x(8).
-             05 filler       pic x.
-             05 msg pic      x(12).
-             05 filler       pic x.
-             05 utf16-val    pic x(8).
- 
-         01  var01020304.
-             05 filler1.
-                 10 filler2     pic x(2) VALUE "33".
-                 10 as-value    pic x(4) VALUE  X'01020304'.
-                 10 filler3     pic x(2) VALUE "33".
-             05 filler       pic x       value space.
-             05 msg pic      x(12)       value "var01020304".
-             05 filler       pic x       value space.
-             05 utf16-val    pic x(8)    value X"33003300010203040000000033003300".
- 
-         01  var-low.
-             05 filler1.
-                 10 filler2      pic x(2) VALUE "33".
-                 10 as-value     pic x(4) VALUE  LOW-VALUES.
-                 10 filler3      pic x(2) VALUE "33".
-             05 filler       pic x       value space.
-             05 msg pic      x(12)       value "var-low".
-             05 filler       pic x       value space.
-             05 utf16-val    pic x(8)    value X"33003300000000000000000033003300".
- 
-         01  var-space.
-             05 filler1.
-                 10 filler2      pic x(2) VALUE "33".
-                 10 as-value     pic x(4) VALUE  SPACE.
-                 10 filler3      pic x(2) VALUE "33".
-             05 filler       pic x       value space.
-             05 msg pic      x(12)       value "var-space".
-             05 filler       pic x       value space.
-             05 utf16-val    pic x(8)    value X"33003300200020002000200033003300".
- 
-         01  var-quote.
-             05 filler1.
-                 10 filler2      pic x(2) VALUE "33".
-                 10 as-value     pic x(4) VALUE  QUOTE.
-                 10 filler3      pic x(2) VALUE "33".
-             05 filler       pic x       value space.
-             05 msg pic      x(12)       value "var-quote".
-             05 filler       pic x       value space.
-             05 utf16-val    pic x(8)    value X"33003300220022002200220033003300".
- 
-         01  var-zero.
-             05 filler1.
-                 10 filler2      pic x(2) VALUE "33".
-                 10 as-value     pic x(4) VALUE  ZERO.
-                 10 filler3      pic x(2) VALUE "33".
-             05 filler       pic x       value space.
-             05 msg pic      x(12)       value "var-zero".
-             05 filler       pic x       value space.
-             05 utf16-val    pic x(8)    value X"33003300300030003000300033003300".
- 
-         01  var-high.
-             05 filler1.
-                 10 filler2      pic x(2) VALUE "33".
-                 10 as-value     pic x(4) VALUE  HIGH-VALUES.
-                 10 filler3      pic x(2) VALUE "33".
-             05 filler       pic x       value space.
-             05 msg pic      x(12)       value "var-high".
-             05 filler       pic x       value space.
-             05 utf16-val    pic x(8)    value X"33003300FF00FF00FF00FF0033003300".
- 
-         procedure division.
-             move var01020304  to template perform checker
-             move var-low      to template perform checker
-             move var-space    to template perform checker
-             move var-quote    to template perform checker
-             move var-zero     to template perform checker
-             move var-high     to template perform checker
-             goback.
-         checker.
-             display msg of template space with no advancing
-             if utf16-val of template =
-                         utf16-val of template
-                 display "is okay."
-             else
-                 display "is no good: " function hex-of(under-test)
-                 end-if
-             continue.
-         end program hex-init.
- 
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/cobol.dg/group2/Complex_HEX__VALUE_and_MOVE_-_UTF-16.out gcc-17-20260712/gcc/testsuite/cobol.dg/group2/Complex_HEX__VALUE_and_MOVE_-_UTF-16.out
*** gcc-17-20260705/gcc/testsuite/cobol.dg/group2/Complex_HEX__VALUE_and_MOVE_-_UTF-16.out	Sun Jul  5 22:32:11 2026
--- gcc-17-20260712/gcc/testsuite/cobol.dg/group2/Complex_HEX__VALUE_and_MOVE_-_UTF-16.out	Thu Jan  1 00:00:00 1970
***************
*** 1,7 ****
- var01020304  is okay.
- var-low      is okay.
- var-space    is okay.
- var-quote    is okay.
- var-zero     is okay.
- var-high     is okay.
- 
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/cobol.dg/group2/DISPLAY__Sign_ASCII.cob gcc-17-20260712/gcc/testsuite/cobol.dg/group2/DISPLAY__Sign_ASCII.cob
*** gcc-17-20260705/gcc/testsuite/cobol.dg/group2/DISPLAY__Sign_ASCII.cob	Sun Jul  5 22:32:11 2026
--- gcc-17-20260712/gcc/testsuite/cobol.dg/group2/DISPLAY__Sign_ASCII.cob	Thu Jan  1 00:00:00 1970
***************
*** 1,39 ****
-        *> { dg-do run }
-        *> { dg-output-file "group2/DISPLAY__Sign_ASCII.out" }
-        IDENTIFICATION   DIVISION.
-        PROGRAM-ID.      prog.
-        DATA             DIVISION.
-        WORKING-STORAGE  SECTION.
-        01 G.
-          02 X           PIC X(5).
-          02 X-9         REDEFINES X PIC 9(4).
-          02 X-S9        REDEFINES X PIC S9(4).
-          02 X-S9-L      REDEFINES X PIC S9(4) LEADING.
-          02 X-S9-LS     REDEFINES X PIC S9(4) LEADING SEPARATE.
-          02 X-S9-T      REDEFINES X PIC S9(4) TRAILING.
-          02 X-S9-TS     REDEFINES X PIC S9(4) TRAILING SEPARATE.
-        PROCEDURE        DIVISION.
-            MOVE ZERO TO X MOVE  1234 TO X-9     DISPLAY X
-            MOVE ZERO TO X MOVE  1234 TO X-S9    DISPLAY X
-            MOVE ZERO TO X MOVE -1234 TO X-S9
-            *> Let's be ecumenical with regard to ASCII and EBCDIC:
-            if X equals "123M0" or "123t0" DISPLAY "-1234" 
-                                      else DISPLAY X " Not Good"
-                                      end-if
-            MOVE ZERO TO X MOVE  1234 TO X-S9-L  DISPLAY X
-            MOVE ZERO TO X MOVE -1234 TO X-S9-L
-            if X equals "J2340" or "q2340" DISPLAY "-1234" 
-                                      else DISPLAY X " Not Good"
-                                      end-if
-            MOVE ZERO TO X MOVE  1234 TO X-S9-LS DISPLAY X
-            MOVE ZERO TO X MOVE -1234 TO X-S9-LS DISPLAY X
-            MOVE ZERO TO X MOVE  1234 TO X-S9-T  DISPLAY X
-            MOVE ZERO TO X MOVE -1234 TO X-S9-T
-            if X equals "123M0" or "123t0" DISPLAY "-1234" 
-                                      else DISPLAY X " Not Good"
-                                      end-if
-            MOVE ZERO TO X MOVE  1234 TO X-S9-TS DISPLAY X
-            MOVE ZERO TO X MOVE -1234 TO X-S9-TS DISPLAY X
-            goback.
-            end program  prog.
- 
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/cobol.dg/group2/DISPLAY__Sign_ASCII.out gcc-17-20260712/gcc/testsuite/cobol.dg/group2/DISPLAY__Sign_ASCII.out
*** gcc-17-20260705/gcc/testsuite/cobol.dg/group2/DISPLAY__Sign_ASCII.out	Sun Jul  5 22:32:11 2026
--- gcc-17-20260712/gcc/testsuite/cobol.dg/group2/DISPLAY__Sign_ASCII.out	Thu Jan  1 00:00:00 1970
***************
*** 1,12 ****
- 12340
- 12340
- -1234
- 12340
- -1234
- +1234
- -1234
- 12340
- -1234
- 1234+
- 1234-
- 
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/cobol.dg/group2/FUNCTION_TRIM_with_NATIONAL_characters.cob gcc-17-20260712/gcc/testsuite/cobol.dg/group2/FUNCTION_TRIM_with_NATIONAL_characters.cob
*** gcc-17-20260705/gcc/testsuite/cobol.dg/group2/FUNCTION_TRIM_with_NATIONAL_characters.cob	Sun Jul  5 22:32:11 2026
--- gcc-17-20260712/gcc/testsuite/cobol.dg/group2/FUNCTION_TRIM_with_NATIONAL_characters.cob	Sun Jul 12 22:32:11 2026
***************
*** 6,17 ****
          configuration           section.
          special-names.
              locale cp1252   is "cp1252"
!             locale utf16le  is "utf16le".
           Object-Computer.
               linux
               Character Classification
                   for Alphanumeric is cp1252
!                  for National     is utf16le.
          data                    division.
          working-storage         section.
          01 from-8   pic x(10) value  "   8888   ".
--- 6,17 ----
          configuration           section.
          special-names.
              locale cp1252   is "cp1252"
!             locale utf16  is "utf16".
           Object-Computer.
               linux
               Character Classification
                   for Alphanumeric is cp1252
!                  for National     is utf16.
          data                    division.
          working-storage         section.
          01 from-8   pic x(10) value  "   8888   ".
diff -Nrcpad gcc-17-20260705/gcc/testsuite/cobol.dg/group2/Hexadecimal_literal.cob gcc-17-20260712/gcc/testsuite/cobol.dg/group2/Hexadecimal_literal.cob
*** gcc-17-20260705/gcc/testsuite/cobol.dg/group2/Hexadecimal_literal.cob	Sun Jul  5 22:32:11 2026
--- gcc-17-20260712/gcc/testsuite/cobol.dg/group2/Hexadecimal_literal.cob	Sun Jul 12 22:32:11 2026
***************
*** 11,16 ****
                  when X"F0" display X"F1F2F3"
                  when X"30" DISPLAY X"313233"
                  when X"3000" DISPLAY X"310032003300"
!                 when other display "BaCK to the drawing board"
             goback.
  
--- 11,19 ----
                  when X"F0" display X"F1F2F3"
                  when X"30" DISPLAY X"313233"
                  when X"3000" DISPLAY X"310032003300"
!                 when X"0030" DISPLAY X"003100320033"
!                 when X"30000000" DISPLAY X"310000003200000033000000"
!                 when X"00000030" DISPLAY X"000000310000003200000033"
!                 when other display function hex-of(A)
             goback.
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric-display__1_.cob gcc-17-20260712/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric-display__1_.cob
*** gcc-17-20260705/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric-display__1_.cob	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric-display__1_.cob	Sun Jul 12 22:32:11 2026
***************
*** 0 ****
--- 1,27 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/Non-numeric_data_in_numeric-display__1_.out" }
+ 
+        IDENTIFICATION   DIVISION.
+        PROGRAM-ID.      prog.
+        DATA             DIVISION.
+        WORKING-STORAGE  SECTION.
+        01 X.
+           03 X-NUM      PIC 9(06) VALUE 123.
+        77 NUM           PIC 9(06).
+        PROCEDURE        DIVISION.
+            MOVE x"0000" TO X (2:2)
+            IF X-NUM NUMERIC
+               DISPLAY "low-value is numeric" UPON SYSERR
+               END-DISPLAY
+            END-IF
+            MOVE x"01" TO X (3:1)
+            IF X-NUM NUMERIC
+               DISPLAY "SOH is numeric" UPON SYSERR
+               END-DISPLAY
+            END-IF
+            MOVE X-NUM TO NUM
+            DISPLAY "test over"
+            END-DISPLAY
+       *
+            GOBACK.
+ 
diff -Nrcpad gcc-17-20260705/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric-display__1_.out gcc-17-20260712/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric-display__1_.out
*** gcc-17-20260705/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric-display__1_.out	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric-display__1_.out	Sun Jul 12 22:32:11 2026
***************
*** 0 ****
--- 1,2 ----
+ test over
+ 
diff -Nrcpad gcc-17-20260705/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__1_.cob gcc-17-20260712/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__1_.cob
*** gcc-17-20260705/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__1_.cob	Sun Jul  5 22:32:11 2026
--- gcc-17-20260712/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__1_.cob	Thu Jan  1 00:00:00 1970
***************
*** 1,27 ****
-        *> { dg-do run }
-        *> { dg-output-file "group2/Non-numeric_data_in_numeric_items__1_.out" }
- 
-        IDENTIFICATION   DIVISION.
-        PROGRAM-ID.      prog.
-        DATA             DIVISION.
-        WORKING-STORAGE  SECTION.
-        01 X.
-           03 X-NUM      PIC 9(06) VALUE 123.
-        77 NUM           PIC 9(06).
-        PROCEDURE        DIVISION.
-            MOVE x"0000" TO X (2:2)
-            IF X-NUM NUMERIC
-               DISPLAY "low-value is numeric" UPON SYSERR
-               END-DISPLAY
-            END-IF
-            MOVE x"01" TO X (3:1)
-            IF X-NUM NUMERIC
-               DISPLAY "SOH is numeric" UPON SYSERR
-               END-DISPLAY
-            END-IF
-            MOVE X-NUM TO NUM
-            DISPLAY "test over"
-            END-DISPLAY
-       *
-            GOBACK.
- 
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__1_.out gcc-17-20260712/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__1_.out
*** gcc-17-20260705/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__1_.out	Sun Jul  5 22:32:11 2026
--- gcc-17-20260712/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__1_.out	Thu Jan  1 00:00:00 1970
***************
*** 1,2 ****
- test over
- 
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__2_.cob gcc-17-20260712/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__2_.cob
*** gcc-17-20260705/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__2_.cob	Sun Jul  5 22:32:11 2026
--- gcc-17-20260712/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__2_.cob	Thu Jan  1 00:00:00 1970
***************
*** 1,23 ****
-        *> { dg-do run }
-        *> { dg-output-file "group2/Non-numeric_data_in_numeric_items__2_.out" }
- 
-        IDENTIFICATION   DIVISION.
-        PROGRAM-ID.      prog2.
-        DATA             DIVISION.
-        WORKING-STORAGE  SECTION.
-        01 X.
-           03 X-NUM      PIC 9(06) PACKED-DECIMAL VALUE 123.
-        77 NUM           PIC 9(06).
-        PROCEDURE        DIVISION.
-            *> "O" is non-numeric BCD in ascii or ebcdic
-            MOVE "O" TO X (2:1)
-            IF X-NUM NUMERIC
-               DISPLAY "bad prog"
-               END-DISPLAY
-            END-IF
-            MOVE X-NUM TO NUM
-            DISPLAY "test over"
-            END-DISPLAY
-       *
-            GOBACK.
- 
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__2_.out gcc-17-20260712/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__2_.out
*** gcc-17-20260705/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__2_.out	Sun Jul  5 22:32:11 2026
--- gcc-17-20260712/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__2_.out	Thu Jan  1 00:00:00 1970
***************
*** 1,2 ****
- test over
- 
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_packed_decimal.cob gcc-17-20260712/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_packed_decimal.cob
*** gcc-17-20260705/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_packed_decimal.cob	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_packed_decimal.cob	Sun Jul 12 22:32:11 2026
***************
*** 0 ****
--- 1,22 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/Non-numeric_data_in_packed_decimal.out" }
+         identification   division.
+         program-id.      prog2.
+         data             division.
+         working-storage  section.
+         01 x.
+           03 x-num      pic 9(06) packed-decimal value 123.
+           03 x-bin redefines x-num binary-char.
+         procedure        division.
+            if x-num numeric
+               display "Starts off numeric"
+               end-display
+            move 255 to x-bin
+            if x-num numeric
+               display "bad prog"
+               end-display
+            end-if
+            display "test over"
+            end-display
+            goback.
+ 
diff -Nrcpad gcc-17-20260705/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_packed_decimal.out gcc-17-20260712/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_packed_decimal.out
*** gcc-17-20260705/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_packed_decimal.out	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_packed_decimal.out	Sun Jul 12 22:32:11 2026
***************
*** 0 ****
--- 1,3 ----
+ Starts off numeric
+ test over
+ 
diff -Nrcpad gcc-17-20260705/gcc/testsuite/cobol.dg/group2/Numeric-display_sign_encoding__2_.cob gcc-17-20260712/gcc/testsuite/cobol.dg/group2/Numeric-display_sign_encoding__2_.cob
*** gcc-17-20260705/gcc/testsuite/cobol.dg/group2/Numeric-display_sign_encoding__2_.cob	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/cobol.dg/group2/Numeric-display_sign_encoding__2_.cob	Sun Jul 12 22:32:11 2026
***************
*** 0 ****
--- 1,44 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/Numeric-display_sign_encoding__2_.out" }
+        IDENTIFICATION   DIVISION.
+        PROGRAM-ID.      prog.
+        DATA             DIVISION.
+        WORKING-STORAGE  SECTION.
+        01 G.
+          02 X           PIC X(5).
+          02 X-9         REDEFINES X PIC 9(4).
+          02 X-S9        REDEFINES X PIC S9(4).
+          02 X-S9-L      REDEFINES X PIC S9(4) LEADING.
+          02 X-S9-LS     REDEFINES X PIC S9(4) LEADING SEPARATE.
+          02 X-S9-T      REDEFINES X PIC S9(4) TRAILING.
+          02 X-S9-TS     REDEFINES X PIC S9(4) TRAILING SEPARATE.
+        PROCEDURE        DIVISION.
+            display "Should be 12340"
+            MOVE ZERO TO X MOVE  1234 TO X-9     DISPLAY X
+            MOVE ZERO TO X MOVE  1234 TO X-S9    DISPLAY X
+            MOVE ZERO TO X MOVE  1234 TO X-S9-L  DISPLAY X
+            MOVE ZERO TO X MOVE  1234 TO X-S9-T  DISPLAY X
+            display "Should be +1234"
+            MOVE ZERO TO X MOVE  1234 TO X-S9-LS DISPLAY X
+            *> Let's be ecumenical with regard to ASCII and EBCDIC:
+            display "Should be -1234"
+            MOVE ZERO TO X MOVE -1234 TO X-S9
+            if X equals "123M0" or "123t0" DISPLAY "-1234"
+                                      else DISPLAY X " Not Good"
+                                      end-if
+            MOVE ZERO TO X MOVE -1234 TO X-S9-L
+            if X equals "J2340" or "q2340" DISPLAY "-1234"
+                                      else DISPLAY X " Not Good"
+                                      end-if
+            MOVE ZERO TO X MOVE -1234 TO X-S9-LS DISPLAY X
+            MOVE ZERO TO X MOVE -1234 TO X-S9-T
+            if X equals "123M0" or "123t0" DISPLAY "-1234"
+                                      else DISPLAY X " Not Good"
+                                      end-if
+            display "Should be 1234+"
+            MOVE ZERO TO X MOVE  1234 TO X-S9-TS DISPLAY X
+            display "Should be 1234-"
+            MOVE ZERO TO X MOVE -1234 TO X-S9-TS DISPLAY X
+            goback.
+            end program  prog.
+ 
diff -Nrcpad gcc-17-20260705/gcc/testsuite/cobol.dg/group2/Numeric-display_sign_encoding__2_.out gcc-17-20260712/gcc/testsuite/cobol.dg/group2/Numeric-display_sign_encoding__2_.out
*** gcc-17-20260705/gcc/testsuite/cobol.dg/group2/Numeric-display_sign_encoding__2_.out	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/cobol.dg/group2/Numeric-display_sign_encoding__2_.out	Sun Jul 12 22:32:11 2026
***************
*** 0 ****
--- 1,17 ----
+ Should be 12340
+ 12340
+ 12340
+ 12340
+ 12340
+ Should be +1234
+ +1234
+ Should be -1234
+ -1234
+ -1234
+ -1234
+ -1234
+ Should be 1234+
+ 1234+
+ Should be 1234-
+ 1234-
+ 
diff -Nrcpad gcc-17-20260705/gcc/testsuite/cobol.dg/group2/Numeric-display_sign_encoding_sanity_check.cob gcc-17-20260712/gcc/testsuite/cobol.dg/group2/Numeric-display_sign_encoding_sanity_check.cob
*** gcc-17-20260705/gcc/testsuite/cobol.dg/group2/Numeric-display_sign_encoding_sanity_check.cob	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/cobol.dg/group2/Numeric-display_sign_encoding_sanity_check.cob	Sun Jul 12 22:32:11 2026
***************
*** 0 ****
--- 1,23 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/Numeric-display_sign_encoding_sanity_check.out" }
+        IDENTIFICATION   DIVISION.
+        PROGRAM-ID.      prog.
+        DATA             DIVISION.
+        WORKING-STORAGE  SECTION.
+        01 RESULT0 PIC  999V999.
+        01 RESULT1 PIC S999V999 leading .
+        01 RESULT2 PIC S999V999 trailing .
+        01 RESULT3 PIC S999V999 leading separate .
+        01 RESULT4 PIC S999V999 trailing separate.
+        PROCEDURE        DIVISION.
+            move  123.456 to RESULT0 DISPLAY RESULT0
+            move  123.456 to RESULT1 DISPLAY RESULT1
+            move  123.456 to RESULT2 DISPLAY RESULT2
+            move  123.456 to RESULT3 DISPLAY RESULT3
+            move  123.456 to RESULT4 DISPLAY RESULT4
+            move -123.456 to RESULT1 DISPLAY RESULT1
+            move -123.456 to RESULT2 DISPLAY RESULT2
+            move -123.456 to RESULT3 DISPLAY RESULT3
+            move -123.456 to RESULT4 DISPLAY RESULT4
+            STOP RUN.
+ 
diff -Nrcpad gcc-17-20260705/gcc/testsuite/cobol.dg/group2/Numeric-display_sign_encoding_sanity_check.out gcc-17-20260712/gcc/testsuite/cobol.dg/group2/Numeric-display_sign_encoding_sanity_check.out
*** gcc-17-20260705/gcc/testsuite/cobol.dg/group2/Numeric-display_sign_encoding_sanity_check.out	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/cobol.dg/group2/Numeric-display_sign_encoding_sanity_check.out	Sun Jul 12 22:32:11 2026
***************
*** 0 ****
--- 1,10 ----
+ 123.456
+ +123.456
+ +123.456
+ +123.456
+ 123.456+
+ -123.456
+ -123.456
+ -123.456
+ 123.456-
+ 
diff -Nrcpad gcc-17-20260705/gcc/testsuite/cobol.dg/group2/PACKED-DECIMAL_basic_comp-3_comp-6__2_.cob gcc-17-20260712/gcc/testsuite/cobol.dg/group2/PACKED-DECIMAL_basic_comp-3_comp-6__2_.cob
*** gcc-17-20260705/gcc/testsuite/cobol.dg/group2/PACKED-DECIMAL_basic_comp-3_comp-6__2_.cob	Sun Jul  5 22:32:11 2026
--- gcc-17-20260712/gcc/testsuite/cobol.dg/group2/PACKED-DECIMAL_basic_comp-3_comp-6__2_.cob	Sun Jul 12 22:32:11 2026
***************
*** 1,41 ****
         *> { dg-do run }
         *> { dg-options "-dialect mf" }
         *> { dg-output-file "group2/PACKED-DECIMAL_basic_comp-3_comp-6__2_.out" }
- 
          identification      division.
          program-id.         prog.
          data                division.
          working-storage     section.
!         01  vars.
!          05 var1d                                                  .
!           10 var01      pic  99v99     comp-3       value  43.21 .
!           10 filler                     binary-double value zero   . 
!          05 var1 redefines var1d        pointer                    .
!          05 var2d                                                  .
!           10 var02      pic s99v99     comp-3       value  43.21 .
!           10 filler                     binary-double value zero   . 
!          05 var2 redefines var2d        pointer                    .
!          05 var3d                                                  .
!           10 var03      pic s99v99     comp-3       value -43.21 .
!           10 filler                     binary-double value zero   . 
!          05 var3 redefines var3d        pointer                    .
!          05 var4d                                                  .
!           10 var04      pic  99v99     comp-6       value  43.21 .
!           10 filler                     binary-double value zero   . 
!          05 var4 redefines var4d        pointer                    .
          procedure           division.
!         display length of var01 space var1 space space var01
!         display length of var02 space var2 space var02
!         display length of var03 space var3 space var03
!         display length of var04 space var4 space space var04
!         move 12.34 to var01
!         move 12.34 to var02
!         move 12.34 to var03
!         move 12.34 to var04
!         display function length(var01) space var1 space space var01
!         display function length(var02) space var2 space var02
!         display function length(var03) space var3 space var03
!         display function length(var04) space var4 space space var04
          goback.
          end program         prog.
  
--- 1,27 ----
         *> { dg-do run }
         *> { dg-options "-dialect mf" }
         *> { dg-output-file "group2/PACKED-DECIMAL_basic_comp-3_comp-6__2_.out" }
          identification      division.
          program-id.         prog.
          data                division.
          working-storage     section.
!           01 var01      pic  99v99     comp-3       value  43.21 .
!           01 var02      pic s99v99     comp-3       value  43.21 .
!           01 var03      pic s99v99     comp-3       value -43.21 .
!           01 var04      pic  99v99     comp-6       value  43.21 .
          procedure           division.
!         display length of var01 space "0x" function hex-of(var01) space space var01
!         display length of var02 space "0x" function hex-of(var02) space var02
!         display length of var03 space "0x" function hex-of(var03) space var03
!         display length of var04 "   " "0x" function hex-of(var04) space space var04
!         move  12.34 to var01
!         move  12.34 to var02
!         move -12.34 to var03
!         move  12.34 to var04
!         display function length(var01) space "0x" function hex-of(var01) space space var01
!         display function length(var02) space "0x" function hex-of(var02) space var02
!         display function length(var03) space "0x" function hex-of(var03) space var03
!         display function length(var04) "   " "0x" function hex-of(var04) space space var04
          goback.
          end program         prog.
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/cobol.dg/group2/PACKED-DECIMAL_basic_comp-3_comp-6__2_.out gcc-17-20260712/gcc/testsuite/cobol.dg/group2/PACKED-DECIMAL_basic_comp-3_comp-6__2_.out
*** gcc-17-20260705/gcc/testsuite/cobol.dg/group2/PACKED-DECIMAL_basic_comp-3_comp-6__2_.out	Sun Jul  5 22:32:11 2026
--- gcc-17-20260712/gcc/testsuite/cobol.dg/group2/PACKED-DECIMAL_basic_comp-3_comp-6__2_.out	Sun Jul 12 22:32:11 2026
***************
*** 1,9 ****
! 3 0x00000000001f3204  43.21
! 3 0x00000000001c3204 +43.21
! 3 0x00000000001d3204 -43.21
! 2 0x0000000000002143  43.21
! 3 0x00000000004f2301  12.34
! 3 0x00000000004c2301 +12.34
! 3 0x00000000004c2301 +12.34
! 2 0x0000000000003412  12.34
  
--- 1,9 ----
! 3 0x04321F  43.21
! 3 0x04321C +43.21
! 3 0x04321D -43.21
! 2   0x4321  43.21
! 3 0x01234F  12.34
! 3 0x01234C +12.34
! 3 0x01234D -12.34
! 2   0x1234  12.34
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/cobol.dg/group2/PR59_RT3586_-_Code_format_heuristic_fails.cob gcc-17-20260712/gcc/testsuite/cobol.dg/group2/PR59_RT3586_-_Code_format_heuristic_fails.cob
*** gcc-17-20260705/gcc/testsuite/cobol.dg/group2/PR59_RT3586_-_Code_format_heuristic_fails.cob	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/cobol.dg/group2/PR59_RT3586_-_Code_format_heuristic_fails.cob	Sun Jul 12 22:32:11 2026
***************
*** 0 ****
--- 1,7 ----
+       *> { dg-do compile }
+ 
+ 00002  PROGRAM-ID.      PROG.                                           RJD0002
+ 00003  PROCEDURE        DIVISION.                                       RJD0003
+ 00004      GOBACK.                                                      RJD0004
+ 00005  END PROGRAM      PROG.                                           RJD0005
+ 
diff -Nrcpad gcc-17-20260705/gcc/testsuite/cobol.dg/group2/RT3609_Unexpected_PROCESS.cob gcc-17-20260712/gcc/testsuite/cobol.dg/group2/RT3609_Unexpected_PROCESS.cob
*** gcc-17-20260705/gcc/testsuite/cobol.dg/group2/RT3609_Unexpected_PROCESS.cob	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/cobol.dg/group2/RT3609_Unexpected_PROCESS.cob	Sun Jul 12 22:32:11 2026
***************
*** 0 ****
--- 1,9 ----
+        *> { dg-do run }
+        *> { dg-options "-O0 -Wno-ibm-cdf -I copybooks -Wno-recording-mode -ffixed-form -dialect ibm -fno-static-call -fexec-charset=CP037 -fexec-national-charset=CP037" }
+ 
+ 00001  PROCESS FLAG(I,W) FDUMP
+ 00002  IDENTIFICATION DIVISION.
+ 00003     PROGRAM-ID. prog.
+ 00004  PROCEDURE DIVISION.
+ 00005    DISPLAY "OK".
+ 
diff -Nrcpad gcc-17-20260705/gcc/testsuite/cobol.dg/group2/compare_national_to_display.cob gcc-17-20260712/gcc/testsuite/cobol.dg/group2/compare_national_to_display.cob
*** gcc-17-20260705/gcc/testsuite/cobol.dg/group2/compare_national_to_display.cob	Sun Jul  5 22:32:11 2026
--- gcc-17-20260712/gcc/testsuite/cobol.dg/group2/compare_national_to_display.cob	Sun Jul 12 22:32:12 2026
***************
*** 6,12 ****
          configuration section.
          special-names.
              locale greek is "cyrillic"
!             locale unicode is "utf16le".
          object-computer.
              xerox-parc-star
              character classification
--- 6,12 ----
          configuration section.
          special-names.
              locale greek is "cyrillic"
!             locale unicode is "utf16".
          object-computer.
              xerox-parc-star
              character classification
diff -Nrcpad gcc-17-20260705/gcc/testsuite/g++.dg/coroutines/unevaluated.C gcc-17-20260712/gcc/testsuite/g++.dg/coroutines/unevaluated.C
*** gcc-17-20260705/gcc/testsuite/g++.dg/coroutines/unevaluated.C	Sun Jul  5 22:32:11 2026
--- gcc-17-20260712/gcc/testsuite/g++.dg/coroutines/unevaluated.C	Sun Jul 12 22:32:12 2026
*************** struct Task {
*** 17,24 ****
  // We do not permit co_await, co_yield outside a function, and so uses in
  // noexcept or requirements are covered by that.
  Task foo()  {
!     /* This one will currently fail - see PR68604.  */
!     const std::type_info& ti1 = typeid (co_await std::suspend_never{}); // { dg-error {'co_await' cannot be used in an unevaluated context} "" { xfail *-*-* } }
      std::size_t x = sizeof (co_yield (19)); // { dg-error {'co_yield' cannot be used in an unevaluated context} }
      decltype (co_await std::suspend_never{}) A; // { dg-error {'co_await' cannot be used in an unevaluated context} }
      co_return;
--- 17,23 ----
  // We do not permit co_await, co_yield outside a function, and so uses in
  // noexcept or requirements are covered by that.
  Task foo()  {
!     const std::type_info& ti1 = typeid (co_await std::suspend_never{}); // { dg-error {'co_await' cannot be used in an unevaluated context} }
      std::size_t x = sizeof (co_yield (19)); // { dg-error {'co_yield' cannot be used in an unevaluated context} }
      decltype (co_await std::suspend_never{}) A; // { dg-error {'co_await' cannot be used in an unevaluated context} }
      co_return;
diff -Nrcpad gcc-17-20260705/gcc/testsuite/g++.dg/cpp0x/attr-trivial_abi8.C gcc-17-20260712/gcc/testsuite/g++.dg/cpp0x/attr-trivial_abi8.C
*** gcc-17-20260705/gcc/testsuite/g++.dg/cpp0x/attr-trivial_abi8.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/g++.dg/cpp0x/attr-trivial_abi8.C	Sun Jul 12 22:32:12 2026
***************
*** 0 ****
--- 1,21 ----
+ // { dg-do preprocess { target c++11 } }
+ 
+ #if __has_cpp_attribute (clang::trivial_abi) != 1
+ #error
+ #endif
+ #if __has_cpp_attribute (gnu::trivial_abi) != 0
+ #error
+ #endif
+ #if __has_cpp_attribute (trivial_abi) != 0
+ #error This fails for now
+ // { dg-bogus "This fails for now" "" { xfail *-*-* } .-1 }
+ #endif
+ #if __has_attribute (clang::trivial_abi) != 1
+ #error
+ #endif
+ #if __has_attribute (gnu::trivial_abi) != 0
+ #error
+ #endif
+ #if __has_attribute (trivial_abi) != 1
+ #error
+ #endif
diff -Nrcpad gcc-17-20260705/gcc/testsuite/g++.dg/cpp0x/pr125886.C gcc-17-20260712/gcc/testsuite/g++.dg/cpp0x/pr125886.C
*** gcc-17-20260705/gcc/testsuite/g++.dg/cpp0x/pr125886.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/g++.dg/cpp0x/pr125886.C	Sun Jul 12 22:32:12 2026
***************
*** 0 ****
--- 1,82 ----
+ // PR c++/125886
+ // PR c++/68604
+ // PR c++/116385
+ // { dg-do compile { target c++11 } }
+ 
+ #include <typeinfo>
+ #include <utility>
+ 
+ // PR c++/125886: a non-polymorphic operand is an unevaluated operand
+ // ([expr.typeid]/5), so std::declval<A>() is not instantiated and its
+ // static_assert does not fire.
+ struct A {};
+ void
+ non_poly_declval ()
+ {
+   (void) typeid (std::declval<A> ());
+ }
+ 
+ // PR c++/125886 (template): the evaluated/unevaluated decision is taken
+ // at instantiation time in tsubst; a non-polymorphic operand is
+ // unevaluated, so tmpl<A> is well-formed.
+ template <typename T>
+ void
+ tmpl ()
+ {
+   (void) typeid (std::declval<T> ());
+ }
+ 
+ template void tmpl<A> ();
+ 
+ // PR c++/68604: an id-expression denoting a non-static data member is
+ // valid in an unevaluated operand (DR613 / N2253, C++11+).
+ struct C { int i; };
+ void
+ nsm ()
+ {
+   (void) typeid (C::i);
+ }
+ 
+ // PR c++/116385: function parameters are not odr-used in an unevaluated
+ // typeid operand, so they need not be captured and may appear in local
+ // classes and default arguments.
+ void
+ params (int n)
+ {
+   [&] { (void) typeid (n); };
+   struct Local { void g () { (void) typeid (n); } };
+   void g (const std::type_info& = typeid (n));
+ }
+ 
+ // A final-class polymorphic glvalue resolves to a fixed (static) type,
+ // so typeid is unevaluated: no vtable lookup, no odr-use.
+ struct F final { virtual ~F (); };
+ void
+ final_glvalue (F& f)
+ {
+   (void) typeid (f);
+ }
+ 
+ // Polymorphic glvalue in lambda without capture-default must be captured,
+ // since typeid is evaluated.
+ struct B { virtual ~B (); };
+ void
+ lambda_poly_capture (B& b)
+ {
+   [] { (void) typeid (b); };  // { dg-error "not captured" }
+ }
+ 
+ // typeid itself inside an unevaluated operand: the polymorphic glvalue
+ // re-parse must not force evaluation here.
+ void
+ nested_unevaluated(B &b)
+ {
+   (void) sizeof (typeid (b)); // no odr-use of b expected
+ }
+ 
+ // lambda variant of nested_unevaluated.
+ void
+ nested_unevaluated_lambda(B &b)
+ {
+   [] { (void) sizeof (typeid (b)); }; // OK: no capture required
+ }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/g++.dg/cpp2a/typedef2.C gcc-17-20260712/gcc/testsuite/g++.dg/cpp2a/typedef2.C
*** gcc-17-20260705/gcc/testsuite/g++.dg/cpp2a/typedef2.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/g++.dg/cpp2a/typedef2.C	Sun Jul 12 22:32:12 2026
***************
*** 0 ****
--- 1,5 ----
+ // PR c++/126031
+ 
+ typedef struct {
+   struct S;
+ } s;
diff -Nrcpad gcc-17-20260705/gcc/testsuite/g++.dg/eh/can-convert-nullptr.C gcc-17-20260712/gcc/testsuite/g++.dg/eh/can-convert-nullptr.C
*** gcc-17-20260705/gcc/testsuite/g++.dg/eh/can-convert-nullptr.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/g++.dg/eh/can-convert-nullptr.C	Sun Jul 12 22:32:12 2026
***************
*** 0 ****
--- 1,7 ----
+ // { dg-do compile { target c++11 } }
+ 
+ int main() {
+   try { throw nullptr; }
+   catch (void *) {}
+   catch (decltype(nullptr)) {} // { dg-warning "will be caught by earlier handler" }
+ }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/g++.dg/pr126150.C gcc-17-20260712/gcc/testsuite/g++.dg/pr126150.C
*** gcc-17-20260705/gcc/testsuite/g++.dg/pr126150.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/g++.dg/pr126150.C	Sun Jul 12 22:32:12 2026
***************
*** 0 ****
--- 1,8 ----
+ // { dg-do compile }
+ // { dg-options "-fnon-call-exceptions -O2 --param=max-completely-peel-loop-nest-depth=0" }
+ 
+ struct B {
+   B() { t = 0; }
+   ~B();
+   int t;
+ } w3[1][2];
diff -Nrcpad gcc-17-20260705/gcc/testsuite/g++.dg/reflect/type_trait16.C gcc-17-20260712/gcc/testsuite/g++.dg/reflect/type_trait16.C
*** gcc-17-20260705/gcc/testsuite/g++.dg/reflect/type_trait16.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/g++.dg/reflect/type_trait16.C	Sun Jul 12 22:32:12 2026
***************
*** 0 ****
--- 1,37 ----
+ // PR c++/125901
+ // { dg-do compile { target c++26 } }
+ // { dg-additional-options "-freflection" }
+ 
+ #include <meta>
+ 
+ template<typename T>
+ struct S {
+   T t;
+ };
+ 
+ static_assert(is_trivially_copyable_type(^^S<int>));
+ static_assert(!is_trivially_copyable_type(^^std::vector<int>));
+ static_assert(is_standard_layout_type(^^std::vector<int>));
+ static_assert(is_default_constructible_type(^^std::vector<int>));
+ static_assert(!is_trivially_default_constructible_type(^^std::vector<int>));
+ static_assert(!is_trivially_copy_constructible_type(^^std::vector<int>));
+ static_assert(!is_trivially_move_constructible_type(^^std::vector<int>));
+ static_assert(is_copy_assignable_type(^^std::vector<int>));
+ static_assert(!is_implicit_lifetime_type(^^std::vector<int>));
+ static_assert(!has_virtual_destructor(^^std::vector<int>));
+ static_assert(!has_unique_object_representations(^^std::vector<int>));
+ 
+ const std::vector<int> vec{};
+ const S<int> s{};
+ 
+ static_assert(is_trivially_copyable_type(^^S<int>));
+ static_assert(!is_trivially_copyable_type(^^std::vector<int>));
+ static_assert(is_standard_layout_type(^^std::vector<int>));
+ static_assert(is_default_constructible_type(^^std::vector<int>));
+ static_assert(!is_trivially_default_constructible_type(^^std::vector<int>));
+ static_assert(!is_trivially_copy_constructible_type(^^std::vector<int>));
+ static_assert(!is_trivially_move_constructible_type(^^std::vector<int>));
+ static_assert(is_copy_assignable_type(^^std::vector<int>));
+ static_assert(!is_implicit_lifetime_type(^^std::vector<int>));
+ static_assert(!has_virtual_destructor(^^std::vector<int>));
+ static_assert(!has_unique_object_representations(^^std::vector<int>));
diff -Nrcpad gcc-17-20260705/gcc/testsuite/g++.dg/reflect/type_trait17.C gcc-17-20260712/gcc/testsuite/g++.dg/reflect/type_trait17.C
*** gcc-17-20260705/gcc/testsuite/g++.dg/reflect/type_trait17.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/g++.dg/reflect/type_trait17.C	Sun Jul 12 22:32:12 2026
***************
*** 0 ****
--- 1,315 ----
+ // PR c++/125901
+ // { dg-do compile { target c++26 } }
+ // { dg-additional-options "-freflection" }
+ // [meta.unary.prop]
+ 
+ #include <meta>
+ 
+ template<typename>
+ struct S;
+ union U;
+ 
+ // remove_all_extents_t<T> shall be a complete type or cv void.
+ constexpr bool b0 = is_trivially_copyable_type (^^S<int>);    // { dg-error "preconditions not satisfied" }
+ constexpr bool b1 = is_trivially_copyable_type (^^S<int>[1]); // { dg-error "preconditions not satisfied" }
+ constexpr bool b0u = is_trivially_copyable_type (^^U);    // { dg-error "preconditions not satisfied" }
+ constexpr bool b1u = is_trivially_copyable_type (^^U[1]); // { dg-error "preconditions not satisfied" }
+ static_assert (!is_trivially_copyable_type (^^void));
+ 
+ constexpr bool b2 = is_standard_layout_type (^^S<int>);	      // { dg-error "preconditions not satisfied" }
+ constexpr bool b3 = is_standard_layout_type (^^S<int>[1]);    // { dg-error "preconditions not satisfied" }
+ constexpr bool b2u = is_standard_layout_type (^^U);	      // { dg-error "preconditions not satisfied" }
+ constexpr bool b3u = is_standard_layout_type (^^U[1]);    // { dg-error "preconditions not satisfied" }
+ static_assert (!is_standard_layout_type (^^void));
+ 
+ constexpr bool b11 = is_structural_type (^^S<int>);	      // { dg-error "preconditions not satisfied" }
+ constexpr bool b12 = is_structural_type (^^S<int>[1]);    // { dg-error "preconditions not satisfied" }
+ constexpr bool b11u = is_structural_type (^^U);	      // { dg-error "preconditions not satisfied" }
+ constexpr bool b12u = is_structural_type (^^U[1]);    // { dg-error "preconditions not satisfied" }
+ static_assert (!is_structural_type (^^void));
+ 
+ // If T is a non-union class type, T shall be a complete type.
+ constexpr bool b4 = is_empty_type (^^S<int>);	// { dg-error "preconditions not satisfied" }
+ static_assert (!is_empty_type (^^S<int>[1]));
+ static_assert (!is_empty_type (^^U));
+ static_assert (!is_empty_type (^^U[1]));
+ static_assert (!is_empty_type (^^void));
+ 
+ constexpr bool b5 = is_polymorphic_type (^^S<int>);	// { dg-error "preconditions not satisfied" }
+ static_assert (!is_polymorphic_type (^^S<int>[1]));
+ static_assert (!is_polymorphic_type (^^U));
+ static_assert (!is_polymorphic_type (^^U[1]));
+ static_assert (!is_polymorphic_type (^^void));
+ 
+ constexpr bool b6 = is_abstract_type (^^S<int>);	// { dg-error "preconditions not satisfied" }
+ static_assert (!is_abstract_type (^^S<int>[1]));
+ static_assert (!is_abstract_type (^^U));
+ static_assert (!is_abstract_type (^^U[1]));
+ static_assert (!is_abstract_type (^^void));
+ 
+ // If T is a class type, T shall be a complete type.
+ constexpr bool b7 = is_final_type (^^S<int>);	// { dg-error "preconditions not satisfied" }
+ constexpr bool b8 = is_final_type (^^U);	// { dg-error "preconditions not satisfied" }
+ static_assert (!is_final_type (^^S<int>[1]));
+ static_assert (!is_final_type (^^U[1]));
+ static_assert (!is_final_type (^^void));
+ 
+ // T shall be an array type, a complete type, or cv void.
+ static_assert (is_aggregate_type (^^S<int>[1]));
+ static_assert (is_aggregate_type (^^U[]));
+ static_assert (is_aggregate_type (^^S<int>[]));
+ static_assert (is_aggregate_type (^^U[1]));
+ static_assert (!is_aggregate_type (^^void));
+ constexpr bool b9 = is_aggregate_type (^^S<int>); // { dg-error "preconditions not satisfied" }
+ constexpr bool b10 = is_aggregate_type (^^U);	// { dg-error "preconditions not satisfied" }
+ 
+ // T and all types in the template parameter pack Args shall be
+ // complete types, cv void, or arrays of unknown bound.
+ constexpr bool b13 = is_constructible_type (^^S<int>, { ^^int }); // { dg-error "preconditions not satisfied" }
+ constexpr bool b14 = is_constructible_type (^^int, { ^^S<int> }); // { dg-error "preconditions not satisfied" }
+ constexpr bool b13a = is_constructible_type (^^S<int>[1], { ^^int }); // { dg-error "preconditions not satisfied" }
+ constexpr bool b14a = is_constructible_type (^^int, { ^^S<int>[1] }); // { dg-error "preconditions not satisfied" }
+ static_assert (!is_constructible_type (^^S<int>[], { ^^int }));
+ static_assert (!is_constructible_type (^^int, { ^^S<int>[] }));
+ constexpr bool b15 = is_constructible_type (^^U, { ^^int });  // { dg-error "preconditions not satisfied" }
+ constexpr bool b16 = is_constructible_type (^^int, { ^^U });  // { dg-error "preconditions not satisfied" }
+ constexpr bool b15a = is_constructible_type (^^U[1], { ^^int });  // { dg-error "preconditions not satisfied" }
+ constexpr bool b16a = is_constructible_type (^^int, { ^^U[1] });  // { dg-error "preconditions not satisfied" }
+ static_assert (!is_constructible_type (^^U[], { ^^int }));
+ static_assert (!is_constructible_type (^^int, { ^^U[] }));
+ static_assert (!is_constructible_type (^^int, { ^^void }));
+ 
+ // T shall be a complete type, cv void, or an array of unknown bound.
+ constexpr bool b17 = is_default_constructible_type (^^S<int>);	// { dg-error "preconditions not satisfied" }
+ constexpr bool b18 = is_default_constructible_type (^^U);	// { dg-error "preconditions not satisfied" }
+ constexpr bool b19 = is_default_constructible_type (^^S<int>[1]); // { dg-error "preconditions not satisfied" }
+ constexpr bool b20 = is_default_constructible_type (^^U[1]);	// { dg-error "preconditions not satisfied" }
+ static_assert (!is_default_constructible_type (^^S<int>[]));
+ static_assert (!is_default_constructible_type (^^U[]));
+ static_assert (!is_default_constructible_type (^^void));
+ 
+ constexpr bool b21 = is_copy_constructible_type (^^S<int>);	// { dg-error "preconditions not satisfied" }
+ constexpr bool b22 = is_copy_constructible_type (^^U);	// { dg-error "preconditions not satisfied" }
+ constexpr bool b23 = is_copy_constructible_type (^^S<int>[1]); // { dg-error "preconditions not satisfied" }
+ constexpr bool b24 = is_copy_constructible_type (^^U[1]);	// { dg-error "preconditions not satisfied" }
+ static_assert (!is_copy_constructible_type (^^S<int>[]));
+ static_assert (!is_copy_constructible_type (^^U[]));
+ static_assert (!is_copy_constructible_type (^^void));
+ 
+ constexpr bool b25 = is_move_constructible_type (^^S<int>);	// { dg-error "preconditions not satisfied" }
+ constexpr bool b26 = is_move_constructible_type (^^U);	// { dg-error "preconditions not satisfied" }
+ constexpr bool b27 = is_move_constructible_type (^^S<int>[1]); // { dg-error "preconditions not satisfied" }
+ constexpr bool b28 = is_move_constructible_type (^^U[1]);	// { dg-error "preconditions not satisfied" }
+ static_assert (!is_move_constructible_type (^^S<int>[]));
+ static_assert (!is_move_constructible_type (^^U[]));
+ static_assert (!is_move_constructible_type (^^void));
+ 
+ // T and U shall be complete types, cv void, or arrays of unknown bound.
+ constexpr bool b29 = is_assignable_type (^^S<int>, ^^int);  // { dg-error "preconditions not satisfied" }
+ constexpr bool b30 = is_assignable_type (^^int, ^^S<int>);  // { dg-error "preconditions not satisfied" }
+ static_assert (!is_assignable_type (^^S<int>[], ^^int));
+ static_assert (!is_assignable_type (^^int, ^^S<int>[]));
+ static_assert (!is_assignable_type (^^void, ^^int));
+ static_assert (!is_assignable_type (^^int, ^^void));
+ 
+ // T shall be a complete type, cv void, or an array of unknown bound.
+ constexpr bool b31 = is_copy_assignable_type (^^S<int>);  // { dg-error "preconditions not satisfied" "PR126073" { xfail *-*-* } }
+ constexpr bool b31u = is_copy_assignable_type (^^U);  // { dg-error "preconditions not satisfied" "PR126073" { xfail *-*-* } }
+ static_assert (!is_copy_assignable_type (^^S<int>[]));
+ static_assert (!is_copy_assignable_type (^^U[]));
+ static_assert (!is_copy_assignable_type (^^void));
+ 
+ constexpr bool b32 = is_move_assignable_type (^^S<int>);  // { dg-error "preconditions not satisfied" "PR126073" { xfail *-*-* } }
+ constexpr bool b32u = is_move_assignable_type (^^U);  // { dg-error "preconditions not satisfied" "PR126073" { xfail *-*-* } }
+ static_assert (!is_move_assignable_type (^^S<int>[]));
+ static_assert (!is_move_assignable_type (^^U[]));
+ static_assert (!is_move_assignable_type (^^void));
+ 
+ // T and U shall be complete types, cv void, or arrays of unknown bound.
+ constexpr bool b33 = is_swappable_with_type (^^S<int>, ^^int);	// { dg-message "required from here" }
+ constexpr bool b34 = is_swappable_with_type (^^int, ^^S<int>);	// { dg-message "required from here" }
+ constexpr bool b33u = is_swappable_with_type (^^U, ^^int);	// { dg-message "required from here" }
+ constexpr bool b34u = is_swappable_with_type (^^int, ^^U);	// { dg-message "required from here" }
+ // { dg-error "static assertion failed" "" { target *-*-* } 0 }
+ static_assert (!is_swappable_with_type (^^S<int>[], ^^int));
+ static_assert (!is_swappable_with_type (^^int, ^^S<int>[]));
+ static_assert (!is_swappable_with_type (^^U[], ^^int));
+ static_assert (!is_swappable_with_type (^^int, ^^U[]));
+ static_assert (!is_swappable_with_type (^^void, ^^int));
+ static_assert (!is_swappable_with_type (^^int, ^^void));
+ 
+ constexpr bool b33n = is_nothrow_swappable_with_type (^^S<int>, ^^int);	// { dg-message "required from here" }
+ constexpr bool b34n = is_nothrow_swappable_with_type (^^int, ^^S<int>);	// { dg-message "required from here" }
+ static_assert (!is_nothrow_swappable_with_type (^^S<int>[], ^^int));
+ static_assert (!is_nothrow_swappable_with_type (^^int, ^^S<int>[]));
+ static_assert (!is_nothrow_swappable_with_type (^^void, ^^int));
+ static_assert (!is_nothrow_swappable_with_type (^^int, ^^void));
+ 
+ struct W;
+ constexpr bool b35 = is_swappable_type (^^W);	// { dg-message "required from here" }
+ static_assert (!is_swappable_type (^^S<int>[]));
+ static_assert (!is_swappable_type (^^void));
+ constexpr bool b35n = is_nothrow_swappable_type (^^W);	// { dg-message "required from here" }
+ static_assert (!is_nothrow_swappable_type (^^S<int>[]));
+ static_assert (!is_nothrow_swappable_type (^^void));
+ // { dg-error "invalid use of incomplete type .struct W." "" { target *-*-* } 0 }
+ 
+ //T shall be a complete type, cv void, or an array of unknown bound.
+ constexpr bool b36 = is_destructible_type (^^S<int>); // { dg-error "preconditions not satisfied" }
+ constexpr bool b36u = is_destructible_type (^^U); // { dg-error "preconditions not satisfied" }
+ static_assert (!is_destructible_type (^^S<int>[]));
+ static_assert (!is_destructible_type (^^void));
+ 
+ constexpr bool b36n = is_nothrow_destructible_type (^^S<int>); // { dg-error "preconditions not satisfied" }
+ constexpr bool b36nu = is_nothrow_destructible_type (^^U); // { dg-error "preconditions not satisfied" }
+ static_assert (!is_nothrow_destructible_type (^^S<int>[]));
+ static_assert (!is_nothrow_destructible_type (^^U[]));
+ static_assert (!is_nothrow_destructible_type (^^void));
+ 
+ // T and all types in the template parameter pack Args shall be complete
+ // types, cv void, or arrays of unknown bound.
+ constexpr bool b37 = is_trivially_constructible_type (^^S<int>, {});  // { dg-error "preconditions not satisfied" }
+ constexpr bool b38 = is_trivially_constructible_type (^^int, { ^^S<int> });  // { dg-error "preconditions not satisfied" }
+ static_assert (!is_trivially_constructible_type (^^S<int>[], {}));
+ static_assert (!is_trivially_constructible_type (^^int, { ^^S<int>[] }));
+ static_assert (!is_trivially_constructible_type (^^void, {}));
+ static_assert (!is_trivially_constructible_type (^^int, { ^^void }));
+ 
+ // T shall be a complete type, cv void, or an array of unknown bound.
+ constexpr bool b39 = is_trivially_default_constructible_type (^^S<int>);  // { dg-error "preconditions not satisfied" }
+ constexpr bool b39u = is_trivially_default_constructible_type (^^U);  // { dg-error "preconditions not satisfied" }
+ static_assert (!is_trivially_default_constructible_type (^^S<int>[]));
+ static_assert (!is_trivially_default_constructible_type (^^U[]));
+ static_assert (!is_trivially_default_constructible_type (^^void));
+ 
+ constexpr bool b40 = is_trivially_copy_constructible_type (^^S<int>);  // { dg-error "preconditions not satisfied" }
+ constexpr bool b40u = is_trivially_copy_constructible_type (^^U);  // { dg-error "preconditions not satisfied" }
+ static_assert (!is_trivially_copy_constructible_type (^^S<int>[]));
+ static_assert (!is_trivially_copy_constructible_type (^^U[]));
+ static_assert (!is_trivially_copy_constructible_type (^^void));
+ 
+ constexpr bool b41 = is_trivially_move_constructible_type (^^S<int>);  // { dg-error "preconditions not satisfied" }
+ constexpr bool b41u = is_trivially_move_constructible_type (^^U);  // { dg-error "preconditions not satisfied" }
+ static_assert (!is_trivially_move_constructible_type (^^S<int>[]));
+ static_assert (!is_trivially_move_constructible_type (^^U[]));
+ static_assert (!is_trivially_move_constructible_type (^^void));
+ 
+ // T and U shall be complete types, cv void, or arrays of unknown bound.
+ constexpr bool b42 = is_trivially_assignable_type (^^S<int>, ^^int);  // { dg-error "preconditions not satisfied" }
+ constexpr bool b43 = is_trivially_assignable_type (^^int, ^^S<int>);  // { dg-error "preconditions not satisfied" }
+ static_assert (!is_trivially_assignable_type (^^S<int>[], ^^int));
+ static_assert (!is_trivially_assignable_type (^^int, ^^S<int>[]));
+ static_assert (!is_trivially_assignable_type (^^void, ^^int));
+ static_assert (!is_trivially_assignable_type (^^int, ^^void));
+ 
+ // T shall be a complete type, cv void, or an array of unknown bound.
+ constexpr bool b44 = is_trivially_copy_assignable_type (^^S<int>);  // { dg-error "preconditions not satisfied" "PR126073" { xfail *-*-* } }
+ constexpr bool b44u = is_trivially_copy_assignable_type (^^U);  // { dg-error "preconditions not satisfied" "PR126073" { xfail *-*-* } }
+ static_assert (!is_trivially_copy_assignable_type (^^S<int>[]));
+ static_assert (!is_trivially_copy_assignable_type (^^U[]));
+ static_assert (!is_trivially_copy_assignable_type (^^void));
+ 
+ constexpr bool b45 = is_trivially_move_assignable_type (^^S<int>);  // { dg-error "preconditions not satisfied" "PR126073" { xfail *-*-* } }
+ constexpr bool b45u = is_trivially_move_assignable_type (^^U);  // { dg-error "preconditions not satisfied" "PR126073" { xfail *-*-* } }
+ static_assert (!is_trivially_move_assignable_type (^^S<int>[]));
+ static_assert (!is_trivially_move_assignable_type (^^U[]));
+ static_assert (!is_trivially_move_assignable_type (^^void));
+ 
+ constexpr bool b46 = is_trivially_destructible_type (^^S<int>);	// { dg-error "preconditions not satisfied" }
+ constexpr bool b46u = is_trivially_destructible_type (^^U);	// { dg-error "preconditions not satisfied" }
+ static_assert (!is_trivially_destructible_type (^^S<int>[]));
+ static_assert (!is_trivially_destructible_type (^^U[]));
+ static_assert (!is_trivially_destructible_type (^^void));
+ 
+ // T and all types in the template parameter pack Args shall be complete
+ // types, cv void, or arrays of unknown bound.
+ constexpr bool b47 = is_nothrow_constructible_type (^^S<int>, { ^^int }); // { dg-error "preconditions not satisfied" }
+ constexpr bool b48 = is_nothrow_constructible_type (^^int, { ^^S<int> }); // { dg-error "preconditions not satisfied" }
+ constexpr bool b49 = is_nothrow_constructible_type (^^S<int>[1], { ^^int }); // { dg-error "preconditions not satisfied" }
+ constexpr bool b50 = is_nothrow_constructible_type (^^int, { ^^S<int>[1] }); // { dg-error "preconditions not satisfied" }
+ static_assert (!is_nothrow_constructible_type (^^S<int>[], { ^^int }));
+ static_assert (!is_nothrow_constructible_type (^^int, { ^^S<int>[] }));
+ constexpr bool b51 = is_nothrow_constructible_type (^^U, { ^^int });  // { dg-error "preconditions not satisfied" }
+ constexpr bool b52 = is_nothrow_constructible_type (^^int, { ^^U });  // { dg-error "preconditions not satisfied" }
+ constexpr bool b53 = is_nothrow_constructible_type (^^U[1], { ^^int });  // { dg-error "preconditions not satisfied" }
+ constexpr bool b54 = is_nothrow_constructible_type (^^int, { ^^U[1] });  // { dg-error "preconditions not satisfied" }
+ static_assert (!is_nothrow_constructible_type (^^U[], { ^^int }));
+ static_assert (!is_nothrow_constructible_type (^^int, { ^^U[] }));
+ static_assert (!is_nothrow_constructible_type (^^int, { ^^void }));
+ 
+ // T shall be a complete type, cv void, or an array of unknown bound.
+ constexpr bool b55 = is_nothrow_default_constructible_type (^^S<int>); // { dg-error "preconditions not satisfied" }
+ constexpr bool b56 = is_nothrow_default_constructible_type (^^S<int>[1]); // { dg-error "preconditions not satisfied" }
+ static_assert (!is_nothrow_default_constructible_type (^^S<int>[]));
+ constexpr bool b57 = is_nothrow_default_constructible_type (^^U);  // { dg-error "preconditions not satisfied" }
+ constexpr bool b58 = is_nothrow_default_constructible_type (^^U[1]);  // { dg-error "preconditions not satisfied" }
+ static_assert (!is_nothrow_default_constructible_type (^^U[]));
+ static_assert (!is_nothrow_default_constructible_type (^^void));
+ 
+ constexpr bool b59 = is_nothrow_copy_constructible_type (^^S<int>); // { dg-error "preconditions not satisfied" }
+ constexpr bool b60 = is_nothrow_copy_constructible_type (^^S<int>[1]); // { dg-error "preconditions not satisfied" }
+ static_assert (!is_nothrow_copy_constructible_type (^^S<int>[]));
+ constexpr bool b61 = is_nothrow_copy_constructible_type (^^U);  // { dg-error "preconditions not satisfied" }
+ constexpr bool b62 = is_nothrow_copy_constructible_type (^^U[1]);  // { dg-error "preconditions not satisfied" }
+ static_assert (!is_nothrow_copy_constructible_type (^^U[]));
+ static_assert (!is_nothrow_copy_constructible_type (^^void));
+ 
+ constexpr bool b63 = is_nothrow_move_constructible_type (^^S<int>); // { dg-error "preconditions not satisfied" }
+ constexpr bool b64 = is_nothrow_move_constructible_type (^^S<int>[1]); // { dg-error "preconditions not satisfied" }
+ static_assert (!is_nothrow_move_constructible_type (^^S<int>[]));
+ constexpr bool b65 = is_nothrow_move_constructible_type (^^U);  // { dg-error "preconditions not satisfied" }
+ constexpr bool b66 = is_nothrow_move_constructible_type (^^U[1]);  // { dg-error "preconditions not satisfied" }
+ static_assert (!is_nothrow_move_constructible_type (^^U[]));
+ static_assert (!is_nothrow_move_constructible_type (^^void));
+ 
+ constexpr bool b67 = is_nothrow_assignable_type (^^S<int>, ^^int);  // { dg-error "preconditions not satisfied" }
+ constexpr bool b68 = is_nothrow_assignable_type (^^int, ^^S<int>);  // { dg-error "preconditions not satisfied" }
+ static_assert (!is_nothrow_assignable_type (^^S<int>[], ^^int));
+ static_assert (!is_nothrow_assignable_type (^^int, ^^S<int>[]));
+ static_assert (!is_nothrow_assignable_type (^^void, ^^int));
+ static_assert (!is_nothrow_assignable_type (^^int, ^^void));
+ 
+ constexpr bool b69 = is_nothrow_copy_assignable_type (^^S<int>);  // { dg-error "preconditions not satisfied" "PR126073" { xfail *-*-* } }
+ constexpr bool b70 = is_nothrow_copy_assignable_type (^^U);	  // { dg-error "preconditions not satisfied" "PR126073" { xfail *-*-* } }
+ static_assert (!is_nothrow_copy_assignable_type (^^S<int>[]));
+ static_assert (!is_nothrow_copy_assignable_type (^^void));
+ 
+ constexpr bool b71 = is_nothrow_move_assignable_type (^^S<int>);  // { dg-error "preconditions not satisfied" "PR126073" { xfail *-*-* } }
+ constexpr bool b72 = is_nothrow_move_assignable_type (^^U);	  // { dg-error "preconditions not satisfied" "PR126073" { xfail *-*-* } }
+ static_assert (!is_nothrow_move_assignable_type (^^S<int>[]));
+ static_assert (!is_nothrow_move_assignable_type (^^void));
+ 
+ // T shall be an array type, a complete type, or cv void.
+ constexpr bool b73 = is_implicit_lifetime_type (^^S<int>);  // { dg-error "preconditions not satisfied" }
+ constexpr bool b74 = is_implicit_lifetime_type (^^U);  // { dg-error "preconditions not satisfied" }
+ static_assert (!is_implicit_lifetime_type (^^S<int>[1]));
+ static_assert (!is_implicit_lifetime_type (^^void));
+ 
+ // If T is a non-union class type, T shall be a complete type.
+ constexpr bool b75 = has_virtual_destructor (^^S<int>);	// { dg-error "preconditions not satisfied" }
+ static_assert (!has_virtual_destructor (^^S<int>[1]));
+ static_assert (!has_virtual_destructor (^^U));
+ static_assert (!has_virtual_destructor (^^U[1]));
+ static_assert (!has_virtual_destructor (^^void));
+ 
+ // remove_all_extents_t<T> shall be a complete type or cv void.
+ constexpr bool b76 = has_unique_object_representations (^^S<int>);    // { dg-error "preconditions not satisfied" }
+ constexpr bool b77 = has_unique_object_representations (^^S<int>[1]); // { dg-error "preconditions not satisfied" }
+ constexpr bool b78 = has_unique_object_representations (^^U);    // { dg-error "preconditions not satisfied" }
+ constexpr bool b79 = has_unique_object_representations (^^U[1]); // { dg-error "preconditions not satisfied" }
+ static_assert (!has_unique_object_representations (^^void));
+ 
+ // T and U shall be complete types, cv void, or arrays of unknown bound.
+ constexpr bool b80 = reference_constructs_from_temporary (^^S<int>, ^^int);  // { dg-error "preconditions not satisfied" }
+ constexpr bool b81 = reference_constructs_from_temporary (^^int, ^^S<int>);  // { dg-error "preconditions not satisfied" }
+ static_assert (!reference_constructs_from_temporary (^^S<int>[], ^^int));
+ static_assert (!reference_constructs_from_temporary (^^int, ^^S<int>[]));
+ static_assert (!reference_constructs_from_temporary (^^void, ^^int));
+ static_assert (!reference_constructs_from_temporary (^^int, ^^void));
+ 
+ constexpr bool b82 = reference_converts_from_temporary (^^S<int>, ^^int);  // { dg-error "preconditions not satisfied" }
+ constexpr bool b83 = reference_converts_from_temporary (^^int, ^^S<int>);  // { dg-error "preconditions not satisfied" }
+ static_assert (!reference_converts_from_temporary (^^S<int>[], ^^int));
+ static_assert (!reference_converts_from_temporary (^^int, ^^S<int>[]));
+ static_assert (!reference_converts_from_temporary (^^void, ^^int));
+ static_assert (!reference_converts_from_temporary (^^int, ^^void));
diff -Nrcpad gcc-17-20260705/gcc/testsuite/g++.dg/reflect/type_trait18.C gcc-17-20260712/gcc/testsuite/g++.dg/reflect/type_trait18.C
*** gcc-17-20260705/gcc/testsuite/g++.dg/reflect/type_trait18.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/g++.dg/reflect/type_trait18.C	Sun Jul 12 22:32:12 2026
***************
*** 0 ****
--- 1,126 ----
+ // PR c++/125901
+ // { dg-do compile { target c++26 } }
+ // { dg-additional-options "-freflection" }
+ // [meta.rel]
+ 
+ #include <meta>
+ 
+ struct S;
+ union U;
+ struct B {};
+ 
+ // If Base and Derived are non-union class types and are not (possibly
+ // cv-qualified versions of) the same type, Derived shall be a complete type.
+ constexpr bool b1 = is_base_of_type (^^B, ^^S);	// { dg-error "preconditions not satisfied" }
+ constexpr bool b2 = is_base_of_type (^^B, ^^const S);	// { dg-error "preconditions not satisfied" }
+ static_assert (is_base_of_type (^^S, ^^S));
+ static_assert (is_base_of_type (^^S, ^^const S));
+ static_assert (!is_base_of_type (^^B, ^^U));
+ 
+ constexpr bool b15 = is_pointer_interconvertible_base_of_type (^^B, ^^S);	// { dg-error "preconditions not satisfied" }
+ constexpr bool b16 = is_pointer_interconvertible_base_of_type (^^B, ^^const S);	// { dg-error "preconditions not satisfied" }
+ static_assert (is_pointer_interconvertible_base_of_type (^^S, ^^S));
+ static_assert (is_pointer_interconvertible_base_of_type (^^S, ^^const S));
+ static_assert (!is_pointer_interconvertible_base_of_type (^^B, ^^U));
+ 
+ // If Base and Derived are non-union class types, Derived shall be a complete type.
+ constexpr bool b3 = is_virtual_base_of_type (^^B, ^^S);	// { dg-error "preconditions not satisfied" }
+ constexpr bool b4 = is_virtual_base_of_type (^^B, ^^const S);	// { dg-error "preconditions not satisfied" }
+ constexpr bool b5 = is_virtual_base_of_type (^^S, ^^S);	// { dg-error "preconditions not satisfied" }
+ constexpr bool b6 = is_virtual_base_of_type (^^S, ^^const S);	// { dg-error "preconditions not satisfied" }
+ static_assert (!is_virtual_base_of_type (^^B, ^^U));
+ static_assert (!is_virtual_base_of_type (^^U, ^^U));
+ 
+ // From and To shall be complete types, cv void, or arrays of unknown bound.
+ constexpr bool b7 = is_convertible_type (^^S, ^^B);   // { dg-error "preconditions not satisfied" }
+ constexpr bool b8 = is_convertible_type (^^B, ^^S);   // { dg-error "preconditions not satisfied" }
+ constexpr bool b9 = is_convertible_type (^^S, ^^B[]);   // { dg-error "preconditions not satisfied" }
+ constexpr bool b10 = is_convertible_type (^^B[], ^^S);   // { dg-error "preconditions not satisfied" }
+ constexpr bool b11 = is_convertible_type (^^S, ^^void);   // { dg-error "preconditions not satisfied" }
+ constexpr bool b12 = is_convertible_type (^^void, ^^S);   // { dg-error "preconditions not satisfied" }
+ static_assert (!is_convertible_type (^^S[], ^^B));
+ static_assert (!is_convertible_type (^^B, ^^U[]));
+ 
+ constexpr bool b7n = is_nothrow_convertible_type (^^S, ^^B);   // { dg-error "preconditions not satisfied" }
+ constexpr bool b8n = is_nothrow_convertible_type (^^B, ^^S);   // { dg-error "preconditions not satisfied" }
+ constexpr bool b9n = is_nothrow_convertible_type (^^S, ^^B[]);   // { dg-error "preconditions not satisfied" }
+ constexpr bool b10n = is_nothrow_convertible_type (^^B[], ^^S);   // { dg-error "preconditions not satisfied" }
+ constexpr bool b11n = is_nothrow_convertible_type (^^S, ^^void);   // { dg-error "preconditions not satisfied" }
+ constexpr bool b12n = is_nothrow_convertible_type (^^void, ^^S);   // { dg-error "preconditions not satisfied" }
+ static_assert (!is_nothrow_convertible_type (^^S[], ^^B));
+ static_assert (!is_nothrow_convertible_type (^^B, ^^U[]));
+ 
+ // T and U shall be complete types, cv void, or arrays of unknown bound.
+ constexpr bool b13 = is_layout_compatible_type (^^S, ^^int);  // { dg-error "preconditions not satisfied" }
+ constexpr bool b14 = is_layout_compatible_type (^^int, ^^S);  // { dg-error "preconditions not satisfied" }
+ static_assert (!is_layout_compatible_type (^^S[], ^^int));
+ static_assert (!is_layout_compatible_type (^^int, ^^S[]));
+ static_assert (!is_layout_compatible_type (^^void, ^^int));
+ static_assert (!is_layout_compatible_type (^^int, ^^void));
+ 
+ // Fn and all types in the template parameter pack ArgTypes shall be
+ // complete types, cv void, or arrays of unknown bound.
+ constexpr bool b17 = is_invocable_type (^^S, { ^^int }); // { dg-error "preconditions not satisfied" }
+ constexpr bool b18 = is_invocable_type (^^int, { ^^S }); // { dg-error "preconditions not satisfied" }
+ constexpr bool b19 = is_invocable_type (^^S[1], { ^^int }); // { dg-error "preconditions not satisfied" }
+ constexpr bool b20 = is_invocable_type (^^int, { ^^S[1] }); // { dg-error "preconditions not satisfied" }
+ static_assert (!is_invocable_type (^^S[], { ^^int }));
+ static_assert (!is_invocable_type (^^int, { ^^S[] }));
+ constexpr bool b21 = is_invocable_type (^^U, { ^^int });  // { dg-error "preconditions not satisfied" }
+ constexpr bool b22 = is_invocable_type (^^int, { ^^U });  // { dg-error "preconditions not satisfied" }
+ constexpr bool b23 = is_invocable_type (^^U[1], { ^^int });  // { dg-error "preconditions not satisfied" }
+ constexpr bool b24 = is_invocable_type (^^int, { ^^U[1] });  // { dg-error "preconditions not satisfied" }
+ static_assert (!is_invocable_type (^^U[], { ^^int }));
+ static_assert (!is_invocable_type (^^int, { ^^U[] }));
+ static_assert (!is_invocable_type (^^int, { ^^void }));
+ 
+ constexpr bool b17n = is_nothrow_invocable_type (^^S, { ^^int }); // { dg-error "preconditions not satisfied" }
+ constexpr bool b18n = is_nothrow_invocable_type (^^int, { ^^S }); // { dg-error "preconditions not satisfied" }
+ constexpr bool b19n = is_nothrow_invocable_type (^^S[1], { ^^int }); // { dg-error "preconditions not satisfied" }
+ constexpr bool b20n = is_nothrow_invocable_type (^^int, { ^^S[1] }); // { dg-error "preconditions not satisfied" }
+ static_assert (!is_nothrow_invocable_type (^^S[], { ^^int }));
+ static_assert (!is_nothrow_invocable_type (^^int, { ^^S[] }));
+ constexpr bool b21n = is_nothrow_invocable_type (^^U, { ^^int });  // { dg-error "preconditions not satisfied" }
+ constexpr bool b22n = is_nothrow_invocable_type (^^int, { ^^U });  // { dg-error "preconditions not satisfied" }
+ constexpr bool b23n = is_nothrow_invocable_type (^^U[1], { ^^int });  // { dg-error "preconditions not satisfied" }
+ constexpr bool b24n = is_nothrow_invocable_type (^^int, { ^^U[1] });  // { dg-error "preconditions not satisfied" }
+ static_assert (!is_nothrow_invocable_type (^^U[], { ^^int }));
+ static_assert (!is_nothrow_invocable_type (^^int, { ^^U[] }));
+ static_assert (!is_nothrow_invocable_type (^^int, { ^^void }));
+ 
+ // Fn, R, and all types in the template parameter pack ArgTypes shall be
+ // complete types, cv void, or arrays of unknown bound.
+ constexpr bool b25 = is_invocable_r_type (^^S, ^^int, { ^^int }); // { dg-message "required from here" }
+ constexpr bool b26 = is_invocable_r_type (^^int, ^^S, { ^^S });	  // { dg-message "required from here" }
+ constexpr bool b27 = is_invocable_r_type (^^S[1], ^^int, { ^^int }); // { dg-message "required from here" }
+ constexpr bool b28 = is_invocable_r_type (^^int, ^^int, { ^^S[1] }); // { dg-message "required from here" }
+ constexpr bool b29 = is_invocable_r_type (^^int, ^^S, { ^^int });   // { dg-message "required from here" }
+ static_assert (!is_invocable_r_type (^^S[], ^^int, { ^^int }));
+ static_assert (!is_invocable_r_type (^^int, ^^int, { ^^S[] }));
+ constexpr bool b30 = is_invocable_r_type (^^U, ^^int, { ^^int });  // { dg-message "required from here" }
+ constexpr bool b31 = is_invocable_r_type (^^int, ^^int, { ^^U });  // { dg-message "required from here" }
+ constexpr bool b32 = is_invocable_r_type (^^U[1], ^^int, { ^^int });  // { dg-message "required from here" }
+ constexpr bool b33 = is_invocable_r_type (^^int, ^^int, { ^^U[1] });  // { dg-message "required from here" }
+ constexpr bool b34 = is_invocable_r_type (^^int, ^^U, { ^^int });     // { dg-message "required from here" }
+ static_assert (!is_invocable_r_type (^^U[], ^^int, { ^^int }));
+ static_assert (!is_invocable_r_type (^^int, ^^int, { ^^U[] }));
+ static_assert (!is_invocable_r_type (^^int, ^^U[], { ^^int }));
+ static_assert (!is_invocable_r_type (^^int, ^^int, { ^^void }));
+ 
+ constexpr bool b25n = is_nothrow_invocable_r_type (^^S, ^^int, { ^^int }); // { dg-message "required from here" }
+ constexpr bool b26n = is_nothrow_invocable_r_type (^^int, ^^S, { ^^S });	  // { dg-message "required from here" }
+ constexpr bool b27n = is_nothrow_invocable_r_type (^^S[1], ^^int, { ^^int }); // { dg-message "required from here" }
+ constexpr bool b28n = is_nothrow_invocable_r_type (^^int, ^^int, { ^^S[1] }); // { dg-message "required from here" }
+ constexpr bool b29n = is_nothrow_invocable_r_type (^^int, ^^S, { ^^int });   // { dg-message "required from here" }
+ static_assert (!is_nothrow_invocable_r_type (^^S[], ^^int, { ^^int }));
+ static_assert (!is_nothrow_invocable_r_type (^^int, ^^int, { ^^S[] }));
+ constexpr bool b30n = is_nothrow_invocable_r_type (^^U, ^^int, { ^^int });  // { dg-message "required from here" }
+ constexpr bool b31n = is_nothrow_invocable_r_type (^^int, ^^int, { ^^U });  // { dg-message "required from here" }
+ constexpr bool b32n = is_nothrow_invocable_r_type (^^U[1], ^^int, { ^^int });  // { dg-message "required from here" }
+ constexpr bool b33n = is_nothrow_invocable_r_type (^^int, ^^int, { ^^U[1] });  // { dg-message "required from here" }
+ constexpr bool b34n = is_nothrow_invocable_r_type (^^int, ^^U, { ^^int });     // { dg-message "required from here" }
+ static_assert (!is_nothrow_invocable_r_type (^^U[], ^^int, { ^^int }));
+ static_assert (!is_nothrow_invocable_r_type (^^int, ^^int, { ^^U[] }));
+ static_assert (!is_nothrow_invocable_r_type (^^int, ^^U[], { ^^int }));
+ static_assert (!is_nothrow_invocable_r_type (^^int, ^^int, { ^^void }));
+ // { dg-error "static assertion failed" "" { target *-*-* } 0 }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/g++.dg/rtti/typeid14.C gcc-17-20260712/gcc/testsuite/g++.dg/rtti/typeid14.C
*** gcc-17-20260705/gcc/testsuite/g++.dg/rtti/typeid14.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/g++.dg/rtti/typeid14.C	Sun Jul 12 22:32:12 2026
***************
*** 0 ****
--- 1,19 ----
+ // PR c++/125886
+ // { dg-do compile { target c++11 } }
+ 
+ #include <typeinfo>
+ #include <utility>
+ 
+ // [expr.typeid]/4: a glvalue expression of a polymorphic class type is
+ // evaluated, so std::declval<B>() is instantiated and
+ // __declval_protector's static_assert fires (the non-template case:
+ // the operand is parsed evaluated after the unevaluated probe).
+ 
+ struct B { virtual ~B(); };
+ 
+ void
+ non_template ()
+ {
+   (void) typeid (std::declval<B> ());
+ }
+ // { dg-error "static assertion failed: declval" "" { target *-*-* } 0 }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/g++.dg/rtti/typeid15.C gcc-17-20260712/gcc/testsuite/g++.dg/rtti/typeid15.C
*** gcc-17-20260705/gcc/testsuite/g++.dg/rtti/typeid15.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/g++.dg/rtti/typeid15.C	Sun Jul 12 22:32:12 2026
***************
*** 0 ****
--- 1,23 ----
+ // PR c++/125886
+ // { dg-do compile { target c++11 } }
+ 
+ #include <typeinfo>
+ #include <utility>
+ 
+ // [expr.typeid]/4 for a template-dependent operand: the evaluated/
+ // unevaluated decision is taken at instantiation time in tsubst.  For
+ // a polymorphic operand the operand is re-substituted evaluated, so
+ // std::declval<C>() is instantiated and __declval_protector's
+ // static_assert fires.
+ 
+ struct C { virtual ~C(); };
+ 
+ template <typename T>
+ void
+ tmpl ()
+ {
+   (void) typeid (std::declval<T> ());
+ }
+ 
+ template void tmpl<C> ();
+ // { dg-error "static assertion failed: declval" "" { target *-*-* } 0 }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/g++.dg/torture/pr88797.C gcc-17-20260712/gcc/testsuite/g++.dg/torture/pr88797.C
*** gcc-17-20260705/gcc/testsuite/g++.dg/torture/pr88797.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/g++.dg/torture/pr88797.C	Sun Jul 12 22:32:12 2026
***************
*** 0 ****
--- 1,13 ----
+ /* { dg-do compile } */
+ 
+ 
+ void use(unsigned);
+ bool f(unsigned x, unsigned y) {
+     return x < 1111 + (y <= 2222);
+ }
+ void test_f(unsigned x, unsigned y) {
+     for (unsigned i = 0; i < 3333; ++i)
+         use(f(x++, y++));
+ }
+ 
+ 
diff -Nrcpad gcc-17-20260705/gcc/testsuite/g++.dg/tree-prof/pr57451.C gcc-17-20260712/gcc/testsuite/g++.dg/tree-prof/pr57451.C
*** gcc-17-20260705/gcc/testsuite/g++.dg/tree-prof/pr57451.C	Sun Jul  5 22:32:12 2026
--- gcc-17-20260712/gcc/testsuite/g++.dg/tree-prof/pr57451.C	Sun Jul 12 22:32:12 2026
***************
*** 1,6 ****
--- 1,7 ----
  // Explicit { dg-require-effective-target exceptions_enabled } so that dependent tests don't turn UNRESOLVED for '-fno-exceptions'.
  // { dg-require-effective-target freorder }
  // { dg-options "-O2 -freorder-blocks-and-partition -g" }
+ /* { dg-additional-options "-fno-unroll-loops" { target riscv*-*-* } } */
  
  extern "C" void abort (void);
  struct MyException {};
diff -Nrcpad gcc-17-20260705/gcc/testsuite/g++.dg/tree-ssa/pr88797.C gcc-17-20260712/gcc/testsuite/g++.dg/tree-ssa/pr88797.C
*** gcc-17-20260705/gcc/testsuite/g++.dg/tree-ssa/pr88797.C	Sun Jul  5 22:32:12 2026
--- gcc-17-20260712/gcc/testsuite/g++.dg/tree-ssa/pr88797.C	Thu Jan  1 00:00:00 1970
***************
*** 1,16 ****
- /* { dg-do compile } */
- /* { dg-options "-O3 -fdump-tree-split-paths-details" } */
- 
- 
- void use(unsigned);
- bool f(unsigned x, unsigned y) {
-     return x < 1111 + (y <= 2222);
- }
- void test_f(unsigned x, unsigned y) {
-     for (unsigned i = 0; i < 3333; ++i)
-         use(f(x++, y++));
- }
- 
- /* { dg-final { scan-tree-dump-not "Duplicating join block" "split-paths" } } */
- /* { dg-final { scan-tree-dump-times "appears to be a join point for if-convertible bbs." 1 "split-paths" } } */
- 
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/g++.target/aarch64/fold-mem-offsets.C gcc-17-20260712/gcc/testsuite/g++.target/aarch64/fold-mem-offsets.C
*** gcc-17-20260705/gcc/testsuite/g++.target/aarch64/fold-mem-offsets.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/g++.target/aarch64/fold-mem-offsets.C	Sun Jul 12 22:32:13 2026
***************
*** 0 ****
--- 1,86 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -ffold-mem-offsets -fdump-rtl-fold_mem_offsets" } */
+ 
+ typedef int a(void *);
+ a b;
+ 
+ struct e {
+   typedef struct d f;
+ };
+ 
+ template <typename, typename g = e, typename = typename g::f> struct h;
+ 
+ template <typename i, typename g> struct h<i, g, int> {
+   i &operator[](unsigned);
+ };
+ 
+ template <typename i, typename g> i &h<i, g, int>::operator[](unsigned j) {
+   i *k = reinterpret_cast<i *>(1);
+   return k[j];
+ }
+ 
+ template <typename i> struct h<i> {
+   i &operator[](unsigned j) { return l[j]; }
+   h<i, e, int> l;
+ };
+ 
+ struct m {
+   typedef int aa;
+ };
+ 
+ template <typename ac, ac> struct n : m { static bool ad(ac); };
+ 
+ template <typename ac, ac o> bool n<ac, o>::ad(ac j) {
+   return j == o;
+ }
+ 
+ template <typename ai> class F {
+   typedef typename ai::aa aa;
+ 
+ public:
+   F(bool);
+   void an() {
+     bool ba;
+     a r;
+     aa *p;
+     do {
+       aa q = *p;
+       ba = ai::ad(q);
+       if (ba)
+         ;
+       else {
+         int bj = ai::ao(q);
+         aq(bj);
+       }
+       p++;
+     } while (r);
+   }
+   void aq(unsigned);
+ };
+ 
+ enum bk {};
+ 
+ struct s {
+   int bn;
+   bk bo;
+   int *bv;
+ };
+ 
+ h<s> bp;
+ 
+ struct t : n<int, 0> {
+   static unsigned ao(int);
+ };
+ 
+ unsigned t::ao(int j) {
+   s *c = &bp[j];
+   return b(c->bv) ^ c->bo;
+ }
+ 
+ void fn3() {
+   F<t> bs(5);
+   bs.an();
+ }
+ 
+ /* Check for updated memory offsets.  */
+ /* { dg-final { scan-rtl-dump "Memory offset changed from 4 to 5" "fold_mem_offsets" } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/g++.target/i386/mul-overflow-widen-1.C gcc-17-20260712/gcc/testsuite/g++.target/i386/mul-overflow-widen-1.C
*** gcc-17-20260705/gcc/testsuite/g++.target/i386/mul-overflow-widen-1.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/g++.target/i386/mul-overflow-widen-1.C	Sun Jul 12 22:32:13 2026
***************
*** 0 ****
--- 1,64 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fdump-tree-optimized -masm=att" } */
+ /* { dg-final { scan-tree-dump-times " = \\.MUL_OVERFLOW " 8 "optimized" } } */
+ /* { dg-final { scan-assembler-times "\tmulw\t" 3 } } */
+ /* { dg-final { scan-assembler-times "\tmull\t" 5 } } */
+ /* { dg-final { scan-assembler-times "\tseto\t" 5 } } */
+ /* { dg-final { scan-assembler-times "\tsetno\t" 3 } } */
+ 
+ typedef unsigned short uint16_t;
+ typedef unsigned int uint32_t;
+ typedef unsigned long long uint64_t;
+ 
+ #define UINT16_MAX 65535U
+ #define UINT32_MAX 4294967295U
+ 
+ bool
+ mul16_gt (uint16_t x, uint16_t y)
+ {
+   return uint32_t (x) * y > UINT16_MAX;
+ }
+ 
+ bool
+ mul16_le (uint16_t x, uint16_t y)
+ {
+   return uint32_t (x) * y <= UINT16_MAX;
+ }
+ 
+ bool
+ mul16_builtin (uint16_t x, uint16_t y)
+ {
+   uint16_t result;
+   return __builtin_mul_overflow (x, y, &result);
+ }
+ 
+ bool
+ mul32_gt (uint32_t x, uint32_t y)
+ {
+   return uint64_t (x) * y > UINT32_MAX;
+ }
+ 
+ bool
+ mul32_le (uint32_t x, uint32_t y)
+ {
+   return uint64_t (x) * y <= UINT32_MAX;
+ }
+ 
+ bool
+ mul32_gt_rev (uint32_t x, uint32_t y)
+ {
+   return UINT32_MAX < uint64_t (x) * y;
+ }
+ 
+ bool
+ mul32_le_rev (uint32_t x, uint32_t y)
+ {
+   return UINT32_MAX >= uint64_t (x) * y;
+ }
+ 
+ bool
+ mul32_builtin (uint32_t x, uint32_t y)
+ {
+   uint32_t result;
+   return __builtin_mul_overflow (x, y, &result);
+ }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/g++.target/i386/mul-overflow-widen-2.C gcc-17-20260712/gcc/testsuite/g++.target/i386/mul-overflow-widen-2.C
*** gcc-17-20260705/gcc/testsuite/g++.target/i386/mul-overflow-widen-2.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/g++.target/i386/mul-overflow-widen-2.C	Sun Jul 12 22:32:13 2026
***************
*** 0 ****
--- 1,36 ----
+ /* { dg-do compile { target int128 } } */
+ /* { dg-options "-O2 -fdump-tree-optimized -masm=att" } */
+ /* { dg-final { scan-tree-dump-times " = \\.MUL_OVERFLOW " 4 "optimized" } } */
+ /* { dg-final { scan-assembler-times "\tmulq\t" 4 } } */
+ /* { dg-final { scan-assembler-times "\tseto\t" 3 } } */
+ /* { dg-final { scan-assembler-times "\tsetno\t" 1 } } */
+ 
+ typedef unsigned long long uint64_t;
+ typedef unsigned __int128 uint128_t;
+ 
+ #define UINT64_MAX 18446744073709551615ULL
+ 
+ bool
+ mul64_gt (uint64_t x, uint64_t y)
+ {
+   return uint128_t (x) * y > UINT64_MAX;
+ }
+ 
+ bool
+ mul64_le (uint64_t x, uint64_t y)
+ {
+   return uint128_t (x) * y <= UINT64_MAX;
+ }
+ 
+ bool
+ mul64_high (uint64_t x, uint64_t y)
+ {
+   return ((__int128) x * y >> 64) != 0;
+ }
+ 
+ bool
+ mul64_builtin (uint64_t x, uint64_t y)
+ {
+   uint64_t result;
+   return __builtin_mul_overflow (x, y, &result);
+ }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/g++.target/i386/pr99679-1.C gcc-17-20260712/gcc/testsuite/g++.target/i386/pr99679-1.C
*** gcc-17-20260705/gcc/testsuite/g++.target/i386/pr99679-1.C	Sun Jul  5 22:32:12 2026
--- gcc-17-20260712/gcc/testsuite/g++.target/i386/pr99679-1.C	Sun Jul 12 22:32:13 2026
*************** foo (int x, ...)
*** 14,17 ****
    ld = va_arg (ap, long double);
    if (ld)
      abort ();
! } // { dg-error "x87 register return with x87 disabled" "" { target { ! ia32 } } }
--- 14,17 ----
    ld = va_arg (ap, long double);
    if (ld)
      abort ();
! }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/g++.target/i386/pr99679-2.C gcc-17-20260712/gcc/testsuite/g++.target/i386/pr99679-2.C
*** gcc-17-20260705/gcc/testsuite/g++.target/i386/pr99679-2.C	Sun Jul  5 22:32:12 2026
--- gcc-17-20260712/gcc/testsuite/g++.target/i386/pr99679-2.C	Sun Jul 12 22:32:13 2026
*************** foo (int x, ...)
*** 14,17 ****
    ld = va_arg (ap, double); // { dg-error "SSE register argument with SSE disabled" "" { target { ! ia32 } } }
    if (ld)
      abort ();
! } // { dg-error "SSE register return with SSE disabled" "" { target { ! ia32 } } }
--- 14,17 ----
    ld = va_arg (ap, double); // { dg-error "SSE register argument with SSE disabled" "" { target { ! ia32 } } }
    if (ld)
      abort ();
! }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/g++.target/riscv/pr97682.C gcc-17-20260712/gcc/testsuite/g++.target/riscv/pr97682.C
*** gcc-17-20260705/gcc/testsuite/g++.target/riscv/pr97682.C	Sun Jul  5 22:32:12 2026
--- gcc-17-20260712/gcc/testsuite/g++.target/riscv/pr97682.C	Sun Jul 12 22:32:13 2026
***************
*** 1,6 ****
  /* PR target/97682 */
  /* { dg-do compile } */
! /* { dg-options "-fPIC -O2 -march=rv64g -mabi=lp64" } */
  
  template <typename ab, int ac> struct g { ab b[ac]; };
  long i, m;
--- 1,6 ----
  /* PR target/97682 */
  /* { dg-do compile } */
! /* { dg-options "-fPIC -O2 -march=rv64g -mabi=lp64 -fno-unroll-loops" } */
  
  template <typename ab, int ac> struct g { ab b[ac]; };
  long i, m;
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.c-torture/compile/pr69270.c gcc-17-20260712/gcc/testsuite/gcc.c-torture/compile/pr69270.c
*** gcc-17-20260705/gcc/testsuite/gcc.c-torture/compile/pr69270.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.c-torture/compile/pr69270.c	Sun Jul 12 22:32:13 2026
***************
*** 0 ****
--- 1,35 ----
+ 
+ /* There should be two references to bufferstep that turn into
+    constants.  */
+ 
+ /* And some assignments ought to fold down to constants.  */
+ 
+ /* The XOR operations should have been optimized to constants.  */
+ 
+ 
+ extern int *stepsizeTable;
+ 
+ void
+ adpcm_coder (signed char *outdata, int len)
+ {
+   signed char *outp;
+   int delta;
+   int outputbuffer;
+   int bufferstep = 0;
+   outp = (signed char *) outdata;
+   int step = 0;
+   int index = 0;
+   int diff = 0;
+   for (; len > 0; len--)
+     {
+       delta = 0;
+       if (diff >= step)
+ 	delta = 4;
+       step = stepsizeTable[index];
+       if (bufferstep)
+ 	outputbuffer = (delta << 4) & 0xf0;
+       else
+ 	*outp++ = (delta & 0x0f) | outputbuffer;
+       bufferstep = !bufferstep;
+     }
+ }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.c-torture/compile/split-path-10.c gcc-17-20260712/gcc/testsuite/gcc.c-torture/compile/split-path-10.c
*** gcc-17-20260705/gcc/testsuite/gcc.c-torture/compile/split-path-10.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.c-torture/compile/split-path-10.c	Sun Jul 12 22:32:13 2026
***************
*** 0 ****
--- 1,46 ----
+ /* PR tree-optimization/79389  */
+ 
+ typedef struct
+ {
+   int m[17];                        
+   int seed;                             
+   int i;
+   int j;
+   int haveRange;
+   double left;
+   double right;
+   double width;
+ }
+ Random_struct, *Random;
+ 
+ Random new_Random_seed(int seed);
+ double Random_nextDouble(Random R);
+ void Random_delete(Random R);
+ 
+ static const int SEED = 113;
+ 
+ double MonteCarlo_integrate(int Num_samples)
+ {
+ 
+ 
+   Random R = new_Random_seed(SEED);
+ 
+ 
+   int under_curve = 0;
+   int count;
+ 
+   for (count=0; count<Num_samples; count++)
+     {
+       double x= Random_nextDouble(R);
+       double y= Random_nextDouble(R);
+ 
+       if ( x*x + y*y <= 1.0)
+ 	under_curve ++;
+ 
+     }
+ 
+   Random_delete(R);
+ 
+   return ((double) under_curve / Num_samples) * 4.0;
+ }
+ 
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.c-torture/compile/split-path-11.c gcc-17-20260712/gcc/testsuite/gcc.c-torture/compile/split-path-11.c
*** gcc-17-20260705/gcc/testsuite/gcc.c-torture/compile/split-path-11.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.c-torture/compile/split-path-11.c	Sun Jul 12 22:32:13 2026
***************
*** 0 ****
--- 1,11 ----
+ 
+ void foo(unsigned long long *M)
+ {
+   for (unsigned long long k = 0; k < 227; ++k)
+     {
+       unsigned long long y =
+ 	((M[k] & 0xffffffff80000000ULL) | (M[k + 1] & 0x7fffffffULL));
+       M[k] = (M[k + 397] ^ (y >> 1) ^ ((y & 1) ? 2567483615ULL : 0));
+     }
+ }
+ 
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.c-torture/compile/split-path-12.c gcc-17-20260712/gcc/testsuite/gcc.c-torture/compile/split-path-12.c
*** gcc-17-20260705/gcc/testsuite/gcc.c-torture/compile/split-path-12.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.c-torture/compile/split-path-12.c	Sun Jul 12 22:32:13 2026
***************
*** 0 ****
--- 1,18 ----
+ 
+ double
+ foo(double *d1, double *d2, double *d3, int num, double *ip)
+ {
+   double dmax[3];
+ 
+   for (int i = 0; i < num; i++) {
+     dmax[0] = d1[i] < dmax[0] ? dmax[0] : d1[i];
+     dmax[1] = d2[i] < dmax[1] ? dmax[1] : d2[i];
+     dmax[2] = d3[i] < dmax[2] ? dmax[2] : d3[i];
+     ip[i] = dmax[2];
+   }
+ 
+   return dmax[0] + dmax[1] + dmax[2];
+ }
+ 
+ /* Split-paths shouldn't do anything here, if there's a diamond it would
+    be if-convertible.  */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.c-torture/compile/split-path-13.c gcc-17-20260712/gcc/testsuite/gcc.c-torture/compile/split-path-13.c
*** gcc-17-20260705/gcc/testsuite/gcc.c-torture/compile/split-path-13.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.c-torture/compile/split-path-13.c	Sun Jul 12 22:32:13 2026
***************
*** 0 ****
--- 1,23 ----
+ /* PR tree-optimization/112402 */
+ /* This is similar to split-path-2.c but instead of the add
+    being inside both sides, we have a constant. */
+ 
+ int
+ foo(signed char *p, int n)
+ {
+   int s = 0;
+   int i;
+ 
+   for (i = 0; i < n; i++) {
+     int t;
+     if (p[i] >= 0)
+       t = 1;
+     else
+       t = -1;
+     s += t;
+   }
+ 
+   return s;
+ }
+ 
+ 
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.c-torture/compile/split-path-2.c gcc-17-20260712/gcc/testsuite/gcc.c-torture/compile/split-path-2.c
*** gcc-17-20260705/gcc/testsuite/gcc.c-torture/compile/split-path-2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.c-torture/compile/split-path-2.c	Sun Jul 12 22:32:13 2026
***************
*** 0 ****
--- 1,18 ----
+ 
+ int
+ foo(signed char *p, int n)
+ {
+   int s = 0;
+   int i;
+ 
+   for (i = 0; i < n; i++) {
+     if (p[i] >= 0)
+       s++;
+     else
+       s--;
+   }
+ 
+   return s;
+ }
+ 
+ 
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.c-torture/compile/split-path-3.c gcc-17-20260712/gcc/testsuite/gcc.c-torture/compile/split-path-3.c
*** gcc-17-20260705/gcc/testsuite/gcc.c-torture/compile/split-path-3.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.c-torture/compile/split-path-3.c	Sun Jul 12 22:32:13 2026
***************
*** 0 ****
--- 1,94 ----
+ 
+ typedef struct bitmap_head_def *bitmap;
+ extern void vec_assert_fail (const char *, const char *, const char *file_,
+ 			     unsigned line_, const char *function_)
+   __attribute__ ((__noreturn__));
+ typedef struct VEC_int_base
+ {
+   unsigned num;
+   unsigned alloc;
+   int vec[1];
+ }
+ VEC_int_base;
+ static __inline__ int
+ VEC_int_base_space (VEC_int_base * vec_, int alloc_, const char *file_,
+ 		    unsigned line_, const char *function_)
+ {
+   return vec_ ? vec_->alloc - vec_->num >= (unsigned) alloc_ : !alloc_;
+ }
+ 
+ static __inline__ int *
+ VEC_int_base_quick_push (VEC_int_base * vec_, int obj_, const char *file_,
+ 			 unsigned line_, const char *function_)
+ {
+   (void) ((vec_->num <
+ 	   vec_->alloc) ? 0 : (vec_assert_fail ("push", "VEC(int,base)",
+ 						file_, line_, function_), 0));
+ }
+ 
+ typedef struct VEC_int_heap
+ {
+   VEC_int_base base;
+ }
+ VEC_int_heap;
+ void *vec_heap_o_reserve (VEC_int_heap *, int, __SIZE_TYPE__, __SIZE_TYPE__);
+ int VEC_int_base_length (VEC_int_base *);
+ static __inline__ int
+ VEC_int_heap_reserve (VEC_int_heap ** vec_, int alloc_, const char *file_,
+ 		      unsigned line_, const char *function_)
+ {
+   int extend =
+     !VEC_int_base_space (((*vec_) ? &(*vec_)->base : 0), alloc_, file_, line_,
+ 			 function_);
+   if (extend)
+     *vec_ =
+       (VEC_int_heap *) vec_heap_o_reserve (*vec_, alloc_,
+ 					   __builtin_offsetof (VEC_int_heap,
+ 							       base.vec),
+ 					   sizeof (int));
+ }
+ 
+ static __inline__ int *
+ VEC_int_heap_safe_push (VEC_int_heap ** vec_, const int obj_,
+ 			const char *file_, unsigned line_,
+ 			const char *function_)
+ {
+   VEC_int_heap_reserve (vec_, 1, file_, line_, function_);
+   return VEC_int_base_quick_push (((*vec_) ? &(*vec_)->base : 0), obj_, file_,
+ 				  line_, function_);
+ };
+ 
+ typedef struct bitmap_head_def
+ {
+ }
+ bitmap_head;
+ typedef struct
+ {
+ }
+ bitmap_iterator;
+ int bmp_iter_and_compl_init (bitmap_iterator *, bitmap_head *, bitmap, int,
+ 			     int *);
+ int bmp_iter_and_compl (bitmap_iterator *, int *);
+ void bmp_iter_next (bitmap_iterator *, int *);
+ void VEC_int_heap_free (VEC_int_heap **);
+ bitmap
+ compute_idf (bitmap_head * dfs)
+ {
+   bitmap_iterator bi;
+   unsigned bb_index, i;
+   VEC_int_heap *work_stack;
+   bitmap phi_insertion_points;
+   while ((VEC_int_base_length (((work_stack) ? &(work_stack)->base : 0))) > 0)
+     {
+       for (bmp_iter_and_compl_init
+ 	   (&(bi), (&dfs[bb_index]), (phi_insertion_points), (0), &(i));
+ 	   bmp_iter_and_compl (&(bi), &(i)); bmp_iter_next (&(bi), &(i)))
+ 	{
+ 	  (VEC_int_heap_safe_push
+ 	   (&(work_stack), i, "/home/gcc/virgin-gcc/gcc/cfganal.c", 1349,
+ 	    __FUNCTION__));
+ 	}
+     }
+   (VEC_int_heap_free (&work_stack));
+ }
+ 
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.c-torture/compile/split-path-4.c gcc-17-20260712/gcc/testsuite/gcc.c-torture/compile/split-path-4.c
*** gcc-17-20260705/gcc/testsuite/gcc.c-torture/compile/split-path-4.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.c-torture/compile/split-path-4.c	Sun Jul 12 22:32:13 2026
***************
*** 0 ****
--- 1,26 ----
+ 
+ /* Note: Threader causes the infinite loop in val & 1 sooner.  */
+ 
+ unsigned long powi_lookup_cost (unsigned long, unsigned char *);
+ 
+ void
+ powi_cost (long n)
+ {
+   unsigned char cache[256];
+   unsigned long digit;
+   unsigned long val;
+   int result;
+   while (val >= 256)
+     {
+       if (val & 1)
+ 	{
+ 	  result += powi_lookup_cost (digit, cache) + 3 + 1;
+ 	}
+       else
+ 	{
+ 	  val >>= 1;
+ 	}
+     }
+ }
+ 
+ 
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.c-torture/compile/split-path-5.c gcc-17-20260712/gcc/testsuite/gcc.c-torture/compile/split-path-5.c
*** gcc-17-20260705/gcc/testsuite/gcc.c-torture/compile/split-path-5.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.c-torture/compile/split-path-5.c	Sun Jul 12 22:32:13 2026
***************
*** 0 ****
--- 1,41 ----
+ 
+ const extern signed char *__ctype_ptr__;
+ typedef unsigned char uchar;
+ static int patlen;
+ static int skip[(0x7f * 2 + 1) + 1];
+ static uchar *pat = ((void *) 0);
+ void
+ bmhi_init (const signed char *pattern)
+ {
+   int i, lastpatchar;
+   patlen = __builtin_strlen (pattern);
+   for (i = 0; i < patlen; i++)
+     pat[i] = (
+ 	       {
+ 	       __typeof__ (pattern[i]) __x = (pattern[i]);
+ 	       ((((__ctype_ptr__ +
+ 		   sizeof (""[__x]))[(int) (__x)]) & (01 | 02))
+ 		== 02) ? (int) __x - 'a' + 'A' : (int) __x;
+ 	       });
+   for (i = 0; i < patlen - 1; ++i)
+     {
+       skip[(
+ 	     {
+ 	     __typeof__ (pat[i]) __x = (pat[i]);
+ 	     ((((__ctype_ptr__ +
+ 		 sizeof (""[__x]))[(int) (__x)]) & (01 | 02)) ==
+ 	      01) ? (int) __x - 'A' + 'a' : (int) __x;
+ 	     })] = patlen - i - 1;
+     }
+   skip[(
+ 	 {
+ 	 __typeof__ (lastpatchar) __x = (lastpatchar);
+ 	 ((((__ctype_ptr__ +
+ 	     sizeof (""[__x]))[(int) (__x)]) & (01 | 02)) ==
+ 	  01) ? (int) __x - 'A' + 'a' : (int) __x;
+ 	 })] = 32767;
+   for (i = 0; i < patlen - 1; ++i)
+     {
+     }
+ }
+ 
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.c-torture/compile/split-path-6.c gcc-17-20260712/gcc/testsuite/gcc.c-torture/compile/split-path-6.c
*** gcc-17-20260705/gcc/testsuite/gcc.c-torture/compile/split-path-6.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.c-torture/compile/split-path-6.c	Sun Jul 12 22:32:13 2026
***************
*** 0 ****
--- 1,75 ----
+ 
+ struct __sFILE
+ {
+   unsigned char *_p;
+   int _r;
+ };
+ typedef struct __sFILE __FILE;
+ struct _reent
+ {
+   __FILE *_stdin, *_stdout, *_stderr;
+ };
+ extern struct _reent *_impure_ptr;
+ extern char contextbufs[10][1024];
+ extern int contextoffset;
+ extern int sflag;
+ int strtosichar (char *, int);
+ int ichartosstr (int, int);
+ void treeinsert (int, int, int);
+ void stop(void);
+ int __srget_r (struct _reent *, __FILE *);
+ void
+ givehelp (int interactive)
+ {
+   if (interactive)
+     {
+       while ((--((_impure_ptr->_stdin))->_r <
+ 	      0 ? __srget_r (_impure_ptr,
+ 			     (_impure_ptr->
+ 			      _stdin)) : (int) (*((_impure_ptr->_stdin))->
+ 						_p++)) != ' ');
+     }
+ }
+ 
+ void
+ oof (void)
+ {
+   int bufsize;
+   int hadnl;
+   while (1)
+     {
+       if (bufsize == (sizeof contextbufs[0]) / 2 - 1)
+ 	{
+ 	  if (contextbufs[0][0] == '*' || contextbufs[0][0] == '@')
+ 	    treeinsert (ichartosstr (strtosichar (contextbufs[0] + 1, 0), 1),
+ 			(100 + 4 * 20 + 4), contextbufs[0][0] == '*');
+ 	}
+       if (hadnl)
+ 	contextoffset = 0;
+       else
+ 	contextoffset += bufsize;
+       if (sflag)
+ 	{
+ 	  stop ();
+ 	}
+     }
+ }
+ 
+ 
+ /* lookharder becomes an ifcvt'd/cmov. */
+ void
+ lookharder (char *string)
+ {
+   register char *g;
+   register char *s;
+   for (s = string; *s != '\0'; s++)
+     {
+       if (*s == '*')
+ 	{
+ 	  *g++ = '.';
+ 	}
+       else
+ 	*g++ = *s;
+     }
+ }
+ 
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.c-torture/compile/split-path-7.c gcc-17-20260712/gcc/testsuite/gcc.c-torture/compile/split-path-7.c
*** gcc-17-20260705/gcc/testsuite/gcc.c-torture/compile/split-path-7.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.c-torture/compile/split-path-7.c	Sun Jul 12 22:32:13 2026
***************
*** 0 ****
--- 1,91 ----
+ 
+ 
+ struct _reent
+ {
+ };
+ typedef unsigned char ichar_t;
+ struct dent
+ {
+   char *word;
+ };
+ struct flagent
+ {
+   ichar_t *strip;
+   ichar_t *affix;
+   short stripl;
+   short affl;
+ };
+ union ptr_union
+ {
+   struct flagptr *fp;
+   struct flagent *ent;
+ };
+ struct flagptr
+ {
+   union ptr_union pu;
+   int numents;
+ };
+ struct hashheader
+ {
+ };
+ extern struct dent *hashtbl;
+ extern char *hashstrings;
+ extern int hashsize;
+ extern int nodictflag;
+ extern int numsflags;
+ extern int numpflags;
+ extern struct flagent *pflaglist;
+ extern struct flagent *sflaglist;
+ int
+ linit ()
+ {
+   register int i;
+   register struct dent *dp;
+   struct flagent *entry;
+   struct flagptr *ind;
+   int viazero;
+   register ichar_t *cp;
+   if (!nodictflag)
+     {
+       for (i = hashsize, dp = hashtbl; --i >= 0; dp++)
+ 	{
+ 	  if (dp->word == (char *) -1)
+ 	    dp->word = ((void *) 0);
+ 	  else
+ 	    dp->word = &hashstrings[(int) (dp->word)];
+ 	}
+     }
+   for (i = numsflags + numpflags, entry = sflaglist; --i >= 0; entry++)
+     {
+       if (entry->stripl)
+ 	entry->strip = (ichar_t *) & hashstrings[(int) entry->strip];
+       else
+ 	entry->affix = ((void *) 0);
+     }
+   for (i = numsflags, entry = sflaglist; i > 0; i--, entry++)
+     {
+       if (entry->affl == 0)
+ 	{
+ 	  if (ind->pu.fp == ((void *) 0))
+ 	    {
+ 	    }
+ 	}
+     }
+   for (i = numpflags, entry = pflaglist; i > 0; i--, entry++)
+     {
+       if (entry->affl == 0)
+ 	{
+ 	  while (ind->numents == 0 && ind->pu.fp != ((void *) 0))
+ 	    {
+ 	      if (*cp == 0)
+ 		{
+ 		}
+ 	    }
+ 	}
+       if (!viazero && ind->numents >= 4
+ 	  && __builtin_strcmp ((char *) (entry->affix),
+ 			       (char *) (ind->pu.ent->affix)) != 0)
+ 	{
+ 	}
+     }
+ }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.c-torture/compile/split-path-8.c gcc-17-20260712/gcc/testsuite/gcc.c-torture/compile/split-path-8.c
*** gcc-17-20260705/gcc/testsuite/gcc.c-torture/compile/split-path-8.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.c-torture/compile/split-path-8.c	Sun Jul 12 22:32:13 2026
***************
*** 0 ****
--- 1,11 ----
+ /* PR77283 */
+ 
+ void
+ foo (double *x, double *a, double *b, long n, double limit)
+ {
+   long i;
+   for (i=0; i < n; i++)
+     if (a[i] < limit)
+       x[i] = b[i];
+ }
+ 
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.c-torture/compile/split-path-9.c gcc-17-20260712/gcc/testsuite/gcc.c-torture/compile/split-path-9.c
*** gcc-17-20260705/gcc/testsuite/gcc.c-torture/compile/split-path-9.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.c-torture/compile/split-path-9.c	Sun Jul 12 22:32:13 2026
***************
*** 0 ****
--- 1,14 ----
+ /* PR77366 */
+ 
+ void
+ foo(unsigned int size, unsigned int *state)
+ {
+   unsigned int i;
+ 
+   for(i = 0; i < size; i++)
+     {
+       if(state[i] & 1)
+ 	state[i] ^= 1;
+     }
+ }
+ 
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.c-torture/execute/split-path-1.c gcc-17-20260712/gcc/testsuite/gcc.c-torture/execute/split-path-1.c
*** gcc-17-20260705/gcc/testsuite/gcc.c-torture/execute/split-path-1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.c-torture/execute/split-path-1.c	Sun Jul 12 22:32:13 2026
***************
*** 0 ****
--- 1,67 ----
+ /* Note both PHI-OPT and the loop if conversion pass converts the inner if to be branchless using min/max. */
+ 
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <ctype.h>
+ 
+ #define RGBMAX 255 
+ 
+ unsigned char
+ test()
+ {
+   int i, Pels;
+   int sum = 0;
+   unsigned char xr, xg, xb;
+   unsigned char xc, xm, xy, xk = 0;
+   unsigned char *ReadPtr, *EritePtr;
+ 
+   ReadPtr = ( unsigned char *) malloc (sizeof (unsigned char) * 100);
+   EritePtr = ( unsigned char *) malloc (sizeof (unsigned char) * 100);
+ 
+   for (i = 0; i < 100;i++)
+      {
+        ReadPtr[i] = 100 - i;
+      }
+ 
+   for (i = 0; i < 24; i++)
+      {
+        xr = *ReadPtr++;
+        xg = *ReadPtr++;
+        xb = *ReadPtr++;
+ 
+        xc = (unsigned char) (RGBMAX - xr);
+        xm = (unsigned char) (RGBMAX - xg);
+        xy = (unsigned char) (RGBMAX - xb);
+ 
+        if (xc < xm)
+          {
+            xk = (unsigned char) (xc < xy ? xc : xy);
+          }
+        else
+         {
+           xk = (unsigned char) (xm < xy ? xm : xy);
+         }
+ 
+        xc = (unsigned char) (xc - xk);
+        xm = (unsigned char) (xm - xk);
+        xy = (unsigned char) (xy - xk);
+ 
+        *EritePtr++ = xc;
+        *EritePtr++ = xm;
+        *EritePtr++ = xy;
+        *EritePtr++ = xk;
+        sum += *(--EritePtr);
+        
+     }
+   return sum;
+ }
+ 
+ int
+ main()
+ {
+   if (test() != 196)
+     abort();
+ 
+   return 0;
+ }
+ 
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.dg/asm-hard-reg-error-3.c gcc-17-20260712/gcc/testsuite/gcc.dg/asm-hard-reg-error-3.c
*** gcc-17-20260705/gcc/testsuite/gcc.dg/asm-hard-reg-error-3.c	Sun Jul  5 22:32:12 2026
--- gcc-17-20260712/gcc/testsuite/gcc.dg/asm-hard-reg-error-3.c	Sun Jul 12 22:32:13 2026
***************
*** 1,4 ****
! /* { dg-do compile { target arm*-*-* s390-*-* } } */
  /* { dg-options "-std=c99" } we need long long */
  /* { dg-additional-options "-mcpu=unset -march=armv7-a+fp -marm" { target arm*-*-* } } */
  
--- 1,4 ----
! /* { dg-do compile { target arm*-*-* } } */
  /* { dg-options "-std=c99" } we need long long */
  /* { dg-additional-options "-mcpu=unset -march=armv7-a+fp -marm" { target arm*-*-* } } */
  
***************
*** 7,15 ****
  #if defined (__arm__)
  # define GPR1 "{r4}"
  # define GPR2_RAW "r5"
- #elif defined (__s390__)
- # define GPR1 "{r4}"
- # define GPR2_RAW "r5"
  #endif
  
  #define GPR2 "{"GPR2_RAW"}"
--- 7,12 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.dg/builtin-bswap-8.c gcc-17-20260712/gcc/testsuite/gcc.dg/builtin-bswap-8.c
*** gcc-17-20260705/gcc/testsuite/gcc.dg/builtin-bswap-8.c	Sun Jul  5 22:32:12 2026
--- gcc-17-20260712/gcc/testsuite/gcc.dg/builtin-bswap-8.c	Sun Jul 12 22:32:13 2026
***************
*** 1,7 ****
  /* { dg-do compile { target arm*-*-* alpha*-*-* i?86-*-* powerpc*-*-* rs6000-*-* x86_64-*-* s390*-*-* } } */
  /* { dg-require-effective-target stdint_types } */
  /* { dg-options "-O2 -fdump-rtl-combine" } */
- /* { dg-options "-O2 -fdump-rtl-combine -march=z900" { target s390-*-* } } */
  
  #include <stdint.h>
  
--- 1,6 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.dg/fold-vecperm-insert-1.c gcc-17-20260712/gcc/testsuite/gcc.dg/fold-vecperm-insert-1.c
*** gcc-17-20260705/gcc/testsuite/gcc.dg/fold-vecperm-insert-1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.dg/fold-vecperm-insert-1.c	Sun Jul 12 22:32:13 2026
***************
*** 0 ****
--- 1,19 ----
+ /* { dg-do compile { target aarch64*-*-* arm*-*-* x86_64-*-* } } */
+ /* { dg-options "-O2 -fdump-tree-forwprop3" } */
+ 
+ typedef int __attribute__((vector_size(16))) v4si;
+ 
+ /* Shift vector v by one element and insert the value val.  The vector shift
+    typically requires a zero vector operand in VEC_PERM_EXPR, but it can be
+    optimized away in this case.  */
+ 
+ v4si shift_and_insert (v4si v, int val)
+ {
+   v4si zero = { 0, 0, 0, 0 };
+   v4si sel = { 1, 2, 3, 4 };
+   v4si shifted = __builtin_shuffle (v, zero, sel);
+   shifted[3] = val;
+   return shifted;
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "VEC_PERM_EXPR.*v_\[0-9\]+.*v_\[0-9\]+" 1 "forwprop3" } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.dg/ifcvt-4.c gcc-17-20260712/gcc/testsuite/gcc.dg/ifcvt-4.c
*** gcc-17-20260705/gcc/testsuite/gcc.dg/ifcvt-4.c	Sun Jul  5 22:32:13 2026
--- gcc-17-20260712/gcc/testsuite/gcc.dg/ifcvt-4.c	Sun Jul 12 22:32:13 2026
***************
*** 4,10 ****
  /* { dg-additional-options "-mtune-ctrl=^one_if_conv_insn" { target { i?86-*-* x86_64-*-* } } } */
  /* { dg-skip-if "Multiple set if-conversion not guaranteed on all subtargets" { "arm*-*-* avr-*-* cris-*-* hppa*64*-*-* visium-*-*" riscv*-*-* msp430-*-* pru-*-* loongarch32-*-* } }  */
  /* { dg-skip-if "" { { sparc*-*-* } && { ! sparc_v9 } } }  */
- /* { dg-skip-if "" { "s390x-*-*" } { "-m31" } }  */
  
  typedef int word __attribute__((mode(word)));
  
--- 4,9 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.dg/ipa/ipa-pta-20.c gcc-17-20260712/gcc/testsuite/gcc.dg/ipa/ipa-pta-20.c
*** gcc-17-20260705/gcc/testsuite/gcc.dg/ipa/ipa-pta-20.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.dg/ipa/ipa-pta-20.c	Sun Jul 12 22:32:13 2026
***************
*** 0 ****
--- 1,33 ----
+ /* { dg-do run } */
+ /* { dg-options "-O2 -fipa-pta -fdump-ipa-pta2-details" } */
+ 
+ #include <stdarg.h>
+ 
+ static int __attribute__((noinline, noclone)) q (int n, ...)
+ {
+   va_list va;
+   va_start (va, n);
+   int *a = va_arg (va, int *);
+   int *b = va_arg (va, int *);
+   va_end (va);
+   return *a + *b;
+ }
+ 
+ static int __attribute__((noinline, noclone)) foo (int (*p)(int, ...))
+ {
+   int i = 1, j = 3;
+   return p(2, &i, &j);
+ }
+ 
+ int main()
+ {
+   if (foo (q) != 4)
+     __builtin_abort ();
+   return 0;
+ }
+ 
+ /* Verify we properly handle variadic arguments for indirect calls and
+    .VA_ARG properly accesses only the variadic part.  */
+ 
+ /* { dg-final { scan-ipa-dump "a_\[0-9\]\+ = { i j }" "pta2" } } */
+ /* { dg-final { scan-ipa-dump "b_\[0-9\]\+ = { i j }" "pta2" } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.dg/ipa/pr125207.c gcc-17-20260712/gcc/testsuite/gcc.dg/ipa/pr125207.c
*** gcc-17-20260705/gcc/testsuite/gcc.dg/ipa/pr125207.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.dg/ipa/pr125207.c	Sun Jul 12 22:32:13 2026
***************
*** 0 ****
--- 1,43 ----
+ /* { dg-do run } */
+ /* { dg-options "-O3 --param ipa-cp-eval-threshold=1"  } */
+ 
+ typedef int(*fp_t_5)(int, int, int);
+ int g2, g30, g21, g17, g16, g14, g9, g3, g12, g31;
+ _Bool g22, g26;
+ static
+ int f11(int, fp_t_5 a1, int, int, int)
+ {
+     do {
+       g12 = a1(1 ^ g14, 0, g9);
+       if (g22)
+         if (g2 != g17)
+           if (g26)
+             return g30;
+     } while(true);
+ }
+ static __attribute__((noinline))
+ int f2(int a0, int, int a2)
+ {
+     static int t = 0;
+     t++;
+     if (t > 2)
+       __builtin_abort();
+     g26 = true;
+     g22 = true;
+     if (g3 != a0) {
+       g31 = 2;
+       a0 = g31;
+     }
+     if (a0 == 2)
+       if (a2 != 80)
+         return 0;
+     g17 = 6;
+     g21 += f11(0, f2, 0, 0, 0);
+     return 0;
+ }
+ void f1() { f2(0, 0, 0); }
+ int main()
+ {
+     f2(0, 0, 0);
+     return 0;
+ }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.dg/optimize-bswaphi-1.c gcc-17-20260712/gcc/testsuite/gcc.dg/optimize-bswaphi-1.c
*** gcc-17-20260705/gcc/testsuite/gcc.dg/optimize-bswaphi-1.c	Sun Jul  5 22:32:13 2026
--- gcc-17-20260712/gcc/testsuite/gcc.dg/optimize-bswaphi-1.c	Sun Jul 12 22:32:13 2026
***************
*** 2,8 ****
  /* { dg-require-effective-target bswap } */
  /* { dg-require-effective-target stdint_types } */
  /* { dg-options "-O2 -fdump-tree-bswap" } */
- /* { dg-additional-options "-march=z900" { target s390-*-* } } */
  
  #include <stdint.h>
  
--- 2,7 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.dg/optimize-bswapsi-3.c gcc-17-20260712/gcc/testsuite/gcc.dg/optimize-bswapsi-3.c
*** gcc-17-20260705/gcc/testsuite/gcc.dg/optimize-bswapsi-3.c	Sun Jul  5 22:32:13 2026
--- gcc-17-20260712/gcc/testsuite/gcc.dg/optimize-bswapsi-3.c	Sun Jul 12 22:32:13 2026
***************
*** 2,8 ****
  /* { dg-require-effective-target bswap } */
  /* { dg-require-effective-target stdint_types } */
  /* { dg-options "-O2 -fdump-tree-optimized" } */
- /* { dg-additional-options "-march=z900" { target s390-*-* } } */
  
  typedef int SItype __attribute__ ((mode (SI)));
  typedef int DItype __attribute__ ((mode (DI)));
--- 2,7 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.dg/optimize-bswapsi-4.c gcc-17-20260712/gcc/testsuite/gcc.dg/optimize-bswapsi-4.c
*** gcc-17-20260705/gcc/testsuite/gcc.dg/optimize-bswapsi-4.c	Sun Jul  5 22:32:13 2026
--- gcc-17-20260712/gcc/testsuite/gcc.dg/optimize-bswapsi-4.c	Sun Jul 12 22:32:13 2026
***************
*** 1,7 ****
  /* { dg-do compile } */
  /* { dg-require-effective-target bswap } */
  /* { dg-options "-O2 -fdump-tree-bswap" } */
- /* { dg-additional-options "-march=z900" { target s390-*-* } } */
  
  typedef unsigned char u8;
  typedef unsigned int u32;
--- 1,6 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.dg/optimize-bswapsi-5.c gcc-17-20260712/gcc/testsuite/gcc.dg/optimize-bswapsi-5.c
*** gcc-17-20260705/gcc/testsuite/gcc.dg/optimize-bswapsi-5.c	Sun Jul  5 22:32:13 2026
--- gcc-17-20260712/gcc/testsuite/gcc.dg/optimize-bswapsi-5.c	Sun Jul 12 22:32:13 2026
***************
*** 1,7 ****
  /* { dg-do compile } */
  /* { dg-require-effective-target bswap } */
  /* { dg-options "-O2 -fno-tree-vectorize -fdump-tree-optimized -fno-inline-functions" } */
- /* { dg-additional-options "-march=z900" { target s390-*-* } } */
  
  struct L { unsigned int l[2]; };
  union U { double a; struct L l; } u;
--- 1,6 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.dg/optimize-bswapsi-6.c gcc-17-20260712/gcc/testsuite/gcc.dg/optimize-bswapsi-6.c
*** gcc-17-20260705/gcc/testsuite/gcc.dg/optimize-bswapsi-6.c	Sun Jul  5 22:32:13 2026
--- gcc-17-20260712/gcc/testsuite/gcc.dg/optimize-bswapsi-6.c	Sun Jul 12 22:32:13 2026
***************
*** 2,8 ****
  /* { dg-do compile } */
  /* { dg-require-effective-target bswap } */
  /* { dg-options "-O2 -fno-tree-vectorize -fdump-tree-store-merging" } */
- /* { dg-additional-options "-march=z900" { target s390-*-* } } */
  
  typedef unsigned char u8;
  typedef unsigned int u32;
--- 2,7 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.dg/optimize-bswapsi-7.c gcc-17-20260712/gcc/testsuite/gcc.dg/optimize-bswapsi-7.c
*** gcc-17-20260705/gcc/testsuite/gcc.dg/optimize-bswapsi-7.c	Sun Jul  5 22:32:13 2026
--- gcc-17-20260712/gcc/testsuite/gcc.dg/optimize-bswapsi-7.c	Sun Jul 12 22:32:13 2026
***************
*** 2,8 ****
  /* { dg-do compile } */
  /* { dg-require-effective-target bswap } */
  /* { dg-options "-O2 -fno-tree-vectorize -fdump-tree-optimized" } */
- /* { dg-additional-options "-march=z900" { target s390-*-* } } */
  
  static unsigned int
  f1 (unsigned int x)
--- 2,7 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.dg/pr102202-3.c gcc-17-20260712/gcc/testsuite/gcc.dg/pr102202-3.c
*** gcc-17-20260705/gcc/testsuite/gcc.dg/pr102202-3.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.dg/pr102202-3.c	Sun Jul 12 22:32:13 2026
***************
*** 0 ****
--- 1,21 ----
+ /* PR tree-optimization/102202 */
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fdump-tree-cdce-details" } */
+ 
+ /* An exact two-value range {0, 2}.  Use a PHI so that Ranger retains
+    the two singleton values at the call.  */
+ 
+ void
+ g1 (unsigned int x, int c, char *d)
+ {
+   __SIZE_TYPE__ len;
+ 
+   if (x)
+     len = 2;
+   else
+     len = 0;
+ 
+   __builtin_memset (d, c, len);
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "function call is shrink-wrapped into error conditions" 1 "cdce" } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.dg/pr102202-4.c gcc-17-20260712/gcc/testsuite/gcc.dg/pr102202-4.c
*** gcc-17-20260705/gcc/testsuite/gcc.dg/pr102202-4.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.dg/pr102202-4.c	Sun Jul 12 22:32:13 2026
***************
*** 0 ****
--- 1,16 ----
+ /* PR tree-optimization/102202 */
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fdump-tree-cdce-details" } */
+ 
+ /* The interval [0, 2] is not the exact two-value set {0, 2}.  */
+ 
+ void
+ g1 (__SIZE_TYPE__ len, int c, char *d)
+ {
+   if (len > 2)
+     __builtin_unreachable ();
+ 
+   __builtin_memset (d, c, len);
+ }
+ 
+ /* { dg-final { scan-tree-dump-not "function call is shrink-wrapped into error conditions" "cdce" } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.dg/pr120525.c gcc-17-20260712/gcc/testsuite/gcc.dg/pr120525.c
*** gcc-17-20260705/gcc/testsuite/gcc.dg/pr120525.c	Sun Jul  5 22:32:13 2026
--- gcc-17-20260712/gcc/testsuite/gcc.dg/pr120525.c	Sun Jul 12 22:32:13 2026
***************
*** 1,6 ****
  /* { dg-do compile { target fpic } } */
  /* { dg-options "-O2 -fpic -g" } */
- /* { dg-additional-options "-m31" { target s390x-*-* } } */
  
  typedef __SIZE_TYPE__ uintptr_t;
  static __thread uintptr_t start_sp;
--- 1,5 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.dg/pr124545-2.c gcc-17-20260712/gcc/testsuite/gcc.dg/pr124545-2.c
*** gcc-17-20260705/gcc/testsuite/gcc.dg/pr124545-2.c	Sun Jul  5 22:32:13 2026
--- gcc-17-20260712/gcc/testsuite/gcc.dg/pr124545-2.c	Sun Jul 12 22:32:13 2026
***************
*** 4,10 ****
     computed value.  In particular it must NOT fire when CST is not
     representable in the inner type (which would silently drop the bits
     above the inner precision), and it must stay correct for unsigned
!    inner types where the narrow operation wraps.  */
  /* { dg-do run } */
  /* { dg-options "-O2" } */
  
--- 4,12 ----
     computed value.  In particular it must NOT fire when CST is not
     representable in the inner type (which would silently drop the bits
     above the inner precision), and it must stay correct for unsigned
!    inner types where the narrow operation wraps.  Uses __UINT{32,64}_TYPE__
!    rather than unsigned {int,long} so that the narrow-vs-wide contrast is
!    independent of ILP32 vs LP64.  */
  /* { dg-do run } */
  /* { dg-options "-O2" } */
  
***************
*** 13,35 ****
  __attribute__((noipa)) int
  oor_eq (int a)
  {
!   return ((unsigned long long) a + 0x100000000ULL) == (unsigned long long) a;
  }
  
! __attribute__((noipa)) unsigned long long
  oor_val (int a)
  {
!   return (unsigned long long) a + 0x100000000ULL;
  }
  
  /* Unsigned inner: narrow add wraps mod 2^32; the widened add does not.
     The result must match the wide arithmetic for every input.  */
  __attribute__((noipa)) int
! uns_carry (unsigned int a)
  {
!   unsigned int t = a + 100u;
!   unsigned long w = (unsigned long) a + 100;
!   return w == (unsigned long) t;
  }
  
  /* Legitimate in-range case (matches the PR): k == j - 1, so the two
--- 15,37 ----
  __attribute__((noipa)) int
  oor_eq (int a)
  {
!   return ((__UINT64_TYPE__) a + 0x100000000ULL) == (__UINT64_TYPE__) a;
  }
  
! __attribute__((noipa)) __UINT64_TYPE__
  oor_val (int a)
  {
!   return (__UINT64_TYPE__) a + 0x100000000ULL;
  }
  
  /* Unsigned inner: narrow add wraps mod 2^32; the widened add does not.
     The result must match the wide arithmetic for every input.  */
  __attribute__((noipa)) int
! uns_carry (__UINT32_TYPE__ a)
  {
!   __UINT32_TYPE__ t = a + 100u;
!   __UINT64_TYPE__ w = (__UINT64_TYPE__) a + 100;
!   return w == (__UINT64_TYPE__) t;
  }
  
  /* Legitimate in-range case (matches the PR): k == j - 1, so the two
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.dg/pr125738.c gcc-17-20260712/gcc/testsuite/gcc.dg/pr125738.c
*** gcc-17-20260705/gcc/testsuite/gcc.dg/pr125738.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.dg/pr125738.c	Sun Jul 12 22:32:13 2026
***************
*** 0 ****
--- 1,22 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fdump-tree-optimized" } */
+ 
+ int
+ aa_div_bb_eq_0 (unsigned short a, unsigned short b)
+ {
+   int aa = a;
+   int bb = b;
+   int c = aa / bb;
+   return (c == 0) == (a < b);
+ }
+ 
+ int
+ aa_div_bb_ne_0 (unsigned short a, unsigned short b)
+ {
+   int aa = a;
+   int bb = b;
+   int c = aa / bb;
+   return (c != 0) == (a >= b);
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "return 1;" 2 "optimized" } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.dg/pr126169.c gcc-17-20260712/gcc/testsuite/gcc.dg/pr126169.c
*** gcc-17-20260705/gcc/testsuite/gcc.dg/pr126169.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.dg/pr126169.c	Sun Jul 12 22:32:13 2026
***************
*** 0 ****
--- 1,80 ----
+ /* { dg-options "-O3 -w -g" } */
+ /* { dg-additional-options "-fPIC" { target fpic } } */
+ 
+ extern float fmodf(float, float);
+ float b, c;
+ long h, i, k, *ab;
+ char j;
+ short m;
+ static __attribute__((noinline)) int a(int n, int p2) {
+   static int d[6];
+   for (int e = 0; e < 256; ++e)
+     d[e] = e;
+   int f = n;
+   f = d[f ^ p2];
+   return f;
+ }
+ int g(double, char) { return 0; }
+ void l(long n, int p2, char p) {
+   long o = 1, q, *t;
+   int r = 1, s;
+   ab = &o;
+   k = r = k;
+   if (0 >= p)
+     goto u;
+   goto v;
+ u:
+   r = n - o;
+   if ((9142 ^ r) >= 90 + r)
+     goto ac;
+   r = k ? k : 9039991.125f;
+   if (__builtin_isfinite(c))
+     __builtin_trap();
+   if (905969534 + (p << 24) < o)
+     goto v;
+ ac:
+   q = -o;
+   m = 6 - (p << 6);
+   if (q + 1073741825 ^ o + 7 & q)
+     goto af;
+   goto ae;
+ af:
+   if (__builtin_isfinite(c))
+     __builtin_trap();
+   *ab = 5 + o;
+   if (p2)
+     goto u;
+   if (__builtin_isfinite(b / b))
+     __builtin_trap();
+   c = 0 + fmodf(b, b);
+   if (o < n)
+     goto ag;
+   if (h)
+     goto af;
+ ae:
+   *t = k - 10992403549608;
+   q = 21285390711 * o - 403452967995;
+   if (q)
+     goto ah;
+   goto ai;
+ ah:
+   k = h + h % 490681911 - *t % 9283091488;
+   r = (int)(o >> 4) - 1321465791 - -2057527364 + 724134559;
+   if (p)
+     goto ai;
+ ag:
+   *t = j = g(0, p) ?: 81;
+   r = h;
+   if ((5275004732 | q - 80545797) - 9 / o)
+     goto ai;
+ v:
+   m = r = b;
+ ai:
+   s = q >> 4;
+   a(s, m);
+   s = a(s, 0);
+   s = a(s, r);
+   a(s, b);
+   s = (long)p2 >> a(s, p);
+   a(s, i);
+ }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.dg/torture/pr126121.c gcc-17-20260712/gcc/testsuite/gcc.dg/torture/pr126121.c
*** gcc-17-20260705/gcc/testsuite/gcc.dg/torture/pr126121.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.dg/torture/pr126121.c	Sun Jul 12 22:32:14 2026
***************
*** 0 ****
--- 1,19 ----
+ /* { dg-do run } */
+ 
+ __attribute__ ((noipa,noclone,noinline))
+ void foo (char *a, int b)
+ {
+   char c = 1 << b;
+   *a |= c;
+ }
+ 
+ int
+ main (void)
+ {
+   char a = 0;
+   foo (&a, 1);
+   if (a != 2) __builtin_abort ();
+   foo (&a, __CHAR_BIT__ + 2);
+   if (a != 2) __builtin_abort ();
+ }
+   
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.dg/torture/pr126136.c gcc-17-20260712/gcc/testsuite/gcc.dg/torture/pr126136.c
*** gcc-17-20260705/gcc/testsuite/gcc.dg/torture/pr126136.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.dg/torture/pr126136.c	Sun Jul 12 22:32:14 2026
***************
*** 0 ****
--- 1,24 ----
+ /* { dg-do run } */
+ 
+ int i;
+ 
+ __attribute__ ((noipa,noclone,noinline))
+ char foo(char val)
+ {
+   i++;
+   if (i > 1)
+     return -1;
+   else
+     return val;
+ }
+ 
+ int
+ main(void)
+ {
+   i = 0;
+   if (foo (10) != 10)
+     __builtin_abort ();
+   i += 2;
+   if (foo (10) != -1)
+     __builtin_abort ();
+ }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.dg/tree-ssa/fold-xor-and-or-1.c gcc-17-20260712/gcc/testsuite/gcc.dg/tree-ssa/fold-xor-and-or-1.c
*** gcc-17-20260705/gcc/testsuite/gcc.dg/tree-ssa/fold-xor-and-or-1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.dg/tree-ssa/fold-xor-and-or-1.c	Sun Jul 12 22:32:14 2026
***************
*** 0 ****
--- 1,55 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O3 -fdump-tree-optimized --param logical-op-non-short-circuit=0" } */
+ 
+ typedef unsigned long int uint64_t;
+ 
+ int cmp1(int d1, int d2) {
+   if (((d1 ^ d2) & 0xabcd) == 0 || d1 != d2)
+     return 0;
+   return 1;
+ }
+ 
+ int cmp2(int d1, int d2) {
+   if (d1 != d2 || ((d1 ^ d2) & 0xabcd) == 0)
+     return 0;
+   return 1;
+ }
+ 
+ int cmp3(int d1, int d2) {
+   if (10 > (0xabcd & (d2 ^ d1)) || d2 != d1)
+     return 0;
+   return 1;
+ }
+ 
+ int cmp4(int d1, int d2) {
+   if (d2 != d1 || 10 > (0xabcd & (d2 ^ d1)))
+     return 0;
+   return 1;
+ }
+ 
+ int cmp1_64(uint64_t d1, uint64_t d2) {
+   if (((d1 ^ d2) & 0xabcd) == 0 || d1 != d2)
+     return 0;
+   return 1;
+ }
+ 
+ int cmp2_64(uint64_t d1, uint64_t d2) {
+   if (d1 != d2 || ((d1 ^ d2) & 0xabcd) == 0)
+     return 0;
+   return 1;
+ }
+ 
+ int cmp3_64(uint64_t d1, uint64_t d2) {
+   if (10 > (0xabcd & (d2 ^ d1)) || d2 != d1)
+     return 0;
+   return 1;
+ }
+ 
+ int cmp4_64(uint64_t d1, uint64_t d2) {
+   if (d2 != d1 || 10 > (0xabcd & (d2 ^ d1)))
+     return 0;
+   return 1;
+ }
+ 
+ /* The if should be removed, so the condition should not exist */
+ /* { dg-final { scan-tree-dump-not "d1_\[0-9\]+.D. \\^ d2_\[0-9\]+.D." "optimized" } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.dg/tree-ssa/fold-xor-or-1.c gcc-17-20260712/gcc/testsuite/gcc.dg/tree-ssa/fold-xor-or-1.c
*** gcc-17-20260705/gcc/testsuite/gcc.dg/tree-ssa/fold-xor-or-1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.dg/tree-ssa/fold-xor-or-1.c	Sun Jul 12 22:32:14 2026
***************
*** 0 ****
--- 1,55 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O3 -fdump-tree-optimized --param logical-op-non-short-circuit=0" } */
+ 
+ typedef unsigned long int uint64_t;
+ 
+ int cmp1(int d1, int d2) {
+   if ((d1 ^ d2) == 0xabcd || d1 != d2)
+     return 0;
+   return 1;
+ }
+ 
+ int cmp2(int d1, int d2) {
+   if (d1 != d2 || (d1 ^ d2) == 0xabcd)
+     return 0;
+   return 1;
+ }
+ 
+ int cmp3(int d1, int d2) {
+   if (0xabcd > (d2 ^ d1) || d2 != d1)
+     return 0;
+   return 1;
+ }
+ 
+ int cmp4(int d1, int d2) {
+   if (d2 != d1 || 0xabcd > (d2 ^ d1))
+     return 0;
+   return 1;
+ }
+ 
+ int cmp1_64(uint64_t d1, uint64_t d2) {
+   if ((d1 ^ d2) == 0xabcd || d1 != d2)
+     return 0;
+   return 1;
+ }
+ 
+ int cmp2_64(uint64_t d1, uint64_t d2) {
+   if (d1 != d2 || (d1 ^ d2) == 0xabcd)
+     return 0;
+   return 1;
+ }
+ 
+ int cmp3_64(uint64_t d1, uint64_t d2) {
+   if (0xabcd > (d2 ^ d1) || d2 != d1)
+     return 0;
+   return 1;
+ }
+ 
+ int cmp4_64(uint64_t d1, uint64_t d2) {
+   if (d2 != d1 || 0xabcd > (d2 ^ d1))
+     return 0;
+   return 1;
+ }
+ 
+ /* The if should be removed, so the condition should not exist */
+ /* { dg-final { scan-tree-dump-not "d1_\[0-9\]+.D. \\^ d2_\[0-9\]+.D." "optimized" } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.dg/tree-ssa/loop-1.c gcc-17-20260712/gcc/testsuite/gcc.dg/tree-ssa/loop-1.c
*** gcc-17-20260705/gcc/testsuite/gcc.dg/tree-ssa/loop-1.c	Sun Jul  5 22:32:13 2026
--- gcc-17-20260712/gcc/testsuite/gcc.dg/tree-ssa/loop-1.c	Sun Jul 12 22:32:14 2026
***************
*** 5,15 ****
  /* { dg-options "-O1 -ftree-loop-ivcanon -funroll-loops -fdump-tree-ivcanon-details -fdump-tree-cunroll-details -fdump-tree-optimized -mshort-calls" {target epiphany-*-*} } */
    
  
- /* On 31-bit S/390 the function address will be stored (once) in the literal pool,
-    so scan-assembler-times "foo" will return 1 even if the loop is fully unrolled.
-    -msmall-exec avoids this by enabling a call instruction with immediate operand.  */
- /* { dg-options "-O1 -ftree-loop-ivcanon -funroll-loops -fdump-tree-ivcanon-details -fdump-tree-cunroll-details -fdump-tree-optimized -msmall-exec" { target s390-*-* } } */
- 
  /* On Darwin, we call extern functions via a stub in PIC mode which is default and
     the stub is named after the function.  To avoid this we use -static to go out
     of PIC mode.  */
--- 5,10 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.dg/tree-ssa/pr102793-1.c gcc-17-20260712/gcc/testsuite/gcc.dg/tree-ssa/pr102793-1.c
*** gcc-17-20260705/gcc/testsuite/gcc.dg/tree-ssa/pr102793-1.c	Sun Jul  5 22:32:13 2026
--- gcc-17-20260712/gcc/testsuite/gcc.dg/tree-ssa/pr102793-1.c	Sun Jul 12 22:32:14 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-O3 -fdump-tree-pre --param logical-op-non-short-circuit=1" } */
  
  typedef __UINT64_TYPE__ uint64_t;
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-O3 -fdump-tree-pre -fdump-tree-optimized --param logical-op-non-short-circuit=1" } */
  
  typedef __UINT64_TYPE__ uint64_t;
  
*************** int noccmp1(uint64_t* s1, uint64_t* s2)
*** 45,49 ****
      return 0;
  }
  
! /* Check for condition assignments for noccmp0 and noccmp1.  */
! /* { dg-final { scan-tree-dump-times {_\d+ = d\d+_\d+ != d\d+_\d+;\n  _\d+ = bar_\d+ == 0;} 2 "pre" } } */
--- 45,53 ----
      return 0;
  }
  
! /* Check for condition assignments for noccmp1 and noccmp0.  */
! /* { dg-final { scan-tree-dump-times {_\d+ = d\d+_\d+ != d\d+_\d+;\n  _\d+ = bar_\d+ == 0;} 1 "pre" } } */
! /* { dg-final { scan-tree-dump-times "optimizing two comparisons " 2 "pre" } } */
! /* The conditional in noccmp1 should be optimized in pre */
! /* { dg-final { scan-tree-dump-times " if " 1 "pre" } } */
! /* { dg-final { scan-tree-dump-times " if " 1 "optimized" } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.dg/tree-ssa/pr112472.c gcc-17-20260712/gcc/testsuite/gcc.dg/tree-ssa/pr112472.c
*** gcc-17-20260705/gcc/testsuite/gcc.dg/tree-ssa/pr112472.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.dg/tree-ssa/pr112472.c	Sun Jul 12 22:32:14 2026
***************
*** 0 ****
--- 1,24 ----
+ /* PR tree-optimization/112472 */
+ /* { dg-do compile } */
+ /* { dg-options "-O1 -fdump-tree-optimized" } */
+ 
+ /* (trunc)copysign ((extend)a, CST) with a negative CST should be
+    simplified to .COPYSIGN (a, -1.0e+0).  */
+ float f(float a)
+ {
+   return (float)__builtin_copysign(a, -3.0);
+ }
+ 
+ /* With a non-negative CST, copysign is canonicalized to abs, so this
+    becomes (float)abs((double)a) and is then simplified to abs(a),
+    dropping the wider type.  */
+ float f2(float a)
+ {
+   return (float)__builtin_copysign(a, 5.0);
+ }
+ 
+ /* { dg-final { scan-tree-dump-not "= __builtin_copysign" "optimized" } } */
+ /* { dg-final { scan-tree-dump-not " double " "optimized" { target ifn_copysign } } } */
+ /* { dg-final { scan-tree-dump-times ".COPYSIGN" 1 "optimized" { target ifn_copysign } } } */
+ /* { dg-final { scan-tree-dump-times "-1.0e\\+0" 1 "optimized" { target ifn_copysign } } } */
+ /* { dg-final { scan-tree-dump-times " ABS_EXPR " 1 "optimized" { target ifn_copysign } } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.dg/tree-ssa/pr117973-1.c gcc-17-20260712/gcc/testsuite/gcc.dg/tree-ssa/pr117973-1.c
*** gcc-17-20260705/gcc/testsuite/gcc.dg/tree-ssa/pr117973-1.c	Sun Jul  5 22:32:13 2026
--- gcc-17-20260712/gcc/testsuite/gcc.dg/tree-ssa/pr117973-1.c	Sun Jul 12 22:32:14 2026
***************
*** 1,5 ****
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-options "-O2 -fdump-tree-optimized --param logical-op-non-short-circuit=0" } */
+ /* { dg-additional-options "-fno-unroll-loops" { target riscv*-*-* } } */
  /* PR tree-optimization/117973 */
  #include "pr111456-1.c"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.dg/tree-ssa/pr124808-2.c gcc-17-20260712/gcc/testsuite/gcc.dg/tree-ssa/pr124808-2.c
*** gcc-17-20260705/gcc/testsuite/gcc.dg/tree-ssa/pr124808-2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.dg/tree-ssa/pr124808-2.c	Sun Jul 12 22:32:14 2026
***************
*** 0 ****
--- 1,44 ----
+ /* { dg-additional-options -O2 } */
+ /* { dg-additional-options -fdump-tree-forwprop1 } */
+ 
+ long* SetupPrecalculatedData1 (long* a) {
+   long b = 1;
+   int i;
+   for (i = 0; i < 64; i++) {
+     if(i>>3 < 7)
+       a[i] += (b<<(i+8));
+   }
+   return a;
+ }
+ 
+ long* SetupPrecalculatedData2 (long* a) {
+   long b = 1;
+   int i;
+   for (i = 0; i <= 64; i++) {
+     if(i>>3 < 7)
+       a[i] += (b<<(i+8));
+   }
+   return a;
+ }
+ 
+ long* SetupPrecalculatedData3 (long* a) {
+   long b = 1;
+   int i;
+   for (i = 0; i < 64; i++) {
+     if(i>>3 > 7)
+       a[i] += (b<<(i+8));
+   }
+   return a;
+ }
+ 
+ long* SetupPrecalculatedData4 (long* a) {
+   long b = 1;
+   int i;
+   for (i = 0; i < 64; i++) {
+     if(i>>3 >= 7)
+       a[i] += (b<<(i+8));
+   }
+   return a;
+ }
+ 
+ /* { dg-final { scan-tree-dump-times ">> 3" 0 forwprop1 } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.dg/tree-ssa/pr124808.c gcc-17-20260712/gcc/testsuite/gcc.dg/tree-ssa/pr124808.c
*** gcc-17-20260705/gcc/testsuite/gcc.dg/tree-ssa/pr124808.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.dg/tree-ssa/pr124808.c	Sun Jul 12 22:32:14 2026
***************
*** 0 ****
--- 1,78 ----
+ /* { dg-do run } */
+ /* { dg-options "-O2" } */
+ 
+ void abort(void);
+ 
+ /* Macro adapted from builtin-object-size-common.h  */
+ #define FAIL() \
+   do { \
+     __builtin_printf ("Failure at line: %d\n", __LINE__);	\
+     abort();							\
+   } while (0)
+ 
+ #define SHIFTVAL 3
+ #define CMPVAL 1
+ 
+ long setValue1 (long in)
+ {
+   if (in >> SHIFTVAL < CMPVAL)
+     return in += SHIFTVAL;
+   return -1;
+ }
+ 
+ long setValue2 (long in)
+ {
+   if (in >> SHIFTVAL <= CMPVAL)
+     return in += SHIFTVAL;
+   return -1;
+ }
+ 
+ long setValue3 (long in)
+ {
+   if (in >> SHIFTVAL > CMPVAL)
+     return in += SHIFTVAL;
+   return -1;
+ }
+ 
+ long setValue4 (long in)
+ {
+   if (in >> SHIFTVAL >= CMPVAL)
+     return in += SHIFTVAL;
+   return -1;
+ }
+ 
+ int main (void) {
+   /* setValue1: in << 3 < 1;  */
+   if (setValue1 (7) != 10)
+     FAIL ();
+   if (setValue1 (8) != -1)
+     FAIL ();
+ 
+   /* setValue2: in << 3 <= 1;  */
+   if (setValue2 (7) != 10)
+     FAIL ();
+   if (setValue2 (8) != 11)
+     FAIL ();
+   if (setValue2 (15) != 18)
+     FAIL ();
+   if (setValue2 (16) != -1)
+     FAIL ();
+ 
+   /* setValue3: in << 3 > 1;  */
+   if (setValue3 (15) != -1)
+     FAIL ();
+   if (setValue3 (16) != 19)
+     FAIL ();
+ 
+   /* setValue4: in << 3 >= 1;  */
+   if (setValue4 (7) != -1)
+     FAIL ();
+   if (setValue4 (8) != 11)
+     FAIL ();
+   if (setValue4 (15) != 18)
+     FAIL ();
+   if (setValue4 (16) != 19)
+     FAIL ();
+ 
+   return 0;
+ }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.dg/tree-ssa/pr64130.c gcc-17-20260712/gcc/testsuite/gcc.dg/tree-ssa/pr64130.c
*** gcc-17-20260705/gcc/testsuite/gcc.dg/tree-ssa/pr64130.c	Sun Jul  5 22:32:13 2026
--- gcc-17-20260712/gcc/testsuite/gcc.dg/tree-ssa/pr64130.c	Sun Jul 12 22:32:14 2026
*************** __extension__ typedef __UINT32_TYPE__ ui
*** 5,19 ****
  
  int funsigned (uint32_t a)
  {
-   return 0x1ffffffffL / a == 0;
- }
- 
- int funsigned2 (uint32_t a)
- {
    if (a < 1) return 1;
    return (-1 * 0x1ffffffffL) / a == 0;
  }
  
- /* { dg-final { scan-tree-dump "int \\\[2, 8589934591\\\]" "evrp" } } */
  /* { dg-final { scan-tree-dump "int \\\[-8589934591, -2\\\]" "evrp" } } */
  
--- 5,13 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.dg/tree-ssa/pr69270.c gcc-17-20260712/gcc/testsuite/gcc.dg/tree-ssa/pr69270.c
*** gcc-17-20260705/gcc/testsuite/gcc.dg/tree-ssa/pr69270.c	Sun Jul  5 22:32:13 2026
--- gcc-17-20260712/gcc/testsuite/gcc.dg/tree-ssa/pr69270.c	Thu Jan  1 00:00:00 1970
***************
*** 1,42 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -fsplit-paths -fdump-tree-dom3-details" } */
- 
- /* There should be two references to bufferstep that turn into
-    constants.  */
- /* { dg-final { scan-tree-dump-times "Replaced .bufferstep_\[0-9\]+. with constant .0." 1 "dom3"} } */
- /* { dg-final { scan-tree-dump-times "Replaced .bufferstep_\[0-9\]+. with constant .1." 1 "dom3"} } */
- 
- /* And some assignments ought to fold down to constants.  */
- /* { dg-final { scan-tree-dump-times "Folded to: (?:bufferstep)?_\[0-9\]+ = 1;" 1 "dom3"} } */
- /* { dg-final { scan-tree-dump-times "Folded to: (?:bufferstep)?_\[0-9\]+ = 0;" 1 "dom3"} } */
- 
- /* The XOR operations should have been optimized to constants.  */
- /* { dg-final { scan-tree-dump-not "bit_xor" "dom3"} } */
- 
- 
- extern int *stepsizeTable;
- 
- void
- adpcm_coder (signed char *outdata, int len)
- {
-   signed char *outp;
-   int delta;
-   int outputbuffer;
-   int bufferstep = 0;
-   outp = (signed char *) outdata;
-   int step = 0;
-   int index = 0;
-   int diff = 0;
-   for (; len > 0; len--)
-     {
-       delta = 0;
-       if (diff >= step)
- 	delta = 4;
-       step = stepsizeTable[index];
-       if (bufferstep)
- 	outputbuffer = (delta << 4) & 0xf0;
-       else
- 	*outp++ = (delta & 0x0f) | outputbuffer;
-       bufferstep = !bufferstep;
-     }
- }
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.dg/tree-ssa/split-path-1.c gcc-17-20260712/gcc/testsuite/gcc.dg/tree-ssa/split-path-1.c
*** gcc-17-20260705/gcc/testsuite/gcc.dg/tree-ssa/split-path-1.c	Sun Jul  5 22:32:13 2026
--- gcc-17-20260712/gcc/testsuite/gcc.dg/tree-ssa/split-path-1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,70 ****
- /* { dg-do run } */
- /* Note both PHI-OPT and the loop if conversion pass converts the inner if to be branchless using min/max. */
- /* { dg-options "-O2 -fsplit-paths -fdump-tree-split-paths-details --param max-jump-thread-duplication-stmts=20 -fno-ssa-phiopt -fno-tree-loop-if-convert" } */
- 
- #include <stdio.h>
- #include <stdlib.h>
- #include <ctype.h>
- 
- #define RGBMAX 255 
- 
- unsigned char
- test()
- {
-   int i, Pels;
-   int sum = 0;
-   unsigned char xr, xg, xb;
-   unsigned char xc, xm, xy, xk = 0;
-   unsigned char *ReadPtr, *EritePtr;
- 
-   ReadPtr = ( unsigned char *) malloc (sizeof (unsigned char) * 100);
-   EritePtr = ( unsigned char *) malloc (sizeof (unsigned char) * 100);
- 
-   for (i = 0; i < 100;i++)
-      {
-        ReadPtr[i] = 100 - i;
-      }
- 
-   for (i = 0; i < 24; i++)
-      {
-        xr = *ReadPtr++;
-        xg = *ReadPtr++;
-        xb = *ReadPtr++;
- 
-        xc = (unsigned char) (RGBMAX - xr);
-        xm = (unsigned char) (RGBMAX - xg);
-        xy = (unsigned char) (RGBMAX - xb);
- 
-        if (xc < xm)
-          {
-            xk = (unsigned char) (xc < xy ? xc : xy);
-          }
-        else
-         {
-           xk = (unsigned char) (xm < xy ? xm : xy);
-         }
- 
-        xc = (unsigned char) (xc - xk);
-        xm = (unsigned char) (xm - xk);
-        xy = (unsigned char) (xy - xk);
- 
-        *EritePtr++ = xc;
-        *EritePtr++ = xm;
-        *EritePtr++ = xy;
-        *EritePtr++ = xk;
-        sum += *(--EritePtr);
-        
-     }
-   return sum;
- }
- 
- int
- main()
- {
-   if (test() != 196)
-     abort();
- 
-   return 0;
- }
- 
- /* { dg-final { scan-tree-dump "Duplicating join block" "split-paths" } } */
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.dg/tree-ssa/split-path-10.c gcc-17-20260712/gcc/testsuite/gcc.dg/tree-ssa/split-path-10.c
*** gcc-17-20260705/gcc/testsuite/gcc.dg/tree-ssa/split-path-10.c	Sun Jul  5 22:32:13 2026
--- gcc-17-20260712/gcc/testsuite/gcc.dg/tree-ssa/split-path-10.c	Thu Jan  1 00:00:00 1970
***************
*** 1,49 ****
- /* PR tree-optimization/79389  */
- /* { dg-do compile } */
- /* { dg-options "-O3 -fdump-tree-split-paths-details" } */
- 
- typedef struct
- {
-   int m[17];                        
-   int seed;                             
-   int i;
-   int j;
-   int haveRange;
-   double left;
-   double right;
-   double width;
- }
- Random_struct, *Random;
- 
- Random new_Random_seed(int seed);
- double Random_nextDouble(Random R);
- void Random_delete(Random R);
- 
- static const int SEED = 113;
- 
- double MonteCarlo_integrate(int Num_samples)
- {
- 
- 
-   Random R = new_Random_seed(SEED);
- 
- 
-   int under_curve = 0;
-   int count;
- 
-   for (count=0; count<Num_samples; count++)
-     {
-       double x= Random_nextDouble(R);
-       double y= Random_nextDouble(R);
- 
-       if ( x*x + y*y <= 1.0)
- 	under_curve ++;
- 
-     }
- 
-   Random_delete(R);
- 
-   return ((double) under_curve / Num_samples) * 4.0;
- }
- 
- /* { dg-final { scan-tree-dump-times "Duplicating join block" 0 "split-paths" } } */
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.dg/tree-ssa/split-path-11.c gcc-17-20260712/gcc/testsuite/gcc.dg/tree-ssa/split-path-11.c
*** gcc-17-20260705/gcc/testsuite/gcc.dg/tree-ssa/split-path-11.c	Sun Jul  5 22:32:13 2026
--- gcc-17-20260712/gcc/testsuite/gcc.dg/tree-ssa/split-path-11.c	Thu Jan  1 00:00:00 1970
***************
*** 1,14 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -fno-tree-vectorize -fsplit-paths -fdump-tree-split-paths-details -w" } */
- 
- void foo(unsigned long long *M)
- {
-   for (unsigned long long k = 0; k < 227; ++k)
-     {
-       unsigned long long y =
- 	((M[k] & 0xffffffff80000000ULL) | (M[k + 1] & 0x7fffffffULL));
-       M[k] = (M[k + 397] ^ (y >> 1) ^ ((y & 1) ? 2567483615ULL : 0));
-     }
- }
- 
- /* { dg-final { scan-tree-dump-times "join point for if-convertible" 1 "split-paths" } } */
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.dg/tree-ssa/split-path-12.c gcc-17-20260712/gcc/testsuite/gcc.dg/tree-ssa/split-path-12.c
*** gcc-17-20260705/gcc/testsuite/gcc.dg/tree-ssa/split-path-12.c	Sun Jul  5 22:32:13 2026
--- gcc-17-20260712/gcc/testsuite/gcc.dg/tree-ssa/split-path-12.c	Thu Jan  1 00:00:00 1970
***************
*** 1,21 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -fsplit-paths -fdump-tree-split-paths-details " } */
- 
- double
- foo(double *d1, double *d2, double *d3, int num, double *ip)
- {
-   double dmax[3];
- 
-   for (int i = 0; i < num; i++) {
-     dmax[0] = d1[i] < dmax[0] ? dmax[0] : d1[i];
-     dmax[1] = d2[i] < dmax[1] ? dmax[1] : d2[i];
-     dmax[2] = d3[i] < dmax[2] ? dmax[2] : d3[i];
-     ip[i] = dmax[2];
-   }
- 
-   return dmax[0] + dmax[1] + dmax[2];
- }
- 
- /* Split-paths shouldn't do anything here, if there's a diamond it would
-    be if-convertible.  */
- /* { dg-final { scan-tree-dump-not "Duplicating join block" "split-paths" } } */
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.dg/tree-ssa/split-path-13.c gcc-17-20260712/gcc/testsuite/gcc.dg/tree-ssa/split-path-13.c
*** gcc-17-20260705/gcc/testsuite/gcc.dg/tree-ssa/split-path-13.c	Sun Jul  5 22:32:13 2026
--- gcc-17-20260712/gcc/testsuite/gcc.dg/tree-ssa/split-path-13.c	Thu Jan  1 00:00:00 1970
***************
*** 1,26 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -fsplit-paths -fdump-tree-split-paths-details " } */
- /* PR tree-optimization/112402 */
- /* This is similar to split-path-2.c but instead of the add
-    being inside both sides, we have a constant. */
- 
- int
- foo(signed char *p, int n)
- {
-   int s = 0;
-   int i;
- 
-   for (i = 0; i < n; i++) {
-     int t;
-     if (p[i] >= 0)
-       t = 1;
-     else
-       t = -1;
-     s += t;
-   }
- 
-   return s;
- }
- 
- /* { dg-final { scan-tree-dump "appears to be a join point for if-convertible" "split-paths" } } */
- 
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.dg/tree-ssa/split-path-2.c gcc-17-20260712/gcc/testsuite/gcc.dg/tree-ssa/split-path-2.c
*** gcc-17-20260705/gcc/testsuite/gcc.dg/tree-ssa/split-path-2.c	Sun Jul  5 22:32:13 2026
--- gcc-17-20260712/gcc/testsuite/gcc.dg/tree-ssa/split-path-2.c	Thu Jan  1 00:00:00 1970
***************
*** 1,21 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -fsplit-paths -fdump-tree-split-paths-details " } */
- 
- int
- foo(signed char *p, int n)
- {
-   int s = 0;
-   int i;
- 
-   for (i = 0; i < n; i++) {
-     if (p[i] >= 0)
-       s++;
-     else
-       s--;
-   }
- 
-   return s;
- }
- 
- /* { dg-final { scan-tree-dump "appears to be a join point for if-convertible" "split-paths" } } */
- 
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.dg/tree-ssa/split-path-3.c gcc-17-20260712/gcc/testsuite/gcc.dg/tree-ssa/split-path-3.c
*** gcc-17-20260705/gcc/testsuite/gcc.dg/tree-ssa/split-path-3.c	Sun Jul  5 22:32:13 2026
--- gcc-17-20260712/gcc/testsuite/gcc.dg/tree-ssa/split-path-3.c	Thu Jan  1 00:00:00 1970
***************
*** 1,97 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -fsplit-paths -fdump-tree-split-paths-details -w" } */
- 
- typedef struct bitmap_head_def *bitmap;
- extern void vec_assert_fail (const char *, const char *, const char *file_,
- 			     unsigned line_, const char *function_)
-   __attribute__ ((__noreturn__));
- typedef struct VEC_int_base
- {
-   unsigned num;
-   unsigned alloc;
-   int vec[1];
- }
- VEC_int_base;
- static __inline__ int
- VEC_int_base_space (VEC_int_base * vec_, int alloc_, const char *file_,
- 		    unsigned line_, const char *function_)
- {
-   return vec_ ? vec_->alloc - vec_->num >= (unsigned) alloc_ : !alloc_;
- }
- 
- static __inline__ int *
- VEC_int_base_quick_push (VEC_int_base * vec_, int obj_, const char *file_,
- 			 unsigned line_, const char *function_)
- {
-   (void) ((vec_->num <
- 	   vec_->alloc) ? 0 : (vec_assert_fail ("push", "VEC(int,base)",
- 						file_, line_, function_), 0));
- }
- 
- typedef struct VEC_int_heap
- {
-   VEC_int_base base;
- }
- VEC_int_heap;
- void *vec_heap_o_reserve (VEC_int_heap *, int, __SIZE_TYPE__, __SIZE_TYPE__);
- int VEC_int_base_length (VEC_int_base *);
- static __inline__ int
- VEC_int_heap_reserve (VEC_int_heap ** vec_, int alloc_, const char *file_,
- 		      unsigned line_, const char *function_)
- {
-   int extend =
-     !VEC_int_base_space (((*vec_) ? &(*vec_)->base : 0), alloc_, file_, line_,
- 			 function_);
-   if (extend)
-     *vec_ =
-       (VEC_int_heap *) vec_heap_o_reserve (*vec_, alloc_,
- 					   __builtin_offsetof (VEC_int_heap,
- 							       base.vec),
- 					   sizeof (int));
- }
- 
- static __inline__ int *
- VEC_int_heap_safe_push (VEC_int_heap ** vec_, const int obj_,
- 			const char *file_, unsigned line_,
- 			const char *function_)
- {
-   VEC_int_heap_reserve (vec_, 1, file_, line_, function_);
-   return VEC_int_base_quick_push (((*vec_) ? &(*vec_)->base : 0), obj_, file_,
- 				  line_, function_);
- };
- 
- typedef struct bitmap_head_def
- {
- }
- bitmap_head;
- typedef struct
- {
- }
- bitmap_iterator;
- int bmp_iter_and_compl_init (bitmap_iterator *, bitmap_head *, bitmap, int,
- 			     int *);
- int bmp_iter_and_compl (bitmap_iterator *, int *);
- void bmp_iter_next (bitmap_iterator *, int *);
- void VEC_int_heap_free (VEC_int_heap **);
- bitmap
- compute_idf (bitmap_head * dfs)
- {
-   bitmap_iterator bi;
-   unsigned bb_index, i;
-   VEC_int_heap *work_stack;
-   bitmap phi_insertion_points;
-   while ((VEC_int_base_length (((work_stack) ? &(work_stack)->base : 0))) > 0)
-     {
-       for (bmp_iter_and_compl_init
- 	   (&(bi), (&dfs[bb_index]), (phi_insertion_points), (0), &(i));
- 	   bmp_iter_and_compl (&(bi), &(i)); bmp_iter_next (&(bi), &(i)))
- 	{
- 	  (VEC_int_heap_safe_push
- 	   (&(work_stack), i, "/home/gcc/virgin-gcc/gcc/cfganal.c", 1349,
- 	    __FUNCTION__));
- 	}
-     }
-   (VEC_int_heap_free (&work_stack));
- }
- 
- /* { dg-final { scan-tree-dump-not "Duplicating join block" "split-paths" } } */
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.dg/tree-ssa/split-path-4.c gcc-17-20260712/gcc/testsuite/gcc.dg/tree-ssa/split-path-4.c
*** gcc-17-20260705/gcc/testsuite/gcc.dg/tree-ssa/split-path-4.c	Sun Jul  5 22:32:13 2026
--- gcc-17-20260712/gcc/testsuite/gcc.dg/tree-ssa/split-path-4.c	Thu Jan  1 00:00:00 1970
***************
*** 1,29 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -fsplit-paths -fdump-tree-split-paths-details -w -fdisable-tree-thread1 -fdisable-tree-thread2" } */
- 
- /* Note: Threader causes the infinite loop in val & 1 sooner.  */
- 
- unsigned long powi_lookup_cost (unsigned long, unsigned char *);
- 
- void
- powi_cost (long n)
- {
-   unsigned char cache[256];
-   unsigned long digit;
-   unsigned long val;
-   int result;
-   while (val >= 256)
-     {
-       if (val & 1)
- 	{
- 	  result += powi_lookup_cost (digit, cache) + 3 + 1;
- 	}
-       else
- 	{
- 	  val >>= 1;
- 	}
-     }
- }
- 
- /* { dg-final { scan-tree-dump-times "Duplicating join block" 1 "split-paths" } } */
- 
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.dg/tree-ssa/split-path-5.c gcc-17-20260712/gcc/testsuite/gcc.dg/tree-ssa/split-path-5.c
*** gcc-17-20260705/gcc/testsuite/gcc.dg/tree-ssa/split-path-5.c	Sun Jul  5 22:32:13 2026
--- gcc-17-20260712/gcc/testsuite/gcc.dg/tree-ssa/split-path-5.c	Thu Jan  1 00:00:00 1970
***************
*** 1,44 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -fsplit-paths -fdump-tree-split-paths-details -w" } */
- 
- const extern signed char *__ctype_ptr__;
- typedef unsigned char uchar;
- static int patlen;
- static int skip[(0x7f * 2 + 1) + 1];
- static uchar *pat = ((void *) 0);
- void
- bmhi_init (const signed char *pattern)
- {
-   int i, lastpatchar;
-   patlen = __builtin_strlen (pattern);
-   for (i = 0; i < patlen; i++)
-     pat[i] = (
- 	       {
- 	       __typeof__ (pattern[i]) __x = (pattern[i]);
- 	       ((((__ctype_ptr__ +
- 		   sizeof (""[__x]))[(int) (__x)]) & (01 | 02))
- 		== 02) ? (int) __x - 'a' + 'A' : (int) __x;
- 	       });
-   for (i = 0; i < patlen - 1; ++i)
-     {
-       skip[(
- 	     {
- 	     __typeof__ (pat[i]) __x = (pat[i]);
- 	     ((((__ctype_ptr__ +
- 		 sizeof (""[__x]))[(int) (__x)]) & (01 | 02)) ==
- 	      01) ? (int) __x - 'A' + 'a' : (int) __x;
- 	     })] = patlen - i - 1;
-     }
-   skip[(
- 	 {
- 	 __typeof__ (lastpatchar) __x = (lastpatchar);
- 	 ((((__ctype_ptr__ +
- 	     sizeof (""[__x]))[(int) (__x)]) & (01 | 02)) ==
- 	  01) ? (int) __x - 'A' + 'a' : (int) __x;
- 	 })] = 32767;
-   for (i = 0; i < patlen - 1; ++i)
-     {
-     }
- }
- 
- /* { dg-final { scan-tree-dump-times "join point for if-convertible" 1 "split-paths" } } */
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.dg/tree-ssa/split-path-6.c gcc-17-20260712/gcc/testsuite/gcc.dg/tree-ssa/split-path-6.c
*** gcc-17-20260705/gcc/testsuite/gcc.dg/tree-ssa/split-path-6.c	Sun Jul  5 22:32:13 2026
--- gcc-17-20260712/gcc/testsuite/gcc.dg/tree-ssa/split-path-6.c	Thu Jan  1 00:00:00 1970
***************
*** 1,78 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -fsplit-paths -fno-tree-cselim -fno-ssa-phiopt -fdump-tree-split-paths-details -fno-finite-loops -fno-tree-dominator-opts -fno-tree-vrp -w" } */
- 
- struct __sFILE
- {
-   unsigned char *_p;
-   int _r;
- };
- typedef struct __sFILE __FILE;
- struct _reent
- {
-   __FILE *_stdin, *_stdout, *_stderr;
- };
- extern struct _reent *_impure_ptr;
- extern char contextbufs[10][1024];
- extern int contextoffset;
- extern int sflag;
- int strtosichar (char *, int);
- int ichartosstr (int, int);
- void treeinsert (int, int, int);
- void stop(void);
- int __srget_r (struct _reent *, __FILE *);
- void
- givehelp (int interactive)
- {
-   if (interactive)
-     {
-       while ((--((_impure_ptr->_stdin))->_r <
- 	      0 ? __srget_r (_impure_ptr,
- 			     (_impure_ptr->
- 			      _stdin)) : (int) (*((_impure_ptr->_stdin))->
- 						_p++)) != ' ');
-     }
- }
- 
- void
- oof (void)
- {
-   int bufsize;
-   int hadnl;
-   while (1)
-     {
-       if (bufsize == (sizeof contextbufs[0]) / 2 - 1)
- 	{
- 	  if (contextbufs[0][0] == '*' || contextbufs[0][0] == '@')
- 	    treeinsert (ichartosstr (strtosichar (contextbufs[0] + 1, 0), 1),
- 			(100 + 4 * 20 + 4), contextbufs[0][0] == '*');
- 	}
-       if (hadnl)
- 	contextoffset = 0;
-       else
- 	contextoffset += bufsize;
-       if (sflag)
- 	{
- 	  stop ();
- 	}
-     }
- }
- 
- 
- /* lookharder becomes an ifcvt'd/cmov. */
- void
- lookharder (char *string)
- {
-   register char *g;
-   register char *s;
-   for (s = string; *s != '\0'; s++)
-     {
-       if (*s == '*')
- 	{
- 	  *g++ = '.';
- 	}
-       else
- 	*g++ = *s;
-     }
- }
- 
- /* { dg-final { scan-tree-dump-times "Duplicating join block" 2 "split-paths" } } */
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.dg/tree-ssa/split-path-7.c gcc-17-20260712/gcc/testsuite/gcc.dg/tree-ssa/split-path-7.c
*** gcc-17-20260705/gcc/testsuite/gcc.dg/tree-ssa/split-path-7.c	Sun Jul  5 22:32:13 2026
--- gcc-17-20260712/gcc/testsuite/gcc.dg/tree-ssa/split-path-7.c	Thu Jan  1 00:00:00 1970
***************
*** 1,94 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -fsplit-paths -fno-tree-cselim -fno-ssa-phiopt -fno-tree-sink -fdump-tree-split-paths-details -w" } */
- 
- 
- struct _reent
- {
- };
- typedef unsigned char ichar_t;
- struct dent
- {
-   char *word;
- };
- struct flagent
- {
-   ichar_t *strip;
-   ichar_t *affix;
-   short stripl;
-   short affl;
- };
- union ptr_union
- {
-   struct flagptr *fp;
-   struct flagent *ent;
- };
- struct flagptr
- {
-   union ptr_union pu;
-   int numents;
- };
- struct hashheader
- {
- };
- extern struct dent *hashtbl;
- extern char *hashstrings;
- extern int hashsize;
- extern int nodictflag;
- extern int numsflags;
- extern int numpflags;
- extern struct flagent *pflaglist;
- extern struct flagent *sflaglist;
- int
- linit ()
- {
-   register int i;
-   register struct dent *dp;
-   struct flagent *entry;
-   struct flagptr *ind;
-   int viazero;
-   register ichar_t *cp;
-   if (!nodictflag)
-     {
-       for (i = hashsize, dp = hashtbl; --i >= 0; dp++)
- 	{
- 	  if (dp->word == (char *) -1)
- 	    dp->word = ((void *) 0);
- 	  else
- 	    dp->word = &hashstrings[(int) (dp->word)];
- 	}
-     }
-   for (i = numsflags + numpflags, entry = sflaglist; --i >= 0; entry++)
-     {
-       if (entry->stripl)
- 	entry->strip = (ichar_t *) & hashstrings[(int) entry->strip];
-       else
- 	entry->affix = ((void *) 0);
-     }
-   for (i = numsflags, entry = sflaglist; i > 0; i--, entry++)
-     {
-       if (entry->affl == 0)
- 	{
- 	  if (ind->pu.fp == ((void *) 0))
- 	    {
- 	    }
- 	}
-     }
-   for (i = numpflags, entry = pflaglist; i > 0; i--, entry++)
-     {
-       if (entry->affl == 0)
- 	{
- 	  while (ind->numents == 0 && ind->pu.fp != ((void *) 0))
- 	    {
- 	      if (*cp == 0)
- 		{
- 		}
- 	    }
- 	}
-       if (!viazero && ind->numents >= 4
- 	  && __builtin_strcmp ((char *) (entry->affix),
- 			       (char *) (ind->pu.ent->affix)) != 0)
- 	{
- 	}
-     }
- }
- /* { dg-final { scan-tree-dump-times "Duplicating join block" 0 "split-paths" } } */
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.dg/tree-ssa/split-path-8.c gcc-17-20260712/gcc/testsuite/gcc.dg/tree-ssa/split-path-8.c
*** gcc-17-20260705/gcc/testsuite/gcc.dg/tree-ssa/split-path-8.c	Sun Jul  5 22:32:13 2026
--- gcc-17-20260712/gcc/testsuite/gcc.dg/tree-ssa/split-path-8.c	Thu Jan  1 00:00:00 1970
***************
*** 1,14 ****
- /* PR77283 */
- /* { dg-do compile } */
- /* { dg-options "-O3 -fdump-tree-split-paths-details" } */
- 
- void
- foo (double *x, double *a, double *b, long n, double limit)
- {
-   long i;
-   for (i=0; i < n; i++)
-     if (a[i] < limit)
-       x[i] = b[i];
- }
- 
- /* { dg-final { scan-tree-dump-times "Duplicating join block" 0 "split-paths" } } */
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.dg/tree-ssa/split-path-9.c gcc-17-20260712/gcc/testsuite/gcc.dg/tree-ssa/split-path-9.c
*** gcc-17-20260705/gcc/testsuite/gcc.dg/tree-ssa/split-path-9.c	Sun Jul  5 22:32:13 2026
--- gcc-17-20260712/gcc/testsuite/gcc.dg/tree-ssa/split-path-9.c	Thu Jan  1 00:00:00 1970
***************
*** 1,17 ****
- /* PR77366 */
- /* { dg-do compile } */
- /* { dg-options "-O3 -fdump-tree-split-paths-details" } */
- 
- void
- foo(unsigned int size, unsigned int *state)
- {
-   unsigned int i;
- 
-   for(i = 0; i < size; i++)
-     {
-       if(state[i] & 1)
- 	state[i] ^= 1;
-     }
- }
- 
- /* { dg-final { scan-tree-dump-times "Duplicating join block" 0 "split-paths" } } */
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.dg/vect/vect-111.c gcc-17-20260712/gcc/testsuite/gcc.dg/vect/vect-111.c
*** gcc-17-20260705/gcc/testsuite/gcc.dg/vect/vect-111.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.dg/vect/vect-111.c	Sun Jul 12 22:32:14 2026
***************
*** 0 ****
--- 1,40 ----
+ /* { dg-require-effective-target vect_float } */
+ /* { dg-additional-options "-ftrapping-math" } */
+ 
+ #include <stdarg.h>
+ #include "tree-vect.h"
+ 
+ #define N 16
+ 
+ float b[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
+ 
+ __attribute__ ((noinline)) int
+ main1 (void)
+ {
+   int i;
+   float a[N];
+ 
+   /* Condition in loop.  */
+   /* This loop is vectorized on platforms that support vect_condition.  */
+   for (i = 0; i < N; i++)
+   {
+     a[i] = (b[i] > 0 ? b[i] : 0);
+   }
+ 
+ #pragma GCC novector
+   for (i = 0; i < N; i++)
+   {
+     if (a[i] != b[i])
+ 	abort ();
+   }
+   return 0;
+ }
+ 
+ int main (void)
+ {
+   check_vect ();
+   return main1 ();
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target powerpc*-*-* } } } */
+ /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target i?86-*-* x86_64-*-* ia64-*-* } } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.dg/vect/vect-alias-check-4.c gcc-17-20260712/gcc/testsuite/gcc.dg/vect/vect-alias-check-4.c
*** gcc-17-20260705/gcc/testsuite/gcc.dg/vect/vect-alias-check-4.c	Sun Jul  5 22:32:13 2026
--- gcc-17-20260712/gcc/testsuite/gcc.dg/vect/vect-alias-check-4.c	Sun Jul 12 22:32:14 2026
***************
*** 1,6 ****
--- 1,7 ----
  /* { dg-do compile } */
  /* { dg-require-effective-target vect_int } */
  /* { dg-additional-options "--param vect-max-version-for-alias-checks=0 -fopt-info-vec-all" } */
+ /* { dg-additional-options "-fno-unroll-loops" { target riscv*-*-* } } */
  
  #define N 16
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.dg/vect/vect-ifcvt-11a.c gcc-17-20260712/gcc/testsuite/gcc.dg/vect/vect-ifcvt-11a.c
*** gcc-17-20260705/gcc/testsuite/gcc.dg/vect/vect-ifcvt-11a.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.dg/vect/vect-ifcvt-11a.c	Sun Jul 12 22:32:14 2026
***************
*** 0 ****
--- 1,34 ----
+ /* { dg-require-effective-target vect_condition } */
+ /* { dg-require-effective-target vect_float } */
+ /* { dg-additional-options "-fno-trapping-math" } */
+ 
+ #include <stdarg.h>
+ #include "tree-vect.h"
+ 
+ #define N 16
+ #define MAX 42
+ 
+ float A[N] = {36,39,42,45,43,32,21,12,23,34,45,56,67,78,89,11};
+ float B[N] = {0,0,42,42,42,0,0,0,0,0,42,42,42,42,42,0};
+ 
+ extern void abort(void); 
+ 
+ int main ()
+ {  
+   int i, j;
+ 
+   check_vect ();
+ 
+   for (i = 0; i < 16; i++)
+     A[i] = ( A[i] >= MAX ? MAX : 0); 
+ 
+   /* check results:  */
+ #pragma GCC novector
+   for (i = 0; i < N; i++)
+     if (A[i] != B[i])
+       abort ();
+ 
+   return 0;
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.dg/vect/vect-ifcvt-12.c gcc-17-20260712/gcc/testsuite/gcc.dg/vect/vect-ifcvt-12.c
*** gcc-17-20260705/gcc/testsuite/gcc.dg/vect/vect-ifcvt-12.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.dg/vect/vect-ifcvt-12.c	Sun Jul 12 22:32:14 2026
***************
*** 0 ****
--- 1,33 ----
+ /* { dg-require-effective-target vect_condition } */
+ /* { dg-require-effective-target vect_float } */
+ /* { dg-additional-options "-ftrapping-math" } */
+ 
+ #include <stdarg.h>
+ #include "tree-vect.h"
+ 
+ #define N 16
+ #define MAX 42
+ 
+ float A[N] = {36,39,42,45,43,32,21,12,23,34,45,56,67,78,89,11};
+ float B[N] = {0,0,0,42,42,0,0,0,0,0,42,42,42,42,42,0};
+ 
+ extern void abort(void); 
+ 
+ int main ()
+ {  
+   int i, j;
+ 
+   check_vect ();
+   for (i = 0; i < 16; i++)
+     A[i] = ( A[i] > MAX ? MAX : 0); 
+ 
+   /* check results:  */
+ #pragma GCC novector
+   for (i = 0; i < N; i++)
+     if (A[i] != B[i])
+       abort ();
+ 
+   return 0;
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.dg/vect/vect-ifcvt-13.c gcc-17-20260712/gcc/testsuite/gcc.dg/vect/vect-ifcvt-13.c
*** gcc-17-20260705/gcc/testsuite/gcc.dg/vect/vect-ifcvt-13.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.dg/vect/vect-ifcvt-13.c	Sun Jul 12 22:32:14 2026
***************
*** 0 ****
--- 1,34 ----
+ /* { dg-require-effective-target vect_condition } */
+ /* { dg-require-effective-target vect_float } */
+ /* { dg-additional-options "-ftrapping-math" } */
+ 
+ #include <stdarg.h>
+ #include "tree-vect.h"
+ 
+ #define N 16
+ #define MAX 42
+ 
+ float A[N] = {36,39,42,45,43,32,21,12,23,34,45,56,67,78,89,11};
+ float B[N] = {42,42,42,0,0,42,42,42,42,42,0,0,0,0,0,42};
+ 
+ extern void abort(void); 
+ 
+ int main ()
+ {  
+   int i, j;
+ 
+   check_vect ();
+ 
+   for (i = 0; i < 16; i++)
+     A[i] = ( A[i] <= MAX ? MAX : 0); 
+ 
+   /* check results:  */
+ #pragma GCC novector
+   for (i = 0; i < N; i++)
+     if (A[i] != B[i])
+       abort ();
+ 
+   return 0;
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.dg/vect/vect-ifcvt-14.c gcc-17-20260712/gcc/testsuite/gcc.dg/vect/vect-ifcvt-14.c
*** gcc-17-20260705/gcc/testsuite/gcc.dg/vect/vect-ifcvt-14.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.dg/vect/vect-ifcvt-14.c	Sun Jul 12 22:32:14 2026
***************
*** 0 ****
--- 1,34 ----
+ /* { dg-require-effective-target vect_condition } */
+ /* { dg-require-effective-target vect_float } */
+ /* { dg-additional-options "-ftrapping-math" } */
+ 
+ #include <stdarg.h>
+ #include "tree-vect.h"
+ 
+ #define N 16
+ #define MAX 42
+ 
+ float A[N] = {36,39,42,45,43,32,21,12,23,34,45,56,67,78,89,11};
+ float B[N] = {42,42,42,0,0,42,42,42,42,42,0,0,0,0,0,42};
+ 
+ extern void abort(void); 
+ 
+ int main ()
+ {  
+   int i, j;
+ 
+   check_vect ();
+ 
+   for (i = 0; i < 16; i++)
+     A[i] = ( A[i] <= MAX ? MAX : 0); 
+ 
+   /* check results:  */
+ #pragma GCC novector
+   for (i = 0; i < N; i++)
+     if (A[i] != B[i])
+       abort ();
+ 
+   return 0;
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.dg/vect/vect-ifcvt-15.c gcc-17-20260712/gcc/testsuite/gcc.dg/vect/vect-ifcvt-15.c
*** gcc-17-20260705/gcc/testsuite/gcc.dg/vect/vect-ifcvt-15.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.dg/vect/vect-ifcvt-15.c	Sun Jul 12 22:32:14 2026
***************
*** 0 ****
--- 1,34 ----
+ /* { dg-require-effective-target vect_condition } */
+ /* { dg-require-effective-target vect_float } */
+ /* { dg-additional-options "-ftrapping-math" } */
+ 
+ #include <stdarg.h>
+ #include "tree-vect.h"
+ 
+ #define N 16
+ #define MAX 42
+ 
+ float A[N] = {36,39,42,45,43,32,21,12,23,34,45,56,67,78,89,11};
+ float B[N] = {42,42,0,0,0,42,42,42,42,42,0,0,0,0,0,42};
+ 
+ extern void abort(void); 
+ 
+ int main ()
+ {  
+   int i, j;
+ 
+   check_vect ();
+ 
+   for (i = 0; i < 16; i++)
+     A[i] = ( A[i] < MAX ? MAX : 0); 
+ 
+   /* check results:  */
+ #pragma GCC novector
+   for (i = 0; i < N; i++)
+     if (A[i] != B[i])
+       abort ();
+ 
+   return 0;
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.dg/vect/vect-pr126159-1.c gcc-17-20260712/gcc/testsuite/gcc.dg/vect/vect-pr126159-1.c
*** gcc-17-20260705/gcc/testsuite/gcc.dg/vect/vect-pr126159-1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.dg/vect/vect-pr126159-1.c	Sun Jul 12 22:32:14 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do compile } */
+ 
+ typedef union { int i; float f; } RtreeCoord;
+ #define MIN(a,b) ((a)<(b)?(a):(b))
+ #define MAX(a,b) ((a)>(b)?(a):(b))
+ 
+ void cellUnion_f(RtreeCoord *a1, RtreeCoord *a2, int n) {
+   int ii = 0;
+   do {
+     a1[ii].f   = MIN(a1[ii].f,   a2[ii].f);
+     a1[ii+1].f = MAX(a1[ii+1].f, a2[ii+1].f);
+     ii += 2;
+   } while (ii < n);
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 1 "vect" { target { vect_float } } } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.dg/vect/vect-pr126159-2.c gcc-17-20260712/gcc/testsuite/gcc.dg/vect/vect-pr126159-2.c
*** gcc-17-20260705/gcc/testsuite/gcc.dg/vect/vect-pr126159-2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.dg/vect/vect-pr126159-2.c	Sun Jul 12 22:32:14 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do compile } */
+ 
+ typedef union { int i; float f; } RtreeCoord;
+ #define MIN(a,b) ((a)<(b)?(a):(b))
+ #define MAX(a,b) ((a)>(b)?(a):(b))
+ 
+ void cellUnion_i(RtreeCoord *a1, RtreeCoord *a2, int n) {
+   int ii = 0;
+   do {
+     a1[ii].i   = MIN(a1[ii].i,   a2[ii].i);
+     a1[ii+1].i = MAX(a1[ii+1].i, a2[ii+1].i);
+     ii += 2;
+   } while (ii < n);
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 1 "vect" { target { vect_int && { ! vect_no_int_min_max } } } } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.dg/vla-1.c gcc-17-20260712/gcc/testsuite/gcc.dg/vla-1.c
*** gcc-17-20260705/gcc/testsuite/gcc.dg/vla-1.c	Sun Jul  5 22:32:13 2026
--- gcc-17-20260712/gcc/testsuite/gcc.dg/vla-1.c	Sun Jul 12 22:32:14 2026
***************
*** 1,7 ****
  /* { dg-do compile } */
  /* { dg-options "-g -O3 -fdump-tree-optimized -fvar-tracking-assignments -fno-selective-scheduling -fno-selective-scheduling2 -fno-ipa-vrp --param ipa-cp-eval-threshold=1" } */
  
! int __attribute__((noinline))
  f1 (int i)
  {
    char a[i + 1];
--- 1,7 ----
  /* { dg-do compile } */
  /* { dg-options "-g -O3 -fdump-tree-optimized -fvar-tracking-assignments -fno-selective-scheduling -fno-selective-scheduling2 -fno-ipa-vrp --param ipa-cp-eval-threshold=1" } */
  
! static int __attribute__((noinline))
  f1 (int i)
  {
    char a[i + 1];
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.misc-tests/linkage.exp gcc-17-20260712/gcc/testsuite/gcc.misc-tests/linkage.exp
*** gcc-17-20260705/gcc/testsuite/gcc.misc-tests/linkage.exp	Sun Jul  5 22:32:13 2026
--- gcc-17-20260712/gcc/testsuite/gcc.misc-tests/linkage.exp	Sun Jul 12 22:32:14 2026
*************** if { [isnative] && ![is_remote host] } t
*** 61,75 ****
  	    if [ string match "*64*" $file_string ] {
  		set native_cflags "-xarch=amd64"
  	    }
- 	}
- 	if [istarget "s390*-*-linux*"] {
- 	    set file_string [exec file "linkage-x.o"]
- 	    if [ string match "*32-bit*" $file_string ] {
- 		set native_cflags "-m31"
- 	    }
- 	    if [ string match "*64-bit*" $file_string ] {
- 		set native_cflags "-m64"
- 	    }
  	} elseif {[istarget "i?86-*-linux*"] || [istarget "x86_64-*-linux*"]
  		  || [istarget "i?86-*-gnu*"] || [istarget "x86_64-*-gnu*"] } then {
  	    set file_string [exec file "linkage-x.o"]
--- 61,66 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.src/maintainers.exp gcc-17-20260712/gcc/testsuite/gcc.src/maintainers.exp
*** gcc-17-20260705/gcc/testsuite/gcc.src/maintainers.exp	Sun Jul  5 22:32:13 2026
--- gcc-17-20260712/gcc/testsuite/gcc.src/maintainers.exp	Sun Jul 12 22:32:14 2026
***************
*** 17,47 ****
  load_lib "target-supports.exp"
  
  proc gcc_src_run_maintainers_verify_sh {} {
!     set script check-MAINTAINERS.py
  
      global srcdir
      set rootdir $srcdir/../..
      set contrib $rootdir/contrib
      set maintainers $rootdir/MAINTAINERS
  
      if { ![check_effective_target_recent_python3] } {
        unsupported "$script recent python3 is missing"
        return
      }
  
!     if { ![check_effective_target_python3_module "unidecode"] } {
!       unsupported "$script 'unidecode' python3 module is missing"
!       return
      }
  
! 
!     set result [remote_exec host $contrib/$script $maintainers]
      set status [lindex $result 0]
      if { $status == 0 } then {
! 	pass "$script"
      } else {
  	send_log "$result\n"
! 	fail "$script"
      }
  }
  
--- 17,60 ----
  load_lib "target-supports.exp"
  
  proc gcc_src_run_maintainers_verify_sh {} {
!     set script gen-MAINTAINERS.py
  
      global srcdir
      set rootdir $srcdir/../..
      set contrib $rootdir/contrib
      set maintainers $rootdir/MAINTAINERS
+     set maintainers_yml $rootdir/MAINTAINERS.yml
  
      if { ![check_effective_target_recent_python3] } {
        unsupported "$script recent python3 is missing"
        return
      }
  
!     foreach pylib {"unidecode" "jsonschema" "yaml"} {
! 	if { ![check_effective_target_python3_module $pylib] } {
! 	    unsupported "$script '$pylib' python3 module is missing"
! 	    return
! 	}
      }
  
!     # This will generate a new copy of the MAINTAINERS data from the
!     # YAML data after performing some sanity checks on the input.  There
!     # are two failure modes to consider - the YAML is invalid and the
!     # generated result does not match the expected MAINTAINERS file.
!     set result [remote_exec host $contrib/$script "-o MAINTAINERS.tst $maintainers_yml"]
      set status [lindex $result 0]
      if { $status == 0 } then {
! 	set result [remote_exec host "diff" "-u $maintainers MAINTAINERS.tst"]
! 	set status [lindex $result 0]
! 	if { $status == 0 } then {
! 	    pass "$script"
! 	} else {
! 	    send_log "$result\n"
! 	    fail "$script: $maintainers not updated correctly"
! 	}
      } else {
  	send_log "$result\n"
! 	fail "$script: generate failed"
      }
  }
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/add_abs.c gcc-17-20260712/gcc/testsuite/gcc.target/aarch64/add_abs.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/add_abs.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/aarch64/add_abs.c	Sun Jul 12 22:32:14 2026
***************
*** 0 ****
--- 1,129 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-O2 -fno-schedule-insns -fno-schedule-insns2" } */
+ /* { dg-final { check-function-bodies "**" "" {} } } */
+ #include <arm_neon.h>
+ 
+ /*
+ ** add_abs_q_s32:
+ **	movi	v[0-9]+.4s, 0
+ **	saba	v0.4s, v1.4s, v[0-9]+.4s
+ **	ret
+ */
+ int32x4_t add_abs_q_s32 (int32x4_t a, int32x4_t b) {
+   return vaddq_s32( a, vabsq_s32( b ) );
+ }
+ 
+ /*
+ ** add_abs_q_s16:
+ **	movi	v[0-9]+.4s, 0
+ **	saba	v0.8h, v1.8h, v[0-9]+.8h
+ **	ret
+ */
+ int16x8_t add_abs_q_s16 (int16x8_t a, int16x8_t b) {
+   return vaddq_s16( a, vabsq_s16( b ) );
+ }
+ 
+ /*
+ ** add_abs_q_s8:
+ **	movi	v[0-9]+.4s, 0
+ **	saba	v0.16b, v1.16b, v[0-9]+.16b
+ **	ret
+ */
+ int8x16_t add_abs_q_s8 (int8x16_t a, int8x16_t b) {
+   return vaddq_s8( a, vabsq_s8( b ) );
+ }
+ 
+ /*
+ ** add_abs_s32:
+ **	movi	v[0-9]+.4s, 0
+ **	saba	v0.2s, v1.2s, v[0-9]+.2s
+ **	ret
+ */
+ int32x2_t add_abs_s32 (int32x2_t a, int32x2_t b) {
+   return vadd_s32( a, vabs_s32( b ) );
+ }
+ 
+ /*
+ ** add_abs_s16:
+ **	movi	v[0-9]+.4s, 0
+ **	saba	v0.4h, v1.4h, v[0-9]+.4h
+ **	ret
+ */
+ int16x4_t add_abs_s16 (int16x4_t a, int16x4_t b) {
+   return vadd_s16( a, vabs_s16( b ) );
+ }
+ 
+ /*
+ ** add_abs_s8:
+ **	movi	v[0-9]+.4s, 0
+ **	saba	v0.8b, v1.8b, v[0-9]+.8b
+ **	ret
+ */
+ int8x8_t add_abs_s8 (int8x8_t a, int8x8_t b) {
+   return vadd_s8( a, vabs_s8( b ) );
+ }
+ /*
+ ** abs_add_q_s32:
+ **	movi	v[0-9]+.4s, 0
+ **	saba	v1.4s, v0.4s, v[0-9]+.4s
+ **	mov	v0.16b, v1.16b
+ **	ret
+ */
+ int32x4_t abs_add_q_s32 (int32x4_t a, int32x4_t b) {
+   return vaddq_s32( b, vabsq_s32( a ) );
+ }
+ 
+ /*
+ ** abs_add_q_s16:
+ **	movi	v[0-9]+.4s, 0
+ **	saba	v1.8h, v0.8h, v[0-9]+.8h
+ **	mov	v0.16b, v1.16b
+ **	ret
+ */
+ int16x8_t abs_add_q_s16 (int16x8_t a, int16x8_t b) {
+   return vaddq_s16( b, vabsq_s16( a ) );
+ }
+ 
+ /*
+ ** abs_add_q_s8:
+ **	movi	v[0-9]+.4s, 0
+ **	saba	v1.16b, v0.16b, v[0-9]+.16b
+ **	mov	v0.16b, v1.16b
+ **	ret
+ */
+ int8x16_t abs_add_q_s8 (int8x16_t a, int8x16_t b) {
+   return vaddq_s8( b, vabsq_s8( a ) );
+ }
+ 
+ /*
+ ** abs_add_s32:
+ **	movi	v[0-9]+.4s, 0
+ **	saba	v1.2s, v0.2s, v[0-9]+.2s
+ **	mov	v0.8b, v1.8b
+ **	ret
+ */
+ int32x2_t abs_add_s32 (int32x2_t a, int32x2_t b) {
+   return vadd_s32( b, vabs_s32( a ) );
+ }
+ 
+ /*
+ ** abs_add_s16:
+ **	movi	v[0-9]+.4s, 0
+ **	saba	v1.4h, v0.4h, v[0-9]+.4h
+ **	mov	v0.8b, v1.8b
+ **	ret
+ */
+ int16x4_t abs_add_s16 (int16x4_t a, int16x4_t b) {
+   return vadd_s16( b, vabs_s16( a ) );
+ }
+ 
+ /*
+ ** abs_add_s8:
+ **	movi	v[0-9]+.4s, 0
+ **	saba	v1.8b, v0.8b, v[0-9]+.8b
+ **	mov	v0.8b, v1.8b
+ **	ret
+ */
+ int8x8_t abs_add_s8 (int8x8_t a, int8x8_t b) {
+   return vadd_s8( b, vabs_s8( a ) );
+ }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcopy_lane_indices.c gcc-17-20260712/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcopy_lane_indices.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcopy_lane_indices.c	Sun Jul  5 22:32:13 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcopy_lane_indices.c	Sun Jul 12 22:32:14 2026
***************
*** 1,4 ****
! /* { dg-do assemble } */
  
  #include <arm_neon.h>
  
--- 1,4 ----
! /* { dg-do compile { target { aarch64-*-* } } } */
  
  #include <arm_neon.h>
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/ampere1-reduction-unroll-1.c gcc-17-20260712/gcc/testsuite/gcc.target/aarch64/ampere1-reduction-unroll-1.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/ampere1-reduction-unroll-1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/aarch64/ampere1-reduction-unroll-1.c	Sun Jul 12 22:32:14 2026
***************
*** 0 ****
--- 1,18 ----
+ /* { dg-do compile } */
+ /* { dg-options "-Ofast -mcpu=ampere1" } */
+ 
+ /* With issue_info populated for the ampere1 family,
+    determine_suggested_unroll_factor picks 4 for a unit-stride FP dot
+    product, so the inner reduction emits four independent `fmla v.4s'
+    accumulator chains.  */
+ 
+ float
+ dot (const float *a, const float *b, int n)
+ {
+   float s = 0.0f;
+   for (int i = 0; i < n; i++)
+     s += a[i] * b[i];
+   return s;
+ }
+ 
+ /* { dg-final { scan-assembler-times {\tfmla\tv[0-9]+\.4s} 4 } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/fold-mem-offsets.c gcc-17-20260712/gcc/testsuite/gcc.target/aarch64/fold-mem-offsets.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/fold-mem-offsets.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/aarch64/fold-mem-offsets.c	Sun Jul 12 22:32:14 2026
***************
*** 0 ****
--- 1,19 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -ffold-mem-offsets" } */
+ 
+ struct a {
+   struct a *b;
+   int *d;
+   int c;
+   long ad[];
+ } e, g;
+ 
+ int f;
+ long h;
+ void i() {
+   h = g.ad[f] & e.ad[f];
+ }
+ 
+ /* Check for updated memory offsets.  */
+ /* { dg-final { scan-assembler "ldr\t.*, \[.*, 64\]" } } */
+ /* { dg-final { scan-assembler "ldr\t.*, \[.*, 40\]" } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/pr124146-2.c gcc-17-20260712/gcc/testsuite/gcc.target/aarch64/pr124146-2.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/pr124146-2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/aarch64/pr124146-2.c	Sun Jul 12 22:32:14 2026
***************
*** 0 ****
--- 1,38 ----
+ /* PR target/124146 */
+ /* { dg-do compile } */
+ /* { dg-options "-O2" } */
+ 
+ /* A type that combines an alignment attribute with an attribute that affects
+    type identity (may_alias) is its own TYPE_MAIN_VARIANT and keeps
+    TYPE_USER_ALIGN set.  aarch64_function_arg_alignment used to assert that
+    the main variant had no user alignment, which ICEd for such types.  Verify
+    that a wide range of them can be passed (alone and after another argument,
+    over-aligned and under-aligned) and returned without an ICE.  */
+ 
+ typedef int v4si __attribute__((__vector_size__ (16)));
+ 
+ #define TEST(BASE, SUF)							\
+   typedef __attribute__((__aligned__, __may_alias__)) BASE big_##SUF;	\
+   typedef __attribute__((__aligned__ (8), __may_alias__)) BASE al8_##SUF; \
+   void gbig_##SUF (big_##SUF);						\
+   void hbig_##SUF (int, big_##SUF);					\
+   void gal8_##SUF (al8_##SUF);						\
+   void hal8_##SUF (int, al8_##SUF);					\
+   void call_##SUF (big_##SUF a, al8_##SUF b)				\
+   {									\
+     gbig_##SUF (a);							\
+     hbig_##SUF (1, a);							\
+     gal8_##SUF (b);							\
+     hal8_##SUF (1, b);							\
+   }									\
+   big_##SUF ret_##SUF (big_##SUF a) { return a; }
+ 
+ TEST (unsigned char, uc)
+ TEST (unsigned short, us)
+ TEST (unsigned int, ui)
+ TEST (unsigned long, ul)
+ TEST (long long, ll)
+ TEST (__int128, i128)
+ TEST (float, f)
+ TEST (double, d)
+ TEST (v4si, v)
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/pr124146-3.c gcc-17-20260712/gcc/testsuite/gcc.target/aarch64/pr124146-3.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/pr124146-3.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/aarch64/pr124146-3.c	Sun Jul 12 22:32:14 2026
***************
*** 0 ****
--- 1,45 ----
+ /* PR target/124146 */
+ /* { dg-do compile } */
+ /* { dg-options "-O2" } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ /* The AAPCS64 passes scalars and vectors using their natural alignment,
+    ignoring user alignment.  A 16-byte __int128 must therefore use its
+    natural 16-byte alignment (so the C.8 rule rounds NGRN up to an even
+    register), even when a may_alias typedef records a different user
+    alignment.  These checks would have ICEd before the PR124146 fix.  */
+ 
+ typedef __attribute__((__aligned__, __may_alias__)) __int128 ma_i128;
+ typedef __attribute__((__aligned__ (8), __may_alias__)) __int128 ma8_i128;
+ typedef __attribute__((__aligned__, __may_alias__)) unsigned long ma_ul;
+ 
+ void consume_i128 (int, __int128);
+ void consume_ul (int, unsigned long);
+ 
+ /* Over-aligned __int128: natural alignment 16 -> argument in x2/x3.
+ ** pass_i128:
+ **	mov	x2, x0
+ **	mov	x3, x1
+ **	mov	w0, 5
+ **	b	consume_i128
+ */
+ void pass_i128 (ma_i128 y) { consume_i128 (5, y); }
+ 
+ /* Under-aligned (aligned(8)) __int128: natural alignment is still 16, so the
+    argument must still land in x2/x3, not x1/x2.
+ ** pass_i128_underaligned:
+ **	mov	x2, x0
+ **	mov	x3, x1
+ **	mov	w0, 5
+ **	b	consume_i128
+ */
+ void pass_i128_underaligned (ma8_i128 y) { consume_i128 (5, y); }
+ 
+ /* Over-aligned unsigned long: a single 8-byte register, alignment is
+    irrelevant to placement -> argument in x1.
+ ** pass_ul:
+ **	mov	x1, x0
+ **	mov	w0, 5
+ **	b	consume_ul
+ */
+ void pass_ul (ma_ul y) { consume_ul (5, y); }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/pr124146-4.c gcc-17-20260712/gcc/testsuite/gcc.target/aarch64/pr124146-4.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/pr124146-4.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/aarch64/pr124146-4.c	Sun Jul 12 22:32:14 2026
***************
*** 0 ****
--- 1,54 ----
+ /* PR target/124146 */
+ /* { dg-do compile { target bitint } } */
+ /* { dg-options "-O2 -std=c23" } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ /* Like pr124146-3.c, but for _BitInt.  A _BitInt typedef that combines an
+    alignment attribute with may_alias is its own TYPE_MAIN_VARIANT and keeps
+    TYPE_USER_ALIGN set, which used to trip the assert in
+    aarch64_function_arg_alignment (PR124146).  The AAPCS64 passes a _BitInt
+    using the natural alignment of its container, ignoring user alignment: a
+    _BitInt no wider than 64 bits occupies a single GPR, one between 65 and 128
+    bits uses a 16-byte two-GPR container (so the C.8 rule rounds NGRN up to an
+    even register), and one wider than 128 bits is passed by reference.  */
+ 
+ typedef __attribute__((__aligned__ (8), __may_alias__)) _BitInt(64) ma8_bi64;
+ typedef __attribute__((__aligned__, __may_alias__)) _BitInt(128) ma_bi128;
+ typedef __attribute__((__aligned__ (8), __may_alias__)) _BitInt(128) ma8_bi128;
+ typedef __attribute__((__aligned__, __may_alias__)) _BitInt(256) ma_bi256;
+ 
+ void consume_bi64 (int, _BitInt(64));
+ void consume_bi128 (int, _BitInt(128));
+ void consume_bi256 (int, _BitInt(256));
+ 
+ /* Over-aligned _BitInt(64): fits in a single 8-byte register, so alignment is
+    irrelevant to placement -> argument in x1.
+ ** pass_bi64:
+ **	mov	x1, x0
+ **	mov	w0, 5
+ **	b	consume_bi64
+ */
+ void pass_bi64 (ma8_bi64 y) { consume_bi64 (5, y); }
+ 
+ /* Over-aligned _BitInt(128): natural alignment 16 -> argument in x2/x3.
+ ** pass_bi128:
+ **	mov	x2, x0
+ **	mov	x3, x1
+ **	mov	w0, 5
+ **	b	consume_bi128
+ */
+ void pass_bi128 (ma_bi128 y) { consume_bi128 (5, y); }
+ 
+ /* Under-aligned (aligned(8)) _BitInt(128): natural alignment is still 16, so
+    the argument must still land in x2/x3, not x1/x2.
+ ** pass_bi128_underaligned:
+ **	mov	x2, x0
+ **	mov	x3, x1
+ **	mov	w0, 5
+ **	b	consume_bi128
+ */
+ void pass_bi128_underaligned (ma8_bi128 y) { consume_bi128 (5, y); }
+ 
+ /* A _BitInt wider than 128 bits is passed by reference, so the alignment code
+    is not reached with the _BitInt type; just check it still compiles.  */
+ void pass_bi256 (ma_bi256 y) { consume_bi256 (5, y); }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/pr124146.c gcc-17-20260712/gcc/testsuite/gcc.target/aarch64/pr124146.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/pr124146.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/aarch64/pr124146.c	Sun Jul 12 22:32:14 2026
***************
*** 0 ****
--- 1,29 ----
+ /* PR target/124146 */
+ /* { dg-do compile } */
+ /* { dg-options "-O1" } */
+ 
+ /* The may_alias attribute makes the typedef T its own TYPE_MAIN_VARIANT
+    while still recording the user alignment from the aligned attribute.
+    Taking the main variant in aarch64_function_arg_alignment therefore did
+    not strip the user alignment, which used to trigger an assertion failure
+    (ICE) when foo was inlined into bar and the value of type T was passed
+    directly to bar.  */
+ 
+ long a;
+ void *b;
+ char c;
+ 
+ long
+ foo (void *p)
+ {
+   typedef __attribute__((__aligned__)) __attribute__((__may_alias__)) unsigned long T;
+   a = *(T *) b;
+   return a;
+ }
+ 
+ void
+ bar (unsigned long x)
+ {
+   long d = foo (&c);
+   bar (d);
+ }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/sve/sad_2.c gcc-17-20260712/gcc/testsuite/gcc.target/aarch64/sve/sad_2.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/sve/sad_2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/aarch64/sve/sad_2.c	Sun Jul 12 22:32:14 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O3 -msve-vector-bits=128 -mtune=neoverse-v2" } */
+ 
+ #include <stdint.h>
+ 
+ int foo (uint8_t *pix1, uint8_t *pix2)
+ {
+     int sum = 0;
+     for (int x = 0; x < 48; x++)
+     {
+         sum += __builtin_abs (pix1[x] - pix2[x]);
+     }
+     return sum;
+ }
+ 
+ /* { dg-final { scan-assembler-times {\tudot\t} 3 } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/sve/vect-early-break-cbranch_18.c gcc-17-20260712/gcc/testsuite/gcc.target/aarch64/sve/vect-early-break-cbranch_18.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/sve/vect-early-break-cbranch_18.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/aarch64/sve/vect-early-break-cbranch_18.c	Sun Jul 12 22:32:14 2026
***************
*** 0 ****
--- 1,22 ----
+ /* { dg-do compile } */
+ /* { dg-options "-Ofast -msve-vector-bits=256 -mautovec-preference=sve-only -fdump-tree-vect-details" } */
+ 
+ #define N 512
+ #define START 1
+ #define END 505
+ 
+ int x[N] __attribute__((aligned(32)));
+ 
+ int __attribute__((noipa))
+ foo (void)
+ {
+   for (int *p = x + START; p < x + END; ++p)
+     if (*p == 0)
+       return START;
+ 
+   return -1;
+ }
+ 
+ /* { dg-final { scan-tree-dump "Alignment of access forced using peeling" "vect" } } */
+ /* { dg-final { scan-tree-dump-times {Value numbering stmt = vectp_x\.[0-9]+_[0-9]+ = &x \+ 4;} 1 "vect" } } */
+ /* { dg-final { scan-tree-dump-times {Value numbering stmt = vectp_x\.[0-9]+_[0-9]+ = vectp_x\.[0-9]+_[0-9]+ \+ 18446744073709551612;} 1 "vect" } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/widening-mul-defer-fma-1.c gcc-17-20260712/gcc/testsuite/gcc.target/aarch64/widening-mul-defer-fma-1.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/widening-mul-defer-fma-1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/aarch64/widening-mul-defer-fma-1.c	Sun Jul 12 22:32:14 2026
***************
*** 0 ****
--- 1,19 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -ffast-math -fno-tree-vectorize -mcpu=ampere1" } */
+ 
+ /* The ampere1 family sets AARCH64_EXTRA_TUNE_AVOID_CROSS_LOOP_FMA, which
+    sets widening-mul-defer-fma to 0 so that a 2-operand loop-carried
+    reduction is contracted to fmadd rather than deferred to fmul + fadd.
+    (avoid-fma-max-bits stays 512 to keep the reassoc reorder enabled.)  */
+ 
+ double
+ dot (const double *a, const double *b, int n)
+ {
+   double s = 0.0;
+   for (int i = 0; i < n; i++)
+     s += a[i] * b[i];
+   return s;
+ }
+ 
+ /* { dg-final { scan-assembler {\tfmadd\t} } } */
+ /* { dg-final { scan-assembler-not {\tfmul\t} } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/widening-mul-defer-fma-2.c gcc-17-20260712/gcc/testsuite/gcc.target/aarch64/widening-mul-defer-fma-2.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/widening-mul-defer-fma-2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/aarch64/widening-mul-defer-fma-2.c	Sun Jul 12 22:32:14 2026
***************
*** 0 ****
--- 1,21 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -ffast-math -fno-tree-vectorize --param=avoid-fma-max-bits=512" } */
+ 
+ /* With FMA deferring active (avoid-fma-max-bits > 0) and the default
+    widening-mul-defer-fma=1, the widening_mul pass refuses to form an FMA
+    whose result feeds the loop-header phi: the reduction stays as a
+    separate fmul + fadd.  This is the behaviour the new param decouples
+    from the reassoc reorder (also gated by avoid-fma-max-bits).  */
+ 
+ double
+ dot (const double *a, const double *b, int n)
+ {
+   double s = 0.0;
+   for (int i = 0; i < n; i++)
+     s += a[i] * b[i];
+   return s;
+ }
+ 
+ /* { dg-final { scan-assembler {\tfmul\t} } } */
+ /* { dg-final { scan-assembler {\tfadd\t} } } */
+ /* { dg-final { scan-assembler-not {\tfmadd\t} } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/widening-mul-defer-fma-3.c gcc-17-20260712/gcc/testsuite/gcc.target/aarch64/widening-mul-defer-fma-3.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/widening-mul-defer-fma-3.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/aarch64/widening-mul-defer-fma-3.c	Sun Jul 12 22:32:14 2026
***************
*** 0 ****
--- 1,21 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -ffast-math -fno-tree-vectorize --param=avoid-fma-max-bits=512 --param=widening-mul-defer-fma=0" } */
+ 
+ /* Companion to widening-mul-defer-fma-2.c: the same reduction with FMA
+    avoidance still requested for the reassoc reorder (avoid-fma-max-bits=512)
+    but --param=widening-mul-defer-fma=0 now suppresses the widening_mul
+    deferring, so the loop-carried multiply-add is contracted to a single
+    fmadd.  This proves the new param decouples the deferring from
+    avoid-fma-max-bits.  */
+ 
+ double
+ dot (const double *a, const double *b, int n)
+ {
+   double s = 0.0;
+   for (int i = 0; i < n; i++)
+     s += a[i] * b[i];
+   return s;
+ }
+ 
+ /* { dg-final { scan-assembler {\tfmadd\t} } } */
+ /* { dg-final { scan-assembler-not {\tfmul\t} } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/arm/tls-disable-literal-pool.c gcc-17-20260712/gcc/testsuite/gcc.target/arm/tls-disable-literal-pool.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/arm/tls-disable-literal-pool.c	Sun Jul  5 22:32:14 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/arm/tls-disable-literal-pool.c	Sun Jul 12 22:32:15 2026
*************** __thread int x = 0;
*** 10,15 ****
  int
  bar ()
  {
!   return x; /* { dg-message "sorry, unimplemented: accessing thread-local storage is not currently supported with -mpure-code or -mslow-flash-data" } */
  }
  
--- 10,15 ----
  int
  bar ()
  {
!   return x; /* { dg-message "sorry, unimplemented: accessing thread-local storage is not currently supported with '-mpure-code' or '-mslow-flash-data'" } */
  }
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/gcn/cond_fmaxnm_3.c gcc-17-20260712/gcc/testsuite/gcc.target/gcn/cond_fmaxnm_3.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/gcn/cond_fmaxnm_3.c	Sun Jul  5 22:32:14 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/gcn/cond_fmaxnm_3.c	Sun Jul 12 22:32:15 2026
***************
*** 30,37 ****
  TEST_ALL (DEF_LOOP)
  
  /* { dg-final { scan-assembler-times {smaxv64sf3} 3 } } */
! /* { dg-final { scan-assembler-times {movv64sf_exec} 3 } } */
! /* { dg-final { scan-assembler-times {smaxv64sf3} 3 } } */
! /* { dg-final { scan-assembler-times {movv64df_exec} 3 } } */
  
! /* { dg-final { scan-assembler-not {\tv_writelane_b32\tv[0-9]+, vcc_..} } } */
\ No newline at end of file
--- 30,37 ----
  TEST_ALL (DEF_LOOP)
  
  /* { dg-final { scan-assembler-times {smaxv64sf3} 3 } } */
! /* { dg-final { scan-assembler-times {v_cndmask[^\n]*movv64sf} 3 } } */
! /* { dg-final { scan-assembler-times {smaxv64df3} 3 } } */
! /* { dg-final { scan-assembler-times {v_mov[^\n]*movv64df[^\n]*exec} 3 } } */
  
! /* { dg-final { scan-assembler-not {\tv_writelane_b32\tv[0-9]+, vcc_..} } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/gcn/cond_fmaxnm_4.c gcc-17-20260712/gcc/testsuite/gcc.target/gcn/cond_fmaxnm_4.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/gcn/cond_fmaxnm_4.c	Sun Jul  5 22:32:14 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/gcn/cond_fmaxnm_4.c	Sun Jul 12 22:32:15 2026
***************
*** 30,37 ****
  TEST_ALL (DEF_LOOP)
  
  /* { dg-final { scan-assembler-times {smaxv64sf3} 3 } } */
! /* { dg-final { scan-assembler-times {movv64sf_exec} 3 } } */
! /* { dg-final { scan-assembler-times {smaxv64sf3} 3 } } */
! /* { dg-final { scan-assembler-times {movv64df_exec} 3 } } */
  
! /* { dg-final { scan-assembler-not {\tv_writelane_b32\tv[0-9]+, vcc_..} } } */
\ No newline at end of file
--- 30,37 ----
  TEST_ALL (DEF_LOOP)
  
  /* { dg-final { scan-assembler-times {smaxv64sf3} 3 } } */
! /* { dg-final { scan-assembler-times {v_cndmask[^\n]*movv64sf} 3 } } */
! /* { dg-final { scan-assembler-times {smaxv64df3} 3 } } */
! /* { dg-final { scan-assembler-times {v_mov[^\n]*movv64df[^\n]*exec} 3 } } */
  
! /* { dg-final { scan-assembler-not {\tv_writelane_b32\tv[0-9]+, vcc_..} } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/gcn/cond_fminnm_3.c gcc-17-20260712/gcc/testsuite/gcc.target/gcn/cond_fminnm_3.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/gcn/cond_fminnm_3.c	Sun Jul  5 22:32:14 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/gcn/cond_fminnm_3.c	Sun Jul 12 22:32:15 2026
***************
*** 7,14 ****
  #include "cond_fmaxnm_3.c"
  
  /* { dg-final { scan-assembler-times {sminv64sf3} 3 } } */
! /* { dg-final { scan-assembler-times {movv64sf_exec} 3 } } */
! /* { dg-final { scan-assembler-times {sminv64sf3} 3 } } */
! /* { dg-final { scan-assembler-times {movv64df_exec} 3 } } */
  
! /* { dg-final { scan-assembler-not {\tv_writelane_b32\tv[0-9]+, vcc_..} } } */
\ No newline at end of file
--- 7,14 ----
  #include "cond_fmaxnm_3.c"
  
  /* { dg-final { scan-assembler-times {sminv64sf3} 3 } } */
! /* { dg-final { scan-assembler-times {v_cndmask[^\n]*movv64sf} 3 } } */
! /* { dg-final { scan-assembler-times {sminv64df3} 3 } } */
! /* { dg-final { scan-assembler-times {v_mov[^\n]*movv64df[^\n]*exec} 3 } } */
  
! /* { dg-final { scan-assembler-not {\tv_writelane_b32\tv[0-9]+, vcc_..} } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/gcn/cond_fminnm_4.c gcc-17-20260712/gcc/testsuite/gcc.target/gcn/cond_fminnm_4.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/gcn/cond_fminnm_4.c	Sun Jul  5 22:32:14 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/gcn/cond_fminnm_4.c	Sun Jul 12 22:32:15 2026
***************
*** 7,14 ****
  #include "cond_fmaxnm_4.c"
  
  /* { dg-final { scan-assembler-times {sminv64sf3} 3 } } */
! /* { dg-final { scan-assembler-times {movv64sf_exec} 3 } } */
! /* { dg-final { scan-assembler-times {sminv64sf3} 3 } } */
! /* { dg-final { scan-assembler-times {movv64df_exec} 3 } } */
  
! /* { dg-final { scan-assembler-not {\tv_writelane_b32\tv[0-9]+, vcc_..} } } */
\ No newline at end of file
--- 7,14 ----
  #include "cond_fmaxnm_4.c"
  
  /* { dg-final { scan-assembler-times {sminv64sf3} 3 } } */
! /* { dg-final { scan-assembler-times {v_cndmask[^\n]*movv64sf} 3 } } */
! /* { dg-final { scan-assembler-times {sminv64df3} 3 } } */
! /* { dg-final { scan-assembler-times {v_mov[^\n]*movv64df[^\n]*exec} 3 } } */
  
! /* { dg-final { scan-assembler-not {\tv_writelane_b32\tv[0-9]+, vcc_..} } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/i386/abi-mix-1.c gcc-17-20260712/gcc/testsuite/gcc.target/i386/abi-mix-1.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/i386/abi-mix-1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/i386/abi-mix-1.c	Sun Jul 12 22:32:15 2026
***************
*** 0 ****
--- 1,21 ----
+ /* { dg-do compile { target { ! x32 } } } */
+ /* { dg-options "-O2 -masm=att -mno-mmx -mno-80387 -msse" } */
+ 
+ extern void callee_clobbered () [[gnu::preserve_none]];
+ extern void callee_preserved () [[gnu::no_caller_saved_registers]];
+ extern void callee_sysv () [[gnu::sysv_abi]];
+ extern void callee_ms () [[gnu::ms_abi]];
+ 
+ #define TEST(PREFIX, ATTR) \
+   void PREFIX##_clobbered () [[ATTR]] { callee_clobbered (); } \
+   void PREFIX##_preserved () [[ATTR]] { callee_preserved (); } \
+   void PREFIX##_sysv () [[ATTR]] { callee_sysv (); } \
+   void PREFIX##_ms () [[ATTR]] { callee_ms (); }
+ 
+ TEST (clobbered, gnu::preserve_none)
+ TEST (preserved, gnu::no_caller_saved_registers)
+ TEST (sysv, gnu::sysv_abi)
+ TEST (ms, gnu::ms_abi)
+ 
+ /* { dg-final { scan-assembler-not "%st" } } */
+ /* { dg-final { scan-assembler "%xmm" } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/i386/abi-mix-2.c gcc-17-20260712/gcc/testsuite/gcc.target/i386/abi-mix-2.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/i386/abi-mix-2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/i386/abi-mix-2.c	Sun Jul 12 22:32:15 2026
***************
*** 0 ****
--- 1,7 ----
+ /* { dg-do compile { target { ! x32 } } } */
+ /* { dg-options "-O2 -masm=att -mno-mmx -mno-80387 -mno-sse" } */
+ 
+ #include "abi-mix-1.c"
+ 
+ /* { dg-final { scan-assembler-not "%st" } } */
+ /* { dg-final { scan-assembler-not "%xmm" } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/i386/bmi2-mulx-highpart-1.c gcc-17-20260712/gcc/testsuite/gcc.target/i386/bmi2-mulx-highpart-1.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/i386/bmi2-mulx-highpart-1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/i386/bmi2-mulx-highpart-1.c	Sun Jul 12 22:32:15 2026
***************
*** 0 ****
--- 1,23 ----
+ /* { dg-do compile { target { ! ia32 } } } */
+ /* { dg-options "-O2 -mbmi2" } */
+ /* { dg-final { check-function-bodies "**" "" "" { target *-*-linux* *-*-gnu* } } } */
+ 
+ /* %edx is fixed by the ISA (implicit mulx source) and %edi by the ABI
+    (first argument).  The highpart MULX pattern uses the same operand
+    for both result registers, and that result is the return value, so
+    both are %rax.  Only the magic-constant register is chosen by the
+    register allocator, so match it generically.  */
+ /*
+ **div7:
+ **	movabsq	\$2635249153617166336, (%r[a-z0-9]+)
+ **	movl	%edi, %edx
+ **	mulx	\1, %rax, %rax
+ **	ret
+ **...
+ */
+ 
+ unsigned int
+ div7 (unsigned int x)
+ {
+   return x / 7;
+ }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/i386/mulq-highpart.c gcc-17-20260712/gcc/testsuite/gcc.target/i386/mulq-highpart.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/i386/mulq-highpart.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/i386/mulq-highpart.c	Sun Jul 12 22:32:15 2026
***************
*** 0 ****
--- 1,22 ----
+ /* { dg-do compile { target { ! ia32 } } } */
+ /* { dg-options "-O2 -mno-bmi2" } */
+ /* { dg-final { check-function-bodies "**" "" "" { target *-*-linux* *-*-gnu* } } } */
+ 
+ /* %rax, %rdx and %edi are fixed by the ISA (mulq) and the ABI (first
+    argument), but the register holding the magic constant is chosen by
+    the register allocator, so match it generically.  */
+ /*
+ **div7:
+ **	movabsq	\$2635249153617166336, (%r[a-z0-9]+)
+ **	movl	%edi, %eax
+ **	mulq	\1
+ **	movl	%edx, %eax
+ **	ret
+ **...
+ */
+ 
+ unsigned int
+ div7 (unsigned int x)
+ {
+   return x / 7;
+ }
\ No newline at end of file
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/i386/no-callee-saved-18.c gcc-17-20260712/gcc/testsuite/gcc.target/i386/no-callee-saved-18.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/i386/no-callee-saved-18.c	Sun Jul  5 22:32:14 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/i386/no-callee-saved-18.c	Sun Jul 12 22:32:15 2026
*************** foo (uintptr_t p)
*** 19,25 ****
  /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*%(?:e|r)bx" 1 } } */
  /* { dg-final { scan-assembler-not "push(?:l|q)\[\\t \]*%(?:e|r)cx" } } */
  /* { dg-final { scan-assembler-not "push(?:l|q)\[\\t \]*%(?:e|r)dx" } } */
- /* { dg-final { scan-assembler-not "push(?:l|q)\[\\t \]*%(?:e|r)bp" } } */
  /* { dg-final { scan-assembler-times "pushl\[\\t \]*%esi" 1 { target ia32 } } } */
  /* { dg-final { scan-assembler-not "pushq\[\\t \]*%rsi" { target { ! ia32 } } } } */
  /* { dg-final { scan-assembler-times "pushl\[\\t \]*%edi" 1 { target ia32 } } } */
--- 19,24 ----
*************** foo (uintptr_t p)
*** 36,42 ****
  /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*%(?:e|r)bx" 1 } } */
  /* { dg-final { scan-assembler-not "pop(?:l|q)\[\\t \]*%(?:e|r)cx" } } */
  /* { dg-final { scan-assembler-not "pop(?:l|q)\[\\t \]*%(?:e|r)dx" } } */
- /* { dg-final { scan-assembler-not "pop(?:l|q)\[\\t \]*%(?:e|r)bp" } } */
  /* { dg-final { scan-assembler-times "popl\[\\t \]*%esi" 1 { target ia32 } } } */
  /* { dg-final { scan-assembler-not "popq\[\\t \]*%rsi" { target { ! ia32 } } } } */
  /* { dg-final { scan-assembler-times "popl\[\\t \]*%edi" 1 { target ia32 } } } */
--- 35,40 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/i386/no-callee-saved-19b.c gcc-17-20260712/gcc/testsuite/gcc.target/i386/no-callee-saved-19b.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/i386/no-callee-saved-19b.c	Sun Jul  5 22:32:14 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/i386/no-callee-saved-19b.c	Sun Jul 12 22:32:15 2026
***************
*** 1,4 ****
! /* { dg-do compile { target { *-*-linux* && maybe_x32 } } } */
  /* { dg-options "-O2 -mx32 -fno-pic -mtune=generic -msse2 -mno-avx -mno-mmx -mno-80387 -mno-apxf -mtune-ctrl=prologue_using_move,epilogue_using_move" } */
  /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
  /* { dg-final { check-function-bodies "**" "" "" { target "*-*-*" } {^\t?\.}  } } */
--- 1,4 ----
! /* { dg-do compile { target { *-*-linux* && { lp64 && maybe_x32 } } } } */
  /* { dg-options "-O2 -mx32 -fno-pic -mtune=generic -msse2 -mno-avx -mno-mmx -mno-80387 -mno-apxf -mtune-ctrl=prologue_using_move,epilogue_using_move" } */
  /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
  /* { dg-final { check-function-bodies "**" "" "" { target "*-*-*" } {^\t?\.}  } } */
***************
*** 52,66 ****
  **	.cfi_startproc
  **	subl	\$376, %esp
  **...
! **	movq	%rax, 256\(%rsp\)
! **	movq	%rdx, 264\(%rsp\)
! **	movq	%rcx, 272\(%rsp\)
! **	movq	%rbx, 280\(%rsp\)
! **	movq	%rsi, 288\(%rsp\)
! **	movq	%rdi, 296\(%rsp\)
  **...
  **	movl	\$code\+4, %edi
! **	movq	%rbp, 304\(%rsp\)
  **	movq	%r8, 312\(%rsp\)
  **	movq	%r9, 320\(%rsp\)
  **	movq	%r10, 328\(%rsp\)
--- 52,65 ----
  **	.cfi_startproc
  **	subl	\$376, %esp
  **...
! **	movq	%rdi, 304\(%rsp\)
  **...
  **	movl	\$code\+4, %edi
! **	movq	%rax, 264\(%rsp\)
! **	movq	%rdx, 272\(%rsp\)
! **	movq	%rcx, 280\(%rsp\)
! **	movq	%rbx, 288\(%rsp\)
! **	movq	%rsi, 296\(%rsp\)
  **	movq	%r8, 312\(%rsp\)
  **	movq	%r9, 320\(%rsp\)
  **	movq	%r10, 328\(%rsp\)
***************
*** 86,93 ****
  **	movaps	%xmm14, 224\(%rsp\)
  **	movaps	%xmm15, 240\(%rsp\)
  **...
! **	movl	code\(%rip\), %ebp
! **	call	\*%rbp
  **	movaps	\(%rsp\), %xmm0
  **	movaps	16\(%rsp\), %xmm1
  **	movaps	32\(%rsp\), %xmm2
--- 85,92 ----
  **	movaps	%xmm14, 224\(%rsp\)
  **	movaps	%xmm15, 240\(%rsp\)
  **...
! **	movl	code\(%rip\), %eax
! **	call	\*%rax
  **	movaps	\(%rsp\), %xmm0
  **	movaps	16\(%rsp\), %xmm1
  **	movaps	32\(%rsp\), %xmm2
***************
*** 104,116 ****
  **	movaps	208\(%rsp\), %xmm13
  **	movaps	224\(%rsp\), %xmm14
  **	movaps	240\(%rsp\), %xmm15
! **	movq	256\(%rsp\), %rax
! **	movq	264\(%rsp\), %rdx
! **	movq	272\(%rsp\), %rcx
! **	movq	280\(%rsp\), %rbx
! **	movq	288\(%rsp\), %rsi
! **	movq	296\(%rsp\), %rdi
! **	movq	304\(%rsp\), %rbp
  **	movq	312\(%rsp\), %r8
  **	movq	320\(%rsp\), %r9
  **	movq	328\(%rsp\), %r10
--- 103,114 ----
  **	movaps	208\(%rsp\), %xmm13
  **	movaps	224\(%rsp\), %xmm14
  **	movaps	240\(%rsp\), %xmm15
! **	movq	264\(%rsp\), %rax
! **	movq	272\(%rsp\), %rdx
! **	movq	280\(%rsp\), %rcx
! **	movq	288\(%rsp\), %rbx
! **	movq	296\(%rsp\), %rsi
! **	movq	304\(%rsp\), %rdi
  **	movq	312\(%rsp\), %r8
  **	movq	320\(%rsp\), %r9
  **	movq	328\(%rsp\), %r10
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/i386/no-callee-saved-19d.c gcc-17-20260712/gcc/testsuite/gcc.target/i386/no-callee-saved-19d.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/i386/no-callee-saved-19d.c	Sun Jul  5 22:32:14 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/i386/no-callee-saved-19d.c	Sun Jul 12 22:32:15 2026
***************
*** 50,63 ****
  **	.cfi_startproc
  **	subq	\$504, %rsp
  **...
  **	movq	%rax, 264\(%rsp\)
  **	movq	%rdx, 272\(%rsp\)
  **	movq	%rcx, 280\(%rsp\)
  **	movq	%rbx, 288\(%rsp\)
  **	movq	%rsi, 296\(%rsp\)
- **	movq	%rdi, 304\(%rsp\)
- **...
- **	movl	\$code\+8, %edi
  **	movq	%r8, 312\(%rsp\)
  **	movq	%r9, 320\(%rsp\)
  **	movq	%r10, 328\(%rsp\)
--- 50,63 ----
  **	.cfi_startproc
  **	subq	\$504, %rsp
  **...
+ **	movq	%rdi, 304\(%rsp\)
+ **...
+ **	movl	\$code\+8, %edi
  **	movq	%rax, 264\(%rsp\)
  **	movq	%rdx, 272\(%rsp\)
  **	movq	%rcx, 280\(%rsp\)
  **	movq	%rbx, 288\(%rsp\)
  **	movq	%rsi, 296\(%rsp\)
  **	movq	%r8, 312\(%rsp\)
  **	movq	%r9, 320\(%rsp\)
  **	movq	%r10, 328\(%rsp\)
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/i386/no-callee-saved-19e.c gcc-17-20260712/gcc/testsuite/gcc.target/i386/no-callee-saved-19e.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/i386/no-callee-saved-19e.c	Sun Jul  5 22:32:14 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/i386/no-callee-saved-19e.c	Sun Jul 12 22:32:15 2026
***************
*** 1,4 ****
! /* { dg-do compile { target { *-*-linux* && maybe_x32 } } } */
  /* { dg-options "-O2 -mx32 -fno-pic -mtune=generic -msse2 -mno-avx -mno-mmx -mno-80387 -mapxf -mtune-ctrl=prologue_using_move,epilogue_using_move" } */
  /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
  /* { dg-final { check-function-bodies "**" "" "" { target "*-*-*" } {^\t?\.}  } } */
--- 1,4 ----
! /* { dg-do compile { target { *-*-linux* && { lp64 && maybe_x32 } } } } */
  /* { dg-options "-O2 -mx32 -fno-pic -mtune=generic -msse2 -mno-avx -mno-mmx -mno-80387 -mapxf -mtune-ctrl=prologue_using_move,epilogue_using_move" } */
  /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
  /* { dg-final { check-function-bodies "**" "" "" { target "*-*-*" } {^\t?\.}  } } */
***************
*** 52,66 ****
  **	.cfi_startproc
  **	subl	\$504, %esp
  **...
! **	movq	%rax, 256\(%rsp\)
! **	movq	%rdx, 264\(%rsp\)
! **	movq	%rcx, 272\(%rsp\)
! **	movq	%rbx, 280\(%rsp\)
! **	movq	%rsi, 288\(%rsp\)
! **	movq	%rdi, 296\(%rsp\)
  **...
  **	movl	\$code\+4, %edi
! **	movq	%rbp, 304\(%rsp\)
  **	movq	%r8, 312\(%rsp\)
  **	movq	%r9, 320\(%rsp\)
  **	movq	%r10, 328\(%rsp\)
--- 52,65 ----
  **	.cfi_startproc
  **	subl	\$504, %esp
  **...
! **	movq	%rax, 264\(%rsp\)
! **	movq	%rdi, 304\(%rsp\)
  **...
  **	movl	\$code\+4, %edi
! **	movq	%rdx, 272\(%rsp\)
! **	movq	%rcx, 280\(%rsp\)
! **	movq	%rbx, 288\(%rsp\)
! **	movq	%rsi, 296\(%rsp\)
  **	movq	%r8, 312\(%rsp\)
  **	movq	%r9, 320\(%rsp\)
  **	movq	%r10, 328\(%rsp\)
***************
*** 85,93 ****
  **	movq	%r29, 480\(%rsp\)
  **	movq	%r30, 488\(%rsp\)
  **	movq	%r31, 496\(%rsp\)
- **...
- **	movl	code\(%rip\), %ebp
  **	movaps	%xmm0, \(%rsp\)
  **	movaps	%xmm1, 16\(%rsp\)
  **	movaps	%xmm2, 32\(%rsp\)
  **	movaps	%xmm3, 48\(%rsp\)
--- 84,91 ----
  **	movq	%r29, 480\(%rsp\)
  **	movq	%r30, 488\(%rsp\)
  **	movq	%r31, 496\(%rsp\)
  **	movaps	%xmm0, \(%rsp\)
+ **	movl	code\(%rip\), %eax
  **	movaps	%xmm1, 16\(%rsp\)
  **	movaps	%xmm2, 32\(%rsp\)
  **	movaps	%xmm3, 48\(%rsp\)
***************
*** 104,110 ****
  **	movaps	%xmm14, 224\(%rsp\)
  **	movaps	%xmm15, 240\(%rsp\)
  **...
! **	call	\*%rbp
  **	movaps	\(%rsp\), %xmm0
  **	movaps	16\(%rsp\), %xmm1
  **	movaps	32\(%rsp\), %xmm2
--- 102,108 ----
  **	movaps	%xmm14, 224\(%rsp\)
  **	movaps	%xmm15, 240\(%rsp\)
  **...
! **	call	\*%rax
  **	movaps	\(%rsp\), %xmm0
  **	movaps	16\(%rsp\), %xmm1
  **	movaps	32\(%rsp\), %xmm2
***************
*** 121,133 ****
  **	movaps	208\(%rsp\), %xmm13
  **	movaps	224\(%rsp\), %xmm14
  **	movaps	240\(%rsp\), %xmm15
! **	movq	256\(%rsp\), %rax
! **	movq	264\(%rsp\), %rdx
! **	movq	272\(%rsp\), %rcx
! **	movq	280\(%rsp\), %rbx
! **	movq	288\(%rsp\), %rsi
! **	movq	296\(%rsp\), %rdi
! **	movq	304\(%rsp\), %rbp
  **	movq	312\(%rsp\), %r8
  **	movq	320\(%rsp\), %r9
  **	movq	328\(%rsp\), %r10
--- 119,130 ----
  **	movaps	208\(%rsp\), %xmm13
  **	movaps	224\(%rsp\), %xmm14
  **	movaps	240\(%rsp\), %xmm15
! **	movq	264\(%rsp\), %rax
! **	movq	272\(%rsp\), %rdx
! **	movq	280\(%rsp\), %rcx
! **	movq	288\(%rsp\), %rbx
! **	movq	296\(%rsp\), %rsi
! **	movq	304\(%rsp\), %rdi
  **	movq	312\(%rsp\), %r8
  **	movq	320\(%rsp\), %r9
  **	movq	328\(%rsp\), %r10
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/i386/no-callee-saved-2.c gcc-17-20260712/gcc/testsuite/gcc.target/i386/no-callee-saved-2.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/i386/no-callee-saved-2.c	Sun Jul  5 22:32:14 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/i386/no-callee-saved-2.c	Sun Jul 12 22:32:15 2026
*************** foo (void *frame)
*** 26,32 ****
    }
  }
  
! /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*%(?:e|r)bp" 1 } } */
! /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*%(?:e|r)bp" 1 } } */
! /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*" 1 } } */
! /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*" 1 } } */
--- 26,34 ----
    }
  }
  
! /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*%(?:e|r)bp" 1 { target ia32 } } } */
! /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*%(?:e|r)bp" 1 { target ia32 } } } */
! /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*" 1 { target ia32 } } } */
! /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*" 1 { target ia32 } } } */
! /* { dg-final { scan-assembler-not "push(?:l|q)\[\\t \]*" { target { ! ia32 } } } } */
! /* { dg-final { scan-assembler-not "pop(?:l|q)\[\\t \]*" { target { ! ia32 } } } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/i386/no-callee-saved-20.c gcc-17-20260712/gcc/testsuite/gcc.target/i386/no-callee-saved-20.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/i386/no-callee-saved-20.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/i386/no-callee-saved-20.c	Sun Jul 12 22:32:15 2026
***************
*** 0 ****
--- 1,92 ----
+ /* { dg-do compile { target { *-*-linux* && lp64 } } } */
+ /* { dg-options "-O2 -fno-pic -mgeneral-regs-only -mtune=generic -mtune-ctrl=prologue_using_move,epilogue_using_move" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target "*-*-*" } {^\t?\.}  } } */
+ 
+ __attribute__((no_callee_saved_registers, noipa))
+ void
+ foo (void)
+ {
+ }
+ 
+ /*
+ **bar:
+ **.LFB[0-9]+:
+ **	.cfi_startproc
+ **	subq	\$376, %rsp
+ **...
+ **	movq	%rax, 264\(%rsp\)
+ **	movq	%rdx, 272\(%rsp\)
+ **	movq	%rcx, 280\(%rsp\)
+ **	movq	%rbx, 288\(%rsp\)
+ **	movq	%rsi, 296\(%rsp\)
+ **	movq	%rdi, 304\(%rsp\)
+ **	movq	%r8, 312\(%rsp\)
+ **	movq	%r9, 320\(%rsp\)
+ **	movq	%r10, 328\(%rsp\)
+ **	movq	%r11, 336\(%rsp\)
+ **	movq	%r12, 344\(%rsp\)
+ **	movq	%r13, 352\(%rsp\)
+ **	movq	%r14, 360\(%rsp\)
+ **	movq	%r15, 368\(%rsp\)
+ **	movaps	%xmm0, \(%rsp\)
+ **	movaps	%xmm1, 16\(%rsp\)
+ **	movaps	%xmm2, 32\(%rsp\)
+ **	movaps	%xmm3, 48\(%rsp\)
+ **	movaps	%xmm4, 64\(%rsp\)
+ **	movaps	%xmm5, 80\(%rsp\)
+ **	movaps	%xmm6, 96\(%rsp\)
+ **	movaps	%xmm7, 112\(%rsp\)
+ **	movaps	%xmm8, 128\(%rsp\)
+ **	movaps	%xmm9, 144\(%rsp\)
+ **	movaps	%xmm10, 160\(%rsp\)
+ **	movaps	%xmm11, 176\(%rsp\)
+ **	movaps	%xmm12, 192\(%rsp\)
+ **	movaps	%xmm13, 208\(%rsp\)
+ **	movaps	%xmm14, 224\(%rsp\)
+ **	movaps	%xmm15, 240\(%rsp\)
+ **...
+ **	call	foo
+ **	movaps	\(%rsp\), %xmm0
+ **	movaps	16\(%rsp\), %xmm1
+ **	movaps	32\(%rsp\), %xmm2
+ **	movaps	48\(%rsp\), %xmm3
+ **	movaps	64\(%rsp\), %xmm4
+ **	movaps	80\(%rsp\), %xmm5
+ **	movaps	96\(%rsp\), %xmm6
+ **	movaps	112\(%rsp\), %xmm7
+ **	movaps	128\(%rsp\), %xmm8
+ **	movaps	144\(%rsp\), %xmm9
+ **	movaps	160\(%rsp\), %xmm10
+ **	movaps	176\(%rsp\), %xmm11
+ **	movaps	192\(%rsp\), %xmm12
+ **	movaps	208\(%rsp\), %xmm13
+ **	movq	264\(%rsp\), %rax
+ **	movq	272\(%rsp\), %rdx
+ **	movq	280\(%rsp\), %rcx
+ **	movq	288\(%rsp\), %rbx
+ **	movq	296\(%rsp\), %rsi
+ **	movq	304\(%rsp\), %rdi
+ **	movq	312\(%rsp\), %r8
+ **	movq	320\(%rsp\), %r9
+ **	movq	328\(%rsp\), %r10
+ **	movq	336\(%rsp\), %r11
+ **	movq	344\(%rsp\), %r12
+ **	movq	352\(%rsp\), %r13
+ **	movq	360\(%rsp\), %r14
+ **	movq	368\(%rsp\), %r15
+ **	movaps	224\(%rsp\), %xmm14
+ **	movaps	240\(%rsp\), %xmm15
+ **	addq	\$376, %rsp
+ **...
+ **	ret
+ **	.cfi_endproc
+ **...
+ */
+ 
+ __attribute__((no_caller_saved_registers, target("sse2")))
+ void
+ bar (void)
+ {
+   foo ();
+ }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/i386/no-callee-saved-8.c gcc-17-20260712/gcc/testsuite/gcc.target/i386/no-callee-saved-8.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/i386/no-callee-saved-8.c	Sun Jul  5 22:32:14 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/i386/no-callee-saved-8.c	Sun Jul 12 22:32:15 2026
*************** foo (void)
*** 44,50 ****
  /* { dg-final { scan-assembler-not "popq\[\\t \]*%r9" { target { ! ia32 } } } } */
  /* { dg-final { scan-assembler-not "popq\[\\t \]*%r10" { target { ! ia32 } } } } */
  /* { dg-final { scan-assembler-not "popq\[\\t \]*%r11" { target { ! ia32 } } } } */
! /* { dg-final { scan-assembler-times "popq\[\\t \]*%r12" 1 { target { ! ia32 } } } } */
! /* { dg-final { scan-assembler-times "popq\[\\t \]*%r13" 1 { target { ! ia32 } } } } */
! /* { dg-final { scan-assembler-times "popq\[\\t \]*%r14" 1 { target { ! ia32 } } } } */
! /* { dg-final { scan-assembler-times "popq\[\\t \]*%r15" 1 { target { ! ia32 } } } } */
--- 44,50 ----
  /* { dg-final { scan-assembler-not "popq\[\\t \]*%r9" { target { ! ia32 } } } } */
  /* { dg-final { scan-assembler-not "popq\[\\t \]*%r10" { target { ! ia32 } } } } */
  /* { dg-final { scan-assembler-not "popq\[\\t \]*%r11" { target { ! ia32 } } } } */
! /* { dg-final { scan-assembler-times "pushq\[\\t \]*%r12" 1 { target { ! ia32 } } } } */
! /* { dg-final { scan-assembler-times "pushq\[\\t \]*%r13" 1 { target { ! ia32 } } } } */
! /* { dg-final { scan-assembler-times "pushq\[\\t \]*%r14" 1 { target { ! ia32 } } } } */
! /* { dg-final { scan-assembler-times "pushq\[\\t \]*%r15" 1 { target { ! ia32 } } } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/i386/no-callee-saved-9.c gcc-17-20260712/gcc/testsuite/gcc.target/i386/no-callee-saved-9.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/i386/no-callee-saved-9.c	Sun Jul  5 22:32:14 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/i386/no-callee-saved-9.c	Sun Jul 12 22:32:15 2026
*************** foo (fn_t bar)
*** 17,23 ****
  /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*%(?:e|r)bx" 1 } } */
  /* { dg-final { scan-assembler-not "push(?:l|q)\[\\t \]*%(?:e|r)cx" } } */
  /* { dg-final { scan-assembler-not "push(?:l|q)\[\\t \]*%(?:e|r)dx" } } */
- /* { dg-final { scan-assembler-not "push(?:l|q)\[\\t \]*%(?:e|r)bp" } } */
  /* { dg-final { scan-assembler-times "pushl\[\\t \]*%esi" 1 { target ia32 } } } */
  /* { dg-final { scan-assembler-not "pushq\[\\t \]*%rsi" { target { ! ia32 } } } } */
  /* { dg-final { scan-assembler-times "pushl\[\\t \]*%edi" 1 { target ia32 } } } */
--- 17,22 ----
*************** foo (fn_t bar)
*** 34,40 ****
  /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*%(?:e|r)bx" 1 } } */
  /* { dg-final { scan-assembler-not "pop(?:l|q)\[\\t \]*%(?:e|r)cx" } } */
  /* { dg-final { scan-assembler-not "pop(?:l|q)\[\\t \]*%(?:e|r)dx" } } */
- /* { dg-final { scan-assembler-not "pop(?:l|q)\[\\t \]*%(?:e|r)bp" } } */
  /* { dg-final { scan-assembler-times "popl\[\\t \]*%esi" 1 { target ia32 } } } */
  /* { dg-final { scan-assembler-not "popq\[\\t \]*%rsi" { target { ! ia32 } } } } */
  /* { dg-final { scan-assembler-times "popl\[\\t \]*%edi" 1 { target ia32 } } } */
--- 33,38 ----
*************** foo (fn_t bar)
*** 43,49 ****
  /* { dg-final { scan-assembler-not "popq\[\\t \]*%r9" { target { ! ia32 } } } } */
  /* { dg-final { scan-assembler-not "popq\[\\t \]*%r10" { target { ! ia32 } } } } */
  /* { dg-final { scan-assembler-not "popq\[\\t \]*%r11" { target { ! ia32 } } } } */
! /* { dg-final { scan-assembler-times "popq\[\\t \]*%r12" 1 { target { ! ia32 } } } } */
! /* { dg-final { scan-assembler-times "popq\[\\t \]*%r13" 1 { target { ! ia32 } } } } */
! /* { dg-final { scan-assembler-times "popq\[\\t \]*%r14" 1 { target { ! ia32 } } } } */
! /* { dg-final { scan-assembler-times "popq\[\\t \]*%r15" 1 { target { ! ia32 } } } } */
--- 41,47 ----
  /* { dg-final { scan-assembler-not "popq\[\\t \]*%r9" { target { ! ia32 } } } } */
  /* { dg-final { scan-assembler-not "popq\[\\t \]*%r10" { target { ! ia32 } } } } */
  /* { dg-final { scan-assembler-not "popq\[\\t \]*%r11" { target { ! ia32 } } } } */
! /* { dg-final { scan-assembler-times "pushq\[\\t \]*%r12" 1 { target { ! ia32 } } } } */
! /* { dg-final { scan-assembler-times "pushq\[\\t \]*%r13" 1 { target { ! ia32 } } } } */
! /* { dg-final { scan-assembler-times "pushq\[\\t \]*%r14" 1 { target { ! ia32 } } } } */
! /* { dg-final { scan-assembler-times "pushq\[\\t \]*%r15" 1 { target { ! ia32 } } } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/i386/no-caller-saved-1-ms.c gcc-17-20260712/gcc/testsuite/gcc.target/i386/no-caller-saved-1-ms.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/i386/no-caller-saved-1-ms.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/i386/no-caller-saved-1-ms.c	Sun Jul 12 22:32:15 2026
***************
*** 0 ****
--- 1,50 ----
+ /* PR target/124798  */
+ /* { dg-do compile { target { ! x32 } } } */
+ /* { dg-options "-mabi=sysv -O2 -mtune=corei7 -mtune-ctrl=^prologue_using_move,^epilogue_using_move -fomit-frame-pointer" } */
+ 
+ extern void foo (void) __attribute__ ((no_caller_saved_registers, ms_abi));
+ 
+ void
+ qux (void)
+ {
+   int a, b, c, d, e, f;
+   asm volatile ("# %0 %1 %2 %3 %4 %5"
+ 		: "=r" (a), "=r" (b), "=r" (c), "=r" (d), "=r" (e), "=r" (f));
+ #ifdef __x86_64__
+   int g, h, i, j, k, l, m, n, o, p;
+   asm volatile ("# %0 %1 %2 %3 %4 %5 %6 %7 %8 %9"
+ 		: "=r" (g), "=r" (h), "=r" (i), "=r" (j), "=r" (k), "=r" (l), "=r" (m), "=r" (n), "=r" (o), "=r" (p));
+ #endif
+   foo ();
+   asm volatile ("# %0 %1 %2 %3 %4 %5"
+ 		:: "r" (a), "r" (b), "r" (c), "r" (d), "r" (e), "r" (f));
+ #ifdef __x86_64__
+   asm volatile ("# %0 %1 %2 %3 %4 %5 %6 %7 %8 %9"
+ 		: : "r" (g), "r" (h), "r" (i), "r" (j), "r" (k), "r" (l), "r" (m), "r" (n), "r" (o), "r" (p));
+ #endif
+ }
+ 
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%edx, \[0-9\]*\\(%\[re\]?sp\\)" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%ecx, \[0-9\]*\\(%\[re\]?sp\\)" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%esi, \[0-9\]*\\(%\[re\]?sp\\)" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%edi, \[0-9\]*\\(%\[re\]?sp\\)" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %edx" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %ecx" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %esi" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %edi" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%r8d, \[0-9\]*\\(%\[re\]?sp\\)" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%r9d, \[0-9\]*\\(%\[re\]?sp\\)" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%r10d, \[0-9\]*\\(%\[re\]?sp\\)" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%r11d, \[0-9\]*\\(%\[re\]?sp\\)" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%r12d, \[0-9\]*\\(%\[re\]?sp\\)" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%r13d, \[0-9\]*\\(%\[re\]?sp\\)" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%r14d, \[0-9\]*\\(%\[re\]?sp\\)" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%r15d, \[0-9\]*\\(%\[re\]?sp\\)" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %r8d" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %r9d" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %r10d" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %r11d" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %r12d" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %r13d" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %r14d" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %r15d" { target { ! ia32 } } } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/i386/no-caller-saved-1-sysv.c gcc-17-20260712/gcc/testsuite/gcc.target/i386/no-caller-saved-1-sysv.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/i386/no-caller-saved-1-sysv.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/i386/no-caller-saved-1-sysv.c	Sun Jul 12 22:32:15 2026
***************
*** 0 ****
--- 1,46 ----
+ /* PR target/124798  */
+ /* { dg-do compile { target { ! x32 } } } */
+ /* { dg-options "-mabi=ms -O2 -mtune=corei7 -mtune-ctrl=^prologue_using_move,^epilogue_using_move -fomit-frame-pointer" } */
+ 
+ extern void foo (void) __attribute__ ((no_caller_saved_registers, sysv_abi));
+ 
+ void
+ qux (void)
+ {
+   int a, b, c, d, e, f;
+   asm volatile ("# %0 %1 %2 %3 %4 %5"
+ 		: "=r" (a), "=r" (b), "=r" (c), "=r" (d), "=r" (e), "=r" (f));
+ #ifdef __x86_64__
+   int g, h, i, j, k, l, m, n, o, p;
+   asm volatile ("# %0 %1 %2 %3 %4 %5 %6 %7 %8 %9"
+ 		: "=r" (g), "=r" (h), "=r" (i), "=r" (j), "=r" (k), "=r" (l), "=r" (m), "=r" (n), "=r" (o), "=r" (p));
+ #endif
+   foo ();
+   asm volatile ("# %0 %1 %2 %3 %4 %5"
+ 		:: "r" (a), "r" (b), "r" (c), "r" (d), "r" (e), "r" (f));
+ #ifdef __x86_64__
+   asm volatile ("# %0 %1 %2 %3 %4 %5 %6 %7 %8 %9"
+ 		: : "r" (g), "r" (h), "r" (i), "r" (j), "r" (k), "r" (l), "r" (m), "r" (n), "r" (o), "r" (p));
+ #endif
+ }
+ 
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%edx, \[0-9\]*\\(%\[re\]?sp\\)" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%ecx, \[0-9\]*\\(%\[re\]?sp\\)" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %edx" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %ecx" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%r8d, \[0-9\]*\\(%\[re\]?sp\\)" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%r9d, \[0-9\]*\\(%\[re\]?sp\\)" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%r10d, \[0-9\]*\\(%\[re\]?sp\\)" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%r11d, \[0-9\]*\\(%\[re\]?sp\\)" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%r12d, \[0-9\]*\\(%\[re\]?sp\\)" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%r13d, \[0-9\]*\\(%\[re\]?sp\\)" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%r14d, \[0-9\]*\\(%\[re\]?sp\\)" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%r15d, \[0-9\]*\\(%\[re\]?sp\\)" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %r8d" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %r9d" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %r10d" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %r11d" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %r12d" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %r13d" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %r14d" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %r15d" { target { ! ia32 } } } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/i386/no-caller-saved-1.c gcc-17-20260712/gcc/testsuite/gcc.target/i386/no-caller-saved-1.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/i386/no-caller-saved-1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/i386/no-caller-saved-1.c	Sun Jul 12 22:32:15 2026
***************
*** 0 ****
--- 1,50 ----
+ /* PR target/124798  */
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mtune=corei7 -mtune-ctrl=^prologue_using_move,^epilogue_using_move -fomit-frame-pointer" } */
+ 
+ [[gnu::no_caller_saved_registers]] extern void foo (void);
+ 
+ void
+ qux (void)
+ {
+   int a, b, c, d, e, f;
+   asm volatile ("# %0 %1 %2 %3 %4 %5"
+ 		: "=r" (a), "=r" (b), "=r" (c), "=r" (d), "=r" (e), "=r" (f));
+ #ifdef __x86_64__
+   int g, h, i, j, k, l, m, n, o, p;
+   asm volatile ("# %0 %1 %2 %3 %4 %5 %6 %7 %8 %9"
+ 		: "=r" (g), "=r" (h), "=r" (i), "=r" (j), "=r" (k), "=r" (l), "=r" (m), "=r" (n), "=r" (o), "=r" (p));
+ #endif
+   foo ();
+   asm volatile ("# %0 %1 %2 %3 %4 %5"
+ 		:: "r" (a), "r" (b), "r" (c), "r" (d), "r" (e), "r" (f));
+ #ifdef __x86_64__
+   asm volatile ("# %0 %1 %2 %3 %4 %5 %6 %7 %8 %9"
+ 		: : "r" (g), "r" (h), "r" (i), "r" (j), "r" (k), "r" (l), "r" (m), "r" (n), "r" (o), "r" (p));
+ #endif
+ }
+ 
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%edx, \[0-9\]*\\(%\[re\]?sp\\)" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%ecx, \[0-9\]*\\(%\[re\]?sp\\)" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%esi, \[0-9\]*\\(%\[re\]?sp\\)" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%edi, \[0-9\]*\\(%\[re\]?sp\\)" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %edx" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %ecx" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %esi" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %edi" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%r8d, \[0-9\]*\\(%\[re\]?sp\\)" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%r9d, \[0-9\]*\\(%\[re\]?sp\\)" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%r10d, \[0-9\]*\\(%\[re\]?sp\\)" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%r11d, \[0-9\]*\\(%\[re\]?sp\\)" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%r12d, \[0-9\]*\\(%\[re\]?sp\\)" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%r13d, \[0-9\]*\\(%\[re\]?sp\\)" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%r14d, \[0-9\]*\\(%\[re\]?sp\\)" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%r15d, \[0-9\]*\\(%\[re\]?sp\\)" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %r8d" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %r9d" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %r10d" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %r11d" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %r12d" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %r13d" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %r14d" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %r15d" { target { ! ia32 } } } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/i386/no-caller-saved-10.c gcc-17-20260712/gcc/testsuite/gcc.target/i386/no-caller-saved-10.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/i386/no-caller-saved-10.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/i386/no-caller-saved-10.c	Sun Jul 12 22:32:15 2026
***************
*** 0 ****
--- 1,17 ----
+ /* Verify that no_caller_saved_registers calls still clobber x87 and MMX
+    registers.  */
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -masm=att -mfpmath=387 -m80387 -mlong-double-80 -mno-sse -fomit-frame-pointer" } */
+ 
+ typedef int v2si __attribute__ ((vector_size (8)));
+ extern void foo (void) __attribute__ ((no_caller_saved_registers));
+ 
+ long double
+ bar_x87 (long double x, long double y)
+ {
+   long double z = x + y;
+   foo ();
+   return z + 1.0L;
+ }
+ 
+ /* { dg-final { scan-assembler-times "fstpt\[ \t\]+" 1 } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/i386/no-caller-saved-11.c gcc-17-20260712/gcc/testsuite/gcc.target/i386/no-caller-saved-11.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/i386/no-caller-saved-11.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/i386/no-caller-saved-11.c	Sun Jul 12 22:32:15 2026
***************
*** 0 ****
--- 1,19 ----
+ /* Verify that no_caller_saved_registers calls still clobber x87 and MMX
+    registers.  */
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -masm=att -mmmx -mno-sse -fomit-frame-pointer" } */
+ 
+ typedef int v2si __attribute__ ((vector_size (8)));
+ extern void foo (void) __attribute__ ((no_caller_saved_registers));
+ 
+ void
+ bar_mmx (void)
+ {
+   v2si x;
+   __asm__ volatile ("# %0" : "=y" (x));
+   foo ();
+   __asm__ volatile ("# %0" :: "y" (x));
+ }
+ 
+ /* { dg-final { scan-assembler-times "movq\[ \t\]+%mm\[0-7\], \[0-9\]*\\(%\[re\]?sp\\)" 1 } } */
+ /* { dg-final { scan-assembler-times "movq\[ \t\]+\[0-9\]*\\(%\[re\]?sp\\), %mm\[0-7\]" 1 } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/i386/no-caller-saved-2.c gcc-17-20260712/gcc/testsuite/gcc.target/i386/no-caller-saved-2.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/i386/no-caller-saved-2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/i386/no-caller-saved-2.c	Sun Jul 12 22:32:15 2026
***************
*** 0 ****
--- 1,49 ----
+ /* PR target/124798  */
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mtune=corei7 -mtune-ctrl=^prologue_using_move,^epilogue_using_move -fomit-frame-pointer" } */
+ 
+ [[gnu::no_caller_saved_registers]] extern int foo (void);
+ 
+ int
+ qux (void)
+ {
+   int a, b, c, d, e, f;
+   asm volatile ("# %0 %1 %2 %3 %4 %5"
+ 		: "=r" (a), "=r" (b), "=r" (c), "=r" (d), "=r" (e), "=r" (f));
+ #ifdef __x86_64__
+   int g, h, i, j, k, l, m, n, o, p;
+   asm volatile ("# %0 %1 %2 %3 %4 %5 %6 %7 %8 %9"
+ 		: "=r" (g), "=r" (h), "=r" (i), "=r" (j), "=r" (k), "=r" (l), "=r" (m), "=r" (n), "=r" (o), "=r" (p));
+ #endif
+   int ret = foo ();
+   asm volatile ("# %0 %1 %2 %3 %4 %5"
+ 		:: "r" (a), "r" (b), "r" (c), "r" (d), "r" (e), "r" (f));
+ #ifdef __x86_64__
+   asm volatile ("# %0 %1 %2 %3 %4 %5 %6 %7 %8 %9"
+ 		: : "r" (g), "r" (h), "r" (i), "r" (j), "r" (k), "r" (l), "r" (m), "r" (n), "r" (o), "r" (p));
+ #endif
+ 
+   return ret;
+ }
+ 
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%ecx, \[0-9\]*\\(%\[re\]?sp\\)" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%esi, \[0-9\]*\\(%\[re\]?sp\\)" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%edi, \[0-9\]*\\(%\[re\]?sp\\)" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %ecx" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %esi" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %edi" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%r8d, \[0-9\]*\\(%\[re\]?sp\\)" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%r9d, \[0-9\]*\\(%\[re\]?sp\\)" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%r10d, \[0-9\]*\\(%\[re\]?sp\\)" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%r11d, \[0-9\]*\\(%\[re\]?sp\\)" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%r12d, \[0-9\]*\\(%\[re\]?sp\\)" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%r13d, \[0-9\]*\\(%\[re\]?sp\\)" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%r14d, \[0-9\]*\\(%\[re\]?sp\\)" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%r15d, \[0-9\]*\\(%\[re\]?sp\\)" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %r8d" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %r9d" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %r10d" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %r11d" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %r12d" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %r13d" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %r15d" { target { ! ia32 } } } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/i386/no-caller-saved-3.c gcc-17-20260712/gcc/testsuite/gcc.target/i386/no-caller-saved-3.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/i386/no-caller-saved-3.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/i386/no-caller-saved-3.c	Sun Jul 12 22:32:15 2026
***************
*** 0 ****
--- 1,49 ----
+ /* PR target/124798  */
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mtune=corei7 -mtune-ctrl=^prologue_using_move,^epilogue_using_move -fomit-frame-pointer" } */
+ 
+ [[gnu::no_caller_saved_registers]] extern long long foo (void);
+ 
+ long long
+ qux (void)
+ {
+   int a, b, c, d, e, f;
+   asm volatile ("# %0 %1 %2 %3 %4 %5"
+ 		: "=r" (a), "=r" (b), "=r" (c), "=r" (d), "=r" (e), "=r" (f));
+ #ifdef __x86_64__
+   int g, h, i, j, k, l, m, n, o, p;
+   asm volatile ("# %0 %1 %2 %3 %4 %5 %6 %7 %8 %9"
+ 		: "=r" (g), "=r" (h), "=r" (i), "=r" (j), "=r" (k), "=r" (l), "=r" (m), "=r" (n), "=r" (o), "=r" (p));
+ #endif
+   long long ret = foo ();
+   asm volatile ("# %0 %1 %2 %3 %4 %5"
+ 		:: "r" (a), "r" (b), "r" (c), "r" (d), "r" (e), "r" (f));
+ #ifdef __x86_64__
+   asm volatile ("# %0 %1 %2 %3 %4 %5 %6 %7 %8 %9"
+ 		: : "r" (g), "r" (h), "r" (i), "r" (j), "r" (k), "r" (l), "r" (m), "r" (n), "r" (o), "r" (p));
+ #endif
+ 
+   return ret;
+ }
+ 
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%ecx, \[0-9\]*\\(%\[re\]?sp\\)" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%esi, \[0-9\]*\\(%\[re\]?sp\\)" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%edi, \[0-9\]*\\(%\[re\]?sp\\)" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %ecx" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %esi" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %edi" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%r8d, \[0-9\]*\\(%\[re\]?sp\\)" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%r9d, \[0-9\]*\\(%\[re\]?sp\\)" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%r10d, \[0-9\]*\\(%\[re\]?sp\\)" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%r11d, \[0-9\]*\\(%\[re\]?sp\\)" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%r12d, \[0-9\]*\\(%\[re\]?sp\\)" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%r13d, \[0-9\]*\\(%\[re\]?sp\\)" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%r14d, \[0-9\]*\\(%\[re\]?sp\\)" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%r15d, \[0-9\]*\\(%\[re\]?sp\\)" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %r8d" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %r9d" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %r10d" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %r11d" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %r12d" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %r13d" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %r15d" { target { ! ia32 } } } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/i386/no-caller-saved-4.c gcc-17-20260712/gcc/testsuite/gcc.target/i386/no-caller-saved-4.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/i386/no-caller-saved-4.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/i386/no-caller-saved-4.c	Sun Jul 12 22:32:15 2026
***************
*** 0 ****
--- 1,44 ----
+ /* PR target/124798  */
+ /* { dg-do compile { target int128 } } */
+ /* { dg-options "-O2 -mtune=corei7 -mtune-ctrl=^prologue_using_move,^epilogue_using_move -fomit-frame-pointer" } */
+ 
+ [[gnu::no_caller_saved_registers]] extern __int128 foo (void);
+ 
+ __int128
+ qux (void)
+ {
+   int a, b, c, d, e, f;
+   asm volatile ("# %0 %1 %2 %3 %4 %5"
+ 		: "=r" (a), "=r" (b), "=r" (c), "=r" (d), "=r" (e), "=r" (f));
+ #ifdef __x86_64__
+   int g, h, i, j, k, l, m, n;
+   asm volatile ("# %0 %1 %2 %3 %4 %5 %6 %7"
+ 		: "=r" (g), "=r" (h), "=r" (i), "=r" (j), "=r" (k), "=r" (l), "=r" (m), "=r" (n));
+ #endif
+   __int128 ret = foo ();
+   asm volatile ("# %0 %1 %2 %3 %4 %5"
+ 		:: "r" (a), "r" (b), "r" (c), "r" (d), "r" (e), "r" (f));
+ #ifdef __x86_64__
+   asm volatile ("# %0 %1 %2 %3 %4 %5 %6 %7"
+ 		: : "r" (g), "r" (h), "r" (i), "r" (j), "r" (k), "r" (l), "r" (m), "r" (n));
+ #endif
+ 
+   return ret;
+ }
+ 
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%edx, \[0-9\]*\\(%\[re\]?sp\\)" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%ecx, \[0-9\]*\\(%\[re\]?sp\\)" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%esi, \[0-9\]*\\(%\[re\]?sp\\)" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%edi, \[0-9\]*\\(%\[re\]?sp\\)" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %edx" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %ecx" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %esi" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %edi" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%r8d, \[0-9\]*\\(%\[re\]?sp\\)" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%r9d, \[0-9\]*\\(%\[re\]?sp\\)" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%r10d, \[0-9\]*\\(%\[re\]?sp\\)" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%r11d, \[0-9\]*\\(%\[re\]?sp\\)" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %r8d" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %r9d" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %r10d" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %r11d" } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/i386/no-caller-saved-5.c gcc-17-20260712/gcc/testsuite/gcc.target/i386/no-caller-saved-5.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/i386/no-caller-saved-5.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/i386/no-caller-saved-5.c	Sun Jul 12 22:32:15 2026
***************
*** 0 ****
--- 1,34 ----
+ /* PR target/124798  */
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mtune=corei7 -msse2 -mtune-ctrl=^prologue_using_move,^epilogue_using_move -fomit-frame-pointer" } */
+ 
+ [[gnu::no_caller_saved_registers]] extern float foo (void);
+ 
+ float
+ qux (void)
+ {
+   float a, b, c, d, e, f;
+   asm volatile ("# %0 %1 %2 %3 %4 %5"
+ 		: "=v" (a), "=v" (b), "=v" (c), "=v" (d), "=v" (e), "=v" (f));
+ #ifdef __x86_64__
+   float g, h, i, j, k, l, m, n, o, p;
+   asm volatile ("# %0 %1"
+ 		: "=v" (g), "=v" (h));
+   asm volatile ("# %0 %1 %2 %3 %4 %5 %6 %7"
+ 		: "=v" (i), "=v" (j), "=v" (k), "=v" (l), "=v" (m), "=v" (n), "=v" (o), "=v" (p));
+ #endif
+   float ret = foo ();
+   asm volatile ("# %0 %1 %2 %3 %4 %5"
+ 		:: "v" (a), "v" (b), "v" (c), "v" (d), "v" (e), "v" (f));
+ #ifdef __x86_64__
+   asm volatile ("# %0 %1"
+ 		:: "v" (g), "v" (h));
+   asm volatile ("# %0 %1 %2 %3 %4 %5 %6 %7"
+ 		: : "v" (i), "v" (j), "v" (k), "v" (l), "v" (m), "v" (n), "v" (o), "v" (p));
+ #endif
+ 
+   return ret;
+ }
+ 
+ /* { dg-final { scan-assembler-not "movss\[ \\t\]+%xmm\[0-9\]+, \[0-9\]*\\(%\[re\]?sp\\)" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %xmm\[0-9\]+" } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/i386/no-caller-saved-6.c gcc-17-20260712/gcc/testsuite/gcc.target/i386/no-caller-saved-6.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/i386/no-caller-saved-6.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/i386/no-caller-saved-6.c	Sun Jul 12 22:32:15 2026
***************
*** 0 ****
--- 1,34 ----
+ /* PR target/124798  */
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mtune=corei7 -msse2 -mtune-ctrl=^prologue_using_move,^epilogue_using_move -fomit-frame-pointer" } */
+ 
+ [[gnu::no_caller_saved_registers]] extern _Complex double foo (void);
+ 
+ _Complex double
+ qux (void)
+ {
+   double a, b, c, d, e, f;
+   asm volatile ("# %0 %1 %2 %3 %4 %5"
+ 		: "=v" (a), "=v" (b), "=v" (c), "=v" (d), "=v" (e), "=v" (f));
+ #ifdef __x86_64__
+   double g, h, i, j, k, l, m, n, o, p;
+   asm volatile ("# %0 %1"
+ 		: "=v" (g), "=v" (h));
+   asm volatile ("# %0 %1 %2 %3 %4 %5 %6 %7"
+ 		: "=v" (i), "=v" (j), "=v" (k), "=v" (l), "=v" (m), "=v" (n), "=v" (o), "=v" (p));
+ #endif
+   _Complex double ret = foo ();
+   asm volatile ("# %0 %1 %2 %3 %4 %5"
+ 		:: "v" (a), "v" (b), "v" (c), "v" (d), "v" (e), "v" (f));
+ #ifdef __x86_64__
+   asm volatile ("# %0 %1"
+ 		:: "v" (g), "v" (h));
+   asm volatile ("# %0 %1 %2 %3 %4 %5 %6 %7"
+ 		: : "v" (i), "v" (j), "v" (k), "v" (l), "v" (m), "v" (n), "v" (o), "v" (p));
+ #endif
+ 
+   return ret;
+ }
+ 
+ /* { dg-final { scan-assembler-not "movss\[ \\t\]+%xmm\[0-9\]+, \[0-9\]*\\(%\[re\]?sp\\)" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %xmm\[0-9\]+" } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/i386/no-caller-saved-7.c gcc-17-20260712/gcc/testsuite/gcc.target/i386/no-caller-saved-7.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/i386/no-caller-saved-7.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/i386/no-caller-saved-7.c	Sun Jul 12 22:32:15 2026
***************
*** 0 ****
--- 1,49 ----
+ /* PR target/124798  */
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mtune=corei7 -mtune-ctrl=^prologue_using_move,^epilogue_using_move -fomit-frame-pointer" } */
+ 
+ typedef struct
+ {
+   double d[16];
+ } record;
+ 
+ [[gnu::no_caller_saved_registers]] extern record foo (void);
+ 
+ record
+ qux (void)
+ {
+   int a, b, c, d, e, f;
+   asm volatile ("# %0 %1 %2 %3 %4 %5"
+ 		: "=r" (a), "=r" (b), "=r" (c), "=r" (d), "=r" (e), "=r" (f));
+ #ifdef __x86_64__
+   int g, h, i, j;
+   asm volatile ("# %0 %1 %2 %3"
+ 		: "=r" (g), "=r" (h), "=r" (i), "=r" (j));
+ #endif
+   record ret = foo ();
+   asm volatile ("# %0 %1 %2 %3 %4 %5"
+ 		:: "r" (a), "r" (b), "r" (c), "r" (d), "r" (e), "r" (f));
+ #ifdef __x86_64__
+   asm volatile ("# %0 %1 %2 %3"
+ 		:: "r" (g), "r" (h), "r" (i), "r" (j));
+ #endif
+ 
+   return ret;
+ }
+ 
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%edx, \[0-9\]*\\(%\[re\]?sp\\)" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%ecx, \[0-9\]*\\(%\[re\]?sp\\)" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%esi, \[0-9\]*\\(%\[re\]?sp\\)" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%edi, \[0-9\]*\\(%\[re\]?sp\\)" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %edx" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %ecx" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %esi" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %edi" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%r8d, \[0-9\]*\\(%\[re\]?sp\\)" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%r9d, \[0-9\]*\\(%\[re\]?sp\\)" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%r10d, \[0-9\]*\\(%\[re\]?sp\\)" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%r11d, \[0-9\]*\\(%\[re\]?sp\\)" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %r8d" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %r9d" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %r10d" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %r11d" { target { ! ia32 } } } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/i386/no-caller-saved-8.c gcc-17-20260712/gcc/testsuite/gcc.target/i386/no-caller-saved-8.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/i386/no-caller-saved-8.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/i386/no-caller-saved-8.c	Sun Jul 12 22:32:15 2026
***************
*** 0 ****
--- 1,51 ----
+ /* PR target/124798  */
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mtune=corei7 -mtune-ctrl=^prologue_using_move,^epilogue_using_move -fomit-frame-pointer" } */
+ 
+ typedef struct
+ {
+   long long i;
+   double d;
+ } record;
+ 
+ extern record foo (void)
+   __attribute__ ((no_caller_saved_registers, sysv_abi));
+ 
+ record
+ qux (void)
+ {
+   int a, b, c, d, e, f;
+   asm volatile ("# %0 %1 %2 %3 %4 %5"
+ 		: "=r" (a), "=r" (b), "=r" (c), "=r" (d), "=r" (e), "=r" (f));
+ #ifdef __x86_64__
+   int g, h, i, j;
+   asm volatile ("# %0 %1 %2 %3"
+ 		: "=r" (g), "=r" (h), "=r" (i), "=r" (j));
+ #endif
+   record ret = foo ();
+   asm volatile ("# %0 %1 %2 %3 %4 %5"
+ 		:: "r" (a), "r" (b), "r" (c), "r" (d), "r" (e), "r" (f));
+ #ifdef __x86_64__
+   asm volatile ("# %0 %1 %2 %3"
+ 		:: "r" (g), "r" (h), "r" (i), "r" (j));
+ #endif
+ 
+   return ret;
+ }
+ 
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%edx, \[0-9\]*\\(%\[re\]?sp\\)" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%ecx, \[0-9\]*\\(%\[re\]?sp\\)" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%esi, \[0-9\]*\\(%\[re\]?sp\\)" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%edi, \[0-9\]*\\(%\[re\]?sp\\)" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %edx" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %ecx" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %esi" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %edi" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%r8d, \[0-9\]*\\(%\[re\]?sp\\)" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%r9d, \[0-9\]*\\(%\[re\]?sp\\)" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%r10d, \[0-9\]*\\(%\[re\]?sp\\)" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%r11d, \[0-9\]*\\(%\[re\]?sp\\)" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %r8d" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %r9d" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %r10d" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %r11d" { target { ! ia32 } } } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/i386/no-caller-saved-9.c gcc-17-20260712/gcc/testsuite/gcc.target/i386/no-caller-saved-9.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/i386/no-caller-saved-9.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/i386/no-caller-saved-9.c	Sun Jul 12 22:32:15 2026
***************
*** 0 ****
--- 1,51 ----
+ /* PR target/124798  */
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mtune=corei7 -mtune-ctrl=^prologue_using_move,^epilogue_using_move -fomit-frame-pointer" } */
+ 
+ typedef struct
+ {
+   double d;
+   long long i;
+ } record;
+ 
+ extern record foo (void)
+   __attribute__ ((no_caller_saved_registers, sysv_abi));
+ 
+ record
+ qux (void)
+ {
+   int a, b, c, d, e, f;
+   asm volatile ("# %0 %1 %2 %3 %4 %5"
+ 		: "=r" (a), "=r" (b), "=r" (c), "=r" (d), "=r" (e), "=r" (f));
+ #ifdef __x86_64__
+   int g, h, i, j;
+   asm volatile ("# %0 %1 %2 %3"
+ 		: "=r" (g), "=r" (h), "=r" (i), "=r" (j));
+ #endif
+   record ret = foo ();
+   asm volatile ("# %0 %1 %2 %3 %4 %5"
+ 		:: "r" (a), "r" (b), "r" (c), "r" (d), "r" (e), "r" (f));
+ #ifdef __x86_64__
+   asm volatile ("# %0 %1 %2 %3"
+ 		:: "r" (g), "r" (h), "r" (i), "r" (j));
+ #endif
+ 
+   return ret;
+ }
+ 
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%edx, \[0-9\]*\\(%\[re\]?sp\\)" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%ecx, \[0-9\]*\\(%\[re\]?sp\\)" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%esi, \[0-9\]*\\(%\[re\]?sp\\)" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%edi, \[0-9\]*\\(%\[re\]?sp\\)" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %edx" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %ecx" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %esi" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %edi" } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%r8d, \[0-9\]*\\(%\[re\]?sp\\)" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%r9d, \[0-9\]*\\(%\[re\]?sp\\)" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%r10d, \[0-9\]*\\(%\[re\]?sp\\)" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+%r11d, \[0-9\]*\\(%\[re\]?sp\\)" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %r8d" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %r9d" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %r10d" { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-not "mov(l|q)\[ \\t\]+\[0-9\]*\\(%\[re\]?sp\\), %r11d" { target { ! ia32 } } } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/i386/pr106450.c gcc-17-20260712/gcc/testsuite/gcc.target/i386/pr106450.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/i386/pr106450.c	Sun Jul  5 22:32:14 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/i386/pr106450.c	Sun Jul 12 22:32:15 2026
***************
*** 1,5 ****
  /* { dg-do compile { target int128 } } */
! /* { dg-options "-O2 -fsplit-paths" } */
  
  __int128 n;
  
--- 1,5 ----
  /* { dg-do compile { target int128 } } */
! /* { dg-options "-O2" } */
  
  __int128 n;
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/i386/pr119784b.c gcc-17-20260712/gcc/testsuite/gcc.target/i386/pr119784b.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/i386/pr119784b.c	Sun Jul  5 22:32:14 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/i386/pr119784b.c	Sun Jul 12 22:32:15 2026
***************
*** 11,24 ****
  **	.cfi_startproc
  **	subl	\$248, %esp
  **...
! **	movq	%rax, \(%rsp\)
! **	movq	%rdx, 8\(%rsp\)
! **	movq	%rcx, 16\(%rsp\)
! **	movq	%rbx, 24\(%rsp\)
! **	movq	%rsi, 32\(%rsp\)
! **	movq	%rdi, 40\(%rsp\)
! **...
! **	movq	%rbp, 48\(%rsp\)
  **	movq	%r8, 56\(%rsp\)
  **	movq	%r9, 64\(%rsp\)
  **	movq	%r10, 72\(%rsp\)
--- 11,22 ----
  **	.cfi_startproc
  **	subl	\$248, %esp
  **...
! **	movq	%rax, 8\(%rsp\)
! **	movq	%rdx, 16\(%rsp\)
! **	movq	%rcx, 24\(%rsp\)
! **	movq	%rbx, 32\(%rsp\)
! **	movq	%rsi, 40\(%rsp\)
! **	movq	%rdi, 48\(%rsp\)
  **	movq	%r8, 56\(%rsp\)
  **	movq	%r9, 64\(%rsp\)
  **	movq	%r10, 72\(%rsp\)
***************
*** 44,58 ****
  **	movq	%r30, 232\(%rsp\)
  **	movq	%r31, 240\(%rsp\)
  **...
! **	movl	code\(%rip\), %ebp
! **	call	\*%rbp
! **	movq	\(%rsp\), %rax
! **	movq	8\(%rsp\), %rdx
! **	movq	16\(%rsp\), %rcx
! **	movq	24\(%rsp\), %rbx
! **	movq	32\(%rsp\), %rsi
! **	movq	40\(%rsp\), %rdi
! **	movq	48\(%rsp\), %rbp
  **	movq	56\(%rsp\), %r8
  **	movq	64\(%rsp\), %r9
  **	movq	72\(%rsp\), %r10
--- 42,55 ----
  **	movq	%r30, 232\(%rsp\)
  **	movq	%r31, 240\(%rsp\)
  **...
! **	movl	code\(%rip\), %eax
! **	call	\*%rax
! **	movq	8\(%rsp\), %rax
! **	movq	16\(%rsp\), %rdx
! **	movq	24\(%rsp\), %rcx
! **	movq	32\(%rsp\), %rbx
! **	movq	40\(%rsp\), %rsi
! **	movq	48\(%rsp\), %rdi
  **	movq	56\(%rsp\), %r8
  **	movq	64\(%rsp\), %r9
  **	movq	72\(%rsp\), %r10
***************
*** 61,68 ****
  **	movq	96\(%rsp\), %r13
  **	movq	104\(%rsp\), %r14
  **	movq	112\(%rsp\), %r15
- **	movq	120\(%rsp\), %r16
  **	movq	128\(%rsp\), %r17
  **	movq	136\(%rsp\), %r18
  **	movq	144\(%rsp\), %r19
  **	movq	152\(%rsp\), %r20
--- 58,65 ----
  **	movq	96\(%rsp\), %r13
  **	movq	104\(%rsp\), %r14
  **	movq	112\(%rsp\), %r15
  **	movq	128\(%rsp\), %r17
+ **	movq	120\(%rsp\), %r16
  **	movq	136\(%rsp\), %r18
  **	movq	144\(%rsp\), %r19
  **	movq	152\(%rsp\), %r20
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/i386/pr125436-1a.c gcc-17-20260712/gcc/testsuite/gcc.target/i386/pr125436-1a.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/i386/pr125436-1a.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/i386/pr125436-1a.c	Sun Jul 12 22:32:15 2026
***************
*** 0 ****
--- 1,130 ----
+ /* { dg-do compile { target { *-*-linux* && lp64 } } } */
+ /* { dg-options "-O1 -fPIC -mtls-dialect=gnu -mtune-ctrl=^prologue_using_move,^epilogue_using_move -mno-push-args -fomit-frame-pointer -mtune=generic" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target "*-*-*" } {^\t?\.}  } } */
+ 
+ /*
+ **ms_tls_access:
+ **.LFB[0-9]+:
+ **	.cfi_startproc
+ **	pushq	%rdi
+ **	.cfi_def_cfa_offset 16
+ **	.cfi_offset 5, -16
+ **	pushq	%rsi
+ **	.cfi_def_cfa_offset 24
+ **	.cfi_offset 4, -24
+ **	pushq	%rbx
+ **	.cfi_def_cfa_offset 32
+ **	.cfi_offset 3, -32
+ **	subq	\$160, %rsp
+ **	.cfi_def_cfa_offset 192
+ **	movaps	%xmm6, \(%rsp\)
+ **	movaps	%xmm7, 16\(%rsp\)
+ **	movaps	%xmm8, 32\(%rsp\)
+ **	movaps	%xmm9, 48\(%rsp\)
+ **	movaps	%xmm10, 64\(%rsp\)
+ **	movaps	%xmm11, 80\(%rsp\)
+ **	movaps	%xmm12, 96\(%rsp\)
+ **	movaps	%xmm13, 112\(%rsp\)
+ **	movaps	%xmm14, 128\(%rsp\)
+ **	movaps	%xmm15, 144\(%rsp\)
+ **	.cfi_offset 23, -192
+ **	.cfi_offset 24, -176
+ **	.cfi_offset 25, -160
+ **	.cfi_offset 26, -144
+ **	.cfi_offset 27, -128
+ **	.cfi_offset 28, -112
+ **	.cfi_offset 29, -96
+ **	.cfi_offset 30, -80
+ **	.cfi_offset 31, -64
+ **	.cfi_offset 32, -48
+ **	movl	%ecx, %ebx
+ **	leaq	tls_instance@tlsld\(%rip\), %rdi
+ **	call	__tls_get_addr@PLT
+ **	addl	%ebx, tls_instance@dtpoff\(%rax\)
+ **	movaps	\(%rsp\), %xmm6
+ **	movaps	16\(%rsp\), %xmm7
+ **	movaps	32\(%rsp\), %xmm8
+ **	movaps	48\(%rsp\), %xmm9
+ **	movaps	64\(%rsp\), %xmm10
+ **	movaps	80\(%rsp\), %xmm11
+ **	movaps	96\(%rsp\), %xmm12
+ **	movaps	112\(%rsp\), %xmm13
+ **	movaps	128\(%rsp\), %xmm14
+ **	movaps	144\(%rsp\), %xmm15
+ **	addq	\$160, %rsp
+ **	.cfi_restore 32
+ **	.cfi_restore 31
+ **	.cfi_restore 30
+ **	.cfi_restore 29
+ **	.cfi_restore 28
+ **	.cfi_restore 27
+ **	.cfi_restore 26
+ **	.cfi_restore 25
+ **	.cfi_restore 24
+ **	.cfi_restore 23
+ **	.cfi_def_cfa_offset 32
+ **	popq	%rbx
+ **	.cfi_restore 3
+ **	.cfi_def_cfa_offset 24
+ **	popq	%rsi
+ **	.cfi_restore 4
+ **	.cfi_def_cfa_offset 16
+ **	popq	%rdi
+ **	.cfi_restore 5
+ **	.cfi_def_cfa_offset 8
+ **	ret
+ **	.cfi_endproc
+ **...
+ */
+ 
+ static volatile int magic_number = 0x12345678;
+ 
+ static __thread int tls_instance = 0;
+ 
+ __attribute__ ((ms_abi))
+ void
+ ms_tls_access (int i)
+ {
+   tls_instance += i;
+ }
+ 
+ __attribute__ ((sysv_abi))
+ int
+ sysv_foo (int i)
+ {
+   double A = magic_number;
+   double B = magic_number;
+   int a = magic_number;
+   int b = magic_number;
+   int c = magic_number;
+   int d = magic_number;
+   int e = magic_number;
+   int f = magic_number;
+   int g = magic_number;
+   int h = magic_number;
+ 
+   ms_tls_access (i);
+ 
+   return (a ^ b) ^ (c ^ d) ^ (e ^ f) ^ (g ^ h) + (int)(A - B);
+ }
+ 
+ __attribute__ ((ms_abi))
+ int
+ ms_foo (int i)
+ {
+   double A = magic_number;
+   double B = magic_number;
+   int a = magic_number;
+   int b = magic_number;
+   int c = magic_number;
+   int d = magic_number;
+   int e = magic_number;
+   int f = magic_number;
+   int g = magic_number;
+   int h = magic_number;
+ 
+   ms_tls_access (i);
+ 
+   return a ^ b ^ c ^ d ^ e ^ f ^ g ^ h + (int)(A - B);
+ }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/i386/pr125436-1b.c gcc-17-20260712/gcc/testsuite/gcc.target/i386/pr125436-1b.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/i386/pr125436-1b.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/i386/pr125436-1b.c	Sun Jul 12 22:32:15 2026
***************
*** 0 ****
--- 1,81 ----
+ /* { dg-do compile { target { *-*-linux* && lp64 } } } */
+ /* { dg-options "-O1 -fPIC -mabi=ms -mtls-dialect=gnu -mtune-ctrl=^prologue_using_move,^epilogue_using_move -mno-push-args -fomit-frame-pointer -mtune=generic" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target "*-*-*" } {^\t?\.}  } } */
+ 
+ /*
+ **ms_tls_access:
+ **.LFB[0-9]+:
+ **	.cfi_startproc
+ **	pushq	%rdi
+ **	.cfi_def_cfa_offset 16
+ **	.cfi_offset 5, -16
+ **	pushq	%rsi
+ **	.cfi_def_cfa_offset 24
+ **	.cfi_offset 4, -24
+ **	pushq	%rbx
+ **	.cfi_def_cfa_offset 32
+ **	.cfi_offset 3, -32
+ **	subq	\$160, %rsp
+ **	.cfi_def_cfa_offset 192
+ **	movaps	%xmm6, \(%rsp\)
+ **	movaps	%xmm7, 16\(%rsp\)
+ **	movaps	%xmm8, 32\(%rsp\)
+ **	movaps	%xmm9, 48\(%rsp\)
+ **	movaps	%xmm10, 64\(%rsp\)
+ **	movaps	%xmm11, 80\(%rsp\)
+ **	movaps	%xmm12, 96\(%rsp\)
+ **	movaps	%xmm13, 112\(%rsp\)
+ **	movaps	%xmm14, 128\(%rsp\)
+ **	movaps	%xmm15, 144\(%rsp\)
+ **	.cfi_offset 23, -192
+ **	.cfi_offset 24, -176
+ **	.cfi_offset 25, -160
+ **	.cfi_offset 26, -144
+ **	.cfi_offset 27, -128
+ **	.cfi_offset 28, -112
+ **	.cfi_offset 29, -96
+ **	.cfi_offset 30, -80
+ **	.cfi_offset 31, -64
+ **	.cfi_offset 32, -48
+ **	movl	%ecx, %ebx
+ **	leaq	tls_instance@tlsld\(%rip\), %rdi
+ **	call	__tls_get_addr@PLT
+ **	addl	%ebx, tls_instance@dtpoff\(%rax\)
+ **	movaps	\(%rsp\), %xmm6
+ **	movaps	16\(%rsp\), %xmm7
+ **	movaps	32\(%rsp\), %xmm8
+ **	movaps	48\(%rsp\), %xmm9
+ **	movaps	64\(%rsp\), %xmm10
+ **	movaps	80\(%rsp\), %xmm11
+ **	movaps	96\(%rsp\), %xmm12
+ **	movaps	112\(%rsp\), %xmm13
+ **	movaps	128\(%rsp\), %xmm14
+ **	movaps	144\(%rsp\), %xmm15
+ **	addq	\$160, %rsp
+ **	.cfi_restore 32
+ **	.cfi_restore 31
+ **	.cfi_restore 30
+ **	.cfi_restore 29
+ **	.cfi_restore 28
+ **	.cfi_restore 27
+ **	.cfi_restore 26
+ **	.cfi_restore 25
+ **	.cfi_restore 24
+ **	.cfi_restore 23
+ **	.cfi_def_cfa_offset 32
+ **	popq	%rbx
+ **	.cfi_restore 3
+ **	.cfi_def_cfa_offset 24
+ **	popq	%rsi
+ **	.cfi_restore 4
+ **	.cfi_def_cfa_offset 16
+ **	popq	%rdi
+ **	.cfi_restore 5
+ **	.cfi_def_cfa_offset 8
+ **	ret
+ **	.cfi_endproc
+ **...
+ */
+ 
+ #include "pr125436-1a.c"
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/i386/pr125436-2a.c gcc-17-20260712/gcc/testsuite/gcc.target/i386/pr125436-2a.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/i386/pr125436-2a.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/i386/pr125436-2a.c	Sun Jul 12 22:32:15 2026
***************
*** 0 ****
--- 1,132 ----
+ /* { dg-do compile { target { *-*-linux* && lp64 } } } */
+ /* { dg-options "-O1 -fPIC -mtls-dialect=gnu -mtune-ctrl=^prologue_using_move,^epilogue_using_move -mno-push-args -fomit-frame-pointer -mtune=generic" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target "*-*-*" } {^\t?\.}  } } */
+ 
+ /*
+ **ms_tls_access:
+ **.LFB[0-9]+:
+ **	.cfi_startproc
+ **	pushq	%rdi
+ **	.cfi_def_cfa_offset 16
+ **	.cfi_offset 5, -16
+ **	pushq	%rsi
+ **	.cfi_def_cfa_offset 24
+ **	.cfi_offset 4, -24
+ **	pushq	%rbx
+ **	.cfi_def_cfa_offset 32
+ **	.cfi_offset 3, -32
+ **	subq	\$160, %rsp
+ **	.cfi_def_cfa_offset 192
+ **	movaps	%xmm6, \(%rsp\)
+ **	movaps	%xmm7, 16\(%rsp\)
+ **	movaps	%xmm8, 32\(%rsp\)
+ **	movaps	%xmm9, 48\(%rsp\)
+ **	movaps	%xmm10, 64\(%rsp\)
+ **	movaps	%xmm11, 80\(%rsp\)
+ **	movaps	%xmm12, 96\(%rsp\)
+ **	movaps	%xmm13, 112\(%rsp\)
+ **	movaps	%xmm14, 128\(%rsp\)
+ **	movaps	%xmm15, 144\(%rsp\)
+ **	.cfi_offset 23, -192
+ **	.cfi_offset 24, -176
+ **	.cfi_offset 25, -160
+ **	.cfi_offset 26, -144
+ **	.cfi_offset 27, -128
+ **	.cfi_offset 28, -112
+ **	.cfi_offset 29, -96
+ **	.cfi_offset 30, -80
+ **	.cfi_offset 31, -64
+ **	.cfi_offset 32, -48
+ **	movl	%ecx, %ebx
+ **	data16	leaq	tls_instance@tlsgd\(%rip\), %rdi
+ **	.value	0x6666
+ **	rex64
+ **	call	__tls_get_addr@PLT
+ **	addl	%ebx, \(%rax\)
+ **	movaps	\(%rsp\), %xmm6
+ **	movaps	16\(%rsp\), %xmm7
+ **	movaps	32\(%rsp\), %xmm8
+ **	movaps	48\(%rsp\), %xmm9
+ **	movaps	64\(%rsp\), %xmm10
+ **	movaps	80\(%rsp\), %xmm11
+ **	movaps	96\(%rsp\), %xmm12
+ **	movaps	112\(%rsp\), %xmm13
+ **	movaps	128\(%rsp\), %xmm14
+ **	movaps	144\(%rsp\), %xmm15
+ **	addq	\$160, %rsp
+ **	.cfi_restore 32
+ **	.cfi_restore 31
+ **	.cfi_restore 30
+ **	.cfi_restore 29
+ **	.cfi_restore 28
+ **	.cfi_restore 27
+ **	.cfi_restore 26
+ **	.cfi_restore 25
+ **	.cfi_restore 24
+ **	.cfi_restore 23
+ **	.cfi_def_cfa_offset 32
+ **	popq	%rbx
+ **	.cfi_restore 3
+ **	.cfi_def_cfa_offset 24
+ **	popq	%rsi
+ **	.cfi_restore 4
+ **	.cfi_def_cfa_offset 16
+ **	popq	%rdi
+ **	.cfi_restore 5
+ **	.cfi_def_cfa_offset 8
+ **	ret
+ **	.cfi_endproc
+ **...
+ */
+ 
+ static volatile int magic_number = 0x12345678;
+ 
+ __thread int tls_instance = 0;
+ 
+ __attribute__ ((ms_abi))
+ void
+ ms_tls_access (int i)
+ {
+   tls_instance += i;
+ }
+ 
+ __attribute__ ((sysv_abi))
+ int
+ sysv_foo (int i)
+ {
+   double A = magic_number;
+   double B = magic_number;
+   int a = magic_number;
+   int b = magic_number;
+   int c = magic_number;
+   int d = magic_number;
+   int e = magic_number;
+   int f = magic_number;
+   int g = magic_number;
+   int h = magic_number;
+ 
+   ms_tls_access (i);
+ 
+   return (a ^ b) ^ (c ^ d) ^ (e ^ f) ^ (g ^ h) + (int)(A - B);
+ }
+ 
+ __attribute__ ((ms_abi))
+ int
+ ms_foo (int i)
+ {
+   double A = magic_number;
+   double B = magic_number;
+   int a = magic_number;
+   int b = magic_number;
+   int c = magic_number;
+   int d = magic_number;
+   int e = magic_number;
+   int f = magic_number;
+   int g = magic_number;
+   int h = magic_number;
+ 
+   ms_tls_access (i);
+ 
+   return a ^ b ^ c ^ d ^ e ^ f ^ g ^ h + (int)(A - B);
+ }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/i386/pr125436-2b.c gcc-17-20260712/gcc/testsuite/gcc.target/i386/pr125436-2b.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/i386/pr125436-2b.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/i386/pr125436-2b.c	Sun Jul 12 22:32:15 2026
***************
*** 0 ****
--- 1,83 ----
+ /* { dg-do compile { target { *-*-linux* && lp64 } } } */
+ /* { dg-options "-O1 -fPIC -mabi=ms -mtls-dialect=gnu -mtune-ctrl=^prologue_using_move,^epilogue_using_move -mno-push-args -fomit-frame-pointer -mtune=generic" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target "*-*-*" } {^\t?\.}  } } */
+ 
+ /*
+ **ms_tls_access:
+ **.LFB[0-9]+:
+ **	.cfi_startproc
+ **	pushq	%rdi
+ **	.cfi_def_cfa_offset 16
+ **	.cfi_offset 5, -16
+ **	pushq	%rsi
+ **	.cfi_def_cfa_offset 24
+ **	.cfi_offset 4, -24
+ **	pushq	%rbx
+ **	.cfi_def_cfa_offset 32
+ **	.cfi_offset 3, -32
+ **	subq	\$160, %rsp
+ **	.cfi_def_cfa_offset 192
+ **	movaps	%xmm6, \(%rsp\)
+ **	movaps	%xmm7, 16\(%rsp\)
+ **	movaps	%xmm8, 32\(%rsp\)
+ **	movaps	%xmm9, 48\(%rsp\)
+ **	movaps	%xmm10, 64\(%rsp\)
+ **	movaps	%xmm11, 80\(%rsp\)
+ **	movaps	%xmm12, 96\(%rsp\)
+ **	movaps	%xmm13, 112\(%rsp\)
+ **	movaps	%xmm14, 128\(%rsp\)
+ **	movaps	%xmm15, 144\(%rsp\)
+ **	.cfi_offset 23, -192
+ **	.cfi_offset 24, -176
+ **	.cfi_offset 25, -160
+ **	.cfi_offset 26, -144
+ **	.cfi_offset 27, -128
+ **	.cfi_offset 28, -112
+ **	.cfi_offset 29, -96
+ **	.cfi_offset 30, -80
+ **	.cfi_offset 31, -64
+ **	.cfi_offset 32, -48
+ **	movl	%ecx, %ebx
+ **	data16	leaq	tls_instance@tlsgd\(%rip\), %rdi
+ **	.value	0x6666
+ **	rex64
+ **	call	__tls_get_addr@PLT
+ **	addl	%ebx, \(%rax\)
+ **	movaps	\(%rsp\), %xmm6
+ **	movaps	16\(%rsp\), %xmm7
+ **	movaps	32\(%rsp\), %xmm8
+ **	movaps	48\(%rsp\), %xmm9
+ **	movaps	64\(%rsp\), %xmm10
+ **	movaps	80\(%rsp\), %xmm11
+ **	movaps	96\(%rsp\), %xmm12
+ **	movaps	112\(%rsp\), %xmm13
+ **	movaps	128\(%rsp\), %xmm14
+ **	movaps	144\(%rsp\), %xmm15
+ **	addq	\$160, %rsp
+ **	.cfi_restore 32
+ **	.cfi_restore 31
+ **	.cfi_restore 30
+ **	.cfi_restore 29
+ **	.cfi_restore 28
+ **	.cfi_restore 27
+ **	.cfi_restore 26
+ **	.cfi_restore 25
+ **	.cfi_restore 24
+ **	.cfi_restore 23
+ **	.cfi_def_cfa_offset 32
+ **	popq	%rbx
+ **	.cfi_restore 3
+ **	.cfi_def_cfa_offset 24
+ **	popq	%rsi
+ **	.cfi_restore 4
+ **	.cfi_def_cfa_offset 16
+ **	popq	%rdi
+ **	.cfi_restore 5
+ **	.cfi_def_cfa_offset 8
+ **	ret
+ **	.cfi_endproc
+ **...
+ */
+ 
+ #include "pr125436-2a.c"
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/i386/pr125436-3.c gcc-17-20260712/gcc/testsuite/gcc.target/i386/pr125436-3.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/i386/pr125436-3.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/i386/pr125436-3.c	Sun Jul 12 22:32:15 2026
***************
*** 0 ****
--- 1,88 ----
+ /* { dg-do compile { target { *-*-linux* && lp64 } } } */
+ /* { dg-options "-O1 -fPIC -mtls-dialect=gnu -mtune-ctrl=^prologue_using_move,^epilogue_using_move -mno-push-args -fomit-frame-pointer -mtune=generic" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target "*-*-*" } {^\t?\.}  } } */
+ 
+ /*
+ **ms_tls_access:
+ **.LFB[0-9]+:
+ **	.cfi_startproc
+ **	pushq	%rdi
+ **	.cfi_def_cfa_offset 16
+ **	.cfi_offset 5, -16
+ **	pushq	%rsi
+ **	.cfi_def_cfa_offset 24
+ **	.cfi_offset 4, -24
+ **	pushq	%rbx
+ **	.cfi_def_cfa_offset 32
+ **	.cfi_offset 3, -32
+ **	subq	\$160, %rsp
+ **	.cfi_def_cfa_offset 192
+ **	movaps	%xmm6, \(%rsp\)
+ **	movaps	%xmm7, 16\(%rsp\)
+ **	movaps	%xmm8, 32\(%rsp\)
+ **	movaps	%xmm9, 48\(%rsp\)
+ **	movaps	%xmm10, 64\(%rsp\)
+ **	movaps	%xmm11, 80\(%rsp\)
+ **	movaps	%xmm12, 96\(%rsp\)
+ **	movaps	%xmm13, 112\(%rsp\)
+ **	movaps	%xmm14, 128\(%rsp\)
+ **	movaps	%xmm15, 144\(%rsp\)
+ **	.cfi_offset 23, -192
+ **	.cfi_offset 24, -176
+ **	.cfi_offset 25, -160
+ **	.cfi_offset 26, -144
+ **	.cfi_offset 27, -128
+ **	.cfi_offset 28, -112
+ **	.cfi_offset 29, -96
+ **	.cfi_offset 30, -80
+ **	.cfi_offset 31, -64
+ **	.cfi_offset 32, -48
+ **	movl	%ecx, %ebx
+ **	leaq	tls_instance@tlsld\(%rip\), %rdi
+ **	call	__tls_get_addr@PLT
+ **	addl	%ebx, tls_instance@dtpoff\(%rax\)
+ **	movaps	\(%rsp\), %xmm6
+ **	movaps	16\(%rsp\), %xmm7
+ **	movaps	32\(%rsp\), %xmm8
+ **	movaps	48\(%rsp\), %xmm9
+ **	movaps	64\(%rsp\), %xmm10
+ **	movaps	80\(%rsp\), %xmm11
+ **	movaps	96\(%rsp\), %xmm12
+ **	movaps	112\(%rsp\), %xmm13
+ **	movaps	128\(%rsp\), %xmm14
+ **	movaps	144\(%rsp\), %xmm15
+ **	addq	\$160, %rsp
+ **	.cfi_restore 32
+ **	.cfi_restore 31
+ **	.cfi_restore 30
+ **	.cfi_restore 29
+ **	.cfi_restore 28
+ **	.cfi_restore 27
+ **	.cfi_restore 26
+ **	.cfi_restore 25
+ **	.cfi_restore 24
+ **	.cfi_restore 23
+ **	.cfi_def_cfa_offset 32
+ **	popq	%rbx
+ **	.cfi_restore 3
+ **	.cfi_def_cfa_offset 24
+ **	popq	%rsi
+ **	.cfi_restore 4
+ **	.cfi_def_cfa_offset 16
+ **	popq	%rdi
+ **	.cfi_restore 5
+ **	.cfi_def_cfa_offset 8
+ **	ret
+ **	.cfi_endproc
+ **...
+ */
+ 
+ static __thread int tls_instance = 0;
+ 
+ __attribute__ ((ms_abi))
+ void
+ ms_tls_access (int i)
+ {
+   tls_instance += i;
+ }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/i386/pr125436-4.c gcc-17-20260712/gcc/testsuite/gcc.target/i386/pr125436-4.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/i386/pr125436-4.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/i386/pr125436-4.c	Sun Jul 12 22:32:15 2026
***************
*** 0 ****
--- 1,88 ----
+ /* { dg-do compile { target { *-*-linux* && lp64 } } } */
+ /* { dg-options "-O1 -fPIC -mabi=ms -mtls-dialect=gnu -mtune-ctrl=^prologue_using_move,^epilogue_using_move -mno-push-args -fomit-frame-pointer -mtune=generic" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target "*-*-*" } {^\t?\.}  } } */
+ 
+ /*
+ **ms_tls_access:
+ **.LFB[0-9]+:
+ **	.cfi_startproc
+ **	pushq	%rdi
+ **	.cfi_def_cfa_offset 16
+ **	.cfi_offset 5, -16
+ **	pushq	%rsi
+ **	.cfi_def_cfa_offset 24
+ **	.cfi_offset 4, -24
+ **	pushq	%rbx
+ **	.cfi_def_cfa_offset 32
+ **	.cfi_offset 3, -32
+ **	subq	\$160, %rsp
+ **	.cfi_def_cfa_offset 192
+ **	movaps	%xmm6, \(%rsp\)
+ **	movaps	%xmm7, 16\(%rsp\)
+ **	movaps	%xmm8, 32\(%rsp\)
+ **	movaps	%xmm9, 48\(%rsp\)
+ **	movaps	%xmm10, 64\(%rsp\)
+ **	movaps	%xmm11, 80\(%rsp\)
+ **	movaps	%xmm12, 96\(%rsp\)
+ **	movaps	%xmm13, 112\(%rsp\)
+ **	movaps	%xmm14, 128\(%rsp\)
+ **	movaps	%xmm15, 144\(%rsp\)
+ **	.cfi_offset 23, -192
+ **	.cfi_offset 24, -176
+ **	.cfi_offset 25, -160
+ **	.cfi_offset 26, -144
+ **	.cfi_offset 27, -128
+ **	.cfi_offset 28, -112
+ **	.cfi_offset 29, -96
+ **	.cfi_offset 30, -80
+ **	.cfi_offset 31, -64
+ **	.cfi_offset 32, -48
+ **	movl	%ecx, %ebx
+ **	leaq	tls_instance@tlsld\(%rip\), %rdi
+ **	call	__tls_get_addr@PLT
+ **	addl	%ebx, tls_instance@dtpoff\(%rax\)
+ **	movaps	\(%rsp\), %xmm6
+ **	movaps	16\(%rsp\), %xmm7
+ **	movaps	32\(%rsp\), %xmm8
+ **	movaps	48\(%rsp\), %xmm9
+ **	movaps	64\(%rsp\), %xmm10
+ **	movaps	80\(%rsp\), %xmm11
+ **	movaps	96\(%rsp\), %xmm12
+ **	movaps	112\(%rsp\), %xmm13
+ **	movaps	128\(%rsp\), %xmm14
+ **	movaps	144\(%rsp\), %xmm15
+ **	addq	\$160, %rsp
+ **	.cfi_restore 32
+ **	.cfi_restore 31
+ **	.cfi_restore 30
+ **	.cfi_restore 29
+ **	.cfi_restore 28
+ **	.cfi_restore 27
+ **	.cfi_restore 26
+ **	.cfi_restore 25
+ **	.cfi_restore 24
+ **	.cfi_restore 23
+ **	.cfi_def_cfa_offset 32
+ **	popq	%rbx
+ **	.cfi_restore 3
+ **	.cfi_def_cfa_offset 24
+ **	popq	%rsi
+ **	.cfi_restore 4
+ **	.cfi_def_cfa_offset 16
+ **	popq	%rdi
+ **	.cfi_restore 5
+ **	.cfi_def_cfa_offset 8
+ **	ret
+ **	.cfi_endproc
+ **...
+ */
+ 
+ static __thread int tls_instance = 0;
+ 
+ __attribute__ ((ms_abi))
+ void
+ ms_tls_access (int i)
+ {
+   tls_instance += i;
+ }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/i386/pr126098.c gcc-17-20260712/gcc/testsuite/gcc.target/i386/pr126098.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/i386/pr126098.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/i386/pr126098.c	Sun Jul 12 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* PR target/126098 */
+ /* { dg-do compile } */
+ /* { dg-options "-mavx512vnni -O3" } */
+ 
+ /* AVX512VNNI does not imply AVX512BW, so the byte (V64QI) dot-product must
+    not be advertised as available: emulating it needs vpmovsxbw on 512-bit
+    vectors, which requires AVX512BW.  Advertising it led to an unrecognizable
+    (sign_extend:V32HI (reg:V32QI)) insn and an ICE in extract_insn.  */
+ 
+ char *fn_c, *fn_d;
+ int fn() {
+   int res = 0;
+   for (int i = 0; i < 64; ++i)
+     res += fn_c[i] * fn_d[i];
+   return res;
+ }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/i386/pr126148.c gcc-17-20260712/gcc/testsuite/gcc.target/i386/pr126148.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/i386/pr126148.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/i386/pr126148.c	Sun Jul 12 22:32:15 2026
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do compile { target { ! ia32 } } } */
+ /* { dg-options "-O2 -ffast-math -mapxf -mno-80387 -mfpmath=387" } */
+ 
+ int foo (int a, double b) {
+   if (a || b)
+     return 1;
+   return 0;
+ }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/i386/pr48609-2.c gcc-17-20260712/gcc/testsuite/gcc.target/i386/pr48609-2.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/i386/pr48609-2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/i386/pr48609-2.c	Sun Jul 12 22:32:15 2026
***************
*** 0 ****
--- 1,17 ----
+ /* PR target/48609 */
+ /* { dg-do compile { target { ! ia32 } } } */
+ /* { dg-options "-O2" } */
+ 
+ _Complex float mem;
+ 
+ _Complex float foo(_Complex float x)
+ {
+   return x;
+ }
+ 
+ _Complex float bar()
+ {
+   return mem;
+ }
+ 
+ /* { dg-final { scan-assembler-not "%rsp" } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/i386/pr99668.c gcc-17-20260712/gcc/testsuite/gcc.target/i386/pr99668.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/i386/pr99668.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/i386/pr99668.c	Sun Jul 12 22:32:15 2026
***************
*** 0 ****
--- 1,12 ----
+ /* PR target/99668 */
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -msse2" } */
+ 
+ typedef double v2df __attribute__((vector_size(16)));
+ v2df foo (_Complex double x)
+ {
+   return *(v2df *)&x;
+ }
+ 
+ /* { dg-final { scan-assembler-not "\\tmovsd" } } */
+ /* { dg-final { scan-assembler-not "movupd" } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/i386/preserve-none-14.c gcc-17-20260712/gcc/testsuite/gcc.target/i386/preserve-none-14.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/i386/preserve-none-14.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/i386/preserve-none-14.c	Sun Jul 12 22:32:15 2026
*************** foo (fn_t bar)
*** 17,23 ****
  /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*%(?:e|r)bx" 1 } } */
  /* { dg-final { scan-assembler-not "push(?:l|q)\[\\t \]*%(?:e|r)cx" } } */
  /* { dg-final { scan-assembler-not "push(?:l|q)\[\\t \]*%(?:e|r)dx" } } */
- /* { dg-final { scan-assembler-not "push(?:l|q)\[\\t \]*%(?:e|r)bp" } } */
  /* { dg-final { scan-assembler-times "pushl\[\\t \]*%esi" 1 { target ia32 } } } */
  /* { dg-final { scan-assembler-not "pushq\[\\t \]*%rsi" { target { ! ia32 } } } } */
  /* { dg-final { scan-assembler-times "pushl\[\\t \]*%edi" 1 { target ia32 } } } */
--- 17,22 ----
*************** foo (fn_t bar)
*** 34,40 ****
  /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*%(?:e|r)bx" 1 } } */
  /* { dg-final { scan-assembler-not "pop(?:l|q)\[\\t \]*%(?:e|r)cx" } } */
  /* { dg-final { scan-assembler-not "pop(?:l|q)\[\\t \]*%(?:e|r)dx" } } */
- /* { dg-final { scan-assembler-not "pop(?:l|q)\[\\t \]*%(?:e|r)bp" } } */
  /* { dg-final { scan-assembler-times "popl\[\\t \]*%esi" 1 { target ia32 } } } */
  /* { dg-final { scan-assembler-not "popq\[\\t \]*%rsi" { target { ! ia32 } } } } */
  /* { dg-final { scan-assembler-times "popl\[\\t \]*%edi" 1 { target ia32 } } } */
--- 33,38 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/i386/preserve-none-23.c gcc-17-20260712/gcc/testsuite/gcc.target/i386/preserve-none-23.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/i386/preserve-none-23.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/i386/preserve-none-23.c	Sun Jul 12 22:32:15 2026
*************** foo (uintptr_t p)
*** 19,25 ****
  /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*%(?:e|r)bx" 1 } } */
  /* { dg-final { scan-assembler-not "push(?:l|q)\[\\t \]*%(?:e|r)cx" } } */
  /* { dg-final { scan-assembler-not "push(?:l|q)\[\\t \]*%(?:e|r)dx" } } */
- /* { dg-final { scan-assembler-not "push(?:l|q)\[\\t \]*%(?:e|r)bp" } } */
  /* { dg-final { scan-assembler-times "pushl\[\\t \]*%esi" 1 { target ia32 } } } */
  /* { dg-final { scan-assembler-not "pushq\[\\t \]*%rsi" { target { ! ia32 } } } } */
  /* { dg-final { scan-assembler-times "pushl\[\\t \]*%edi" 1 { target ia32 } } } */
--- 19,24 ----
*************** foo (uintptr_t p)
*** 36,42 ****
  /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*%(?:e|r)bx" 1 } } */
  /* { dg-final { scan-assembler-not "pop(?:l|q)\[\\t \]*%(?:e|r)cx" } } */
  /* { dg-final { scan-assembler-not "pop(?:l|q)\[\\t \]*%(?:e|r)dx" } } */
- /* { dg-final { scan-assembler-not "pop(?:l|q)\[\\t \]*%(?:e|r)bp" } } */
  /* { dg-final { scan-assembler-times "popl\[\\t \]*%esi" 1 { target ia32 } } } */
  /* { dg-final { scan-assembler-not "popq\[\\t \]*%rsi" { target { ! ia32 } } } } */
  /* { dg-final { scan-assembler-times "popl\[\\t \]*%edi" 1 { target ia32 } } } */
--- 35,40 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/i386/preserve-none-7.c gcc-17-20260712/gcc/testsuite/gcc.target/i386/preserve-none-7.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/i386/preserve-none-7.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/i386/preserve-none-7.c	Sun Jul 12 22:32:15 2026
*************** foo (void *frame)
*** 26,32 ****
    }
  }
  
! /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*%(?:e|r)bp" 1 } } */
! /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*%(?:e|r)bp" 1 } } */
! /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*" 1 } } */
! /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*" 1 } } */
--- 26,34 ----
    }
  }
  
! /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*%(?:e|r)bp" 1 { target ia32 } } } */
! /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*%(?:e|r)bp" 1 { target ia32 } } } */
! /* { dg-final { scan-assembler-times "push(?:l|q)\[\\t \]*" 1 { target ia32 } } } */
! /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*" 1 { target ia32 } } } */
! /* { dg-final { scan-assembler-not "push(?:l|q)\[\\t \]*" { target { ! ia32 } } } } */
! /* { dg-final { scan-assembler-not "pop(?:l|q)\[\\t \]*" { target { ! ia32 } } } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/or1k/pr126081.c gcc-17-20260712/gcc/testsuite/gcc.target/or1k/pr126081.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/or1k/pr126081.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/or1k/pr126081.c	Sun Jul 12 22:32:15 2026
***************
*** 0 ****
--- 1,8 ----
+ int option_mask32;
+ void xsocket(int);
+ enum { OPT_u = 1 << 3 };
+ 
+ void nc_main() {
+   int x = option_mask32 & OPT_u ? 2 : 1;
+   xsocket(x);
+ }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/powerpc/aes-builtin-1.c gcc-17-20260712/gcc/testsuite/gcc.target/powerpc/aes-builtin-1.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/powerpc/aes-builtin-1.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/powerpc/aes-builtin-1.c	Sun Jul 12 22:32:15 2026
***************
*** 1,4 ****
--- 1,6 ----
  /* { dg-do compile } */
+ /* { dg-require-effective-target powerpc_future_compile_ok } */
+ /* { dg-require-effective-target lp64 } */
  /* { dg-options "-mdejagnu-cpu=future -O2" } */
  
  void
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/powerpc/aes-builtin-2.c gcc-17-20260712/gcc/testsuite/gcc.target/powerpc/aes-builtin-2.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/powerpc/aes-builtin-2.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/powerpc/aes-builtin-2.c	Sun Jul 12 22:32:15 2026
***************
*** 1,4 ****
--- 1,6 ----
  /* { dg-do compile } */
+ /* { dg-require-effective-target powerpc_future_compile_ok } */
+ /* { dg-require-effective-target lp64 } */
  /* { dg-options "-mdejagnu-cpu=future -O2" } */
  
  typedef unsigned char vec_t __attribute__((vector_size(16)));
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/powerpc/aes-builtin-3.c gcc-17-20260712/gcc/testsuite/gcc.target/powerpc/aes-builtin-3.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/powerpc/aes-builtin-3.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/powerpc/aes-builtin-3.c	Sun Jul 12 22:32:15 2026
***************
*** 1,4 ****
--- 1,6 ----
  /* { dg-do compile } */
+ /* { dg-require-effective-target powerpc_future_compile_ok } */
+ /* { dg-require-effective-target lp64 } */
  /* { dg-options "-mdejagnu-cpu=future -O2" } */
  
  void
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/powerpc/future-vucmpr-altivec.c gcc-17-20260712/gcc/testsuite/gcc.target/powerpc/future-vucmpr-altivec.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/powerpc/future-vucmpr-altivec.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/powerpc/future-vucmpr-altivec.c	Sun Jul 12 22:32:15 2026
***************
*** 0 ****
--- 1,49 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mdejagnu-cpu=future -mno-vsx" } */
+ /* { dg-require-effective-target powerpc_future_compile_ok } */
+ 
+ #include <altivec.h>
+ 
+ vector unsigned short
+ test_uncompresshn (vector unsigned char a,
+                    vector unsigned int b)
+ {
+   return vec_uncompresshn (a, b);
+ }
+ 
+ vector unsigned int
+ test_uncompresshb (vector unsigned short a,
+                    vector unsigned short b)
+ {
+   return vec_uncompresshb (a, b);
+ }
+ 
+ vector unsigned short
+ test_uncompressln (vector unsigned char a,
+                    vector unsigned int b)
+ {
+   return vec_uncompressln (a, b);
+ }
+ 
+ vector unsigned int
+ test_uncompresslb (vector unsigned short a,
+                    vector unsigned short b)
+ {
+   return vec_uncompresslb (a, b);
+ }
+ 
+ /* { dg-final { scan-assembler-not "vxor" { target { be } } } } */
+ /* { dg-final { scan-assembler-not "vinsw" { target { be } } } } */
+ /* { dg-final { scan-assembler-not "vperm" { target { be } } } } */
+ 
+ 
+ /* { dg-final { scan-assembler-times "vxor" 4 { target { le } } } } */
+ /* { dg-final { scan-assembler-times "vinsw" 4 { target { le } } } } */
+ /* { dg-final { scan-assembler-times "vperm" 4 { target { le } } } } */
+ /* { dg-final { scan-assembler-times "vrlb" 4 { target { le } } } } */
+ /* { dg-final { scan-assembler-times "vspltisb" 4 { target { le } } } } */
+ 
+ /* Final uncompress instructions.  */
+ 
+ /* { dg-final { scan-assembler-times {vucmpr[lh][nb]} 4 } } */
+ 
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/powerpc/future-vucmpr-vsx.c gcc-17-20260712/gcc/testsuite/gcc.target/powerpc/future-vucmpr-vsx.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/powerpc/future-vucmpr-vsx.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/powerpc/future-vucmpr-vsx.c	Sun Jul 12 22:32:15 2026
***************
*** 0 ****
--- 1,61 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mdejagnu-cpu=future -mvsx" } */
+ /* { dg-require-effective-target powerpc_future_compile_ok } */
+ 
+ #include <altivec.h>
+ 
+ vector unsigned short test_uncompresshn(vector unsigned char a,
+                                         vector unsigned int b)
+ {
+   return vec_uncompresshn(a, b);
+ }
+ 
+ vector unsigned int test_uncompresshb(vector unsigned short a,
+                                       vector unsigned short b)
+ {
+   return vec_uncompresshb(a, b);
+ }
+ 
+ vector unsigned long long test_uncompresshh(vector unsigned int a,
+                                             vector unsigned char b)
+ {
+   return vec_uncompresshh(a, b);
+ }
+ 
+ vector unsigned short test_uncompressln(vector unsigned char a,
+                                         vector unsigned int b)
+ {
+   return vec_uncompressln(a, b);
+ }
+ 
+ vector unsigned int test_uncompresslb(vector unsigned short a,
+                                       vector unsigned short b)
+ {
+   return vec_uncompresslb(a, b);
+ }
+ 
+ vector unsigned long long test_uncompresslh(vector unsigned int a,
+                                             vector unsigned char b)
+ {
+   return vec_uncompresslh(a, b);
+ }
+ 
+ /* BE: direct instructions, no splats or reverse. */
+ 
+ /* { dg-final { scan-assembler-not {vsplt[whb]} { target { be } } } } */
+ /* { dg-final { scan-assembler-not {xxspltib} { target { be } } } } */
+ /* { dg-final { scan-assembler-not {xxbr[wh]\M} { target { be } } } } */
+ /* { dg-final { scan-assembler-not {vrlb} { target { be } } } } */
+ 
+ /* LE: splats and reverse-byte + rotate must appear. */
+ 
+ /* { dg-final { scan-assembler-times {vsplt[whb]} 6 { target { le } } } } */
+ 
+ /* { dg-final { scan-assembler-times "xxspltib" 6 { target { le } } } } */
+ 
+ /* { dg-final { scan-assembler-times {xxbr[wh]} 4 { target { le } } } } */
+ 
+ /* { dg-final { scan-assembler-times "vrlb" 6 { target { le } } } } */
+ 
+ /* { dg-final { scan-assembler-times {vucmpr[lh][nbh]} 6 } } */
+ 
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/powerpc/future-vupk.c gcc-17-20260712/gcc/testsuite/gcc.target/powerpc/future-vupk.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/powerpc/future-vupk.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/powerpc/future-vupk.c	Sun Jul 12 22:32:15 2026
***************
*** 0 ****
--- 1,51 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mdejagnu-cpu=future" } */
+ /* { dg-require-effective-target powerpc_future_compile_ok } */
+ 
+ #include <altivec.h>
+ 
+ vector signed char
+ test_unpack_hsn_to_byte(vector unsigned long long a)
+ {
+   return vec_unpack_hsn_to_byte(a);
+ }
+ 
+ vector signed char
+ test_unpack_lsn_to_byte(vector unsigned long long a)
+ {
+   return vec_unpack_lsn_to_byte(a);
+ }
+ 
+ vector unsigned char
+ test_unpack_int4_to_bf16(vector unsigned short a)
+ {
+   return vec_unpack_int4_to_bf16(a, 0);
+ }
+ 
+ vector unsigned char
+ test_unpack_int8_to_bf16(vector unsigned short a)
+ {
+   return vec_unpack_int8_to_bf16(a, 0);
+ }
+ 
+ vector float
+ test_unpack_int4_to_fp32(vector unsigned int a)
+ {
+   return vec_unpack_int4_to_fp32(a, 0);
+ }
+ 
+ vector float
+ test_unpack_int8_to_fp32(vector unsigned int a)
+ {
+   return vec_unpack_int8_to_fp32(a, 0);
+ }
+ 
+ 
+ /* { dg-final { scan-assembler-times "xxbrq" 2 { target { vsx_hw && le } }  } } */
+ 
+ /* { dg-final { scan-assembler-times "vupkhsntob" 1  } } */
+ /* { dg-final { scan-assembler-times "vupklsntob" 1  } } */
+ /* { dg-final { scan-assembler-times "vupkint4tobf16" 1 } } */
+ /* { dg-final { scan-assembler-times "vupkint8tobf16" 1 } } */
+ /* { dg-final { scan-assembler-times "vupkint4tofp32" 1 } } */
+ /* { dg-final { scan-assembler-times "vupkint8tofp32" 1 } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/ext-dce-4.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/ext-dce-4.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/ext-dce-4.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/ext-dce-4.c	Sun Jul 12 22:32:16 2026
*************** test_byte (signed char *p)
*** 40,46 ****
  int
  test_half_sign_needed (signed short *p)
  {
!   return *p >> 8;
  }
  
  /*
--- 40,46 ----
  int
  test_half_sign_needed (signed short *p)
  {
!   return *p >> 4;
  }
  
  /*
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/mcpu-spacemit-x60.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/mcpu-spacemit-x60.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/mcpu-spacemit-x60.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/mcpu-spacemit-x60.c	Sun Jul 12 22:32:16 2026
***************
*** 0 ****
--- 1,57 ----
+ /* { dg-do compile } */
+ /* { dg-skip-if "-march given" { *-*-* } { "-march=*" } } */
+ /* { dg-options "-mcpu=spacemit-x60" { target { rv64 } } } */
+ /* Spacemit X60 => rva22u64_v_zicond_zifencei_zihintntl_zihpm_zfh_zbc_
+  * zbkc_zvfh_zvfhmin_zvkt_zvl256b_smepmp_sscofpmf_sstc_svinval_svnapot_
+  * svpbmt_xsmtvdot
+  */
+ 
+ #if !((__riscv_xlen == 64)		\
+       && !defined(__riscv_32e)		\
+       && defined(__riscv_mul)		\
+       && defined(__riscv_atomic)	\
+       && (__riscv_flen == 64)		\
+       && defined(__riscv_compressed)	\
+       && defined(__riscv_v)		\
+       && defined(__riscv_zic64b)	\
+       && defined(__riscv_zba)		\
+       && defined(__riscv_zbb)		\
+       && defined(__riscv_zbc)		\
+       && defined(__riscv_zbs)		\
+       && defined(__riscv_zfh)		\
+       && defined(__riscv_zfhmin)	\
+       && defined(__riscv_ziccamoa)	\
+       && defined(__riscv_ziccif)	\
+       && defined(__riscv_zicclsm)	\
+       && defined(__riscv_ziccrse)	\
+       && defined(__riscv_zicsr)		\
+       && defined(__riscv_zifencei)	\
+       && defined(__riscv_zihintntl)	\
+       && defined(__riscv_svpbmt)	\
+       && defined(__riscv_smepmp)	\
+       && defined(__riscv_sstc)		\
+       && defined(__riscv_sscofpmf)	\
+       && defined(__riscv_zicond)	\
+       && defined(__riscv_zicboz)	\
+       && defined(__riscv_zicbom)	\
+       && defined(__riscv_zicbop)	\
+       && defined(__riscv_zicntr)	\
+       && defined(__riscv_zihpm)		\
+       && defined(__riscv_za64rs)	\
+       && defined(__riscv_zkt)		\
+       && defined(__riscv_svinval)	\
+       && defined(__riscv_svnapot)	\
+       && defined(__riscv_zihintpause)	\
+       && defined(__riscv_zbkc)		\
+       && defined(__riscv_zvfh)		\
+       && defined(__riscv_zvfhmin)	\
+       && defined(__riscv_zvkt)		\
+       && defined(__riscv_zvl256b)	\
+       && defined(__riscv_xsmtvdot))
+ #error "unexpected arch"
+ #endif
+ 
+ int main()
+ {
+   return 0;
+ }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/pr67731.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/pr67731.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/pr67731.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/pr67731.c	Sun Jul 12 22:32:16 2026
***************
*** 1,6 ****
  /* { dg-do compile } */
! /* { dg-options "-O2 -march=rv64gcbv -mabi=lp64d" { target { rv64 } } } */
! /* { dg-options "-O2 -march=rv32gcbv -mabi=ilp32" { target { rv32 } } } */
  
  typedef struct
  {
--- 1,6 ----
  /* { dg-do compile } */
! /* { dg-options "-O2 -march=rv64gcbv -mabi=lp64d -fno-unroll-loops" { target { rv64 } } } */
! /* { dg-options "-O2 -march=rv32gcbv -mabi=ilp32 -fno-unroll-loops" { target { rv32 } } } */
  
  typedef struct
  {
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/group_overlap.h gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/group_overlap.h
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/group_overlap.h	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/group_overlap.h	Sun Jul 12 22:32:16 2026
***************
*** 0 ****
--- 1,131 ----
+ #ifndef HAVE_DEFINED_GROUP_OVERLAP_H
+ #define HAVE_DEFINED_GROUP_OVERLAP_H
+ 
+ #include <stdint.h>
+ #include <stdbool.h>
+ #include <riscv_vector.h>
+ 
+ #define LOOP_UNARY_BODY_X4(NT, WT, LD_F, OUT_F, ST_F, OUT, START, VL)  \
+     NT vs0 = LD_F ((void *)START, VL); START += VL;                    \
+     NT vs1 = LD_F ((void *)START, VL); START += VL;                    \
+     NT vs2 = LD_F ((void *)START, VL); START += VL;                    \
+     NT vs3 = LD_F ((void *)START, VL); START += VL;                    \
+                                                                        \
+     asm volatile("nop" ::: "memory");                                  \
+                                                                        \
+     WT vd0 = OUT_F (vs0, VL);                                          \
+     WT vd1 = OUT_F (vs1, VL);                                          \
+     WT vd2 = OUT_F (vs2, VL);                                          \
+     WT vd3 = OUT_F (vs3, VL);                                          \
+                                                                        \
+     asm volatile("nop" ::: "memory");                                  \
+                                                                        \
+     ST_F ((void *)out, vd0, VL); OUT += VL;                            \
+     ST_F ((void *)out, vd1, VL); OUT += VL;                            \
+     ST_F ((void *)out, vd2, VL); OUT += VL;                            \
+     ST_F ((void *)out, vd3, VL); OUT += VL;                            \
+ 
+ #define LOOP_UNARY_BODY_X8(NT, WT, LD_F, OUT_F, ST_F, OUT, START, VL)  \
+     NT vs0 = LD_F ((void *)START, VL); START += VL;                    \
+     NT vs1 = LD_F ((void *)START, VL); START += VL;                    \
+     NT vs2 = LD_F ((void *)START, VL); START += VL;                    \
+     NT vs3 = LD_F ((void *)START, VL); START += VL;                    \
+     NT vs4 = LD_F ((void *)START, VL); START += VL;                    \
+     NT vs5 = LD_F ((void *)START, VL); START += VL;                    \
+     NT vs6 = LD_F ((void *)START, VL); START += VL;                    \
+     NT vs7 = LD_F ((void *)START, VL); START += VL;                    \
+                                                                        \
+     asm volatile("nop" ::: "memory");                                  \
+                                                                        \
+     WT vd0 = OUT_F (vs0, VL);                                          \
+     WT vd1 = OUT_F (vs1, VL);                                          \
+     WT vd2 = OUT_F (vs2, VL);                                          \
+     WT vd3 = OUT_F (vs3, VL);                                          \
+     WT vd4 = OUT_F (vs4, VL);                                          \
+     WT vd5 = OUT_F (vs5, VL);                                          \
+     WT vd6 = OUT_F (vs6, VL);                                          \
+     WT vd7 = OUT_F (vs7, VL);                                          \
+                                                                        \
+     asm volatile("nop" ::: "memory");                                  \
+                                                                        \
+     ST_F ((void *)out, vd0, VL); OUT += VL;                            \
+     ST_F ((void *)out, vd1, VL); OUT += VL;                            \
+     ST_F ((void *)out, vd2, VL); OUT += VL;                            \
+     ST_F ((void *)out, vd3, VL); OUT += VL;                            \
+     ST_F ((void *)out, vd4, VL); OUT += VL;                            \
+     ST_F ((void *)out, vd5, VL); OUT += VL;                            \
+     ST_F ((void *)out, vd6, VL); OUT += VL;                            \
+     ST_F ((void *)out, vd7, VL); OUT += VL;                            \
+ 
+ #define LOOP_UNARY_BODY_X16(NT, WT, LD_F, OUT_F, ST_F, OUT, START, VL) \
+     NT vs0 = LD_F ((void *)START, VL); START += VL;                    \
+     NT vs1 = LD_F ((void *)START, VL); START += VL;                    \
+     NT vs2 = LD_F ((void *)START, VL); START += VL;                    \
+     NT vs3 = LD_F ((void *)START, VL); START += VL;                    \
+     NT vs4 = LD_F ((void *)START, VL); START += VL;                    \
+     NT vs5 = LD_F ((void *)START, VL); START += VL;                    \
+     NT vs6 = LD_F ((void *)START, VL); START += VL;                    \
+     NT vs7 = LD_F ((void *)START, VL); START += VL;                    \
+     NT vs8 = LD_F ((void *)START, VL); START += VL;                    \
+     NT vs9 = LD_F ((void *)START, VL); START += VL;                    \
+     NT vs10 = LD_F ((void *)START, VL); START += VL;                   \
+     NT vs11 = LD_F ((void *)START, VL); START += VL;                   \
+     NT vs12 = LD_F ((void *)START, VL); START += VL;                   \
+     NT vs13 = LD_F ((void *)START, VL); START += VL;                   \
+     NT vs14 = LD_F ((void *)START, VL); START += VL;                   \
+     NT vs15 = LD_F ((void *)START, VL); START += VL;                   \
+                                                                        \
+     asm volatile("nop" ::: "memory");                                  \
+                                                                        \
+     WT vd0 = OUT_F (vs0, VL);                                          \
+     WT vd1 = OUT_F (vs1, VL);                                          \
+     WT vd2 = OUT_F (vs2, VL);                                          \
+     WT vd3 = OUT_F (vs3, VL);                                          \
+     WT vd4 = OUT_F (vs4, VL);                                          \
+     WT vd5 = OUT_F (vs5, VL);                                          \
+     WT vd6 = OUT_F (vs6, VL);                                          \
+     WT vd7 = OUT_F (vs7, VL);                                          \
+     WT vd8 = OUT_F (vs8, VL);                                          \
+     WT vd9 = OUT_F (vs9, VL);                                          \
+     WT vd10 = OUT_F (vs10, VL);                                        \
+     WT vd11 = OUT_F (vs11, VL);                                        \
+     WT vd12 = OUT_F (vs12, VL);                                        \
+     WT vd13 = OUT_F (vs13, VL);                                        \
+     WT vd14 = OUT_F (vs14, VL);                                        \
+     WT vd15 = OUT_F (vs15, VL);                                        \
+                                                                        \
+     asm volatile("nop" ::: "memory");                                  \
+                                                                        \
+     ST_F ((void *)out, vd0, VL); OUT += VL;                            \
+     ST_F ((void *)out, vd1, VL); OUT += VL;                            \
+     ST_F ((void *)out, vd2, VL); OUT += VL;                            \
+     ST_F ((void *)out, vd3, VL); OUT += VL;                            \
+     ST_F ((void *)out, vd4, VL); OUT += VL;                            \
+     ST_F ((void *)out, vd5, VL); OUT += VL;                            \
+     ST_F ((void *)out, vd6, VL); OUT += VL;                            \
+     ST_F ((void *)out, vd7, VL); OUT += VL;                            \
+     ST_F ((void *)out, vd8, VL); OUT += VL;                            \
+     ST_F ((void *)out, vd9, VL); OUT += VL;                            \
+     ST_F ((void *)out, vd10, VL); OUT += VL;                           \
+     ST_F ((void *)out, vd11, VL); OUT += VL;                           \
+     ST_F ((void *)out, vd12, VL); OUT += VL;                           \
+     ST_F ((void *)out, vd13, VL); OUT += VL;                           \
+     ST_F ((void *)out, vd14, VL); OUT += VL;                           \
+     ST_F ((void *)out, vd15, VL); OUT += VL;                           \
+ 
+ #define DEF_GROUP_OVERLAP_UNARY_0(VL_F, NT, WT, LD_F, OUT_F, ST_F, NAME, \
+ 				  LOOP_BODY)                             \
+   void test_group_overlap_##NAME##_##NT##_unary_0(uint8_t *data,         \
+ 						 uint8_t *out,           \
+ 						 size_t limit)           \
+   {                                                                      \
+     uint8_t *start = data;                                               \
+     uint8_t *end = data + limit;                                         \
+     size_t vl = VL_F ();                                                 \
+                                                                          \
+     while (start < end) {                                                \
+       LOOP_BODY (NT, WT, LD_F, OUT_F, ST_F, out, start, vl);             \
+     }                                                                    \
+   }
+ 
+ #endif
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i16-m1.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i16-m1.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i16-m1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i16-m1.c	Sun Jul 12 22:32:16 2026
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_UNARY_0(
+   __riscv_vsetvlmax_e16m1,
+   vint16m1_t,
+   vint32m2_t,
+   __riscv_vle16_v_i16m1,
+   __riscv_vsext_vf2_i32m2,
+   __riscv_vse32_v_i32m2,
+   vsext_vf,
+   LOOP_UNARY_BODY_X16)
+ 
+ /* { dg-final { scan-assembler-times {vsext\.vf2\s+v0,v1([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vsext\.vf2\s+v2,v3([^0-9]|$)} 1 } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i16-m2.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i16-m2.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i16-m2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i16-m2.c	Sun Jul 12 22:32:16 2026
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_UNARY_0(
+   __riscv_vsetvlmax_e16m2,
+   vint16m2_t,
+   vint32m4_t,
+   __riscv_vle16_v_i16m2,
+   __riscv_vsext_vf2_i32m4,
+   __riscv_vse32_v_i32m4,
+   vsext_vf,
+   LOOP_UNARY_BODY_X8)
+ 
+ /* { dg-final { scan-assembler-times {vsext\.vf2\s+v0,v2([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vsext\.vf2\s+v4,v6} 1 } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i16-m4.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i16-m4.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i16-m4.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i16-m4.c	Sun Jul 12 22:32:16 2026
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_UNARY_0(
+   __riscv_vsetvlmax_e16m4,
+   vint16m4_t,
+   vint32m8_t,
+   __riscv_vle16_v_i16m4,
+   __riscv_vsext_vf2_i32m8,
+   __riscv_vse32_v_i32m8,
+   vsext_vf,
+   LOOP_UNARY_BODY_X4)
+ 
+ /* { dg-final { scan-assembler-times {vsext\.vf2\s+v0,v4([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vsext\.vf2\s+v8,v12} 1 } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i16-mf2.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i16-mf2.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i16-mf2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i16-mf2.c	Sun Jul 12 22:32:16 2026
***************
*** 0 ****
--- 1,31 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_UNARY_0(
+   __riscv_vsetvlmax_e16m1,
+   vint16mf2_t,
+   vint32m1_t,
+   __riscv_vle16_v_i16mf2,
+   __riscv_vsext_vf2_i32m1,
+   __riscv_vse32_v_i32m1,
+   vsext_vf,
+   LOOP_UNARY_BODY_X16)
+ 
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v0,v1([^0-9]|$)} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v2,v3([^0-9]|$)} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v4,v5} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v6,v7} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v8,v9} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v10,v11} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v12,v13} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v14,v15} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v16,v17} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v18,v19} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v20,v21} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v22,v23} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v24,v25} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v26,v27} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v28,v29} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v30,v31} } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i16-mf4.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i16-mf4.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i16-mf4.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i16-mf4.c	Sun Jul 12 22:32:16 2026
***************
*** 0 ****
--- 1,31 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_UNARY_0(
+   __riscv_vsetvlmax_e16m1,
+   vint16mf4_t,
+   vint32mf2_t,
+   __riscv_vle16_v_i16mf4,
+   __riscv_vsext_vf2_i32mf2,
+   __riscv_vse32_v_i32mf2,
+   vsext_vf,
+   LOOP_UNARY_BODY_X16)
+ 
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v0,v1([^0-9]|$)} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v2,v3([^0-9]|$)} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v4,v5} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v6,v7} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v8,v9} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v10,v11} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v12,v13} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v14,v15} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v16,v17} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v18,v19} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v20,v21} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v22,v23} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v24,v25} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v26,v27} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v28,v29} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v30,v31} } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i32-m1.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i32-m1.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i32-m1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i32-m1.c	Sun Jul 12 22:32:16 2026
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_UNARY_0(
+   __riscv_vsetvlmax_e32m1,
+   vint32m1_t,
+   vint64m2_t,
+   __riscv_vle32_v_i32m1,
+   __riscv_vsext_vf2_i64m2,
+   __riscv_vse64_v_i64m2,
+   vsext_vf,
+   LOOP_UNARY_BODY_X16)
+ 
+ /* { dg-final { scan-assembler-times {vsext\.vf2\s+v0,v1([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vsext\.vf2\s+v2,v3([^0-9]|$)} 1 } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i32-m2.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i32-m2.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i32-m2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i32-m2.c	Sun Jul 12 22:32:16 2026
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_UNARY_0(
+   __riscv_vsetvlmax_e32m2,
+   vint32m2_t,
+   vint64m4_t,
+   __riscv_vle32_v_i32m2,
+   __riscv_vsext_vf2_i64m4,
+   __riscv_vse64_v_i64m4,
+   vsext_vf,
+   LOOP_UNARY_BODY_X8)
+ 
+ /* { dg-final { scan-assembler-times {vsext\.vf2\s+v0,v2([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vsext\.vf2\s+v4,v6} 1 } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i32-m4.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i32-m4.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i32-m4.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i32-m4.c	Sun Jul 12 22:32:16 2026
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_UNARY_0(
+   __riscv_vsetvlmax_e32m4,
+   vint32m4_t,
+   vint64m8_t,
+   __riscv_vle32_v_i32m4,
+   __riscv_vsext_vf2_i64m8,
+   __riscv_vse64_v_i64m8,
+   vsext_vf,
+   LOOP_UNARY_BODY_X4)
+ 
+ /* { dg-final { scan-assembler-times {vsext\.vf2\s+v0,v4} 1 } } */
+ /* { dg-final { scan-assembler-times {vsext\.vf2\s+v8,v12} 1 } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i32-mf2.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i32-mf2.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i32-mf2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i32-mf2.c	Sun Jul 12 22:32:16 2026
***************
*** 0 ****
--- 1,31 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_UNARY_0(
+   __riscv_vsetvlmax_e32m1,
+   vint32mf2_t,
+   vint64m1_t,
+   __riscv_vle32_v_i32mf2,
+   __riscv_vsext_vf2_i64m1,
+   __riscv_vse64_v_i64m1,
+   vsext_vf,
+   LOOP_UNARY_BODY_X16)
+ 
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v0,v1([^0-9]|$)} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v2,v3([^0-9]|$)} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v4,v5} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v6,v7} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v8,v9} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v10,v11} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v12,v13} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v14,v15} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v16,v17} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v18,v19} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v20,v21} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v22,v23} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v24,v25} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v26,v27} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v28,v29} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v30,v31} } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i8-m1.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i8-m1.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i8-m1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i8-m1.c	Sun Jul 12 22:32:16 2026
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_UNARY_0(
+   __riscv_vsetvlmax_e8m1,
+   vint8m1_t,
+   vint16m2_t,
+   __riscv_vle8_v_i8m1,
+   __riscv_vsext_vf2_i16m2,
+   __riscv_vse16_v_i16m2,
+   vsext_vf,
+   LOOP_UNARY_BODY_X16)
+ 
+ /* { dg-final { scan-assembler-times {vsext\.vf2\s+v0,v1([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vsext\.vf2\s+v2,v3([^0-9]|$)} 1 } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i8-m2.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i8-m2.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i8-m2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i8-m2.c	Sun Jul 12 22:32:16 2026
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_UNARY_0(
+   __riscv_vsetvlmax_e8m2,
+   vint8m2_t,
+   vint16m4_t,
+   __riscv_vle8_v_i8m2,
+   __riscv_vsext_vf2_i16m4,
+   __riscv_vse16_v_i16m4,
+   vsext_vf,
+   LOOP_UNARY_BODY_X8)
+ 
+ /* { dg-final { scan-assembler-times {vsext\.vf2\s+v0,v2([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vsext\.vf2\s+v4,v6} 1 } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i8-m4.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i8-m4.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i8-m4.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i8-m4.c	Sun Jul 12 22:32:16 2026
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_UNARY_0(
+   __riscv_vsetvlmax_e8m4,
+   vint8m4_t,
+   vint16m8_t,
+   __riscv_vle8_v_i8m4,
+   __riscv_vsext_vf2_i16m8,
+   __riscv_vse16_v_i16m8,
+   vsext_vf,
+   LOOP_UNARY_BODY_X4)
+ 
+ /* { dg-final { scan-assembler-times {vsext\.vf2\s+v0,v4} 1 } } */
+ /* { dg-final { scan-assembler-times {vsext\.vf2\s+v8,v12} 1 } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i8-mf2.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i8-mf2.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i8-mf2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i8-mf2.c	Sun Jul 12 22:32:16 2026
***************
*** 0 ****
--- 1,31 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_UNARY_0(
+   __riscv_vsetvlmax_e8m1,
+   vint8mf2_t,
+   vint16m1_t,
+   __riscv_vle8_v_i8mf2,
+   __riscv_vsext_vf2_i16m1,
+   __riscv_vse16_v_i16m1,
+   vsext_vf,
+   LOOP_UNARY_BODY_X16)
+ 
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v0,v1([^0-9]|$)} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v2,v3([^0-9]|$)} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v4,v5} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v6,v7} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v8,v9} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v10,v11} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v12,v13} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v14,v15} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v16,v17} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v18,v19} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v20,v21} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v22,v23} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v24,v25} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v26,v27} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v28,v29} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v30,v31} } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i8-mf4.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i8-mf4.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i8-mf4.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i8-mf4.c	Sun Jul 12 22:32:16 2026
***************
*** 0 ****
--- 1,31 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_UNARY_0(
+   __riscv_vsetvlmax_e8m1,
+   vint8mf4_t,
+   vint16mf2_t,
+   __riscv_vle8_v_i8mf4,
+   __riscv_vsext_vf2_i16mf2,
+   __riscv_vse16_v_i16mf2,
+   vsext_vf,
+   LOOP_UNARY_BODY_X16)
+ 
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v0,v1([^0-9]|$)} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v2,v3([^0-9]|$)} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v4,v5} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v6,v7} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v8,v9} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v10,v11} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v12,v13} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v14,v15} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v16,v17} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v18,v19} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v20,v21} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v22,v23} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v24,v25} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v26,v27} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v28,v29} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v30,v31} } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i8-mf8.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i8-mf8.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i8-mf8.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf2-i8-mf8.c	Sun Jul 12 22:32:16 2026
***************
*** 0 ****
--- 1,31 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_UNARY_0(
+   __riscv_vsetvlmax_e8m1,
+   vint8mf8_t,
+   vint16mf4_t,
+   __riscv_vle8_v_i8mf8,
+   __riscv_vsext_vf2_i16mf4,
+   __riscv_vse16_v_i16mf4,
+   vsext_vf,
+   LOOP_UNARY_BODY_X16)
+ 
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v0,v1([^0-9]|$)} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v2,v3([^0-9]|$)} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v4,v5} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v6,v7} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v8,v9} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v10,v11} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v12,v13} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v14,v15} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v16,v17} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v18,v19} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v20,v21} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v22,v23} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v24,v25} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v26,v27} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v28,v29} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf2\s+v30,v31} } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf4-i16-m1.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf4-i16-m1.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf4-i16-m1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf4-i16-m1.c	Sun Jul 12 22:32:16 2026
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_UNARY_0(
+   __riscv_vsetvlmax_e16m1,
+   vint16m1_t,
+   vint64m4_t,
+   __riscv_vle16_v_i16m1,
+   __riscv_vsext_vf4_i64m4,
+   __riscv_vse64_v_i64m4,
+   vsext_vf,
+   LOOP_UNARY_BODY_X8)
+ 
+ /* { dg-final { scan-assembler-times {vsext\.vf4\s+v0,v3([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vsext\.vf4\s+v4,v7} 1 } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf4-i16-m2.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf4-i16-m2.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf4-i16-m2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf4-i16-m2.c	Sun Jul 12 22:32:16 2026
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_UNARY_0(
+   __riscv_vsetvlmax_e16m2,
+   vint16m2_t,
+   vint64m8_t,
+   __riscv_vle16_v_i16m2,
+   __riscv_vsext_vf4_i64m8,
+   __riscv_vse64_v_i64m8,
+   vsext_vf,
+   LOOP_UNARY_BODY_X4)
+ 
+ /* { dg-final { scan-assembler-times {vsext\.vf4\s+v0,v6} 1 } } */
+ /* { dg-final { scan-assembler-times {vsext\.vf4\s+v8,v14} 1 } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf4-i16-mf2.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf4-i16-mf2.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf4-i16-mf2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf4-i16-mf2.c	Sun Jul 12 22:32:16 2026
***************
*** 0 ****
--- 1,23 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_UNARY_0(
+   __riscv_vsetvlmax_e16m1,
+   vint16mf2_t,
+   vint64m2_t,
+   __riscv_vle16_v_i16mf2,
+   __riscv_vsext_vf4_i64m2,
+   __riscv_vse64_v_i64m2,
+   vsext_vf,
+   LOOP_UNARY_BODY_X16)
+ 
+ /* { dg-final { scan-assembler-not {vsext\.vf4\s+v0,v3([^0-9]|$)} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf4\s+v4,v7} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf4\s+v8,v11} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf4\s+v12,v15} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf4\s+v16,v19} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf4\s+v20,v23} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf4\s+v24,v27} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf4\s+v28,v31} } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf4-i16-mf4.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf4-i16-mf4.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf4-i16-mf4.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf4-i16-mf4.c	Sun Jul 12 22:32:16 2026
***************
*** 0 ****
--- 1,23 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_UNARY_0(
+   __riscv_vsetvlmax_e16m1,
+   vint16mf4_t,
+   vint64m1_t,
+   __riscv_vle16_v_i16mf4,
+   __riscv_vsext_vf4_i64m1,
+   __riscv_vse64_v_i64m1,
+   vsext_vf,
+   LOOP_UNARY_BODY_X16)
+ 
+ /* { dg-final { scan-assembler-not {vsext\.vf4\s+v0,v3([^0-9]|$)} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf4\s+v4,v7} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf4\s+v8,v11} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf4\s+v12,v15} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf4\s+v16,v19} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf4\s+v20,v23} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf4\s+v24,v27} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf4\s+v28,v31} } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf4-i8-m1.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf4-i8-m1.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf4-i8-m1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf4-i8-m1.c	Sun Jul 12 22:32:16 2026
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_UNARY_0(
+   __riscv_vsetvlmax_e8m1,
+   vint8m1_t,
+   vint32m4_t,
+   __riscv_vle8_v_i8m1,
+   __riscv_vsext_vf4_i32m4,
+   __riscv_vse32_v_i32m4,
+   vsext_vf,
+   LOOP_UNARY_BODY_X8)
+ 
+ /* { dg-final { scan-assembler-times {vsext\.vf4\s+v0,v3([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vsext\.vf4\s+v4,v7} 1 } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf4-i8-m2.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf4-i8-m2.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf4-i8-m2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf4-i8-m2.c	Sun Jul 12 22:32:16 2026
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_UNARY_0(
+   __riscv_vsetvlmax_e8m2,
+   vint8m2_t,
+   vint32m8_t,
+   __riscv_vle8_v_i8m2,
+   __riscv_vsext_vf4_i32m8,
+   __riscv_vse32_v_i32m8,
+   vsext_vf,
+   LOOP_UNARY_BODY_X4)
+ 
+ /* { dg-final { scan-assembler-times {vsext\.vf4\s+v0,v6} 1 } } */
+ /* { dg-final { scan-assembler-times {vsext\.vf4\s+v8,v14} 1 } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf4-i8-mf2.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf4-i8-mf2.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf4-i8-mf2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf4-i8-mf2.c	Sun Jul 12 22:32:16 2026
***************
*** 0 ****
--- 1,23 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_UNARY_0(
+   __riscv_vsetvlmax_e8m1,
+   vint8mf2_t,
+   vint32m2_t,
+   __riscv_vle8_v_i8mf2,
+   __riscv_vsext_vf4_i32m2,
+   __riscv_vse32_v_i32m2,
+   vsext_vf,
+   LOOP_UNARY_BODY_X16)
+ 
+ /* { dg-final { scan-assembler-not {vsext\.vf4\s+v0,v3([^0-9]|$)} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf4\s+v4,v7} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf4\s+v8,v11} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf4\s+v12,v15} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf4\s+v16,v19} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf4\s+v20,v23} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf4\s+v24,v27} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf4\s+v28,v31} } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf4-i8-mf4.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf4-i8-mf4.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf4-i8-mf4.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf4-i8-mf4.c	Sun Jul 12 22:32:16 2026
***************
*** 0 ****
--- 1,23 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_UNARY_0(
+   __riscv_vsetvlmax_e8m1,
+   vint8mf4_t,
+   vint32m1_t,
+   __riscv_vle8_v_i8mf4,
+   __riscv_vsext_vf4_i32m1,
+   __riscv_vse32_v_i32m1,
+   vsext_vf,
+   LOOP_UNARY_BODY_X16)
+ 
+ /* { dg-final { scan-assembler-not {vsext\.vf4\s+v0,v3([^0-9]|$)} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf4\s+v4,v7} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf4\s+v8,v11} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf4\s+v12,v15} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf4\s+v16,v19} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf4\s+v20,v23} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf4\s+v24,v27} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf4\s+v28,v31} } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf4-i8-mf8.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf4-i8-mf8.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf4-i8-mf8.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vsext_vf4-i8-mf8.c	Sun Jul 12 22:32:16 2026
***************
*** 0 ****
--- 1,23 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_UNARY_0(
+   __riscv_vsetvlmax_e8m1,
+   vint8mf8_t,
+   vint32mf2_t,
+   __riscv_vle8_v_i8mf8,
+   __riscv_vsext_vf4_i32mf2,
+   __riscv_vse32_v_i32mf2,
+   vsext_vf,
+   LOOP_UNARY_BODY_X16)
+ 
+ /* { dg-final { scan-assembler-not {vsext\.vf4\s+v0,v3([^0-9]|$)} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf4\s+v4,v7} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf4\s+v8,v11} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf4\s+v12,v15} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf4\s+v16,v19} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf4\s+v20,v23} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf4\s+v24,v27} } } */
+ /* { dg-final { scan-assembler-not {vsext\.vf4\s+v28,v31} } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u16-m1.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u16-m1.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u16-m1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u16-m1.c	Sun Jul 12 22:32:16 2026
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_UNARY_0(
+   __riscv_vsetvlmax_e16m1,
+   vuint16m1_t,
+   vuint32m2_t,
+   __riscv_vle16_v_u16m1,
+   __riscv_vzext_vf2_u32m2,
+   __riscv_vse32_v_u32m2,
+   vzext_vf,
+   LOOP_UNARY_BODY_X16)
+ 
+ /* { dg-final { scan-assembler-times {vzext\.vf2\s+v0,v1} 1 } } */
+ /* { dg-final { scan-assembler-times {vzext\.vf2\s+v2,v3} 1 } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u16-m2.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u16-m2.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u16-m2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u16-m2.c	Sun Jul 12 22:32:16 2026
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_UNARY_0(
+   __riscv_vsetvlmax_e16m2,
+   vuint16m2_t,
+   vuint32m4_t,
+   __riscv_vle16_v_u16m2,
+   __riscv_vzext_vf2_u32m4,
+   __riscv_vse32_v_u32m4,
+   vzext_vf,
+   LOOP_UNARY_BODY_X8)
+ 
+ /* { dg-final { scan-assembler-times {vzext\.vf2\s+v0,v2} 1 } } */
+ /* { dg-final { scan-assembler-times {vzext\.vf2\s+v4,v6} 1 } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u16-m4.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u16-m4.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u16-m4.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u16-m4.c	Sun Jul 12 22:32:16 2026
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_UNARY_0(
+   __riscv_vsetvlmax_e16m4,
+   vuint16m4_t,
+   vuint32m8_t,
+   __riscv_vle16_v_u16m4,
+   __riscv_vzext_vf2_u32m8,
+   __riscv_vse32_v_u32m8,
+   vzext_vf,
+   LOOP_UNARY_BODY_X4)
+ 
+ /* { dg-final { scan-assembler-times {vzext\.vf2\s+v0,v4} 1 } } */
+ /* { dg-final { scan-assembler-times {vzext\.vf2\s+v8,v12} 1 } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u16-mf2.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u16-mf2.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u16-mf2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u16-mf2.c	Sun Jul 12 22:32:16 2026
***************
*** 0 ****
--- 1,31 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_UNARY_0(
+   __riscv_vsetvlmax_e16m1,
+   vuint16mf2_t,
+   vuint32m1_t,
+   __riscv_vle16_v_u16mf2,
+   __riscv_vzext_vf2_u32m1,
+   __riscv_vse32_v_u32m1,
+   vzext_vf,
+   LOOP_UNARY_BODY_X16)
+ 
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v0,v1} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v2,v3} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v4,v5} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v6,v7} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v8,v9} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v10,v11} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v12,v13} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v14,v15} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v16,v17} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v18,v19} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v20,v21} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v22,v23} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v24,v25} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v26,v27} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v28,v29} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v30,v31} } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u16-mf4.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u16-mf4.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u16-mf4.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u16-mf4.c	Sun Jul 12 22:32:16 2026
***************
*** 0 ****
--- 1,31 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_UNARY_0(
+   __riscv_vsetvlmax_e16m1,
+   vuint16mf4_t,
+   vuint32mf2_t,
+   __riscv_vle16_v_u16mf4,
+   __riscv_vzext_vf2_u32mf2,
+   __riscv_vse32_v_u32mf2,
+   vzext_vf,
+   LOOP_UNARY_BODY_X16)
+ 
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v0,v1} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v2,v3} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v4,v5} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v6,v7} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v8,v9} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v10,v11} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v12,v13} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v14,v15} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v16,v17} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v18,v19} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v20,v21} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v22,v23} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v24,v25} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v26,v27} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v28,v29} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v30,v31} } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u32-m1.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u32-m1.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u32-m1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u32-m1.c	Sun Jul 12 22:32:16 2026
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_UNARY_0(
+   __riscv_vsetvlmax_e32m1,
+   vuint32m1_t,
+   vuint64m2_t,
+   __riscv_vle32_v_u32m1,
+   __riscv_vzext_vf2_u64m2,
+   __riscv_vse64_v_u64m2,
+   vzext_vf,
+   LOOP_UNARY_BODY_X16)
+ 
+ /* { dg-final { scan-assembler-times {vzext\.vf2\s+v0,v1} 1 } } */
+ /* { dg-final { scan-assembler-times {vzext\.vf2\s+v2,v3} 1 } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u32-m2.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u32-m2.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u32-m2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u32-m2.c	Sun Jul 12 22:32:16 2026
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_UNARY_0(
+   __riscv_vsetvlmax_e32m2,
+   vuint32m2_t,
+   vuint64m4_t,
+   __riscv_vle32_v_u32m2,
+   __riscv_vzext_vf2_u64m4,
+   __riscv_vse64_v_u64m4,
+   vzext_vf,
+   LOOP_UNARY_BODY_X8)
+ 
+ /* { dg-final { scan-assembler-times {vzext\.vf2\s+v0,v2} 1 } } */
+ /* { dg-final { scan-assembler-times {vzext\.vf2\s+v4,v6} 1 } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u32-m4.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u32-m4.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u32-m4.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u32-m4.c	Sun Jul 12 22:32:16 2026
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_UNARY_0(
+   __riscv_vsetvlmax_e32m4,
+   vuint32m4_t,
+   vuint64m8_t,
+   __riscv_vle32_v_u32m4,
+   __riscv_vzext_vf2_u64m8,
+   __riscv_vse64_v_u64m8,
+   vzext_vf,
+   LOOP_UNARY_BODY_X4)
+ 
+ /* { dg-final { scan-assembler-times {vzext\.vf2\s+v0,v4} 1 } } */
+ /* { dg-final { scan-assembler-times {vzext\.vf2\s+v8,v12} 1 } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u32-mf2.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u32-mf2.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u32-mf2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u32-mf2.c	Sun Jul 12 22:32:16 2026
***************
*** 0 ****
--- 1,31 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_UNARY_0(
+   __riscv_vsetvlmax_e32m1,
+   vuint32mf2_t,
+   vuint64m1_t,
+   __riscv_vle32_v_u32mf2,
+   __riscv_vzext_vf2_u64m1,
+   __riscv_vse64_v_u64m1,
+   vzext_vf,
+   LOOP_UNARY_BODY_X16)
+ 
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v0,v1} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v2,v3} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v4,v5} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v6,v7} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v8,v9} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v10,v11} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v12,v13} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v14,v15} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v16,v17} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v18,v19} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v20,v21} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v22,v23} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v24,v25} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v26,v27} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v28,v29} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v30,v31} } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u8-m1.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u8-m1.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u8-m1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u8-m1.c	Sun Jul 12 22:32:16 2026
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_UNARY_0(
+   __riscv_vsetvlmax_e8m1,
+   vuint8m1_t,
+   vuint16m2_t,
+   __riscv_vle8_v_u8m1,
+   __riscv_vzext_vf2_u16m2,
+   __riscv_vse16_v_u16m2,
+   vzext_vf,
+   LOOP_UNARY_BODY_X16)
+ 
+ /* { dg-final { scan-assembler-times {vzext\.vf2\s+v0,v1} 1 } } */
+ /* { dg-final { scan-assembler-times {vzext\.vf2\s+v2,v3} 1 } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u8-m2.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u8-m2.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u8-m2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u8-m2.c	Sun Jul 12 22:32:16 2026
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_UNARY_0(
+   __riscv_vsetvlmax_e8m2,
+   vuint8m2_t,
+   vuint16m4_t,
+   __riscv_vle8_v_u8m2,
+   __riscv_vzext_vf2_u16m4,
+   __riscv_vse16_v_u16m4,
+   vzext_vf,
+   LOOP_UNARY_BODY_X8)
+ 
+ /* { dg-final { scan-assembler-times {vzext\.vf2\s+v0,v2} 1 } } */
+ /* { dg-final { scan-assembler-times {vzext\.vf2\s+v4,v6} 1 } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u8-m4.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u8-m4.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u8-m4.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u8-m4.c	Sun Jul 12 22:32:16 2026
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_UNARY_0(
+   __riscv_vsetvlmax_e8m4,
+   vuint8m4_t,
+   vuint16m8_t,
+   __riscv_vle8_v_u8m4,
+   __riscv_vzext_vf2_u16m8,
+   __riscv_vse16_v_u16m8,
+   vzext_vf,
+   LOOP_UNARY_BODY_X4)
+ 
+ /* { dg-final { scan-assembler-times {vzext\.vf2\s+v0,v4} 1 } } */
+ /* { dg-final { scan-assembler-times {vzext\.vf2\s+v8,v12} 1 } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u8-mf2.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u8-mf2.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u8-mf2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u8-mf2.c	Sun Jul 12 22:32:16 2026
***************
*** 0 ****
--- 1,31 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_UNARY_0(
+   __riscv_vsetvlmax_e8m1,
+   vuint8mf2_t,
+   vuint16m1_t,
+   __riscv_vle8_v_u8mf2,
+   __riscv_vzext_vf2_u16m1,
+   __riscv_vse16_v_u16m1,
+   vzext_vf,
+   LOOP_UNARY_BODY_X16)
+ 
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v0,v1} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v2,v3} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v4,v5} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v6,v7} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v8,v9} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v10,v11} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v12,v13} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v14,v15} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v16,v17} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v18,v19} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v20,v21} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v22,v23} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v24,v25} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v26,v27} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v28,v29} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v30,v31} } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u8-mf4.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u8-mf4.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u8-mf4.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u8-mf4.c	Sun Jul 12 22:32:16 2026
***************
*** 0 ****
--- 1,31 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_UNARY_0(
+   __riscv_vsetvlmax_e8m1,
+   vuint8mf4_t,
+   vuint16mf2_t,
+   __riscv_vle8_v_u8mf4,
+   __riscv_vzext_vf2_u16mf2,
+   __riscv_vse16_v_u16mf2,
+   vzext_vf,
+   LOOP_UNARY_BODY_X16)
+ 
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v0,v1} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v2,v3} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v4,v5} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v6,v7} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v8,v9} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v10,v11} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v12,v13} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v14,v15} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v16,v17} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v18,v19} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v20,v21} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v22,v23} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v24,v25} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v26,v27} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v28,v29} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v30,v31} } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u8-mf8.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u8-mf8.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u8-mf8.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf2-u8-mf8.c	Sun Jul 12 22:32:16 2026
***************
*** 0 ****
--- 1,31 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_UNARY_0(
+   __riscv_vsetvlmax_e8m1,
+   vuint8mf8_t,
+   vuint16mf4_t,
+   __riscv_vle8_v_u8mf8,
+   __riscv_vzext_vf2_u16mf4,
+   __riscv_vse16_v_u16mf4,
+   vzext_vf,
+   LOOP_UNARY_BODY_X16)
+ 
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v0,v1} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v2,v3} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v4,v5} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v6,v7} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v8,v9} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v10,v11} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v12,v13} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v14,v15} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v16,v17} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v18,v19} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v20,v21} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v22,v23} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v24,v25} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v26,v27} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v28,v29} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf2\s+v30,v31} } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf4-u16-m1.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf4-u16-m1.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf4-u16-m1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf4-u16-m1.c	Sun Jul 12 22:32:16 2026
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_UNARY_0(
+   __riscv_vsetvlmax_e16m1,
+   vuint16m1_t,
+   vuint64m4_t,
+   __riscv_vle16_v_u16m1,
+   __riscv_vzext_vf4_u64m4,
+   __riscv_vse64_v_u64m4,
+   vzext_vf,
+   LOOP_UNARY_BODY_X8)
+ 
+ /* { dg-final { scan-assembler-times {vzext\.vf4\s+v0,v3([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vzext\.vf4\s+v4,v7} 1 } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf4-u16-m2.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf4-u16-m2.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf4-u16-m2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf4-u16-m2.c	Sun Jul 12 22:32:16 2026
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_UNARY_0(
+   __riscv_vsetvlmax_e16m2,
+   vuint16m2_t,
+   vuint64m8_t,
+   __riscv_vle16_v_u16m2,
+   __riscv_vzext_vf4_u64m8,
+   __riscv_vse64_v_u64m8,
+   vzext_vf,
+   LOOP_UNARY_BODY_X4)
+ 
+ /* { dg-final { scan-assembler-times {vzext\.vf4\s+v0,v6} 1 } } */
+ /* { dg-final { scan-assembler-times {vzext\.vf4\s+v8,v14} 1 } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf4-u16-mf2.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf4-u16-mf2.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf4-u16-mf2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf4-u16-mf2.c	Sun Jul 12 22:32:16 2026
***************
*** 0 ****
--- 1,23 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_UNARY_0(
+   __riscv_vsetvlmax_e16m1,
+   vuint16mf2_t,
+   vuint64m2_t,
+   __riscv_vle16_v_u16mf2,
+   __riscv_vzext_vf4_u64m2,
+   __riscv_vse64_v_u64m2,
+   vzext_vf,
+   LOOP_UNARY_BODY_X16)
+ 
+ /* { dg-final { scan-assembler-not {vzext\.vf4\s+v0,v3([^0-9]|$)} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf4\s+v4,v7} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf4\s+v8,v11} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf4\s+v12,v15} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf4\s+v16,v19} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf4\s+v20,v23} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf4\s+v24,v27} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf4\s+v28,v31} } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf4-u16-mf4.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf4-u16-mf4.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf4-u16-mf4.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf4-u16-mf4.c	Sun Jul 12 22:32:16 2026
***************
*** 0 ****
--- 1,23 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_UNARY_0(
+   __riscv_vsetvlmax_e16m1,
+   vuint16mf4_t,
+   vuint64m1_t,
+   __riscv_vle16_v_u16mf4,
+   __riscv_vzext_vf4_u64m1,
+   __riscv_vse64_v_u64m1,
+   vzext_vf,
+   LOOP_UNARY_BODY_X16)
+ 
+ /* { dg-final { scan-assembler-not {vzext\.vf4\s+v0,v3([^0-9]|$)} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf4\s+v4,v7} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf4\s+v8,v11} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf4\s+v12,v15} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf4\s+v16,v19} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf4\s+v20,v23} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf4\s+v24,v27} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf4\s+v28,v31} } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf4-u8-m1.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf4-u8-m1.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf4-u8-m1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf4-u8-m1.c	Sun Jul 12 22:32:16 2026
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_UNARY_0(
+   __riscv_vsetvlmax_e8m1,
+   vuint8m1_t,
+   vuint32m4_t,
+   __riscv_vle8_v_u8m1,
+   __riscv_vzext_vf4_u32m4,
+   __riscv_vse32_v_u32m4,
+   vzext_vf,
+   LOOP_UNARY_BODY_X8)
+ 
+ /* { dg-final { scan-assembler-times {vzext\.vf4\s+v0,v3([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vzext\.vf4\s+v4,v7} 1 } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf4-u8-m2.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf4-u8-m2.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf4-u8-m2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf4-u8-m2.c	Sun Jul 12 22:32:16 2026
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_UNARY_0(
+   __riscv_vsetvlmax_e8m2,
+   vuint8m2_t,
+   vuint32m8_t,
+   __riscv_vle8_v_u8m2,
+   __riscv_vzext_vf4_u32m8,
+   __riscv_vse32_v_u32m8,
+   vzext_vf,
+   LOOP_UNARY_BODY_X4)
+ 
+ /* { dg-final { scan-assembler-times {vzext\.vf4\s+v0,v6} 1 } } */
+ /* { dg-final { scan-assembler-times {vzext\.vf4\s+v8,v14} 1 } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf4-u8-mf2.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf4-u8-mf2.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf4-u8-mf2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf4-u8-mf2.c	Sun Jul 12 22:32:16 2026
***************
*** 0 ****
--- 1,23 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_UNARY_0(
+   __riscv_vsetvlmax_e8m1,
+   vuint8mf2_t,
+   vuint32m2_t,
+   __riscv_vle8_v_u8mf2,
+   __riscv_vzext_vf4_u32m2,
+   __riscv_vse32_v_u32m2,
+   vzext_vf,
+   LOOP_UNARY_BODY_X16)
+ 
+ /* { dg-final { scan-assembler-not {vzext\.vf4\s+v0,v3([^0-9]|$)} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf4\s+v4,v7} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf4\s+v8,v11} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf4\s+v12,v15} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf4\s+v16,v19} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf4\s+v20,v23} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf4\s+v24,v27} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf4\s+v28,v31} } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf4-u8-mf4.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf4-u8-mf4.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf4-u8-mf4.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf4-u8-mf4.c	Sun Jul 12 22:32:16 2026
***************
*** 0 ****
--- 1,23 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_UNARY_0(
+   __riscv_vsetvlmax_e8m1,
+   vuint8mf4_t,
+   vuint32m1_t,
+   __riscv_vle8_v_u8mf4,
+   __riscv_vzext_vf4_u32m1,
+   __riscv_vse32_v_u32m1,
+   vzext_vf,
+   LOOP_UNARY_BODY_X16)
+ 
+ /* { dg-final { scan-assembler-not {vzext\.vf4\s+v0,v3([^0-9]|$)} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf4\s+v4,v7} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf4\s+v8,v11} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf4\s+v12,v15} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf4\s+v16,v19} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf4\s+v20,v23} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf4\s+v24,v27} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf4\s+v28,v31} } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf4-u8-mf8.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf4-u8-mf8.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf4-u8-mf8.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vzext_vf4-u8-mf8.c	Sun Jul 12 22:32:16 2026
***************
*** 0 ****
--- 1,23 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_UNARY_0(
+   __riscv_vsetvlmax_e8m1,
+   vuint8mf8_t,
+   vuint32mf2_t,
+   __riscv_vle8_v_u8mf8,
+   __riscv_vzext_vf4_u32mf2,
+   __riscv_vse32_v_u32mf2,
+   vzext_vf,
+   LOOP_UNARY_BODY_X16)
+ 
+ /* { dg-final { scan-assembler-not {vzext\.vf4\s+v0,v3([^0-9]|$)} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf4\s+v4,v7} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf4\s+v8,v11} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf4\s+v12,v15} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf4\s+v16,v19} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf4\s+v20,v23} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf4\s+v24,v27} } } */
+ /* { dg-final { scan-assembler-not {vzext\.vf4\s+v28,v31} } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr113206-1.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr113206-1.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr113206-1.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr113206-1.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */
  
  signed char e;
  short f = 8;
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fno-unroll-loops" } */
  
  signed char e;
  short f = 8;
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/unop/math-nearbyint-0.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/unop/math-nearbyint-0.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/unop/math-nearbyint-0.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/unop/math-nearbyint-0.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvfh -mabi=lp64d -O3 -ftree-vectorize -fno-vect-cost-model -ffast-math -fno-schedule-insns -fno-schedule-insns2" } */
  /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "test-math.h"
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvfh -mabi=lp64d -O3 -ftree-vectorize -fno-vect-cost-model -ffast-math -fno-schedule-insns -fno-schedule-insns2 -fno-unroll-loops" } */
  /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "test-math.h"
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/calling-convention-1.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/calling-convention-1.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/calling-convention-1.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/calling-convention-1.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvl4096b -mrvv-vector-bits=scalable -mabi=lp64d -O3 -fno-schedule-insns2 -mrvv-max-lmul=m8" } */
  
  #include "def.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvl4096b -mrvv-vector-bits=scalable -mabi=lp64d -O3 -fno-schedule-insns2 -mrvv-max-lmul=m8 -fno-unroll-loops" } */
  
  #include "def.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/calling-convention-2.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/calling-convention-2.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/calling-convention-2.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/calling-convention-2.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvl4096b -mrvv-vector-bits=scalable -mabi=lp64d -O3 -fno-schedule-insns2 -mrvv-max-lmul=m8" } */
  
  #include "def.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvl4096b -mrvv-vector-bits=scalable -mabi=lp64d -O3 -fno-schedule-insns2 -mrvv-max-lmul=m8 -fno-unroll-loops" } */
  
  #include "def.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/calling-convention-3.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/calling-convention-3.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/calling-convention-3.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/calling-convention-3.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvl4096b -mrvv-vector-bits=scalable -mabi=lp64d -O3 -fno-schedule-insns2 -mrvv-max-lmul=m8" } */
  
  #include "def.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvl4096b -mrvv-vector-bits=scalable -mabi=lp64d -O3 -fno-schedule-insns2 -mrvv-max-lmul=m8 -fno-unroll-loops" } */
  
  #include "def.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/calling-convention-4.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/calling-convention-4.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/calling-convention-4.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/calling-convention-4.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvl4096b -mrvv-vector-bits=scalable -mabi=lp64d -O3 -fno-schedule-insns2 -mrvv-max-lmul=m8" } */
  
  #include "def.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvl4096b -mrvv-vector-bits=scalable -mabi=lp64d -O3 -fno-schedule-insns2 -mrvv-max-lmul=m8 -fno-unroll-loops" } */
  
  #include "def.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/calling-convention-5.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/calling-convention-5.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/calling-convention-5.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/calling-convention-5.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mrvv-vector-bits=scalable -mabi=lp64d -O3 -fno-schedule-insns2 -mrvv-max-lmul=m8" } */
  
  #include "def.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mrvv-vector-bits=scalable -mabi=lp64d -O3 -fno-schedule-insns2 -mrvv-max-lmul=m8 -fno-unroll-loops" } */
  
  #include "def.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/calling-convention-6.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/calling-convention-6.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/calling-convention-6.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/calling-convention-6.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvl4096b -mrvv-vector-bits=scalable -mabi=lp64d -O3 -fno-schedule-insns2 -mrvv-max-lmul=m8" } */
  
  #include "def.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvl4096b -mrvv-vector-bits=scalable -mabi=lp64d -O3 -fno-schedule-insns2 -mrvv-max-lmul=m8 -fno-unroll-loops" } */
  
  #include "def.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/calling-convention-7.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/calling-convention-7.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/calling-convention-7.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/calling-convention-7.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvl4096b -mrvv-vector-bits=scalable -mabi=lp64d -O3 -fno-schedule-insns2 -mrvv-max-lmul=m8" } */
  
  #include "def.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvl4096b -mrvv-vector-bits=scalable -mabi=lp64d -O3 -fno-schedule-insns2 -mrvv-max-lmul=m8 -fno-unroll-loops" } */
  
  #include "def.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-1u.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-1u.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-1u.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-1u.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-additional-options "-march=rv64gcv -mabi=lp64d -Wno-pedantic" } */
  
  #include <stdint-gcc.h>
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-additional-options "-march=rv64gcv -mabi=lp64d -Wno-pedantic -fno-unroll-loops" } */
  
  #include <stdint-gcc.h>
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-2u.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-2u.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-2u.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-2u.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-additional-options "-march=rv64gcv -mabi=lp64d -Wno-pedantic" } */
  
  #include <stdint-gcc.h>
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-additional-options "-march=rv64gcv -mabi=lp64d -Wno-pedantic -fno-unroll-loops" } */
  
  #include <stdint-gcc.h>
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-3u.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-3u.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-3u.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-3u.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-additional-options "-march=rv64gcv -mabi=lp64d -Wno-pedantic" } */
  
  #include <stdint-gcc.h>
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-additional-options "-march=rv64gcv -mabi=lp64d -Wno-pedantic -fno-unroll-loops" } */
  
  #include <stdint-gcc.h>
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-4u.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-4u.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-4u.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-4u.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-additional-options "-march=rv64gcv -mabi=lp64d -Wno-pedantic" } */
  
  #include <stdint-gcc.h>
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-additional-options "-march=rv64gcv -mabi=lp64d -Wno-pedantic -fno-unroll-loops" } */
  
  #include <stdint-gcc.h>
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-39.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-39.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-39.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-39.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv -mabi=lp64 -O3" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv -mabi=lp64 -O3 -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-41.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-41.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-41.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-41.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv -mabi=lp64 -O3" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv -mabi=lp64 -O3 -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-45.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-45.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-45.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-45.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv -mabi=lp64 -O3" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv -mabi=lp64 -O3 -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-46.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-46.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-46.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-46.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv -mabi=lp64 -O3" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv -mabi=lp64 -O3 -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-48.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-48.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-48.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-48.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv -mabi=lp64 -O3" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv -mabi=lp64 -O3 -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-49.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-49.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-49.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-49.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv -mabi=lp64 -O3" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv -mabi=lp64 -O3 -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-50.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-50.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-50.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-50.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv -mabi=lp64 -O3" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv -mabi=lp64 -O3 -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-52.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-52.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-52.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-52.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv -mabi=lp64 -O3" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv -mabi=lp64 -O3 -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-56.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-56.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-56.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-56.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv -mabi=lp64 -O3" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv -mabi=lp64 -O3 -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-59.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-59.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-59.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-59.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv -mabi=lp64 -O3" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv -mabi=lp64 -O3 -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-60.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-60.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-60.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-60.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv -mabi=lp64 -O3" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv -mabi=lp64 -O3 -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-61.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-61.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-61.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-61.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv -mabi=lp64 -O3" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv -mabi=lp64 -O3 -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-62.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-62.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-62.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-62.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv -mabi=lp64 -O3" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv -mabi=lp64 -O3 -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-64.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-64.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-64.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-64.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv -mabi=lp64 -O3" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv -mabi=lp64 -O3 -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-65.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-65.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-65.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-65.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv -mabi=lp64 -O3" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv -mabi=lp64 -O3 -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-66.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-66.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-66.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-66.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv -mabi=lp64 -O3" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv -mabi=lp64 -O3 -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-67.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-67.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-67.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-67.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv -mabi=lp64 -O3" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv -mabi=lp64 -O3 -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-68.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-68.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-68.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-68.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv -mabi=lp64 -O3" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv -mabi=lp64 -O3 -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-69.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-69.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-69.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-69.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv -mabi=lp64 -O3" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv -mabi=lp64 -O3 -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-70.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-70.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-70.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-70.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv -mabi=lp64 -O3" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv -mabi=lp64 -O3 -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-71.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-71.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-71.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-71.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv -mabi=lp64 -O3" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv -mabi=lp64 -O3 -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-frm-insert-4.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-frm-insert-4.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-frm-insert-4.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-frm-insert-4.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv -mabi=lp64 -O3" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv -mabi=lp64 -O3 -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-frm-insert-5.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-frm-insert-5.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-frm-insert-5.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/float-point-frm-insert-5.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv -mabi=lp64 -O3" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv -mabi=lp64 -O3 -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-16.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-16.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-16.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-16.c	Sun Jul 12 22:32:16 2026
*************** foo (char const *buf, size_t len)
*** 65,68 ****
  /* { dg-final { scan-assembler-not {vmv2r} } } */
  /* { dg-final { scan-assembler-not {vmv4r} } } */
  /* { dg-final { scan-assembler-not {vmv8r} } } */
! /* { dg-final { scan-assembler-not {csrr} { xfail riscv*-*-* } } } */
--- 65,68 ----
  /* { dg-final { scan-assembler-not {vmv2r} } } */
  /* { dg-final { scan-assembler-not {vmv4r} } } */
  /* { dg-final { scan-assembler-not {vmv8r} } } */
! /* { dg-final { scan-assembler-not {csrr} } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-17.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-17.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-17.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-17.c	Sun Jul 12 22:32:16 2026
*************** foo (char const *buf, size_t len)
*** 48,51 ****
  /* { dg-final { scan-assembler-not {vmv2r} } } */
  /* { dg-final { scan-assembler-not {vmv4r} } } */
  /* { dg-final { scan-assembler-not {vmv8r} } } */
! /* { dg-final { scan-assembler-not {csrr} { xfail riscv*-*-* } } } */
--- 48,51 ----
  /* { dg-final { scan-assembler-not {vmv2r} } } */
  /* { dg-final { scan-assembler-not {vmv4r} } } */
  /* { dg-final { scan-assembler-not {vmv8r} } } */
! /* { dg-final { scan-assembler-not {csrr} } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/pr114352-3.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/pr114352-3.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/pr114352-3.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/pr114352-3.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64 -O3 -fno-schedule-insns -fno-schedule-insns2" } */
  /* { dg-final { check-function-bodies "**" "" } } */
  
  /*
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64 -O3 -fno-schedule-insns -fno-schedule-insns2 -fno-unroll-loops" } */
  /* { dg-final { check-function-bodies "**" "" } } */
  
  /*
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/scalar_move-7.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/scalar_move-7.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/scalar_move-7.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/scalar_move-7.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv -mabi=lp64d -fno-schedule-insns -fno-schedule-insns2 -O3" } */
  /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "riscv_vector.h"
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv -mabi=lp64d -fno-schedule-insns -fno-schedule-insns2 -O3 -fno-unroll-loops" } */
  /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "riscv_vector.h"
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/spill-10.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/spill-10.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/spill-10.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/spill-10.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv32gcv -mabi=ilp32 -mpreferred-stack-boundary=3 -fno-schedule-insns -fno-schedule-insns2 -O3" } */
  /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "riscv_vector.h"
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv32gcv -mabi=ilp32 -mpreferred-stack-boundary=3 -fno-schedule-insns -fno-schedule-insns2 -O3 -fno-unroll-loops" } */
  /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "riscv_vector.h"
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/spill-11.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/spill-11.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/spill-11.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/spill-11.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-msave-restore -march=rv32gc_zve64d -mabi=ilp32 -msave-restore -fno-schedule-insns -fno-schedule-insns2 -O3" } */
  /* { dg-final { check-function-bodies "**" "" } } */
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-msave-restore -march=rv32gc_zve64d -mabi=ilp32 -msave-restore -fno-schedule-insns -fno-schedule-insns2 -O3 -fno-unroll-loops" } */
  /* { dg-final { check-function-bodies "**" "" } } */
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/spill-12.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/spill-12.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/spill-12.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/spill-12.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv32gcv -mabi=ilp32 -msave-restore -fno-schedule-insns -fno-schedule-insns2 -O3" } */
  /* { dg-final { check-function-bodies "**" "" } } */
  
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv32gcv -mabi=ilp32 -msave-restore -fno-schedule-insns -fno-schedule-insns2 -O3 -fno-unroll-loops" } */
  /* { dg-final { check-function-bodies "**" "" } } */
  
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/spill-8.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/spill-8.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/spill-8.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/spill-8.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv32gcv -mabi=ilp32 -fno-schedule-insns -fno-schedule-insns2 -O3" } */
  /* { dg-final { check-function-bodies "**" "" } } */
  
  void f2 (char*);
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv32gcv -mabi=ilp32 -fno-schedule-insns -fno-schedule-insns2 -O3 -fno-unroll-loops" } */
  /* { dg-final { check-function-bodies "**" "" } } */
  
  void f2 (char*);
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/spill-9.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/spill-9.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/spill-9.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/spill-9.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv32gc_zve64d -mabi=ilp32 -fno-schedule-insns -fno-schedule-insns2 -O3" } */
  /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "riscv_vector.h"
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv32gc_zve64d -mabi=ilp32 -fno-schedule-insns -fno-schedule-insns2 -O3 -fno-unroll-loops" } */
  /* { dg-final { check-function-bodies "**" "" } } */
  
  #include "riscv_vector.h"
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/vwaddsub-1.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/vwaddsub-1.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/vwaddsub-1.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/vwaddsub-1.c	Sun Jul 12 22:32:16 2026
***************
*** 1,6 ****
  /* { dg-do compile { target { { ! riscv_abi_e } && rv64 } } } */
  /* { dg-add-options riscv_v } */
! /* { dg-additional-options "-std=gnu99 -O3 -fno-schedule-insns -fno-schedule-insns2 -Wno-pedantic" } */
  
  #include <stdint.h>
  #include "riscv_vector.h"
--- 1,6 ----
  /* { dg-do compile { target { { ! riscv_abi_e } && rv64 } } } */
  /* { dg-add-options riscv_v } */
! /* { dg-additional-options "-std=gnu99 -O3 -fno-schedule-insns -fno-schedule-insns2 -Wno-pedantic -fno-unroll-loops" } */
  
  #include <stdint.h>
  #include "riscv_vector.h"
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/zvbb_vandn_vx_constraint.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/zvbb_vandn_vx_constraint.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/zvbb_vandn_vx_constraint.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/zvbb_vandn_vx_constraint.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv32gc_zvbb_zve64x -mabi=ilp32 -O3" } */
  #include "riscv_vector.h"
  
  vuint64m1_t test_vandn_vx_u64m1(vuint64m1_t vs2, uint64_t rs1, size_t vl) {
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv32gc_zvbb_zve64x -mabi=ilp32 -O3 -fno-unroll-loops" } */
  #include "riscv_vector.h"
  
  vuint64m1_t test_vandn_vx_u64m1(vuint64m1_t vs2, uint64_t rs1, size_t vl) {
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/zvbc_vx_constraint-2.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/zvbc_vx_constraint-2.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/base/zvbc_vx_constraint-2.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/base/zvbc_vx_constraint-2.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc_zvbc -mabi=lp64d -O3" } */
  #include "riscv_vector.h"
  
  vuint64m1_t test_vclmul_vx_u64m1_extend(vuint64m1_t vs2, uint32_t rs1, size_t vl) {
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc_zvbc -mabi=lp64d -O3 -fno-unroll-loops" } */
  #include "riscv_vector.h"
  
  vuint64m1_t test_vclmul_vx_u64m1_extend(vuint64m1_t vs2, uint32_t rs1, size_t vl) {
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/rvv.exp gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/rvv.exp
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/rvv.exp	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/rvv.exp	Sun Jul 12 22:32:16 2026
*************** set AUTOVEC_TEST_OPTS [list \
*** 149,154 ****
--- 149,156 ----
  foreach op $AUTOVEC_TEST_OPTS {
    dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/autovec/vx_vf/*.\[cS\]]] \
      "$op" ""
+   dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/autovec/group_overlap/*.\[cS\]]] \
+     "$op" ""
  }
  
  set POLICY [list {policy} {non-policy} ]
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_multiple-3.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_multiple-3.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_multiple-3.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_multiple-3.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-schedule-insns -fno-schedule-insns2" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-schedule-insns -fno-schedule-insns2 -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_multiple-4.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_multiple-4.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_multiple-4.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_multiple-4.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-schedule-insns -fno-schedule-insns2" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-schedule-insns -fno-schedule-insns2 -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-4.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-4.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-4.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-4.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-schedule-insns -fno-schedule-insns2" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-schedule-insns -fno-schedule-insns2 -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-6.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-6.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-6.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-6.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-schedule-insns -fno-schedule-insns2" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-schedule-insns -fno-schedule-insns2 -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-66.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-66.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-66.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-66.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize -fno-schedule-insns -fno-schedule-insns2" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize -fno-schedule-insns -fno-schedule-insns2 -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-1.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-1.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-1.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-1.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-schedule-insns -fno-schedule-insns2" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-schedule-insns -fno-schedule-insns2 -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-2.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-2.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-2.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-2.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-schedule-insns -fno-schedule-insns2" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-schedule-insns -fno-schedule-insns2 -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-3.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-3.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-3.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-3.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-schedule-insns -fno-schedule-insns2" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-schedule-insns -fno-schedule-insns2 -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-4.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-4.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-4.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-4.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-schedule-insns -fno-schedule-insns2" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-schedule-insns -fno-schedule-insns2 -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-5.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-5.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-5.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-5.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-schedule-insns -fno-schedule-insns2" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-schedule-insns -fno-schedule-insns2 -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-6.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-6.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-6.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-6.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-schedule-insns -fno-schedule-insns2" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-schedule-insns -fno-schedule-insns2 -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-1.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-1.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-1.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-1.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-10.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-10.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-10.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-10.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-14.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-14.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-14.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-14.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-15.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-15.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-15.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-15.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-16.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-16.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-16.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-16.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-17.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-17.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-17.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-17.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-18.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-18.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-18.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-18.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-19.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-19.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-19.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-19.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-20.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-20.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-20.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-20.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-21.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-21.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-21.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-21.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-22.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-22.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-22.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-22.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-23.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-23.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-23.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-23.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-25.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-25.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-25.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-25.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-27.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-27.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-27.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-27.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-28.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-28.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-28.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-28.c	Sun Jul 12 22:32:16 2026
***************
*** 1,7 ****
  /* { dg-do compile } */
  /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize" } */
  // PR113249
! /* { dg-additional-options "-fno-schedule-insns -fno-schedule-insns2" } */
  
  #include "riscv_vector.h"
  
--- 1,7 ----
  /* { dg-do compile } */
  /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize" } */
  // PR113249
! /* { dg-additional-options "-fno-schedule-insns -fno-schedule-insns2 -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-29.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-29.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-29.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-29.c	Sun Jul 12 22:32:16 2026
***************
*** 1,7 ****
  /* { dg-do compile } */
  /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize" } */
  // PR113249
! /* { dg-additional-options "-fno-schedule-insns -fno-schedule-insns2" } */
  
  #include "riscv_vector.h"
  
--- 1,7 ----
  /* { dg-do compile } */
  /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize" } */
  // PR113249
! /* { dg-additional-options "-fno-schedule-insns -fno-schedule-insns2 -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-3.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-3.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-3.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-3.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-30.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-30.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-30.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-30.c	Sun Jul 12 22:32:16 2026
***************
*** 1,6 ****
  /* { dg-do compile } */
  /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize" } */
! /* { dg-additional-options "-fno-schedule-insns -fno-schedule-insns2" } */
  
  #include "riscv_vector.h"
  
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize" } */
! /* { dg-additional-options "-fno-schedule-insns -fno-schedule-insns2 -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-31.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-31.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-31.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-31.c	Sun Jul 12 22:32:16 2026
***************
*** 1,6 ****
  /* { dg-do compile } */
  /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize" } */
! /* { dg-additional-options "-fno-schedule-insns -fno-schedule-insns2" } */
  
  #include "riscv_vector.h"
  
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize" } */
! /* { dg-additional-options "-fno-schedule-insns -fno-schedule-insns2 -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-35.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-35.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-35.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-35.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-37.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-37.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-37.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-37.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-7.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-7.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-7.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-7.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-8.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-8.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-8.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-8.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-9.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-9.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-9.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-9.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-17.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-17.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-17.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-17.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize -mtune=rocket" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize -mtune=rocket -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-18.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-18.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-18.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-18.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize -mtune=rocket" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize -mtune=rocket -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-19.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-19.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-19.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-19.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize -mtune=rocket" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize -mtune=rocket -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-20.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-20.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-20.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-20.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize -mtune=rocket" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize -mtune=rocket -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_conflict-11.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_conflict-11.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_conflict-11.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_conflict-11.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-14.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-14.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-14.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-14.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-15.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-15.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-15.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-15.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-16.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-16.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-16.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-16.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32" } */
  
  #include "riscv_vector.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-unroll-loops" } */
  
  #include "riscv_vector.h"
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/shift-shift-7.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/shift-shift-7.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/shift-shift-7.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/shift-shift-7.c	Sun Jul 12 22:32:16 2026
***************
*** 1,6 ****
  /* { dg-do compile } */
  /* { dg-options "-march=rv64gc -mabi=lp64" } */
! /* { dg-skip-if "" { *-*-* } { "-O0" } } */
  
  /* Test for zero_extendsidi2_shifted handling arbitrary mask widths
     (not just 32 bits). */
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-options "-march=rv64gc -mabi=lp64" } */
! /* { dg-skip-if "" { *-*-* } { "-O0" "-Og" } } */
  
  /* Test for zero_extendsidi2_shifted handling arbitrary mask widths
     (not just 32 bits). */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/slt-1.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/slt-1.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/slt-1.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/slt-1.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -mbranch-cost=4" } */
  /* { dg-skip-if "" { *-*-* } { "-O0" "-Og" "-Os" "-Oz" } } */
  
  #include <stdint.h>
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gc -mabi=lp64d -mbranch-cost=4 -fno-unroll-loops" } */
  /* { dg-skip-if "" { *-*-* } { "-O0" "-Og" "-Os" "-Oz" } } */
  
  #include <stdint.h>
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/struct_vect_24.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/struct_vect_24.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/struct_vect_24.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/struct_vect_24.c	Sun Jul 12 22:32:16 2026
***************
*** 1,6 ****
  /* { dg-do compile } */
  /* { dg-require-effective-target supports_stack_clash_protection } */
! /* { dg-options "-O3 -march=rv64gcv -mabi=lp64d -fstack-clash-protection -fno-stack-protector" } */
  /* { dg-skip-if "" { *-*-* } {"-O0" "-O1" "-O2" "-Og" "-Os" "-Oz" "-funroll-loops"} } */
  
  #include <stdint.h>
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-require-effective-target supports_stack_clash_protection } */
! /* { dg-options "-O3 -march=rv64gcv -mabi=lp64d -fstack-clash-protection -fno-stack-protector -fno-unroll-loops" } */
  /* { dg-skip-if "" { *-*-* } {"-O0" "-O1" "-O2" "-Og" "-Os" "-Oz" "-funroll-loops"} } */
  
  #include <stdint.h>
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/unroll-explicit.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/unroll-explicit.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/unroll-explicit.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/unroll-explicit.c	Sun Jul 12 22:32:16 2026
***************
*** 0 ****
--- 1,22 ----
+ /* { dg-do compile } */
+ /* { dg-options "-funroll-loops -fdump-rtl-loop2_unroll-details -fno-tree-vectorize" } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" "-Os" "-Oz" } { "" } } */
+ 
+ /* An explicit -funroll-loops turns off the default -munroll-only-small-loops,
+    so a loop exceeding the small-loop instruction threshold is unrolled
+    normally.  */
+ 
+ void
+ large_loop_explicit (int *a, int *b, int *c, int *d, int n)
+ {
+   int i;
+   for (i = 0; i < n; i++)
+     {
+       a[i] = b[i] + c[i];
+       d[i] = a[i] * b[i] - c[i];
+       b[i] = c[i] + d[i] + a[i];
+       c[i] = a[i] - d[i] + b[i];
+     }
+ }
+ 
+ /* { dg-final { scan-rtl-dump "Unrolled loop" "loop2_unroll" } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/unroll-large-loop.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/unroll-large-loop.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/unroll-large-loop.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/unroll-large-loop.c	Sun Jul 12 22:32:16 2026
***************
*** 0 ****
--- 1,22 ----
+ /* { dg-do compile } */
+ /* { dg-options "-fdump-rtl-loop2_unroll-details -fno-tree-vectorize" } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" "-Os" "-Oz" "-funroll-loops" } { "" } } */
+ 
+ /* With the default -O2 small loop unrolling (-munroll-only-small-loops),
+    a loop whose body exceeds the small-loop instruction threshold is NOT
+    unrolled.  */
+ 
+ void
+ large_loop (int *a, int *b, int *c, int *d, int n)
+ {
+   int i;
+   for (i = 0; i < n; i++)
+     {
+       a[i] = b[i] + c[i];
+       d[i] = a[i] * b[i] - c[i];
+       b[i] = c[i] + d[i] + a[i];
+       c[i] = a[i] - d[i] + b[i];
+     }
+ }
+ 
+ /* { dg-final { scan-rtl-dump-not "Unrolled loop" "loop2_unroll" } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/unroll-pragma.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/unroll-pragma.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/unroll-pragma.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/unroll-pragma.c	Sun Jul 12 22:32:16 2026
***************
*** 0 ****
--- 1,23 ----
+ /* { dg-do compile } */
+ /* { dg-options "-fdump-rtl-loop2_unroll-details -fno-tree-vectorize" } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" "-Os" "-Oz" "-funroll-loops" } { "" } } */
+ 
+ /* An explicit "#pragma GCC unroll" sets loop->unroll, which makes
+    riscv_loop_unroll_adjust bypass the -munroll-only-small-loops
+    restriction.  Hence a loop exceeding the small-loop instruction
+    threshold is still unrolled as requested.  */
+ 
+ void
+ large_loop_pragma (int *a, int *b, int *c, int *d, int n)
+ {
+ #pragma GCC unroll 2
+   for (int i = 0; i < n; i++)
+     {
+       a[i] = b[i] + c[i];
+       d[i] = a[i] * b[i] - c[i];
+       b[i] = c[i] + d[i] + a[i];
+       c[i] = a[i] - d[i] + b[i];
+     }
+ }
+ 
+ /* { dg-final { scan-rtl-dump "Unrolled loop" "loop2_unroll" } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/unroll-small-loop-tune.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/unroll-small-loop-tune.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/unroll-small-loop-tune.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/unroll-small-loop-tune.c	Sun Jul 12 22:32:16 2026
***************
*** 0 ****
--- 1,22 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mtune=xt-c9501fdvt -fdump-rtl-loop2_unroll-details -fno-tree-vectorize" } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" "-Os" "-Oz" "-funroll-loops" } { "" } } */
+ 
+ /* The xt-c9501fdvt tune model sets small_loop_unroll_factor to 8, so a small
+    loop is unrolled by a factor of 8 (rather than the generic default of 2).
+    The unroller reports the number of extra copies, i.e. factor - 1, so an
+    8x unroll is dumped as "Unrolled loop 7 times".  This verifies the tune
+    parameter actually takes effect; with the default factor the dump would
+    instead read "Unrolled loop 1 times".  */
+ 
+ int
+ small_loop (int n)
+ {
+   int sum = 0;
+   do
+     sum += n;
+   while (--n);
+   return sum;
+ }
+ 
+ /* { dg-final { scan-rtl-dump "Unrolled loop 7 times" "loop2_unroll" } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/unroll-small-loop.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/unroll-small-loop.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/unroll-small-loop.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/unroll-small-loop.c	Sun Jul 12 22:32:16 2026
***************
*** 0 ****
--- 1,19 ----
+ /* { dg-do compile } */
+ /* { dg-options "-fdump-rtl-loop2_unroll-details -fno-tree-vectorize" } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" "-Os" "-Oz" "-funroll-loops" } { "" } } */
+ 
+ /* Small loop unrolling is enabled by default at -O2 (-funroll-loops with
+    -munroll-only-small-loops), so a loop whose body is within the small-loop
+    instruction threshold is unrolled without any explicit option.  */
+ 
+ int
+ small_loop (int n)
+ {
+   int sum = 0;
+   do
+     sum += n;
+   while (--n);
+   return sum;
+ }
+ 
+ /* { dg-final { scan-rtl-dump "Unrolled loop" "loop2_unroll" } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/riscv/zbb-min-max-05.c gcc-17-20260712/gcc/testsuite/gcc.target/riscv/zbb-min-max-05.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/riscv/zbb-min-max-05.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/riscv/zbb-min-max-05.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-options "-march=rv64gc_zba_zbb -mabi=lp64d -O3" } */
+ /* { dg-skip-if "" { *-*-* } { "-funroll-loops" } } */
  /* Verify that minu/maxu/min/max si3 expansions set SUBREG_PROMOTED,
     so that no redundant sext.w is emitted after the min/max.  */
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/20020926-1.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/20020926-1.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/20020926-1.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/20020926-1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,14 ****
- /* Make sure that LEGITIMIZE_ADDRESS is called to handle
-    negative displacements.  */
- 
- /* { dg-do compile { target { s390-*-* } } } */
- /* { dg-options "-O2 -mesa" } */
- 
- int test (int *addr)
- {
-   return *(addr - 1);
- }
- 
- /* { dg-final { scan-assembler "-4096" } } */
- /* { dg-final { scan-assembler-not "ahi" } } */
- 
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/20140327-1.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/20140327-1.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/20140327-1.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/20140327-1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,10 ****
- /* { dg-do compile { target { ! lp64 } } } */
- /* { dg-options "-O3 -mzarch" } */
- 
- void
- foo ()
- {
-   asm ("" ::: "%f4");
- }
- 
- /* { dg-final { scan-assembler "ld" } } */
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/addsub-signed-overflow-1.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/addsub-signed-overflow-1.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/addsub-signed-overflow-1.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/addsub-signed-overflow-1.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do run } */
! /* { dg-options "-O3 -march=z13 -mzarch --save-temps" } */
  
  #include <stddef.h>
  #include <limits.h>
--- 1,5 ----
  /* { dg-do run } */
! /* { dg-options "-O3 -march=z13 --save-temps" } */
  
  #include <stddef.h>
  #include <limits.h>
*************** main ()
*** 74,83 ****
  /* { dg-final { scan-assembler-not "\tcgr" } } */
  /* { dg-final { scan-assembler-not "\txgr" } } */
  /* { dg-final { scan-assembler-not "\tngr" } } */
! /* On 31 bit the long long variants use risbgn to merge the 32 bit
!    regs into a 64 bit reg.  */
! /* { dg-final { scan-assembler-not "\trisbg" { target { lp64 } } } } */
  /* Just one for the ret != 6 comparison.  */
  /* { dg-final { scan-assembler-times "ci" 1 } } */
! /* { dg-final { scan-assembler-times "\tlochio\t" 6 { target { ! lp64 } } } } */
! /* { dg-final { scan-assembler-times "\tlocghio\t" 6 { target lp64 } } } */
--- 74,80 ----
  /* { dg-final { scan-assembler-not "\tcgr" } } */
  /* { dg-final { scan-assembler-not "\txgr" } } */
  /* { dg-final { scan-assembler-not "\tngr" } } */
! /* { dg-final { scan-assembler-not "\trisbg" } } */
  /* Just one for the ret != 6 comparison.  */
  /* { dg-final { scan-assembler-times "ci" 1 } } */
! /* { dg-final { scan-assembler-times "\tlocghio\t" 6 } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/addsub-signed-overflow-2.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/addsub-signed-overflow-2.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/addsub-signed-overflow-2.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/addsub-signed-overflow-2.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do run } */
! /* { dg-options "-O3 -march=z13 -mzarch --save-temps" } */
  
  #include <stddef.h>
  #include <limits.h>
--- 1,5 ----
  /* { dg-do run } */
! /* { dg-options "-O3 -march=z13 --save-temps" } */
  
  #include <stddef.h>
  #include <limits.h>
*************** main ()
*** 73,82 ****
  /* { dg-final { scan-assembler-not "\tcgr" } } */
  /* { dg-final { scan-assembler-not "\txgr" } } */
  /* { dg-final { scan-assembler-not "\tngr" } } */
! /* On 31 bit the long long variants use risbgn to merge the 32 bit
!    regs into a 64 bit reg.  */
! /* { dg-final { scan-assembler-not "\trisbg" { target { lp64 } } } } */
  /* Just one for the ret != 3 comparison.  */
  /* { dg-final { scan-assembler-times "ci" 1 } } */
! /* { dg-final { scan-assembler-times "\tlochio\t" 6 { target { ! lp64 } } } } */
! /* { dg-final { scan-assembler-times "\tlocghio\t" 6 { target lp64 } } } */
--- 73,79 ----
  /* { dg-final { scan-assembler-not "\tcgr" } } */
  /* { dg-final { scan-assembler-not "\txgr" } } */
  /* { dg-final { scan-assembler-not "\tngr" } } */
! /* { dg-final { scan-assembler-not "\trisbg" } } */
  /* Just one for the ret != 3 comparison.  */
  /* { dg-final { scan-assembler-times "ci" 1 } } */
! /* { dg-final { scan-assembler-times "\tlocghio\t" 6 */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/asm-constant-1.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/asm-constant-1.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/asm-constant-1.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/asm-constant-1.c	Sun Jul 12 22:32:16 2026
***************
*** 1,11 ****
  /* { dg-do compile } */
! /* { dg-final { scan-assembler {# 127 127 128 128 32767 32767 32768 32768 2147483647 2147483647 -2147483648 -2147483648} { target { ! lp64 } } } } */
! /* { dg-final { scan-assembler {# 127 127 128 128 32767 32767 32768 32768 2147483647 2147483647 2147483648 2147483648 9223372036854775807 9223372036854775807 -9223372036854775808 -9223372036854775808} { target lp64 } } } */
  
  void
  test (void)
  {
- #ifdef __s390x__
    __asm__ __volatile__ ("# %0 %c0 %1 %c1 %2 %c2 %3 %c3 %4 %c4 %5 %c5 %6 %c6 %7 %c7" ::
        "i" (0x7f),
        "i" (0x80),
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-final { scan-assembler {# 127 127 128 128 32767 32767 32768 32768 2147483647 2147483647 2147483648 2147483648 9223372036854775807 9223372036854775807 -9223372036854775808 -9223372036854775808} } } */
  
  void
  test (void)
  {
    __asm__ __volatile__ ("# %0 %c0 %1 %c1 %2 %c2 %3 %c3 %4 %c4 %5 %c5 %6 %c6 %7 %c7" ::
        "i" (0x7f),
        "i" (0x80),
*************** test (void)
*** 15,27 ****
        "i" (0x80000000L),
        "i" (0x7fffffffffffffffL),
        "i" (0x8000000000000000L));
- #else
-   __asm__ __volatile__ ("# %0 %c0 %1 %c1 %2 %c2 %3 %c3 %4 %c4 %5 %c5" ::
-       "i" (0x7f),
-       "i" (0x80),
-       "i" (0x7fff),
-       "i" (0x8000),
-       "i" (0x7fffffff),
-       "i" (0x80000000L));
- #endif
  }
--- 13,16 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/call-z10-pic-nodatarel.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/call-z10-pic-nodatarel.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/call-z10-pic-nodatarel.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/call-z10-pic-nodatarel.c	Sun Jul 12 22:32:16 2026
***************
*** 1,18 ****
  /* { dg-do compile } */
! /* { dg-options "-O3 -march=z10 -mzarch -fPIC -mno-pic-data-is-text-relative" } */
  
  #include "call.h"
  
  /* { dg-final { scan-assembler {brasl\t%r\d+,foo@PLT\n} } } */
! /* { dg-final { scan-assembler {lgrl\t%r2,foo@GOTENT\n} { target lp64 } } } */
! /* { dg-final { scan-assembler {lrl\t%r2,foo@GOTENT\n} { target { ! lp64 } } } } */
  
  /* { dg-final { scan-assembler {brasl\t%r\d+,foostatic@PLT\n} } } */
  /* { dg-final { scan-assembler {larl\t%r2,foostatic\n} } } */
  
  /* { dg-final { scan-assembler {brasl\t%r\d+,fooweak@PLT\n} } } */
! /* { dg-final { scan-assembler {lgrl\t%r2,fooweak@GOTENT\n} { target lp64 } } } */
! /* { dg-final { scan-assembler {lrl\t%r2,fooweak@GOTENT\n} { target { ! lp64 } } } } */
  
! /* { dg-final { scan-assembler {foos:\n\t.quad\tfoo\n\t.quad\tfoostatic\n\t.quad\tfooweak\n} { target lp64 } } } */
! /* { dg-final { scan-assembler {foos:\n\t.long\tfoo\n\t.long\tfoostatic\n\t.long\tfooweak\n} { target { ! lp64 } } } } */
--- 1,15 ----
  /* { dg-do compile } */
! /* { dg-options "-O3 -march=z10 -fPIC -mno-pic-data-is-text-relative" } */
  
  #include "call.h"
  
  /* { dg-final { scan-assembler {brasl\t%r\d+,foo@PLT\n} } } */
! /* { dg-final { scan-assembler {lgrl\t%r2,foo@GOTENT\n} } } */
  
  /* { dg-final { scan-assembler {brasl\t%r\d+,foostatic@PLT\n} } } */
  /* { dg-final { scan-assembler {larl\t%r2,foostatic\n} } } */
  
  /* { dg-final { scan-assembler {brasl\t%r\d+,fooweak@PLT\n} } } */
! /* { dg-final { scan-assembler {lgrl\t%r2,fooweak@GOTENT\n} } } */
  
! /* { dg-final { scan-assembler {foos:\n\t.quad\tfoo\n\t.quad\tfoostatic\n\t.quad\tfooweak\n} } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/call-z10-pic.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/call-z10-pic.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/call-z10-pic.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/call-z10-pic.c	Sun Jul 12 22:32:16 2026
***************
*** 4,18 ****
  #include "call.h"
  
  /* { dg-final { scan-assembler {brasl\t%r\d+,foo@PLT\n} } } */
! /* { dg-final { scan-assembler {lgrl\t%r2,foo@GOTENT\n} { target lp64 } } } */
! /* { dg-final { scan-assembler {lrl\t%r2,foo@GOTENT\n} { target { ! lp64 } } } } */
  
  /* { dg-final { scan-assembler {brasl\t%r\d+,foostatic@PLT\n} } } */
  /* { dg-final { scan-assembler {larl\t%r2,foostatic\n} } } */
  
  /* { dg-final { scan-assembler {brasl\t%r\d+,fooweak@PLT\n} } } */
! /* { dg-final { scan-assembler {lgrl\t%r2,fooweak@GOTENT\n} { target lp64 } } } */
! /* { dg-final { scan-assembler {lrl\t%r2,fooweak@GOTENT\n} { target { ! lp64 } } } } */
  
! /* { dg-final { scan-assembler {foos:\n\t.quad\tfoo\n\t.quad\tfoostatic\n\t.quad\tfooweak\n} { target lp64 } } } */
! /* { dg-final { scan-assembler {foos:\n\t.long\tfoo\n\t.long\tfoostatic\n\t.long\tfooweak\n} { target { ! lp64 } } } } */
--- 4,15 ----
  #include "call.h"
  
  /* { dg-final { scan-assembler {brasl\t%r\d+,foo@PLT\n} } } */
! /* { dg-final { scan-assembler {lgrl\t%r2,foo@GOTENT\n} } } */
  
  /* { dg-final { scan-assembler {brasl\t%r\d+,foostatic@PLT\n} } } */
  /* { dg-final { scan-assembler {larl\t%r2,foostatic\n} } } */
  
  /* { dg-final { scan-assembler {brasl\t%r\d+,fooweak@PLT\n} } } */
! /* { dg-final { scan-assembler {lgrl\t%r2,fooweak@GOTENT\n} } } */
  
! /* { dg-final { scan-assembler {foos:\n\t.quad\tfoo\n\t.quad\tfoostatic\n\t.quad\tfooweak\n} } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/call-z10.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/call-z10.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/call-z10.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/call-z10.c	Sun Jul 12 22:32:16 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-O3 -march=z10 -mzarch" } */
  
  #include "call.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-O3 -march=z10" } */
  
  #include "call.h"
  
***************
*** 12,16 ****
  /* { dg-final { scan-assembler {brasl\t%r\d+,fooweak@PLT\n} } } */
  /* { dg-final { scan-assembler {larl\t%r2,fooweak\n} } } */
  
! /* { dg-final { scan-assembler {foos:\n\t.quad\tfoo\n\t.quad\tfoostatic\n\t.quad\tfooweak\n} { target lp64 } } } */
! /* { dg-final { scan-assembler {foos:\n\t.long\tfoo\n\t.long\tfoostatic\n\t.long\tfooweak\n} { target { ! lp64 } } } } */
--- 12,15 ----
  /* { dg-final { scan-assembler {brasl\t%r\d+,fooweak@PLT\n} } } */
  /* { dg-final { scan-assembler {larl\t%r2,fooweak\n} } } */
  
! /* { dg-final { scan-assembler {foos:\n\t.quad\tfoo\n\t.quad\tfoostatic\n\t.quad\tfooweak\n} } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/call-z9-pic-nodatarel.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/call-z9-pic-nodatarel.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/call-z9-pic-nodatarel.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/call-z9-pic-nodatarel.c	Sun Jul 12 22:32:16 2026
***************
*** 12,16 ****
  /* { dg-final { scan-assembler {brasl\t%r\d+,fooweak@PLT\n} } } */
  /* { dg-final { scan-assembler {larl\t%r\d+,fooweak@GOTENT\n} } } */
  
! /* { dg-final { scan-assembler {foos:\n\t.quad\tfoo\n\t.quad\tfoostatic\n\t.quad\tfooweak\n} { target lp64 } } } */
! /* { dg-final { scan-assembler {foos:\n\t.long\tfoo\n\t.long\tfoostatic\n\t.long\tfooweak\n} { target { ! lp64 } } } } */
--- 12,15 ----
  /* { dg-final { scan-assembler {brasl\t%r\d+,fooweak@PLT\n} } } */
  /* { dg-final { scan-assembler {larl\t%r\d+,fooweak@GOTENT\n} } } */
  
! /* { dg-final { scan-assembler {foos:\n\t.quad\tfoo\n\t.quad\tfoostatic\n\t.quad\tfooweak\n} } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/call-z9-pic.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/call-z9-pic.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/call-z9-pic.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/call-z9-pic.c	Sun Jul 12 22:32:16 2026
***************
*** 12,16 ****
  /* { dg-final { scan-assembler {brasl\t%r\d+,fooweak@PLT\n} } } */
  /* { dg-final { scan-assembler {larl\t%r\d+,fooweak@GOTENT\n} } } */
  
! /* { dg-final { scan-assembler {foos:\n\t.quad\tfoo\n\t.quad\tfoostatic\n\t.quad\tfooweak\n} { target lp64 } } } */
! /* { dg-final { scan-assembler {foos:\n\t.long\tfoo\n\t.long\tfoostatic\n\t.long\tfooweak\n} { target { ! lp64 } } } } */
--- 12,15 ----
  /* { dg-final { scan-assembler {brasl\t%r\d+,fooweak@PLT\n} } } */
  /* { dg-final { scan-assembler {larl\t%r\d+,fooweak@GOTENT\n} } } */
  
! /* { dg-final { scan-assembler {foos:\n\t.quad\tfoo\n\t.quad\tfoostatic\n\t.quad\tfooweak\n} } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/call-z9.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/call-z9.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/call-z9.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/call-z9.c	Sun Jul 12 22:32:16 2026
***************
*** 12,16 ****
  /* { dg-final { scan-assembler {brasl\t%r\d+,fooweak@PLT\n} } } */
  /* { dg-final { scan-assembler {larl\t%r2,fooweak\n} } } */
  
! /* { dg-final { scan-assembler {foos:\n\t.quad\tfoo\n\t.quad\tfoostatic\n\t.quad\tfooweak\n} { target lp64 } } } */
! /* { dg-final { scan-assembler {foos:\n\t.long\tfoo\n\t.long\tfoostatic\n\t.long\tfooweak\n} { target { ! lp64 } } } } */
--- 12,15 ----
  /* { dg-final { scan-assembler {brasl\t%r\d+,fooweak@PLT\n} } } */
  /* { dg-final { scan-assembler {larl\t%r2,fooweak\n} } } */
  
! /* { dg-final { scan-assembler {foos:\n\t.quad\tfoo\n\t.quad\tfoostatic\n\t.quad\tfooweak\n} } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/dwarfregtable-1.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/dwarfregtable-1.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/dwarfregtable-1.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/dwarfregtable-1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,21 ****
- /* Make sure the dwarf reg size table doesn't change for 31 bit.  */
- 
- /* { dg-do compile { target { ! lp64 } } } */
- /* { dg-options "-mesa" } */
- 
- #define DWARF_FRAME_REGISTERS 34
- 
- static unsigned char dwarf_reg_size_table[DWARF_FRAME_REGISTERS + 1];
- static unsigned char ref_reg_size_table[DWARF_FRAME_REGISTERS + 1] =
-   { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-     8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 4, 4, 0 };
- 
- int
- main ()
- {
-   __builtin_init_dwarf_reg_size_table (dwarf_reg_size_table);
-   if (__builtin_memcmp (ref_reg_size_table,
- 			dwarf_reg_size_table, DWARF_FRAME_REGISTERS + 1) != 0)
-     __builtin_abort ();
-   return 0;
- }
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/dwarfregtable-2.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/dwarfregtable-2.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/dwarfregtable-2.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/dwarfregtable-2.c	Thu Jan  1 00:00:00 1970
***************
*** 1,21 ****
- /* Make sure the dwarf reg size table doesn't change for 31 bit zarch.  */
- 
- /* { dg-do compile { target { ! lp64 } } } */
- /* { dg-options "-mzarch" } */
- 
- #define DWARF_FRAME_REGISTERS 34
- 
- static unsigned char dwarf_reg_size_table[DWARF_FRAME_REGISTERS + 1];
- static unsigned char ref_reg_size_table[DWARF_FRAME_REGISTERS + 1] =
-   { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-     8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 4, 4, 0 };
- 
- int
- main ()
- {
-   __builtin_init_dwarf_reg_size_table (dwarf_reg_size_table);
-   if (__builtin_memcmp (ref_reg_size_table,
- 			dwarf_reg_size_table, DWARF_FRAME_REGISTERS + 1) != 0)
-     __builtin_abort ();
-   return 0;
- }
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/fcall-saved.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/fcall-saved.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/fcall-saved.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/fcall-saved.c	Sun Jul 12 22:32:16 2026
***************
*** 1,11 ****
  /* { dg-do compile } */
! /* { dg-options "-O3 -mzarch -fcall-saved-r4" } */
  
  void test(void) {
      asm volatile("nop" ::: "r4");
  }
  
! /* { dg-final { scan-assembler-times "\tstg\t" 1 { target { lp64 } } } } */
! /* { dg-final { scan-assembler-times "\tlg\t" 1 { target { lp64 } } } } */
! /* { dg-final { scan-assembler-times "\tst\t" 1 { target { ! lp64 } } } } */
! /* { dg-final { scan-assembler-times "\tl\t" 1 { target { ! lp64 } } } } */
--- 1,9 ----
  /* { dg-do compile } */
! /* { dg-options "-O3 -fcall-saved-r4" } */
  
  void test(void) {
      asm volatile("nop" ::: "r4");
  }
  
! /* { dg-final { scan-assembler-times "\tstg\t" 1 } } */
! /* { dg-final { scan-assembler-times "\tlg\t" 1 } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/fp2int1.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/fp2int1.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/fp2int1.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/fp2int1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,95 ****
- /* Test for the 32 bit fp to 64 bit int conversion routines.
-    
-    On S/390 32 bit we use our own implementations in order to be IEEE
-    complaint as we are with our machine instructions.  These missed to
-    throw FE_INVALID exceptions in a bunch of cases.  */
- 
- /* { dg-do run { target s390-*-* } } */
- /* { dg-options "-O3 -mesa" } */
- /* { dg-require-effective-target fenv_exceptions } */
- 
- #define _GNU_SOURCE
- #include <stdlib.h>
- #include <stdio.h>
- #include <fenv.h>
- 
- #define INFINITYf       (__builtin_inff())
- #define INFINITY        (__builtin_inf())
- #define INFINITYl       (__builtin_infl())
- #define NANf            (__builtin_nanf (""))
- #define NAN             (__builtin_nan (""))
- #define NANl            (__builtin_nanl (""))
- 
- #define TESTEXCEPT_FUNC(FUNC, TYPE_FROM, TYPE_TO)			\
-   TYPE_TO								\
-   __attribute__((noinline)) FUNC (TYPE_FROM a)				\
-   {									\
-     asm volatile ("" : : "f" (a));					\
-     return (TYPE_TO)a;							\
-   }
- 
- #define TESTEXCEPT(FUNC, EXCEPT, EXPECT, VALUE, TYPE_TO)		\
-   {									\
-     TYPE_TO b;								\
-     feclearexcept (FE_ALL_EXCEPT);					\
-     b = FUNC (VALUE);							\
-     if ((fetestexcept (EXCEPT) & (EXCEPT)) != EXPECT)			\
-       {									\
- 	printf ("FAIL in line: %d\n", __LINE__);			\
- 	abort ();							\
-       }									\
-   }
- 
- #define TESTEXCEPT_FUNC_ALLFLOATS(FUNC, TYPE_TO)		\
-   TESTEXCEPT_FUNC (FUNC##_f, float, TYPE_TO);			\
-   TESTEXCEPT_FUNC (FUNC##_d, double, TYPE_TO);			\
-   TESTEXCEPT_FUNC (FUNC##_l, long double, TYPE_TO);		\
- 
- #define TESTEXCEPT_ALLFLOATS(FUNC, EXCEPT, EXPECT, VALUE, TYPE_TO)	\
-   TESTEXCEPT (FUNC##_f, EXCEPT, EXPECT, VALUE##f, TYPE_TO);		\
-   TESTEXCEPT (FUNC##_d, EXCEPT, EXPECT, VALUE, TYPE_TO);		\
-   TESTEXCEPT (FUNC##_l, EXCEPT, EXPECT, VALUE##l, TYPE_TO);		\
- 
- TESTEXCEPT_FUNC_ALLFLOATS (a, unsigned long long);
- TESTEXCEPT_FUNC_ALLFLOATS (u, long long);
- 
- 
- int
- main ()
- {
-   /* Prevent getting signals.  */
-   fedisableexcept (FE_INVALID);
- 
-   /* To unsigned long long */
- 
-   TESTEXCEPT_ALLFLOATS (a, FE_INVALID, FE_INVALID, INFINITY, unsigned long long);
-   TESTEXCEPT_ALLFLOATS (a, FE_INVALID, FE_INVALID, -INFINITY, unsigned long long);
-   TESTEXCEPT_ALLFLOATS (a, FE_INVALID, FE_INVALID, NAN, unsigned long long);
-   TESTEXCEPT_ALLFLOATS (a, FE_INVALID, FE_INVALID, -NAN, unsigned long long);
- 
-   /* Negative values >-1.0 must not cause FE_INVALID.  */
-   TESTEXCEPT_ALLFLOATS (a, FE_INVALID, 0, -0x0.ffffffp0, unsigned long long);
-   /* -1.0 instead must.  */
-   TESTEXCEPT_ALLFLOATS (a, FE_INVALID, FE_INVALID, -0x1.0p+0, unsigned long long);
-   TESTEXCEPT_ALLFLOATS (a, FE_INVALID, 0, 0x1.0p+63, unsigned long long);
-   TESTEXCEPT_ALLFLOATS (a, FE_INVALID, FE_INVALID, 0x1.0p+64, unsigned long long);
- 
-   /* To signed long long */
- 
-   TESTEXCEPT_ALLFLOATS (u, FE_INVALID, FE_INVALID, INFINITY, long long);
-   TESTEXCEPT_ALLFLOATS (u, FE_INVALID, FE_INVALID, -INFINITY, long long);
-   TESTEXCEPT_ALLFLOATS (u, FE_INVALID, FE_INVALID, NAN, long long);
-   TESTEXCEPT_ALLFLOATS (u, FE_INVALID, FE_INVALID, -NAN, long long);
- 
-   TESTEXCEPT_ALLFLOATS (u, FE_INVALID, 0, -0x1.0p+63, long long);
-   TESTEXCEPT_ALLFLOATS (u, FE_INVALID, FE_INVALID, -0x1.1p+63, long long);
-   TESTEXCEPT_ALLFLOATS (u, FE_INVALID, 0, 0x0.fffffp+63, long long);
-   TESTEXCEPT_ALLFLOATS (u, FE_INVALID, FE_INVALID, 0x1.0p+63, long long);
- 
-   /* If there are additional bits which would not make it into the
-      integer value no exception is supposed to occur.  */
-   TESTEXCEPT (u_l, FE_INVALID,          0, -0x1.000000000000000123p+63l, long long);
-   TESTEXCEPT (u_l, FE_INVALID, FE_INVALID, -0x1.000000000000000223p+63l, long long);
- 
-   return 0;
- }
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/global-array-element-pic2.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/global-array-element-pic2.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/global-array-element-pic2.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/global-array-element-pic2.c	Sun Jul 12 22:32:16 2026
***************
*** 1,6 ****
  /* Test accesses to global array elements in PIC code.  */
  /* { dg-do compile } */
! /* { dg-options "-O1 -march=z10 -mzarch -fPIC" } */
  
  extern char a[] __attribute__ ((aligned (2)));
  extern char *b;
--- 1,6 ----
  /* Test accesses to global array elements in PIC code.  */
  /* { dg-do compile } */
! /* { dg-options "-O1 -march=z10 -fPIC" } */
  
  extern char a[] __attribute__ ((aligned (2)));
  extern char *b;
*************** extern char *b;
*** 8,14 ****
  void c()
  {
    b = a + 4;
!   /* { dg-final { scan-assembler "(?n)\n\tlgrl\t%r\\d+,a@GOTENT\n" { target lp64 } } } */
!   /* { dg-final { scan-assembler "(?n)\n\tlrl\t%r\\d+,a@GOTENT\n" { target { ! lp64 } } } } */
    /* { dg-final { scan-assembler-not "(?n)\n\tlarl\t%r\\d+,a\[^@\]" } } */
  }
--- 8,13 ----
  void c()
  {
    b = a + 4;
!   /* { dg-final { scan-assembler "(?n)\n\tlgrl\t%r\\d+,a@GOTENT\n" } } */
    /* { dg-final { scan-assembler-not "(?n)\n\tlarl\t%r\\d+,a\[^@\]" } } */
  }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/insv-1.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/insv-1.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/insv-1.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/insv-1.c	Sun Jul 12 22:32:16 2026
*************** foo4c (unsigned long a, unsigned long b)
*** 109,118 ****
  }
  
  /* The functions foo3, foo4, foo3b, foo4b no longer use risbg but rosbg instead.
! 
!    On 64 bit, four risbg go away and four new ones appear in other functions
!      { dg-final { scan-assembler-times "risbg" 6 { target { lp64 } } } }
! 
!    ... but not on 31 bit.
!      { dg-final { scan-assembler-times "risbg" 2 { target { ! lp64 } } } }
! */
--- 109,112 ----
  }
  
  /* The functions foo3, foo4, foo3b, foo4b no longer use risbg but rosbg instead.
!    { dg-final { scan-assembler-times "risbg" 6 } }  */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/isfinite-isinf-isnormal-signbit-2.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/isfinite-isinf-isnormal-signbit-2.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/isfinite-isinf-isnormal-signbit-2.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/isfinite-isinf-isnormal-signbit-2.c	Sun Jul 12 22:32:16 2026
***************
*** 3,12 ****
  
  #include "isfinite-isinf-isnormal-signbit.h"
  
! /* { dg-final { scan-assembler-times {tcxb\t%f[0-9]+,1365} 0 { target lp64 } } } SIGNBIT long double */
! /* { dg-final { scan-assembler-times {tdcxt\t%f[0-9]+,1365} 0 { target lp64 } } } SIGNBIT _Decimal128 */
! /* { dg-final { scan-assembler-times {tcxb\t%f[0-9]+,1365} 1 { target { ! lp64 } } } } SIGNBIT long double */
! /* { dg-final { scan-assembler-times {tdcxt\t%f[0-9]+,1365} 1 { target { ! lp64 } } } } SIGNBIT _Decimal128 */
  /* { dg-final { scan-assembler-times {tcxb\t%f[0-9]+,4032} 1 } } ISFINITE long double */
  /* { dg-final { scan-assembler-times {tdcxt\t%f[0-9]+,4032} 1 } } ISFINITE _Decimal128 */
  /* { dg-final { scan-assembler-times {tcxb\t%f[0-9]+,48} 1 } } ISINF long double */
--- 3,10 ----
  
  #include "isfinite-isinf-isnormal-signbit.h"
  
! /* { dg-final { scan-assembler-times {tcxb\t%f[0-9]+,1365} 0 } } SIGNBIT long double */
! /* { dg-final { scan-assembler-times {tdcxt\t%f[0-9]+,1365} 0 } } SIGNBIT _Decimal128 */
  /* { dg-final { scan-assembler-times {tcxb\t%f[0-9]+,4032} 1 } } ISFINITE long double */
  /* { dg-final { scan-assembler-times {tdcxt\t%f[0-9]+,4032} 1 } } ISFINITE _Decimal128 */
  /* { dg-final { scan-assembler-times {tcxb\t%f[0-9]+,48} 1 } } ISINF long double */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/isfinite-isinf-isnormal-signbit-3.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/isfinite-isinf-isnormal-signbit-3.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/isfinite-isinf-isnormal-signbit-3.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/isfinite-isinf-isnormal-signbit-3.c	Sun Jul 12 22:32:16 2026
***************
*** 3,12 ****
  
  #include "isfinite-isinf-isnormal-signbit.h"
  
! /* { dg-final { scan-assembler-times {wftcixb\t%v[0-9]+,%v[0-9]+,1365} 0 { target lp64 } } } */
! /* { dg-final { scan-assembler-times {tdcxt\t%f[0-9]+,1365} 0 { target lp64 } } } */
! /* { dg-final { scan-assembler-times {wftcixb\t%v[0-9]+,%v[0-9]+,1365} 1 { target { ! lp64 } } } } */
! /* { dg-final { scan-assembler-times {tdcxt\t%f[0-9]+,1365} 1 { target { ! lp64 } } } } */
  /* { dg-final { scan-assembler-times {wftcixb\t%v[0-9]+,%v[0-9]+,4032} 1 } } */
  /* { dg-final { scan-assembler-times {tdcxt\t%f[0-9]+,4032} 1 } } */
  /* { dg-final { scan-assembler-times {wftcixb\t%v[0-9]+,%v[0-9]+,48} 1 } } */
--- 3,10 ----
  
  #include "isfinite-isinf-isnormal-signbit.h"
  
! /* { dg-final { scan-assembler-times {wftcixb\t%v[0-9]+,%v[0-9]+,1365} 0 } } */
! /* { dg-final { scan-assembler-times {tdcxt\t%f[0-9]+,1365} 0 } } */
  /* { dg-final { scan-assembler-times {wftcixb\t%v[0-9]+,%v[0-9]+,4032} 1 } } */
  /* { dg-final { scan-assembler-times {tdcxt\t%f[0-9]+,4032} 1 } } */
  /* { dg-final { scan-assembler-times {wftcixb\t%v[0-9]+,%v[0-9]+,48} 1 } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/larl-1.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/larl-1.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/larl-1.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/larl-1.c	Sun Jul 12 22:32:16 2026
***************
*** 1,14 ****
  /* Check if load-address-relative instructions are created */
  
! /* { dg-do compile { target { s390*-*-* } } } */
  /* { dg-options "-O2 -march=z10 -mzarch -fno-section-anchors" } */
  
  /* An explicitly misaligned symbol.  This symbol is NOT aligned as
     mandated by our ABI.  However, the back-end needs to handle that in
     order to make things like __attribute__((packed)) work.  The symbol
     address is expected to be loaded from literal pool.  */
! /* { dg-final { scan-assembler "lgrl\t%r2," { target { lp64 } } } } */
! /* { dg-final { scan-assembler "lrl\t%r2," { target { ! lp64 } } } } */
  extern char align1 __attribute__((aligned(1)));
  
  /* { dg-final { scan-assembler "larl\t%r2,align2" } } */
--- 1,13 ----
  /* Check if load-address-relative instructions are created */
  
! /* { dg-do compile } */
  /* { dg-options "-O2 -march=z10 -mzarch -fno-section-anchors" } */
  
  /* An explicitly misaligned symbol.  This symbol is NOT aligned as
     mandated by our ABI.  However, the back-end needs to handle that in
     order to make things like __attribute__((packed)) work.  The symbol
     address is expected to be loaded from literal pool.  */
! /* { dg-final { scan-assembler "lgrl\t%r2," } } */
  extern char align1 __attribute__((aligned(1)));
  
  /* { dg-final { scan-assembler "larl\t%r2,align2" } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/leaf-profile.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/leaf-profile.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/leaf-profile.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/leaf-profile.c	Sun Jul 12 22:32:16 2026
*************** foo ()
*** 6,10 ****
  {
  }
  /* Make sure no stack frame is generated.  */
- /* { dg-final { scan-assembler-not "ahi" { target s390-*-* } } } */
  /* { dg-final { scan-assembler-not "aghi" { target s390x-*-* } } } */
--- 6,9 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/load-relative-check.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/load-relative-check.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/load-relative-check.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/load-relative-check.c	Sun Jul 12 22:32:16 2026
***************
*** 1,14 ****
  /* Check if load-relative instructions are created */
! /* { dg-do compile { target { s390*-*-* } } } */
  /* { dg-options "-O2 -march=z10 -mzarch -fno-section-anchors" } */
  
! /* { dg-final { scan-assembler "lgfrl\t%r.?,b.4" { target { lp64 } } } } */
! /* { dg-final { scan-assembler "lgfrl\t%r.?,s.12" { target { lp64 } } } } */
! /* { dg-final { scan-assembler "lgrl\t%r.?,s" { target { lp64 } } } } */
! 
! /* { dg-final { scan-assembler "lrl\t%r.?,b.4" { target { ! lp64 } } } } */
! /* { dg-final { scan-assembler "lrl\t%r.?,s.8" { target { ! lp64 } } } } */
! /* { dg-final { scan-assembler "lrl\t%r.?,s" { target { ! lp64 } } } } */
  
  int b[20];
  
--- 1,10 ----
  /* Check if load-relative instructions are created */
! /* { dg-do compile } */
  /* { dg-options "-O2 -march=z10 -mzarch -fno-section-anchors" } */
  
! /* { dg-final { scan-assembler "lgfrl\t%r.?,b.4" } } */
! /* { dg-final { scan-assembler "lgfrl\t%r.?,s.12" } } */
! /* { dg-final { scan-assembler "lgrl\t%r.?,s" } } */
  
  int b[20];
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/load-thread-pointer-once-2.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/load-thread-pointer-once-2.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/load-thread-pointer-once-2.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/load-thread-pointer-once-2.c	Sun Jul 12 22:32:16 2026
*************** void a(void)
*** 10,14 ****
      c(b);
  }
  
! /* { dg-final { scan-assembler-times {\n\tear\t} 2 { target { lp64 } } } } */
! /* { dg-final { scan-assembler-times {\n\tear\t} 1 { target { ! lp64 } } } } */
--- 10,13 ----
      c(b);
  }
  
! /* { dg-final { scan-assembler-times {\n\tear\t} 2 } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/load-thread-pointer-once.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/load-thread-pointer-once.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/load-thread-pointer-once.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/load-thread-pointer-once.c	Sun Jul 12 22:32:16 2026
*************** void *bar()
*** 8,12 ****
    return (foo = __builtin_thread_pointer());
  }
  
! /* { dg-final { scan-assembler-times {\n\tear\t} 2 { target { lp64 } } } } */
! /* { dg-final { scan-assembler-times {\n\tear\t} 1 { target { ! lp64 } } } } */
--- 8,11 ----
    return (foo = __builtin_thread_pointer());
  }
  
! /* { dg-final { scan-assembler-times {\n\tear\t} 2 } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/loc-1.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/loc-1.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/loc-1.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/loc-1.c	Sun Jul 12 22:32:16 2026
*************** unsigned long loc_r (unsigned long rc, u
*** 9,16 ****
      rc = val;
    return rc;
  }
! /* { dg-final { scan-assembler "\tlocgrne\t%r2,%r4" { target { lp64 } } } } */
! /* { dg-final { scan-assembler "\tlocrne\t%r2,%r4" { target { ! lp64 } } } } */
  
  long loc_hi (long rc, long cond)
  {
--- 9,15 ----
      rc = val;
    return rc;
  }
! /* { dg-final { scan-assembler "\tlocgrne\t%r2,%r4" } } */
  
  long loc_hi (long rc, long cond)
  {
*************** long loc_hi (long rc, long cond)
*** 18,22 ****
      rc = (long)-1;
    return rc;
  }
! /* { dg-final { scan-assembler "\tlocghine\t%r2,-1" { target { lp64 } } } } */
! /* { dg-final { scan-assembler "\tlochine\t%r2,-1" { target { ! lp64 } } } } */
--- 17,20 ----
      rc = (long)-1;
    return rc;
  }
! /* { dg-final { scan-assembler "\tlocghine\t%r2,-1" } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/md/andc-splitter-2.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/md/andc-splitter-2.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/md/andc-splitter-2.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/md/andc-splitter-2.c	Sun Jul 12 22:32:16 2026
***************
*** 16,40 ****
  __attribute__ ((noinline))
  unsigned int andc_vv(unsigned int a, unsigned int b)
  { return ~b & a; }
! /* { dg-final { scan-assembler ":18:.\* \{\\*andsi3_\(esa\|zarch\)\}" } } */
  /* { dg-final { scan-assembler ":18:.\* \{\\*xorsi3\}" } } */
  
  __attribute__ ((noinline))
  unsigned int andc_pv(unsigned int *a, unsigned int b)
  { return ~b & *a; }
! /* { dg-final { scan-assembler ":24:.\* \{\\*andsi3_\(esa\|zarch\)\}" } } */
  /* { dg-final { scan-assembler ":24:.\* \{\\*xorsi3\}" } } */
  
  __attribute__ ((noinline))
  unsigned int andc_vp(unsigned int a, unsigned int *b)
  { return ~*b & a; }
! /* { dg-final { scan-assembler ":30:.\* \{\\*andsi3_\(esa\|zarch\)\}" } } */
  /* { dg-final { scan-assembler ":30:.\* \{\\*xorsi3\}" } } */
  
  __attribute__ ((noinline))
  unsigned int andc_pp(unsigned int *a, unsigned int *b)
  { return ~*b & *a; }
! /* { dg-final { scan-assembler ":36:.\* \{\\*andsi3_\(esa\|zarch\)\}" } } */
  /* { dg-final { scan-assembler ":36:.\* \{\\*xorsi3\}" } } */
  
  /* { dg-final { scan-assembler-times "\tng\?r\?k\?\t" 4 } } */
--- 16,40 ----
  __attribute__ ((noinline))
  unsigned int andc_vv(unsigned int a, unsigned int b)
  { return ~b & a; }
! /* { dg-final { scan-assembler ":18:.\* \{\\*andsi3\}" } } */
  /* { dg-final { scan-assembler ":18:.\* \{\\*xorsi3\}" } } */
  
  __attribute__ ((noinline))
  unsigned int andc_pv(unsigned int *a, unsigned int b)
  { return ~b & *a; }
! /* { dg-final { scan-assembler ":24:.\* \{\\*andsi3\}" } } */
  /* { dg-final { scan-assembler ":24:.\* \{\\*xorsi3\}" } } */
  
  __attribute__ ((noinline))
  unsigned int andc_vp(unsigned int a, unsigned int *b)
  { return ~*b & a; }
! /* { dg-final { scan-assembler ":30:.\* \{\\*andsi3\}" } } */
  /* { dg-final { scan-assembler ":30:.\* \{\\*xorsi3\}" } } */
  
  __attribute__ ((noinline))
  unsigned int andc_pp(unsigned int *a, unsigned int *b)
  { return ~*b & *a; }
! /* { dg-final { scan-assembler ":36:.\* \{\\*andsi3\}" } } */
  /* { dg-final { scan-assembler ":36:.\* \{\\*xorsi3\}" } } */
  
  /* { dg-final { scan-assembler-times "\tng\?r\?k\?\t" 4 } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/mnop-mcount-m31-mzarch.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/mnop-mcount-m31-mzarch.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/mnop-mcount-m31-mzarch.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/mnop-mcount-m31-mzarch.c	Thu Jan  1 00:00:00 1970
***************
*** 1,8 ****
- /* { dg-do compile } */
- /* { dg-options "-m31 -mzarch -pg -mnop-mcount" } */
- 
- void
- profileme (void)
- {
-   /* { dg-final { scan-assembler "NOPs for -mnop-mcount \\(7 halfwords\\)\n.*brcl\t0,0\n.*brcl\t0,0\n.*bcr\t0,0" } } */
- }
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/mrecord-mcount.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/mrecord-mcount.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/mrecord-mcount.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/mrecord-mcount.c	Sun Jul 12 22:32:16 2026
*************** void
*** 5,11 ****
  profileme (void)
  {
    /* { dg-final { scan-assembler ".section __mcount_loc, \"a\",@progbits" } } */
!   /* { dg-final { scan-assembler ".long 1b" { target { ! lp64 } } } } */
!   /* { dg-final { scan-assembler ".quad 1b" { target { lp64 } } } } */
    /* { dg-final { scan-assembler ".previous" } } */
  }
--- 5,10 ----
  profileme (void)
  {
    /* { dg-final { scan-assembler ".section __mcount_loc, \"a\",@progbits" } } */
!   /* { dg-final { scan-assembler ".quad 1b" } } */
    /* { dg-final { scan-assembler ".previous" } } */
  }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/mul-signed-overflow-1.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/mul-signed-overflow-1.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/mul-signed-overflow-1.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/mul-signed-overflow-1.c	Sun Jul 12 22:32:16 2026
*************** main ()
*** 50,59 ****
  /* { dg-final { scan-assembler-not "\tcgr" } } */
  /* { dg-final { scan-assembler-not "\txgr" } } */
  /* { dg-final { scan-assembler-not "\tngr" } } */
! /* On 31 bit the long long variants use risbgn to merge the 32 bit
!    regs into a 64 bit reg.  */
! /* { dg-final { scan-assembler-not "\trisbg" { target { lp64 } } } } */
  /* Just one for the ret != 3 comparison.  */
  /* { dg-final { scan-assembler-times "ci" 1 } } */
! /* { dg-final { scan-assembler-times "\tlochio\t" 3 { target { ! lp64 } } } } */
! /* { dg-final { scan-assembler-times "\tlocghio\t" 3 { target lp64 } } } */
--- 50,56 ----
  /* { dg-final { scan-assembler-not "\tcgr" } } */
  /* { dg-final { scan-assembler-not "\txgr" } } */
  /* { dg-final { scan-assembler-not "\tngr" } } */
! /* { dg-final { scan-assembler-not "\trisbg" } } */
  /* Just one for the ret != 3 comparison.  */
  /* { dg-final { scan-assembler-times "ci" 1 } } */
! /* { dg-final { scan-assembler-times "\tlocghio\t" 3 } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/mul-signed-overflow-2.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/mul-signed-overflow-2.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/mul-signed-overflow-2.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/mul-signed-overflow-2.c	Sun Jul 12 22:32:16 2026
*************** main ()
*** 52,59 ****
  /* { dg-final { scan-assembler-not "\tngr" } } */
  /* On 31 bit the long long variants use risbgn to merge the 32 bit
     regs into a 64 bit reg.  */
! /* { dg-final { scan-assembler-not "\trisbg" { target { lp64 } } } } */
  /* Just one for the ret != 3 comparison.  */
  /* { dg-final { scan-assembler-times "ci" 1 } } */
! /* { dg-final { scan-assembler-times "\tlochio\t" 3 { target { ! lp64 } } } } */
! /* { dg-final { scan-assembler-times "\tlocghio\t" 3 { target lp64 } } } */
--- 52,58 ----
  /* { dg-final { scan-assembler-not "\tngr" } } */
  /* On 31 bit the long long variants use risbgn to merge the 32 bit
     regs into a 64 bit reg.  */
! /* { dg-final { scan-assembler-not "\trisbg" } } */
  /* Just one for the ret != 3 comparison.  */
  /* { dg-final { scan-assembler-times "ci" 1 } } */
! /* { dg-final { scan-assembler-times "\tlocghio\t" 3 } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/not.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/not.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/not.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/not.c	Sun Jul 12 22:32:16 2026
*************** foo (unsigned long a)
*** 7,11 ****
    return ~a;
  }
  
! /* { dg-final { scan-assembler-times "\tnngrk\t" 1 { target { lp64 } } } } */
! /* { dg-final { scan-assembler-times "\tnnrk\t" 1 { target { ! lp64 } } } } */
--- 7,10 ----
    return ~a;
  }
  
! /* { dg-final { scan-assembler-times "\tnngrk\t" 1 } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/pr102222.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/pr102222.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/pr102222.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/pr102222.c	Thu Jan  1 00:00:00 1970
***************
*** 1,16 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -m31 -mesa" } */
- 
- struct squashfs_reg_inode_header_1 read_inode_inode;
- 
- int read_inode_val;
- 
- struct squashfs_reg_inode_header_1
- {
-   int file_size:32;
- } __attribute__((packed)) read_inode ();
- 
- void foo (void)
- {
-   read_inode_inode.file_size = read_inode_val;
- }
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/pr106355-2.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/pr106355-2.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/pr106355-2.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/pr106355-2.c	Thu Jan  1 00:00:00 1970
***************
*** 1,8 ****
- /* { dg-do compile { target { s390-*-* } } } */
- /* { dg-options "-foptimize-sibling-calls -mzarch" } */
- /* { dg-final { scan-assembler {brasl\t%r\d+,bar} } } */
- 
- /* This tests function s390_call_saved_register_used where
-    GET_CODE (parm_rtx) == PARALLEL holds.  */
- 
- #include "pr106355.h"
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/pr106355-3.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/pr106355-3.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/pr106355-3.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/pr106355-3.c	Thu Jan  1 00:00:00 1970
***************
*** 1,8 ****
- /* { dg-do compile { target { s390-*-* } } } */
- /* { dg-options "-foptimize-sibling-calls -mesa" } */
- /* { dg-final { scan-assembler {brasl\t%r\d+,bar} } } */
- 
- /* This tests function s390_call_saved_register_used where
-    REG_P (parm_rtx) and nregs == 2 holds.  */
- 
- #include "pr106355.h"
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/pr119873-5.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/pr119873-5.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/pr119873-5.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/pr119873-5.c	Thu Jan  1 00:00:00 1970
***************
*** 1,11 ****
- /* PR target/119873 */
- /* { dg-do compile } */
- /* { dg-options "-O2 -m31 -mzarch" } */
- 
- extern void foo (int x, int y, int z, long long w, int v);
- 
- void
- bar (int x, int y, int z, long long w, int v)
- {
-   [[gnu::musttail]] return foo (x, y, z, w, v);
- }
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/pr42224.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/pr42224.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/pr42224.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/pr42224.c	Sun Jul 12 22:32:16 2026
***************
*** 1,6 ****
--- 1,8 ----
  /* { dg-do compile } */
  /* { dg-options "-O0 -Wno-implicit-function-declaration" } */
  
+ #ifdef __tpf__
+ 
  typedef char* __char_ptr32 __attribute__ (( mode (SI) ));
  typedef __char_ptr32 *__char_ptr_char_ptr32 __attribute__ ((mode (SI)));
  
*************** to_ptr32_ptr32 (char **ptr64)
*** 33,35 ****
--- 35,38 ----
  
  }
  
+ #endif
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/pr61078.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/pr61078.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/pr61078.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/pr61078.c	Thu Jan  1 00:00:00 1970
***************
*** 1,26 ****
- /* This testcase is extracted from s390_emit_prologue.  The negation
-    of a 64bit value got split incorrectly on 31 bit.  */
- 
- /* { dg-do run { target { ! lp64 } } } */
- /* { dg-options "-O2 -mesa" } */
- 
- extern void abort (void);
- 
- long long frame_size = 42;
- 
- int __attribute__((noinline))
- foo  (int a __attribute__((unused)), long long b)
- {
-   return (int)b;
- }
- 
- int
- main ()
- {
-     if (frame_size > 0)
-     {
-       if (foo (0, -frame_size) != -42)
- 	abort ();
-     }
-     return 0;
- }
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/preserve-args-1.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/preserve-args-1.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/preserve-args-1.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/preserve-args-1.c	Sun Jul 12 22:32:16 2026
*************** foo (int a, int b, int c, double d, doub
*** 10,17 ****
    return a + c + (int)d + (int)e;
  }
  
! /* { dg-final { scan-assembler "stmg\t%r2,%r4,\[0-9\]*\\(%r15\\)" { target lp64 } } } */
! /* { dg-final { scan-assembler "stm\t%r2,%r4,\[0-9\]*\\(%r15\\)" { target { ! lp64 } } } } */
  
  /* { dg-final { scan-assembler "std\t%f0,\[0-9\]*\\(%r15\\)" } } */
  /* { dg-final { scan-assembler "std\t%f2,\[0-9\]*\\(%r15\\)" } } */
--- 10,16 ----
    return a + c + (int)d + (int)e;
  }
  
! /* { dg-final { scan-assembler "stmg\t%r2,%r4,\[0-9\]*\\(%r15\\)" } } */
  
  /* { dg-final { scan-assembler "std\t%f0,\[0-9\]*\\(%r15\\)" } } */
  /* { dg-final { scan-assembler "std\t%f2,\[0-9\]*\\(%r15\\)" } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/preserve-args-3.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/preserve-args-3.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/preserve-args-3.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/preserve-args-3.c	Sun Jul 12 22:32:16 2026
*************** foo (int a, int, int c, double d, ...)
*** 12,19 ****
    return a + c + va_arg(argp, int) + va_arg(argp, int) + (int)va_arg(argp, double);
  }
  
! /* { dg-final { scan-assembler "stmg\t%r2,%r15,\[0-9\]*\\(%r15\\)" { target lp64 } } } */
! /* { dg-final { scan-assembler "stm\t%r2,%r15,\[0-9\]*\\(%r15\\)" { target { ! lp64 } } } } */
  
  /* { dg-final { scan-assembler "std\t%f0,\[0-9\]*\\(%r15\\)" } } */
  /* { dg-final { scan-assembler "std\t%f2,\[0-9\]*\\(%r15\\)" } } */
--- 12,18 ----
    return a + c + va_arg(argp, int) + va_arg(argp, int) + (int)va_arg(argp, double);
  }
  
! /* { dg-final { scan-assembler "stmg\t%r2,%r15,\[0-9\]*\\(%r15\\)" } } */
  
  /* { dg-final { scan-assembler "std\t%f0,\[0-9\]*\\(%r15\\)" } } */
  /* { dg-final { scan-assembler "std\t%f2,\[0-9\]*\\(%r15\\)" } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/risbg-ll-1.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/risbg-ll-1.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/risbg-ll-1.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/risbg-ll-1.c	Sun Jul 12 22:32:16 2026
*************** i32 f1 (i32 v_foo)
*** 25,32 ****
  // ...and again with i64.
  i64 f2 (i64 v_foo)
  {
!   /* { dg-final { scan-assembler "f2:\n\trisbg\t%r2,%r2,64-1,128\\\+63,53\\\+1" { target { lp64 } } } } */
!   /* { dg-final { scan-assembler "f2:\n\trisbg\t%r3,%r3,64-1,128\\\+63,53\\\+1\n\tlhi\t%r2,0" { target { ! lp64 } } } } */
    i64 v_shr = ((ui64)v_foo) >> 10;
    i64 v_and = v_shr & 1;
    return v_and;
--- 25,31 ----
  // ...and again with i64.
  i64 f2 (i64 v_foo)
  {
!   /* { dg-final { scan-assembler "f2:\n\trisbg\t%r2,%r2,64-1,128\\\+63,53\\\+1" } } */
    i64 v_shr = ((ui64)v_foo) >> 10;
    i64 v_and = v_shr & 1;
    return v_and;
*************** i32 f3 (i32 v_foo)
*** 44,51 ****
  // ...and again with i64.
  i64 f4 (i64 v_foo)
  {
!   /* { dg-final { scan-assembler "f4:\n\trisbg\t%r2,%r2,60,128\\\+61,64-22" { target { lp64 } } } } */
!   /* { dg-final { scan-assembler "f4:\n\trisbg\t%r3,%r3,60,128\\\+61,64-22\n\tlhi\t%r2,0" { target { ! lp64 } } } } */
    i64 v_shr = ((ui64)v_foo) >> 22;
    i64 v_and = v_shr & 12;
    return v_and;
--- 43,49 ----
  // ...and again with i64.
  i64 f4 (i64 v_foo)
  {
!   /* { dg-final { scan-assembler "f4:\n\trisbg\t%r2,%r2,60,128\\\+61,64-22" } } */
    i64 v_shr = ((ui64)v_foo) >> 22;
    i64 v_and = v_shr & 12;
    return v_and;
*************** i32 f5 (i32 v_foo)
*** 64,71 ****
  // ...and again with i64.
  i64 f6 (i64 v_foo)
  {
!   /* { dg-final { scan-assembler "f6:\n\trisbg\t%r2,%r2,2,128\\\+60,64-2" { target { lp64 } } } } */
!   /* { dg-final { scan-assembler "f6:\n\trisbg\t%r3,%r2,0,0\\\+32-1,64-0-32\n\trisbg\t%r2,%r3,2,128\\\+60,64-2" { target { ! lp64 } } } } */
    i64 v_shr = ((ui64)v_foo) >> 2;
    i64 v_and = v_shr & -8;
    return v_and;
--- 62,68 ----
  // ...and again with i64.
  i64 f6 (i64 v_foo)
  {
!   /* { dg-final { scan-assembler "f6:\n\trisbg\t%r2,%r2,2,128\\\+60,64-2" } } */
    i64 v_shr = ((ui64)v_foo) >> 2;
    i64 v_and = v_shr & -8;
    return v_and;
*************** i32 f7 (i32 v_foo)
*** 78,85 ****
    /* Should be
       { dg-final { scan-assembler "f7:\n\tsrl\t%r2,2\n\tnill\t%r2,65529" { xfail { lp64 } } } }
       but because a zeroextend is merged into the pattern it is actually
!      { dg-final { scan-assembler "f7:\n\tsrl\t%r2,2\n\tlgfi\t%r1,1073741817\n\tngr\t%r2,%r1" { target { lp64 } } } }
!      { dg-final { scan-assembler "f7:\n\tsrl\t%r2,2\n\tnill\t%r2,65529" { target { ! lp64 } } } } */
    i32 v_shr = ((ui32)v_foo) >> 2;
    i32 v_and = v_shr & -7;
    return v_and;
--- 75,81 ----
    /* Should be
       { dg-final { scan-assembler "f7:\n\tsrl\t%r2,2\n\tnill\t%r2,65529" { xfail { lp64 } } } }
       but because a zeroextend is merged into the pattern it is actually
!      { dg-final { scan-assembler "f7:\n\tsrl\t%r2,2\n\tlgfi\t%r1,1073741817\n\tngr\t%r2,%r1" } } */
    i32 v_shr = ((ui32)v_foo) >> 2;
    i32 v_and = v_shr & -7;
    return v_and;
*************** i32 f7 (i32 v_foo)
*** 88,95 ****
  // ...and again with i64.
  i64 f8 (i64 v_foo)
  {
!   /* { dg-final { scan-assembler "f8:\n\tsrlg\t%r2,%r2,2\n\tnill\t%r2,65529" { target { lp64 } } } } */
!   /* { dg-final { scan-assembler "f8:\n\trisbg\t%r3,%r2,0,0\\\+32-1,64-0-32\n\tsrlg\t%r2,%r3,2\n\tnill\t%r2,65529" { target { ! lp64 } } } } */
    i64 v_shr = ((ui64)v_foo) >> 2;
    i64 v_and = v_shr & -7;
    return v_and;
--- 84,90 ----
  // ...and again with i64.
  i64 f8 (i64 v_foo)
  {
!   /* { dg-final { scan-assembler "f8:\n\tsrlg\t%r2,%r2,2\n\tnill\t%r2,65529" } } */
    i64 v_shr = ((ui64)v_foo) >> 2;
    i64 v_and = v_shr & -7;
    return v_and;
*************** i32 f9 (i32 v_foo)
*** 108,115 ****
  // ...and again with i64.
  i64 f10 (i64 v_foo)
  {
!   /* { dg-final { scan-assembler "f10:\n\trisbg\t%r2,%r2,56,128\\\+61,2" { target { lp64 } } } } */
!   /* { dg-final { scan-assembler "f10:\n\trisbg\t%r3,%r3,56,128\\\+61,2\n\tlhi\t%r2,0" { target { ! lp64 } } } } */
    i64 v_shr = v_foo << 2;
    i64 v_and = v_shr & 255;
    return v_and;
--- 103,109 ----
  // ...and again with i64.
  i64 f10 (i64 v_foo)
  {
!   /* { dg-final { scan-assembler "f10:\n\trisbg\t%r2,%r2,56,128\\\+61,2" } } */
    i64 v_shr = v_foo << 2;
    i64 v_and = v_shr & 255;
    return v_and;
*************** i32 f11 (i32 v_foo)
*** 128,135 ****
  // ...and again with i64.
  i64 f12 (i64 v_foo)
  {
!   /* { dg-final { scan-assembler "f12:\n\tsllg\t%r2,%r2,2\n\tnill\t%r2,65295" { target { lp64 } } } } */
!   /* { dg-final { scan-assembler "f12:\n\trisbg\t%r3,%r2,0,0\\\+32-1,64-0-32\n\tsllg\t%r2,%r3,2\n\tnill\t%r2,65295" { target { ! lp64 } } } } */
    i64 v_shr = v_foo << 2;
    i64 v_and = v_shr & -241;
    return v_and;
--- 122,128 ----
  // ...and again with i64.
  i64 f12 (i64 v_foo)
  {
!   /* { dg-final { scan-assembler "f12:\n\tsllg\t%r2,%r2,2\n\tnill\t%r2,65295" } } */
    i64 v_shr = v_foo << 2;
    i64 v_and = v_shr & -241;
    return v_and;
*************** i64 f12 (i64 v_foo)
*** 140,147 ****
  // shl are not used.
  i32 f13 (i32 v_foo)
  {
!   /* { dg-final { scan-assembler "f13:\n\trisbg\t%r2,%r2,56,128\\\+60,32\\\+14" { target { lp64 } } } } */
!   /* { dg-final { scan-assembler "f13:\n\trll\t%r2,%r2,14\n\tnilf\t%r2,248" { target { ! lp64 } } } } */
    i32 v_parta = v_foo << 14;
    i32 v_partb = ((ui32)v_foo) >> 18;
    i32 v_rotl = v_parta | v_partb;
--- 133,139 ----
  // shl are not used.
  i32 f13 (i32 v_foo)
  {
!   /* { dg-final { scan-assembler "f13:\n\trisbg\t%r2,%r2,56,128\\\+60,32\\\+14" } } */
    i32 v_parta = v_foo << 14;
    i32 v_partb = ((ui32)v_foo) >> 18;
    i32 v_rotl = v_parta | v_partb;
*************** i32 f13 (i32 v_foo)
*** 152,159 ****
  // ...and again with i64.
  i64 f14 (i64 v_foo)
  {
!   /* { dg-final { scan-assembler "f14:\n\trisbg\t%r2,%r2,56,128\\\+60,14" { target { lp64 } } } } */
!   /* { dg-final { scan-assembler "f14:\n\trisbg\t%r3,%r2,56,128\\\+60,46\n\tlhi\t%r2,0" { target { ! lp64 } } } } */
    i64 v_parta = v_foo << 14;
    i64 v_partb = ((ui64)v_foo) >> 50;
    i64 v_rotl = v_parta | v_partb;
--- 144,150 ----
  // ...and again with i64.
  i64 f14 (i64 v_foo)
  {
!   /* { dg-final { scan-assembler "f14:\n\trisbg\t%r2,%r2,56,128\\\+60,14" } } */
    i64 v_parta = v_foo << 14;
    i64 v_partb = ((ui64)v_foo) >> 50;
    i64 v_rotl = v_parta | v_partb;
*************** i64 f14 (i64 v_foo)
*** 164,171 ****
  // Try a case in which only the bits from the shl are used.
  i32 f15 (i32 v_foo)
  {
!   /* { dg-final { scan-assembler "f15:\n\trisbg\t%r2,%r2,47,128\\\+49,14" { target { lp64 } } } } */
!   /* { dg-final { scan-assembler "f15:\n\trll\t%r2,%r2,14\n\tnilf\t%r2,114688" { target { ! lp64 } } } } */
    i32 v_parta = v_foo << 14;
    i32 v_partb = ((ui32)v_foo) >> 18;
    i32 v_rotl = v_parta | v_partb;
--- 155,161 ----
  // Try a case in which only the bits from the shl are used.
  i32 f15 (i32 v_foo)
  {
!   /* { dg-final { scan-assembler "f15:\n\trisbg\t%r2,%r2,47,128\\\+49,14" } } */
    i32 v_parta = v_foo << 14;
    i32 v_partb = ((ui32)v_foo) >> 18;
    i32 v_rotl = v_parta | v_partb;
*************** i32 f15 (i32 v_foo)
*** 176,183 ****
  // ...and again with i64.
  i64 f16 (i64 v_foo)
  {
!   /* { dg-final { scan-assembler "f16:\n\trisbg\t%r2,%r2,47,128\\\+49,14" { target { lp64 } } } } */
!   /* { dg-final { scan-assembler "f16:\n\trisbg\t%r3,%r3,47,128\\\+49,14\n\tlhi\t%r2,0" { target { ! lp64 } } } } */
    i64 v_parta = v_foo << 14;
    i64 v_partb = ((ui64)v_foo) >> 50;
    i64 v_rotl = v_parta | v_partb;
--- 166,172 ----
  // ...and again with i64.
  i64 f16 (i64 v_foo)
  {
!   /* { dg-final { scan-assembler "f16:\n\trisbg\t%r2,%r2,47,128\\\+49,14" } } */
    i64 v_parta = v_foo << 14;
    i64 v_partb = ((ui64)v_foo) >> 50;
    i64 v_rotl = v_parta | v_partb;
*************** i32 f17 (i32 v_foo)
*** 192,199 ****
    /* Should be
       { dg-final { scan-assembler "f17:\n\trll\t%r2,%r2,4\n\tnilf\t%r2,126" { xfail { lp64 } } } }
       but because a zeroextend is merged into the pattern it is actually
!      { dg-final { scan-assembler "f17:\n\trll\t%r2,%r2,4\n\trisbg\t%r2,%r2,57,128\\\+62,0" { target { lp64 } } } }
!      { dg-final { scan-assembler "f17:\n\trll\t%r2,%r2,4\n\tnilf\t%r2,126" { target { ! lp64 } } } } */
    i32 v_parta = v_foo << 4;
    i32 v_partb = ((ui32)v_foo) >> 28;
    i32 v_rotl = v_parta | v_partb;
--- 181,187 ----
    /* Should be
       { dg-final { scan-assembler "f17:\n\trll\t%r2,%r2,4\n\tnilf\t%r2,126" { xfail { lp64 } } } }
       but because a zeroextend is merged into the pattern it is actually
!      { dg-final { scan-assembler "f17:\n\trll\t%r2,%r2,4\n\trisbg\t%r2,%r2,57,128\\\+62,0" } } */
    i32 v_parta = v_foo << 4;
    i32 v_partb = ((ui32)v_foo) >> 28;
    i32 v_rotl = v_parta | v_partb;
*************** i32 f17 (i32 v_foo)
*** 204,211 ****
  // ...and for i64, where RISBG should do the rotate too.
  i64 f18 (i64 v_foo)
  {
!   /* { dg-final { scan-assembler "f18:\n\trisbg\t%r2,%r2,57,128\\\+62,4" { target { lp64 } } } } */
!   /* { dg-final { scan-assembler "f18:\n\trisbg\t%r3,%r2,0,0\\\+32-1,64-0-32\n\tlhi\t%r2,0\n\trisbg\t%r3,%r3,57,128\\\+62,4" { target { ! lp64 } } } } */
    i64 v_parta = v_foo << 4;
    i64 v_partb = ((ui64)v_foo) >> 60;
    i64 v_rotl = v_parta | v_partb;
--- 192,198 ----
  // ...and for i64, where RISBG should do the rotate too.
  i64 f18 (i64 v_foo)
  {
!   /* { dg-final { scan-assembler "f18:\n\trisbg\t%r2,%r2,57,128\\\+62,4" } } */
    i64 v_parta = v_foo << 4;
    i64 v_partb = ((ui64)v_foo) >> 60;
    i64 v_rotl = v_parta | v_partb;
*************** i64 f18 (i64 v_foo)
*** 217,224 ****
  // This needs a separate shift and mask on 31 bit.
  i32 f19 (i32 v_foo)
  {
!   /* { dg-final { scan-assembler "f19:\n\trisbg\t%r2,%r2,59,128\\+62,64-28" { target { lp64 } } } } */
!   /* { dg-final { scan-assembler "f19:\n\tsra\t%r2,28\n\tnilf\t%r2,30" { target { ! lp64 } } } } */
    i32 v_shr = v_foo >> 28;
    i32 v_and = v_shr & 30;
    return v_and;
--- 204,210 ----
  // This needs a separate shift and mask on 31 bit.
  i32 f19 (i32 v_foo)
  {
!   /* { dg-final { scan-assembler "f19:\n\trisbg\t%r2,%r2,59,128\\+62,64-28" } } */
    i32 v_shr = v_foo >> 28;
    i32 v_and = v_shr & 30;
    return v_and;
*************** i32 f19 (i32 v_foo)
*** 227,234 ****
  // ...and again with i64.  In this case RISBG is the best way of doing the AND.
  i64 f20 (i64 v_foo)
  {
!   /* { dg-final { scan-assembler "f20:\n\tsrag\t%r2,%r2,60\n\trisbg\t%r2,%r2,59,128\\\+62,0" { target { lp64 } } } } */
!   /* { dg-final { scan-assembler "f20:\n\trisbg\t%r3,%r2,0,0\\\+32-1,64-0-32\n\tlhi\t%r2,0\n\tsrag\t%r3,%r3,60\n\tnilf\t%r3,30" { target { ! lp64 } } } } */
    i64 v_shr = v_foo >> 60;
    i64 v_and = v_shr & 30;
    return v_and;
--- 213,219 ----
  // ...and again with i64.  In this case RISBG is the best way of doing the AND.
  i64 f20 (i64 v_foo)
  {
!   /* { dg-final { scan-assembler "f20:\n\tsrag\t%r2,%r2,60\n\trisbg\t%r2,%r2,59,128\\\+62,0" } } */
    i64 v_shr = v_foo >> 60;
    i64 v_and = v_shr & 30;
    return v_and;
*************** i32 f21 (i32 v_foo)
*** 248,255 ****
  // ...and again with i64.
  i64 f22 (i64 v_foo)
  {
!   /* { dg-final { scan-assembler "f22:\n\trisbg\t%r2,%r2,60,128\\\+62,64-60" { target { lp64 } } } } */
!   /* { dg-final { scan-assembler "f22:\n\trisbg\t%r3,%r2,60,128\\\+62,64-28\n\tlhi\t%r2,0" { target { ! lp64 } } } } */
    i64 v_shr = v_foo >> 60;
    i64 v_and = v_shr & 14;
    return v_and;
--- 233,239 ----
  // ...and again with i64.
  i64 f22 (i64 v_foo)
  {
!   /* { dg-final { scan-assembler "f22:\n\trisbg\t%r2,%r2,60,128\\\+62,64-60" } } */
    i64 v_shr = v_foo >> 60;
    i64 v_and = v_shr & 14;
    return v_and;
*************** i64 f22 (i64 v_foo)
*** 259,266 ****
  // natural zero extension.
  i64 f23 (i64 v_foo)
  {
!   /* { dg-final { scan-assembler "f23:\n\trisbg\t%r2,%r2,64-8,128\\\+63,54\\\+8" { target { lp64 } } } } */
!   /* { dg-final { scan-assembler "f23:\n\trisbg\t%r3,%r3,64-8,128\\\+63,54\\\+8\n\tlhi\t%r2,0" { target { ! lp64 } } } } */
    i64 v_shr = ((ui64)v_foo) >> 2;
    i64 v_and = v_shr & 255;
    return v_and;
--- 243,249 ----
  // natural zero extension.
  i64 f23 (i64 v_foo)
  {
!   /* { dg-final { scan-assembler "f23:\n\trisbg\t%r2,%r2,64-8,128\\\+63,54\\\+8" } } */
    i64 v_shr = ((ui64)v_foo) >> 2;
    i64 v_and = v_shr & 255;
    return v_and;
*************** i32 f24 (i32 v_foo)
*** 281,288 ****
  // ...and again with i64, where a single RISBG is enough.
  i64 f25 (i64 v_foo)
  {
!   /* { dg-final { scan-assembler "f25:\n\trisbg\t%r2,%r2,57,128\\\+59,3" { target { lp64 } } } } */
!   /* { dg-final { scan-assembler "f25:\n\trisbg\t%r3,%r3,57,128\\\+59,3\n\tlhi\t%r2,0" { target { ! lp64 } } } } */
    i64 v_and = v_foo & 14;
    i64 v_parta = v_and << 3;
    i64 v_partb = ((ui64)v_and) >> 61;
--- 264,270 ----
  // ...and again with i64, where a single RISBG is enough.
  i64 f25 (i64 v_foo)
  {
!   /* { dg-final { scan-assembler "f25:\n\trisbg\t%r2,%r2,57,128\\\+59,3" } } */
    i64 v_and = v_foo & 14;
    i64 v_parta = v_and << 3;
    i64 v_partb = ((ui64)v_and) >> 61;
*************** i32 f26 (i32 v_foo)
*** 305,312 ****
  // ...and again with i64, where a single RISBG is OK.
  i64 f27 (i64 v_foo)
  {
!   /* { dg-final { scan-assembler "f27:\n\trisbg\t%r2,%r2,55,128\\\+52,5" { target { lp64 } } } } */
!   /* { dg-final { scan-assembler "f27:\n\trisbg\t%r3,%r2,0,0\\\+32-1,64-0-32\n\trisbg\t%r2,%r3,55,128\\\+52,5" { target { ! lp64 } } } } */
    i64 v_and = v_foo & -49;
    i64 v_parta = v_and << 5;
    i64 v_partb = ((ui64)v_and) >> 59;
--- 287,293 ----
  // ...and again with i64, where a single RISBG is OK.
  i64 f27 (i64 v_foo)
  {
!   /* { dg-final { scan-assembler "f27:\n\trisbg\t%r2,%r2,55,128\\\+52,5" } } */
    i64 v_and = v_foo & -49;
    i64 v_parta = v_and << 5;
    i64 v_partb = ((ui64)v_and) >> 59;
*************** i32 f28 (i32 v_foo)
*** 326,333 ****
  // ...and again with i64.
  i64 f29 (i64 v_foo)
  {
!   /* { dg-final { scan-assembler "f29:\n\trisbg\t%r2,%r2,0,128\\\+13,49" { target { lp64 } } } } */
!   /* { dg-final { scan-assembler "f29:\n\trisbg\t%r\[23\],%r3,0,128\\\+13,49\n\tlr\t%r\[23\],%r\[32\]\n\tsrlg\t%r2,%r2" { target { ! lp64 } } } } */
    i64 v_and = v_foo & 32766;
    i64 v_shl = v_and << 49;
    return v_shl;
--- 307,313 ----
  // ...and again with i64.
  i64 f29 (i64 v_foo)
  {
!   /* { dg-final { scan-assembler "f29:\n\trisbg\t%r2,%r2,0,128\\\+13,49" } } */
    i64 v_and = v_foo & 32766;
    i64 v_shl = v_and << 49;
    return v_shl;
*************** i32 f30 (i32 v_foo)
*** 345,352 ****
  // ...and again with i64.
  i64 f31 (i64 v_foo)
  {
!   /* { dg-final { scan-assembler "f31:\n\trisbg\t%r2,%r2,0,128\\\+12,50" { target { lp64 } } } } */
!   /* { dg-final { scan-assembler "f31:\n\trisbg\t%r\[23\],%r3,0,128\\\+12,50\n\tlr\t%r\[23\],%r\[32\]\n\tsrlg\t%r2,%r2" { target { ! lp64 } } } } */
    i64 v_and = v_foo & 32766;
    i64 v_shl = v_and << 50;
    return v_shl;
--- 325,331 ----
  // ...and again with i64.
  i64 f31 (i64 v_foo)
  {
!   /* { dg-final { scan-assembler "f31:\n\trisbg\t%r2,%r2,0,128\\\+12,50" } } */
    i64 v_and = v_foo & 32766;
    i64 v_shl = v_and << 50;
    return v_shl;
*************** i32 f32 (i32 v_foo)
*** 365,372 ****
  // ...and again with i64.
  i64 f33 (i64 v_foo)
  {
!   /* { dg-final { scan-assembler "f33:\n\tsllg\t%r2,%r2,10\n\tnill\t%r2,58368" { target { lp64 } } } } */
!   /* { dg-final { scan-assembler "f33:\n\trisbg\t%r3,%r2,0,0\\\+32-1,64-0-32\n\tsllg\t%r2,%r3,10\n\tnill\t%r2,58368" { target { ! lp64 } } } } */
    i64 v_and = v_foo & -7;
    i64 v_shl = v_and << 10;
    return v_shl;
--- 344,350 ----
  // ...and again with i64.
  i64 f33 (i64 v_foo)
  {
!   /* { dg-final { scan-assembler "f33:\n\tsllg\t%r2,%r2,10\n\tnill\t%r2,58368" } } */
    i64 v_and = v_foo & -7;
    i64 v_shl = v_and << 10;
    return v_shl;
*************** i32 f34 (i32 v_foo)
*** 384,391 ****
  // ...and again with i64.
  i64 f35 (i64 v_foo)
  {
!   /* { dg-final { scan-assembler "f35:\n\trisbg\t%r2,%r2,64-7,128\\\+63,48\\\+7" { target { lp64 } } } } */
!   /* { dg-final { scan-assembler "f35:\n\trisbg\t%r3,%r3,64-7,128\\\+63,48\\\+7\n\tlhi\t%r2,0" { target { ! lp64 } } } } */
    i64 v_and = v_foo & 65535;
    i64 v_shl = ((ui64)v_and) >> 9;
    return v_shl;
--- 362,368 ----
  // ...and again with i64.
  i64 f35 (i64 v_foo)
  {
!   /* { dg-final { scan-assembler "f35:\n\trisbg\t%r2,%r2,64-7,128\\\+63,48\\\+7" } } */
    i64 v_and = v_foo & 65535;
    i64 v_shl = ((ui64)v_and) >> 9;
    return v_shl;
*************** i64 f35 (i64 v_foo)
*** 395,402 ****
  // We can't use RISBG for the shift in that case.
  i32 f36 (i32 v_foo)
  {
!   /* { dg-final { scan-assembler "f36:\n\tsrl\t%r2,1\n\tlgfi\t%r1,2147483635\n\tngr\t%r2,%r1" { target { lp64 } } } } */
!   /* { dg-final { scan-assembler "f36:\n\tsrl\t%r2,1\n\tnilf\t%r2,2147483635" { target { ! lp64 } } } } */
    i32 v_and = v_foo & -25;
    i32 v_shl = ((ui32)v_and) >> 1;
    return v_shl;
--- 372,378 ----
  // We can't use RISBG for the shift in that case.
  i32 f36 (i32 v_foo)
  {
!   /* { dg-final { scan-assembler "f36:\n\tsrl\t%r2,1\n\tlgfi\t%r1,2147483635\n\tngr\t%r2,%r1" } } */
    i32 v_and = v_foo & -25;
    i32 v_shl = ((ui32)v_and) >> 1;
    return v_shl;
*************** i32 f36 (i32 v_foo)
*** 405,412 ****
  // ...and again with i64.
  i64 f37 (i64 v_foo)
  {
!   /* { dg-final { scan-assembler "f37:\n\(\t.*\n\)*\tsrlg\t%r2,%r2,1\n\tng\t%r2," { target { lp64 } } } } */
!   /* { dg-final { scan-assembler "f37:\n\(\t.*\n\)*\trisbg\t%r3,%r2,0,0\\\+32-1,64-0-32\n\tsrlg\t%r2,%r3,1\n\tng\t%r2," { target { ! lp64 } } } } */
    i64 v_and = v_foo & -25;
    i64 v_shl = ((ui64)v_and) >> 1;
    return v_shl;
--- 381,387 ----
  // ...and again with i64.
  i64 f37 (i64 v_foo)
  {
!   /* { dg-final { scan-assembler "f37:\n\(\t.*\n\)*\tsrlg\t%r2,%r2,1\n\tng\t%r2," } } */
    i64 v_and = v_foo & -25;
    i64 v_shl = ((ui64)v_and) >> 1;
    return v_shl;
*************** i64 f37 (i64 v_foo)
*** 416,423 ****
  // use RISBG there.
  i64 f38 (i64 v_foo)
  {
!   /* { dg-final { scan-assembler "f38:\n\tsrag\t%r2,%r2,32\n\tsllg\t%r2,%r2,5" { target { lp64 } } } } */
!   /* { dg-final { scan-assembler "f38:\n\trisbg\t%r3,%r2,0,0\\\+32-1,64-0-32\n\tsrag\t%r2,%r3,32\n\tsllg\t%r2,%r2,5" { target { ! lp64 } } } } */
    i64 v_ashr = v_foo >> 32;
    i64 v_shl = v_ashr << 5;
    return v_shl;
--- 391,397 ----
  // use RISBG there.
  i64 f38 (i64 v_foo)
  {
!   /* { dg-final { scan-assembler "f38:\n\tsrag\t%r2,%r2,32\n\tsllg\t%r2,%r2,5" } } */
    i64 v_ashr = v_foo >> 32;
    i64 v_shl = v_ashr << 5;
    return v_shl;
*************** i64 f38 (i64 v_foo)
*** 426,433 ****
  // Try a similar thing in which no shifted sign bits are kept.
  i64 f39 (i64 v_foo, i64 *v_dest)
  {
!   /* { dg-final { scan-assembler "f39:\n\tsrag\t%r2,%r2,35\n\(\t.*\n\)*\trisbg\t%r2,%r2,33,128\\\+61,2" { target { lp64 } } } } */
!   /* { dg-final { scan-assembler "f39:\n\trisbg\t%r3,%r2,0,0\\\+32-1,64-0-32\n\tlhi\t%r2,0\n\tsrag\t%r3,%r3,35\n\(\t.*\n\)*\trisbg\t%r3,%r3,33,128\\\+61,2" { target { ! lp64 } } } } */
    i64 v_ashr = v_foo >> 35;
    *v_dest = v_ashr;
    i64 v_shl = v_ashr << 2;
--- 400,406 ----
  // Try a similar thing in which no shifted sign bits are kept.
  i64 f39 (i64 v_foo, i64 *v_dest)
  {
!   /* { dg-final { scan-assembler "f39:\n\tsrag\t%r2,%r2,35\n\(\t.*\n\)*\trisbg\t%r2,%r2,33,128\\\+61,2" } } */
    i64 v_ashr = v_foo >> 35;
    *v_dest = v_ashr;
    i64 v_shl = v_ashr << 2;
*************** i64 f39 (i64 v_foo, i64 *v_dest)
*** 438,445 ****
  // ...and again with the next highest shift value, where one sign bit is kept.
  i64 f40 (i64 v_foo, i64 *v_dest)
  {
!   /* { dg-final { scan-assembler "f40:\n\tsrag\t%r2,%r2,36\n\(\t.*\n\)*\trisbg\t%r2,%r2,33,128\\\+61,2" { target { lp64 } } } } */
!   /* { dg-final { scan-assembler "f40:\n\trisbg\t%r3,%r2,0,0\\\+32-1,64-0-32\n\tlhi\t%r2,0\n\tsrag\t%r3,%r3,36\n\(\t.*\n\)*\trisbg\t%r3,%r3,33,128\\\+61,2" { target { ! lp64 } } } } */
    i64 v_ashr = v_foo >> 36;
    *v_dest = v_ashr;
    i64 v_shl = v_ashr << 2;
--- 411,417 ----
  // ...and again with the next highest shift value, where one sign bit is kept.
  i64 f40 (i64 v_foo, i64 *v_dest)
  {
!   /* { dg-final { scan-assembler "f40:\n\tsrag\t%r2,%r2,36\n\(\t.*\n\)*\trisbg\t%r2,%r2,33,128\\\+61,2" } } */
    i64 v_ashr = v_foo >> 36;
    *v_dest = v_ashr;
    i64 v_shl = v_ashr << 2;
*************** i64 f40 (i64 v_foo, i64 *v_dest)
*** 450,457 ****
  // Check a case where the result is zero-extended.
  i64 f41 (i32 v_a)
  {
!   /* { dg-final { scan-assembler "f41:\n\trisbg\t%r2,%r2,64-28,128\\\+63,34\\\+28" { target { lp64 } } } } */
!   /* { dg-final { scan-assembler "f41:\n\trisbg\t%r3,%r2,64-28,128\\\+63,34\\\+28\n\tlhi\t%r2,0" { target { ! lp64 } } } } */
    i32 v_shl = v_a << 2;
    i32 v_shr = ((ui32)v_shl) >> 4;
    i64 v_ext = (ui64)v_shr;
--- 422,428 ----
  // Check a case where the result is zero-extended.
  i64 f41 (i32 v_a)
  {
!   /* { dg-final { scan-assembler "f41:\n\trisbg\t%r2,%r2,64-28,128\\\+63,34\\\+28" } } */
    i32 v_shl = v_a << 2;
    i32 v_shr = ((ui32)v_shl) >> 4;
    i64 v_ext = (ui64)v_shr;
*************** i64 f41 (i32 v_a)
*** 464,471 ****
  typedef struct { ui64 pad : 63; ui8 a : 1; } t42;
  i64 f42 (t42 v_x)
  {
!   /* { dg-final { scan-assembler "f42:\n\tsllg\t%r2,%r2,63\n\tsrag\t%r2,%r2,63\n\tllgcr\t%r2,%r2" { target { lp64 } } } } */
!   /* { dg-final { scan-assembler "f42:\n\tsllg\t%r3,%r3,63\n\tlhi\t%r2,0\n\tsrag\t%r3,%r3,63\n\tllcr\t%r3,%r3" { target { ! lp64 } } } } */
    ui8 a = v_x.a << 7;
    i8 ext = ((i8)a) >> 7;
    i64 ext2 = (ui64)(ui8)ext;
--- 435,441 ----
  typedef struct { ui64 pad : 63; ui8 a : 1; } t42;
  i64 f42 (t42 v_x)
  {
!   /* { dg-final { scan-assembler "f42:\n\tsllg\t%r2,%r2,63\n\tsrag\t%r2,%r2,63\n\tllgcr\t%r2,%r2" } } */
    ui8 a = v_x.a << 7;
    i8 ext = ((i8)a) >> 7;
    i64 ext2 = (ui64)(ui8)ext;
*************** i64 f42 (t42 v_x)
*** 475,482 ****
  // Check that we get the case where a 64-bit shift is used by a 32-bit and.
  i32 f43 (i64 v_x)
  {
!   /* { dg-final { scan-assembler "f43:\n\trisbg\t%r2,%r2,32,128\\+61,32\\+20\n\tlgfr\t%r2,%r2" { target { lp64 } } } } */
!   /* { dg-final { scan-assembler "f43:\n\trisbg\t%r3,%r2,0,0\\\+32-1,64-0-32\n\trisbg\t%r2,%r3,32,128\\\+61,64-12" { target { ! lp64 } } } } */
    i64 v_shr3 = ((ui64)v_x) >> 12;
    i32 v_shr3_tr = (ui32)v_shr3;
    i32 v_conv = v_shr3_tr & -4;
--- 445,451 ----
  // Check that we get the case where a 64-bit shift is used by a 32-bit and.
  i32 f43 (i64 v_x)
  {
!   /* { dg-final { scan-assembler "f43:\n\trisbg\t%r2,%r2,32,128\\+61,32\\+20\n\tlgfr\t%r2,%r2" } } */
    i64 v_shr3 = ((ui64)v_x) >> 12;
    i32 v_shr3_tr = (ui32)v_shr3;
    i32 v_conv = v_shr3_tr & -4;
*************** i32 f43 (i64 v_x)
*** 486,493 ****
  // Check that we don't get the case where the 32-bit and mask is not contiguous
  i32 f44 (i64 v_x)
  {
!   /* { dg-final { scan-assembler "f44:\n\tsrlg\t%r2,%r2,12" { target { lp64 } } } } */
!   /* { dg-final { scan-assembler "f44:\n\tsrlg\t%r2,%r3,12\n\tnilf\t%r2,10" { target { ! lp64 } } } } */
    i64 v_shr4 = ((ui64)v_x) >> 12;
    i32 v_conv = (ui32)v_shr4;
    i32 v_and = v_conv & 10;
--- 455,461 ----
  // Check that we don't get the case where the 32-bit and mask is not contiguous
  i32 f44 (i64 v_x)
  {
!   /* { dg-final { scan-assembler "f44:\n\tsrlg\t%r2,%r2,12" } } */
    i64 v_shr4 = ((ui64)v_x) >> 12;
    i32 v_conv = (ui32)v_shr4;
    i32 v_and = v_conv & 10;
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/risbg-ll-2.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/risbg-ll-2.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/risbg-ll-2.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/risbg-ll-2.c	Sun Jul 12 22:32:16 2026
*************** i32 f1 (i32 v_a, i32 v_b)
*** 23,30 ****
  // ...and again with i64.
  i64 f2 (i64 v_a, i64 v_b)
  {
!   /* { dg-final { scan-assembler "f2:\n\trisbg\t%r2,%r3,60,62,0" { target { lp64 } } } } */
!   /* { dg-final { scan-assembler "f2:\n\trisbg\t%r3,%r2,0,0\\\+32-1,64-0-32\n\(\t.*\n\)*\trisbg\t%r\[23\],%r5,60,62,0" { target { ! lp64 } } } } */
    i64 v_anda = v_a & -15;
    i64 v_andb = v_b & 14;
    i64 v_or = v_anda | v_andb;
--- 23,29 ----
  // ...and again with i64.
  i64 f2 (i64 v_a, i64 v_b)
  {
!   /* { dg-final { scan-assembler "f2:\n\trisbg\t%r2,%r3,60,62,0" } } */
    i64 v_anda = v_a & -15;
    i64 v_andb = v_b & 14;
    i64 v_or = v_anda | v_andb;
*************** i32 f3 (i32 v_a, i32 v_b)
*** 45,52 ****
  // ...and again with i64.
  i64 f4 (i64 v_a, i64 v_b)
  {
!   /* { dg-final { scan-assembler "f4:\n\trisbg\t%r2,%r3,64-4,63,\\(64-64\\)\\+4\\+52" { target { lp64 } } } } */
!   /* { dg-final { scan-assembler "f4:\n\(\t.*\n\)*\trisbg\t%r5,%r5,64-4,128\\+63,\\(64-64\\)\\+52\\+4" { target { ! lp64 } } } } */
    i64 v_anda = v_a & -16;
    i64 v_shr = ((ui64)v_b) >> 8;
    i64 v_andb = v_shr & 15;
--- 44,50 ----
  // ...and again with i64.
  i64 f4 (i64 v_a, i64 v_b)
  {
!   /* { dg-final { scan-assembler "f4:\n\trisbg\t%r2,%r3,64-4,63,\\(64-64\\)\\+4\\+52" } } */
    i64 v_anda = v_a & -16;
    i64 v_shr = ((ui64)v_b) >> 8;
    i64 v_andb = v_shr & 15;
*************** i32 f5 (i32 v_a, i32 v_b)
*** 67,74 ****
  // ...and again with i64.
  i64 f6 (i64 v_a, i64 v_b)
  {
!   /* { dg-final { scan-assembler "f6:\n\trisbg\t%r2,%r3,0,64-10-1,10" { target { lp64 } } } } */
!   /* { dg-final { scan-assembler "f6:\n\trisbg\t%r5,%r4,0,0\\\+32-1,64-0-32\n\(\t.*\n\)*\trisbg\t%r\[23\],%r5,0,64-10-1,10" { target { ! lp64 } } } } */
    i64 v_anda = v_a & 1023;
    i64 v_shlb = v_b << 10;
    i64 v_or = v_anda | v_shlb;
--- 65,71 ----
  // ...and again with i64.
  i64 f6 (i64 v_a, i64 v_b)
  {
!   /* { dg-final { scan-assembler "f6:\n\trisbg\t%r2,%r3,0,64-10-1,10" } } */
    i64 v_anda = v_a & 1023;
    i64 v_shlb = v_b << 10;
    i64 v_or = v_anda | v_shlb;
*************** i32 f7 (i32 v_a, i32 v_b)
*** 88,95 ****
  // ...and again with i64.
  i64 f8 (i64 v_a, i64 v_b)
  {
!   /* { dg-final { scan-assembler "f8:\n\trisbg\t%r2,%r3,8,63,64-8" { target { lp64 } } } } */
!   /* With -m31 risbg is not really useful here, so do not test for it.  */
    i64 v_anda = v_a & -72057594037927936;
    i64 v_shrb = ((ui64)v_b) >> 8;
    i64 v_or = v_anda | v_shrb;
--- 85,91 ----
  // ...and again with i64.
  i64 f8 (i64 v_a, i64 v_b)
  {
!   /* { dg-final { scan-assembler "f8:\n\trisbg\t%r2,%r3,8,63,64-8" } } */
    i64 v_anda = v_a & -72057594037927936;
    i64 v_shrb = ((ui64)v_b) >> 8;
    i64 v_or = v_anda | v_shrb;
*************** i64 f8 (i64 v_a, i64 v_b)
*** 100,107 ****
  // ands with complement masks.
  i32 f9 (i64 v_x, i32 v_y)
  {
!   /* { dg-final { scan-assembler "f9:\n\trisbg\t%r3,%r2,48,63,64-48" { target { lp64 } }} } */
!   /* { dg-final { scan-assembler "f9:\n\trisbg\t%r4,%r2,32\\+16,63,64-16" { target { ! lp64 } }} } */
    i64 v_shr6 = ((ui64)v_x) >> 48;
    i32 v_conv = (ui32)v_shr6;
    i32 v_and1 = v_y & -65536;
--- 96,102 ----
  // ands with complement masks.
  i32 f9 (i64 v_x, i32 v_y)
  {
!   /* { dg-final { scan-assembler "f9:\n\trisbg\t%r3,%r2,48,63,64-48" } } */
    i64 v_shr6 = ((ui64)v_x) >> 48;
    i32 v_conv = (ui32)v_shr6;
    i32 v_and1 = v_y & -65536;
*************** i32 f9 (i64 v_x, i32 v_y)
*** 113,120 ****
  // ands with incompatible masks.
  i32 f10 (i64 v_x, i32 v_y)
  {
!   /* { dg-final { scan-assembler "f10:\n\tsrlg\t%r2,%r2,48\n\trosbg\t%r2,%r3,0,39,0" { target { lp64 } } } } */
!   /* { dg-final { scan-assembler "f10:\n\tnilf\t%r4,4278190080\n\trosbg\t%r4,%r2,48,63,48" { target { ! lp64 } } } } */
    i64 v_shr6 = ((ui64)v_x) >> 48;
    i32 v_conv = (ui32)v_shr6;
    i32 v_and1 = v_y & -16777216;
--- 108,114 ----
  // ands with incompatible masks.
  i32 f10 (i64 v_x, i32 v_y)
  {
!   /* { dg-final { scan-assembler "f10:\n\tsrlg\t%r2,%r2,48\n\trosbg\t%r2,%r3,0,39,0" } } */
    i64 v_shr6 = ((ui64)v_x) >> 48;
    i32 v_conv = (ui32)v_shr6;
    i32 v_and1 = v_y & -16777216;
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/risbg-ll-3.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/risbg-ll-3.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/risbg-ll-3.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/risbg-ll-3.c	Sun Jul 12 22:32:16 2026
***************
*** 2,8 ****
  
  /* Tests ported from the Llvm testsuite. */
  
! /* { dg-do compile { target s390x-*-* } } */
  /* { dg-options "-O3 -march=zEC12 -mzarch -fno-asynchronous-unwind-tables" } */
  
  #define i64 signed long long
--- 2,8 ----
  
  /* Tests ported from the Llvm testsuite. */
  
! /* { dg-do compile } */
  /* { dg-options "-O3 -march=zEC12 -mzarch -fno-asynchronous-unwind-tables" } */
  
  #define i64 signed long long
***************
*** 11,18 ****
  // On zEC12, we generally prefer RISBGN.
  i64 f1 (i64 v_a, i64 v_b)
  {
! /* { dg-final { scan-assembler "f1:\n\trisbgn\t%r2,%r3,60,62,0" { target { lp64 } } } } */
! /* { dg-final { scan-assembler "f1:\n\trisbgn\t%r3,%r2,0,0\\\+32-1,64-0-32\n\trisbgn\t%r3,%r5,60,62,0\n" { target { ! lp64 } } } } */
    i64 v_anda = v_a & -15;
    i64 v_andb = v_b & 14;
    i64 v_or = v_anda | v_andb;
--- 11,17 ----
  // On zEC12, we generally prefer RISBGN.
  i64 f1 (i64 v_a, i64 v_b)
  {
! /* { dg-final { scan-assembler "f1:\n\trisbgn\t%r2,%r3,60,62,0" } } */
    i64 v_anda = v_a & -15;
    i64 v_andb = v_b & 14;
    i64 v_or = v_anda | v_andb;
*************** i64 f1 (i64 v_a, i64 v_b)
*** 23,30 ****
  extern i64 f2_foo();
  i64 f2 (i64 v_a, i64 v_b)
  {
! /* { dg-final { scan-assembler "f2:\n\trisbg\t%r2,%r3,60,62,0\n\tbner\t%r14\n\tjg\tf2_foo.*\n" { target { lp64 } } } } */
! /* { dg-final { scan-assembler "f2:\n\trisbgn\t%r3,%r2,0,0\\\+32-1,64-0-32\n\trisbg\t%r3,%r5,60,62,0" { target { ! lp64 } } } } */
    i64 v_anda = v_a & -15;
    i64 v_andb = v_b & 14;
    i64 v_or = v_anda | v_andb;
--- 22,28 ----
  extern i64 f2_foo();
  i64 f2 (i64 v_a, i64 v_b)
  {
! /* { dg-final { scan-assembler "f2:\n\trisbg\t%r2,%r3,60,62,0\n\tbner\t%r14\n\tjg\tf2_foo.*\n" } } */
    i64 v_anda = v_a & -15;
    i64 v_andb = v_b & 14;
    i64 v_or = v_anda | v_andb;
*************** i64 f2 (i64 v_a, i64 v_b)
*** 37,44 ****
  void f2_bar ();
  void f2_cconly (i64 v_a, i64 v_b)
  {
! /* { dg-final { scan-assembler "f2_cconly:\n\trisbg\t%r2,%r3,60,62,0\n\tber\t%r14\n\tjg\tf2_bar(@PLT)?\n" { target { lp64 } } } } */
! /* { dg-final { scan-assembler "f2_cconly:\n\trisbgn\t%r3,%r2,0,0\\\+32-1,64-0-32\n\trisbg\t%r3,%r5,60,62,0\n\tber\t%r14\n\tjg\tf2_bar(@PLT)?\n" { target { ! lp64 } } } } */
    if ((v_a & -15) | (v_b & 14))
      f2_bar();
  }
--- 35,41 ----
  void f2_bar ();
  void f2_cconly (i64 v_a, i64 v_b)
  {
! /* { dg-final { scan-assembler "f2_cconly:\n\trisbg\t%r2,%r3,60,62,0\n\tber\t%r14\n\tjg\tf2_bar(@PLT)?\n" } } */
    if ((v_a & -15) | (v_b & 14))
      f2_bar();
  }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/stack-clash-4.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/stack-clash-4.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/stack-clash-4.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/stack-clash-4.c	Thu Jan  1 00:00:00 1970
***************
*** 1,10 ****
- /* { dg-do compile } */
- /* { dg-options "-O1 -m31 -mzarch -fstack-clash-protection" } */
- 
- extern void c(char*);
- 
- void
- a() {
-   char *b = __builtin_alloca(3);
-   c(b);
- }
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/stack-clash-5.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/stack-clash-5.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/stack-clash-5.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/stack-clash-5.c	Thu Jan  1 00:00:00 1970
***************
*** 1,10 ****
- /* { dg-do compile } */
- /* { dg-options "-O1 -m31 -mzarch -fstack-clash-protection" } */
- 
- extern void bar (char*);
- 
- void
- foo() {
-   char a[4000];
-   bar (a) ;
- }
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/stack-protector-guard-tls-1.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/stack-protector-guard-tls-1.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/stack-protector-guard-tls-1.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/stack-protector-guard-tls-1.c	Sun Jul 12 22:32:16 2026
***************
*** 1,12 ****
  /* { dg-do compile } */
  /* { dg-options "-O2 -fstack-protector-all" } */
! /* { dg-final { scan-assembler-times {\tear\t%r[0-9]+,%a[01]} 8 { target lp64 } } } */
! /* { dg-final { scan-assembler-times {\tsllg\t%r[0-9]+,%r[0-9]+,32} 4 { target lp64 } } } */
! /* { dg-final { scan-assembler-times {\tear\t%r[0-9]+,%a[01]} 3 { target { ! lp64 } } } } */
! /* { dg-final { scan-assembler-times {\tmvc\t160\(8,%r15\),40\(%r[0-9]+\)} 2 { target lp64 } } } */
! /* { dg-final { scan-assembler-times {\tmvc\t100\(4,%r15\),20\(%r[0-9]+\)} 2 { target { ! lp64 } } } } */
! /* { dg-final { scan-assembler-times {\tclc\t160\(8,%r15\),40\(%r[0-9]+\)} 2 { target lp64 } } } */
! /* { dg-final { scan-assembler-times {\tclc\t100\(4,%r15\),20\(%r[0-9]+\)} 2 { target { ! lp64 } } } } */
  
  /* Computing the address of the thread pointer on s390 involves multiple
     instructions and therefore bears the risk that the address of the canary or
--- 1,9 ----
  /* { dg-do compile } */
  /* { dg-options "-O2 -fstack-protector-all" } */
! /* { dg-final { scan-assembler-times {\tear\t%r[0-9]+,%a[01]} 8 } } */
! /* { dg-final { scan-assembler-times {\tsllg\t%r[0-9]+,%r[0-9]+,32} 4 } } */
! /* { dg-final { scan-assembler-times {\tmvc\t160\(8,%r15\),40\(%r[0-9]+\)} 2 } } */
! /* { dg-final { scan-assembler-times {\tclc\t160\(8,%r15\),40\(%r[0-9]+\)} 2 } } */
  
  /* Computing the address of the thread pointer on s390 involves multiple
     instructions and therefore bears the risk that the address of the canary or
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-12.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-12.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-12.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-12.c	Sun Jul 12 22:32:16 2026
*************** void da(int x)
*** 10,17 ****
  {
    bar(x);
    bar(x + 1);
!   /* { dg-final { scan-assembler-times "\ttmll\t%r15,256" 2 { target { lp64 } } } } */
!   /* { dg-final { scan-assembler-times "\ttml\t%r15,384" 2 { target { ! lp64 } } } } */
  }
  
  #pragma GCC target("stack-size=1024,stack-guard=0")
--- 10,16 ----
  {
    bar(x);
    bar(x + 1);
!   /* { dg-final { scan-assembler-times "\ttmll\t%r15,256" 2 } } */
  }
  
  #pragma GCC target("stack-size=1024,stack-guard=0")
*************** void p1(int x)
*** 19,26 ****
  {
    bar(x);
    bar(x + 1);
!   /* { dg-final { scan-assembler-times "\ttmll\t%r15,768" 1 { target { lp64 } } } } */
!   /* { dg-final { scan-assembler-times "\ttml\t%r15,896" 1 { target { ! lp64 } } } } */
  }
  #pragma GCC reset_options
  
--- 18,24 ----
  {
    bar(x);
    bar(x + 1);
!   /* { dg-final { scan-assembler-times "\ttmll\t%r15,768" 1 } } */
  }
  #pragma GCC reset_options
  
*************** void p0(int x)
*** 29,36 ****
  {
    bar(x);
    bar(x + 1);
!   /* { dg-final { scan-assembler-times "\ttmll\t%r15,1792" 1 { target { lp64 } } } } */
!   /* { dg-final { scan-assembler-times "\ttml\t%r15,1920" 1 { target { ! lp64 } } } } */
  }
  #pragma GCC reset_options
  
--- 27,33 ----
  {
    bar(x);
    bar(x + 1);
!   /* { dg-final { scan-assembler-times "\ttmll\t%r15,1792" 1 } } */
  }
  #pragma GCC reset_options
  
*************** void a1(int x)
*** 39,46 ****
  {
    bar(x);
    bar(x + 1);
!   /* { dg-final { scan-assembler-times "\ttmll\t%r15,3840" 1 { target { lp64 } } } } */
!   /* { dg-final { scan-assembler-times "\ttml\t%r15,3968" 1 { target { ! lp64 } } } } */
  }
  
  __attribute__ ((target("stack-size=8192,stack-guard=0")))
--- 36,42 ----
  {
    bar(x);
    bar(x + 1);
!   /* { dg-final { scan-assembler-times "\ttmll\t%r15,3840" 1 } } */
  }
  
  __attribute__ ((target("stack-size=8192,stack-guard=0")))
*************** void a0(int x)
*** 48,55 ****
  {
    bar(x);
    bar(x + 1);
!   /* { dg-final { scan-assembler-times "\ttmll\t%r15,7936" 1 { target { lp64 } } } } */
!   /* { dg-final { scan-assembler-times "\ttml\t%r15,8064" 1 { target { ! lp64 } } } } */
  }
  
  void d(int x)
--- 44,50 ----
  {
    bar(x);
    bar(x + 1);
!   /* { dg-final { scan-assembler-times "\ttmll\t%r15,7936" 1 } } */
  }
  
  void d(int x)
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-15.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-15.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-15.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-15.c	Sun Jul 12 22:32:16 2026
*************** int a0h(void)
*** 111,117 ****
    return 8;
  }
  
! /* { dg-final { scan-assembler-times "\t.cfi_offset 15, -40" 10 { target { lp64 } } } } */
! /* { dg-final { scan-assembler-times "\t.cfi_offset 15, -8" 5 { target { lp64 } } } } */
! /* { dg-final { scan-assembler-times "\t.cfi_offset 15, -36" 10 { target { ! lp64 } } } } */
! /* { dg-final { scan-assembler-times "\t.cfi_offset 15, -4" 5 { target { ! lp64 } } } } */
--- 111,115 ----
    return 8;
  }
  
! /* { dg-final { scan-assembler-times "\t.cfi_offset 15, -40" 10 } } */
! /* { dg-final { scan-assembler-times "\t.cfi_offset 15, -8" 5 } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-1.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-1.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-1.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,353 ****
- /* Functional tests for the "target" attribute and pragma.  */
- 
- /* { dg-do assemble { target { ! lp64 } } } */
- /* { dg-require-effective-target target_attribute } */
- /* { dg-options "-save-temps -mdebug -m31 -march=z13 -mtune=z10 -mstack-size=4096 -mstack-guard=0 -mbranch-cost=2 -mwarn-framesize=0 -mhard-dfp -mno-backchain -mhard-float -mno-vx -mhtm -mpacked-stack -mno-small-exec -mzvector -mno-mvcle -mzarch -mwarn-dynamicstack" } */
- 
- /**
-  **
-  ** Start
-  **
-  **/
- 
- void fn_default_start (void) { }
- /* { dg-final { scan-assembler "fn:fn_default_start ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start se0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start wd1" } } */
- 
- /**
-  **
-  ** Attribute
-  **
-  **/
- 
- __attribute__ ((target ("arch=z13")))
- void fn_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 wd1" } } */
- 
- void fn_att_1_default (void) { }
- 
- __attribute__ ((target ("arch=z10")))
- void fn_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 wd1" } } */
- 
- void fn_att_0_default (void) { }
- 
- __attribute__ ((target ("arch=z10,arch=z13")))
- void fn_att_0_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 wd1" } } */
- 
- __attribute__ ((target ("arch=z13,arch=z10")))
- void fn_att_1_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 wd1" } } */
- 
- /**
-  **
-  ** Pragma
-  **
-  **/
- 
- #pragma GCC target ("arch=z13")
- void fn_pragma_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 wd1" } } */
- #pragma GCC reset_options
- 
- void fn_pragma_1_default (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default wd1" } } */
- 
- #pragma GCC target ("arch=z10")
- void fn_pragma_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 wd1" } } */
- #pragma GCC reset_options
- 
- void fn_pragma_0_default (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default wd1" } } */
- 
- #pragma GCC target ("arch=z10")
- #pragma GCC target ("arch=z13")
- void fn_pragma_0_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd1" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("arch=z13")
- #pragma GCC target ("arch=z10")
- void fn_pragma_1_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd1" } } */
- #pragma GCC reset_options
- 
- /**
-  **
-  ** Pragma and attribute
-  **
-  **/
- 
- #pragma GCC target ("arch=z13")
- __attribute__ ((target ("arch=z13")))
- void fn_pragma_1_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd1" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("arch=z13")
- __attribute__ ((target ("arch=z13")))
- void fn_pragma_0_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd1" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("arch=z13")
- __attribute__ ((target ("arch=z10")))
- void fn_pragma_1_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd1" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("arch=z13")
- __attribute__ ((target ("arch=z10")))
- void fn_pragma_0_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd1" } } */
- #pragma GCC reset_options
- 
- /**
-  **
-  ** End
-  **
-  **/
- 
- void fn_default_end (void) { }
- /* { dg-final { scan-assembler "fn:fn_default_end ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end se0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end wd1" } } */
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-10.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-10.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-10.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-10.c	Thu Jan  1 00:00:00 1970
***************
*** 1,353 ****
- /* Functional tests for the "target" attribute and pragma.  */
- 
- /* { dg-do assemble { target { ! lp64 } } } */
- /* { dg-require-effective-target target_attribute } */
- /* { dg-options "-save-temps -mdebug -m31 -march=z10 -mtune=z13 -mstack-size=2048 -mstack-guard=16 -mbranch-cost=1 -mwarn-framesize=512 -mno-hard-dfp -mbackchain -msoft-float -mno-vx -mno-htm -mno-packed-stack -msmall-exec -mno-zvector -mmvcle -mesa -mno-warn-dynamicstack" } */
- 
- /**
-  **
-  ** Start
-  **
-  **/
- 
- void fn_default_start (void) { }
- /* { dg-final { scan-assembler "fn:fn_default_start ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start se1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start wd0" } } */
- 
- /**
-  **
-  ** Attribute
-  **
-  **/
- 
- __attribute__ ((target ("branch-cost=1")))
- void fn_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 wd0" } } */
- 
- void fn_att_0_default (void) { }
- 
- __attribute__ ((target ("branch-cost=2")))
- void fn_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 wd0" } } */
- 
- void fn_att_1_default (void) { }
- 
- __attribute__ ((target ("branch-cost=2,branch-cost=1")))
- void fn_att_1_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_1_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 wd0" } } */
- 
- __attribute__ ((target ("branch-cost=1,branch-cost=2")))
- void fn_att_0_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_0_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 wd0" } } */
- 
- /**
-  **
-  ** Pragma
-  **
-  **/
- 
- #pragma GCC target ("branch-cost=1")
- void fn_pragma_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 wd0" } } */
- #pragma GCC reset_options
- 
- void fn_pragma_0_default (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default wd0" } } */
- 
- #pragma GCC target ("branch-cost=2")
- void fn_pragma_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 wd0" } } */
- #pragma GCC reset_options
- 
- void fn_pragma_1_default (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default wd0" } } */
- 
- #pragma GCC target ("branch-cost=2")
- #pragma GCC target ("branch-cost=1")
- void fn_pragma_1_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd0" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("branch-cost=1")
- #pragma GCC target ("branch-cost=2")
- void fn_pragma_0_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd0" } } */
- #pragma GCC reset_options
- 
- /**
-  **
-  ** Pragma and attribute
-  **
-  **/
- 
- #pragma GCC target ("branch-cost=1")
- __attribute__ ((target ("branch-cost=1")))
- void fn_pragma_0_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd0" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("branch-cost=1")
- __attribute__ ((target ("branch-cost=1")))
- void fn_pragma_1_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd0" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("branch-cost=1")
- __attribute__ ((target ("branch-cost=2")))
- void fn_pragma_0_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd0" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("branch-cost=1")
- __attribute__ ((target ("branch-cost=2")))
- void fn_pragma_1_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd0" } } */
- #pragma GCC reset_options
- 
- /**
-  **
-  ** End
-  **
-  **/
- 
- void fn_default_end (void) { }
- /* { dg-final { scan-assembler "fn:fn_default_end ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end se1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end wd0" } } */
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-11.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-11.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-11.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-11.c	Thu Jan  1 00:00:00 1970
***************
*** 1,353 ****
- /* Functional tests for the "target" attribute and pragma.  */
- 
- /* { dg-do assemble { target { ! lp64 } } } */
- /* { dg-require-effective-target target_attribute } */
- /* { dg-options "-save-temps -mdebug -m31 -march=z13 -mtune=z10 -mstack-size=4096 -mstack-guard=0 -mbranch-cost=2 -mwarn-framesize=0 -mhard-dfp -mno-backchain -mhard-float -mvx -mhtm -mpacked-stack -mno-small-exec -mzvector -mno-mvcle -mzarch -mwarn-dynamicstack" } */
- 
- /**
-  **
-  ** Start
-  **
-  **/
- 
- void fn_default_start (void) { }
- /* { dg-final { scan-assembler "fn:fn_default_start ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start se0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start wd1" } } */
- 
- /**
-  **
-  ** Attribute
-  **
-  **/
- 
- __attribute__ ((target ("warn-framesize=512")))
- void fn_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 wd1" } } */
- 
- void fn_att_1_default (void) { }
- 
- __attribute__ ((target ("warn-framesize=0")))
- void fn_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 wd1" } } */
- 
- void fn_att_0_default (void) { }
- 
- __attribute__ ((target ("warn-framesize=0,warn-framesize=512")))
- void fn_att_0_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_0_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 wd1" } } */
- 
- __attribute__ ((target ("warn-framesize=512,warn-framesize=0")))
- void fn_att_1_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_1_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 wd1" } } */
- 
- /**
-  **
-  ** Pragma
-  **
-  **/
- 
- #pragma GCC target ("warn-framesize=512")
- void fn_pragma_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 wd1" } } */
- #pragma GCC reset_options
- 
- void fn_pragma_1_default (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default wd1" } } */
- 
- #pragma GCC target ("warn-framesize=0")
- void fn_pragma_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 wd1" } } */
- #pragma GCC reset_options
- 
- void fn_pragma_0_default (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default wd1" } } */
- 
- #pragma GCC target ("warn-framesize=0")
- #pragma GCC target ("warn-framesize=512")
- void fn_pragma_0_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd1" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("warn-framesize=512")
- #pragma GCC target ("warn-framesize=0")
- void fn_pragma_1_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd1" } } */
- #pragma GCC reset_options
- 
- /**
-  **
-  ** Pragma and attribute
-  **
-  **/
- 
- #pragma GCC target ("warn-framesize=512")
- __attribute__ ((target ("warn-framesize=512")))
- void fn_pragma_1_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd1" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("warn-framesize=512")
- __attribute__ ((target ("warn-framesize=512")))
- void fn_pragma_0_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd1" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("warn-framesize=512")
- __attribute__ ((target ("warn-framesize=0")))
- void fn_pragma_1_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd1" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("warn-framesize=512")
- __attribute__ ((target ("warn-framesize=0")))
- void fn_pragma_0_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd1" } } */
- #pragma GCC reset_options
- 
- /**
-  **
-  ** End
-  **
-  **/
- 
- void fn_default_end (void) { }
- /* { dg-final { scan-assembler "fn:fn_default_end ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end se0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end wd1" } } */
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-12.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-12.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-12.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-12.c	Thu Jan  1 00:00:00 1970
***************
*** 1,353 ****
- /* Functional tests for the "target" attribute and pragma.  */
- 
- /* { dg-do assemble { target { ! lp64 } } } */
- /* { dg-require-effective-target target_attribute } */
- /* { dg-options "-save-temps -mdebug -m31 -march=z10 -mtune=z13 -mstack-size=2048 -mstack-guard=16 -mbranch-cost=1 -mwarn-framesize=512 -mno-hard-dfp -mbackchain -msoft-float -mno-vx -mno-htm -mno-packed-stack -msmall-exec -mno-zvector -mmvcle -mesa -mno-warn-dynamicstack" } */
- 
- /**
-  **
-  ** Start
-  **
-  **/
- 
- void fn_default_start (void) { }
- /* { dg-final { scan-assembler "fn:fn_default_start ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start se1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start wd0" } } */
- 
- /**
-  **
-  ** Attribute
-  **
-  **/
- 
- __attribute__ ((target ("warn-framesize=0")))
- void fn_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 wd0" } } */
- 
- void fn_att_0_default (void) { }
- 
- __attribute__ ((target ("warn-framesize=512")))
- void fn_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 wd0" } } */
- 
- void fn_att_1_default (void) { }
- 
- __attribute__ ((target ("warn-framesize=512,warn-framesize=0")))
- void fn_att_1_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_1_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 wd0" } } */
- 
- __attribute__ ((target ("warn-framesize=0,warn-framesize=512")))
- void fn_att_0_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_0_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 wd0" } } */
- 
- /**
-  **
-  ** Pragma
-  **
-  **/
- 
- #pragma GCC target ("warn-framesize=0")
- void fn_pragma_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 wd0" } } */
- #pragma GCC reset_options
- 
- void fn_pragma_0_default (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default wd0" } } */
- 
- #pragma GCC target ("warn-framesize=512")
- void fn_pragma_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 wd0" } } */
- #pragma GCC reset_options
- 
- void fn_pragma_1_default (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default wd0" } } */
- 
- #pragma GCC target ("warn-framesize=512")
- #pragma GCC target ("warn-framesize=0")
- void fn_pragma_1_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd0" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("warn-framesize=0")
- #pragma GCC target ("warn-framesize=512")
- void fn_pragma_0_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd0" } } */
- #pragma GCC reset_options
- 
- /**
-  **
-  ** Pragma and attribute
-  **
-  **/
- 
- #pragma GCC target ("warn-framesize=0")
- __attribute__ ((target ("warn-framesize=0")))
- void fn_pragma_0_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd0" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("warn-framesize=0")
- __attribute__ ((target ("warn-framesize=0")))
- void fn_pragma_1_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd0" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("warn-framesize=0")
- __attribute__ ((target ("warn-framesize=512")))
- void fn_pragma_0_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd0" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("warn-framesize=0")
- __attribute__ ((target ("warn-framesize=512")))
- void fn_pragma_1_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd0" } } */
- #pragma GCC reset_options
- 
- /**
-  **
-  ** End
-  **
-  **/
- 
- void fn_default_end (void) { }
- /* { dg-final { scan-assembler "fn:fn_default_end ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end se1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end wd0" } } */
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-13.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-13.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-13.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-13.c	Thu Jan  1 00:00:00 1970
***************
*** 1,353 ****
- /* Functional tests for the "target" attribute and pragma.  */
- 
- /* { dg-do assemble { target { ! lp64 } } } */
- /* { dg-require-effective-target target_attribute } */
- /* { dg-options "-save-temps -mdebug -m31 -march=z13 -mtune=z10 -mstack-size=4096 -mstack-guard=0 -mbranch-cost=2 -mwarn-framesize=0 -mhard-dfp -mno-backchain -mhard-float -mvx -mhtm -mno-packed-stack -mno-small-exec -mzvector -mno-mvcle -mzarch -mwarn-dynamicstack" } */
- 
- /**
-  **
-  ** Start
-  **
-  **/
- 
- void fn_default_start (void) { }
- /* { dg-final { scan-assembler "fn:fn_default_start ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start se0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start wd1" } } */
- 
- /**
-  **
-  ** Attribute
-  **
-  **/
- 
- __attribute__ ((target ("backchain")))
- void fn_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 wd1" } } */
- 
- void fn_att_1_default (void) { }
- 
- __attribute__ ((target ("no-backchain")))
- void fn_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 wd1" } } */
- 
- void fn_att_0_default (void) { }
- 
- __attribute__ ((target ("no-backchain,backchain")))
- void fn_att_0_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 wd1" } } */
- 
- __attribute__ ((target ("backchain,no-backchain")))
- void fn_att_1_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 wd1" } } */
- 
- /**
-  **
-  ** Pragma
-  **
-  **/
- 
- #pragma GCC target ("backchain")
- void fn_pragma_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 wd1" } } */
- #pragma GCC reset_options
- 
- void fn_pragma_1_default (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default wd1" } } */
- 
- #pragma GCC target ("no-backchain")
- void fn_pragma_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 wd1" } } */
- #pragma GCC reset_options
- 
- void fn_pragma_0_default (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default wd1" } } */
- 
- #pragma GCC target ("no-backchain")
- #pragma GCC target ("backchain")
- void fn_pragma_0_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd1" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("backchain")
- #pragma GCC target ("no-backchain")
- void fn_pragma_1_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd1" } } */
- #pragma GCC reset_options
- 
- /**
-  **
-  ** Pragma and attribute
-  **
-  **/
- 
- #pragma GCC target ("backchain")
- __attribute__ ((target ("backchain")))
- void fn_pragma_1_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd1" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("backchain")
- __attribute__ ((target ("backchain")))
- void fn_pragma_0_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd1" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("backchain")
- __attribute__ ((target ("no-backchain")))
- void fn_pragma_1_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd1" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("backchain")
- __attribute__ ((target ("no-backchain")))
- void fn_pragma_0_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd1" } } */
- #pragma GCC reset_options
- 
- /**
-  **
-  ** End
-  **
-  **/
- 
- void fn_default_end (void) { }
- /* { dg-final { scan-assembler "fn:fn_default_end ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end se0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end wd1" } } */
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-14.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-14.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-14.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-14.c	Thu Jan  1 00:00:00 1970
***************
*** 1,353 ****
- /* Functional tests for the "target" attribute and pragma.  */
- 
- /* { dg-do assemble { target { ! lp64 } } } */
- /* { dg-require-effective-target target_attribute } */
- /* { dg-options "-save-temps -mdebug -m31 -march=z10 -mtune=z13 -mstack-size=2048 -mstack-guard=16 -mbranch-cost=1 -mwarn-framesize=512 -mno-hard-dfp -mbackchain -msoft-float -mno-vx -mno-htm -mno-packed-stack -msmall-exec -mno-zvector -mmvcle -mesa -mno-warn-dynamicstack" } */
- 
- /**
-  **
-  ** Start
-  **
-  **/
- 
- void fn_default_start (void) { }
- /* { dg-final { scan-assembler "fn:fn_default_start ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start se1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start wd0" } } */
- 
- /**
-  **
-  ** Attribute
-  **
-  **/
- 
- __attribute__ ((target ("no-backchain")))
- void fn_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 wd0" } } */
- 
- void fn_att_0_default (void) { }
- 
- __attribute__ ((target ("backchain")))
- void fn_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 wd0" } } */
- 
- void fn_att_1_default (void) { }
- 
- __attribute__ ((target ("backchain,no-backchain")))
- void fn_att_1_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 wd0" } } */
- 
- __attribute__ ((target ("no-backchain,backchain")))
- void fn_att_0_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 wd0" } } */
- 
- /**
-  **
-  ** Pragma
-  **
-  **/
- 
- #pragma GCC target ("no-backchain")
- void fn_pragma_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 wd0" } } */
- #pragma GCC reset_options
- 
- void fn_pragma_0_default (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default wd0" } } */
- 
- #pragma GCC target ("backchain")
- void fn_pragma_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 wd0" } } */
- #pragma GCC reset_options
- 
- void fn_pragma_1_default (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default wd0" } } */
- 
- #pragma GCC target ("backchain")
- #pragma GCC target ("no-backchain")
- void fn_pragma_1_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd0" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("no-backchain")
- #pragma GCC target ("backchain")
- void fn_pragma_0_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd0" } } */
- #pragma GCC reset_options
- 
- /**
-  **
-  ** Pragma and attribute
-  **
-  **/
- 
- #pragma GCC target ("no-backchain")
- __attribute__ ((target ("no-backchain")))
- void fn_pragma_0_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd0" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("no-backchain")
- __attribute__ ((target ("no-backchain")))
- void fn_pragma_1_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd0" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("no-backchain")
- __attribute__ ((target ("backchain")))
- void fn_pragma_0_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd0" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("no-backchain")
- __attribute__ ((target ("backchain")))
- void fn_pragma_1_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd0" } } */
- #pragma GCC reset_options
- 
- /**
-  **
-  ** End
-  **
-  **/
- 
- void fn_default_end (void) { }
- /* { dg-final { scan-assembler "fn:fn_default_end ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end se1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end wd0" } } */
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-15.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-15.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-15.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-15.c	Thu Jan  1 00:00:00 1970
***************
*** 1,353 ****
- /* Functional tests for the "target" attribute and pragma.  */
- 
- /* { dg-do assemble { target { ! lp64 } } } */
- /* { dg-require-effective-target target_attribute } */
- /* { dg-options "-save-temps -mdebug -m31 -march=z13 -mtune=z10 -mstack-size=4096 -mstack-guard=0 -mbranch-cost=2 -mwarn-framesize=0 -mhard-dfp -mno-backchain -mhard-float -mvx -mhtm -mpacked-stack -mno-small-exec -mzvector -mno-mvcle -mzarch -mwarn-dynamicstack" } */
- 
- /**
-  **
-  ** Start
-  **
-  **/
- 
- void fn_default_start (void) { }
- /* { dg-final { scan-assembler "fn:fn_default_start ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start se0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start wd1" } } */
- 
- /**
-  **
-  ** Attribute
-  **
-  **/
- 
- __attribute__ ((target ("hard-dfp")))
- void fn_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 wd1" } } */
- 
- void fn_att_1_default (void) { }
- 
- __attribute__ ((target ("no-hard-dfp")))
- void fn_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 wd1" } } */
- 
- void fn_att_0_default (void) { }
- 
- __attribute__ ((target ("no-hard-dfp,hard-dfp")))
- void fn_att_0_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_0_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 wd1" } } */
- 
- __attribute__ ((target ("hard-dfp,no-hard-dfp")))
- void fn_att_1_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_1_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 wd1" } } */
- 
- /**
-  **
-  ** Pragma
-  **
-  **/
- 
- #pragma GCC target ("hard-dfp")
- void fn_pragma_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 wd1" } } */
- #pragma GCC reset_options
- 
- void fn_pragma_1_default (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default wd1" } } */
- 
- #pragma GCC target ("no-hard-dfp")
- void fn_pragma_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 wd1" } } */
- #pragma GCC reset_options
- 
- void fn_pragma_0_default (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default wd1" } } */
- 
- #pragma GCC target ("no-hard-dfp")
- #pragma GCC target ("hard-dfp")
- void fn_pragma_0_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd1" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("hard-dfp")
- #pragma GCC target ("no-hard-dfp")
- void fn_pragma_1_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd1" } } */
- #pragma GCC reset_options
- 
- /**
-  **
-  ** Pragma and attribute
-  **
-  **/
- 
- #pragma GCC target ("hard-dfp")
- __attribute__ ((target ("hard-dfp")))
- void fn_pragma_1_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd1" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("hard-dfp")
- __attribute__ ((target ("hard-dfp")))
- void fn_pragma_0_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd1" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("hard-dfp")
- __attribute__ ((target ("no-hard-dfp")))
- void fn_pragma_1_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd1" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("hard-dfp")
- __attribute__ ((target ("no-hard-dfp")))
- void fn_pragma_0_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd1" } } */
- #pragma GCC reset_options
- 
- /**
-  **
-  ** End
-  **
-  **/
- 
- void fn_default_end (void) { }
- /* { dg-final { scan-assembler "fn:fn_default_end ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end se0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end wd1" } } */
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-16.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-16.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-16.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-16.c	Thu Jan  1 00:00:00 1970
***************
*** 1,353 ****
- /* Functional tests for the "target" attribute and pragma.  */
- 
- /* { dg-do assemble { target { ! lp64 } } } */
- /* { dg-require-effective-target target_attribute } */
- /* { dg-options "-save-temps -mdebug -m31 -march=z10 -mtune=z13 -mstack-size=2048 -mstack-guard=16 -mbranch-cost=1 -mwarn-framesize=512 -mno-hard-dfp -mbackchain -mhard-float -mno-vx -mno-htm -mno-packed-stack -msmall-exec -mno-zvector -mmvcle -mzarch -mno-warn-dynamicstack" } */
- 
- /**
-  **
-  ** Start
-  **
-  **/
- 
- void fn_default_start (void) { }
- /* { dg-final { scan-assembler "fn:fn_default_start ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start se1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start wd0" } } */
- 
- /**
-  **
-  ** Attribute
-  **
-  **/
- 
- __attribute__ ((target ("no-hard-dfp")))
- void fn_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 wd0" } } */
- 
- void fn_att_0_default (void) { }
- 
- __attribute__ ((target ("hard-dfp")))
- void fn_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 wd0" } } */
- 
- void fn_att_1_default (void) { }
- 
- __attribute__ ((target ("hard-dfp,no-hard-dfp")))
- void fn_att_1_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_1_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 wd0" } } */
- 
- __attribute__ ((target ("no-hard-dfp,hard-dfp")))
- void fn_att_0_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_0_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 wd0" } } */
- 
- /**
-  **
-  ** Pragma
-  **
-  **/
- 
- #pragma GCC target ("no-hard-dfp")
- void fn_pragma_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 wd0" } } */
- #pragma GCC reset_options
- 
- void fn_pragma_0_default (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default wd0" } } */
- 
- #pragma GCC target ("hard-dfp")
- void fn_pragma_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 wd0" } } */
- #pragma GCC reset_options
- 
- void fn_pragma_1_default (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default wd0" } } */
- 
- #pragma GCC target ("hard-dfp")
- #pragma GCC target ("no-hard-dfp")
- void fn_pragma_1_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd0" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("no-hard-dfp")
- #pragma GCC target ("hard-dfp")
- void fn_pragma_0_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd0" } } */
- #pragma GCC reset_options
- 
- /**
-  **
-  ** Pragma and attribute
-  **
-  **/
- 
- #pragma GCC target ("no-hard-dfp")
- __attribute__ ((target ("no-hard-dfp")))
- void fn_pragma_0_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd0" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("no-hard-dfp")
- __attribute__ ((target ("no-hard-dfp")))
- void fn_pragma_1_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd0" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("no-hard-dfp")
- __attribute__ ((target ("hard-dfp")))
- void fn_pragma_0_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd0" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("no-hard-dfp")
- __attribute__ ((target ("hard-dfp")))
- void fn_pragma_1_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd0" } } */
- #pragma GCC reset_options
- 
- /**
-  **
-  ** End
-  **
-  **/
- 
- void fn_default_end (void) { }
- /* { dg-final { scan-assembler "fn:fn_default_end ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end se1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end wd0" } } */
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-17.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-17.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-17.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-17.c	Thu Jan  1 00:00:00 1970
***************
*** 1,353 ****
- /* Functional tests for the "target" attribute and pragma.  */
- 
- /* { dg-do assemble { target { ! lp64 } } } */
- /* { dg-require-effective-target target_attribute } */
- /* { dg-options "-save-temps -mdebug -m31 -march=z13 -mtune=z10 -mstack-size=4096 -mstack-guard=0 -mbranch-cost=2 -mwarn-framesize=0 -mno-hard-dfp -mno-backchain -mhard-float -mno-vx -mhtm -mpacked-stack -mno-small-exec -mzvector -mno-mvcle -mzarch -mwarn-dynamicstack" } */
- 
- /**
-  **
-  ** Start
-  **
-  **/
- 
- void fn_default_start (void) { }
- /* { dg-final { scan-assembler "fn:fn_default_start ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start se0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start wd1" } } */
- 
- /**
-  **
-  ** Attribute
-  **
-  **/
- 
- __attribute__ ((target ("hard-float")))
- void fn_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 wd1" } } */
- 
- void fn_att_1_default (void) { }
- 
- __attribute__ ((target ("soft-float")))
- void fn_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 wd1" } } */
- 
- void fn_att_0_default (void) { }
- 
- __attribute__ ((target ("soft-float,hard-float")))
- void fn_att_0_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_0_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 wd1" } } */
- 
- __attribute__ ((target ("hard-float,soft-float")))
- void fn_att_1_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_1_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 wd1" } } */
- 
- /**
-  **
-  ** Pragma
-  **
-  **/
- 
- #pragma GCC target ("hard-float")
- void fn_pragma_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 wd1" } } */
- #pragma GCC reset_options
- 
- void fn_pragma_1_default (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default wd1" } } */
- 
- #pragma GCC target ("soft-float")
- void fn_pragma_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 wd1" } } */
- #pragma GCC reset_options
- 
- void fn_pragma_0_default (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default wd1" } } */
- 
- #pragma GCC target ("soft-float")
- #pragma GCC target ("hard-float")
- void fn_pragma_0_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd1" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("hard-float")
- #pragma GCC target ("soft-float")
- void fn_pragma_1_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd1" } } */
- #pragma GCC reset_options
- 
- /**
-  **
-  ** Pragma and attribute
-  **
-  **/
- 
- #pragma GCC target ("hard-float")
- __attribute__ ((target ("hard-float")))
- void fn_pragma_1_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd1" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("hard-float")
- __attribute__ ((target ("hard-float")))
- void fn_pragma_0_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd1" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("hard-float")
- __attribute__ ((target ("soft-float")))
- void fn_pragma_1_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd1" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("hard-float")
- __attribute__ ((target ("soft-float")))
- void fn_pragma_0_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd1" } } */
- #pragma GCC reset_options
- 
- /**
-  **
-  ** End
-  **
-  **/
- 
- void fn_default_end (void) { }
- /* { dg-final { scan-assembler "fn:fn_default_end ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end se0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end wd1" } } */
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-18.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-18.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-18.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-18.c	Thu Jan  1 00:00:00 1970
***************
*** 1,353 ****
- /* Functional tests for the "target" attribute and pragma.  */
- 
- /* { dg-do assemble { target { ! lp64 } } } */
- /* { dg-require-effective-target target_attribute } */
- /* { dg-options "-save-temps -mdebug -m31 -march=z10 -mtune=z13 -mstack-size=2048 -mstack-guard=16 -mbranch-cost=1 -mwarn-framesize=512 -mno-hard-dfp -mbackchain -msoft-float -mno-vx -mno-htm -mno-packed-stack -msmall-exec -mno-zvector -mmvcle -mesa -mno-warn-dynamicstack" } */
- 
- /**
-  **
-  ** Start
-  **
-  **/
- 
- void fn_default_start (void) { }
- /* { dg-final { scan-assembler "fn:fn_default_start ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start se1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start wd0" } } */
- 
- /**
-  **
-  ** Attribute
-  **
-  **/
- 
- __attribute__ ((target ("soft-float")))
- void fn_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 wd0" } } */
- 
- void fn_att_0_default (void) { }
- 
- __attribute__ ((target ("hard-float")))
- void fn_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 wd0" } } */
- 
- void fn_att_1_default (void) { }
- 
- __attribute__ ((target ("hard-float,soft-float")))
- void fn_att_1_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_1_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 wd0" } } */
- 
- __attribute__ ((target ("soft-float,hard-float")))
- void fn_att_0_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_0_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 wd0" } } */
- 
- /**
-  **
-  ** Pragma
-  **
-  **/
- 
- #pragma GCC target ("soft-float")
- void fn_pragma_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 wd0" } } */
- #pragma GCC reset_options
- 
- void fn_pragma_0_default (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default wd0" } } */
- 
- #pragma GCC target ("hard-float")
- void fn_pragma_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 wd0" } } */
- #pragma GCC reset_options
- 
- void fn_pragma_1_default (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default wd0" } } */
- 
- #pragma GCC target ("hard-float")
- #pragma GCC target ("soft-float")
- void fn_pragma_1_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd0" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("soft-float")
- #pragma GCC target ("hard-float")
- void fn_pragma_0_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd0" } } */
- #pragma GCC reset_options
- 
- /**
-  **
-  ** Pragma and attribute
-  **
-  **/
- 
- #pragma GCC target ("soft-float")
- __attribute__ ((target ("soft-float")))
- void fn_pragma_0_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd0" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("soft-float")
- __attribute__ ((target ("soft-float")))
- void fn_pragma_1_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd0" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("soft-float")
- __attribute__ ((target ("hard-float")))
- void fn_pragma_0_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd0" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("soft-float")
- __attribute__ ((target ("hard-float")))
- void fn_pragma_1_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd0" } } */
- #pragma GCC reset_options
- 
- /**
-  **
-  ** End
-  **
-  **/
- 
- void fn_default_end (void) { }
- /* { dg-final { scan-assembler "fn:fn_default_end ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end se1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end wd0" } } */
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-19.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-19.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-19.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-19.c	Thu Jan  1 00:00:00 1970
***************
*** 1,353 ****
- /* Functional tests for the "target" attribute and pragma.  */
- 
- /* { dg-do assemble { target { ! lp64 } } } */
- /* { dg-require-effective-target target_attribute } */
- /* { dg-options "-save-temps -mdebug -m31 -march=z13 -mtune=z10 -mstack-size=4096 -mstack-guard=0 -mbranch-cost=2 -mwarn-framesize=0 -mhard-dfp -mno-backchain -mhard-float -mvx -mhtm -mpacked-stack -mno-small-exec -mzvector -mno-mvcle -mzarch -mwarn-dynamicstack" } */
- 
- /**
-  **
-  ** Start
-  **
-  **/
- 
- void fn_default_start (void) { }
- /* { dg-final { scan-assembler "fn:fn_default_start ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start se0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start wd1" } } */
- 
- /**
-  **
-  ** Attribute
-  **
-  **/
- 
- __attribute__ ((target ("htm")))
- void fn_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 wd1" } } */
- 
- void fn_att_1_default (void) { }
- 
- __attribute__ ((target ("no-htm")))
- void fn_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 wd1" } } */
- 
- void fn_att_0_default (void) { }
- 
- __attribute__ ((target ("no-htm,htm")))
- void fn_att_0_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 wd1" } } */
- 
- __attribute__ ((target ("htm,no-htm")))
- void fn_att_1_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 wd1" } } */
- 
- /**
-  **
-  ** Pragma
-  **
-  **/
- 
- #pragma GCC target ("htm")
- void fn_pragma_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 wd1" } } */
- #pragma GCC reset_options
- 
- void fn_pragma_1_default (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default wd1" } } */
- 
- #pragma GCC target ("no-htm")
- void fn_pragma_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 wd1" } } */
- #pragma GCC reset_options
- 
- void fn_pragma_0_default (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default wd1" } } */
- 
- #pragma GCC target ("no-htm")
- #pragma GCC target ("htm")
- void fn_pragma_0_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd1" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("htm")
- #pragma GCC target ("no-htm")
- void fn_pragma_1_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd1" } } */
- #pragma GCC reset_options
- 
- /**
-  **
-  ** Pragma and attribute
-  **
-  **/
- 
- #pragma GCC target ("htm")
- __attribute__ ((target ("htm")))
- void fn_pragma_1_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd1" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("htm")
- __attribute__ ((target ("htm")))
- void fn_pragma_0_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd1" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("htm")
- __attribute__ ((target ("no-htm")))
- void fn_pragma_1_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd1" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("htm")
- __attribute__ ((target ("no-htm")))
- void fn_pragma_0_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd1" } } */
- #pragma GCC reset_options
- 
- /**
-  **
-  ** End
-  **
-  **/
- 
- void fn_default_end (void) { }
- /* { dg-final { scan-assembler "fn:fn_default_end ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end se0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end wd1" } } */
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-2.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-2.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-2.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-2.c	Thu Jan  1 00:00:00 1970
***************
*** 1,353 ****
- /* Functional tests for the "target" attribute and pragma.  */
- 
- /* { dg-do assemble { target { ! lp64 } } } */
- /* { dg-require-effective-target target_attribute } */
- /* { dg-options "-save-temps -mdebug -m31 -march=z10 -mtune=z13 -mstack-size=2048 -mstack-guard=16 -mbranch-cost=1 -mwarn-framesize=512 -mno-hard-dfp -mbackchain -msoft-float -mno-vx -mno-htm -mno-packed-stack -msmall-exec -mno-zvector -mmvcle -mesa -mno-warn-dynamicstack" } */
- 
- /**
-  **
-  ** Start
-  **
-  **/
- 
- void fn_default_start (void) { }
- /* { dg-final { scan-assembler "fn:fn_default_start ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start se1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start wd0" } } */
- 
- /**
-  **
-  ** Attribute
-  **
-  **/
- 
- __attribute__ ((target ("arch=z10")))
- void fn_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 wd0" } } */
- 
- void fn_att_0_default (void) { }
- 
- __attribute__ ((target ("arch=z13")))
- void fn_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 wd0" } } */
- 
- void fn_att_1_default (void) { }
- 
- __attribute__ ((target ("arch=z13,arch=z10")))
- void fn_att_1_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 wd0" } } */
- 
- __attribute__ ((target ("arch=z10,arch=z13")))
- void fn_att_0_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 wd0" } } */
- 
- /**
-  **
-  ** Pragma
-  **
-  **/
- 
- #pragma GCC target ("arch=z10")
- void fn_pragma_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 wd0" } } */
- #pragma GCC reset_options
- 
- void fn_pragma_0_default (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default wd0" } } */
- 
- #pragma GCC target ("arch=z13")
- void fn_pragma_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 wd0" } } */
- #pragma GCC reset_options
- 
- void fn_pragma_1_default (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default wd0" } } */
- 
- #pragma GCC target ("arch=z13")
- #pragma GCC target ("arch=z10")
- void fn_pragma_1_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd0" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("arch=z10")
- #pragma GCC target ("arch=z13")
- void fn_pragma_0_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd0" } } */
- #pragma GCC reset_options
- 
- /**
-  **
-  ** Pragma and attribute
-  **
-  **/
- 
- #pragma GCC target ("arch=z10")
- __attribute__ ((target ("arch=z10")))
- void fn_pragma_0_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd0" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("arch=z10")
- __attribute__ ((target ("arch=z10")))
- void fn_pragma_1_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd0" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("arch=z10")
- __attribute__ ((target ("arch=z13")))
- void fn_pragma_0_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd0" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("arch=z10")
- __attribute__ ((target ("arch=z13")))
- void fn_pragma_1_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd0" } } */
- #pragma GCC reset_options
- 
- /**
-  **
-  ** End
-  **
-  **/
- 
- void fn_default_end (void) { }
- /* { dg-final { scan-assembler "fn:fn_default_end ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end se1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end wd0" } } */
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-20.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-20.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-20.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-20.c	Thu Jan  1 00:00:00 1970
***************
*** 1,353 ****
- /* Functional tests for the "target" attribute and pragma.  */
- 
- /* { dg-do assemble { target { ! lp64 } } } */
- /* { dg-require-effective-target target_attribute } */
- /* { dg-options "-save-temps -mdebug -m31 -march=z10 -mtune=z13 -mstack-size=2048 -mstack-guard=16 -mbranch-cost=1 -mwarn-framesize=512 -mno-hard-dfp -mbackchain -msoft-float -mno-vx -mno-htm -mno-packed-stack -msmall-exec -mno-zvector -mmvcle -mesa -mno-warn-dynamicstack" } */
- 
- /**
-  **
-  ** Start
-  **
-  **/
- 
- void fn_default_start (void) { }
- /* { dg-final { scan-assembler "fn:fn_default_start ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start se1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start wd0" } } */
- 
- /**
-  **
-  ** Attribute
-  **
-  **/
- 
- __attribute__ ((target ("no-htm")))
- void fn_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 wd0" } } */
- 
- void fn_att_0_default (void) { }
- 
- __attribute__ ((target ("htm")))
- void fn_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 wd0" } } */
- 
- void fn_att_1_default (void) { }
- 
- __attribute__ ((target ("htm,no-htm")))
- void fn_att_1_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 wd0" } } */
- 
- __attribute__ ((target ("no-htm,htm")))
- void fn_att_0_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 wd0" } } */
- 
- /**
-  **
-  ** Pragma
-  **
-  **/
- 
- #pragma GCC target ("no-htm")
- void fn_pragma_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 wd0" } } */
- #pragma GCC reset_options
- 
- void fn_pragma_0_default (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default wd0" } } */
- 
- #pragma GCC target ("htm")
- void fn_pragma_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 wd0" } } */
- #pragma GCC reset_options
- 
- void fn_pragma_1_default (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default wd0" } } */
- 
- #pragma GCC target ("htm")
- #pragma GCC target ("no-htm")
- void fn_pragma_1_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd0" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("no-htm")
- #pragma GCC target ("htm")
- void fn_pragma_0_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd0" } } */
- #pragma GCC reset_options
- 
- /**
-  **
-  ** Pragma and attribute
-  **
-  **/
- 
- #pragma GCC target ("no-htm")
- __attribute__ ((target ("no-htm")))
- void fn_pragma_0_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd0" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("no-htm")
- __attribute__ ((target ("no-htm")))
- void fn_pragma_1_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd0" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("no-htm")
- __attribute__ ((target ("htm")))
- void fn_pragma_0_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd0" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("no-htm")
- __attribute__ ((target ("htm")))
- void fn_pragma_1_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd0" } } */
- #pragma GCC reset_options
- 
- /**
-  **
-  ** End
-  **
-  **/
- 
- void fn_default_end (void) { }
- /* { dg-final { scan-assembler "fn:fn_default_end ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end se1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end wd0" } } */
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-21.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-21.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-21.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-21.c	Thu Jan  1 00:00:00 1970
***************
*** 1,353 ****
- /* Functional tests for the "target" attribute and pragma.  */
- 
- /* { dg-do assemble { target { ! lp64 } } } */
- /* { dg-require-effective-target target_attribute } */
- /* { dg-options "-save-temps -mdebug -m31 -march=z13 -mtune=z10 -mstack-size=4096 -mstack-guard=0 -mbranch-cost=2 -mwarn-framesize=0 -mhard-dfp -mno-backchain -mhard-float -mvx -mhtm -mpacked-stack -mno-small-exec -mzvector -mno-mvcle -mzarch -mwarn-dynamicstack" } */
- 
- /**
-  **
-  ** Start
-  **
-  **/
- 
- void fn_default_start (void) { }
- /* { dg-final { scan-assembler "fn:fn_default_start ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start se0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start wd1" } } */
- 
- /**
-  **
-  ** Attribute
-  **
-  **/
- 
- __attribute__ ((target ("vx")))
- void fn_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 wd1" } } */
- 
- void fn_att_1_default (void) { }
- 
- __attribute__ ((target ("no-vx")))
- void fn_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 wd1" } } */
- 
- void fn_att_0_default (void) { }
- 
- __attribute__ ((target ("no-vx,vx")))
- void fn_att_0_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_0_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 wd1" } } */
- 
- __attribute__ ((target ("vx,no-vx")))
- void fn_att_1_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_1_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 wd1" } } */
- 
- /**
-  **
-  ** Pragma
-  **
-  **/
- 
- #pragma GCC target ("vx")
- void fn_pragma_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 wd1" } } */
- #pragma GCC reset_options
- 
- void fn_pragma_1_default (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default wd1" } } */
- 
- #pragma GCC target ("no-vx")
- void fn_pragma_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 wd1" } } */
- #pragma GCC reset_options
- 
- void fn_pragma_0_default (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default wd1" } } */
- 
- #pragma GCC target ("no-vx")
- #pragma GCC target ("vx")
- void fn_pragma_0_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd1" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("vx")
- #pragma GCC target ("no-vx")
- void fn_pragma_1_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd1" } } */
- #pragma GCC reset_options
- 
- /**
-  **
-  ** Pragma and attribute
-  **
-  **/
- 
- #pragma GCC target ("vx")
- __attribute__ ((target ("vx")))
- void fn_pragma_1_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd1" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("vx")
- __attribute__ ((target ("vx")))
- void fn_pragma_0_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd1" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("vx")
- __attribute__ ((target ("no-vx")))
- void fn_pragma_1_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd1" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("vx")
- __attribute__ ((target ("no-vx")))
- void fn_pragma_0_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd1" } } */
- #pragma GCC reset_options
- 
- /**
-  **
-  ** End
-  **
-  **/
- 
- void fn_default_end (void) { }
- /* { dg-final { scan-assembler "fn:fn_default_end ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end se0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end wd1" } } */
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-22.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-22.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-22.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-22.c	Thu Jan  1 00:00:00 1970
***************
*** 1,353 ****
- /* Functional tests for the "target" attribute and pragma.  */
- 
- /* { dg-do assemble { target { ! lp64 } } } */
- /* { dg-require-effective-target target_attribute } */
- /* { dg-options "-save-temps -mdebug -m31 -march=z13 -mtune=z13 -mstack-size=2048 -mstack-guard=16 -mbranch-cost=1 -mwarn-framesize=512 -mno-hard-dfp -mbackchain -mhard-float -mno-vx -mno-htm -mno-packed-stack -msmall-exec -mno-zvector -mmvcle -mesa -mno-warn-dynamicstack" } */
- 
- /**
-  **
-  ** Start
-  **
-  **/
- 
- void fn_default_start (void) { }
- /* { dg-final { scan-assembler "fn:fn_default_start ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start se1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start wd0" } } */
- 
- /**
-  **
-  ** Attribute
-  **
-  **/
- 
- __attribute__ ((target ("no-vx")))
- void fn_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 wd0" } } */
- 
- void fn_att_0_default (void) { }
- 
- __attribute__ ((target ("vx")))
- void fn_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 wd0" } } */
- 
- void fn_att_1_default (void) { }
- 
- __attribute__ ((target ("vx,no-vx")))
- void fn_att_1_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_1_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 wd0" } } */
- 
- __attribute__ ((target ("no-vx,vx")))
- void fn_att_0_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_0_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 wd0" } } */
- 
- /**
-  **
-  ** Pragma
-  **
-  **/
- 
- #pragma GCC target ("no-vx")
- void fn_pragma_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 wd0" } } */
- #pragma GCC reset_options
- 
- void fn_pragma_0_default (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default wd0" } } */
- 
- #pragma GCC target ("vx")
- void fn_pragma_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 wd0" } } */
- #pragma GCC reset_options
- 
- void fn_pragma_1_default (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default wd0" } } */
- 
- #pragma GCC target ("vx")
- #pragma GCC target ("no-vx")
- void fn_pragma_1_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd0" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("no-vx")
- #pragma GCC target ("vx")
- void fn_pragma_0_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd0" } } */
- #pragma GCC reset_options
- 
- /**
-  **
-  ** Pragma and attribute
-  **
-  **/
- 
- #pragma GCC target ("no-vx")
- __attribute__ ((target ("no-vx")))
- void fn_pragma_0_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd0" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("no-vx")
- __attribute__ ((target ("no-vx")))
- void fn_pragma_1_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd0" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("no-vx")
- __attribute__ ((target ("vx")))
- void fn_pragma_0_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd0" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("no-vx")
- __attribute__ ((target ("vx")))
- void fn_pragma_1_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd0" } } */
- #pragma GCC reset_options
- 
- /**
-  **
-  ** End
-  **
-  **/
- 
- void fn_default_end (void) { }
- /* { dg-final { scan-assembler "fn:fn_default_end ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end se1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end wd0" } } */
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-23.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-23.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-23.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-23.c	Thu Jan  1 00:00:00 1970
***************
*** 1,353 ****
- /* Functional tests for the "target" attribute and pragma.  */
- 
- /* { dg-do assemble { target { ! lp64 } } } */
- /* { dg-require-effective-target target_attribute } */
- /* { dg-options "-save-temps -mdebug -m31 -march=z13 -mtune=z10 -mstack-size=4096 -mstack-guard=0 -mbranch-cost=2 -mwarn-framesize=0 -mhard-dfp -mno-backchain -mhard-float -mvx -mhtm -mpacked-stack -mno-small-exec -mzvector -mno-mvcle -mzarch -mwarn-dynamicstack" } */
- 
- /**
-  **
-  ** Start
-  **
-  **/
- 
- void fn_default_start (void) { }
- /* { dg-final { scan-assembler "fn:fn_default_start ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start se0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start wd1" } } */
- 
- /**
-  **
-  ** Attribute
-  **
-  **/
- 
- __attribute__ ((target ("packed-stack")))
- void fn_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 wd1" } } */
- 
- void fn_att_1_default (void) { }
- 
- __attribute__ ((target ("no-packed-stack")))
- void fn_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 wd1" } } */
- 
- void fn_att_0_default (void) { }
- 
- __attribute__ ((target ("no-packed-stack,packed-stack")))
- void fn_att_0_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 wd1" } } */
- 
- __attribute__ ((target ("packed-stack,no-packed-stack")))
- void fn_att_1_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 wd1" } } */
- 
- /**
-  **
-  ** Pragma
-  **
-  **/
- 
- #pragma GCC target ("packed-stack")
- void fn_pragma_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 wd1" } } */
- #pragma GCC reset_options
- 
- void fn_pragma_1_default (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default wd1" } } */
- 
- #pragma GCC target ("no-packed-stack")
- void fn_pragma_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 wd1" } } */
- #pragma GCC reset_options
- 
- void fn_pragma_0_default (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default wd1" } } */
- 
- #pragma GCC target ("no-packed-stack")
- #pragma GCC target ("packed-stack")
- void fn_pragma_0_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd1" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("packed-stack")
- #pragma GCC target ("no-packed-stack")
- void fn_pragma_1_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd1" } } */
- #pragma GCC reset_options
- 
- /**
-  **
-  ** Pragma and attribute
-  **
-  **/
- 
- #pragma GCC target ("packed-stack")
- __attribute__ ((target ("packed-stack")))
- void fn_pragma_1_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd1" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("packed-stack")
- __attribute__ ((target ("packed-stack")))
- void fn_pragma_0_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd1" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("packed-stack")
- __attribute__ ((target ("no-packed-stack")))
- void fn_pragma_1_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd1" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("packed-stack")
- __attribute__ ((target ("no-packed-stack")))
- void fn_pragma_0_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd1" } } */
- #pragma GCC reset_options
- 
- /**
-  **
-  ** End
-  **
-  **/
- 
- void fn_default_end (void) { }
- /* { dg-final { scan-assembler "fn:fn_default_end ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end se0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end wd1" } } */
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-24.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-24.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-24.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-24.c	Thu Jan  1 00:00:00 1970
***************
*** 1,353 ****
- /* Functional tests for the "target" attribute and pragma.  */
- 
- /* { dg-do assemble { target { ! lp64 } } } */
- /* { dg-require-effective-target target_attribute } */
- /* { dg-options "-save-temps -mdebug -m31 -march=z10 -mtune=z13 -mstack-size=2048 -mstack-guard=16 -mbranch-cost=1 -mwarn-framesize=512 -mno-hard-dfp -mno-backchain -msoft-float -mno-vx -mno-htm -mno-packed-stack -msmall-exec -mno-zvector -mmvcle -mesa -mno-warn-dynamicstack" } */
- 
- /**
-  **
-  ** Start
-  **
-  **/
- 
- void fn_default_start (void) { }
- /* { dg-final { scan-assembler "fn:fn_default_start ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start se1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start wd0" } } */
- 
- /**
-  **
-  ** Attribute
-  **
-  **/
- 
- __attribute__ ((target ("no-packed-stack")))
- void fn_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 wd0" } } */
- 
- void fn_att_0_default (void) { }
- 
- __attribute__ ((target ("packed-stack")))
- void fn_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 wd0" } } */
- 
- void fn_att_1_default (void) { }
- 
- __attribute__ ((target ("packed-stack,no-packed-stack")))
- void fn_att_1_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 wd0" } } */
- 
- __attribute__ ((target ("no-packed-stack,packed-stack")))
- void fn_att_0_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 wd0" } } */
- 
- /**
-  **
-  ** Pragma
-  **
-  **/
- 
- #pragma GCC target ("no-packed-stack")
- void fn_pragma_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 wd0" } } */
- #pragma GCC reset_options
- 
- void fn_pragma_0_default (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default wd0" } } */
- 
- #pragma GCC target ("packed-stack")
- void fn_pragma_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 wd0" } } */
- #pragma GCC reset_options
- 
- void fn_pragma_1_default (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default wd0" } } */
- 
- #pragma GCC target ("packed-stack")
- #pragma GCC target ("no-packed-stack")
- void fn_pragma_1_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd0" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("no-packed-stack")
- #pragma GCC target ("packed-stack")
- void fn_pragma_0_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd0" } } */
- #pragma GCC reset_options
- 
- /**
-  **
-  ** Pragma and attribute
-  **
-  **/
- 
- #pragma GCC target ("no-packed-stack")
- __attribute__ ((target ("no-packed-stack")))
- void fn_pragma_0_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd0" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("no-packed-stack")
- __attribute__ ((target ("no-packed-stack")))
- void fn_pragma_1_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd0" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("no-packed-stack")
- __attribute__ ((target ("packed-stack")))
- void fn_pragma_0_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd0" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("no-packed-stack")
- __attribute__ ((target ("packed-stack")))
- void fn_pragma_1_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd0" } } */
- #pragma GCC reset_options
- 
- /**
-  **
-  ** End
-  **
-  **/
- 
- void fn_default_end (void) { }
- /* { dg-final { scan-assembler "fn:fn_default_end ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end se1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end wd0" } } */
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-25.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-25.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-25.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-25.c	Thu Jan  1 00:00:00 1970
***************
*** 1,353 ****
- /* Functional tests for the "target" attribute and pragma.  */
- 
- /* { dg-do assemble { target { ! lp64 } } } */
- /* { dg-require-effective-target target_attribute } */
- /* { dg-options "-save-temps -mdebug -m31 -march=z13 -mtune=z10 -mstack-size=4096 -mstack-guard=0 -mbranch-cost=2 -mwarn-framesize=0 -mhard-dfp -mno-backchain -mhard-float -mvx -mhtm -mpacked-stack -mno-small-exec -mzvector -mno-mvcle -mzarch -mwarn-dynamicstack" } */
- 
- /**
-  **
-  ** Start
-  **
-  **/
- 
- void fn_default_start (void) { }
- /* { dg-final { scan-assembler "fn:fn_default_start ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start se0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start wd1" } } */
- 
- /**
-  **
-  ** Attribute
-  **
-  **/
- 
- __attribute__ ((target ("small-exec")))
- void fn_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 wd1" } } */
- 
- void fn_att_1_default (void) { }
- 
- __attribute__ ((target ("no-small-exec")))
- void fn_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 wd1" } } */
- 
- void fn_att_0_default (void) { }
- 
- __attribute__ ((target ("no-small-exec,small-exec")))
- void fn_att_0_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_0_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 wd1" } } */
- 
- __attribute__ ((target ("small-exec,no-small-exec")))
- void fn_att_1_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_1_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 wd1" } } */
- 
- /**
-  **
-  ** Pragma
-  **
-  **/
- 
- #pragma GCC target ("small-exec")
- void fn_pragma_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 wd1" } } */
- #pragma GCC reset_options
- 
- void fn_pragma_1_default (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default wd1" } } */
- 
- #pragma GCC target ("no-small-exec")
- void fn_pragma_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 wd1" } } */
- #pragma GCC reset_options
- 
- void fn_pragma_0_default (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default wd1" } } */
- 
- #pragma GCC target ("no-small-exec")
- #pragma GCC target ("small-exec")
- void fn_pragma_0_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd1" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("small-exec")
- #pragma GCC target ("no-small-exec")
- void fn_pragma_1_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd1" } } */
- #pragma GCC reset_options
- 
- /**
-  **
-  ** Pragma and attribute
-  **
-  **/
- 
- #pragma GCC target ("small-exec")
- __attribute__ ((target ("small-exec")))
- void fn_pragma_1_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd1" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("small-exec")
- __attribute__ ((target ("small-exec")))
- void fn_pragma_0_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd1" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("small-exec")
- __attribute__ ((target ("no-small-exec")))
- void fn_pragma_1_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd1" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("small-exec")
- __attribute__ ((target ("no-small-exec")))
- void fn_pragma_0_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd1" } } */
- #pragma GCC reset_options
- 
- /**
-  **
-  ** End
-  **
-  **/
- 
- void fn_default_end (void) { }
- /* { dg-final { scan-assembler "fn:fn_default_end ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end se0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end wd1" } } */
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-26.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-26.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-26.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-26.c	Thu Jan  1 00:00:00 1970
***************
*** 1,353 ****
- /* Functional tests for the "target" attribute and pragma.  */
- 
- /* { dg-do assemble { target { ! lp64 } } } */
- /* { dg-require-effective-target target_attribute } */
- /* { dg-options "-save-temps -mdebug -m31 -march=z10 -mtune=z13 -mstack-size=2048 -mstack-guard=16 -mbranch-cost=1 -mwarn-framesize=512 -mno-hard-dfp -mbackchain -msoft-float -mno-vx -mno-htm -mno-packed-stack -msmall-exec -mno-zvector -mmvcle -mesa -mno-warn-dynamicstack" } */
- 
- /**
-  **
-  ** Start
-  **
-  **/
- 
- void fn_default_start (void) { }
- /* { dg-final { scan-assembler "fn:fn_default_start ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start se1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start wd0" } } */
- 
- /**
-  **
-  ** Attribute
-  **
-  **/
- 
- __attribute__ ((target ("no-small-exec")))
- void fn_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 wd0" } } */
- 
- void fn_att_0_default (void) { }
- 
- __attribute__ ((target ("small-exec")))
- void fn_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 wd0" } } */
- 
- void fn_att_1_default (void) { }
- 
- __attribute__ ((target ("small-exec,no-small-exec")))
- void fn_att_1_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_1_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 wd0" } } */
- 
- __attribute__ ((target ("no-small-exec,small-exec")))
- void fn_att_0_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_0_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 wd0" } } */
- 
- /**
-  **
-  ** Pragma
-  **
-  **/
- 
- #pragma GCC target ("no-small-exec")
- void fn_pragma_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 wd0" } } */
- #pragma GCC reset_options
- 
- void fn_pragma_0_default (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default wd0" } } */
- 
- #pragma GCC target ("small-exec")
- void fn_pragma_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 wd0" } } */
- #pragma GCC reset_options
- 
- void fn_pragma_1_default (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default wd0" } } */
- 
- #pragma GCC target ("small-exec")
- #pragma GCC target ("no-small-exec")
- void fn_pragma_1_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd0" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("no-small-exec")
- #pragma GCC target ("small-exec")
- void fn_pragma_0_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd0" } } */
- #pragma GCC reset_options
- 
- /**
-  **
-  ** Pragma and attribute
-  **
-  **/
- 
- #pragma GCC target ("no-small-exec")
- __attribute__ ((target ("no-small-exec")))
- void fn_pragma_0_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd0" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("no-small-exec")
- __attribute__ ((target ("no-small-exec")))
- void fn_pragma_1_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd0" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("no-small-exec")
- __attribute__ ((target ("small-exec")))
- void fn_pragma_0_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd0" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("no-small-exec")
- __attribute__ ((target ("small-exec")))
- void fn_pragma_1_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd0" } } */
- #pragma GCC reset_options
- 
- /**
-  **
-  ** End
-  **
-  **/
- 
- void fn_default_end (void) { }
- /* { dg-final { scan-assembler "fn:fn_default_end ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end se1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end wd0" } } */
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-27.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-27.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-27.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-27.c	Thu Jan  1 00:00:00 1970
***************
*** 1,353 ****
- /* Functional tests for the "target" attribute and pragma.  */
- 
- /* { dg-do assemble { target { ! lp64 } } } */
- /* { dg-require-effective-target target_attribute } */
- /* { dg-options "-save-temps -mdebug -m31 -march=z13 -mtune=z10 -mstack-size=4096 -mstack-guard=0 -mbranch-cost=2 -mwarn-framesize=0 -mhard-dfp -mno-backchain -mhard-float -mvx -mhtm -mpacked-stack -mno-small-exec -mzvector -mno-mvcle -mzarch -mwarn-dynamicstack" } */
- 
- /**
-  **
-  ** Start
-  **
-  **/
- 
- void fn_default_start (void) { }
- /* { dg-final { scan-assembler "fn:fn_default_start ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start se0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start wd1" } } */
- 
- /**
-  **
-  ** Attribute
-  **
-  **/
- 
- __attribute__ ((target ("mvcle")))
- void fn_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 wd1" } } */
- 
- void fn_att_1_default (void) { }
- 
- __attribute__ ((target ("no-mvcle")))
- void fn_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 wd1" } } */
- 
- void fn_att_0_default (void) { }
- 
- __attribute__ ((target ("no-mvcle,mvcle")))
- void fn_att_0_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_0_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 wd1" } } */
- 
- __attribute__ ((target ("mvcle,no-mvcle")))
- void fn_att_1_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_1_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 wd1" } } */
- 
- /**
-  **
-  ** Pragma
-  **
-  **/
- 
- #pragma GCC target ("mvcle")
- void fn_pragma_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 wd1" } } */
- #pragma GCC reset_options
- 
- void fn_pragma_1_default (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default wd1" } } */
- 
- #pragma GCC target ("no-mvcle")
- void fn_pragma_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 wd1" } } */
- #pragma GCC reset_options
- 
- void fn_pragma_0_default (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default wd1" } } */
- 
- #pragma GCC target ("no-mvcle")
- #pragma GCC target ("mvcle")
- void fn_pragma_0_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd1" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("mvcle")
- #pragma GCC target ("no-mvcle")
- void fn_pragma_1_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd1" } } */
- #pragma GCC reset_options
- 
- /**
-  **
-  ** Pragma and attribute
-  **
-  **/
- 
- #pragma GCC target ("mvcle")
- __attribute__ ((target ("mvcle")))
- void fn_pragma_1_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd1" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("mvcle")
- __attribute__ ((target ("mvcle")))
- void fn_pragma_0_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd1" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("mvcle")
- __attribute__ ((target ("no-mvcle")))
- void fn_pragma_1_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd1" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("mvcle")
- __attribute__ ((target ("no-mvcle")))
- void fn_pragma_0_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd1" } } */
- #pragma GCC reset_options
- 
- /**
-  **
-  ** End
-  **
-  **/
- 
- void fn_default_end (void) { }
- /* { dg-final { scan-assembler "fn:fn_default_end ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end se0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end wd1" } } */
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-28.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-28.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-28.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-28.c	Thu Jan  1 00:00:00 1970
***************
*** 1,353 ****
- /* Functional tests for the "target" attribute and pragma.  */
- 
- /* { dg-do assemble { target { ! lp64 } } } */
- /* { dg-require-effective-target target_attribute } */
- /* { dg-options "-save-temps -mdebug -m31 -march=z10 -mtune=z13 -mstack-size=2048 -mstack-guard=16 -mbranch-cost=1 -mwarn-framesize=512 -mno-hard-dfp -mbackchain -msoft-float -mno-vx -mno-htm -mno-packed-stack -msmall-exec -mno-zvector -mmvcle -mesa -mno-warn-dynamicstack" } */
- 
- /**
-  **
-  ** Start
-  **
-  **/
- 
- void fn_default_start (void) { }
- /* { dg-final { scan-assembler "fn:fn_default_start ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start se1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start wd0" } } */
- 
- /**
-  **
-  ** Attribute
-  **
-  **/
- 
- __attribute__ ((target ("no-mvcle")))
- void fn_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 wd0" } } */
- 
- void fn_att_0_default (void) { }
- 
- __attribute__ ((target ("mvcle")))
- void fn_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 wd0" } } */
- 
- void fn_att_1_default (void) { }
- 
- __attribute__ ((target ("mvcle,no-mvcle")))
- void fn_att_1_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_1_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 wd0" } } */
- 
- __attribute__ ((target ("no-mvcle,mvcle")))
- void fn_att_0_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_0_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 wd0" } } */
- 
- /**
-  **
-  ** Pragma
-  **
-  **/
- 
- #pragma GCC target ("no-mvcle")
- void fn_pragma_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 wd0" } } */
- #pragma GCC reset_options
- 
- void fn_pragma_0_default (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default wd0" } } */
- 
- #pragma GCC target ("mvcle")
- void fn_pragma_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 wd0" } } */
- #pragma GCC reset_options
- 
- void fn_pragma_1_default (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default wd0" } } */
- 
- #pragma GCC target ("mvcle")
- #pragma GCC target ("no-mvcle")
- void fn_pragma_1_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd0" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("no-mvcle")
- #pragma GCC target ("mvcle")
- void fn_pragma_0_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd0" } } */
- #pragma GCC reset_options
- 
- /**
-  **
-  ** Pragma and attribute
-  **
-  **/
- 
- #pragma GCC target ("no-mvcle")
- __attribute__ ((target ("no-mvcle")))
- void fn_pragma_0_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd0" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("no-mvcle")
- __attribute__ ((target ("no-mvcle")))
- void fn_pragma_1_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd0" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("no-mvcle")
- __attribute__ ((target ("mvcle")))
- void fn_pragma_0_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd0" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("no-mvcle")
- __attribute__ ((target ("mvcle")))
- void fn_pragma_1_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd0" } } */
- #pragma GCC reset_options
- 
- /**
-  **
-  ** End
-  **
-  **/
- 
- void fn_default_end (void) { }
- /* { dg-final { scan-assembler "fn:fn_default_end ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end se1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end wd0" } } */
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-29.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-29.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-29.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-29.c	Thu Jan  1 00:00:00 1970
***************
*** 1,177 ****
- /* Functional tests for the "target" attribute and pragma.  */
- 
- /* { dg-do assemble { target { ! lp64 } } } */
- /* { dg-require-effective-target target_attribute } */
- /* { dg-options "-save-temps -mdebug -m31 -march=z13 -mtune=z10 -mstack-size=4096 -mstack-guard=0 -mbranch-cost=2 -mwarn-framesize=0 -mhard-dfp -mno-backchain -mhard-float -mvx -mhtm -mpacked-stack -mno-small-exec -mzvector -mno-mvcle -mzarch -mwarn-dynamicstack" } */
- 
- /**
-  **
-  ** Start
-  **
-  **/
- 
- void fn_default_start (void) { }
- /* { dg-final { scan-assembler "fn:fn_default_start ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start se0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start wd1" } } */
- 
- /**
-  **
-  ** Pragma
-  **
-  **/
- 
- #pragma GCC target ("zvector")
- void fn_pragma_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 wd1" } } */
- #pragma GCC reset_options
- 
- void fn_pragma_1_default (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default wd1" } } */
- 
- #pragma GCC target ("no-zvector")
- void fn_pragma_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 wd1" } } */
- #pragma GCC reset_options
- 
- void fn_pragma_0_default (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default wd1" } } */
- 
- #pragma GCC target ("no-zvector")
- #pragma GCC target ("zvector")
- void fn_pragma_0_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd1" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("zvector")
- #pragma GCC target ("no-zvector")
- void fn_pragma_1_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd1" } } */
- #pragma GCC reset_options
- 
- /**
-  **
-  ** End
-  **
-  **/
- 
- void fn_default_end (void) { }
- /* { dg-final { scan-assembler "fn:fn_default_end ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end se0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end wd1" } } */
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-3.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-3.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-3.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-3.c	Thu Jan  1 00:00:00 1970
***************
*** 1,353 ****
- /* Functional tests for the "target" attribute and pragma.  */
- 
- /* { dg-do assemble { target { ! lp64 } } } */
- /* { dg-require-effective-target target_attribute } */
- /* { dg-options "-save-temps -mdebug -m31 -march=z13 -mtune=z10 -mstack-size=4096 -mstack-guard=0 -mbranch-cost=2 -mwarn-framesize=0 -mhard-dfp -mno-backchain -mhard-float -mvx -mhtm -mpacked-stack -mno-small-exec -mzvector -mno-mvcle -mzarch -mwarn-dynamicstack" } */
- 
- /**
-  **
-  ** Start
-  **
-  **/
- 
- void fn_default_start (void) { }
- /* { dg-final { scan-assembler "fn:fn_default_start ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start se0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start wd1" } } */
- 
- /**
-  **
-  ** Attribute
-  **
-  **/
- 
- __attribute__ ((target ("tune=z13")))
- void fn_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 wd1" } } */
- 
- void fn_att_1_default (void) { }
- 
- __attribute__ ((target ("tune=z10")))
- void fn_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 wd1" } } */
- 
- void fn_att_0_default (void) { }
- 
- __attribute__ ((target ("tune=z10,tune=z13")))
- void fn_att_0_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_0_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 wd1" } } */
- 
- __attribute__ ((target ("tune=z13,tune=z10")))
- void fn_att_1_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_1_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 wd1" } } */
- 
- /**
-  **
-  ** Pragma
-  **
-  **/
- 
- #pragma GCC target ("tune=z13")
- void fn_pragma_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 wd1" } } */
- #pragma GCC reset_options
- 
- void fn_pragma_1_default (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default wd1" } } */
- 
- #pragma GCC target ("tune=z10")
- void fn_pragma_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 wd1" } } */
- #pragma GCC reset_options
- 
- void fn_pragma_0_default (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default wd1" } } */
- 
- #pragma GCC target ("tune=z10")
- #pragma GCC target ("tune=z13")
- void fn_pragma_0_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd1" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("tune=z13")
- #pragma GCC target ("tune=z10")
- void fn_pragma_1_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd1" } } */
- #pragma GCC reset_options
- 
- /**
-  **
-  ** Pragma and attribute
-  **
-  **/
- 
- #pragma GCC target ("tune=z13")
- __attribute__ ((target ("tune=z13")))
- void fn_pragma_1_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd1" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("tune=z13")
- __attribute__ ((target ("tune=z13")))
- void fn_pragma_0_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd1" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("tune=z13")
- __attribute__ ((target ("tune=z10")))
- void fn_pragma_1_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd1" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("tune=z13")
- __attribute__ ((target ("tune=z10")))
- void fn_pragma_0_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd1" } } */
- #pragma GCC reset_options
- 
- /**
-  **
-  ** End
-  **
-  **/
- 
- void fn_default_end (void) { }
- /* { dg-final { scan-assembler "fn:fn_default_end ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end se0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end wd1" } } */
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-30.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-30.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-30.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-30.c	Thu Jan  1 00:00:00 1970
***************
*** 1,177 ****
- /* Functional tests for the "target" attribute and pragma.  */
- 
- /* { dg-do assemble { target { ! lp64 } } } */
- /* { dg-require-effective-target target_attribute } */
- /* { dg-options "-save-temps -mdebug -m31 -march=z10 -mtune=z13 -mstack-size=2048 -mstack-guard=16 -mbranch-cost=1 -mwarn-framesize=512 -mno-hard-dfp -mbackchain -msoft-float -mno-vx -mno-htm -mno-packed-stack -msmall-exec -mno-zvector -mmvcle -mesa -mno-warn-dynamicstack" } */
- 
- /**
-  **
-  ** Start
-  **
-  **/
- 
- void fn_default_start (void) { }
- /* { dg-final { scan-assembler "fn:fn_default_start ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start se1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start wd0" } } */
- 
- /**
-  **
-  ** Pragma
-  **
-  **/
- 
- #pragma GCC target ("no-zvector")
- void fn_pragma_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 wd0" } } */
- #pragma GCC reset_options
- 
- void fn_pragma_0_default (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default wd0" } } */
- 
- #pragma GCC target ("zvector")
- void fn_pragma_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 wd0" } } */
- #pragma GCC reset_options
- 
- void fn_pragma_1_default (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default wd0" } } */
- 
- #pragma GCC target ("zvector")
- #pragma GCC target ("no-zvector")
- void fn_pragma_1_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd0" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("no-zvector")
- #pragma GCC target ("zvector")
- void fn_pragma_0_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd0" } } */
- #pragma GCC reset_options
- 
- /**
-  **
-  ** End
-  **
-  **/
- 
- void fn_default_end (void) { }
- /* { dg-final { scan-assembler "fn:fn_default_end ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end se1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end wd0" } } */
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-31.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-31.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-31.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-31.c	Thu Jan  1 00:00:00 1970
***************
*** 1,353 ****
- /* Functional tests for the "target" attribute and pragma.  */
- 
- /* { dg-do assemble { target { ! lp64 } } } */
- /* { dg-require-effective-target target_attribute } */
- /* { dg-options "-save-temps -mdebug -m31 -march=z13 -mtune=z10 -mstack-size=4096 -mstack-guard=0 -mbranch-cost=2 -mwarn-framesize=0 -mhard-dfp -mno-backchain -mhard-float -mvx -mhtm -mpacked-stack -mno-small-exec -mzvector -mno-mvcle -mzarch -mwarn-dynamicstack" } */
- 
- /**
-  **
-  ** Start
-  **
-  **/
- 
- void fn_default_start (void) { }
- /* { dg-final { scan-assembler "fn:fn_default_start ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start se0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start wd1" } } */
- 
- /**
-  **
-  ** Attribute
-  **
-  **/
- 
- __attribute__ ((target ("warn-dynamicstack")))
- void fn_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_1 wd1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 mv0" } } */
- 
- void fn_att_1_default (void) { }
- 
- __attribute__ ((target ("no-warn-dynamicstack")))
- void fn_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_0 wd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 mv0" } } */
- 
- void fn_att_0_default (void) { }
- 
- __attribute__ ((target ("no-warn-dynamicstack,warn-dynamicstack")))
- void fn_att_0_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_0_1 wd1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 mv0" } } */
- 
- __attribute__ ((target ("warn-dynamicstack,no-warn-dynamicstack")))
- void fn_att_1_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_1_0 wd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 mv0" } } */
- 
- /**
-  **
-  ** Pragma
-  **
-  **/
- 
- #pragma GCC target ("warn-dynamicstack")
- void fn_pragma_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1 wd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 mv0" } } */
- #pragma GCC reset_options
- 
- void fn_pragma_1_default (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default wd1" } } */
- 
- #pragma GCC target ("no-warn-dynamicstack")
- void fn_pragma_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0 wd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 mv0" } } */
- #pragma GCC reset_options
- 
- void fn_pragma_0_default (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default wd1" } } */
- 
- #pragma GCC target ("no-warn-dynamicstack")
- #pragma GCC target ("warn-dynamicstack")
- void fn_pragma_0_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv0" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("warn-dynamicstack")
- #pragma GCC target ("no-warn-dynamicstack")
- void fn_pragma_1_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv0" } } */
- #pragma GCC reset_options
- 
- /**
-  **
-  ** Pragma and attribute
-  **
-  **/
- 
- #pragma GCC target ("warn-dynamicstack")
- __attribute__ ((target ("warn-dynamicstack")))
- void fn_pragma_1_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv0" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("warn-dynamicstack")
- __attribute__ ((target ("warn-dynamicstack")))
- void fn_pragma_0_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv0" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("warn-dynamicstack")
- __attribute__ ((target ("no-warn-dynamicstack")))
- void fn_pragma_1_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv0" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("warn-dynamicstack")
- __attribute__ ((target ("no-warn-dynamicstack")))
- void fn_pragma_0_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv0" } } */
- #pragma GCC reset_options
- 
- /**
-  **
-  ** End
-  **
-  **/
- 
- void fn_default_end (void) { }
- /* { dg-final { scan-assembler "fn:fn_default_end ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end se0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end wd1" } } */
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-32.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-32.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-32.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-32.c	Thu Jan  1 00:00:00 1970
***************
*** 1,353 ****
- /* Functional tests for the "target" attribute and pragma.  */
- 
- /* { dg-do assemble { target { ! lp64 } } } */
- /* { dg-require-effective-target target_attribute } */
- /* { dg-options "-save-temps -mdebug -m31 -march=z10 -mtune=z13 -mstack-size=2048 -mstack-guard=16 -mbranch-cost=1 -mwarn-framesize=512 -mno-hard-dfp -mbackchain -msoft-float -mno-vx -mno-htm -mno-packed-stack -msmall-exec -mno-zvector -mmvcle -mesa -mno-warn-dynamicstack" } */
- 
- /**
-  **
-  ** Start
-  **
-  **/
- 
- void fn_default_start (void) { }
- /* { dg-final { scan-assembler "fn:fn_default_start ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start se1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start wd0" } } */
- 
- /**
-  **
-  ** Attribute
-  **
-  **/
- 
- __attribute__ ((target ("no-warn-dynamicstack")))
- void fn_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_0 wd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 mv1" } } */
- 
- void fn_att_0_default (void) { }
- 
- __attribute__ ((target ("warn-dynamicstack")))
- void fn_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_1 wd1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 mv1" } } */
- 
- void fn_att_1_default (void) { }
- 
- __attribute__ ((target ("warn-dynamicstack,no-warn-dynamicstack")))
- void fn_att_1_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_1_0 wd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 mv1" } } */
- 
- __attribute__ ((target ("no-warn-dynamicstack,warn-dynamicstack")))
- void fn_att_0_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_0_1 wd1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 mv1" } } */
- 
- /**
-  **
-  ** Pragma
-  **
-  **/
- 
- #pragma GCC target ("no-warn-dynamicstack")
- void fn_pragma_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0 wd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 mv1" } } */
- #pragma GCC reset_options
- 
- void fn_pragma_0_default (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default wd0" } } */
- 
- #pragma GCC target ("warn-dynamicstack")
- void fn_pragma_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1 wd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 mv1" } } */
- #pragma GCC reset_options
- 
- void fn_pragma_1_default (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default wd0" } } */
- 
- #pragma GCC target ("warn-dynamicstack")
- #pragma GCC target ("no-warn-dynamicstack")
- void fn_pragma_1_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv1" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("no-warn-dynamicstack")
- #pragma GCC target ("warn-dynamicstack")
- void fn_pragma_0_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv1" } } */
- #pragma GCC reset_options
- 
- /**
-  **
-  ** Pragma and attribute
-  **
-  **/
- 
- #pragma GCC target ("no-warn-dynamicstack")
- __attribute__ ((target ("no-warn-dynamicstack")))
- void fn_pragma_0_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv1" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("no-warn-dynamicstack")
- __attribute__ ((target ("no-warn-dynamicstack")))
- void fn_pragma_1_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv1" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("no-warn-dynamicstack")
- __attribute__ ((target ("warn-dynamicstack")))
- void fn_pragma_0_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv1" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("no-warn-dynamicstack")
- __attribute__ ((target ("warn-dynamicstack")))
- void fn_pragma_1_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv1" } } */
- #pragma GCC reset_options
- 
- /**
-  **
-  ** End
-  **
-  **/
- 
- void fn_default_end (void) { }
- /* { dg-final { scan-assembler "fn:fn_default_end ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end se1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end wd0" } } */
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-4.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-4.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-4.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-4.c	Thu Jan  1 00:00:00 1970
***************
*** 1,353 ****
- /* Functional tests for the "target" attribute and pragma.  */
- 
- /* { dg-do assemble { target { ! lp64 } } } */
- /* { dg-require-effective-target target_attribute } */
- /* { dg-options "-save-temps -mdebug -m31 -march=z10 -mtune=z13 -mstack-size=2048 -mstack-guard=16 -mbranch-cost=1 -mwarn-framesize=512 -mno-hard-dfp -mbackchain -msoft-float -mno-vx -mno-htm -mno-packed-stack -msmall-exec -mno-zvector -mmvcle -mesa -mno-warn-dynamicstack" } */
- 
- /**
-  **
-  ** Start
-  **
-  **/
- 
- void fn_default_start (void) { }
- /* { dg-final { scan-assembler "fn:fn_default_start ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start se1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start wd0" } } */
- 
- /**
-  **
-  ** Attribute
-  **
-  **/
- 
- __attribute__ ((target ("tune=z10")))
- void fn_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 wd0" } } */
- 
- void fn_att_0_default (void) { }
- 
- __attribute__ ((target ("tune=z13")))
- void fn_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 wd0" } } */
- 
- void fn_att_1_default (void) { }
- 
- __attribute__ ((target ("tune=z13,tune=z10")))
- void fn_att_1_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_1_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 wd0" } } */
- 
- __attribute__ ((target ("tune=z10,tune=z13")))
- void fn_att_0_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_0_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 wd0" } } */
- 
- /**
-  **
-  ** Pragma
-  **
-  **/
- 
- #pragma GCC target ("tune=z10")
- void fn_pragma_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 wd0" } } */
- #pragma GCC reset_options
- 
- void fn_pragma_0_default (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default wd0" } } */
- 
- #pragma GCC target ("tune=z13")
- void fn_pragma_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 wd0" } } */
- #pragma GCC reset_options
- 
- void fn_pragma_1_default (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default wd0" } } */
- 
- #pragma GCC target ("tune=z13")
- #pragma GCC target ("tune=z10")
- void fn_pragma_1_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd0" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("tune=z10")
- #pragma GCC target ("tune=z13")
- void fn_pragma_0_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd0" } } */
- #pragma GCC reset_options
- 
- /**
-  **
-  ** Pragma and attribute
-  **
-  **/
- 
- #pragma GCC target ("tune=z10")
- __attribute__ ((target ("tune=z10")))
- void fn_pragma_0_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd0" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("tune=z10")
- __attribute__ ((target ("tune=z10")))
- void fn_pragma_1_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd0" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("tune=z10")
- __attribute__ ((target ("tune=z13")))
- void fn_pragma_0_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd0" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("tune=z10")
- __attribute__ ((target ("tune=z13")))
- void fn_pragma_1_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd0" } } */
- #pragma GCC reset_options
- 
- /**
-  **
-  ** End
-  **
-  **/
- 
- void fn_default_end (void) { }
- /* { dg-final { scan-assembler "fn:fn_default_end ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end se1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end wd0" } } */
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-5.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-5.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-5.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-5.c	Thu Jan  1 00:00:00 1970
***************
*** 1,353 ****
- /* Functional tests for the "target" attribute and pragma.  */
- 
- /* { dg-do assemble { target { ! lp64 } } } */
- /* { dg-require-effective-target target_attribute } */
- /* { dg-options "-save-temps -mdebug -m31 -march=z13 -mtune=z10 -mstack-size=4096 -mstack-guard=0 -mbranch-cost=2 -mwarn-framesize=0 -mhard-dfp -mno-backchain -mhard-float -mvx -mhtm -mpacked-stack -mno-small-exec -mzvector -mno-mvcle -mzarch -mwarn-dynamicstack" } */
- 
- /**
-  **
-  ** Start
-  **
-  **/
- 
- void fn_default_start (void) { }
- /* { dg-final { scan-assembler "fn:fn_default_start ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start se0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start wd1" } } */
- 
- /**
-  **
-  ** Attribute
-  **
-  **/
- 
- __attribute__ ((target ("stack-size=4096")))
- void fn_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 wd1" } } */
- 
- void fn_att_1_default (void) { }
- 
- __attribute__ ((target ("stack-size=2048")))
- void fn_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 wd1" } } */
- 
- void fn_att_0_default (void) { }
- 
- __attribute__ ((target ("stack-size=2048,stack-size=4096")))
- void fn_att_0_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 wd1" } } */
- 
- __attribute__ ((target ("stack-size=4096,stack-size=2048")))
- void fn_att_1_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 wd1" } } */
- 
- /**
-  **
-  ** Pragma
-  **
-  **/
- 
- #pragma GCC target ("stack-size=4096")
- void fn_pragma_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 wd1" } } */
- #pragma GCC reset_options
- 
- void fn_pragma_1_default (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default wd1" } } */
- 
- #pragma GCC target ("stack-size=2048")
- void fn_pragma_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 wd1" } } */
- #pragma GCC reset_options
- 
- void fn_pragma_0_default (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default wd1" } } */
- 
- #pragma GCC target ("stack-size=2048")
- #pragma GCC target ("stack-size=4096")
- void fn_pragma_0_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd1" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("stack-size=4096")
- #pragma GCC target ("stack-size=2048")
- void fn_pragma_1_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd1" } } */
- #pragma GCC reset_options
- 
- /**
-  **
-  ** Pragma and attribute
-  **
-  **/
- 
- #pragma GCC target ("stack-size=4096")
- __attribute__ ((target ("stack-size=4096")))
- void fn_pragma_1_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd1" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("stack-size=4096")
- __attribute__ ((target ("stack-size=4096")))
- void fn_pragma_0_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd1" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("stack-size=4096")
- __attribute__ ((target ("stack-size=2048")))
- void fn_pragma_1_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd1" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("stack-size=4096")
- __attribute__ ((target ("stack-size=2048")))
- void fn_pragma_0_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd1" } } */
- #pragma GCC reset_options
- 
- /**
-  **
-  ** End
-  **
-  **/
- 
- void fn_default_end (void) { }
- /* { dg-final { scan-assembler "fn:fn_default_end ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end se0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end wd1" } } */
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-6.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-6.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-6.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-6.c	Thu Jan  1 00:00:00 1970
***************
*** 1,353 ****
- /* Functional tests for the "target" attribute and pragma.  */
- 
- /* { dg-do assemble { target { ! lp64 } } } */
- /* { dg-require-effective-target target_attribute } */
- /* { dg-options "-save-temps -mdebug -m31 -march=z10 -mtune=z13 -mstack-size=2048 -mstack-guard=16 -mbranch-cost=1 -mwarn-framesize=512 -mno-hard-dfp -mbackchain -msoft-float -mno-vx -mno-htm -mno-packed-stack -msmall-exec -mno-zvector -mmvcle -mesa -mno-warn-dynamicstack" } */
- 
- /**
-  **
-  ** Start
-  **
-  **/
- 
- void fn_default_start (void) { }
- /* { dg-final { scan-assembler "fn:fn_default_start ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start se1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start wd0" } } */
- 
- /**
-  **
-  ** Attribute
-  **
-  **/
- 
- __attribute__ ((target ("stack-size=2048")))
- void fn_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 wd0" } } */
- 
- void fn_att_0_default (void) { }
- 
- __attribute__ ((target ("stack-size=4096")))
- void fn_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 wd0" } } */
- 
- void fn_att_1_default (void) { }
- 
- __attribute__ ((target ("stack-size=4096,stack-size=2048")))
- void fn_att_1_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 wd0" } } */
- 
- __attribute__ ((target ("stack-size=2048,stack-size=4096")))
- void fn_att_0_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 wd0" } } */
- 
- /**
-  **
-  ** Pragma
-  **
-  **/
- 
- #pragma GCC target ("stack-size=2048")
- void fn_pragma_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 wd0" } } */
- #pragma GCC reset_options
- 
- void fn_pragma_0_default (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default wd0" } } */
- 
- #pragma GCC target ("stack-size=4096")
- void fn_pragma_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 wd0" } } */
- #pragma GCC reset_options
- 
- void fn_pragma_1_default (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default wd0" } } */
- 
- #pragma GCC target ("stack-size=4096")
- #pragma GCC target ("stack-size=2048")
- void fn_pragma_1_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd0" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("stack-size=2048")
- #pragma GCC target ("stack-size=4096")
- void fn_pragma_0_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd0" } } */
- #pragma GCC reset_options
- 
- /**
-  **
-  ** Pragma and attribute
-  **
-  **/
- 
- #pragma GCC target ("stack-size=2048")
- __attribute__ ((target ("stack-size=2048")))
- void fn_pragma_0_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd0" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("stack-size=2048")
- __attribute__ ((target ("stack-size=2048")))
- void fn_pragma_1_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd0" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("stack-size=2048")
- __attribute__ ((target ("stack-size=4096")))
- void fn_pragma_0_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd0" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("stack-size=2048")
- __attribute__ ((target ("stack-size=4096")))
- void fn_pragma_1_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd0" } } */
- #pragma GCC reset_options
- 
- /**
-  **
-  ** End
-  **
-  **/
- 
- void fn_default_end (void) { }
- /* { dg-final { scan-assembler "fn:fn_default_end ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end se1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end wd0" } } */
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-7.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-7.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-7.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-7.c	Thu Jan  1 00:00:00 1970
***************
*** 1,353 ****
- /* Functional tests for the "target" attribute and pragma.  */
- 
- /* { dg-do assemble { target { ! lp64 } } } */
- /* { dg-require-effective-target target_attribute } */
- /* { dg-options "-save-temps -mdebug -m31 -march=z13 -mtune=z10 -mstack-size=4096 -mstack-guard=0 -mbranch-cost=2 -mwarn-framesize=0 -mhard-dfp -mno-backchain -mhard-float -mvx -mhtm -mpacked-stack -mno-small-exec -mzvector -mno-mvcle -mzarch -mwarn-dynamicstack" } */
- 
- /**
-  **
-  ** Start
-  **
-  **/
- 
- void fn_default_start (void) { }
- /* { dg-final { scan-assembler "fn:fn_default_start ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start se0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start wd1" } } */
- 
- /**
-  **
-  ** Attribute
-  **
-  **/
- 
- __attribute__ ((target ("stack-guard=16")))
- void fn_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 wd1" } } */
- 
- void fn_att_1_default (void) { }
- 
- __attribute__ ((target ("stack-guard=0")))
- void fn_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 wd1" } } */
- 
- void fn_att_0_default (void) { }
- 
- __attribute__ ((target ("stack-guard=0,stack-guard=16")))
- void fn_att_0_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_0_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 wd1" } } */
- 
- __attribute__ ((target ("stack-guard=16,stack-guard=0")))
- void fn_att_1_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_1_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 wd1" } } */
- 
- /**
-  **
-  ** Pragma
-  **
-  **/
- 
- #pragma GCC target ("stack-guard=16")
- void fn_pragma_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 wd1" } } */
- #pragma GCC reset_options
- 
- void fn_pragma_1_default (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default wd1" } } */
- 
- #pragma GCC target ("stack-guard=0")
- void fn_pragma_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 wd1" } } */
- #pragma GCC reset_options
- 
- void fn_pragma_0_default (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default wd1" } } */
- 
- #pragma GCC target ("stack-guard=0")
- #pragma GCC target ("stack-guard=16")
- void fn_pragma_0_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd1" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("stack-guard=16")
- #pragma GCC target ("stack-guard=0")
- void fn_pragma_1_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd1" } } */
- #pragma GCC reset_options
- 
- /**
-  **
-  ** Pragma and attribute
-  **
-  **/
- 
- #pragma GCC target ("stack-guard=16")
- __attribute__ ((target ("stack-guard=16")))
- void fn_pragma_1_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd1" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("stack-guard=16")
- __attribute__ ((target ("stack-guard=16")))
- void fn_pragma_0_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd1" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("stack-guard=16")
- __attribute__ ((target ("stack-guard=0")))
- void fn_pragma_1_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd1" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("stack-guard=16")
- __attribute__ ((target ("stack-guard=0")))
- void fn_pragma_0_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd1" } } */
- #pragma GCC reset_options
- 
- /**
-  **
-  ** End
-  **
-  **/
- 
- void fn_default_end (void) { }
- /* { dg-final { scan-assembler "fn:fn_default_end ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end se0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end wd1" } } */
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-8.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-8.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-8.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-8.c	Thu Jan  1 00:00:00 1970
***************
*** 1,353 ****
- /* Functional tests for the "target" attribute and pragma.  */
- 
- /* { dg-do assemble { target { ! lp64 } } } */
- /* { dg-require-effective-target target_attribute } */
- /* { dg-options "-save-temps -mdebug -m31 -march=z10 -mtune=z13 -mstack-size=2048 -mstack-guard=16 -mbranch-cost=1 -mwarn-framesize=512 -mno-hard-dfp -mbackchain -msoft-float -mno-vx -mno-htm -mno-packed-stack -msmall-exec -mno-zvector -mmvcle -mesa -mno-warn-dynamicstack" } */
- 
- /**
-  **
-  ** Start
-  **
-  **/
- 
- void fn_default_start (void) { }
- /* { dg-final { scan-assembler "fn:fn_default_start ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start se1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start wd0" } } */
- 
- /**
-  **
-  ** Attribute
-  **
-  **/
- 
- __attribute__ ((target ("stack-guard=0")))
- void fn_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 wd0" } } */
- 
- void fn_att_0_default (void) { }
- 
- __attribute__ ((target ("stack-guard=16")))
- void fn_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 wd0" } } */
- 
- void fn_att_1_default (void) { }
- 
- __attribute__ ((target ("stack-guard=16,stack-guard=0")))
- void fn_att_1_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_1_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 wd0" } } */
- 
- __attribute__ ((target ("stack-guard=0,stack-guard=16")))
- void fn_att_0_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_0_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 wd0" } } */
- 
- /**
-  **
-  ** Pragma
-  **
-  **/
- 
- #pragma GCC target ("stack-guard=0")
- void fn_pragma_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 wd0" } } */
- #pragma GCC reset_options
- 
- void fn_pragma_0_default (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default wd0" } } */
- 
- #pragma GCC target ("stack-guard=16")
- void fn_pragma_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 wd0" } } */
- #pragma GCC reset_options
- 
- void fn_pragma_1_default (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default wd0" } } */
- 
- #pragma GCC target ("stack-guard=16")
- #pragma GCC target ("stack-guard=0")
- void fn_pragma_1_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd0" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("stack-guard=0")
- #pragma GCC target ("stack-guard=16")
- void fn_pragma_0_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd0" } } */
- #pragma GCC reset_options
- 
- /**
-  **
-  ** Pragma and attribute
-  **
-  **/
- 
- #pragma GCC target ("stack-guard=0")
- __attribute__ ((target ("stack-guard=0")))
- void fn_pragma_0_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd0" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("stack-guard=0")
- __attribute__ ((target ("stack-guard=0")))
- void fn_pragma_1_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd0" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("stack-guard=0")
- __attribute__ ((target ("stack-guard=16")))
- void fn_pragma_0_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd0" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("stack-guard=0")
- __attribute__ ((target ("stack-guard=16")))
- void fn_pragma_1_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd0" } } */
- #pragma GCC reset_options
- 
- /**
-  **
-  ** End
-  **
-  **/
- 
- void fn_default_end (void) { }
- /* { dg-final { scan-assembler "fn:fn_default_end ar4" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end tu7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ss2048" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end sg16" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end wf512" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end hd0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ba1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end hf0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end vx0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ht0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ps0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end se1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end zv0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end mv1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end wd0" } } */
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-9.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-9.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-9.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-9.c	Thu Jan  1 00:00:00 1970
***************
*** 1,353 ****
- /* Functional tests for the "target" attribute and pragma.  */
- 
- /* { dg-do assemble { target { ! lp64 } } } */
- /* { dg-require-effective-target target_attribute } */
- /* { dg-options "-save-temps -mdebug -m31 -march=z13 -mtune=z10 -mstack-size=4096 -mstack-guard=0 -mbranch-cost=2 -mwarn-framesize=0 -mhard-dfp -mno-backchain -mhard-float -mvx -mhtm -mpacked-stack -mno-small-exec -mzvector -mno-mvcle -mzarch -mwarn-dynamicstack" } */
- 
- /**
-  **
-  ** Start
-  **
-  **/
- 
- void fn_default_start (void) { }
- /* { dg-final { scan-assembler "fn:fn_default_start ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start se0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_start wd1" } } */
- 
- /**
-  **
-  ** Attribute
-  **
-  **/
- 
- __attribute__ ((target ("branch-cost=2")))
- void fn_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1 wd1" } } */
- 
- void fn_att_1_default (void) { }
- 
- __attribute__ ((target ("branch-cost=1")))
- void fn_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0 wd1" } } */
- 
- void fn_att_0_default (void) { }
- 
- __attribute__ ((target ("branch-cost=1,branch-cost=2")))
- void fn_att_0_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_0_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_0_1 wd1" } } */
- 
- __attribute__ ((target ("branch-cost=2,branch-cost=1")))
- void fn_att_1_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_att_1_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_att_1_0 wd1" } } */
- 
- /**
-  **
-  ** Pragma
-  **
-  **/
- 
- #pragma GCC target ("branch-cost=2")
- void fn_pragma_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1 wd1" } } */
- #pragma GCC reset_options
- 
- void fn_pragma_1_default (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_default wd1" } } */
- 
- #pragma GCC target ("branch-cost=1")
- void fn_pragma_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0 wd1" } } */
- #pragma GCC reset_options
- 
- void fn_pragma_0_default (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_default wd1" } } */
- 
- #pragma GCC target ("branch-cost=1")
- #pragma GCC target ("branch-cost=2")
- void fn_pragma_0_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd1" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("branch-cost=2")
- #pragma GCC target ("branch-cost=1")
- void fn_pragma_1_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd1" } } */
- #pragma GCC reset_options
- 
- /**
-  **
-  ** Pragma and attribute
-  **
-  **/
- 
- #pragma GCC target ("branch-cost=2")
- __attribute__ ((target ("branch-cost=2")))
- void fn_pragma_1_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd1" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("branch-cost=2")
- __attribute__ ((target ("branch-cost=2")))
- void fn_pragma_0_att_1 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd1" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("branch-cost=2")
- __attribute__ ((target ("branch-cost=1")))
- void fn_pragma_1_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd1" } } */
- #pragma GCC reset_options
- 
- #pragma GCC target ("branch-cost=2")
- __attribute__ ((target ("branch-cost=1")))
- void fn_pragma_0_att_0 (void) { }
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd1" } } */
- #pragma GCC reset_options
- 
- /**
-  **
-  ** End
-  **
-  **/
- 
- void fn_default_end (void) { }
- /* { dg-final { scan-assembler "fn:fn_default_end ar7" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end tu4" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ss4096" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end sg0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end bc2" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end wf0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end hd1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ba0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end hf1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end vx1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ht1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end ps1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end se0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end zv1" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end mv0" } } */
- /* { dg-final { scan-assembler "fn:fn_default_end wd1" } } */
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/tls.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/tls.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/tls.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/tls.c	Sun Jul 12 22:32:16 2026
***************
*** 6,10 ****
  /* foo must use the initial-exec model, foostatic must use the local-exec
     model.  */
  
! /* { dg-final { scan-assembler-times {\tear} 4 { target lp64 } } } */
! /* { dg-final { scan-assembler-times {\tear} 2 { target { ! lp64 } } } } */
--- 6,9 ----
  /* foo must use the initial-exec model, foostatic must use the local-exec
     model.  */
  
! /* { dg-final { scan-assembler-times {\tear} 4 } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/uaddc-1.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/uaddc-1.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/uaddc-1.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/uaddc-1.c	Sun Jul 12 22:32:16 2026
***************
*** 1,11 ****
  /* { dg-do run { target { s390_useable_hw } } } */
  /* { dg-options "-O2 -march=z13 -mzarch -save-temps -fdump-tree-optimized" }  */
! /* { dg-final { scan-tree-dump-times "\\.UADDC \\(" 4 "optimized" { target lp64 } } } */
! /* { dg-final { scan-tree-dump-times "\\.UADDC \\(" 2 "optimized" { target { ! lp64 } } } } */
  /* { dg-final { scan-assembler-times "\\talcr\\t" 1 } } */
  /* { dg-final { scan-assembler-times "\\talc\\t" 1 } } */
! /* { dg-final { scan-assembler-times "\\talcgr\\t" 1 { target lp64 } } } */
! /* { dg-final { scan-assembler-times "\\talcg\\t" 1 { target lp64 } } } */
  
  #include <assert.h>
  
--- 1,10 ----
  /* { dg-do run { target { s390_useable_hw } } } */
  /* { dg-options "-O2 -march=z13 -mzarch -save-temps -fdump-tree-optimized" }  */
! /* { dg-final { scan-tree-dump-times "\\.UADDC \\(" 4 "optimized" } } */
  /* { dg-final { scan-assembler-times "\\talcr\\t" 1 } } */
  /* { dg-final { scan-assembler-times "\\talc\\t" 1 } } */
! /* { dg-final { scan-assembler-times "\\talcgr\\t" 1 } } */
! /* { dg-final { scan-assembler-times "\\talcg\\t" 1 } } */
  
  #include <assert.h>
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/uaddc-2.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/uaddc-2.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/uaddc-2.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/uaddc-2.c	Sun Jul 12 22:32:16 2026
***************
*** 1,9 ****
  /* { dg-do compile } */
  /* { dg-options "-O2 -march=z13 -mzarch -save-temps -fdump-tree-optimized" }  */
  /* { dg-final { scan-tree-dump-times "\\.UADDC \\(" 6 "optimized" } } */
! /* { dg-final { scan-assembler-times "\\talcr\\t" 6 { target { ! lp64 } } } } */
! /* { dg-final { scan-assembler-times "\\talcr\\t" 3 { target lp64 } } } */
! /* { dg-final { scan-assembler-times "\\talcgr\\t" 3 { target lp64 } } } */
  
  #define TEST(T, V, OP) \
    unsigned T \
--- 1,8 ----
  /* { dg-do compile } */
  /* { dg-options "-O2 -march=z13 -mzarch -save-temps -fdump-tree-optimized" }  */
  /* { dg-final { scan-tree-dump-times "\\.UADDC \\(" 6 "optimized" } } */
! /* { dg-final { scan-assembler-times "\\talcr\\t" 3 } } */
! /* { dg-final { scan-assembler-times "\\talcgr\\t" 3 } } */
  
  #define TEST(T, V, OP) \
    unsigned T \
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/uaddc-3.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/uaddc-3.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/uaddc-3.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/uaddc-3.c	Sun Jul 12 22:32:16 2026
***************
*** 2,11 ****
  /* { dg-options "-O2 -march=z13 -mzarch -save-temps -fdump-tree-optimized" }  */
  /* { dg-final { scan-tree-dump-times "\\.UADDC \\(\[^,\]+, \[^,\]+, 0\\)" 1 "optimized" } } */
  /* { dg-final { scan-tree-dump-times "\\.UADDC \\(\[^,\]+, \[^,\]+, _.+\\)" 1 "optimized" } } */
! /* { dg-final { scan-assembler-times "alg\t" 1 { target lp64 } } } */
! /* { dg-final { scan-assembler-times "ag\t" 2 { target lp64 } } } */
! /* { dg-final { scan-assembler-times "al\t" 1 { target { ! lp64 } } } } */
! /* { dg-final { scan-assembler-times "a\t" 2 { target { ! lp64 } } } } */
  
  static unsigned long
  uaddc (unsigned long x, unsigned long y, unsigned long carry_in, unsigned long *carry_out)
--- 2,9 ----
  /* { dg-options "-O2 -march=z13 -mzarch -save-temps -fdump-tree-optimized" }  */
  /* { dg-final { scan-tree-dump-times "\\.UADDC \\(\[^,\]+, \[^,\]+, 0\\)" 1 "optimized" } } */
  /* { dg-final { scan-tree-dump-times "\\.UADDC \\(\[^,\]+, \[^,\]+, _.+\\)" 1 "optimized" } } */
! /* { dg-final { scan-assembler-times "alg\t" 1 } } */
! /* { dg-final { scan-assembler-times "ag\t" 2 } } */
  
  static unsigned long
  uaddc (unsigned long x, unsigned long y, unsigned long carry_in, unsigned long *carry_out)
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/usubc-1.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/usubc-1.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/usubc-1.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/usubc-1.c	Sun Jul 12 22:32:16 2026
***************
*** 1,11 ****
  /* { dg-do run { target { s390_useable_hw } } } */
  /* { dg-options "-O2 -march=z13 -mzarch -save-temps -fdump-tree-optimized" }  */
! /* { dg-final { scan-tree-dump-times "\\.USUBC \\(" 4 "optimized" { target lp64 } } } */
! /* { dg-final { scan-tree-dump-times "\\.USUBC \\(" 2 "optimized" { target { ! lp64 } } } } */
  /* { dg-final { scan-assembler-times "\\tslbr\\t" 1 } } */
  /* { dg-final { scan-assembler-times "\\tslb\\t" 1 } } */
! /* { dg-final { scan-assembler-times "\\tslbgr\\t" 1 { target lp64 } } } */
! /* { dg-final { scan-assembler-times "\\tslbg\\t" 1 { target lp64 } } } */
  
  #include <assert.h>
  
--- 1,10 ----
  /* { dg-do run { target { s390_useable_hw } } } */
  /* { dg-options "-O2 -march=z13 -mzarch -save-temps -fdump-tree-optimized" }  */
! /* { dg-final { scan-tree-dump-times "\\.USUBC \\(" 4 "optimized" } } */
  /* { dg-final { scan-assembler-times "\\tslbr\\t" 1 } } */
  /* { dg-final { scan-assembler-times "\\tslb\\t" 1 } } */
! /* { dg-final { scan-assembler-times "\\tslbgr\\t" 1 } } */
! /* { dg-final { scan-assembler-times "\\tslbg\\t" 1 } } */
  
  #include <assert.h>
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/usubc-2.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/usubc-2.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/usubc-2.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/usubc-2.c	Sun Jul 12 22:32:16 2026
***************
*** 1,9 ****
  /* { dg-do compile } */
  /* { dg-options "-O2 -march=z13 -mzarch -save-temps -fdump-tree-optimized" }  */
  /* { dg-final { scan-tree-dump-times "\\.USUBC \\(" 6 "optimized" } } */
! /* { dg-final { scan-assembler-times "\\tslbr\\t" 6 { target { ! lp64 } } } } */
! /* { dg-final { scan-assembler-times "\\tslbr\\t" 3 { target lp64 } } } */
! /* { dg-final { scan-assembler-times "\\tslbgr\\t" 3 { target lp64 } } } */
  
  #define TEST(T, V, OP) \
    unsigned T \
--- 1,8 ----
  /* { dg-do compile } */
  /* { dg-options "-O2 -march=z13 -mzarch -save-temps -fdump-tree-optimized" }  */
  /* { dg-final { scan-tree-dump-times "\\.USUBC \\(" 6 "optimized" } } */
! /* { dg-final { scan-assembler-times "\\tslbr\\t" 3 } } */
! /* { dg-final { scan-assembler-times "\\tslbgr\\t" 3 } } */
  
  #define TEST(T, V, OP) \
    unsigned T \
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/usubc-3.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/usubc-3.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/usubc-3.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/usubc-3.c	Sun Jul 12 22:32:16 2026
***************
*** 2,13 ****
  /* { dg-options "-O2 -march=z13 -mzarch -save-temps -fdump-tree-optimized" }  */
  /* { dg-final { scan-tree-dump-times "\\.USUBC \\(\[^,\]+, \[^,\]+, 0\\)" 1 "optimized" } } */
  /* { dg-final { scan-tree-dump-times "\\.USUBC \\(\[^,\]+, \[^,\]+, _.+\\)" 1 "optimized" } } */
! /* { dg-final { scan-assembler-times "slg\t" 1 { target lp64 } } } */
! /* { dg-final { scan-assembler-times "alcgr\t" 1 { target lp64 } } } */
! /* { dg-final { scan-assembler-times "slbg\t" 1 { target lp64 } } } */
! /* { dg-final { scan-assembler-times "sl\t" 1 { target { ! lp64 } } } } */
! /* { dg-final { scan-assembler-times "alcr\t" 1 { target { ! lp64 } } } } */
! /* { dg-final { scan-assembler-times "slb\t" 1 { target { ! lp64 } } } } */
  
  static unsigned long
  usubc (unsigned long x, unsigned long y, unsigned long carry_in, unsigned long *carry_out)
--- 2,10 ----
  /* { dg-options "-O2 -march=z13 -mzarch -save-temps -fdump-tree-optimized" }  */
  /* { dg-final { scan-tree-dump-times "\\.USUBC \\(\[^,\]+, \[^,\]+, 0\\)" 1 "optimized" } } */
  /* { dg-final { scan-tree-dump-times "\\.USUBC \\(\[^,\]+, \[^,\]+, _.+\\)" 1 "optimized" } } */
! /* { dg-final { scan-assembler-times "slg\t" 1 } } */
! /* { dg-final { scan-assembler-times "alcgr\t" 1 } } */
! /* { dg-final { scan-assembler-times "slbg\t" 1 } } */
  
  static unsigned long
  usubc (unsigned long x, unsigned long y, unsigned long carry_in, unsigned long *carry_out)
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/vector/pattern-avg-1.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/vector/pattern-avg-1.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/vector/pattern-avg-1.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/vector/pattern-avg-1.c	Sun Jul 12 22:32:16 2026
*************** TEST(char,short,16)
*** 22,26 ****
  TEST(short,int,8)
  TEST(int,long,4)
  
! /* { dg-final { scan-tree-dump-times "\.AVG_CEIL" 6 "optimized" { target lp64 } } } */
! /* { dg-final { scan-tree-dump-times "\.AVG_CEIL" 4 "optimized" { target { ! lp64 } } } } */
--- 22,25 ----
  TEST(short,int,8)
  TEST(int,long,4)
  
! /* { dg-final { scan-tree-dump-times "\.AVG_CEIL" 6 "optimized" } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/vector/vec-abi-1.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/vector/vec-abi-1.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/vector/vec-abi-1.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/vector/vec-abi-1.c	Sun Jul 12 22:32:16 2026
***************
*** 1,11 ****
  /* Check calling convention in the vector ABI.  */
  
! /* { dg-do compile { target { s390*-*-* } } } */
! /* { dg-options "-O3 -mzarch -march=z13" } */
  
  /* Make sure the last argument is fetched from the argument overflow area.  */
! /* { dg-final { scan-assembler "vl\t%v\[0-9\]*,160\\(%r15\\)" { target lp64 } } } */
! /* { dg-final { scan-assembler "vl\t%v\[0-9\]*,96\\(%r15\\)" { target ilp32 } } } */
  /* { dg-final { scan-assembler "gnu_attribute 8, 2" } } */
  
  typedef double v2df __attribute__((vector_size(16)));
--- 1,10 ----
  /* Check calling convention in the vector ABI.  */
  
! /* { dg-do compile } */
! /* { dg-options "-O3 -march=z13" } */
  
  /* Make sure the last argument is fetched from the argument overflow area.  */
! /* { dg-final { scan-assembler "vl\t%v\[0-9\]*,160\\(%r15\\)" } } */
  /* { dg-final { scan-assembler "gnu_attribute 8, 2" } } */
  
  typedef double v2df __attribute__((vector_size(16)));
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/vector/vec-abi-3.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/vector/vec-abi-3.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/vector/vec-abi-3.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/vector/vec-abi-3.c	Sun Jul 12 22:32:16 2026
***************
*** 1,6 ****
  /* Check calling convention in the vector ABI regarding vector like structs.  */
  
! /* { dg-do compile { target { s390*-*-* } } } */
  /* { dg-options "-O3 -mzarch -march=z13" } */
  
  /* addA */
--- 1,6 ----
  /* Check calling convention in the vector ABI regarding vector like structs.  */
  
! /* { dg-do compile } */
  /* { dg-options "-O3 -mzarch -march=z13" } */
  
  /* addA */
***************
*** 24,33 ****
  
  /* addF */
  /* { dg-final { scan-assembler-times "vab\t%v24,%v\[0-9\]*,%v\[0-9\]*" 1 } } */
! /* { dg-final { scan-assembler-times "srlg\t%r\[0-9\]*,%r2,32" 1 { target lp64 } } } */
! /* { dg-final { scan-assembler-times "srlg\t%r\[0-9\]*,%r3,32" 1 { target lp64 } } } */
! /* { dg-final { scan-assembler-times "llgfr\t%.*,%r2" 1 { target { ! lp64 } } } } */
! /* { dg-final { scan-assembler-times "llgfr\t%.*,%r4" 1 { target { ! lp64 } } } } */
  
  
  typedef double v2df __attribute__((vector_size(16)));
--- 24,31 ----
  
  /* addF */
  /* { dg-final { scan-assembler-times "vab\t%v24,%v\[0-9\]*,%v\[0-9\]*" 1 } } */
! /* { dg-final { scan-assembler-times "srlg\t%r\[0-9\]*,%r2,32" 1 } } */
! /* { dg-final { scan-assembler-times "srlg\t%r\[0-9\]*,%r3,32" 1 } } */
  
  
  typedef double v2df __attribute__((vector_size(16)));
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/vector/vec-abi-4.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/vector/vec-abi-4.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/vector/vec-abi-4.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/vector/vec-abi-4.c	Sun Jul 12 22:32:16 2026
***************
*** 4,13 ****
  /* { dg-do compile { target { s390*-*-* } } } */
  /* { dg-options "-O3 -mzarch -march=z13" } */
  
! /* { dg-final { scan-assembler-times "lde\t%.*,160\\\(%r15\\\)" 1 { target lp64 } } } */
! /* { dg-final { scan-assembler-times "lde\t%.*,168\\\(%r15\\\)" 1 { target lp64 } } } */
! /* { dg-final { scan-assembler-times "lde\t%.*,96\\\(%r15\\\)" 1 { target { ! lp64 } } } } */
! /* { dg-final { scan-assembler-times "lde\t%.*,100\\\(%r15\\\)" 1 { target { ! lp64 } } } } */
  
  typedef char __attribute__((vector_size(4))) v4qi;
  
--- 4,11 ----
  /* { dg-do compile { target { s390*-*-* } } } */
  /* { dg-options "-O3 -mzarch -march=z13" } */
  
! /* { dg-final { scan-assembler-times "lde\t%.*,160\\\(%r15\\\)" 1 } } */
! /* { dg-final { scan-assembler-times "lde\t%.*,168\\\(%r15\\\)" 1 } } */
  
  typedef char __attribute__((vector_size(4))) v4qi;
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/vector/vec-abi-vararg-1.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/vector/vec-abi-vararg-1.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/vector/vec-abi-vararg-1.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/vector/vec-abi-vararg-1.c	Sun Jul 12 22:32:16 2026
***************
*** 1,20 ****
  /* Check calling convention with variable argument lists in the vector
     ABI.  */
  
! /* { dg-do run { target { s390*-*-* } } } */
  /* { dg-require-effective-target s390_vx } */
! /* { dg-options "-O3 -mzarch -march=z13 --save-temps" } */
  
  /* Make sure arguments are fetched from the argument overflow area.  */
! /* { dg-final { scan-assembler "vl\t%v\[0-9\]*,352\\(%r15\\)" { target lp64 } } } */
! /* { dg-final { scan-assembler "ld\t%v\[0-9\]*,368\\(%r15\\)" { target lp64 } } } */
! /* { dg-final { scan-assembler "vl\t%v\[0-9\]*,376\\(%r15\\)" { target lp64 } } } */
! /* { dg-final { scan-assembler "ld\t%v\[0-9\]*,392\\(%r15\\)" { target lp64 } } } */
! 
! /* { dg-final { scan-assembler "vl\t%v\[0-9\]*,208\\(%r15\\)" { target ilp32 } } } */
! /* { dg-final { scan-assembler "ld\t%v\[0-9\]*,224\\(%r15\\)" { target ilp32 } } } */
! /* { dg-final { scan-assembler "vl\t%v\[0-9\]*,232\\(%r15\\)" { target ilp32 } } } */
! /* { dg-final { scan-assembler "ld\t%v\[0-9\]*,248\\(%r15\\)" { target ilp32 } } } */
  
  
  #include <stdarg.h>
--- 1,15 ----
  /* Check calling convention with variable argument lists in the vector
     ABI.  */
  
! /* { dg-do run } */
  /* { dg-require-effective-target s390_vx } */
! /* { dg-options "-O3 -march=z13 --save-temps" } */
  
  /* Make sure arguments are fetched from the argument overflow area.  */
! /* { dg-final { scan-assembler "vl\t%v\[0-9\]*,352\\(%r15\\)" } } */
! /* { dg-final { scan-assembler "ld\t%v\[0-9\]*,368\\(%r15\\)" } } */
! /* { dg-final { scan-assembler "vl\t%v\[0-9\]*,376\\(%r15\\)" } } */
! /* { dg-final { scan-assembler "ld\t%v\[0-9\]*,392\\(%r15\\)" } } */
  
  
  #include <stdarg.h>
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/vector/vec-scalar-cmp-1.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/vector/vec-scalar-cmp-1.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/vector/vec-scalar-cmp-1.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/vector/vec-scalar-cmp-1.c	Sun Jul 12 22:32:16 2026
***************
*** 1,6 ****
  /* Check that we use the scalar variants of vector compares.  */
  
! /* { dg-do compile { target { s390*-*-* } } } */
  /* { dg-options "-O3 -mzarch -march=z13 -fno-asynchronous-unwind-tables" } */
  
  int
--- 1,6 ----
  /* Check that we use the scalar variants of vector compares.  */
  
! /* { dg-do compile } */
  /* { dg-options "-O3 -mzarch -march=z13 -fno-asynchronous-unwind-tables" } */
  
  int
*************** eq (double a, double b)
*** 12,19 ****
    return a == b;
  }
  
! /* { dg-final { scan-assembler "eq:\n\[^:\]*\twfcdb\t%v\[0-9\]*,%v\[0-9\]*\n\t\[^:\]+\tlochie\t%r2,1" { target { ! lp64 } } } } */
! /* { dg-final { scan-assembler "eq:\n\[^:\]*\twfcdb\t%v\[0-9\]*,%v\[0-9\]*\n\t\[^:\]+\tlocghie\t%r2,1" { target lp64 } } } */
  
  int
  ne (double a, double b)
--- 12,18 ----
    return a == b;
  }
  
! /* { dg-final { scan-assembler "eq:\n\[^:\]*\twfcdb\t%v\[0-9\]*,%v\[0-9\]*\n\t\[^:\]+\tlocghie\t%r2,1" } } */
  
  int
  ne (double a, double b)
*************** ne (double a, double b)
*** 24,31 ****
    return a != b;
  }
  
! /* { dg-final { scan-assembler "ne:\n\[^:\]*\twfcdb\t%v\[0-9\]*,%v\[0-9\]*\n\t\[^:\]+\tlochine\t%r2,1" { target { ! lp64 } } } } */
! /* { dg-final { scan-assembler "ne:\n\[^:\]*\twfcdb\t%v\[0-9\]*,%v\[0-9\]*\n\t\[^:\]+\tlocghine\t%r2,1" { target lp64 } } } */
  
  int
  gt (double a, double b)
--- 23,29 ----
    return a != b;
  }
  
! /* { dg-final { scan-assembler "ne:\n\[^:\]*\twfcdb\t%v\[0-9\]*,%v\[0-9\]*\n\t\[^:\]+\tlocghine\t%r2,1" } } */
  
  int
  gt (double a, double b)
*************** gt (double a, double b)
*** 36,43 ****
    return a > b;
  }
  
! /* { dg-final { scan-assembler "gt:\n\[^:\]*\twfkdb\t%v\[0-9\]*,%v\[0-9\]*\n\t\[^:\]+\tlochih\t%r2,1" { target { ! lp64 } } } } */
! /* { dg-final { scan-assembler "gt:\n\[^:\]*\twfkdb\t%v\[0-9\]*,%v\[0-9\]*\n\t\[^:\]+\tlocghih\t%r2,1" { target lp64 } } } */
  
  int
  ge (double a, double b)
--- 34,40 ----
    return a > b;
  }
  
! /* { dg-final { scan-assembler "gt:\n\[^:\]*\twfkdb\t%v\[0-9\]*,%v\[0-9\]*\n\t\[^:\]+\tlocghih\t%r2,1" } } */
  
  int
  ge (double a, double b)
*************** ge (double a, double b)
*** 48,55 ****
    return a >= b;
  }
  
! /* { dg-final { scan-assembler "ge:\n\[^:\]*\twfkdb\t%v\[0-9\]*,%v\[0-9\]*\n\t\[^:\]+\tlochihe\t%r2,1" { target { ! lp64 } } } } */
! /* { dg-final { scan-assembler "ge:\n\[^:\]*\twfkdb\t%v\[0-9\]*,%v\[0-9\]*\n\t\[^:\]+\tlocghihe\t%r2,1" { target lp64 } } } */
  
  int
  lt (double a, double b)
--- 45,51 ----
    return a >= b;
  }
  
! /* { dg-final { scan-assembler "ge:\n\[^:\]*\twfkdb\t%v\[0-9\]*,%v\[0-9\]*\n\t\[^:\]+\tlocghihe\t%r2,1" } } */
  
  int
  lt (double a, double b)
*************** lt (double a, double b)
*** 60,67 ****
    return a < b;
  }
  
! /* { dg-final { scan-assembler "lt:\n\[^:\]*\twfkdb\t%v\[0-9\]*,%v\[0-9\]*\n\t\[^:\]+\tlochil\t%r2,1" { target { ! lp64 } } } } */
! /* { dg-final { scan-assembler "lt:\n\[^:\]*\twfkdb\t%v\[0-9\]*,%v\[0-9\]*\n\t\[^:\]+\tlocghil\t%r2,1" { target lp64 } } } */
  
  int
  le (double a, double b)
--- 56,62 ----
    return a < b;
  }
  
! /* { dg-final { scan-assembler "lt:\n\[^:\]*\twfkdb\t%v\[0-9\]*,%v\[0-9\]*\n\t\[^:\]+\tlocghil\t%r2,1" } } */
  
  int
  le (double a, double b)
*************** le (double a, double b)
*** 72,76 ****
    return a <= b;
  }
  
! /* { dg-final { scan-assembler "le:\n\[^:\]*\twfkdb\t%v\[0-9\]*,%v\[0-9\]*\n\t\[^:\]+\tlochile\t%r2,1" { target { ! lp64 } } } } */
! /* { dg-final { scan-assembler "le:\n\[^:\]*\twfkdb\t%v\[0-9\]*,%v\[0-9\]*\n\t\[^:\]+\tlocghile\t%r2,1" { target lp64 } } } */
--- 67,70 ----
    return a <= b;
  }
  
! /* { dg-final { scan-assembler "le:\n\[^:\]*\twfkdb\t%v\[0-9\]*,%v\[0-9\]*\n\t\[^:\]+\tlocghile\t%r2,1" } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/zero-scratch-regs-1.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/zero-scratch-regs-1.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/zero-scratch-regs-1.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/zero-scratch-regs-1.c	Sun Jul 12 22:32:16 2026
*************** void foo (void) { }
*** 14,37 ****
  /* { dg-final { scan-assembler "lghi\t%r4,0" } } */
  /* { dg-final { scan-assembler "lghi\t%r5,0" } } */
  
! /* { dg-final { scan-assembler-times "vzero\t" 30 { target { ! lp64 } } } } */
! /* { dg-final { scan-assembler-times "vzero\t" 24 { target {   lp64 } } } } */
  /* { dg-final { scan-assembler "vzero\t%v0" } } */
  /* { dg-final { scan-assembler "vzero\t%v1" } } */
  /* { dg-final { scan-assembler "vzero\t%v2" } } */
  /* { dg-final { scan-assembler "vzero\t%v3" } } */
! /* { dg-final { scan-assembler "vzero\t%v4" { target { lp64 } } } } */
  /* { dg-final { scan-assembler "vzero\t%v5" } } */
! /* { dg-final { scan-assembler "vzero\t%v6" { target { lp64 } } } } */
  /* { dg-final { scan-assembler "vzero\t%v7" } } */
- /* { dg-final { scan-assembler "vzero\t%v8"  { target { ! lp64 } } } } */
- /* { dg-final { scan-assembler "vzero\t%v9"  { target { ! lp64 } } } } */
- /* { dg-final { scan-assembler "vzero\t%v10" { target { ! lp64 } } } } */
- /* { dg-final { scan-assembler "vzero\t%v11" { target { ! lp64 } } } } */
- /* { dg-final { scan-assembler "vzero\t%v12" { target { ! lp64 } } } } */
- /* { dg-final { scan-assembler "vzero\t%v13" { target { ! lp64 } } } } */
- /* { dg-final { scan-assembler "vzero\t%v14" { target { ! lp64 } } } } */
- /* { dg-final { scan-assembler "vzero\t%v15" { target { ! lp64 } } } } */
  /* { dg-final { scan-assembler "vzero\t%v16" } } */
  /* { dg-final { scan-assembler "vzero\t%v17" } } */
  /* { dg-final { scan-assembler "vzero\t%v18" } } */
--- 14,28 ----
  /* { dg-final { scan-assembler "lghi\t%r4,0" } } */
  /* { dg-final { scan-assembler "lghi\t%r5,0" } } */
  
! /* { dg-final { scan-assembler-times "vzero\t" 24 } } */
  /* { dg-final { scan-assembler "vzero\t%v0" } } */
  /* { dg-final { scan-assembler "vzero\t%v1" } } */
  /* { dg-final { scan-assembler "vzero\t%v2" } } */
  /* { dg-final { scan-assembler "vzero\t%v3" } } */
! /* { dg-final { scan-assembler "vzero\t%v4" } } */
  /* { dg-final { scan-assembler "vzero\t%v5" } } */
! /* { dg-final { scan-assembler "vzero\t%v6" } } */
  /* { dg-final { scan-assembler "vzero\t%v7" } } */
  /* { dg-final { scan-assembler "vzero\t%v16" } } */
  /* { dg-final { scan-assembler "vzero\t%v17" } } */
  /* { dg-final { scan-assembler "vzero\t%v18" } } */
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/s390/zvector/vec-cmp-1.c gcc-17-20260712/gcc/testsuite/gcc.target/s390/zvector/vec-cmp-1.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/s390/zvector/vec-cmp-1.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/s390/zvector/vec-cmp-1.c	Sun Jul 12 22:32:16 2026
*************** all_eq_double (vector double a, vector d
*** 8,197 ****
  {
  	return vec_all_eq (a, b);
  }
! /* { dg-final { scan-assembler-times all_eq_double:\n\tvfcedbs\t%v\[0-9\]*,%v24,%v26\n\tlhi\t%r2,0\n\tlochie\t%r2,1 1 { target { ! lp64 } } } } */
! /* { dg-final { scan-assembler-times all_eq_double:\n\tvfcedbs\t%v\[0-9\]*,%v24,%v26\n\tlghi\t%r2,0\n\tlocghie\t%r2,1 1 { target lp64 } } } */
  
  int __attribute__((noinline,noclone))
  all_ne_double (vector double a, vector double b)
  {
  	return vec_all_ne (a, b);
  }
! /* { dg-final { scan-assembler-times all_ne_double:\n\tvfcedbs\t%v\[0-9\]*,%v24,%v26\n\tlhi\t%r2,0\n\tlochinle\t%r2,1 1 { target { ! lp64 } } } } */
! /* { dg-final { scan-assembler-times all_ne_double:\n\tvfcedbs\t%v\[0-9\]*,%v24,%v26\n\tlghi\t%r2,0\n\tlocghinle\t%r2,1 1 { target lp64 } } } */
  
  int __attribute__((noinline,noclone))
  all_gt_double (vector double a, vector double b)
  {
  	return vec_all_gt (a, b);
  }
! /* { dg-final { scan-assembler-times all_gt_double:\n\tvfchdbs\t%v\[0-9\]*,%v24,%v26\n\tlhi\t%r2,0\n\tlochie\t%r2,1 1 { target { ! lp64 } } } } */
! /* { dg-final { scan-assembler-times all_gt_double:\n\tvfchdbs\t%v\[0-9\]*,%v24,%v26\n\tlghi\t%r2,0\n\tlocghie\t%r2,1 1 { target lp64 } } } */
  
  int __attribute__((noinline,noclone))
  all_lt_double (vector double a, vector double b)
  {
  	return vec_all_lt (a, b);
  }
! /* { dg-final { scan-assembler-times all_lt_double:\n\tvfchdbs\t%v\[0-9\]*,%v26,%v24\n\tlhi\t%r2,0\n\tlochie\t%r2,1 1 { target { ! lp64 } } } } */
! /* { dg-final { scan-assembler-times all_lt_double:\n\tvfchdbs\t%v\[0-9\]*,%v26,%v24\n\tlghi\t%r2,0\n\tlocghie\t%r2,1 1 { target lp64 } } } */
  
  int __attribute__((noinline,noclone))
  all_ge_double (vector double a, vector double b)
  {
  	return vec_all_ge (a, b);
  }
! /* { dg-final { scan-assembler-times all_ge_double:\n\tvfchedbs\t%v\[0-9\]*,%v24,%v26\n\tlhi\t%r2,0\n\tlochie\t%r2,1 1 { target { ! lp64 } } } } */
! /* { dg-final { scan-assembler-times all_ge_double:\n\tvfchedbs\t%v\[0-9\]*,%v24,%v26\n\tlghi\t%r2,0\n\tlocghie\t%r2,1 1 { target lp64 } } } */
  
  int __attribute__((noinline,noclone))
  all_le_double (vector double a, vector double b)
  {
  	return vec_all_le (a, b);
  }
! /* { dg-final { scan-assembler-times all_le_double:\n\tvfchedbs\t%v\[0-9\]*,%v26,%v24\n\tlhi\t%r2,0\n\tlochie\t%r2,1 1 { target { ! lp64 } } } } */
! /* { dg-final { scan-assembler-times all_le_double:\n\tvfchedbs\t%v\[0-9\]*,%v26,%v24\n\tlghi\t%r2,0\n\tlocghie\t%r2,1 1 { target lp64 } } } */
  
  int __attribute__((noinline,noclone))
  any_eq_double (vector double a, vector double b)
  {
  	return vec_any_eq (a, b);
  }
! /* { dg-final { scan-assembler-times any_eq_double:\n\tvfcedbs\t%v\[0-9\]*,%v24,%v26\n\tlhi\t%r2,0\n\tlochile\t%r2,1 1 { target { ! lp64 } } } } */
! /* { dg-final { scan-assembler-times any_eq_double:\n\tvfcedbs\t%v\[0-9\]*,%v24,%v26\n\tlghi\t%r2,0\n\tlocghile\t%r2,1 1 { target lp64 } } } */
  
  int __attribute__((noinline,noclone))
  any_ne_double (vector double a, vector double b)
  {
  	return vec_any_ne (a, b);
  }
! /* { dg-final { scan-assembler-times any_ne_double:\n\tvfcedbs\t%v\[0-9\]*,%v24,%v26\n\tlhi\t%r2,0\n\tlochine\t%r2,1 1 { target { ! lp64 } } } } */
! /* { dg-final { scan-assembler-times any_ne_double:\n\tvfcedbs\t%v\[0-9\]*,%v24,%v26\n\tlghi\t%r2,0\n\tlocghine\t%r2,1 1 { target lp64 } } } */
  
  int __attribute__((noinline,noclone))
  any_gt_double (vector double a, vector double b)
  {
  	return vec_any_gt (a, b);
  }
! /* { dg-final { scan-assembler-times any_gt_double:\n\tvfchdbs\t%v\[0-9\]*,%v24,%v26\n\tlhi\t%r2,0\n\tlochile\t%r2,1 1 { target { ! lp64 } } } } */
! /* { dg-final { scan-assembler-times any_gt_double:\n\tvfchdbs\t%v\[0-9\]*,%v24,%v26\n\tlghi\t%r2,0\n\tlocghile\t%r2,1 1 { target lp64 } } } */
  
  int __attribute__((noinline,noclone))
  any_lt_double (vector double a, vector double b)
  {
  	return vec_any_lt (a, b);
  }
! /* { dg-final { scan-assembler-times any_lt_double:\n\tvfchdbs\t%v\[0-9\]*,%v26,%v24\n\tlhi\t%r2,0\n\tlochile\t%r2,1 1 { target { ! lp64 } } } } */
! /* { dg-final { scan-assembler-times any_lt_double:\n\tvfchdbs\t%v\[0-9\]*,%v26,%v24\n\tlghi\t%r2,0\n\tlocghile\t%r2,1 1 { target lp64 } } } */
  
  int __attribute__((noinline,noclone))
  any_ge_double (vector double a, vector double b)
  {
  	return vec_any_ge (a, b);
  }
! /* { dg-final { scan-assembler-times any_ge_double:\n\tvfchedbs\t%v\[0-9\]*,%v24,%v26\n\tlhi\t%r2,0\n\tlochile\t%r2,1 1 { target { ! lp64 } } } } */
! /* { dg-final { scan-assembler-times any_ge_double:\n\tvfchedbs\t%v\[0-9\]*,%v24,%v26\n\tlghi\t%r2,0\n\tlocghile\t%r2,1 1 { target lp64 } } } */
  
  int __attribute__((noinline,noclone))
  any_le_double (vector double a, vector double b)
  {
  	return vec_any_le (a, b);
  }
! /* { dg-final { scan-assembler-times any_le_double:\n\tvfchedbs\t%v\[0-9\]*,%v26,%v24\n\tlhi\t%r2,0\n\tlochile\t%r2,1 1 { target { ! lp64 } } } } */
! /* { dg-final { scan-assembler-times any_le_double:\n\tvfchedbs\t%v\[0-9\]*,%v26,%v24\n\tlghi\t%r2,0\n\tlocghile\t%r2,1 1 { target lp64 } } } */
  
  int __attribute__((noinline,noclone))
  all_eq_int (vector int a, vector int b)
  {
  	return vec_all_eq (a, b);
  }
! /* { dg-final { scan-assembler-times all_eq_int:\n\tvceqfs\t%v\[0-9\]*,%v24,%v26\n\tlhi\t%r2,0\n\tlochie\t%r2,1 1 { target { ! lp64 } } } } */
! /* { dg-final { scan-assembler-times all_eq_int:\n\tvceqfs\t%v\[0-9\]*,%v24,%v26\n\tlghi\t%r2,0\n\tlocghie\t%r2,1 1 { target lp64 } } } */
  
  int __attribute__((noinline,noclone))
  all_ne_int (vector int a, vector int b)
  {
  	return vec_all_ne (a, b);
  }
! /* { dg-final { scan-assembler-times all_ne_int:\n\tvceqfs\t%v\[0-9\]*,%v24,%v26\n\tlhi\t%r2,0\n\tlochinle\t%r2,1 1 { target { ! lp64 } } } } */
! /* { dg-final { scan-assembler-times all_ne_int:\n\tvceqfs\t%v\[0-9\]*,%v24,%v26\n\tlghi\t%r2,0\n\tlocghinle\t%r2,1 1 { target lp64 } } } */
  
  int __attribute__((noinline,noclone))
  all_gt_int (vector int a, vector int b)
  {
  	return vec_all_gt (a, b);
  }
! /* { dg-final { scan-assembler-times all_gt_int:\n\tvchfs\t%v\[0-9\]*,%v24,%v26\n\tlhi\t%r2,0\n\tlochie\t%r2,1 1 { target { ! lp64 } } } } */
! /* { dg-final { scan-assembler-times all_gt_int:\n\tvchfs\t%v\[0-9\]*,%v24,%v26\n\tlghi\t%r2,0\n\tlocghie\t%r2,1 1 { target lp64 } } } */
  
  int __attribute__((noinline,noclone))
  all_lt_int (vector int a, vector int b)
  {
  	return vec_all_lt (a, b);
  }
! /* { dg-final { scan-assembler-times all_lt_int:\n\tvchfs\t%v\[0-9\]*,%v26,%v24\n\tlhi\t%r2,0\n\tlochie\t%r2,1 1 { target { ! lp64 } } } } */
! /* { dg-final { scan-assembler-times all_lt_int:\n\tvchfs\t%v\[0-9\]*,%v26,%v24\n\tlghi\t%r2,0\n\tlocghie\t%r2,1 1 { target lp64 } } } */
  
  int __attribute__((noinline,noclone))
  all_ge_int (vector int a, vector int b)
  {
  	return vec_all_ge (a, b);
  }
! /* { dg-final { scan-assembler-times all_ge_int:\n\tvchfs\t%v\[0-9\]*,%v26,%v24\n\tlhi\t%r2,0\n\tlochinle\t%r2,1 1 { target { ! lp64 } } } } */
! /* { dg-final { scan-assembler-times all_ge_int:\n\tvchfs\t%v\[0-9\]*,%v26,%v24\n\tlghi\t%r2,0\n\tlocghinle\t%r2,1 1 { target lp64 } } } */
  
  int __attribute__((noinline,noclone))
  all_le_int (vector int a, vector int b)
  {
  	return vec_all_le (a, b);
  }
! /* { dg-final { scan-assembler-times all_le_int:\n\tvchfs\t%v\[0-9\]*,%v24,%v26\n\tlhi\t%r2,0\n\tlochinle\t%r2,1 1 { target { ! lp64 } } } } */
! /* { dg-final { scan-assembler-times all_le_int:\n\tvchfs\t%v\[0-9\]*,%v24,%v26\n\tlghi\t%r2,0\n\tlocghinle\t%r2,1 1 { target lp64 } } } */
  
  int __attribute__((noinline,noclone))
  any_eq_int (vector int a, vector int b)
  {
  	return vec_any_eq (a, b);
  }
! /* { dg-final { scan-assembler-times any_eq_int:\n\tvceqfs\t%v\[0-9\]*,%v24,%v26\n\tlhi\t%r2,0\n\tlochile\t%r2,1 1 { target { ! lp64 } } } } */
! /* { dg-final { scan-assembler-times any_eq_int:\n\tvceqfs\t%v\[0-9\]*,%v24,%v26\n\tlghi\t%r2,0\n\tlocghile\t%r2,1 1 { target lp64 } } } */
  
  int __attribute__((noinline,noclone))
  any_ne_int (vector int a, vector int b)
  {
  	return vec_any_ne (a, b);
  }
! /* { dg-final { scan-assembler-times any_ne_int:\n\tvceqfs\t%v\[0-9\]*,%v24,%v26\n\tlhi\t%r2,0\n\tlochine\t%r2,1 1 { target { ! lp64 } } } } */
! /* { dg-final { scan-assembler-times any_ne_int:\n\tvceqfs\t%v\[0-9\]*,%v24,%v26\n\tlghi\t%r2,0\n\tlocghine\t%r2,1 1 { target lp64 } } } */
  
  int __attribute__((noinline,noclone))
  any_gt_int (vector int a, vector int b)
  {
  	return vec_any_gt (a, b);
  }
! /* { dg-final { scan-assembler-times any_gt_int:\n\tvchfs\t%v\[0-9\]*,%v24,%v26\n\tlhi\t%r2,0\n\tlochile\t%r2,1 1 { target { ! lp64 } } } } */
! /* { dg-final { scan-assembler-times any_gt_int:\n\tvchfs\t%v\[0-9\]*,%v24,%v26\n\tlghi\t%r2,0\n\tlocghile\t%r2,1 1 { target lp64 } } } */
  
  int __attribute__((noinline,noclone))
  any_lt_int (vector int a, vector int b)
  {
  	return vec_any_lt (a, b);
  }
! /* { dg-final { scan-assembler-times any_lt_int:\n\tvchfs\t%v\[0-9\]*,%v26,%v24\n\tlhi\t%r2,0\n\tlochile\t%r2,1 1 { target { ! lp64 } } } } */
! /* { dg-final { scan-assembler-times any_lt_int:\n\tvchfs\t%v\[0-9\]*,%v26,%v24\n\tlghi\t%r2,0\n\tlocghile\t%r2,1 1 { target lp64 } } } */
  
  int __attribute__((noinline,noclone))
  any_ge_int (vector int a, vector int b)
  {
  	return vec_any_ge (a, b);
  }
! /* { dg-final { scan-assembler-times any_ge_int:\n\tvchfs\t%v\[0-9\]*,%v26,%v24\n\tlhi\t%r2,0\n\tlochine\t%r2,1 1 { target { ! lp64 } } } } */
! /* { dg-final { scan-assembler-times any_ge_int:\n\tvchfs\t%v\[0-9\]*,%v26,%v24\n\tlghi\t%r2,0\n\tlocghine\t%r2,1 1 { target lp64 } } } */
  
  int __attribute__((noinline,noclone))
  any_le_int (vector int a, vector int b)
  {
  	return vec_any_le (a, b);
  }
! /* { dg-final { scan-assembler-times any_le_int:\n\tvchfs\t%v\[0-9\]*,%v24,%v26\n\tlhi\t%r2,0\n\tlochine\t%r2,1 1 { target { ! lp64 } } } } */
! /* { dg-final { scan-assembler-times any_le_int:\n\tvchfs\t%v\[0-9\]*,%v24,%v26\n\tlghi\t%r2,0\n\tlocghine\t%r2,1 1 { target lp64 } } } */
  
--- 8,173 ----
  {
  	return vec_all_eq (a, b);
  }
! /* { dg-final { scan-assembler-times all_eq_double:\n\tvfcedbs\t%v\[0-9\]*,%v24,%v26\n\tlghi\t%r2,0\n\tlocghie\t%r2,1 1 } } */
  
  int __attribute__((noinline,noclone))
  all_ne_double (vector double a, vector double b)
  {
  	return vec_all_ne (a, b);
  }
! /* { dg-final { scan-assembler-times all_ne_double:\n\tvfcedbs\t%v\[0-9\]*,%v24,%v26\n\tlghi\t%r2,0\n\tlocghinle\t%r2,1 1 } } */
  
  int __attribute__((noinline,noclone))
  all_gt_double (vector double a, vector double b)
  {
  	return vec_all_gt (a, b);
  }
! /* { dg-final { scan-assembler-times all_gt_double:\n\tvfchdbs\t%v\[0-9\]*,%v24,%v26\n\tlghi\t%r2,0\n\tlocghie\t%r2,1 1 } } */
  
  int __attribute__((noinline,noclone))
  all_lt_double (vector double a, vector double b)
  {
  	return vec_all_lt (a, b);
  }
! /* { dg-final { scan-assembler-times all_lt_double:\n\tvfchdbs\t%v\[0-9\]*,%v26,%v24\n\tlghi\t%r2,0\n\tlocghie\t%r2,1 1 } } */
  
  int __attribute__((noinline,noclone))
  all_ge_double (vector double a, vector double b)
  {
  	return vec_all_ge (a, b);
  }
! /* { dg-final { scan-assembler-times all_ge_double:\n\tvfchedbs\t%v\[0-9\]*,%v24,%v26\n\tlghi\t%r2,0\n\tlocghie\t%r2,1 1 } } */
  
  int __attribute__((noinline,noclone))
  all_le_double (vector double a, vector double b)
  {
  	return vec_all_le (a, b);
  }
! /* { dg-final { scan-assembler-times all_le_double:\n\tvfchedbs\t%v\[0-9\]*,%v26,%v24\n\tlghi\t%r2,0\n\tlocghie\t%r2,1 1 } } */
  
  int __attribute__((noinline,noclone))
  any_eq_double (vector double a, vector double b)
  {
  	return vec_any_eq (a, b);
  }
! /* { dg-final { scan-assembler-times any_eq_double:\n\tvfcedbs\t%v\[0-9\]*,%v24,%v26\n\tlghi\t%r2,0\n\tlocghile\t%r2,1 1 } } */
  
  int __attribute__((noinline,noclone))
  any_ne_double (vector double a, vector double b)
  {
  	return vec_any_ne (a, b);
  }
! /* { dg-final { scan-assembler-times any_ne_double:\n\tvfcedbs\t%v\[0-9\]*,%v24,%v26\n\tlghi\t%r2,0\n\tlocghine\t%r2,1 1 } } */
  
  int __attribute__((noinline,noclone))
  any_gt_double (vector double a, vector double b)
  {
  	return vec_any_gt (a, b);
  }
! /* { dg-final { scan-assembler-times any_gt_double:\n\tvfchdbs\t%v\[0-9\]*,%v24,%v26\n\tlghi\t%r2,0\n\tlocghile\t%r2,1 1 } } */
  
  int __attribute__((noinline,noclone))
  any_lt_double (vector double a, vector double b)
  {
  	return vec_any_lt (a, b);
  }
! /* { dg-final { scan-assembler-times any_lt_double:\n\tvfchdbs\t%v\[0-9\]*,%v26,%v24\n\tlghi\t%r2,0\n\tlocghile\t%r2,1 1 } } */
  
  int __attribute__((noinline,noclone))
  any_ge_double (vector double a, vector double b)
  {
  	return vec_any_ge (a, b);
  }
! /* { dg-final { scan-assembler-times any_ge_double:\n\tvfchedbs\t%v\[0-9\]*,%v24,%v26\n\tlghi\t%r2,0\n\tlocghile\t%r2,1 1 } } */
  
  int __attribute__((noinline,noclone))
  any_le_double (vector double a, vector double b)
  {
  	return vec_any_le (a, b);
  }
! /* { dg-final { scan-assembler-times any_le_double:\n\tvfchedbs\t%v\[0-9\]*,%v26,%v24\n\tlghi\t%r2,0\n\tlocghile\t%r2,1 1 } } */
  
  int __attribute__((noinline,noclone))
  all_eq_int (vector int a, vector int b)
  {
  	return vec_all_eq (a, b);
  }
! /* { dg-final { scan-assembler-times all_eq_int:\n\tvceqfs\t%v\[0-9\]*,%v24,%v26\n\tlghi\t%r2,0\n\tlocghie\t%r2,1 1 } } */
  
  int __attribute__((noinline,noclone))
  all_ne_int (vector int a, vector int b)
  {
  	return vec_all_ne (a, b);
  }
! /* { dg-final { scan-assembler-times all_ne_int:\n\tvceqfs\t%v\[0-9\]*,%v24,%v26\n\tlghi\t%r2,0\n\tlocghinle\t%r2,1 1 } } */
  
  int __attribute__((noinline,noclone))
  all_gt_int (vector int a, vector int b)
  {
  	return vec_all_gt (a, b);
  }
! /* { dg-final { scan-assembler-times all_gt_int:\n\tvchfs\t%v\[0-9\]*,%v24,%v26\n\tlghi\t%r2,0\n\tlocghie\t%r2,1 1 } } */
  
  int __attribute__((noinline,noclone))
  all_lt_int (vector int a, vector int b)
  {
  	return vec_all_lt (a, b);
  }
! /* { dg-final { scan-assembler-times all_lt_int:\n\tvchfs\t%v\[0-9\]*,%v26,%v24\n\tlghi\t%r2,0\n\tlocghie\t%r2,1 1 } } */
  
  int __attribute__((noinline,noclone))
  all_ge_int (vector int a, vector int b)
  {
  	return vec_all_ge (a, b);
  }
! /* { dg-final { scan-assembler-times all_ge_int:\n\tvchfs\t%v\[0-9\]*,%v26,%v24\n\tlghi\t%r2,0\n\tlocghinle\t%r2,1 1 } } */
  
  int __attribute__((noinline,noclone))
  all_le_int (vector int a, vector int b)
  {
  	return vec_all_le (a, b);
  }
! /* { dg-final { scan-assembler-times all_le_int:\n\tvchfs\t%v\[0-9\]*,%v24,%v26\n\tlghi\t%r2,0\n\tlocghinle\t%r2,1 1 } } */
  
  int __attribute__((noinline,noclone))
  any_eq_int (vector int a, vector int b)
  {
  	return vec_any_eq (a, b);
  }
! /* { dg-final { scan-assembler-times any_eq_int:\n\tvceqfs\t%v\[0-9\]*,%v24,%v26\n\tlghi\t%r2,0\n\tlocghile\t%r2,1 1 } } */
  
  int __attribute__((noinline,noclone))
  any_ne_int (vector int a, vector int b)
  {
  	return vec_any_ne (a, b);
  }
! /* { dg-final { scan-assembler-times any_ne_int:\n\tvceqfs\t%v\[0-9\]*,%v24,%v26\n\tlghi\t%r2,0\n\tlocghine\t%r2,1 1 } } */
  
  int __attribute__((noinline,noclone))
  any_gt_int (vector int a, vector int b)
  {
  	return vec_any_gt (a, b);
  }
! /* { dg-final { scan-assembler-times any_gt_int:\n\tvchfs\t%v\[0-9\]*,%v24,%v26\n\tlghi\t%r2,0\n\tlocghile\t%r2,1 1 } } */
  
  int __attribute__((noinline,noclone))
  any_lt_int (vector int a, vector int b)
  {
  	return vec_any_lt (a, b);
  }
! /* { dg-final { scan-assembler-times any_lt_int:\n\tvchfs\t%v\[0-9\]*,%v26,%v24\n\tlghi\t%r2,0\n\tlocghile\t%r2,1 1 } } */
  
  int __attribute__((noinline,noclone))
  any_ge_int (vector int a, vector int b)
  {
  	return vec_any_ge (a, b);
  }
! /* { dg-final { scan-assembler-times any_ge_int:\n\tvchfs\t%v\[0-9\]*,%v26,%v24\n\tlghi\t%r2,0\n\tlocghine\t%r2,1 1 } } */
  
  int __attribute__((noinline,noclone))
  any_le_int (vector int a, vector int b)
  {
  	return vec_any_le (a, b);
  }
! /* { dg-final { scan-assembler-times any_le_int:\n\tvchfs\t%v\[0-9\]*,%v24,%v26\n\tlghi\t%r2,0\n\tlocghine\t%r2,1 1 } } */
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/x86_64/abi/ms-sysv/ms-sysv.c gcc-17-20260712/gcc/testsuite/gcc.target/x86_64/abi/ms-sysv/ms-sysv.c
*** gcc-17-20260705/gcc/testsuite/gcc.target/x86_64/abi/ms-sysv/ms-sysv.c	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/x86_64/abi/ms-sysv/ms-sysv.c	Sun Jul 12 22:32:16 2026
*************** static long long_optarg (const char *opt
*** 391,397 ****
    errno = 0;
    ret = strtol(optarg, &end, 0);
  
!   while (isspace (*end))
      ++end;
  
    if (errno || *end)
--- 391,397 ----
    errno = 0;
    ret = strtol(optarg, &end, 0);
  
!   while (isspace ((unsigned char) *end))
      ++end;
  
    if (errno || *end)
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gcc.target/x86_64/abi/ms-sysv/ms-sysv.exp gcc-17-20260712/gcc/testsuite/gcc.target/x86_64/abi/ms-sysv/ms-sysv.exp
*** gcc-17-20260705/gcc/testsuite/gcc.target/x86_64/abi/ms-sysv/ms-sysv.exp	Sun Jul  5 22:32:15 2026
--- gcc-17-20260712/gcc/testsuite/gcc.target/x86_64/abi/ms-sysv/ms-sysv.exp	Sun Jul 12 22:32:16 2026
*************** proc runtest_ms_sysv { cflags generator_
*** 80,86 ****
      # to generate bp clobbers.
      if { [regexp "(^| )-(O0|fno-omit-frame-pointer|p|pg)( |$)" \
  		 "$TEST_ALWAYS_FLAGS $cflags" match]
! 	 || [istarget *-*-solaris*] || [istarget *-*-freebsd*] } then {
  	set generator_args "$generator_args --omit-rbp-clobbers"
      }
  
--- 80,88 ----
      # to generate bp clobbers.
      if { [regexp "(^| )-(O0|fno-omit-frame-pointer|p|pg)( |$)" \
  		 "$TEST_ALWAYS_FLAGS $cflags" match]
! 	 || [istarget *-*-solaris*]
! 	 || [istarget *-*-freebsd*]
! 	 || [istarget *-*-netbsd*] } then {
  	set generator_args "$generator_args --omit-rbp-clobbers"
      }
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gfortran.dg/allocate_alloc_opt_4.f90 gcc-17-20260712/gcc/testsuite/gfortran.dg/allocate_alloc_opt_4.f90
*** gcc-17-20260705/gcc/testsuite/gfortran.dg/allocate_alloc_opt_4.f90	Sun Jul  5 22:32:16 2026
--- gcc-17-20260712/gcc/testsuite/gfortran.dg/allocate_alloc_opt_4.f90	Sun Jul 12 22:32:16 2026
*************** program a
*** 15,21 ****
  
    allocate(i(4), source=42, source=n) ! { dg-error "Redundant SOURCE tag found" }
  
!   allocate(integer(4) :: i(4), source=n) ! { dg-error "conflicts with the typespec" }
  
    allocate(i(4), j(n), source=n) ! { dg-error "Fortran 2008: SOURCE tag at .1. with more than a single allocate object" }
  
--- 15,21 ----
  
    allocate(i(4), source=42, source=n) ! { dg-error "Redundant SOURCE tag found" }
  
!   allocate(integer(4) :: i(4), source=n) ! { dg-error "conflicts with the type-spec" }
  
    allocate(i(4), j(n), source=n) ! { dg-error "Fortran 2008: SOURCE tag at .1. with more than a single allocate object" }
  
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gfortran.dg/allocate_derived_1.f90 gcc-17-20260712/gcc/testsuite/gfortran.dg/allocate_derived_1.f90
*** gcc-17-20260705/gcc/testsuite/gfortran.dg/allocate_derived_1.f90	Sun Jul  5 22:32:16 2026
--- gcc-17-20260712/gcc/testsuite/gfortran.dg/allocate_derived_1.f90	Sun Jul 12 22:32:16 2026
***************
*** 34,49 ****
   allocate(t3 :: x(4))
   allocate(tx :: x(5))  ! { dg-error "Error in type-spec at" }
   allocate(u0 :: x(6))  ! { dg-error "may not be ABSTRACT" }
!  allocate(v1 :: x(7))  ! { dg-error "is type incompatible with typespec" }
  
   allocate(      y(1))
!  allocate(t1 :: y(2))  ! { dg-error "is type incompatible with typespec" }
   allocate(t2 :: y(3))
!  allocate(t3 :: y(3))  ! { dg-error "is type incompatible with typespec" }
  
   allocate(      z(1))
!  allocate(t1 :: z(2))  ! { dg-error "is type incompatible with typespec" }
!  allocate(t2 :: z(3))  ! { dg-error "is type incompatible with typespec" }
   allocate(t3 :: z(4))
  
  end
--- 34,49 ----
   allocate(t3 :: x(4))
   allocate(tx :: x(5))  ! { dg-error "Error in type-spec at" }
   allocate(u0 :: x(6))  ! { dg-error "may not be ABSTRACT" }
!  allocate(v1 :: x(7))  ! { dg-error "is type incompatible with type-spec" }
  
   allocate(      y(1))
!  allocate(t1 :: y(2))  ! { dg-error "is type incompatible with type-spec" }
   allocate(t2 :: y(3))
!  allocate(t3 :: y(3))  ! { dg-error "is type incompatible with type-spec" }
  
   allocate(      z(1))
!  allocate(t1 :: z(2))  ! { dg-error "is type incompatible with type-spec" }
!  allocate(t2 :: z(3))  ! { dg-error "is type incompatible with type-spec" }
   allocate(t3 :: z(4))
  
  end
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gfortran.dg/allocate_with_mold_6.f90 gcc-17-20260712/gcc/testsuite/gfortran.dg/allocate_with_mold_6.f90
*** gcc-17-20260705/gcc/testsuite/gfortran.dg/allocate_with_mold_6.f90	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gfortran.dg/allocate_with_mold_6.f90	Sun Jul 12 22:32:16 2026
***************
*** 0 ****
--- 1,36 ----
+ ! { dg-do run }
+ !
+ ! Test case contributed by Andrew Benson <abensonca@gmail.com>
+ 
+ module m
+   implicit none
+   type :: t
+      integer :: i
+   end type t
+   type :: container
+      class(t), allocatable :: arr(:)
+   end type container
+   type(t) :: scalar_mold
+ contains
+   subroutine get_rank (x, r)
+     class(*), intent(in) :: x(..)
+     integer, intent(out) :: r
+     r = rank (x)
+   end subroutine get_rank
+ end module m
+ 
+ program main
+   use m
+   implicit none
+   type(container), pointer :: c
+   integer :: r
+ 
+   allocate (c)
+   allocate (c%arr(1), mold = scalar_mold)
+ 
+   ! Check the rank
+   call get_rank (c%arr, r)
+   if (r /= 1) stop 1
+ 
+   deallocate (c)
+ end program main
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gfortran.dg/allocate_with_mold_7.f90 gcc-17-20260712/gcc/testsuite/gfortran.dg/allocate_with_mold_7.f90
*** gcc-17-20260705/gcc/testsuite/gfortran.dg/allocate_with_mold_7.f90	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gfortran.dg/allocate_with_mold_7.f90	Sun Jul 12 22:32:16 2026
***************
*** 0 ****
--- 1,36 ----
+ ! { dg-do run }
+ !
+ module m
+   implicit none
+   type :: container
+      class(*), allocatable :: arr(:)
+   end type container
+ contains
+   subroutine get_rank (x, r)
+     class(*), intent(in) :: x(..)
+     integer, intent(out) :: r
+     r = rank (x)
+   end subroutine get_rank
+ end module m
+ 
+ program main
+   use m
+   implicit none
+   type(container), pointer :: c
+   integer(1), allocatable :: junk(:)
+   integer :: r
+ 
+   allocate (c)
+   allocate (c%arr(3), mold = 7)
+ 
+   call get_rank (c%arr, r)
+   if (r /= 1) stop 1
+ 
+   select type (y => c%arr)
+   type is (integer)
+   class default
+     stop 2
+   end select
+ 
+   deallocate (c)
+ end program main
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gfortran.dg/block_18.f90 gcc-17-20260712/gcc/testsuite/gfortran.dg/block_18.f90
*** gcc-17-20260705/gcc/testsuite/gfortran.dg/block_18.f90	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gfortran.dg/block_18.f90	Sun Jul 12 22:32:16 2026
***************
*** 0 ****
--- 1,66 ----
+ ! { dg-do compile }
+ !
+ ! PR fortran/126127 - resolution of user-defined operators in named BLOCK
+ 
+ module geom2d
+   use, intrinsic :: iso_fortran_env, only: wp => real64
+   implicit none
+   private
+   public :: vec2_t, operator(.dot.)
+ 
+   type :: vec2_t
+      real(wp) :: x = 0, y = 0
+   end type vec2_t
+ 
+   interface operator(.dot.)
+      module procedure vec_dot
+   end interface operator(.dot.)
+ contains
+   pure function vec_dot(a, b) result(r)
+     type(vec2_t), intent(in) :: a, b
+     real(wp)                 :: r
+     r = a%x*b%x + a%y*b%y
+   end function vec_dot
+ end module
+ 
+ module consumer
+   use, intrinsic :: iso_fortran_env, only: r8 => real64
+   use geom2d, only: vec2_t, operator(.dot.)
+   implicit none
+ contains
+   subroutine f(id)
+     integer, intent(out) :: id
+     type(vec2_t) :: d
+     real(r8)     :: dd
+     id = 0
+     blk: block
+       dd = d .dot. d
+     end block blk
+   end subroutine f
+ 
+   subroutine f2(id)
+     integer, intent(out) :: id
+     type(vec2_t) :: d
+     real(r8)     :: dd
+     id = 0
+     block
+       dd = d .dot. d
+     end block
+   end subroutine f2
+ 
+   subroutine f3(id)
+     integer, intent(out) :: id
+     type(vec2_t) :: d
+     real(r8)     :: dd
+     block
+       blk1: block
+         id = 0
+         block
+           blk2: block
+             dd = d .dot. d
+           end block blk2
+         end block
+       end block blk1
+     end block
+   end subroutine f3
+ end module
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gfortran.dg/f2018c937.f90 gcc-17-20260712/gcc/testsuite/gfortran.dg/f2018c937.f90
*** gcc-17-20260705/gcc/testsuite/gfortran.dg/f2018c937.f90	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gfortran.dg/f2018c937.f90	Sun Jul 12 22:32:16 2026
***************
*** 0 ****
--- 1,10 ----
+ ! { dg-do compile }
+ ! { dg-options "-fcoarray=single" }
+ ! https://mailman.j3-fortran.org/pipermail/j3/2021-August/013230.html
+ program foo
+    type :: a_t
+       integer, allocatable :: n[:]
+    end type
+    class(*), allocatable :: a
+    allocate(a_t :: a)         ! { dg-error "coarray ultimate component" }
+ end program foo
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gfortran.dg/f2018c949.f90 gcc-17-20260712/gcc/testsuite/gfortran.dg/f2018c949.f90
*** gcc-17-20260705/gcc/testsuite/gfortran.dg/f2018c949.f90	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gfortran.dg/f2018c949.f90	Sun Jul 12 22:32:16 2026
***************
*** 0 ****
--- 1,13 ----
+ ! { dg-do compile }
+ ! { dg-options "-fcoarray=single" }
+ program main
+   type :: type
+     integer, allocatable :: a[:]
+   end type
+ 
+   type(type) :: x
+   class(*), allocatable :: y
+ 
+   allocate(x%a[*])
+   allocate(y, source = x) !{ dg-error "coarray ultimate component" }
+ end
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gfortran.dg/lto/pr126170_0.f90 gcc-17-20260712/gcc/testsuite/gfortran.dg/lto/pr126170_0.f90
*** gcc-17-20260705/gcc/testsuite/gfortran.dg/lto/pr126170_0.f90	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gfortran.dg/lto/pr126170_0.f90	Sun Jul 12 22:32:17 2026
***************
*** 0 ****
--- 1,31 ----
+ ! { dg-lto-do link }
+ !
+ ! PR fortran/126170
+ ! A redundant, already host-associated USE inside a contained function
+ ! caused gfortran to create duplicate of a derived type with
+ ! a FINAL binding.
+ 
+ module vsm
+   type :: vs
+      integer :: c
+    contains
+      final :: vdst
+   end type vs
+ contains
+   subroutine vdst(v)
+     type(vs), intent(inout) :: v
+   end subroutine vdst
+ end module vsm
+ 
+ module m_ds
+   use vsm
+   type :: mdcc
+   end type mdcc
+ contains
+   function mdot(self)
+     use vsm
+     class(mdcc), intent(inout) :: self
+     type(vs) :: mdot
+     mdot%c = 1
+   end function mdot
+ end module m_ds
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gfortran.dg/lto/pr126170_1.f90 gcc-17-20260712/gcc/testsuite/gfortran.dg/lto/pr126170_1.f90
*** gcc-17-20260705/gcc/testsuite/gfortran.dg/lto/pr126170_1.f90	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gfortran.dg/lto/pr126170_1.f90	Sun Jul 12 22:32:17 2026
***************
*** 0 ****
--- 1,14 ----
+ module caller
+   use m_ds
+ contains
+   subroutine s()
+     type(mdcc) :: self
+     type(vs) :: vs_
+     vs_ = mdot(self)
+   end subroutine s
+ end module caller
+ 
+ program main
+   use caller
+   call s()
+ end program main
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gfortran.dg/pr103367_2.f90 gcc-17-20260712/gcc/testsuite/gfortran.dg/pr103367_2.f90
*** gcc-17-20260705/gcc/testsuite/gfortran.dg/pr103367_2.f90	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gfortran.dg/pr103367_2.f90	Sun Jul 12 22:32:17 2026
***************
*** 0 ****
--- 1,37 ----
+ ! { dg-do compile }
+ subroutine s1
+   type t
+     integer :: a(1,2) = 3
+   end type
+   type(t), parameter :: x(1) = t(4)
+   integer, parameter :: y(1,2) = (x(1)%a(m,1)) ! { dg-error "does not reduce to a constant expression" }
+   print *, y
+ end
+ 
+ subroutine s2
+   type t
+     integer :: a(2) = 3!
+   end type
+   type(t), parameter :: x(1) = t(4)
+   integer, parameter :: y = x(1)%a(m) ! { dg-error "non-constant initialization expression" }
+   print *, y
+ end
+ 
+ subroutine s3
+   type t
+     integer :: a(1,2) = 3
+   end type
+   type(t), parameter :: x(1) = t(4)
+   integer, parameter :: y(1,2) = (x(b)%a) ! { dg-error "does not reduce to a constant expression" }
+   print *, y
+ end
+ 
+ subroutine s4
+   type t
+     integer :: a(1,2) = 3
+   end type
+   type(t), parameter :: x(1) = t(4)
+   integer :: y(1,2) = x(b)%a ! { dg-error "does not reduce to a constant expression" }
+   print *, y
+ end
+ ! { dg-prune-output "Legacy Extension: REAL array index" }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gfortran.dg/pr103367_3.f90 gcc-17-20260712/gcc/testsuite/gfortran.dg/pr103367_3.f90
*** gcc-17-20260705/gcc/testsuite/gfortran.dg/pr103367_3.f90	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gfortran.dg/pr103367_3.f90	Sun Jul 12 22:32:17 2026
***************
*** 0 ****
--- 1,11 ----
+ ! { dg-do run }
+ ! PR103367 Test case from the PR, previously segfaulted.
+ program p
+   type t
+      integer :: a(1,2) = 3
+   end type
+   type(t), parameter :: x(1) = t(4)
+   integer, parameter :: y(2) = x(1)%a(1,:)
+   if (any (y /= [4, 4])) stop 1
+ end
+ 
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gfortran.dg/pr103367_4.f90 gcc-17-20260712/gcc/testsuite/gfortran.dg/pr103367_4.f90
*** gcc-17-20260705/gcc/testsuite/gfortran.dg/pr103367_4.f90	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gfortran.dg/pr103367_4.f90	Sun Jul 12 22:32:17 2026
***************
*** 0 ****
--- 1,14 ----
+ ! { dg-do run }
+ ! PR103367, this test previously
+ ! Test case from the PR segfaulted at compile time.
+ program p
+   type inner
+     integer :: n = 3
+   end type
+   type outer
+     type(inner) :: a(2) = inner(1)
+   end type
+   type(outer), parameter :: x(1) = outer(inner(4))
+   integer, parameter :: y(2) = x(1)%a%n
+   if (any (y /= [4, 4])) stop 1
+ end
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gfortran.dg/pr126116.f90 gcc-17-20260712/gcc/testsuite/gfortran.dg/pr126116.f90
*** gcc-17-20260705/gcc/testsuite/gfortran.dg/pr126116.f90	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gfortran.dg/pr126116.f90	Sun Jul 12 22:32:17 2026
***************
*** 0 ****
--- 1,19 ----
+ ! { dg-do run }
+ 
+ program check
+     implicit none
+     integer :: u
+     character(50) :: chr
+ 
+     ! 1. Correctly generate a negative unit via NEWUNIT
+     open(file="test.txt", newunit=u) ! u gets -10
+     close(u) ! u (-10) is now closed and free
+ 
+     ! 2. Internal I/O corrupts the state of unit -10
+     write(chr, *) "test"
+ 
+     ! 3. Redundant CLOSE on the valid unit 'u'.
+     ! This should be a safe no-op according to the standard,
+     ! but it triggers the runtime error/segfault!
+     close(u)
+ end program
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gfortran.dg/pr126210.f90 gcc-17-20260712/gcc/testsuite/gfortran.dg/pr126210.f90
*** gcc-17-20260705/gcc/testsuite/gfortran.dg/pr126210.f90	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gfortran.dg/pr126210.f90	Sun Jul 12 22:32:17 2026
***************
*** 0 ****
--- 1,26 ----
+ ! { dg-do compile }
+ !
+ ! PR fortran/126210
+ ! A redundant, already host-associated USE inside a contained
+ ! subroutine of a module defining an interface whose specific procedure
+ ! shares the generic's name caused a mismatch error.
+ 
+ module amod
+   interface foo
+     function foo (x) bind (c)
+       use iso_c_binding, only : c_int
+       integer (c_int) :: foo
+       integer (c_int), value :: x
+     end function foo
+   end interface
+ end module amod
+ 
+ module m
+   use amod
+ contains
+   subroutine bar (y)
+     use amod
+     integer :: y
+     y = foo (1)
+   end subroutine bar
+ end module m
diff -Nrcpad gcc-17-20260705/gcc/testsuite/gfortran.dg/trigd_1.f90 gcc-17-20260712/gcc/testsuite/gfortran.dg/trigd_1.f90
*** gcc-17-20260705/gcc/testsuite/gfortran.dg/trigd_1.f90	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/gfortran.dg/trigd_1.f90	Sun Jul 12 22:32:17 2026
***************
*** 0 ****
--- 1,133 ----
+ ! { dg-do run }
+ ! { dg-additional-options "-O2 -std=f2023 -fall-intrinsics"
+ !
+ ! PR fortran/121366 - degree trigonometric function and procedure pointers
+ !
+ ! Test availability of degree trigonometric function from F2023 standard
+ ! (cosd, sind, tand and their inverses) for procedure pointer assignment.
+ ! Also test same for GNU extensions (dcosd, dsind, dtand and inverses)
+ ! and for the two-argument versions (d)atan2d.
+ 
+ subroutine pr121366
+   implicit none
+ 
+   interface
+      function func(x)
+        real              :: func
+        real, intent (in) :: x
+      end function func
+   end interface
+ 
+   type pp
+      procedure(func) ,pointer ,nopass :: f =>null()
+   end type pp
+ 
+   type(pp)  :: func_array(3)
+   real      :: x = 30.
+   real      :: y = 0.5
+   intrinsic :: cosd, sind, tand, acosd, asind, atand
+ 
+   func_array(1)%f => cosd
+   func_array(2)%f => sind
+   func_array(3)%f => tand
+   if (func_array(1)%f(x) /= cosd(x)) stop 1
+   if (func_array(2)%f(x) /= sind(x)) stop 2
+   if (func_array(3)%f(x) /= tand(x)) stop 3
+ 
+   func_array(1)%f => acosd
+   func_array(2)%f => asind
+   func_array(3)%f => atand
+   if (func_array(1)%f(y) /= acosd(y)) stop 4
+   if (func_array(2)%f(y) /= asind(y)) stop 5
+   if (func_array(3)%f(y) /= atand(y)) stop 6
+ end
+ 
+ subroutine pr121366_2
+   implicit none
+ 
+   interface
+      function func(x)
+        real(8)              :: func
+        real(8), intent (in) :: x
+      end function func
+   end interface
+ 
+   type pp
+      procedure(func) ,pointer ,nopass :: f =>null()
+   end type pp
+ 
+   type(pp)  :: func_array(3)
+   real(8)   :: x = 30.
+   real(8)   :: y = 0.5
+   intrinsic :: dcosd, dsind, dtand, dacosd, dasind, datand
+ 
+   func_array(1)%f => dcosd
+   func_array(2)%f => dsind
+   func_array(3)%f => dtand
+ 
+   if (func_array(1)%f(x) /= cosd(x)) stop 11
+   if (func_array(2)%f(x) /= sind(x)) stop 12
+   if (func_array(3)%f(x) /= tand(x)) stop 13
+ 
+   func_array(1)%f => dacosd
+   func_array(2)%f => dasind
+   func_array(3)%f => datand
+ 
+   if (func_array(1)%f(y) /= acosd(y)) stop 14
+   if (func_array(2)%f(y) /= asind(y)) stop 15
+   if (func_array(3)%f(y) /= atand(y)) stop 16
+ end
+ 
+ subroutine pr121366_3
+   implicit none
+ 
+   interface
+      function func2(x, y)
+        real              :: func
+        real, intent (in) :: x, y
+      end function func2
+   end interface
+ 
+   type pp2
+      procedure(func2) ,pointer ,nopass :: f =>null()
+   end type pp2
+ 
+   type(pp2) :: func2_array(1)
+   real      :: x = 0.5, y = 1.0
+   intrinsic :: atan2d
+   intrinsic :: atan2 !, atan2pi
+ 
+   func2_array(1)%f => atan2d
+ 
+   if (func2_array(1)%f(x,y) /= atan2d(x,y)) stop 21
+ end
+ 
+ subroutine pr121366_4
+   implicit none
+ 
+   interface
+      function func2(x, y)
+        real(8)              :: func2
+        real(8), intent (in) :: x, y
+      end function func2
+   end interface
+ 
+   type pp2
+      procedure(func2) ,pointer ,nopass :: f =>null()
+   end type pp2
+ 
+   type(pp2) :: func2_array(1)
+   real(8)   :: x = 0.5, y = 1.0
+   intrinsic :: datan2d
+ 
+   func2_array(1)%f => datan2d
+ 
+   if (func2_array(1)%f(x,y) /= atan2d(x,y)) stop 31
+ end
+ 
+ program test
+   call pr121366
+   call pr121366_2
+   call pr121366_3
+   call pr121366_4
+ end
diff -Nrcpad gcc-17-20260705/gcc/testsuite/rust/compile/assert_missing_panic.rs gcc-17-20260712/gcc/testsuite/rust/compile/assert_missing_panic.rs
*** gcc-17-20260705/gcc/testsuite/rust/compile/assert_missing_panic.rs	Sun Jul  5 22:32:16 2026
--- gcc-17-20260712/gcc/testsuite/rust/compile/assert_missing_panic.rs	Sun Jul 12 22:32:17 2026
*************** macro_rules! assert {
*** 10,12 ****
--- 10,15 ----
  
  const _: () = assert!(true);
  // { dg-error "could not resolve macro invocation .panic." "" { target *-*-* } .-1 }
+ 
+ const _: () = assert!(true, "oops, {}", 12);
+ // { dg-error "could not resolve macro invocation .panic." "" { target *-*-* } .-1 }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/rust/compile/box-expr.rs gcc-17-20260712/gcc/testsuite/rust/compile/box-expr.rs
*** gcc-17-20260705/gcc/testsuite/rust/compile/box-expr.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/rust/compile/box-expr.rs	Sun Jul 12 22:32:17 2026
***************
*** 0 ****
--- 1,55 ----
+ #![no_core]
+ #![feature(no_core, lang_items, box_syntax)]
+ 
+ #[lang = "sized"]
+ pub trait Sized {}
+ 
+ #[lang = "phantom_data"]
+ pub struct PhantomData<T: ?Sized>;
+ 
+ pub struct NonNull<T: ?Sized> {
+     _pointer: *const T,
+ }
+ 
+ pub struct Unique<T: ?Sized> {
+     _pointer: NonNull<T>,
+     _marker: PhantomData<T>,
+ }
+ 
+ pub struct Global;
+ 
+ #[lang = "exchange_malloc"]
+ fn _exchange_malloc() -> *mut u8 {
+     0 as *mut u8
+ }
+ 
+ #[lang = "owned_box"]
+ pub struct Box<T, A = Global>(Unique<T>, A);
+ 
+ impl<T> Box<T> {
+     pub fn new(x: T) -> Self {
+         box x
+     }
+ }
+ 
+ struct NonCopyStruct {
+     id: i32,
+ }
+ 
+ impl NonCopyStruct {
+     fn get_id(&self) -> i32 {
+         self.id
+     }
+ }
+ 
+ fn main() {
+     let my_box: Box<NonCopyStruct> = Box::new(NonCopyStruct { id: 42 });
+     let _moved_val = *my_box;
+ 
+ 
+     let my_box2: Box<NonCopyStruct> = Box::new(NonCopyStruct { id: 100 });
+ 
+     let _val_id = my_box2.id;
+ 
+     let _val_method_id = my_box2.get_id();
+ }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/rust/compile/break-label-loop.rs gcc-17-20260712/gcc/testsuite/rust/compile/break-label-loop.rs
*** gcc-17-20260705/gcc/testsuite/rust/compile/break-label-loop.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/rust/compile/break-label-loop.rs	Sun Jul 12 22:32:17 2026
***************
*** 0 ****
--- 1,10 ----
+ // `break 'label loop {}` used to ICE in the code generator because the
+ // labeled loop never registered its result temporary against the label.
+ #![feature(no_core)]
+ #![no_core]
+ 
+ pub fn foo() {
+     'a: loop {
+         break 'a loop {};
+     }
+ }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/rust/compile/c_string_null_byte_check.rs gcc-17-20260712/gcc/testsuite/rust/compile/c_string_null_byte_check.rs
*** gcc-17-20260705/gcc/testsuite/rust/compile/c_string_null_byte_check.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/rust/compile/c_string_null_byte_check.rs	Sun Jul 12 22:32:17 2026
***************
*** 0 ****
--- 1,21 ----
+ // { dg-additional-options "-frust-c-style-string-literals" }
+ #![feature(no_core, lang_items)]
+ #![no_core]
+ 
+ type c_char = u8;
+ 
+ #[lang = "CStr"]
+ pub struct CStr {
+     inner: [c_char]
+ }
+ 
+ impl CStr {
+     pub const fn to_ptr(&self) -> *const c_char {
+         &self.inner as *const [c_char] as *const c_char
+     }
+ }
+ 
+ pub fn main() {
+     let _fail = c"gc\0crs";
+     // { dg-error "null characters in C string literals are not supported" "" { target *-*-* } .-1 }
+ }
\ No newline at end of file
diff -Nrcpad gcc-17-20260705/gcc/testsuite/rust/compile/gat1.rs gcc-17-20260712/gcc/testsuite/rust/compile/gat1.rs
*** gcc-17-20260705/gcc/testsuite/rust/compile/gat1.rs	Sun Jul  5 22:32:16 2026
--- gcc-17-20260712/gcc/testsuite/rust/compile/gat1.rs	Sun Jul 12 22:32:17 2026
***************
*** 1,6 ****
--- 1,10 ----
+ #![feature(lang_items)]
  #![feature(no_core)]
  #![no_core]
  
+ #[lang = "sized"]
+ pub trait Sized {}
+ 
  trait Foo {
      type Bar<T>;
      type Baz<'a>;
diff -Nrcpad gcc-17-20260705/gcc/testsuite/rust/compile/gat2.rs gcc-17-20260712/gcc/testsuite/rust/compile/gat2.rs
*** gcc-17-20260705/gcc/testsuite/rust/compile/gat2.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/rust/compile/gat2.rs	Sun Jul 12 22:32:17 2026
***************
*** 0 ****
--- 1,35 ----
+ #![feature(no_core)]
+ #![no_core]
+ #![feature(lang_items)]
+ 
+ #[lang = "sized"]
+ trait Sized {}
+ 
+ pub enum Option<T> {
+     Some(T),
+     None,
+ }
+ 
+ trait Foo {
+     type Bar<T>;
+ 
+     fn foo<T>(self) -> Self::Bar<T>;
+ }
+ 
+ impl Foo for i32 {
+     type Bar<T> = Option<T>;
+ 
+     fn foo<T>(self) -> Self::Bar<T> {
+         Option::None
+     }
+ }
+ 
+ pub fn main() -> i32 {
+     let a = 15;
+     let res: Option<i8> = a.foo::<i8>();
+ 
+     match res {
+         Option::None => 0,
+         Option::Some(_) => 1,
+     }
+ }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/rust/compile/gat3.rs gcc-17-20260712/gcc/testsuite/rust/compile/gat3.rs
*** gcc-17-20260705/gcc/testsuite/rust/compile/gat3.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/rust/compile/gat3.rs	Sun Jul 12 22:32:17 2026
***************
*** 0 ****
--- 1,26 ----
+ #![feature(no_core)]
+ #![feature(lang_items)]
+ #![no_core]
+ 
+ #[lang = "sized"]
+ trait Sized {}
+ 
+ trait Foo {
+     type Bar<T>;
+ 
+     fn foo<T>(self, value: T) -> Self::Bar<T>;
+ }
+ 
+ impl Foo for i32 {
+     type Bar<T> = T;
+ 
+     fn foo<T>(self, value: T) -> Self::Bar<T> {
+         value
+     }
+ }
+ 
+ fn main() {
+     let a = 15;
+ 
+     let _b = a.foo::<i8>(14i8);
+ }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/rust/compile/gat4.rs gcc-17-20260712/gcc/testsuite/rust/compile/gat4.rs
*** gcc-17-20260705/gcc/testsuite/rust/compile/gat4.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/rust/compile/gat4.rs	Sun Jul 12 22:32:17 2026
***************
*** 0 ****
--- 1,25 ----
+ #![feature(no_core)]
+ #![feature(lang_items)]
+ #![no_core]
+ 
+ #[lang = "sized"]
+ trait Sized {}
+ 
+ pub struct Pair<A, B>(A, B);
+ 
+ trait Foo {
+     type Out<A, B>;
+     fn build<A, B>(self, a: A, b: B) -> Self::Out<A, B>;
+ }
+ 
+ impl Foo for i32 {
+     type Out<A, B> = Pair<A, B>;
+     fn build<A, B>(self, a: A, b: B) -> Self::Out<A, B> {
+         Pair(a, b)
+     }
+ }
+ 
+ fn main() {
+     let x: i32 = 1;
+     let _p = x.build::<i32, i64>(2, 3i64);
+ }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/rust/compile/gat5.rs gcc-17-20260712/gcc/testsuite/rust/compile/gat5.rs
*** gcc-17-20260705/gcc/testsuite/rust/compile/gat5.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/rust/compile/gat5.rs	Sun Jul 12 22:32:17 2026
***************
*** 0 ****
--- 1,23 ----
+ #![feature(no_core)]
+ #![feature(lang_items)]
+ #![no_core]
+ 
+ #[lang = "sized"]
+ trait Sized {}
+ 
+ trait Foo {
+     type Bar<T>;
+     fn put<T>(self, x: Self::Bar<T>) -> Self::Bar<T>;
+ }
+ 
+ impl Foo for i32 {
+     type Bar<T> = T;
+     fn put<T>(self, x: Self::Bar<T>) -> Self::Bar<T> {
+         x
+     }
+ }
+ 
+ fn main() {
+     let x: i32 = 1;
+     let _r = x.put::<i64>(2i64);
+ }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/rust/compile/gat6.rs gcc-17-20260712/gcc/testsuite/rust/compile/gat6.rs
*** gcc-17-20260705/gcc/testsuite/rust/compile/gat6.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/rust/compile/gat6.rs	Sun Jul 12 22:32:17 2026
***************
*** 0 ****
--- 1,23 ----
+ #![feature(no_core)]
+ #![feature(lang_items)]
+ #![no_core]
+ 
+ #[lang = "sized"]
+ trait Sized {}
+ 
+ trait Foo {
+     type Bar<T>;
+     fn nest<T>(self, x: T) -> Self::Bar<Self::Bar<T>>;
+ }
+ 
+ impl Foo for i32 {
+     type Bar<T> = T;
+     fn nest<T>(self, x: T) -> Self::Bar<Self::Bar<T>> {
+         x
+     }
+ }
+ 
+ fn main() {
+     let x: i32 = 1;
+     let _r = x.nest::<i64>(5i64);
+ }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/rust/compile/gat7.rs gcc-17-20260712/gcc/testsuite/rust/compile/gat7.rs
*** gcc-17-20260705/gcc/testsuite/rust/compile/gat7.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/rust/compile/gat7.rs	Sun Jul 12 22:32:17 2026
***************
*** 0 ****
--- 1,18 ----
+ #![feature(no_core)]
+ #![feature(lang_items)]
+ #![no_core]
+ 
+ #[lang = "sized"]
+ trait Sized {}
+ 
+ trait LendingIter {
+     type Item<'a>;
+ }
+ 
+ struct Foo; // { dg-warning "struct is never constructed" }
+ 
+ impl LendingIter for Foo {
+     type Item<'a> = &'a i32;
+ }
+ 
+ fn main() {}
diff -Nrcpad gcc-17-20260705/gcc/testsuite/rust/compile/gat8.rs gcc-17-20260712/gcc/testsuite/rust/compile/gat8.rs
*** gcc-17-20260705/gcc/testsuite/rust/compile/gat8.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/rust/compile/gat8.rs	Sun Jul 12 22:32:17 2026
***************
*** 0 ****
--- 1,21 ----
+ #![feature(no_core)]
+ #![feature(lang_items)]
+ #![no_core]
+ 
+ #[lang = "sized"]
+ trait Sized {}
+ 
+ trait Foo {
+     type Bar<T>;
+     fn make<T>(self) -> Self::Bar<T>;
+ }
+ 
+ impl Foo for i32 {
+     type Bar<T> = T;
+     fn make<T>(self) -> Self::Bar<T> { loop {} }
+ }
+ 
+ fn main() {
+     let x: i32 = 1;
+     let _r = x.make::<i32, i64>(); // { dg-error "generic item takes at most 1 type arguments but 2 were supplied" }
+ }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/rust/compile/infer-type-issue-3583.rs gcc-17-20260712/gcc/testsuite/rust/compile/infer-type-issue-3583.rs
*** gcc-17-20260705/gcc/testsuite/rust/compile/infer-type-issue-3583.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/rust/compile/infer-type-issue-3583.rs	Sun Jul 12 22:32:17 2026
***************
*** 0 ****
--- 1,23 ----
+ #![feature(no_core)]
+ #![no_core]
+ 
+ struct Test10 {
+     a: _, // { dg-error "the placeholder ... is not allowed within types on item" }
+ }
+ 
+ struct Test11 {
+     a: _, // { dg-error "the placeholder ... is not allowed within types on item" }
+     b: i32,
+ }
+ 
+ struct Test12 {
+     a: (_, _), // { dg-error "the placeholder ... is not allowed within types on item" }
+ }
+ 
+ struct Test13 {
+     a: [_; _], // { dg-error "the placeholder ... is not allowed within types on item" }
+ }
+ 
+ struct Test14 {
+     a: [i32; _], // { dg-error "the placeholder ... is not allowed within types on item" }
+ }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/rust/compile/issue-2036.rs gcc-17-20260712/gcc/testsuite/rust/compile/issue-2036.rs
*** gcc-17-20260705/gcc/testsuite/rust/compile/issue-2036.rs	Sun Jul  5 22:32:16 2026
--- gcc-17-20260712/gcc/testsuite/rust/compile/issue-2036.rs	Sun Jul 12 22:32:17 2026
*************** impl<H: StreamHasher> Hash<H> for u8 {
*** 29,35 ****
      fn hash2(&self, hasher: &H) -> u64 {
          let mut stream = hasher.stream();
          self.input_stream(&mut stream);
-         // { dg-error "type annotations needed" "" { target *-*-* } .-1 }
          Stream::result(&stream)
      }
  }
--- 29,34 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/rust/compile/issue-2479.rs gcc-17-20260712/gcc/testsuite/rust/compile/issue-2479.rs
*** gcc-17-20260705/gcc/testsuite/rust/compile/issue-2479.rs	Sun Jul  5 22:32:16 2026
--- gcc-17-20260712/gcc/testsuite/rust/compile/issue-2479.rs	Sun Jul 12 22:32:17 2026
*************** enum Dragon {
*** 9,15 ****
  
  fn oblivion() -> Dragon::Born {
  // { dg-error "expected type, found variant of .Dragon::Born." "" { target *-*-* } .-1 }
- // { dg-error "failed to resolve return type" "" { target *-*-* } .-2 }
      Dragon::Born
  }
  
--- 9,14 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/rust/compile/issue-2905-2.rs gcc-17-20260712/gcc/testsuite/rust/compile/issue-2905-2.rs
*** gcc-17-20260705/gcc/testsuite/rust/compile/issue-2905-2.rs	Sun Jul  5 22:32:16 2026
--- gcc-17-20260712/gcc/testsuite/rust/compile/issue-2905-2.rs	Sun Jul 12 22:32:17 2026
*************** pub mod core {
*** 76,92 ****
  
          impl<T> Foo for Weird<T> {}
  
!         // impl<T> core::iter::Iterator for Iter<T> {
!         //     type Item = &T;
  
!         //     fn next(&mut self) -> Option<&T> {
!         //         if self.is_empty() {
!         //             Option::None
!         //         } else {
!         //             Option::Some(&*self.next_unchecked())
!         //         }
!         //     }
!         // }
  
          union Repr<T> {
              pub(crate) rust: *const [T],
--- 76,88 ----
  
          impl<T> Foo for Weird<T> {}
  
!         impl<T> crate::core::iter::Iterator for Weird<T> {
!             type Item = &T;
  
!             fn next(&mut self) -> Option<&T> {
!                 Option::None
!             }
!         }
  
          union Repr<T> {
              pub(crate) rust: *const [T],
diff -Nrcpad gcc-17-20260705/gcc/testsuite/rust/compile/issue-4293.rs gcc-17-20260712/gcc/testsuite/rust/compile/issue-4293.rs
*** gcc-17-20260705/gcc/testsuite/rust/compile/issue-4293.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/rust/compile/issue-4293.rs	Sun Jul 12 22:32:17 2026
***************
*** 0 ****
--- 1,32 ----
+ #![feature(no_core)]
+ #![no_core]
+ #![feature(lang_items)]
+ 
+ #[lang = "sized"]
+ pub trait Sized {}
+ 
+ trait Foo {
+     type Bar<T>;
+ 
+     fn foo<T>(self, value: T) -> Self::Bar<T>;
+     fn baz<T>(self, value: T) -> Self::Bar<T>;
+ }
+ 
+ impl Foo for i32 {
+     type Bar<T> = T;
+ 
+     fn foo<T>(self, value: T) -> Self::Bar<T> {
+         value
+     }
+ 
+     fn baz<T>(self, value: T) -> Self::Bar<T> {
+         value
+     }
+ }
+ 
+ fn main() {
+     let a = 15;
+ 
+     let _b = a.foo::<i8>(14i8);
+     let _c = a.baz::<u32>(32u32);
+ }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/rust/compile/issue-4302.rs gcc-17-20260712/gcc/testsuite/rust/compile/issue-4302.rs
*** gcc-17-20260705/gcc/testsuite/rust/compile/issue-4302.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/rust/compile/issue-4302.rs	Sun Jul 12 22:32:17 2026
***************
*** 0 ****
--- 1,12 ----
+ #![feature(no_core, intrinsics, staged_api, lang_items)]
+ #![no_core]
+ 
+ #[lang = "sized"]
+ pub trait Sized {}
+ 
+ pub struct Foo<const N: usize>;
+ 
+ pub fn foo<const N: usize>() -> Foo<{ N + 1 }> {
+     // { dg-error "failed to resolve const expression" "" { target *-*-* } .-1 }
+     Foo
+ }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/rust/compile/issue-4471-1.rs gcc-17-20260712/gcc/testsuite/rust/compile/issue-4471-1.rs
*** gcc-17-20260705/gcc/testsuite/rust/compile/issue-4471-1.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/rust/compile/issue-4471-1.rs	Sun Jul 12 22:32:17 2026
***************
*** 0 ****
--- 1,10 ----
+ #![feature(no_core, intrinsics, staged_api, lang_items)]
+ #![no_core]
+ 
+ #[lang = "sized"]
+ pub trait Sized {}
+ 
+ trait Foo<T> {}
+ trait Bar: Foo {} // { dg-error {generic item takes at least 1 type arguments but 0 were supplied \[E0107\]} }
+ impl<T> Bar for T {}
+ impl Foo<i32> for i32 {}
diff -Nrcpad gcc-17-20260705/gcc/testsuite/rust/compile/issue-4471-2.rs gcc-17-20260712/gcc/testsuite/rust/compile/issue-4471-2.rs
*** gcc-17-20260705/gcc/testsuite/rust/compile/issue-4471-2.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/rust/compile/issue-4471-2.rs	Sun Jul 12 22:32:17 2026
***************
*** 0 ****
--- 1,28 ----
+ #![feature(no_core, intrinsics, staged_api, lang_items)]
+ #![no_core]
+ 
+ #[lang = "sized"]
+ pub trait Sized {}
+ 
+ trait Foo<T> {
+     fn get(&self) -> T;
+ }
+ 
+ trait Bar: Foo<i32> + Foo { // { dg-error {generic item takes at least 1 type arguments but 0 were supplied \[E0107\]} }
+     fn double_get(&self) -> i32 {
+         self.get() + self.get()
+     }
+ }
+ 
+ impl<T> Bar for T where T: Foo<i32> {}
+ 
+ impl Foo<i32> for i32 {
+     fn get(&self) -> i32 {
+         *self
+     }
+ }
+ 
+ fn main() {
+     let x: i32 = 1;
+     Bar::double_get(&x);
+ }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/rust/compile/issue-4476.rs gcc-17-20260712/gcc/testsuite/rust/compile/issue-4476.rs
*** gcc-17-20260705/gcc/testsuite/rust/compile/issue-4476.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/rust/compile/issue-4476.rs	Sun Jul 12 22:32:17 2026
***************
*** 0 ****
--- 1,10 ----
+ #![feature(no_core)]
+ #![no_core]
+ 
+ struct Foo {}
+ struct S {}
+ 
+ fn main() {
+     Foo { #[cfg(feature = -1)] .. } = S {};
+     // { dg-error "attributes are not allowed before .* in a struct expression" "" { target *-*-* } .-1 }
+ }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/rust/compile/issue-4481.rs gcc-17-20260712/gcc/testsuite/rust/compile/issue-4481.rs
*** gcc-17-20260705/gcc/testsuite/rust/compile/issue-4481.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/rust/compile/issue-4481.rs	Sun Jul 12 22:32:17 2026
***************
*** 0 ****
--- 1,25 ----
+ #![feature(no_core, intrinsics, staged_api, lang_items)]
+ #![no_core]
+ 
+ #[lang = "sized"]
+ pub trait Sized {}
+ 
+ trait Trait<T: NewTrait> {}
+ 
+ fn foo<T>()
+ where
+     T: Trait<for<'b> fn(&'b u32)>, // { dg-error {bounds not satisfied for abi:rust fnptr .& u32 ,. -> .. .NewTrait. is not satisfied \[E0277\]} }
+ {
+ }
+ 
+ impl<'a> Trait<fn(&'a u32)> for () {} // { dg-error {bounds not satisfied for abi:rust fnptr .& u32 ,. -> .. .NewTrait. is not satisfied \[E0277\]} }
+ 
+ fn main() {
+     foo::<()>();
+ }
+ 
+ trait NewTrait {
+     type Assoc;
+     const C: Self::Assoc;
+     fn f(&self) -> Self::Assoc;
+ }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/rust/compile/issue-4486-1.rs gcc-17-20260712/gcc/testsuite/rust/compile/issue-4486-1.rs
*** gcc-17-20260705/gcc/testsuite/rust/compile/issue-4486-1.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/rust/compile/issue-4486-1.rs	Sun Jul 12 22:32:17 2026
***************
*** 0 ****
--- 1,15 ----
+ #![feature(no_core, intrinsics, staged_api, lang_items)]
+ #![no_core]
+ 
+ #[lang = "sized"]
+ pub trait Sized {}
+ 
+ trait Number {
+     fn from<T>(n: T) -> Self;
+ }
+ 
+ trait NumConv {}
+ 
+ fn main() {
+     let _: f64 = Number::from(0.0f64); // { dg-error {bounds not satisfied for f64 .Number. is not satisfied \[E0277\]} }
+ }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/rust/compile/issue-4486-2.rs gcc-17-20260712/gcc/testsuite/rust/compile/issue-4486-2.rs
*** gcc-17-20260705/gcc/testsuite/rust/compile/issue-4486-2.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/rust/compile/issue-4486-2.rs	Sun Jul 12 22:32:17 2026
***************
*** 0 ****
--- 1,41 ----
+ #![feature(no_core, intrinsics, staged_api, lang_items)]
+ #![no_core]
+ 
+ #[lang = "sized"]
+ pub trait Sized {}
+ 
+ pub trait Number: NumConv {
+     fn from<T: Number>(n: T) -> Self;
+ }
+ 
+ trait NumberExt: Number {
+     fn to_double(&self) -> f64 {
+         self.to_float() * 2.0
+     }
+ }
+ 
+ impl<T: Number> NumberExt for T {}
+ 
+ impl Number for f64 {
+     fn from<T: Number + NewTrait>(n: T) -> f64 { // { dg-error {bounds not satisfied for f64 .NewTrait. is not satisfied \[E0277\]} }
+         n.to_float()
+     }
+ }
+ 
+ pub trait NumConv {
+     fn to_float(&self) -> f64;
+ }
+ 
+ impl NumConv for f64 {
+     fn to_float(&self) -> f64 {
+         *self
+     }
+ }
+ 
+ pub fn main() {
+     let _: f64 = Number::from(0.0f64);
+ }
+ 
+ trait NewTrait {
+     type Assoc;
+ }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/rust/compile/issue-4538.rs gcc-17-20260712/gcc/testsuite/rust/compile/issue-4538.rs
*** gcc-17-20260705/gcc/testsuite/rust/compile/issue-4538.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/rust/compile/issue-4538.rs	Sun Jul 12 22:32:17 2026
***************
*** 0 ****
--- 1,22 ----
+ #![feature(no_core)]
+ #![no_core]
+ 
+ extern "C" {
+     fn printf(s: *const i8, ...);
+ }
+ 
+ fn dump_number(num: i32) {
+     unsafe {
+         let a = "%i\n\0";
+         let c = a as *const str as *const i8;
+         printf(c, num);
+     }
+ }
+ 
+ fn main() -> i32 {
+     let c = 'block_c: {
+         break 'block_c 555;
+     };
+     dump_number(c);
+     0
+ }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/rust/compile/issue-4592.rs gcc-17-20260712/gcc/testsuite/rust/compile/issue-4592.rs
*** gcc-17-20260705/gcc/testsuite/rust/compile/issue-4592.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/rust/compile/issue-4592.rs	Sun Jul 12 22:32:17 2026
***************
*** 0 ****
--- 1,22 ----
+ #![feature(no_core, intrinsics, staged_api, lang_items)]
+ #![no_core]
+ 
+ #[lang = "sized"]
+ pub trait Sized {}
+ 
+ extern "rust-intrinsic" {
+     #[rustc_const_stable(feature = "const_ptr_offset", since = "1.61.0")]
+     fn offset<T>(dst: *const T, offset: isize) -> *const T;
+ }
+ 
+ #[lang = "const_ptr"]
+ impl<T> *const T {
+     pub const unsafe fn offset(self, count: isize) -> *const T {
+         unsafe { offset(self, count) } // { dg-error {unknown element size type for .const struct \*const \[i32\].} }
+     }
+ }
+ 
+ fn main() {
+     let my_slice: &[i32] = &[1, 2, 3];
+     let ptr = unsafe { (my_slice as *const [i32]).offset(0) };
+ }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/rust/compile/issue-4617.rs gcc-17-20260712/gcc/testsuite/rust/compile/issue-4617.rs
*** gcc-17-20260705/gcc/testsuite/rust/compile/issue-4617.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/rust/compile/issue-4617.rs	Sun Jul 12 22:32:17 2026
***************
*** 0 ****
--- 1,8 ----
+ #![feature(no_core)]
+ #![no_core]
+ 
+ struct Apple;
+ 
+ enum Delicious {
+     ApplePie = Apple::PIE, // { dg-error "failed to resolve path segment using an impl Probe" }
+ }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/rust/compile/lang-owned-box-error1.rs gcc-17-20260712/gcc/testsuite/rust/compile/lang-owned-box-error1.rs
*** gcc-17-20260705/gcc/testsuite/rust/compile/lang-owned-box-error1.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/rust/compile/lang-owned-box-error1.rs	Sun Jul 12 22:32:17 2026
***************
*** 0 ****
--- 1,15 ----
+ #![feature(no_core, lang_items, box_syntax)]
+ #![no_core]
+ 
+ #[lang = "sized"]
+ pub trait Sized {}
+ 
+ #[lang = "owned_box"]
+ pub enum EnumBox<T> { // { dg-error "language item must be applied to a struct" }
+     Some(T),
+     None,
+ }
+ 
+ fn _foo() {
+     let _ = box 5;
+ }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/rust/compile/lang-owned-box-error2.rs gcc-17-20260712/gcc/testsuite/rust/compile/lang-owned-box-error2.rs
*** gcc-17-20260705/gcc/testsuite/rust/compile/lang-owned-box-error2.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/rust/compile/lang-owned-box-error2.rs	Sun Jul 12 22:32:17 2026
***************
*** 0 ****
--- 1,12 ----
+ #![feature(no_core, lang_items, box_syntax)]
+ #![no_core]
+ 
+ #[lang = "sized"]
+ pub trait Sized {}
+ 
+ #[lang = "owned_box"]
+ pub struct BadBox;
+ 
+ fn _foo() {
+     let _ = box 5; // { dg-error "lang item must be applied to a struct with at least 1 generic argument" }
+ }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/rust/compile/macros/builtin/eager4.rs gcc-17-20260712/gcc/testsuite/rust/compile/macros/builtin/eager4.rs
*** gcc-17-20260705/gcc/testsuite/rust/compile/macros/builtin/eager4.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/rust/compile/macros/builtin/eager4.rs	Sun Jul 12 22:32:17 2026
***************
*** 0 ****
--- 1,11 ----
+ #![feature(no_core)]
+ #![feature(rustc_attrs)]
+ #![no_core]
+ 
+ #[rustc_builtin_macro]
+ macro_rules! concat {
+     ($($e:expr),* $(,)?) => {{ /* built in */ }}
+ }
+ 
+ // { dg-error "could not resolve" "" { target *-*-* } .+1 }
+ pub const X: &'static str = concat!("A", stringify!(B), "C", stringify!(D), "E");
diff -Nrcpad gcc-17-20260705/gcc/testsuite/rust/compile/missing-abi_0.rs gcc-17-20260712/gcc/testsuite/rust/compile/missing-abi_0.rs
*** gcc-17-20260705/gcc/testsuite/rust/compile/missing-abi_0.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/rust/compile/missing-abi_0.rs	Sun Jul 12 22:32:17 2026
***************
*** 0 ****
--- 1,12 ----
+ // { dg-additional-options "-frust-unused-check-2.0" }
+ #![feature(no_core)]
+ #![no_core]
+ 
+ extern {
+ // { dg-warning "extern declarations without an explicit ABI are deprecated" "" { target *-*-* } .-1 }
+     fn foo();
+ }
+ 
+ extern "C" {
+     fn bar();
+ }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/rust/compile/non-contiguous-range-endpoints_0.rs gcc-17-20260712/gcc/testsuite/rust/compile/non-contiguous-range-endpoints_0.rs
*** gcc-17-20260705/gcc/testsuite/rust/compile/non-contiguous-range-endpoints_0.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/rust/compile/non-contiguous-range-endpoints_0.rs	Sun Jul 12 22:32:17 2026
***************
*** 0 ****
--- 1,20 ----
+ // { dg-additional-options "-frust-unused-check-2.0" }
+ #![feature(no_core, exclusive_range_pattern)]
+ #![no_core]
+ 
+ pub fn f(x: u8) -> u8 {
+     match x {
+         20..30 => 1,
+ // { dg-warning "multiple ranges are one apart" "" { target *-*-* } .-1 }
+         31..=40 => 2,
+         _ => 0,
+     }
+ }
+ 
+ pub fn g(x: u8) -> u8 {
+     match x {
+         0..10 => 1,
+         10..=20 => 2,
+         _ => 0,
+     }
+ }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/rust/compile/non-shorthand-field-patterns_0.rs gcc-17-20260712/gcc/testsuite/rust/compile/non-shorthand-field-patterns_0.rs
*** gcc-17-20260705/gcc/testsuite/rust/compile/non-shorthand-field-patterns_0.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/rust/compile/non-shorthand-field-patterns_0.rs	Sun Jul 12 22:32:17 2026
***************
*** 0 ****
--- 1,15 ----
+ // { dg-additional-options "-frust-unused-check-2.0" }
+ #![feature(no_core)]
+ #![no_core]
+ 
+ pub struct Point {
+     pub x: i32,
+     pub y: i32,
+ }
+ 
+ pub fn foo(p: Point) -> i32 {
+     match p {
+ 	Point { x: x, y: _y } => x,
+ // { dg-warning "in this pattern is redundant" "" { target *-*-* } .-1 }
+     }
+ }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/rust/compile/torture/traits18.rs gcc-17-20260712/gcc/testsuite/rust/compile/torture/traits18.rs
*** gcc-17-20260705/gcc/testsuite/rust/compile/torture/traits18.rs	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/gcc/testsuite/rust/compile/torture/traits18.rs	Thu Jan  1 00:00:00 1970
***************
*** 1,12 ****
- #![feature(no_core)]
- #![no_core]
- 
- #![feature(lang_items)]
- #[lang = "sized"]
- pub trait Sized {}
- 
- trait Foo<'a> {}
- 
- trait Bar {
-     type Item: for<'a> Foo<'a>;
- }
--- 0 ----
diff -Nrcpad gcc-17-20260705/gcc/testsuite/rust/compile/torture/traits18.rs.disabled gcc-17-20260712/gcc/testsuite/rust/compile/torture/traits18.rs.disabled
*** gcc-17-20260705/gcc/testsuite/rust/compile/torture/traits18.rs.disabled	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/rust/compile/torture/traits18.rs.disabled	Sun Jul 12 22:32:17 2026
***************
*** 0 ****
--- 1,12 ----
+ #![feature(no_core)]
+ #![no_core]
+ 
+ #![feature(lang_items)]
+ #[lang = "sized"]
+ pub trait Sized {}
+ 
+ trait Foo<'a> {}
+ 
+ trait Bar {
+     type Item: for<'a> Foo<'a>;
+ }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/rust/compile/type-alias-generic-params.rs gcc-17-20260712/gcc/testsuite/rust/compile/type-alias-generic-params.rs
*** gcc-17-20260705/gcc/testsuite/rust/compile/type-alias-generic-params.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/rust/compile/type-alias-generic-params.rs	Sun Jul 12 22:32:17 2026
***************
*** 0 ****
--- 1,9 ----
+ // Generic type aliases used to ICE in the reachability pass because their
+ // generic parameters were never resolved into the type context.
+ #![feature(no_core, lang_items)]
+ #![no_core]
+ 
+ #[lang = "sized"]
+ pub trait Sized {}
+ 
+ pub type Alias<T> = T;
diff -Nrcpad gcc-17-20260705/gcc/testsuite/rust/compile/unused-visibilities_0.rs gcc-17-20260712/gcc/testsuite/rust/compile/unused-visibilities_0.rs
*** gcc-17-20260705/gcc/testsuite/rust/compile/unused-visibilities_0.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/rust/compile/unused-visibilities_0.rs	Sun Jul 12 22:32:17 2026
***************
*** 0 ****
--- 1,6 ----
+ // { dg-additional-options "-frust-unused-check-2.0" }
+ #![feature(no_core)]
+ #![no_core]
+ 
+ pub const _: i32 = 0;
+ // { dg-warning "visibility qualifier on a .const _. item is unused" "" { target *-*-* } .-1 }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/rust/execute/arith-offset.rs gcc-17-20260712/gcc/testsuite/rust/execute/arith-offset.rs
*** gcc-17-20260705/gcc/testsuite/rust/execute/arith-offset.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/rust/execute/arith-offset.rs	Sun Jul 12 22:32:17 2026
***************
*** 0 ****
--- 1,23 ----
+ #![feature(no_core, intrinsics, lang_items)]
+ #![no_core]
+ 
+ #[lang = "sized"]
+ pub trait Sized {}
+ 
+ extern "rust-intrinsic" {
+     fn arith_offset<T>(dst: *const T, offset: isize) -> *const T;
+ }
+ 
+ fn main() -> i32 {
+     let base_addr: usize = 0;
+     let ptr = base_addr as *const u64;
+ 
+     unsafe {
+         let wrap_ptr = arith_offset(ptr, -1);
+         if wrap_ptr as isize == -8_isize {
+             0 
+         } else {
+             1 
+         }
+     }
+ }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/rust/execute/drop-local-binding-lifo.rs gcc-17-20260712/gcc/testsuite/rust/execute/drop-local-binding-lifo.rs
*** gcc-17-20260705/gcc/testsuite/rust/execute/drop-local-binding-lifo.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/rust/execute/drop-local-binding-lifo.rs	Sun Jul 12 22:32:17 2026
***************
*** 0 ****
--- 1,56 ----
+ // { dg-output "C\r*\nB\r*\nA\r*\n" }
+ // { dg-additional-options "-w" }
+ #![feature(no_core)]
+ #![feature(lang_items)]
+ #![no_core]
+ 
+ extern "C" {
+     fn printf(s: *const i8, ...);
+ }
+ 
+ #[lang = "sized"]
+ pub trait Sized {}
+ 
+ #[lang = "drop"]
+ pub trait Drop {
+     fn drop(&mut self);
+ }
+ 
+ struct A;
+ struct B;
+ struct C;
+ 
+ impl Drop for A {
+     fn drop(&mut self) {
+         let msg = "A\n\0" as *const str as *const i8;
+         unsafe {
+             printf(msg);
+         }
+     }
+ }
+ 
+ impl Drop for B {
+     fn drop(&mut self) {
+         let msg = "B\n\0" as *const str as *const i8;
+         unsafe {
+             printf(msg);
+         }
+     }
+ }
+ 
+ impl Drop for C {
+     fn drop(&mut self) {
+         let msg = "C\n\0" as *const str as *const i8;
+         unsafe {
+             printf(msg);
+         }
+     }
+ }
+ 
+ fn main() -> i32 {
+     let _a = A;
+     let _b = B;
+     let _c = C;
+ 
+     0
+ }
\ No newline at end of file
diff -Nrcpad gcc-17-20260705/gcc/testsuite/rust/execute/drop-nested-block-scope.rs gcc-17-20260712/gcc/testsuite/rust/execute/drop-nested-block-scope.rs
*** gcc-17-20260705/gcc/testsuite/rust/execute/drop-nested-block-scope.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/rust/execute/drop-nested-block-scope.rs	Sun Jul 12 22:32:17 2026
***************
*** 0 ****
--- 1,86 ----
+ // { dg-output "inner\r*\nmiddle2\r*\nmiddle\r*\nouter2\r*\nouter\r*\n" }
+ // { dg-additional-options "-w" }
+ #![feature(no_core)]
+ #![feature(lang_items)]
+ #![no_core]
+ 
+ extern "C" {
+     fn printf(s: *const i8, ...);
+ }
+ 
+ #[lang = "sized"]
+ pub trait Sized {}
+ 
+ #[lang = "drop"]
+ pub trait Drop {
+     fn drop(&mut self);
+ }
+ 
+ struct Outer;
+ struct Outer2;
+ struct Middle;
+ struct Middle2;
+ struct Inner;
+ 
+ impl Drop for Outer {
+     fn drop(&mut self) {
+         let msg = "outer\n\0" as *const str as *const i8;
+         unsafe {
+             printf(msg);
+         }
+     }
+ }
+ 
+ impl Drop for Outer2 {
+     fn drop(&mut self) {
+         let msg = "outer2\n\0" as *const str as *const i8;
+         unsafe {
+             printf(msg);
+         }
+     }
+ }
+ 
+ impl Drop for Middle {
+     fn drop(&mut self) {
+         let msg = "middle\n\0" as *const str as *const i8;
+         unsafe {
+             printf(msg);
+         }
+     }
+ }
+ 
+ impl Drop for Middle2 {
+     fn drop(&mut self) {
+         let msg = "middle2\n\0" as *const str as *const i8;
+         unsafe {
+             printf(msg);
+         }
+     }
+ }
+ 
+ impl Drop for Inner {
+     fn drop(&mut self) {
+         let msg = "inner\n\0" as *const str as *const i8;
+         unsafe {
+             printf(msg);
+         }
+     }
+ }
+ 
+ fn main() -> i32 {
+     let _outer = Outer;
+ 
+     {
+         let _middle = Middle;
+ 
+         {
+             let _inner = Inner;
+         }
+ 
+         let _middle2 = Middle2;
+     }
+ 
+     let _outer2 = Outer2;
+ 
+     0
+ }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/rust/execute/min-align-of-val.rs gcc-17-20260712/gcc/testsuite/rust/execute/min-align-of-val.rs
*** gcc-17-20260705/gcc/testsuite/rust/execute/min-align-of-val.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/rust/execute/min-align-of-val.rs	Sun Jul 12 22:32:17 2026
***************
*** 0 ****
--- 1,64 ----
+ // { dg-require-effective-target lp64 }
+ #![feature(no_core, intrinsics, lang_items)]
+ #![no_core]
+ 
+ #[lang = "sized"]
+ pub trait Sized {}
+ 
+ extern "rust-intrinsic" {
+     pub fn min_align_of_val<T: ?Sized>(_: *const T) -> usize;
+ }
+ 
+ trait TraitA {
+     fn foo(&self) {}
+ }
+ 
+ struct StructA {
+     _a: i32,
+     _b: i16,
+ }
+ 
+ impl TraitA for StructA {}
+ impl TraitA for u8 {}
+ 
+ fn main() -> i32 {
+     let val_i32: i32 = 32;
+     let align_i32 = unsafe { min_align_of_val(&val_i32 as *const i32) };
+ 
+     let val_struct = StructA { _a: 1, _b: 2 };
+     let align_struct = unsafe { min_align_of_val(&val_struct as *const StructA) };
+ 
+     let arr: [i32; 3] = [10, 20, 30];
+     let val_slice: &[i32] = &arr;
+     let align_slice = unsafe { min_align_of_val(val_slice as *const [i32]) };
+ 
+     let val_str: &str = "gccrs";
+     let align_str = unsafe { min_align_of_val(val_str as *const str) };
+ 
+     let val_dyn_struct = &val_struct as &dyn TraitA;
+     let align_dyn_struct = unsafe { min_align_of_val(val_dyn_struct as *const dyn TraitA) };
+ 
+     let val_u8: u8 = 7;
+     let align_u8 = unsafe { min_align_of_val(&val_u8 as *const u8) };
+ 
+     let val_dyn_u8 = &val_u8 as &dyn TraitA;
+     let align_dyn_u8 = unsafe { min_align_of_val(val_dyn_u8 as *const dyn TraitA) };
+ 
+     if align_i32 != 4 {
+         1
+     } else if align_struct != 4 {
+         2
+     } else if align_slice != 4 {
+         3
+     } else if align_str != 1 {
+         4
+     } else if align_dyn_struct != 4 {
+         5
+     } else if align_u8 != 1 {
+         6
+     } else if align_dyn_u8 != 1 {
+         7
+     } else {
+         0
+     }
+ }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/rust/execute/raw-pointer-aliasing.rs gcc-17-20260712/gcc/testsuite/rust/execute/raw-pointer-aliasing.rs
*** gcc-17-20260705/gcc/testsuite/rust/execute/raw-pointer-aliasing.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/rust/execute/raw-pointer-aliasing.rs	Sun Jul 12 22:32:17 2026
***************
*** 0 ****
--- 1,25 ----
+ // { dg-options "-O2" }
+ 
+ #![feature(no_core)]
+ #![no_core]
+ 
+ extern "C" {
+     fn malloc(n: u64) -> *mut u8;
+ }
+ 
+ fn f() -> i32 {
+     unsafe {
+         let p = malloc(4) as *mut i32;
+         *p = 27;
+         *(p as *mut i16) = 42;
+         *p
+     }
+ }
+ 
+ fn main() -> i32 {
+     if f() == 27 {
+         1
+     } else {
+         0
+     }
+ }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/rust/execute/size-of-val.rs gcc-17-20260712/gcc/testsuite/rust/execute/size-of-val.rs
*** gcc-17-20260705/gcc/testsuite/rust/execute/size-of-val.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/rust/execute/size-of-val.rs	Sun Jul 12 22:32:17 2026
***************
*** 0 ****
--- 1,63 ----
+ #![feature(no_core, intrinsics, lang_items)]
+ #![no_core]
+ 
+ #[lang = "sized"]
+ pub trait Sized {}
+ 
+ extern "rust-intrinsic" {
+     pub fn size_of_val<T: ?Sized>(_: *const T) -> usize;
+ }
+ 
+ trait TraitA {
+     fn foo(&self) {}
+ }
+ 
+ struct StructA {
+     _a: i32,
+     _b: i32,
+ }
+ 
+ impl TraitA for StructA {}
+ impl TraitA for u8 {}
+ 
+ fn main() -> i32 {
+     let val_i32: i32 = 32;
+     let size_i32 = unsafe { size_of_val(&val_i32 as *const i32) };
+ 
+     let val_struct = StructA { _a: 1, _b: 2 };
+     let size_struct = unsafe { size_of_val(&val_struct as *const StructA) };
+ 
+     let arr: [i32; 3] = [10, 20, 30];
+     let val_slice: &[i32] = &arr;
+     let size_slice = unsafe { size_of_val(val_slice as *const [i32]) };
+ 
+     let val_str: &str = "gccrs";
+     let size_str = unsafe { size_of_val(val_str as *const str) };
+ 
+     let val_dyn_struct = &val_struct as &dyn TraitA;
+     let size_dyn_struct = unsafe { size_of_val(val_dyn_struct as *const dyn TraitA) };
+ 
+     let val_u8: u8 = 7;
+     let size_u8 = unsafe { size_of_val(&val_u8 as *const u8) };
+ 
+     let val_dyn_u8 = &val_u8 as &dyn TraitA;
+     let size_dyn_u8 = unsafe { size_of_val(val_dyn_u8 as *const dyn TraitA) };
+ 
+     if size_i32 != 4 {
+         1
+     } else if size_struct != 8 {
+         2
+     } else if size_slice != 12 {
+         3
+     } else if size_str != 5 {
+         4
+     } else if size_dyn_struct != 8 {
+         5
+     } else if size_u8 != 1 {
+         6
+     } else if size_dyn_u8 != 1 {
+         7
+     } else {
+         0
+     }
+ }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/rust/execute/torture/c_string.rs gcc-17-20260712/gcc/testsuite/rust/execute/torture/c_string.rs
*** gcc-17-20260705/gcc/testsuite/rust/execute/torture/c_string.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/rust/execute/torture/c_string.rs	Sun Jul 12 22:32:17 2026
***************
*** 0 ****
--- 1,29 ----
+ // { dg-additional-options "-frust-c-style-string-literals" }
+ // { dg-output "gccrs" }
+ #![feature(no_core, lang_items)]
+ #![no_core]
+ 
+ extern "C" {
+     fn printf(s: *const u8, ...);
+ }
+ 
+ type c_char = u8;
+ 
+ #[lang = "CStr"]
+ pub struct CStr {
+     inner: [c_char]
+ }
+ 
+ impl CStr {
+     pub const fn to_ptr(&self) -> *const c_char {
+         &self.inner as *const [c_char] as *const c_char
+     }
+ }
+ 
+ fn main() -> i32 {
+     let a = c"gccrs";
+     unsafe {
+         printf(a.to_ptr());
+     }
+     0
+ }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/rust/execute/torture/c_string_ensure_null_term.rs gcc-17-20260712/gcc/testsuite/rust/execute/torture/c_string_ensure_null_term.rs
*** gcc-17-20260705/gcc/testsuite/rust/execute/torture/c_string_ensure_null_term.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/rust/execute/torture/c_string_ensure_null_term.rs	Sun Jul 12 22:32:17 2026
***************
*** 0 ****
--- 1,50 ----
+ // { dg-additional-options "-frust-c-style-string-literals" }
+ #![feature(no_core, intrinsics, staged_api, lang_items)]
+ #![no_core]
+ 
+ #[lang = "sized"]
+ pub trait Sized {}
+ 
+ // below's helper code copied from issue-1232.rs
+ extern "rust-intrinsic" {
+     #[rustc_const_stable(feature = "const_ptr_offset", since = "1.61.0")]
+     fn offset<T>(dst: *const T, offset: isize) -> *const T;
+ }
+ 
+ #[lang = "const_ptr"]
+ impl<T> *const T {
+     pub const unsafe fn offset(self, count: isize) -> *const T {
+         unsafe { offset(self, count) }
+     }
+ 
+     pub const unsafe fn add(self, count: usize) -> Self {
+         unsafe { self.offset(count as isize) }
+     }
+ 
+     pub const fn as_ptr(self) -> *const T {
+         self as *const T
+     }
+ }
+ 
+ extern "C" {
+     fn printf(s: *const u8, ...);
+ }
+ 
+ type c_char = u8;
+ 
+ #[lang = "CStr"]
+ pub struct CStr {
+     inner: [c_char]
+ }
+ 
+ impl CStr {
+     pub const fn to_ptr(&self) -> *const c_char {
+         &self.inner as *const [c_char] as *const c_char
+     }
+ }
+ 
+ pub fn main() -> u8 {
+     let a = c"gccrs";
+     let val = unsafe { a.to_ptr().add(5) };
+     unsafe { *val }
+ }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/rust/execute/torture/dyn_object.rs gcc-17-20260712/gcc/testsuite/rust/execute/torture/dyn_object.rs
*** gcc-17-20260705/gcc/testsuite/rust/execute/torture/dyn_object.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/rust/execute/torture/dyn_object.rs	Sun Jul 12 22:32:17 2026
***************
*** 0 ****
--- 1,73 ----
+ #![feature(no_core, lang_items)]
+ #![no_core]
+ 
+ #[lang = "sized"]
+ pub trait Sized {}
+ 
+ trait TraitA {
+     fn do_a(&self) -> i32;
+ }
+ 
+ trait TraitB {
+     fn do_b(&self) -> i32;
+ }
+ 
+ trait TraitC {}
+ 
+ struct StructX {
+     val: i32,
+ }
+ struct StructY {
+     val: i32,
+ }
+ 
+ impl TraitA for StructX {
+     fn do_a(&self) -> i32 {
+         self.val
+     }
+ }
+ 
+ impl TraitB for StructX {
+     fn do_b(&self) -> i32 {
+         self.val * 2
+     }
+ }
+ 
+ impl TraitC for StructX {}
+ 
+ impl TraitA for StructY {
+     fn do_a(&self) -> i32 {
+         self.val + 10
+     }
+ }
+ 
+ fn main() -> i32 {
+     let x = StructX { val: 0 };
+     let x1 = StructX { val: 1 };
+     let x2 = StructX { val: 2 };
+     let y = StructY { val: 3 };
+ 
+     let _dyn_a_x: &dyn TraitC = &x;
+ 
+     let dyn_a_x1: &dyn TraitA = &x1;
+ 
+     let dyn_a_x2: &dyn TraitA = &x2;
+ 
+     let dyn_a_y: &dyn TraitA = &y;
+ 
+     let dyn_b_x1: &dyn TraitB = &x1;
+ 
+     if x1.val != 1 || x2.val != 2 || y.val != 3 {
+         1
+     } else if dyn_a_x1.do_a() != 1 {
+         2
+     } else if dyn_a_x2.do_a() != 2 {
+         3
+     } else if dyn_a_y.do_a() != 13 {
+         4
+     } else if dyn_b_x1.do_b() != 2 {
+         5
+     } else {
+         0
+     }
+ }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/rust/execute/trait-multi-impl-generic.rs gcc-17-20260712/gcc/testsuite/rust/execute/trait-multi-impl-generic.rs
*** gcc-17-20260705/gcc/testsuite/rust/execute/trait-multi-impl-generic.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/rust/execute/trait-multi-impl-generic.rs	Sun Jul 12 22:32:17 2026
***************
*** 0 ****
--- 1,46 ----
+ #![feature(no_core, lang_items)]
+ #![no_core]
+ 
+ #[lang = "sized"]
+ pub trait Sized {}
+ 
+ trait TraitA {
+     fn do_a(&self) -> i32;
+ }
+ 
+ pub struct Container<T> {
+     pub val: i32,
+     pub _marker: T,
+ }
+ 
+ impl TraitA for Container<i32> {
+     fn do_a(&self) -> i32 {
+         self.val * 10
+     }
+ }
+ 
+ impl TraitA for Container<u32> {
+     fn do_a(&self) -> i32 {
+         self.val * 20
+     }
+ }
+ 
+ fn main() -> i32 {
+     let a = Container {
+         val: 10,
+         _marker: 0_i32,
+     };
+     let b = Container {
+         val: 20,
+         _marker: 0_u32,
+     };
+ 
+     let dyn_a = &a as &dyn TraitA;
+     let dyn_b = &b as &dyn TraitA;
+ 
+     if dyn_a.do_a() == 100 && dyn_b.do_a() == 400 {
+         0
+     } else {
+         1
+     }
+ }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/rust/execute/trait-multi-impl-generic2.rs gcc-17-20260712/gcc/testsuite/rust/execute/trait-multi-impl-generic2.rs
*** gcc-17-20260705/gcc/testsuite/rust/execute/trait-multi-impl-generic2.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/rust/execute/trait-multi-impl-generic2.rs	Sun Jul 12 22:32:17 2026
***************
*** 0 ****
--- 1,69 ----
+ #![feature(no_core, lang_items)]
+ #![no_core]
+ 
+ #[lang = "sized"]
+ pub trait Sized {}
+ 
+ trait TraitA {
+     fn do_a(&self) -> i32;
+ }
+ 
+ mod mod_a {
+     use super::TraitA;
+ 
+     pub struct StructX<T> {
+         pub val: i32,
+         _marker: T,
+     }
+ 
+     impl TraitA for StructX<i32> {
+         fn do_a(&self) -> i32 {
+             self.val * 10
+         }
+     }
+     impl TraitA for StructX<u32> {
+         fn do_a(&self) -> i32 {
+             self.val * 1000
+         }
+     }
+ }
+ 
+ mod mod_b {
+     use super::TraitA;
+ 
+     pub struct StructX<T> {
+         pub val: i32,
+         _marker: T,
+     }
+ 
+     impl TraitA for StructX<u32> {
+         fn do_a(&self) -> i32 {
+             self.val * 20
+         }
+     }
+     impl TraitA for StructX<i32> {
+         fn do_a(&self) -> i32 {
+             self.val * 2000
+         }
+     }
+ }
+ 
+ fn main() -> i32 {
+     let a = mod_a::StructX {
+         val: 10,
+         _marker: 0_i32,
+     };
+     let b = mod_b::StructX {
+         val: 20,
+         _marker: 0_u32,
+     };
+ 
+     let dyn_a = &a as &dyn TraitA;
+     let dyn_b = &b as &dyn TraitA;
+ 
+     if dyn_a.do_a() == 100 && dyn_b.do_a() == 400 {
+         0
+     } else {
+         1
+     }
+ }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/rust/execute/trait-multi-impl.rs gcc-17-20260712/gcc/testsuite/rust/execute/trait-multi-impl.rs
*** gcc-17-20260705/gcc/testsuite/rust/execute/trait-multi-impl.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/rust/execute/trait-multi-impl.rs	Sun Jul 12 22:32:17 2026
***************
*** 0 ****
--- 1,51 ----
+ #![feature(no_core, lang_items)]
+ #![no_core]
+ 
+ #[lang = "sized"]
+ pub trait Sized {}
+ 
+ trait TraitA {
+     fn do_a(&self) -> i32;
+ }
+ 
+ mod mod_a {
+     use super::TraitA;
+ 
+     pub struct StructX {
+         pub val: i32,
+     }
+ 
+     impl TraitA for StructX {
+         fn do_a(&self) -> i32 {
+             self.val * 10
+         }
+     }
+ }
+ 
+ mod mod_b {
+     use super::TraitA;
+ 
+     pub struct StructX {
+         pub val: i32,
+     }
+ 
+     impl TraitA for StructX {
+         fn do_a(&self) -> i32 {
+             self.val * 20
+         }
+     }
+ }
+ 
+ fn main() -> i32 {
+     let a = mod_a::StructX { val: 10 };
+     let b = mod_b::StructX { val: 20 };
+ 
+     let dyn_a = &a as &dyn TraitA;
+     let dyn_b = &b as &dyn TraitA;
+ 
+     if dyn_a.do_a() == 100 && dyn_b.do_a() == 400 {
+         0
+     } else {
+         1
+     }
+ }
diff -Nrcpad gcc-17-20260705/gcc/testsuite/rust/execute/write-bytes.rs gcc-17-20260712/gcc/testsuite/rust/execute/write-bytes.rs
*** gcc-17-20260705/gcc/testsuite/rust/execute/write-bytes.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/gcc/testsuite/rust/execute/write-bytes.rs	Sun Jul 12 22:32:17 2026
***************
*** 0 ****
--- 1,17 ----
+ #![feature(no_core, intrinsics, lang_items)]
+ #![no_core]
+ 
+ #[lang = "sized"]
+ pub trait Sized {}
+ 
+ extern "rust-intrinsic" {
+     fn write_bytes<T>(dst: *mut T, val: u8, count: usize);
+ }
+ 
+ fn main() -> i32 {
+     let mut x: u32 = 0;
+     unsafe { 
+         write_bytes(&mut x as *mut u32, 0xEC_u8, 1); 
+     }
+     if x == 0xECECECEC_u32 { 0 } else { 1 }
+ }
diff -Nrcpad gcc-17-20260705/gcc/timevar.def gcc-17-20260712/gcc/timevar.def
*** gcc-17-20260705/gcc/timevar.def	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/gcc/timevar.def	Sun Jul 12 22:32:17 2026
*************** DEFTIMEVAR (TV_GCSE_AFTER_RELOAD     , "
*** 287,293 ****
  DEFTIMEVAR (TV_REE		     , "ree")
  DEFTIMEVAR (TV_THREAD_PROLOGUE_AND_EPILOGUE, "thread pro- & epilogue")
  DEFTIMEVAR (TV_IFCVT2		     , "if-conversion 2")
- DEFTIMEVAR (TV_SPLIT_PATHS	     , "split paths")
  DEFTIMEVAR (TV_COMBINE_STACK_ADJUST  , "combine stack adjustments")
  DEFTIMEVAR (TV_PEEPHOLE2             , "peephole 2")
  DEFTIMEVAR (TV_RENAME_REGISTERS      , "rename registers")
--- 287,292 ----
diff -Nrcpad gcc-17-20260705/gcc/tree-call-cdce.cc gcc-17-20260712/gcc/tree-call-cdce.cc
*** gcc-17-20260705/gcc/tree-call-cdce.cc	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/gcc/tree-call-cdce.cc	Sun Jul 12 22:32:17 2026
*************** along with GCC; see the file COPYING3.
*** 39,44 ****
--- 39,46 ----
  #include "tree-eh.h"
  #include "tree-ssanames.h"
  #include "gimple-fold.h"
+ #include "value-query.h"
+ #include "value-range.h"
  
  
  /* This pass serves two closely-related purposes:
*************** use_internal_fn (gcall *call)
*** 1257,1279 ****
  					    is_arg_conds ? new_call : NULL);
  }
  
! /* Return true if LEN is an SSA_NAME known to have a boolean range, i.e. its
!    value is provably in [0, 1].  */
  
! static bool
! len_has_boolean_range_p (tree len, gimple *stmt)
  {
    if (TREE_CODE (len) != SSA_NAME || !INTEGRAL_TYPE_P (TREE_TYPE (len)))
!     return false;
!   return ssa_name_has_boolean_range (len, stmt);
  }
  
  /* Return true if CALL is a supported length-taking builtin whose length
!    argument is an SSA name known to have a boolean range.  On success,
!    set LEN_ARG to the argument index of the length.  */
  
  static bool
! can_shrink_wrap_len_p (gcall *call, unsigned *len_arg)
  {
    if (!gimple_call_builtin_p (call, BUILT_IN_MEMSET)
        || !gimple_vdef (call))
--- 1259,1298 ----
  					    is_arg_conds ? new_call : NULL);
  }
  
! /* Return the nonzero member of LEN's range if LEN is an SSA name with range
!    [0, 1] or the exact two-value set {0, N}.  Return NULL_TREE otherwise.  */
  
! static tree
! get_len_nonzero_value (tree len, gimple *stmt)
  {
    if (TREE_CODE (len) != SSA_NAME || !INTEGRAL_TYPE_P (TREE_TYPE (len)))
!     return NULL_TREE;
! 
!   if (ssa_name_has_boolean_range (len, stmt))
!     return build_one_cst (TREE_TYPE (len));
! 
!   int_range<2> range (TREE_TYPE (len));
!   if (!get_range_query (cfun)->range_of_expr (range, len, stmt)
!       || range.num_pairs () != 2)
!     return NULL_TREE;
! 
!   if (!wi::eq_p (range.lower_bound (0), 0)
!       || !wi::eq_p (range.upper_bound (0), 0))
!     return NULL_TREE;
! 
!   if (!wi::eq_p (range.lower_bound (1), range.upper_bound (1)))
!     return NULL_TREE;
! 
!   return wide_int_to_tree (TREE_TYPE (len), range.lower_bound (1));  
  }
  
  /* Return true if CALL is a supported length-taking builtin whose length
!    argument is an SSA name known to have a suitable range.  On success,
!    set LEN_ARG to the argument index of the length and, if NONZERO_LEN is
!    nonnull, set it to the nonzero member of the range.  */
  
  static bool
! can_shrink_wrap_len_p (gcall *call, unsigned *len_arg, tree *nonzero_len)
  {
    if (!gimple_call_builtin_p (call, BUILT_IN_MEMSET)
        || !gimple_vdef (call))
*************** can_shrink_wrap_len_p (gcall *call, unsi
*** 1284,1293 ****
      return false;
  
    tree len = gimple_call_arg (call, memset_len_arg);
!   if (!len_has_boolean_range_p (len, call))
      return false;
  
    *len_arg = memset_len_arg;
    return true;
  }
  
--- 1303,1315 ----
      return false;
  
    tree len = gimple_call_arg (call, memset_len_arg);
!   tree value = get_len_nonzero_value (len, call);
!   if (!value)
      return false;
  
    *len_arg = memset_len_arg;
+   if (nonzero_len)
+     *nonzero_len = value;
    return true;
  }
  
*************** gen_zero_len_conditions (tree len, vec<g
*** 1305,1317 ****
    *nconds = 1;
  }
  
! /* Shrink-wrap CALL whose LEN_ARG argument is known to be in [0, 1].
!    ZERO_LEN_RESULT is the value of the call result when its length is zero.
!    On the guarded path the length is one, so pin it to a constant for
!    subsequent folding.  */
  
  static void
! shrink_wrap_len_call (gcall *call, unsigned len_arg, tree zero_len_result)
  {
    tree lhs = gimple_call_lhs (call);
  
--- 1327,1340 ----
    *nconds = 1;
  }
  
! /* Shrink-wrap CALL whose LEN_ARG argument is known to be in [0, 1] or
!    {0, N}.  ZERO_LEN_RESULT is the value of the call result when its length
!    is zero.  On the guarded path the length is NONZERO_LEN, so pin it to that
!    constant for subsequent folding.  */
  
  static void
! shrink_wrap_len_call (gcall *call, unsigned len_arg, tree zero_len_result,
! 		      tree nonzero_len)
  {
    tree lhs = gimple_call_lhs (call);
  
*************** shrink_wrap_len_call (gcall *call, unsig
*** 1341,1348 ****
  
    shrink_wrap_one_built_in_call_with_conds (call, conds, nconds);
  
!   /* On the guarded path the length is one.  */
!   gimple_call_set_arg (call, len_arg, build_one_cst (TREE_TYPE (len)));
    update_stmt (call);
    gimple_stmt_iterator gsi = gsi_for_stmt (call);
    fold_stmt (&gsi);
--- 1364,1371 ----
  
    shrink_wrap_one_built_in_call_with_conds (call, conds, nconds);
  
!   /* On the guarded path the length is NONZERO_LEN.  */
!   gimple_call_set_arg (call, len_arg, nonzero_len);
    update_stmt (call);
    gimple_stmt_iterator gsi = gsi_for_stmt (call);
    fold_stmt (&gsi);
*************** shrink_wrap_conditional_dead_built_in_ca
*** 1363,1370 ****
        unsigned len_arg;
  
        /* memset returns its destination pointer on the zero-length path.  */
!       if (can_shrink_wrap_len_p (bi_call, &len_arg))
! 	shrink_wrap_len_call (bi_call, len_arg, gimple_call_arg (bi_call, 0));
        else if (gimple_call_lhs (bi_call))
  	use_internal_fn (bi_call);
        else
--- 1386,1395 ----
        unsigned len_arg;
  
        /* memset returns its destination pointer on the zero-length path.  */
!       tree nonzero_len;
!       if (can_shrink_wrap_len_p (bi_call, &len_arg, &nonzero_len))
! 	shrink_wrap_len_call (bi_call, len_arg, gimple_call_arg (bi_call, 0),
! 			      nonzero_len);
        else if (gimple_call_lhs (bi_call))
  	use_internal_fn (bi_call);
        else
*************** pass_call_cdce::execute (function *fun)
*** 1427,1433 ****
  	  unsigned len_arg;
            if (stmt
  	      && gimple_call_builtin_p (stmt, BUILT_IN_NORMAL)
! 	      && (can_shrink_wrap_len_p (stmt, &len_arg)
  		  || (gimple_call_lhs (stmt)
  		      ? can_use_internal_fn (stmt)
  		      : can_test_argument_range (stmt)))
--- 1452,1458 ----
  	  unsigned len_arg;
            if (stmt
  	      && gimple_call_builtin_p (stmt, BUILT_IN_NORMAL)
! 	      && (can_shrink_wrap_len_p (stmt, &len_arg, nullptr)
  		  || (gimple_call_lhs (stmt)
  		      ? can_use_internal_fn (stmt)
  		      : can_test_argument_range (stmt)))
diff -Nrcpad gcc-17-20260705/gcc/tree-cfg.cc gcc-17-20260712/gcc/tree-cfg.cc
*** gcc-17-20260705/gcc/tree-cfg.cc	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/gcc/tree-cfg.cc	Sun Jul 12 22:32:17 2026
*************** replace_uses_by (tree name, tree val)
*** 1893,1898 ****
--- 1893,1899 ----
    use_operand_p use;
    gimple *stmt;
    edge e;
+   auto_bitmap eh_cleanup_bbs;
  
    FOR_EACH_IMM_USE_STMT (stmt, imm_iter, name)
      {
*************** replace_uses_by (tree name, tree val)
*** 1950,1959 ****
  	    }
  
  	  if (maybe_clean_or_replace_eh_stmt (orig_stmt, stmt))
! 	    gimple_purge_dead_eh_edges (gimple_bb (stmt));
  	}
      }
  
    gcc_checking_assert (has_zero_uses (name));
  
    /* Also update the trees stored in loop structures.  */
--- 1951,1963 ----
  	    }
  
  	  if (maybe_clean_or_replace_eh_stmt (orig_stmt, stmt))
! 	    bitmap_set_bit (eh_cleanup_bbs, gimple_bb (stmt)->index);
  	}
      }
  
+   if (!bitmap_empty_p (eh_cleanup_bbs))
+     gimple_purge_all_dead_eh_edges (eh_cleanup_bbs);
+ 
    gcc_checking_assert (has_zero_uses (name));
  
    /* Also update the trees stored in loop structures.  */
diff -Nrcpad gcc-17-20260705/gcc/tree-data-ref.cc gcc-17-20260712/gcc/tree-data-ref.cc
*** gcc-17-20260705/gcc/tree-data-ref.cc	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/gcc/tree-data-ref.cc	Sun Jul 12 22:32:17 2026
*************** access_fn_component_p (tree op)
*** 1295,1301 ****
        return true;
  
      case COMPONENT_REF:
!       return TREE_CODE (TREE_TYPE (TREE_OPERAND (op, 0))) == RECORD_TYPE;
  
      default:
        return false;
--- 1295,1303 ----
        return true;
  
      case COMPONENT_REF:
!       return (TREE_CODE (TREE_TYPE (TREE_OPERAND (op, 0))) == RECORD_TYPE
! 	      || (!AGGREGATE_TYPE_P (TREE_TYPE (op))
! 		  && TREE_CODE (TREE_TYPE (op)) != COMPLEX_TYPE));
  
      default:
        return false;
*************** dr_analyze_indices (struct indices *dri,
*** 1363,1379 ****
  	  access_fns.safe_push (access_fn);
  	}
        else if (TREE_CODE (ref) == COMPONENT_REF
! 	       && TREE_CODE (TREE_TYPE (TREE_OPERAND (ref, 0))) == RECORD_TYPE)
  	{
  	  /* For COMPONENT_REFs of records (but not unions!) use the
  	     FIELD_DECL offset as constant access function so we can
! 	     disambiguate a[i].f1 and a[i].f2.  */
! 	  tree off = component_ref_field_offset (ref);
! 	  off = size_binop (PLUS_EXPR,
! 			    size_binop (MULT_EXPR,
! 					fold_convert (bitsizetype, off),
! 					bitsize_int (BITS_PER_UNIT)),
! 			    DECL_FIELD_BIT_OFFSET (TREE_OPERAND (ref, 1)));
  	  access_fns.safe_push (off);
  	}
        else
--- 1365,1391 ----
  	  access_fns.safe_push (access_fn);
  	}
        else if (TREE_CODE (ref) == COMPONENT_REF
! 	       && (TREE_CODE (TREE_TYPE (TREE_OPERAND (ref, 0))) == RECORD_TYPE
! 		   || (!AGGREGATE_TYPE_P (TREE_TYPE (ref))
! 		       && TREE_CODE (TREE_TYPE (ref)) != COMPLEX_TYPE)))
  	{
  	  /* For COMPONENT_REFs of records (but not unions!) use the
  	     FIELD_DECL offset as constant access function so we can
! 	     disambiguate a[i].f1 and a[i].f2.  For unions and accesses
! 	     we do not create further access functions for just use
! 	     zero.  */
! 	  tree off;
! 	  if (TREE_CODE (TREE_TYPE (TREE_OPERAND (ref, 0))) == RECORD_TYPE)
! 	    {
! 	      off = component_ref_field_offset (ref);
! 	      off = size_binop (PLUS_EXPR,
! 				size_binop (MULT_EXPR,
! 					    fold_convert (bitsizetype, off),
! 					    bitsize_int (BITS_PER_UNIT)),
! 				DECL_FIELD_BIT_OFFSET (TREE_OPERAND (ref, 1)));
! 	    }
! 	  else
! 	    off = bitsize_zero_node;
  	  access_fns.safe_push (off);
  	}
        else
diff -Nrcpad gcc-17-20260705/gcc/tree-pass.h gcc-17-20260712/gcc/tree-pass.h
*** gcc-17-20260705/gcc/tree-pass.h	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/gcc/tree-pass.h	Sun Jul 12 22:32:17 2026
*************** extern gimple_opt_pass *make_pass_ch (gc
*** 404,410 ****
  extern gimple_opt_pass *make_pass_ch_vect (gcc::context *ctxt);
  extern gimple_opt_pass *make_pass_sccopy (gcc::context *ctxt);
  extern gimple_opt_pass *make_pass_ccp (gcc::context *ctxt);
- extern gimple_opt_pass *make_pass_split_paths (gcc::context *ctxt);
  extern gimple_opt_pass *make_pass_build_ssa (gcc::context *ctxt);
  extern gimple_opt_pass *make_pass_build_alias (gcc::context *ctxt);
  extern gimple_opt_pass *make_pass_build_ealias (gcc::context *ctxt);
--- 404,409 ----
diff -Nrcpad gcc-17-20260705/gcc/tree-ssa-loop-ivopts.cc gcc-17-20260712/gcc/tree-ssa-loop-ivopts.cc
*** gcc-17-20260705/gcc/tree-ssa-loop-ivopts.cc	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/gcc/tree-ssa-loop-ivopts.cc	Sun Jul 12 22:32:17 2026
*************** ivopts_estimate_reg_pressure (struct ivo
*** 6094,6100 ****
  
    /* If we have enough registers.  */
    if (regs_needed + target_res_regs < available_regs)
!     cost = n_new;
    /* If close to running out of registers, try to preserve them.  */
    else if (regs_needed <= available_regs)
      cost = target_reg_cost [speed] * regs_needed;
--- 6094,6100 ----
  
    /* If we have enough registers.  */
    if (regs_needed + target_res_regs < available_regs)
!     cost = 0;
    /* If close to running out of registers, try to preserve them.  */
    else if (regs_needed <= available_regs)
      cost = target_reg_cost [speed] * regs_needed;
diff -Nrcpad gcc-17-20260705/gcc/tree-ssa-math-opts.cc gcc-17-20260712/gcc/tree-ssa-math-opts.cc
*** gcc-17-20260705/gcc/tree-ssa-math-opts.cc	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/gcc/tree-ssa-math-opts.cc	Sun Jul 12 22:32:17 2026
*************** math_opts_dom_walker::after_dom_children
*** 6607,6613 ****
  {
    gimple_stmt_iterator gsi;
  
!   fma_deferring_state fma_state (param_avoid_fma_max_bits > 0);
  
    for (gphi_iterator psi_next, psi = gsi_start_phis (bb); !gsi_end_p (psi);
         psi = psi_next)
--- 6607,6614 ----
  {
    gimple_stmt_iterator gsi;
  
!   fma_deferring_state fma_state (param_avoid_fma_max_bits > 0
! 				 && param_widening_mul_defer_fma);
  
    for (gphi_iterator psi_next, psi = gsi_start_phis (bb); !gsi_end_p (psi);
         psi = psi_next)
diff -Nrcpad gcc-17-20260705/gcc/tree-vect-data-refs.cc gcc-17-20260712/gcc/tree-vect-data-refs.cc
*** gcc-17-20260705/gcc/tree-vect-data-refs.cc	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/gcc/tree-vect-data-refs.cc	Sun Jul 12 22:32:17 2026
*************** vect_slp_analyze_store_dependences (vec_
*** 1037,1046 ****
    stmt_vec_info last_access_info = vect_find_last_scalar_stmt_in_slp (node);
    gcc_assert (DR_IS_WRITE (STMT_VINFO_DATA_REF (last_access_info)));
  
!   for (unsigned k = 0; k < SLP_TREE_SCALAR_STMTS (node).length (); ++k)
      {
        stmt_vec_info access_info
! 	= vect_orig_stmt (SLP_TREE_SCALAR_STMTS (node)[k]);
        if (access_info == last_access_info)
  	continue;
        data_reference *dr_a = STMT_VINFO_DATA_REF (access_info);
--- 1037,1046 ----
    stmt_vec_info last_access_info = vect_find_last_scalar_stmt_in_slp (node);
    gcc_assert (DR_IS_WRITE (STMT_VINFO_DATA_REF (last_access_info)));
  
!   for (auto stmt_vinfo : SLP_TREE_SCALAR_STMTS (node))
      {
        stmt_vec_info access_info
! 	= vect_orig_stmt (stmt_vinfo);
        if (access_info == last_access_info)
  	continue;
        data_reference *dr_a = STMT_VINFO_DATA_REF (access_info);
*************** vect_slp_analyze_load_dependences (vec_i
*** 1103,1114 ****
    stmt_vec_info first_access_info = vect_find_first_scalar_stmt_in_slp (node);
    gcc_assert (DR_IS_READ (STMT_VINFO_DATA_REF (first_access_info)));
  
!   for (unsigned k = 0; k < SLP_TREE_SCALAR_STMTS (node).length (); ++k)
      {
!       if (! SLP_TREE_SCALAR_STMTS (node)[k])
  	continue;
        stmt_vec_info access_info
! 	= vect_orig_stmt (SLP_TREE_SCALAR_STMTS (node)[k]);
        if (access_info == first_access_info)
  	continue;
        data_reference *dr_a = STMT_VINFO_DATA_REF (access_info);
--- 1103,1114 ----
    stmt_vec_info first_access_info = vect_find_first_scalar_stmt_in_slp (node);
    gcc_assert (DR_IS_READ (STMT_VINFO_DATA_REF (first_access_info)));
  
!   for (auto stmt_vinfo : SLP_TREE_SCALAR_STMTS (node))
      {
!       if (! stmt_vinfo)
  	continue;
        stmt_vec_info access_info
! 	= vect_orig_stmt (stmt_vinfo);
        if (access_info == first_access_info)
  	continue;
        data_reference *dr_a = STMT_VINFO_DATA_REF (access_info);
*************** vect_slp_analyze_instance_dependence (ve
*** 1245,1252 ****
  
        /* Mark stores in this instance and remember the last one.  */
        last_store_info = vect_find_last_scalar_stmt_in_slp (store);
!       for (unsigned k = 0; k < SLP_TREE_SCALAR_STMTS (store).length (); ++k)
! 	gimple_set_visited (SLP_TREE_SCALAR_STMTS (store)[k]->stmt, true);
      }
  
    bool res = true;
--- 1245,1252 ----
  
        /* Mark stores in this instance and remember the last one.  */
        last_store_info = vect_find_last_scalar_stmt_in_slp (store);
!       for (auto stmt_vinfo : SLP_TREE_SCALAR_STMTS (store))
! 	gimple_set_visited (STMT_VINFO_STMT (stmt_vinfo), true);
      }
  
    bool res = true;
*************** vect_slp_analyze_instance_dependence (ve
*** 1265,1272 ****
  
    /* Unset the visited flag.  */
    if (store)
!     for (unsigned k = 0; k < SLP_TREE_SCALAR_STMTS (store).length (); ++k)
!       gimple_set_visited (SLP_TREE_SCALAR_STMTS (store)[k]->stmt, false);
  
    /* If this is a SLP instance with a store check if there's a dependent
       load that cannot be forwarded from a previous iteration of a loop
--- 1265,1272 ----
  
    /* Unset the visited flag.  */
    if (store)
!     for (auto stmt_vinfo : SLP_TREE_SCALAR_STMTS (store))
!       gimple_set_visited (STMT_VINFO_STMT (stmt_vinfo), false);
  
    /* If this is a SLP instance with a store check if there's a dependent
       load that cannot be forwarded from a previous iteration of a loop
*************** vect_create_addr_base_for_vector_ref (ve
*** 5729,5735 ****
    innermost_loop_behavior *drb = vect_dr_behavior (vinfo, dr_info);
  
    tree data_ref_base = unshare_expr (drb->base_address);
!   tree base_offset = unshare_expr (get_dr_vinfo_offset (vinfo, dr_info, true));
    tree init = unshare_expr (drb->init);
  
    if (loop_vinfo)
--- 5729,5741 ----
    innermost_loop_behavior *drb = vect_dr_behavior (vinfo, dr_info);
  
    tree data_ref_base = unshare_expr (drb->base_address);
!   tree vector_offset = NULL_TREE;
!   if (loop_vinfo && dr_info->offset)
!     vector_offset = unshare_expr (dr_info->offset);
!   tree base_offset = unshare_expr (vector_offset
! 				   ? drb->offset
! 				   : get_dr_vinfo_offset (vinfo, dr_info,
! 							  true));
    tree init = unshare_expr (drb->init);
  
    if (loop_vinfo)
*************** vect_create_addr_base_for_vector_ref (ve
*** 5767,5773 ****
  
    vect_ptr_type = build_pointer_type (TREE_TYPE (DR_REF (dr)));
    dest = vect_get_new_vect_var (vect_ptr_type, vect_pointer_var, base_name);
!   addr_base = force_gimple_operand (addr_base, &seq, true, dest);
    gimple_seq_add_seq (new_stmt_list, seq);
  
    if (TREE_CODE (addr_base) == SSA_NAME
--- 5773,5799 ----
  
    vect_ptr_type = build_pointer_type (TREE_TYPE (DR_REF (dr)));
    dest = vect_get_new_vect_var (vect_ptr_type, vect_pointer_var, base_name);
! 
!   /* Keep vectorizer-added offsets separate from the original scalar access
!      address.  Forming "base + scalar offset" first gives the target a better
!      chance of sharing it with other address calculations, such as the
!      misalignment check used for masked alignment peeling.  */
!   if (vector_offset)
!     {
!       tree scalar_dest = vect_get_new_vect_var (vect_ptr_type,
! 						vect_pointer_var, base_name);
!       gimple_seq addr_seq = NULL;
!       addr_base = force_gimple_operand (addr_base, &addr_seq, true,
! 					scalar_dest);
!       gimple_seq_add_seq (&seq, addr_seq);
!       addr_base = fold_build_pointer_plus (addr_base,
! 					   fold_convert (sizetype,
! 							 vector_offset));
!     }
! 
!   gimple_seq addr_seq = NULL;
!   addr_base = force_gimple_operand (addr_base, &addr_seq, true, dest);
!   gimple_seq_add_seq (&seq, addr_seq);
    gimple_seq_add_seq (new_stmt_list, seq);
  
    if (TREE_CODE (addr_base) == SSA_NAME
diff -Nrcpad gcc-17-20260705/gcc/tree-vect-slp.cc gcc-17-20260712/gcc/tree-vect-slp.cc
*** gcc-17-20260705/gcc/tree-vect-slp.cc	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/gcc/tree-vect-slp.cc	Sun Jul 12 22:32:17 2026
*************** vect_record_max_nunits (vec_info *vinfo,
*** 1147,1156 ****
  
  static bool
  vect_build_slp_tree_1 (vec_info *vinfo, unsigned char *swap,
! 		       vec<stmt_vec_info> stmts, unsigned int group_size,
  		       poly_uint64 *max_nunits, bool *matches,
  		       bool *two_operators, tree *node_vectype)
  {
    unsigned int i;
    stmt_vec_info first_stmt_info = stmts[0];
    code_helper first_stmt_code = ERROR_MARK;
--- 1147,1157 ----
  
  static bool
  vect_build_slp_tree_1 (vec_info *vinfo, unsigned char *swap,
! 		       vec<stmt_vec_info> stmts,
  		       poly_uint64 *max_nunits, bool *matches,
  		       bool *two_operators, tree *node_vectype)
  {
+   unsigned int group_size = stmts.length ();
    unsigned int i;
    stmt_vec_info first_stmt_info = stmts[0];
    code_helper first_stmt_code = ERROR_MARK;
*************** static unsigned least_upthread_swappable
*** 1881,1898 ****
  
  static slp_tree
  vect_build_slp_tree_2 (vec_info *vinfo, slp_tree node,
! 		       vec<stmt_vec_info> stmts, unsigned int group_size,
  		       poly_uint64 *max_nunits,
  		       bool *matches, unsigned *limit, unsigned *tree_size,
  		       scalar_stmts_to_slp_tree_map_t *bst_map);
  
  static slp_tree
  vect_build_slp_tree (vec_info *vinfo,
! 		     vec<stmt_vec_info> stmts, unsigned int group_size,
  		     poly_uint64 *max_nunits,
  		     bool *matches, unsigned *limit, unsigned *tree_size,
  		     scalar_stmts_to_slp_tree_map_t *bst_map)
  {
    if (slp_tree *leader = bst_map->get (stmts))
      {
        if (dump_enabled_p ())
--- 1882,1900 ----
  
  static slp_tree
  vect_build_slp_tree_2 (vec_info *vinfo, slp_tree node,
! 		       vec<stmt_vec_info> stmts,
  		       poly_uint64 *max_nunits,
  		       bool *matches, unsigned *limit, unsigned *tree_size,
  		       scalar_stmts_to_slp_tree_map_t *bst_map);
  
  static slp_tree
  vect_build_slp_tree (vec_info *vinfo,
! 		     vec<stmt_vec_info> stmts,
  		     poly_uint64 *max_nunits,
  		     bool *matches, unsigned *limit, unsigned *tree_size,
  		     scalar_stmts_to_slp_tree_map_t *bst_map)
  {
+   unsigned int group_size = stmts.length ();
    if (slp_tree *leader = bst_map->get (stmts))
      {
        if (dump_enabled_p ())
*************** vect_build_slp_tree (vec_info *vinfo,
*** 1937,1943 ****
  		     "starting SLP discovery for node %p\n", (void *) res);
  
    poly_uint64 this_max_nunits = 1;
!   slp_tree res_ = vect_build_slp_tree_2 (vinfo, res, stmts, group_size,
  					&this_max_nunits,
  					matches, limit, tree_size, bst_map);
    if (!res_)
--- 1939,1945 ----
  		     "starting SLP discovery for node %p\n", (void *) res);
  
    poly_uint64 this_max_nunits = 1;
!   slp_tree res_ = vect_build_slp_tree_2 (vinfo, res, stmts,
  					&this_max_nunits,
  					matches, limit, tree_size, bst_map);
    if (!res_)
*************** vect_slp_build_two_operator_nodes (slp_t
*** 2025,2035 ****
  
  static slp_tree
  vect_build_slp_tree_2 (vec_info *vinfo, slp_tree node,
! 		       vec<stmt_vec_info> stmts, unsigned int group_size,
  		       poly_uint64 *max_nunits,
  		       bool *matches, unsigned *limit, unsigned *tree_size,
  		       scalar_stmts_to_slp_tree_map_t *bst_map)
  {
    unsigned nops, i, this_tree_size = 0;
    poly_uint64 this_max_nunits = *max_nunits;
  
--- 2027,2038 ----
  
  static slp_tree
  vect_build_slp_tree_2 (vec_info *vinfo, slp_tree node,
! 		       vec<stmt_vec_info> stmts,
  		       poly_uint64 *max_nunits,
  		       bool *matches, unsigned *limit, unsigned *tree_size,
  		       scalar_stmts_to_slp_tree_map_t *bst_map)
  {
+   unsigned int group_size = stmts.length ();
    unsigned nops, i, this_tree_size = 0;
    poly_uint64 this_max_nunits = *max_nunits;
  
*************** vect_build_slp_tree_2 (vec_info *vinfo,
*** 2108,2114 ****
    bool two_operators = false;
    unsigned char *swap = XALLOCAVEC (unsigned char, group_size);
    tree vectype = NULL_TREE;
!   if (!vect_build_slp_tree_1 (vinfo, swap, stmts, group_size,
  			      &this_max_nunits, matches, &two_operators,
  			      &vectype))
      return NULL;
--- 2111,2117 ----
    bool two_operators = false;
    unsigned char *swap = XALLOCAVEC (unsigned char, group_size);
    tree vectype = NULL_TREE;
!   if (!vect_build_slp_tree_1 (vinfo, swap, stmts,
  			      &this_max_nunits, matches, &two_operators,
  			      &vectype))
      return NULL;
*************** vect_build_slp_tree_2 (vec_info *vinfo,
*** 2205,2211 ****
  		    }
  		  bool *matches2 = XALLOCAVEC (bool, dr_group_size);
  		  slp_tree unperm_load
! 		    = vect_build_slp_tree (vinfo, stmts2, dr_group_size,
  					   &this_max_nunits, matches2, limit,
  					   &this_tree_size, bst_map);
  		  /* When we are able to do the full masked load emit that
--- 2208,2214 ----
  		    }
  		  bool *matches2 = XALLOCAVEC (bool, dr_group_size);
  		  slp_tree unperm_load
! 		    = vect_build_slp_tree (vinfo, stmts2,
  					   &this_max_nunits, matches2, limit,
  					   &this_tree_size, bst_map);
  		  /* When we are able to do the full masked load emit that
*************** vect_build_slp_tree_2 (vec_info *vinfo,
*** 2509,2515 ****
  			else
  			  op_stmts.quick_push (NULL);
  		      child = vect_build_slp_tree (vinfo, op_stmts,
! 						   group_size, &this_max_nunits,
  						   matches, limit,
  						   &this_tree_size, bst_map);
  		      /* ???  We're likely getting too many fatal mismatches
--- 2512,2518 ----
  			else
  			  op_stmts.quick_push (NULL);
  		      child = vect_build_slp_tree (vinfo, op_stmts,
! 						   &this_max_nunits,
  						   matches, limit,
  						   &this_tree_size, bst_map);
  		      /* ???  We're likely getting too many fatal mismatches
*************** out:
*** 2947,2953 ****
  	  vec<stmt_vec_info> def_stmts2;
  	  def_stmts2.create (1);
  	  def_stmts2.quick_push (oprnd_info->def_stmts[0]);
! 	  child = vect_build_slp_tree (vinfo, def_stmts2, 1,
  				       &this_max_nunits,
  				       matches, limit,
  				       &this_tree_size, bst_map);
--- 2950,2956 ----
  	  vec<stmt_vec_info> def_stmts2;
  	  def_stmts2.create (1);
  	  def_stmts2.quick_push (oprnd_info->def_stmts[0]);
! 	  child = vect_build_slp_tree (vinfo, def_stmts2,
  				       &this_max_nunits,
  				       matches, limit,
  				       &this_tree_size, bst_map);
*************** out:
*** 3021,3027 ****
        else if (least_upthread_swappable_op_distance != -1U)
  	least_upthread_swappable_op_distance++;
        child = vect_build_slp_tree (vinfo, oprnd_info->def_stmts,
! 				   group_size, &this_max_nunits,
  				   matches, limit,
  				   &this_tree_size, bst_map);
        least_upthread_swappable_op_distance = old_swap_distance;
--- 3024,3030 ----
        else if (least_upthread_swappable_op_distance != -1U)
  	least_upthread_swappable_op_distance++;
        child = vect_build_slp_tree (vinfo, oprnd_info->def_stmts,
! 				   &this_max_nunits,
  				   matches, limit,
  				   &this_tree_size, bst_map);
        least_upthread_swappable_op_distance = old_swap_distance;
*************** out:
*** 3083,3089 ****
  	  /* And try again with scratch 'matches' ... */
  	  bool *tem = XALLOCAVEC (bool, group_size);
  	  if ((child = vect_build_slp_tree (vinfo, oprnd_info->def_stmts,
! 					    group_size, &this_max_nunits,
  					    tem, limit,
  					    &this_tree_size, bst_map)) != NULL)
  	    {
--- 3086,3092 ----
  	  /* And try again with scratch 'matches' ... */
  	  bool *tem = XALLOCAVEC (bool, group_size);
  	  if ((child = vect_build_slp_tree (vinfo, oprnd_info->def_stmts,
! 					    &this_max_nunits,
  					    tem, limit,
  					    &this_tree_size, bst_map)) != NULL)
  	    {
*************** vect_bb_slp_mark_stmts_vectorized (bb_ve
*** 3601,3617 ****
  static void
  vect_mark_slp_stmts_relevant (slp_tree node, hash_set<slp_tree> &visited)
  {
-   int i;
-   stmt_vec_info stmt_info;
-   slp_tree child;
- 
    if (SLP_TREE_DEF_TYPE (node) != vect_internal_def)
      return;
  
    if (visited.add (node))
      return;
  
!   FOR_EACH_VEC_ELT (SLP_TREE_SCALAR_STMTS (node), i, stmt_info)
      if (stmt_info)
        {
  	gcc_assert (!STMT_VINFO_RELEVANT (stmt_info)
--- 3604,3616 ----
  static void
  vect_mark_slp_stmts_relevant (slp_tree node, hash_set<slp_tree> &visited)
  {
    if (SLP_TREE_DEF_TYPE (node) != vect_internal_def)
      return;
  
    if (visited.add (node))
      return;
  
!   for (auto stmt_info : SLP_TREE_SCALAR_STMTS (node))
      if (stmt_info)
        {
  	gcc_assert (!STMT_VINFO_RELEVANT (stmt_info)
*************** vect_mark_slp_stmts_relevant (slp_tree n
*** 3619,3625 ****
  	STMT_VINFO_RELEVANT (stmt_info) = vect_used_in_scope;
        }
  
!   FOR_EACH_VEC_ELT (SLP_TREE_CHILDREN (node), i, child)
      if (child)
        vect_mark_slp_stmts_relevant (child, visited);
  }
--- 3618,3624 ----
  	STMT_VINFO_RELEVANT (stmt_info) = vect_used_in_scope;
        }
  
!   for (auto child: SLP_TREE_CHILDREN (node))
      if (child)
        vect_mark_slp_stmts_relevant (child, visited);
  }
*************** stmt_vec_info
*** 3665,3673 ****
  vect_find_last_scalar_stmt_in_slp (slp_tree node)
  {
    stmt_vec_info last = NULL;
!   stmt_vec_info stmt_vinfo;
! 
!   for (int i = 0; SLP_TREE_SCALAR_STMTS (node).iterate (i, &stmt_vinfo); i++)
      if (stmt_vinfo)
        {
  	stmt_vinfo = vect_orig_stmt (stmt_vinfo);
--- 3664,3670 ----
  vect_find_last_scalar_stmt_in_slp (slp_tree node)
  {
    stmt_vec_info last = NULL;
!   for (auto stmt_vinfo : SLP_TREE_SCALAR_STMTS (node))
      if (stmt_vinfo)
        {
  	stmt_vinfo = vect_orig_stmt (stmt_vinfo);
*************** stmt_vec_info
*** 3683,3691 ****
  vect_find_first_scalar_stmt_in_slp (slp_tree node)
  {
    stmt_vec_info first = NULL;
-   stmt_vec_info stmt_vinfo;
  
!   for (int i = 0; SLP_TREE_SCALAR_STMTS (node).iterate (i, &stmt_vinfo); i++)
      if (stmt_vinfo)
        {
  	stmt_vinfo = vect_orig_stmt (stmt_vinfo);
--- 3680,3687 ----
  vect_find_first_scalar_stmt_in_slp (slp_tree node)
  {
    stmt_vec_info first = NULL;
  
!   for (auto stmt_vinfo : SLP_TREE_SCALAR_STMTS (node))
      if (stmt_vinfo)
        {
  	stmt_vinfo = vect_orig_stmt (stmt_vinfo);
*************** optimize_load_redistribution_1 (scalar_s
*** 3814,3820 ****
        bool *matches = XALLOCAVEC (bool, group_size);
        poly_uint64 max_nunits = 1;
        unsigned tree_size = 0, limit = 1;
!       node = vect_build_slp_tree (vinfo, stmts, group_size, &max_nunits,
  				  matches, &limit, &tree_size, bst_map);
        if (!node)
  	stmts.release ();
--- 3810,3816 ----
        bool *matches = XALLOCAVEC (bool, group_size);
        poly_uint64 max_nunits = 1;
        unsigned tree_size = 0, limit = 1;
!       node = vect_build_slp_tree (vinfo, stmts, &max_nunits,
  				  matches, &limit, &tree_size, bst_map);
        if (!node)
  	stmts.release ();
*************** vect_build_slp_store_interleaving (vec<s
*** 4025,4031 ****
  	    .quick_push (SLP_TREE_CHILDREN (rhs_nodes[j])[l]);
  	  SLP_TREE_CHILDREN (rhs_nodes[j])[l]->refcnt++;
  	  for (unsigned k = 0;
! 	       k < SLP_TREE_SCALAR_STMTS (rhs_nodes[j]).length (); ++k)
  	    {
  	      /* ???  We should populate SLP_TREE_SCALAR_STMTS
  		 or SLP_TREE_SCALAR_OPS but then we might have
--- 4021,4027 ----
  	    .quick_push (SLP_TREE_CHILDREN (rhs_nodes[j])[l]);
  	  SLP_TREE_CHILDREN (rhs_nodes[j])[l]->refcnt++;
  	  for (unsigned k = 0;
! 	       k < SLP_TREE_LANES (rhs_nodes[j]); ++k)
  	    {
  	      /* ???  We should populate SLP_TREE_SCALAR_STMTS
  		 or SLP_TREE_SCALAR_OPS but then we might have
*************** vect_build_slp_instance (vec_info *vinfo
*** 4213,4218 ****
--- 4209,4221 ----
  			 "Analyzing vectorizable control flow: %G",
  			 root_stmt_infos[0]->stmt);
      }
+   else if (kind == slp_inst_kind_bb_reduc)
+     {
+       if (dump_enabled_p ())
+ 	dump_printf_loc (MSG_NOTE, vect_location,
+ 			 "Analyzing vectorizable BB reduction: %G",
+ 			 root_stmt_infos[0]->stmt);
+     }
  
    if (dump_enabled_p ())
      {
*************** vect_build_slp_instance (vec_info *vinfo
*** 4236,4242 ****
        matches[1] = false;
      }
    else
!     node = vect_build_slp_tree (vinfo, scalar_stmts, group_size,
  				&max_nunits, matches, limit,
  				&tree_size, bst_map);
    if (node != NULL)
--- 4239,4245 ----
        matches[1] = false;
      }
    else
!     node = vect_build_slp_tree (vinfo, scalar_stmts,
  				&max_nunits, matches, limit,
  				&tree_size, bst_map);
    if (node != NULL)
*************** vect_analyze_slp_reduc_chain (loop_vec_i
*** 4498,4504 ****
        bool *matches = XALLOCAVEC (bool, group_size);
        poly_uint64 max_nunits = 1;
        unsigned tree_size = 0;
!       slp_tree node = vect_build_slp_tree (vinfo, scalar_stmts, group_size,
  					   &max_nunits, matches, limit,
  					   &tree_size, bst_map);
        if (!node)
--- 4501,4507 ----
        bool *matches = XALLOCAVEC (bool, group_size);
        poly_uint64 max_nunits = 1;
        unsigned tree_size = 0;
!       slp_tree node = vect_build_slp_tree (vinfo, scalar_stmts,
  					   &max_nunits, matches, limit,
  					   &tree_size, bst_map);
        if (!node)
*************** vect_analyze_slp_reduc_chain (loop_vec_i
*** 4646,4652 ****
    for (unsigned i = 0; i < scalar_stmts.length (); ++i)
      REDUC_GROUP_FIRST_ELEMENT (scalar_stmts[i]) = scalar_stmts[0];
  
!   slp_tree node = vect_build_slp_tree (vinfo, scalar_stmts, group_size,
  				       &max_nunits, matches, limit,
  				       &tree_size, bst_map);
  
--- 4649,4655 ----
    for (unsigned i = 0; i < scalar_stmts.length (); ++i)
      REDUC_GROUP_FIRST_ELEMENT (scalar_stmts[i]) = scalar_stmts[0];
  
!   slp_tree node = vect_build_slp_tree (vinfo, scalar_stmts,
  				       &max_nunits, matches, limit,
  				       &tree_size, bst_map);
  
*************** vect_analyze_slp_reduction (loop_vec_inf
*** 4790,4796 ****
    poly_uint64 max_nunits = 1;
    unsigned tree_size = 0;
  
!   slp_tree node = vect_build_slp_tree (vinfo, scalar_stmts, group_size,
  				       &max_nunits, matches, limit,
  				       &tree_size, bst_map);
    if (node != NULL)
--- 4793,4799 ----
    poly_uint64 max_nunits = 1;
    unsigned tree_size = 0;
  
!   slp_tree node = vect_build_slp_tree (vinfo, scalar_stmts,
  				       &max_nunits, matches, limit,
  				       &tree_size, bst_map);
    if (node != NULL)
*************** vect_analyze_slp_reduction_group (loop_v
*** 4862,4868 ****
    poly_uint64 max_nunits = 1;
    unsigned tree_size = 0;
    slp_tree node = vect_build_slp_tree (loop_vinfo, scalar_stmts,
- 				       group_size,
  				       &max_nunits, matches, limit,
  				       &tree_size, bst_map);
    if (!node)
--- 4865,4870 ----
*************** vect_analyze_slp_instance (vec_info *vin
*** 5089,5095 ****
        matches[1] = false;
      }
    else
!     node = vect_build_slp_tree (vinfo, scalar_stmts, group_size,
  				&max_nunits, matches, limit,
  				&tree_size, bst_map);
    if (node != NULL)
--- 5091,5097 ----
        matches[1] = false;
      }
    else
!     node = vect_build_slp_tree (vinfo, scalar_stmts,
  				&max_nunits, matches, limit,
  				&tree_size, bst_map);
    if (node != NULL)
*************** vect_analyze_slp_instance (vec_info *vin
*** 5278,5284 ****
  	      for (unsigned j = start; j < end; ++j)
  		substmts.quick_push (scalar_stmts[j]);
  	      max_nunits = 1;
! 	      node = vect_build_slp_tree (vinfo, substmts, end - start,
  					  &max_nunits,
  					  matches, limit, &tree_size, bst_map);
  	      if (node)
--- 5280,5286 ----
  	      for (unsigned j = start; j < end; ++j)
  		substmts.quick_push (scalar_stmts[j]);
  	      max_nunits = 1;
! 	      node = vect_build_slp_tree (vinfo, substmts,
  					  &max_nunits,
  					  matches, limit, &tree_size, bst_map);
  	      if (node)
*************** vect_lower_load_permutations (loop_vec_i
*** 5651,5657 ****
        unsigned limit = 1;
        unsigned tree_size = 0;
        slp_tree l0 = vect_build_slp_tree (loop_vinfo, stmts,
- 					 group_lanes,
  					 &max_nunits, matches, &limit,
  					 &tree_size, bst_map);
        gcc_assert (!SLP_TREE_LOAD_PERMUTATION (l0).exists ());
--- 5653,5658 ----
*************** vect_analyze_slp (vec_info *vinfo, unsig
*** 6087,6095 ****
  	    {
  	      if (!SLP_TREE_LOAD_PERMUTATION (load_node).exists ())
  		continue;
! 	      unsigned k;
! 	      stmt_vec_info load_info;
! 	      FOR_EACH_VEC_ELT (SLP_TREE_SCALAR_STMTS (load_node), k, load_info)
  		if (SLP_TREE_LOAD_PERMUTATION (load_node)[k] != k)
  		  {
  		    loads_permuted = true;
--- 6088,6094 ----
  	    {
  	      if (!SLP_TREE_LOAD_PERMUTATION (load_node).exists ())
  		continue;
! 	      for (unsigned k = 0; k < SLP_TREE_LANES (load_node); k++)
  		if (SLP_TREE_LOAD_PERMUTATION (load_node)[k] != k)
  		  {
  		    loads_permuted = true;
*************** vect_slp_prune_covered_roots (slp_tree n
*** 9194,9207 ****
        || visited.add (node))
      return;
  
!   stmt_vec_info stmt;
!   unsigned i;
!   FOR_EACH_VEC_ELT (SLP_TREE_SCALAR_STMTS (node), i, stmt)
      if (stmt)
        roots.remove (vect_orig_stmt (stmt));
  
!   slp_tree child;
!   FOR_EACH_VEC_ELT (SLP_TREE_CHILDREN (node), i, child)
      if (child)
        vect_slp_prune_covered_roots (child, roots, visited);
  }
--- 9193,9203 ----
        || visited.add (node))
      return;
  
!   for (auto stmt : SLP_TREE_SCALAR_STMTS (node))
      if (stmt)
        roots.remove (vect_orig_stmt (stmt));
  
!   for (auto child : SLP_TREE_CHILDREN (node))
      if (child)
        vect_slp_prune_covered_roots (child, roots, visited);
  }
*************** vect_bb_partition_graph_r (bb_vec_info b
*** 9411,9420 ****
  			   hash_map<slp_tree, slp_instance> &node_to_instance,
  			   hash_map<slp_instance, slp_instance> &instance_leader)
  {
!   stmt_vec_info stmt_info;
!   unsigned i;
! 
!   FOR_EACH_VEC_ELT (SLP_TREE_SCALAR_STMTS (node), i, stmt_info)
      if (stmt_info)
        vect_map_to_instance (instance, stmt_info, stmt_to_instance,
  			    instance_leader);
--- 9407,9413 ----
  			   hash_map<slp_tree, slp_instance> &node_to_instance,
  			   hash_map<slp_instance, slp_instance> &instance_leader)
  {
!   for (auto stmt_info : SLP_TREE_SCALAR_STMTS (node))
      if (stmt_info)
        vect_map_to_instance (instance, stmt_info, stmt_to_instance,
  			    instance_leader);
*************** vect_bb_partition_graph_r (bb_vec_info b
*** 9423,9430 ****
  			    instance_leader))
      return;
  
!   slp_tree child;
!   FOR_EACH_VEC_ELT (SLP_TREE_CHILDREN (node), i, child)
      if (child && SLP_TREE_DEF_TYPE (child) == vect_internal_def)
        vect_bb_partition_graph_r (bb_vinfo, instance, child, stmt_to_instance,
  				 node_to_instance, instance_leader);
--- 9416,9422 ----
  			    instance_leader))
      return;
  
!   for (auto child : SLP_TREE_CHILDREN (node))
      if (child && SLP_TREE_DEF_TYPE (child) == vect_internal_def)
        vect_bb_partition_graph_r (bb_vinfo, instance, child, stmt_to_instance,
  				 node_to_instance, instance_leader);
*************** vect_remove_slp_scalar_calls (vec_info *
*** 12060,12069 ****
  {
    gimple *new_stmt;
    gimple_stmt_iterator gsi;
-   int i;
-   slp_tree child;
    tree lhs;
-   stmt_vec_info stmt_info;
  
    if (!node || SLP_TREE_DEF_TYPE (node) != vect_internal_def)
      return;
--- 12052,12058 ----
*************** vect_remove_slp_scalar_calls (vec_info *
*** 12071,12080 ****
    if (visited.add (node))
      return;
  
!   FOR_EACH_VEC_ELT (SLP_TREE_CHILDREN (node), i, child)
      vect_remove_slp_scalar_calls (vinfo, child, visited);
  
!   FOR_EACH_VEC_ELT (SLP_TREE_SCALAR_STMTS (node), i, stmt_info)
      {
        if (!stmt_info)
  	continue;
--- 12060,12069 ----
    if (visited.add (node))
      return;
  
!   for (auto child : SLP_TREE_CHILDREN (node))
      vect_remove_slp_scalar_calls (vinfo, child, visited);
  
!   for (auto stmt_info : SLP_TREE_SCALAR_STMTS (node))
      {
        if (!stmt_info)
  	continue;
diff -Nrcpad gcc-17-20260705/gcc/tree.cc gcc-17-20260712/gcc/tree.cc
*** gcc-17-20260705/gcc/tree.cc	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/gcc/tree.cc	Sun Jul 12 22:32:17 2026
*************** default_is_empty_record (const_tree type
*** 15137,15142 ****
--- 15137,15158 ----
    return is_empty_type (TYPE_MAIN_VARIANT (type));
  }
  
+ 
+ /* Determine whether TYPE is an ISO C99 flexible array member type "[]".  */
+ 
+ bool
+ flexible_array_member_type_p (const_tree type)
+ {
+   if (TREE_CODE (type) == ARRAY_TYPE
+       && TYPE_SIZE (type) == NULL_TREE
+       && TYPE_DOMAIN (type) != NULL_TREE
+       && TYPE_MAX_VALUE (TYPE_DOMAIN (type)) == NULL_TREE)
+     return true;
+ 
+   return false;
+ }
+ 
+ 
  /* Determine whether TYPE is a structure with a flexible array member,
     or a union containing such a structure (possibly recursively).  */
  
*************** flexible_array_type_p (const_tree type)
*** 15153,15164 ****
  	  last = x;
        if (last == NULL_TREE)
  	return false;
!       if (TREE_CODE (TREE_TYPE (last)) == ARRAY_TYPE
! 	  && TYPE_SIZE (TREE_TYPE (last)) == NULL_TREE
! 	  && TYPE_DOMAIN (TREE_TYPE (last)) != NULL_TREE
! 	  && TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (last))) == NULL_TREE)
! 	return true;
!       return false;
      case UNION_TYPE:
        for (x = TYPE_FIELDS (type); x != NULL_TREE; x = DECL_CHAIN (x))
  	{
--- 15169,15175 ----
  	  last = x;
        if (last == NULL_TREE)
  	return false;
!        return flexible_array_member_type_p (TREE_TYPE (last));
      case UNION_TYPE:
        for (x = TYPE_FIELDS (type); x != NULL_TREE; x = DECL_CHAIN (x))
  	{
diff -Nrcpad gcc-17-20260705/gcc/tree.h gcc-17-20260712/gcc/tree.h
*** gcc-17-20260705/gcc/tree.h	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/gcc/tree.h	Sun Jul 12 22:32:17 2026
*************** extern void gt_pch_nx (tree_raw_data *,
*** 7019,7024 ****
--- 7019,7025 ----
  extern bool nonnull_arg_p (const_tree);
  extern bool is_empty_type (const_tree);
  extern bool default_is_empty_record (const_tree);
+ extern bool flexible_array_member_type_p (const_tree);
  extern bool flexible_array_type_p (const_tree);
  extern HOST_WIDE_INT arg_int_size_in_bytes (const_tree);
  extern tree arg_size_in_bytes (const_tree);
diff -Nrcpad gcc-17-20260705/gcc/var-tracking.cc gcc-17-20260712/gcc/var-tracking.cc
*** gcc-17-20260705/gcc/var-tracking.cc	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/gcc/var-tracking.cc	Sun Jul 12 22:32:17 2026
*************** static inline dvuid
*** 452,458 ****
  dv_uid (decl_or_value dv)
  {
    if (dv_is_value_p (dv))
!     return CSELIB_VAL_PTR (dv_as_value (dv))->uid;
    else
      return DECL_UID (dv_as_decl (dv));
  }
--- 452,458 ----
  dv_uid (decl_or_value dv)
  {
    if (dv_is_value_p (dv))
!     return CSELIB_VAL_UID (dv_as_value (dv));
    else
      return DECL_UID (dv_as_decl (dv));
  }
*************** shared_hash_find (shared_hash *vars, dec
*** 1723,1730 ****
  static inline bool
  canon_value_cmp (rtx tval, rtx cval)
  {
!   return !cval
!     || CSELIB_VAL_PTR (tval)->uid < CSELIB_VAL_PTR (cval)->uid;
  }
  
  static bool dst_can_be_shared;
--- 1723,1729 ----
  static inline bool
  canon_value_cmp (rtx tval, rtx cval)
  {
!   return !cval || CSELIB_VAL_UID (tval) < CSELIB_VAL_UID (cval);
  }
  
  static bool dst_can_be_shared;
*************** variable_post_merge_new_vals (variable *
*** 4531,4537 ****
  		      if (dump_file)
  			fprintf (dump_file,
  				 "Created new value %u:%u for reg %i\n",
! 				 v->uid, v->hash, REGNO (node->loc));
  		    }
  
  		  var_reg_decl_set (*dfpm->permp, node->loc,
--- 4530,4537 ----
  		      if (dump_file)
  			fprintf (dump_file,
  				 "Created new value %u:%u for reg %i\n",
! 				 CSELIB_VAL_UID (v->val_rtx), v->hash,
! 				 REGNO (node->loc));
  		    }
  
  		  var_reg_decl_set (*dfpm->permp, node->loc,
diff -Nrcpad gcc-17-20260705/libbacktrace/ChangeLog gcc-17-20260712/libbacktrace/ChangeLog
*** gcc-17-20260705/libbacktrace/ChangeLog	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/libbacktrace/ChangeLog	Sun Jul 12 22:32:18 2026
***************
*** 1,3 ****
--- 1,47 ----
+ 2026-07-06  Ian Lance Taylor  <iant@golang.org>
+ 
+ 	* backtrace.h (backtrace_create_state): Rewrite comment to change
+ 	threaded parameter to flags.
+ 	(backtrace_full_callback, backtrace_syminfo_callback): Document
+ 	behavior change if moredata flag is set.
+ 	(struct backtrace_moredata): Define.
+ 	* backtrace-supported.h.in (BACKTRACE_SUPPORTS_MOREDATA): Define.
+ 	* internal.h (struct backtrace_state): Add moredata field.
+ 	(BACKTRACE_MOREDATA_VERSION): Define.
+ 	* state.c (backtrace_create_state): Change threaded parameter to
+ 	flags.  Set state moredata field based on flags.
+ 	* dwarf.c (struct line): Add disc field.
+ 	(struct function): Add caller_disc field.
+ 	(call_callback): New static function.
+ 	(add_line): Add disc parameter.  Change all callers.  Store disc
+ 	in new line value.
+ 	(read_line_program): Track discriminator value.
+ 	(read_line_info): Initialize disc field in final line entry.
+ 	(read_function_entry): Handle DW_AT_GNU_discriminator.
+ 	(report_inlined_functions): Add disc parameter. Change all
+ 	callers. Call call_callback rather than calling callback
+ 	directly.
+ 	(dwarf_lookup_pc): Handle inlined discriminators. Call
+ 	call_callback rather than calling callback directly.
+ 	(dwarf_fileline): Call call_callback rather than calling callback
+ 	directly.
+ 	* elf.c (elf_syminfo): Pass moredata if requested.
+ 	* macho.c (macho_syminfo): Likewise.
+ 	* pecoff.c (coff_syminfo): Likewise.
+ 	* xcoff.c (xcoff_syminfo): Likewise.
+ 	(xcoff_lookup_pc): Likewise.
+ 	* backtrace.c: #include <string.h>.
+ 	(unwind): Pass moredata if requested.
+ 	* unknown.c: #include <string.h>.
+ 	(unknown_fileline): Pass moredata if requested.
+ 	* fileline.c (backtrace_syminfo_to_full_callback): Add comment
+ 	about moredata.
+ 	* mdtest.c: New test file.
+ 	* Makefile.am (mdtest_SOURCES): Define.
+ 	(mdtest_CFLAGS, mdtest_LDFLAGS, mdtest_LDADD): Define.
+ 	(BUILDTESTS): Add mdtest.
+ 	* Makefile.in: Regenerate.
+ 
  2026-06-29  Pietro Monteiro  <pietro@sociotechnical.xyz>
  
  	PR bootstrap/103459
diff -Nrcpad gcc-17-20260705/libbacktrace/Makefile.am gcc-17-20260712/libbacktrace/Makefile.am
*** gcc-17-20260705/libbacktrace/Makefile.am	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/libbacktrace/Makefile.am	Sun Jul 12 22:32:18 2026
*************** endif HAVE_OBJCOPY_DEBUGLINK
*** 345,350 ****
--- 345,357 ----
  
  endif HAVE_DWZ
  
+ mdtest_SOURCES = mdtest.c testlib.c
+ mdtest_CFLAGS = $(libbacktrace_TEST_CFLAGS) -O
+ mdtest_LDFLAGS = $(libbacktrace_testing_ldflags)
+ mdtest_LDADD = libbacktrace.la
+ 
+ BUILDTESTS += mdtest
+ 
  stest_SOURCES = stest.c
  stest_CFLAGS = $(libbacktrace_TEST_CFLAGS)
  stest_LDFLAGS = $(libbacktrace_testing_ldflags)
diff -Nrcpad gcc-17-20260705/libbacktrace/Makefile.in gcc-17-20260712/libbacktrace/Makefile.in
*** gcc-17-20260705/libbacktrace/Makefile.in	Sun Jul  5 22:32:22 2026
--- gcc-17-20260712/libbacktrace/Makefile.in	Sun Jul 12 22:32:23 2026
*************** TESTS = $(am__append_4) $(MAKETESTS) $(a
*** 138,144 ****
  @HAVE_BUILDID_TRUE@@HAVE_DWZ_TRUE@@HAVE_ELF_TRUE@@HAVE_OBJCOPY_DEBUGLINK_TRUE@@NATIVE_TRUE@am__append_8 = b3test
  @HAVE_BUILDID_TRUE@@HAVE_DWZ_TRUE@@HAVE_ELF_TRUE@@HAVE_OBJCOPY_DEBUGLINK_TRUE@@NATIVE_TRUE@am__append_9 = b3test_dwz_buildid b3test_dwz_buildidfull
  @HAVE_ELF_TRUE@@NATIVE_TRUE@am__append_10 = btest_lto
! @NATIVE_TRUE@am__append_11 = btest_alloc stest stest_alloc
  @HAVE_DWZ_TRUE@@NATIVE_TRUE@am__append_12 = btest_dwz
  @HAVE_DWZ_TRUE@@HAVE_OBJCOPY_DEBUGLINK_TRUE@@NATIVE_TRUE@am__append_13 = btest_dwz_gnudebuglink
  @HAVE_ELF_TRUE@@HAVE_ZLIB_TRUE@@NATIVE_TRUE@am__append_14 = -lz
--- 138,144 ----
  @HAVE_BUILDID_TRUE@@HAVE_DWZ_TRUE@@HAVE_ELF_TRUE@@HAVE_OBJCOPY_DEBUGLINK_TRUE@@NATIVE_TRUE@am__append_8 = b3test
  @HAVE_BUILDID_TRUE@@HAVE_DWZ_TRUE@@HAVE_ELF_TRUE@@HAVE_OBJCOPY_DEBUGLINK_TRUE@@NATIVE_TRUE@am__append_9 = b3test_dwz_buildid b3test_dwz_buildidfull
  @HAVE_ELF_TRUE@@NATIVE_TRUE@am__append_10 = btest_lto
! @NATIVE_TRUE@am__append_11 = btest_alloc mdtest stest stest_alloc
  @HAVE_DWZ_TRUE@@NATIVE_TRUE@am__append_12 = btest_dwz
  @HAVE_DWZ_TRUE@@HAVE_OBJCOPY_DEBUGLINK_TRUE@@NATIVE_TRUE@am__append_13 = btest_dwz_gnudebuglink
  @HAVE_ELF_TRUE@@HAVE_ZLIB_TRUE@@NATIVE_TRUE@am__append_14 = -lz
*************** libbacktrace_noformat_la_OBJECTS =  \
*** 235,242 ****
  @NATIVE_TRUE@	test_unknown$(EXEEXT) unittest$(EXEEXT) \
  @NATIVE_TRUE@	unittest_alloc$(EXEEXT) btest$(EXEEXT)
  @HAVE_ELF_TRUE@@NATIVE_TRUE@am__EXEEXT_6 = btest_lto$(EXEEXT)
! @NATIVE_TRUE@am__EXEEXT_7 = btest_alloc$(EXEEXT) stest$(EXEEXT) \
! @NATIVE_TRUE@	stest_alloc$(EXEEXT)
  @HAVE_ELF_TRUE@@NATIVE_TRUE@am__EXEEXT_8 = ztest$(EXEEXT) \
  @HAVE_ELF_TRUE@@NATIVE_TRUE@	ztest_alloc$(EXEEXT) \
  @HAVE_ELF_TRUE@@NATIVE_TRUE@	zstdtest$(EXEEXT) \
--- 235,242 ----
  @NATIVE_TRUE@	test_unknown$(EXEEXT) unittest$(EXEEXT) \
  @NATIVE_TRUE@	unittest_alloc$(EXEEXT) btest$(EXEEXT)
  @HAVE_ELF_TRUE@@NATIVE_TRUE@am__EXEEXT_6 = btest_lto$(EXEEXT)
! @NATIVE_TRUE@am__EXEEXT_7 = btest_alloc$(EXEEXT) mdtest$(EXEEXT) \
! @NATIVE_TRUE@	stest$(EXEEXT) stest_alloc$(EXEEXT)
  @HAVE_ELF_TRUE@@NATIVE_TRUE@am__EXEEXT_8 = ztest$(EXEEXT) \
  @HAVE_ELF_TRUE@@NATIVE_TRUE@	ztest_alloc$(EXEEXT) \
  @HAVE_ELF_TRUE@@NATIVE_TRUE@	zstdtest$(EXEEXT) \
*************** m2test_OBJECTS = $(am_m2test_OBJECTS)
*** 396,401 ****
--- 396,408 ----
  m2test_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
  	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(m2test_CFLAGS) $(CFLAGS) \
  	$(m2test_LDFLAGS) $(LDFLAGS) -o $@
+ @NATIVE_TRUE@am_mdtest_OBJECTS = mdtest-mdtest.$(OBJEXT) \
+ @NATIVE_TRUE@	mdtest-testlib.$(OBJEXT)
+ mdtest_OBJECTS = $(am_mdtest_OBJECTS)
+ @NATIVE_TRUE@mdtest_DEPENDENCIES = libbacktrace.la
+ mdtest_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(mdtest_CFLAGS) $(CFLAGS) \
+ 	$(mdtest_LDFLAGS) $(LDFLAGS) -o $@
  @NATIVE_TRUE@am_mtest_OBJECTS = mtest-mtest.$(OBJEXT) \
  @NATIVE_TRUE@	mtest-testlib.$(OBJEXT)
  mtest_OBJECTS = $(am_mtest_OBJECTS)
*************** SOURCES = $(libbacktrace_la_SOURCES) $(E
*** 620,631 ****
  	$(ctestg_alloc_SOURCES) $(ctestzstd_SOURCES) \
  	$(ctestzstd_alloc_SOURCES) $(dwarf5_SOURCES) \
  	$(dwarf5_alloc_SOURCES) $(edtest_SOURCES) \
! 	$(edtest_alloc_SOURCES) $(m2test_SOURCES) $(mtest_SOURCES) \
! 	$(stest_SOURCES) $(stest_alloc_SOURCES) $(test_elf_32_SOURCES) \
! 	$(test_elf_64_SOURCES) $(test_macho_SOURCES) \
! 	$(test_pecoff_SOURCES) $(test_unknown_SOURCES) \
! 	$(test_xcoff_32_SOURCES) $(test_xcoff_64_SOURCES) \
! 	$(ttest_SOURCES) $(ttest_alloc_SOURCES) $(unittest_SOURCES) \
  	$(unittest_alloc_SOURCES) $(xztest_SOURCES) \
  	$(xztest_alloc_SOURCES) $(zstdtest_SOURCES) \
  	$(zstdtest_alloc_SOURCES) $(ztest_SOURCES) \
--- 627,639 ----
  	$(ctestg_alloc_SOURCES) $(ctestzstd_SOURCES) \
  	$(ctestzstd_alloc_SOURCES) $(dwarf5_SOURCES) \
  	$(dwarf5_alloc_SOURCES) $(edtest_SOURCES) \
! 	$(edtest_alloc_SOURCES) $(m2test_SOURCES) $(mdtest_SOURCES) \
! 	$(mtest_SOURCES) $(stest_SOURCES) $(stest_alloc_SOURCES) \
! 	$(test_elf_32_SOURCES) $(test_elf_64_SOURCES) \
! 	$(test_macho_SOURCES) $(test_pecoff_SOURCES) \
! 	$(test_unknown_SOURCES) $(test_xcoff_32_SOURCES) \
! 	$(test_xcoff_64_SOURCES) $(ttest_SOURCES) \
! 	$(ttest_alloc_SOURCES) $(unittest_SOURCES) \
  	$(unittest_alloc_SOURCES) $(xztest_SOURCES) \
  	$(xztest_alloc_SOURCES) $(zstdtest_SOURCES) \
  	$(zstdtest_alloc_SOURCES) $(ztest_SOURCES) \
*************** libbacktrace_testing_ldflags = -no-insta
*** 1148,1153 ****
--- 1156,1165 ----
  @NATIVE_TRUE@btest_alloc_CFLAGS = $(libbacktrace_TEST_CFLAGS)
  @NATIVE_TRUE@btest_alloc_LDFLAGS = $(libbacktrace_testing_ldflags)
  @NATIVE_TRUE@btest_alloc_LDADD = libbacktrace_alloc.la
+ @NATIVE_TRUE@mdtest_SOURCES = mdtest.c testlib.c
+ @NATIVE_TRUE@mdtest_CFLAGS = $(libbacktrace_TEST_CFLAGS) -O
+ @NATIVE_TRUE@mdtest_LDFLAGS = $(libbacktrace_testing_ldflags)
+ @NATIVE_TRUE@mdtest_LDADD = libbacktrace.la
  @NATIVE_TRUE@stest_SOURCES = stest.c
  @NATIVE_TRUE@stest_CFLAGS = $(libbacktrace_TEST_CFLAGS)
  @NATIVE_TRUE@stest_LDFLAGS = $(libbacktrace_testing_ldflags)
*************** m2test$(EXEEXT): $(m2test_OBJECTS) $(m2t
*** 1445,1450 ****
--- 1457,1466 ----
  	@rm -f m2test$(EXEEXT)
  	$(AM_V_CCLD)$(m2test_LINK) $(m2test_OBJECTS) $(m2test_LDADD) $(LIBS)
  
+ mdtest$(EXEEXT): $(mdtest_OBJECTS) $(mdtest_DEPENDENCIES) $(EXTRA_mdtest_DEPENDENCIES) 
+ 	@rm -f mdtest$(EXEEXT)
+ 	$(AM_V_CCLD)$(mdtest_LINK) $(mdtest_OBJECTS) $(mdtest_LDADD) $(LIBS)
+ 
  mtest$(EXEEXT): $(mtest_OBJECTS) $(mtest_DEPENDENCIES) $(EXTRA_mtest_DEPENDENCIES) 
  	@rm -f mtest$(EXEEXT)
  	$(AM_V_CCLD)$(mtest_LINK) $(mtest_OBJECTS) $(mtest_LDADD) $(LIBS)
*************** m2test-testlib.o: testlib.c
*** 1756,1761 ****
--- 1772,1789 ----
  m2test-testlib.obj: testlib.c
  	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(m2test_CFLAGS) $(CFLAGS) -c -o m2test-testlib.obj `if test -f 'testlib.c'; then $(CYGPATH_W) 'testlib.c'; else $(CYGPATH_W) '$(srcdir)/testlib.c'; fi`
  
+ mdtest-mdtest.o: mdtest.c
+ 	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mdtest_CFLAGS) $(CFLAGS) -c -o mdtest-mdtest.o `test -f 'mdtest.c' || echo '$(srcdir)/'`mdtest.c
+ 
+ mdtest-mdtest.obj: mdtest.c
+ 	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mdtest_CFLAGS) $(CFLAGS) -c -o mdtest-mdtest.obj `if test -f 'mdtest.c'; then $(CYGPATH_W) 'mdtest.c'; else $(CYGPATH_W) '$(srcdir)/mdtest.c'; fi`
+ 
+ mdtest-testlib.o: testlib.c
+ 	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mdtest_CFLAGS) $(CFLAGS) -c -o mdtest-testlib.o `test -f 'testlib.c' || echo '$(srcdir)/'`testlib.c
+ 
+ mdtest-testlib.obj: testlib.c
+ 	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mdtest_CFLAGS) $(CFLAGS) -c -o mdtest-testlib.obj `if test -f 'testlib.c'; then $(CYGPATH_W) 'testlib.c'; else $(CYGPATH_W) '$(srcdir)/testlib.c'; fi`
+ 
  mtest-mtest.o: mtest.c
  	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mtest_CFLAGS) $(CFLAGS) -c -o mtest-mtest.o `test -f 'mtest.c' || echo '$(srcdir)/'`mtest.c
  
*************** btest_alloc.log: btest_alloc$(EXEEXT)
*** 2353,2358 ****
--- 2381,2393 ----
  	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
  	--log-file $$b.log --trs-file $$b.trs \
  	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ 	"$$tst" $(AM_TESTS_FD_REDIRECT)
+ mdtest.log: mdtest$(EXEEXT)
+ 	@p='mdtest$(EXEEXT)'; \
+ 	b='mdtest'; \
+ 	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ 	--log-file $$b.log --trs-file $$b.trs \
+ 	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
  	"$$tst" $(AM_TESTS_FD_REDIRECT)
  stest.log: stest$(EXEEXT)
  	@p='stest$(EXEEXT)'; \
diff -Nrcpad gcc-17-20260705/libbacktrace/backtrace-supported.h.in gcc-17-20260712/libbacktrace/backtrace-supported.h.in
*** gcc-17-20260705/libbacktrace/backtrace-supported.h.in	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/libbacktrace/backtrace-supported.h.in	Sun Jul 12 22:32:18 2026
*************** POSSIBILITY OF SUCH DAMAGE.  */
*** 35,41 ****
     be #include'd to see whether the backtrace library will be able to
     get a backtrace and produce symbolic information.  */
  
- 
  /* BACKTRACE_SUPPORTED will be #define'd as 1 if the backtrace library
     should work, 0 if it will not.  Libraries may #include this to make
     other arrangements.  */
--- 35,40 ----
*************** POSSIBILITY OF SUCH DAMAGE.  */
*** 60,66 ****
  
  #define BACKTRACE_SUPPORTS_THREADS @BACKTRACE_SUPPORTS_THREADS@
  
! /* BACKTRACE_SUPPORTS_DATA will be #defined'd as 1 if the backtrace_syminfo
     will work for variables.  It will always work for functions.  */
  
  #define BACKTRACE_SUPPORTS_DATA @BACKTRACE_SUPPORTS_DATA@
--- 59,70 ----
  
  #define BACKTRACE_SUPPORTS_THREADS @BACKTRACE_SUPPORTS_THREADS@
  
! /* BACKTRACE_SUPPORTS_DATA will be #define'd as 1 if the backtrace_syminfo
     will work for variables.  It will always work for functions.  */
  
  #define BACKTRACE_SUPPORTS_DATA @BACKTRACE_SUPPORTS_DATA@
+ 
+ /* BACKTRACE_SUPPORTS_MOREDATA will be #define'd as 1 if
+    backtrace_create_state supports setting the MOREDATA flag.  */
+ 
+ #define BACKTRACE_SUPPORTS_MOREDATA 1
diff -Nrcpad gcc-17-20260705/libbacktrace/backtrace.c gcc-17-20260712/libbacktrace/backtrace.c
*** gcc-17-20260705/libbacktrace/backtrace.c	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/libbacktrace/backtrace.c	Sun Jul 12 22:32:18 2026
*************** POSSIBILITY OF SUCH DAMAGE.  */
*** 32,37 ****
--- 32,38 ----
  
  #include "config.h"
  
+ #include <string.h>
  #include <sys/types.h>
  
  #include "unwind.h"
*************** unwind (struct _Unwind_Context *context,
*** 85,95 ****
    if (!ip_before_insn)
      --pc;
  
!   if (!bdata->can_alloc)
!     bdata->ret = bdata->callback (bdata->data, pc, NULL, 0, NULL);
!   else
      bdata->ret = backtrace_pcinfo (bdata->state, pc, bdata->callback,
  				   bdata->error_callback, bdata->data);
    if (bdata->ret != 0)
      return _URC_END_OF_STACK;
  
--- 86,109 ----
    if (!ip_before_insn)
      --pc;
  
!   if (bdata->can_alloc)
      bdata->ret = backtrace_pcinfo (bdata->state, pc, bdata->callback,
  				   bdata->error_callback, bdata->data);
+   else
+     {
+       if (!bdata->state->moredata)
+ 	bdata->ret = bdata->callback (bdata->data, pc, NULL, 0, NULL);
+       else
+ 	{
+ 	  struct backtrace_moredata md;
+ 
+ 	  memset (&md, 0, sizeof md);
+ 	  md.backtrace_version = BACKTRACE_MOREDATA_VERSION;
+ 	  md.backtrace_data = bdata->data;
+ 	  bdata->ret = bdata->callback (&md, pc, NULL, 0, NULL);
+ 	}
+     }
+ 
    if (bdata->ret != 0)
      return _URC_END_OF_STACK;
  
diff -Nrcpad gcc-17-20260705/libbacktrace/backtrace.h gcc-17-20260712/libbacktrace/backtrace.h
*** gcc-17-20260705/libbacktrace/backtrace.h	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/libbacktrace/backtrace.h	Sun Jul 12 22:32:18 2026
*************** typedef void (*backtrace_error_callback)
*** 85,99 ****
  
  /* Create state information for the backtrace routines.  This must be
     called before any of the other routines, and its return value must
!    be passed to all of the other routines.  FILENAME is the path name
!    of the executable file; if it is NULL the library will try
!    system-specific path names.  If not NULL, FILENAME must point to a
!    permanent buffer.  If THREADED is non-zero the state may be
!    accessed by multiple threads simultaneously, and the library will
!    use appropriate atomic operations.  If THREADED is zero the state
!    may only be accessed by one thread at a time.  This returns a state
!    pointer on success, NULL on error.  If an error occurs, this will
!    call the ERROR_CALLBACK routine.
  
     Calling this function allocates resources that cannot be freed.
     There is no backtrace_free_state function.  The state is used to
--- 85,125 ----
  
  /* Create state information for the backtrace routines.  This must be
     called before any of the other routines, and its return value must
!    be passed to all of the other routines.
! 
!    FILENAME is the path name of the executable file; if it is NULL the
!    library will try system-specific path names.  If not NULL, FILENAME
!    must point to a permanent buffer.
! 
!    FLAGS passes flags as bits in an int value:
!    1: THREADED
!    2: MOREDATA
! 
!    If (FLAGS & 1) != 0 the THREADED flag is set.  If this flag is set,
!    the state may be accessed by multiple threads simultaneously, and the
!    library will use appropriate atomic operations.  If THREADED is not
!    set the state may only be accessed by one thread at a time.
! 
!    If (FLAGS & 2) != 0 the MOREDATA flag is set.  If this flag is set,
!    then backtrace_full_callback and backtrace_symbol_callback will not
!    pass the DATA argument as the user-specified DATA value, but will
!    instead pass it as a pointer to a backtrace_moredata struct.  This is
!    a backward compatible approach to getting more data from the various
!    backtrace functions.
! 
!    Historical note: in previous versions (before July, 2026) the FLAGS
!    argument was named THREADED, and passing non-zero for THREADED was
!    documented as doing what setting the THREADED flag does today.  In
!    practice all callers passed either 0 or 1, so the new semantics of
!    the flag do not affect users of old versions of the library.
!    However, code that passes the MOREDATA flag must ensure that it is
!    using a new version of the library.  The backtrace-supported.h file
!    will #define BACKTRACE_SUPPORTS_MOREDATA as 1 for versions of
!    libbacktrace that support the MOREDATA flag.
! 
!    The backtrace_create_state function returns a state pointer on
!    success, NULL on error.  If an error occurs, it will call the
!    ERROR_CALLBACK routine before returning.
  
     Calling this function allocates resources that cannot be freed.
     There is no backtrace_free_state function.  The state is used to
*************** extern struct backtrace_state *backtrace
*** 106,118 ****
      backtrace_error_callback error_callback, void *data);
  
  /* The type of the callback argument to the backtrace_full function.
!    DATA is the argument passed to backtrace_full.  PC is the program
!    counter.  FILENAME is the name of the file containing PC, or NULL
!    if not available.  LINENO is the line number in FILENAME containing
!    PC, or 0 if not available.  FUNCTION is the name of the function
!    containing PC, or NULL if not available.  This should return 0 to
!    continuing tracing.  The FILENAME and FUNCTION buffers may become
!    invalid after this function returns.  */
  
  typedef int (*backtrace_full_callback) (void *data, uintptr_t pc,
  					const char *filename, int lineno,
--- 132,146 ----
      backtrace_error_callback error_callback, void *data);
  
  /* The type of the callback argument to the backtrace_full function.
!    DATA is either the argument passed to backtrace_full (if the MOREDATA
!    flag was not set when calling backtrace_create_state) or a pointer to
!    a backtrace_moredata struct.  PC is the program counter.  FILENAME is
!    the name of the file containing PC, or NULL if not available.  LINENO
!    is the line number in FILENAME containing PC, or 0 if not available.
!    FUNCTION is the name of the function containing PC, or NULL if not
!    available.  This should return 0 to continuing tracing.  The FILENAME
!    and FUNCTION buffers may become invalid after this function
!    returns.  */
  
  typedef int (*backtrace_full_callback) (void *data, uintptr_t pc,
  					const char *filename, int lineno,
*************** extern int backtrace_pcinfo (struct back
*** 173,183 ****
  			     backtrace_error_callback error_callback,
  			     void *data);
  
! /* The type of the callback argument to backtrace_syminfo.  DATA and
!    PC are the arguments passed to backtrace_syminfo.  SYMNAME is the
!    name of the symbol for the corresponding code.  SYMVAL is the
!    value and SYMSIZE is the size of the symbol.  SYMNAME will be NULL
!    if no error occurred but the symbol could not be found.  */
  
  typedef void (*backtrace_syminfo_callback) (void *data, uintptr_t pc,
  					    const char *symname,
--- 201,214 ----
  			     backtrace_error_callback error_callback,
  			     void *data);
  
! /* The type of the callback argument to backtrace_syminfo.  DATA is
!    either the argument passed to backtrace_full (if the MOREDATA flag
!    was not set when calling backtrace_create_state) or a pointer to a
!    backtrace_moredata struct.  PC is the the argument passed to
!    backtrace_syminfo.  SYMNAME is the name of the symbol for the
!    corresponding code.  SYMVAL is the value and SYMSIZE is the size of
!    the symbol.  SYMNAME will be NULL if no error occurred but the symbol
!    could not be found.  */
  
  typedef void (*backtrace_syminfo_callback) (void *data, uintptr_t pc,
  					    const char *symname,
*************** extern int backtrace_syminfo (struct bac
*** 199,204 ****
--- 230,260 ----
  			      backtrace_error_callback error_callback,
  			      void *data);
  
+ /* The type of the value that the DATA argument passed to
+    backtrace_full_callback or backtrace_syminfo_callback points to if
+    the MOREDATA flag is set in the call to backtrace_create_state.
+ 
+    The backtrace_moredata value will only be valid for the lifetime of
+    the callback; the callback may copy the data out but must not save
+    the pointer it receives.  */
+ 
+ struct backtrace_moredata
+ {
+   /* The version of this struct. The current expectation is that the
+      version number will be the number of fields in the struct. It's
+      possible that future versions of libbacktrace will add new fields
+      and increment the version number accordingly. There is no plan to
+      remove fields from this struct.  Thus the current value of the
+      version field will be 3.  */
+   int backtrace_version;
+   /* The DATA value passed to whatever function is calling the callback
+      (backtrace_full, backtrace_pcinfo, or backtrace_syminfo).  */
+   void *backtrace_data;
+   /* The DWARF discriminator.  This is zero if there is none. See
+      https://wiki.dwarfstd.org/Path_Discriminators.md.  */
+   unsigned int backtrace_discriminator;
+ };
+ 
  #ifdef __cplusplus
  } /* End extern "C".  */
  #endif
diff -Nrcpad gcc-17-20260705/libbacktrace/dwarf.c gcc-17-20260712/libbacktrace/dwarf.c
*** gcc-17-20260705/libbacktrace/dwarf.c	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/libbacktrace/dwarf.c	Sun Jul 12 22:32:18 2026
*************** struct line
*** 234,239 ****
--- 234,241 ----
    const char *filename;
    /* Line number.  */
    int lineno;
+   /* Discriminator.  */
+   int disc;
    /* Index of the object in the original array read from the DWARF
       section, before it has been sorted.  The index makes it possible
       to use Quicksort and maintain stability.  */
*************** struct function
*** 263,268 ****
--- 265,273 ----
    /* If this is an inlined function, the line number of the call
       site.  */
    int caller_lineno;
+   /* If this is an inlined function, the discriminator of the call
+      site.  */
+   unsigned int caller_disc;
    /* Map PC ranges to inlined functions.  */
    struct function_addrs *function_addrs;
    size_t function_addrs_count;
*************** read_initial_length (struct dwarf_buf *b
*** 726,731 ****
--- 731,758 ----
    return len;
  }
  
+ /* Call the callback function, which differs based on the moredata state
+    flag.  */
+ 
+ static int
+ call_callback (struct backtrace_state *state, backtrace_full_callback callback,
+ 	       void *data, uintptr_t pc, const char *filename, int lineno,
+ 	       const char *function, unsigned int disc)
+ {
+   if (!state->moredata)
+     return callback (data, pc, filename, lineno, function);
+   else
+     {
+       struct backtrace_moredata md;
+ 
+       memset (&md, 0, sizeof md);
+       md.backtrace_version = BACKTRACE_MOREDATA_VERSION;
+       md.backtrace_data = data;
+       md.backtrace_discriminator = disc;
+       return callback ((void *) &md, pc, filename, lineno, function);
+     }
+ }
+ 
  /* Free an abbreviations structure.  */
  
  static void
*************** build_address_map (struct backtrace_stat
*** 2484,2490 ****
  
  static int
  add_line (struct backtrace_state *state, struct dwarf_data *ddata,
! 	  uintptr_t pc, const char *filename, int lineno,
  	  backtrace_error_callback error_callback, void *data,
  	  struct line_vector *vec)
  {
--- 2511,2517 ----
  
  static int
  add_line (struct backtrace_state *state, struct dwarf_data *ddata,
! 	  uintptr_t pc, const char *filename, int lineno, int disc,
  	  backtrace_error_callback error_callback, void *data,
  	  struct line_vector *vec)
  {
*************** add_line (struct backtrace_state *state,
*** 2496,2502 ****
      {
        ln = (struct line *) vec->vec.base + (vec->count - 1);
        if (pc == ln->pc && filename == ln->filename && lineno == ln->lineno)
! 	return 1;
      }
  
    ln = ((struct line *)
--- 2523,2535 ----
      {
        ln = (struct line *) vec->vec.base + (vec->count - 1);
        if (pc == ln->pc && filename == ln->filename && lineno == ln->lineno)
! 	{
! 	  /* We only care about the discriminator if moredata is true.  */
! 	  if (!state->moredata)
! 	    return 1;
! 	  if (disc == ln->disc)
! 	    return 1;
! 	}
      }
  
    ln = ((struct line *)
*************** add_line (struct backtrace_state *state,
*** 2511,2516 ****
--- 2544,2550 ----
  
    ln->filename = filename;
    ln->lineno = lineno;
+   ln->disc = disc;
    ln->idx = vec->count;
  
    ++vec->count;
*************** read_line_program (struct backtrace_stat
*** 2929,2934 ****
--- 2963,2969 ----
    const char *reset_filename;
    const char *filename;
    int lineno;
+   unsigned int disc;
  
    address = 0;
    op_index = 0;
*************** read_line_program (struct backtrace_stat
*** 2938,2943 ****
--- 2973,2979 ----
      reset_filename = "";
    filename = reset_filename;
    lineno = 1;
+   disc = 0;
    while (line_buf->left > 0)
      {
        unsigned int op;
*************** read_line_program (struct backtrace_stat
*** 2954,2961 ****
  		      / hdr->max_ops_per_insn);
  	  op_index = (op_index + advance) % hdr->max_ops_per_insn;
  	  lineno += hdr->line_base + (int) (op % hdr->line_range);
! 	  add_line (state, ddata, address, filename, lineno,
  		    line_buf->error_callback, line_buf->data, vec);
  	}
        else if (op == DW_LNS_extended_op)
  	{
--- 2990,2998 ----
  		      / hdr->max_ops_per_insn);
  	  op_index = (op_index + advance) % hdr->max_ops_per_insn;
  	  lineno += hdr->line_base + (int) (op % hdr->line_range);
! 	  add_line (state, ddata, address, filename, lineno, disc,
  		    line_buf->error_callback, line_buf->data, vec);
+ 	  disc = 0;
  	}
        else if (op == DW_LNS_extended_op)
  	{
*************** read_line_program (struct backtrace_stat
*** 2973,2978 ****
--- 3010,3016 ----
  	      op_index = 0;
  	      filename = reset_filename;
  	      lineno = 1;
+ 	      disc = 0;
  	      break;
  	    case DW_LNE_set_address:
  	      address = read_address (line_buf, hdr->addrsize);
*************** read_line_program (struct backtrace_stat
*** 3028,3035 ****
  	      }
  	      break;
  	    case DW_LNE_set_discriminator:
! 	      /* We don't care about discriminators.  */
! 	      read_uleb128 (line_buf);
  	      break;
  	    default:
  	      if (!advance (line_buf, len - 1))
--- 3066,3072 ----
  	      }
  	      break;
  	    case DW_LNE_set_discriminator:
! 	      disc = read_uleb128 (line_buf);
  	      break;
  	    default:
  	      if (!advance (line_buf, len - 1))
*************** read_line_program (struct backtrace_stat
*** 3042,3049 ****
  	  switch (op)
  	    {
  	    case DW_LNS_copy:
! 	      add_line (state, ddata, address, filename, lineno,
  			line_buf->error_callback, line_buf->data, vec);
  	      break;
  	    case DW_LNS_advance_pc:
  	      {
--- 3079,3087 ----
  	  switch (op)
  	    {
  	    case DW_LNS_copy:
! 	      add_line (state, ddata, address, filename, lineno, disc,
  			line_buf->error_callback, line_buf->data, vec);
+ 	      disc = 0;
  	      break;
  	    case DW_LNS_advance_pc:
  	      {
*************** read_line_info (struct backtrace_state *
*** 3183,3188 ****
--- 3221,3227 ----
    ln->pc = (uintptr_t) -1;
    ln->filename = NULL;
    ln->lineno = 0;
+   ln->disc = 0;
    ln->idx = 0;
  
    if (!backtrace_vector_release (state, &vec.vec, error_callback, data))
*************** read_function_entry (struct backtrace_st
*** 3512,3517 ****
--- 3551,3561 ----
  		    }
  		  break;
  
+ 		case DW_AT_GNU_discriminator:
+ 		  if (val.encoding == ATTR_VAL_UINT)
+ 		    function->caller_disc = val.u.uint;
+ 		  break;
+ 
  		case DW_AT_call_line:
  		  if (val.encoding == ATTR_VAL_UINT)
  		    function->caller_lineno = val.u.uint;
*************** read_function_info (struct backtrace_sta
*** 3752,3764 ****
  }
  
  /* See if PC is inlined in FUNCTION.  If it is, print out the inlined
!    information, and update FILENAME and LINENO for the caller.
     Returns whatever CALLBACK returns, or 0 to keep going.  */
  
  static int
! report_inlined_functions (uintptr_t pc, struct function *function,
  			  backtrace_full_callback callback, void *data,
! 			  const char **filename, int *lineno)
  {
    struct function_addrs *p;
    struct function_addrs *match;
--- 3796,3810 ----
  }
  
  /* See if PC is inlined in FUNCTION.  If it is, print out the inlined
!    information, and update FILENAME, LINENO, and DISC for the caller.
     Returns whatever CALLBACK returns, or 0 to keep going.  */
  
  static int
! report_inlined_functions (struct backtrace_state *state, uintptr_t pc,
! 			  struct function *function,
  			  backtrace_full_callback callback, void *data,
! 			  const char **filename, int *lineno,
! 			  unsigned int *disc)
  {
    struct function_addrs *p;
    struct function_addrs *match;
*************** report_inlined_functions (uintptr_t pc,
*** 3810,3829 ****
    inlined = match->function;
  
    /* Report any calls inlined into this one.  */
!   ret = report_inlined_functions (pc, inlined, callback, data,
! 				  filename, lineno);
    if (ret != 0)
      return ret;
  
    /* Report this inlined call.  */
!   ret = callback (data, pc, *filename, *lineno, inlined->name);
    if (ret != 0)
      return ret;
  
    /* Our caller will report the caller of the inlined function; tell
!      it the appropriate filename and line number.  */
    *filename = inlined->caller_filename;
    *lineno = inlined->caller_lineno;
  
    return 0;
  }
--- 3856,3877 ----
    inlined = match->function;
  
    /* Report any calls inlined into this one.  */
!   ret = report_inlined_functions (state, pc, inlined, callback, data,
! 				  filename, lineno, disc);
    if (ret != 0)
      return ret;
  
    /* Report this inlined call.  */
!   ret = call_callback (state, callback, data, pc, *filename, *lineno,
! 		       inlined->name, *disc);
    if (ret != 0)
      return ret;
  
    /* Our caller will report the caller of the inlined function; tell
!      it the appropriate filename, line number, and discriminator.  */
    *filename = inlined->caller_filename;
    *lineno = inlined->caller_lineno;
+   *disc = inlined->caller_disc;
  
    return 0;
  }
*************** dwarf_lookup_pc (struct backtrace_state
*** 3850,3855 ****
--- 3898,3904 ----
    struct function *function;
    const char *filename;
    int lineno;
+   unsigned int disc;
    int ret;
  
    *found = 1;
*************** dwarf_lookup_pc (struct backtrace_state
*** 3991,3997 ****
        if (new_data)
  	return dwarf_lookup_pc (state, ddata, pc, callback, error_callback,
  				data, found);
!       return callback (data, pc, NULL, 0, NULL);
      }
  
    /* Search for PC within this unit.  */
--- 4040,4046 ----
        if (new_data)
  	return dwarf_lookup_pc (state, ddata, pc, callback, error_callback,
  				data, found);
!       return call_callback (state, callback, data, pc, NULL, 0, NULL, 0);
      }
  
    /* Search for PC within this unit.  */
*************** dwarf_lookup_pc (struct backtrace_state
*** 4038,4050 ****
  	  entry->u->abs_filename = filename;
  	}
  
!       return callback (data, pc, entry->u->abs_filename, 0, NULL);
      }
  
    /* Search for function name within this unit.  */
  
    if (entry->u->function_addrs_count == 0)
!     return callback (data, pc, ln->filename, ln->lineno, NULL);
  
    p = ((struct function_addrs *)
         bsearch (&pc, entry->u->function_addrs,
--- 4087,4101 ----
  	  entry->u->abs_filename = filename;
  	}
  
!       return call_callback (state, callback, data, pc, entry->u->abs_filename,
! 			    0, NULL, 0);
      }
  
    /* Search for function name within this unit.  */
  
    if (entry->u->function_addrs_count == 0)
!     return call_callback (state, callback, data, pc, ln->filename, ln->lineno,
! 			  NULL, ln->disc);
  
    p = ((struct function_addrs *)
         bsearch (&pc, entry->u->function_addrs,
*************** dwarf_lookup_pc (struct backtrace_state
*** 4052,4058 ****
  		sizeof (struct function_addrs),
  		function_addrs_search));
    if (p == NULL)
!     return callback (data, pc, ln->filename, ln->lineno, NULL);
  
    /* Here pc >= p->low && pc < (p + 1)->low.  The function_addrs are
       sorted by low, so if pc > p->low we are at the end of a range of
--- 4103,4110 ----
  		sizeof (struct function_addrs),
  		function_addrs_search));
    if (p == NULL)
!     return call_callback (state, callback, data, pc, ln->filename, ln->lineno,
! 			  NULL, ln->disc);
  
    /* Here pc >= p->low && pc < (p + 1)->low.  The function_addrs are
       sorted by low, so if pc > p->low we are at the end of a range of
*************** dwarf_lookup_pc (struct backtrace_state
*** 4076,4094 ****
        --p;
      }
    if (fmatch == NULL)
!     return callback (data, pc, ln->filename, ln->lineno, NULL);
  
    function = fmatch->function;
  
    filename = ln->filename;
    lineno = ln->lineno;
  
!   ret = report_inlined_functions (pc, function, callback, data,
! 				  &filename, &lineno);
    if (ret != 0)
      return ret;
  
!   return callback (data, pc, filename, lineno, function->name);
  }
  
  
--- 4128,4149 ----
        --p;
      }
    if (fmatch == NULL)
!     return call_callback (state, callback, data, pc, ln->filename, ln->lineno,
! 			  NULL, ln->disc);
  
    function = fmatch->function;
  
    filename = ln->filename;
    lineno = ln->lineno;
+   disc = ln->disc;
  
!   ret = report_inlined_functions (state, pc, function, callback, data,
! 				  &filename, &lineno, &disc);
    if (ret != 0)
      return ret;
  
!   return call_callback (state, callback, data, pc, filename, lineno,
! 			function->name, disc);
  }
  
  
*************** dwarf_fileline (struct backtrace_state *
*** 4138,4144 ****
  
    /* FIXME: See if any libraries have been dlopen'ed.  */
  
!   return callback (data, pc, NULL, 0, NULL);
  }
  
  /* Initialize our data structures from the DWARF debug info for a
--- 4193,4199 ----
  
    /* FIXME: See if any libraries have been dlopen'ed.  */
  
!   return call_callback (state, callback, data, pc, NULL, 0, NULL, 0);
  }
  
  /* Initialize our data structures from the DWARF debug info for a
diff -Nrcpad gcc-17-20260705/libbacktrace/elf.c gcc-17-20260712/libbacktrace/elf.c
*** gcc-17-20260705/libbacktrace/elf.c	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/libbacktrace/elf.c	Sun Jul 12 22:32:18 2026
*************** elf_syminfo (struct backtrace_state *sta
*** 767,772 ****
--- 767,774 ----
  {
    struct elf_syminfo_data *edata;
    struct elf_symbol *sym = NULL;
+   void *mdata;
+   struct backtrace_moredata md;
  
    if (!state->threaded)
      {
*************** elf_syminfo (struct backtrace_state *sta
*** 802,811 ****
  	}
      }
  
    if (sym == NULL)
!     callback (data, addr, NULL, 0, 0);
    else
!     callback (data, addr, sym->name, sym->address, sym->size);
  }
  
  /* Return whether FILENAME is a symlink.  */
--- 804,823 ----
  	}
      }
  
+   if (!state->moredata)
+     mdata = data;
+   else
+     {
+       memset (&md, 0, sizeof md);
+       md.backtrace_version = BACKTRACE_MOREDATA_VERSION;
+       md.backtrace_data = data;
+       mdata = (void *) &md;
+     }
+ 
    if (sym == NULL)
!     callback (mdata, addr, NULL, 0, 0);
    else
!     callback (mdata, addr, sym->name, sym->address, sym->size);
  }
  
  /* Return whether FILENAME is a symlink.  */
diff -Nrcpad gcc-17-20260705/libbacktrace/fileline.c gcc-17-20260712/libbacktrace/fileline.c
*** gcc-17-20260705/libbacktrace/fileline.c	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/libbacktrace/fileline.c	Sun Jul 12 22:32:18 2026
*************** backtrace_syminfo_to_full_callback (void
*** 425,430 ****
--- 425,433 ----
  {
    struct backtrace_call_full *bdata = (struct backtrace_call_full *) data;
  
+   /* If STATE->MOREDATA is set, then data will point to a
+      backtrace_moredata struct, which is what full_callback expects.  */
+ 
    bdata->ret = bdata->full_callback (bdata->full_data, pc, NULL, 0, symname);
  }
  
diff -Nrcpad gcc-17-20260705/libbacktrace/internal.h gcc-17-20260712/libbacktrace/internal.h
*** gcc-17-20260705/libbacktrace/internal.h	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/libbacktrace/internal.h	Sun Jul 12 22:32:18 2026
*************** struct backtrace_state
*** 143,148 ****
--- 143,150 ----
    const char *filename;
    /* Non-zero if threaded.  */
    int threaded;
+   /* Non-zero if passing additional data.  */
+   int moredata;
    /* The master lock for fileline_fn, fileline_data, syminfo_fn,
       syminfo_data, fileline_initialization_failed and everything the
       data pointers point to.  */
*************** extern int backtrace_uncompress_lzma (st
*** 425,428 ****
--- 427,433 ----
  				      unsigned char **uncompressed,
  				      size_t *uncompressed_size);
  
+ /* Current expected backtrace_moredata version.  */
+ #define BACKTRACE_MOREDATA_VERSION (3)
+ 
  #endif
diff -Nrcpad gcc-17-20260705/libbacktrace/macho.c gcc-17-20260712/libbacktrace/macho.c
*** gcc-17-20260705/libbacktrace/macho.c	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/libbacktrace/macho.c	Sun Jul 12 22:32:18 2026
*************** macho_syminfo (struct backtrace_state *s
*** 711,716 ****
--- 711,718 ----
  {
    struct macho_syminfo_data *sdata;
    struct macho_symbol *sym;
+   void *mdata;
+   struct backtrace_moredata md;
  
    sym = NULL;
    if (!state->threaded)
*************** macho_syminfo (struct backtrace_state *s
*** 747,756 ****
  	}
      }
  
    if (sym == NULL)
!     callback (data, addr, NULL, 0, 0);
    else
!     callback (data, addr, sym->name, sym->address, 0);
  }
  
  /* Look through a fat file to find the relevant executable.  Returns 1
--- 749,768 ----
  	}
      }
  
+   if (!state->moredata)
+     mdata = data;
+   else
+     {
+       memset (&md, 0, sizeof md);
+       md.backtrace_version = BACKTRACE_MOREDATA_VERSION;
+       md.backtrace_data = data;
+       mdata = (void *) &md;
+     }
+ 
    if (sym == NULL)
!     callback (mdata, addr, NULL, 0, 0);
    else
!     callback (mdata, addr, sym->name, sym->address, 0);
  }
  
  /* Look through a fat file to find the relevant executable.  Returns 1
diff -Nrcpad gcc-17-20260705/libbacktrace/mdtest.c gcc-17-20260712/libbacktrace/mdtest.c
*** gcc-17-20260705/libbacktrace/mdtest.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/libbacktrace/mdtest.c	Sun Jul 12 22:32:18 2026
***************
*** 0 ****
--- 1,290 ----
+ /* mdtest.c -- Test for libbacktrace library with moredata flag
+    Copyright (C) 2026 Free Software Foundation, Inc.
+    Written by Ian Lance Taylor.
+ 
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+ 
+     (1) Redistributions of source code must retain the above copyright
+     notice, this list of conditions and the following disclaimer.
+ 
+     (2) Redistributions in binary form must reproduce the above copyright
+     notice, this list of conditions and the following disclaimer in
+     the documentation and/or other materials provided with the
+     distribution.
+ 
+     (3) The name of the author may not be used to
+     endorse or promote products derived from this software without
+     specific prior written permission.
+ 
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.  */
+ 
+ /* This program tests the externally visible interfaces of the
+    libbacktrace library.  */
+ 
+ #include <assert.h>
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <string.h>
+ #include <unistd.h>
+ #include <sys/stat.h>
+ 
+ #include "filenames.h"
+ 
+ #include "backtrace.h"
+ #include "backtrace-supported.h"
+ #include "internal.h"
+ 
+ #include "testlib.h"
+ 
+ /* backtrace_full_callback with moredata flag.  */
+ 
+ static int
+ md_callback_one (void *vdata, uintptr_t pc, const char *filename, int lineno,
+ 		 const char *function)
+ {
+   struct backtrace_moredata *md = (struct backtrace_moredata *) vdata;
+   struct bdata *data = (struct bdata *) md->backtrace_data;
+ 
+   if (md->backtrace_version != BACKTRACE_MOREDATA_VERSION)
+     {
+       fprintf (stderr, "md_callback_one: wrong moredata version: got %u, want %u\n", md->backtrace_version, BACKTRACE_MOREDATA_VERSION);
+       data->failed = 1;
+       return 1;
+     }
+ 
+   return callback_one ((void *) data, pc, filename, lineno, function);
+ }
+ 
+ /* backtrace_syminfo_callback with moredata flag.  */
+ 
+ static void
+ md_callback_three (void *vdata, uintptr_t pc, const char *symname,
+ 		  uintptr_t symval, uintptr_t symsize)
+ {
+   struct backtrace_moredata *md = (struct backtrace_moredata *) vdata;
+   struct symdata *data = (struct symdata *) md->backtrace_data;
+ 
+   if (md->backtrace_version != BACKTRACE_MOREDATA_VERSION)
+     {
+       fprintf (stderr, "md_callback_one: wrong moredata version: got %u, want %u\n", md->backtrace_version, BACKTRACE_MOREDATA_VERSION);
+       return;
+     }
+ 
+   callback_three ((void *) data, pc, symname, symval, symsize);
+ }
+ 
+ /* Test the backtrace function with non-inlined functions.  */
+ 
+ static int test1 (void) __attribute__ ((noinline, noclone, optnone, unused));
+ static int f2 (int) __attribute__ ((noinline, noclone));
+ static int f3 (int, int) __attribute__ ((noinline, noclone));
+ 
+ static int
+ test1 (void)
+ {
+   /* Returning a value here and elsewhere avoids a tailcall which
+      would mess up the backtrace.  */
+   return f2 (__LINE__) + 1;
+ }
+ 
+ static int
+ f2 (int f1line)
+ {
+   return f3 (f1line, __LINE__) + 2;
+ }
+ 
+ static int
+ f3 (int f1line, int f2line)
+ {
+   struct info all[20];
+   struct bdata data;
+   int f3line;
+   int i;
+ 
+   data.all = &all[0];
+   data.index = 0;
+   data.max = 20;
+   data.failed = 0;
+ 
+   f3line = __LINE__ + 1;
+   i = backtrace_full (state, 0, md_callback_one, error_callback_one, &data);
+ 
+   if (i != 0)
+     {
+       fprintf (stderr, "test1: unexpected return value %d\n", i);
+       data.failed = 1;
+     }
+ 
+   if (data.index < 3)
+     {
+       fprintf (stderr,
+ 	       "test1: not enough frames; got %zu, expected at least 3\n",
+ 	       data.index);
+       data.failed = 1;
+     }
+ 
+   check ("test1", 0, all, f3line, "f3", "mdtest.c", &data.failed);
+   check ("test1", 1, all, f2line, "f2", "mdtest.c", &data.failed);
+   check ("test1", 2, all, f1line, "test1", "mdtest.c", &data.failed);
+ 
+   printf ("%s: backtrace_full noinline\n", data.failed ? "FAIL" : "PASS");
+ 
+   if (data.failed)
+     ++failures;
+ 
+   return failures;
+ }
+ 
+ /* Test the backtrace function with inlined functions.  */
+ 
+ static inline int test2 (void) __attribute__ ((always_inline, unused));
+ static inline int f12 (int) __attribute__ ((always_inline));
+ static inline int f13 (int, int) __attribute__ ((always_inline));
+ 
+ static inline int
+ test2 (void)
+ {
+   return f12 (__LINE__) + 1;
+ }
+ 
+ static inline int
+ f12 (int f1line)
+ {
+   return f13 (f1line, __LINE__) + 2;
+ }
+ 
+ static inline int
+ f13 (int f1line, int f2line)
+ {
+   struct info all[20];
+   struct bdata data;
+   int f3line;
+   int i;
+ 
+   data.all = &all[0];
+   data.index = 0;
+   data.max = 20;
+   data.failed = 0;
+ 
+   f3line = __LINE__ + 1;
+   i = backtrace_full (state, 0, md_callback_one, error_callback_one, &data);
+ 
+   if (i != 0)
+     {
+       fprintf (stderr, "test2: unexpected return value %d\n", i);
+       data.failed = 1;
+     }
+ 
+   check ("test2", 0, all, f3line, "f13", "mdtest.c", &data.failed);
+   check ("test2", 1, all, f2line, "f12", "mdtest.c", &data.failed);
+   check ("test2", 2, all, f1line, "test2", "mdtest.c", &data.failed);
+ 
+   printf ("%s: backtrace_full inline\n", data.failed ? "FAIL" : "PASS");
+ 
+   if (data.failed)
+     ++failures;
+ 
+   return failures;
+ }
+ 
+ static int test5 (void) __attribute__ ((unused));
+ 
+ int global = 1;
+ 
+ static int
+ test5 (void)
+ {
+   struct symdata symdata;
+   int i;
+   uintptr_t addr = (uintptr_t) &global;
+ 
+   if (sizeof (global) > 1)
+     addr += 1;
+ 
+   symdata.name = NULL;
+   symdata.val = 0;
+   symdata.size = 0;
+   symdata.failed = 0;
+ 
+   i = backtrace_syminfo (state, addr, md_callback_three,
+ 			 error_callback_three, &symdata);
+   if (i == 0)
+     {
+       fprintf (stderr,
+ 	       "test5: unexpected return value from backtrace_syminfo %d\n",
+ 	       i);
+       symdata.failed = 1;
+     }
+ 
+   if (!symdata.failed)
+     {
+       if (symdata.name == NULL)
+ 	{
+ 	  fprintf (stderr, "test5: NULL syminfo name\n");
+ 	  symdata.failed = 1;
+ 	}
+       else if (!(strncmp (symdata.name, "global", 6) == 0
+ 		 && (symdata.name[6] == '\0'|| symdata.name[6] == '.')))
+ 	{
+ 	  fprintf (stderr,
+ 		   "test5: unexpected syminfo name got %s expected %s\n",
+ 		   symdata.name, "global");
+ 	  symdata.failed = 1;
+ 	}
+       else if (symdata.val != (uintptr_t) &global)
+ 	{
+ 	  fprintf (stderr,
+ 		   "test5: unexpected syminfo value got %lx expected %lx\n",
+ 		   (unsigned long) symdata.val,
+ 		   (unsigned long) (uintptr_t) &global);
+ 	  symdata.failed = 1;
+ 	}
+       else if (symdata.size != sizeof (global) && symdata.size != 0)
+ 	{
+ 	  fprintf (stderr,
+ 		   "test5: unexpected syminfo size got %lx expected %lx\n",
+ 		   (unsigned long) symdata.size,
+ 		   (unsigned long) sizeof (global));
+ 	  symdata.failed = 1;
+ 	}
+     }
+ 
+   printf ("%s: backtrace_syminfo variable\n",
+ 	  symdata.failed ? "FAIL" : "PASS");
+ 
+   if (symdata.failed)
+     ++failures;
+ 
+   return failures;
+ }
+ 
+ /* Run all the tests.  */
+ 
+ int
+ main (int argc ATTRIBUTE_UNUSED, char **argv)
+ {
+   state = backtrace_create_state (argv[0], BACKTRACE_SUPPORTS_THREADS | 2,
+ 				  error_callback_create, NULL);
+ 
+ #if BACKTRACE_SUPPORTED
+   test1 ();
+   test2 ();
+ #if BACKTRACE_SUPPORTS_DATA
+   test5 ();
+ #endif
+ #endif
+ 
+   exit (failures ? EXIT_FAILURE : EXIT_SUCCESS);
+ }
diff -Nrcpad gcc-17-20260705/libbacktrace/pecoff.c gcc-17-20260712/libbacktrace/pecoff.c
*** gcc-17-20260705/libbacktrace/pecoff.c	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/libbacktrace/pecoff.c	Sun Jul 12 22:32:18 2026
*************** coff_syminfo (struct backtrace_state *st
*** 587,592 ****
--- 587,594 ----
  {
    struct coff_syminfo_data *sdata;
    struct coff_symbol *sym = NULL;
+   void *mdata;
+   struct backtrace_moredata md;
  
    if (!state->threaded)
      {
*************** coff_syminfo (struct backtrace_state *st
*** 622,631 ****
  	}
      }
  
    if (sym == NULL)
!     callback (data, addr, NULL, 0, 0);
    else
!     callback (data, addr, sym->name, sym->address, 0);
  }
  
  /* Add the backtrace data for one PE/COFF file.  Returns 1 on success,
--- 624,643 ----
  	}
      }
  
+   if (!state->moredata)
+     mdata = data;
+   else
+     {
+       memset (&md, 0, sizeof md);
+       md.backtrace_version = 3;
+       md.backtrace_data = data;
+       mdata = (void *) &md;
+     }
+ 
    if (sym == NULL)
!     callback (mdata, addr, NULL, 0, 0);
    else
!     callback (mdata, addr, sym->name, sym->address, 0);
  }
  
  /* Add the backtrace data for one PE/COFF file.  Returns 1 on success,
diff -Nrcpad gcc-17-20260705/libbacktrace/state.c gcc-17-20260712/libbacktrace/state.c
*** gcc-17-20260705/libbacktrace/state.c	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/libbacktrace/state.c	Sun Jul 12 22:32:18 2026
*************** POSSIBILITY OF SUCH DAMAGE.  */
*** 43,55 ****
     other routines.  */
  
  struct backtrace_state *
! backtrace_create_state (const char *filename, int threaded,
  			backtrace_error_callback error_callback,
  			void *data)
  {
    struct backtrace_state init_state;
    struct backtrace_state *state;
  
  #ifndef HAVE_SYNC_FUNCTIONS
    if (threaded)
      {
--- 43,65 ----
     other routines.  */
  
  struct backtrace_state *
! backtrace_create_state (const char *filename, int flags,
  			backtrace_error_callback error_callback,
  			void *data)
  {
+   int threaded;
+   int moredata;
    struct backtrace_state init_state;
    struct backtrace_state *state;
  
+   threaded = (flags & 1) != 0;
+   moredata = (flags & 2) != 0;
+   if ((flags & ~3) != 0)
+     {
+       error_callback (data, "backtrace_create_state: unsupported flag", 0);
+       return NULL;
+     }
+ 
  #ifndef HAVE_SYNC_FUNCTIONS
    if (threaded)
      {
*************** backtrace_create_state (const char *file
*** 61,66 ****
--- 71,77 ----
    memset (&init_state, 0, sizeof init_state);
    init_state.filename = filename;
    init_state.threaded = threaded;
+   init_state.moredata = moredata;
  
    state = ((struct backtrace_state *)
  	   backtrace_alloc (&init_state, sizeof *state, error_callback, data));
diff -Nrcpad gcc-17-20260705/libbacktrace/unknown.c gcc-17-20260712/libbacktrace/unknown.c
*** gcc-17-20260705/libbacktrace/unknown.c	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/libbacktrace/unknown.c	Sun Jul 12 22:32:18 2026
*************** POSSIBILITY OF SUCH DAMAGE.  */
*** 32,37 ****
--- 32,38 ----
  
  #include "config.h"
  
+ #include <string.h>
  #include <sys/types.h>
  
  #include "backtrace.h"
*************** POSSIBILITY OF SUCH DAMAGE.  */
*** 40,52 ****
  /* A trivial routine that always fails to find fileline data.  */
  
  static int
! unknown_fileline (struct backtrace_state *state ATTRIBUTE_UNUSED,
! 		  uintptr_t pc, backtrace_full_callback callback,
  		  backtrace_error_callback error_callback ATTRIBUTE_UNUSED,
  		  void *data)
  
  {
!   return callback (data, pc, NULL, 0, NULL);
  }
  
  /* Initialize the backtrace data when we don't know how to read the
--- 41,63 ----
  /* A trivial routine that always fails to find fileline data.  */
  
  static int
! unknown_fileline (struct backtrace_state *state, uintptr_t pc,
! 		  backtrace_full_callback callback,
  		  backtrace_error_callback error_callback ATTRIBUTE_UNUSED,
  		  void *data)
  
  {
!   if (!state->moredata)
!     return callback (data, pc, NULL, 0, NULL);
!   else
!     {
!       struct backtrace_moredata md;
! 
!       memset (&md, 0, sizeof md);
!       md.backtrace_version = 3;
!       md.backtrace_data = data;
!       return callback ((void *) &md, pc, NULL, 0, NULL);
!     }
  }
  
  /* Initialize the backtrace data when we don't know how to read the
diff -Nrcpad gcc-17-20260705/libbacktrace/xcoff.c gcc-17-20260712/libbacktrace/xcoff.c
*** gcc-17-20260705/libbacktrace/xcoff.c	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/libbacktrace/xcoff.c	Sun Jul 12 22:32:18 2026
*************** xcoff_syminfo (struct backtrace_state *s
*** 512,517 ****
--- 512,519 ----
    struct xcoff_syminfo_data *edata;
    struct xcoff_symbol *sym = NULL;
    const char *name;
+   void *mdata;
+   struct backtrace_moredata md;
  
    if (!state->threaded)
      {
*************** xcoff_syminfo (struct backtrace_state *s
*** 547,561 ****
  	}
      }
  
    if (sym == NULL)
!     callback (data, addr, NULL, 0, 0);
    else
      {
        name = sym->name;
        /* AIX prepends a '.' to function entry points, remove it.  */
        if (name && *name == '.')
  	++name;
!       callback (data, addr, name, sym->address, sym->size);
      }
  }
  
--- 549,573 ----
  	}
      }
  
+   if (!state->moredata)
+     mdata = data;
+   else
+     {
+       memset (&md, 0, sizeof md);
+       md.backtrace_version = 3;
+       md.backtrace_data = data;
+       mdata = (void *) &md;
+     }
+ 
    if (sym == NULL)
!     callback (mdata, addr, NULL, 0, 0);
    else
      {
        name = sym->name;
        /* AIX prepends a '.' to function entry points, remove it.  */
        if (name && *name == '.')
  	++name;
!       callback (mdata, addr, name, sym->address, sym->size);
      }
  }
  
*************** xcoff_incl_search (const void *vkey, con
*** 723,729 ****
     0 if not.  */
  
  static int
! xcoff_lookup_pc (struct backtrace_state *state ATTRIBUTE_UNUSED,
  		 struct xcoff_fileline_data *fdata, uintptr_t pc,
  		 backtrace_full_callback callback,
  		 backtrace_error_callback error_callback ATTRIBUTE_UNUSED,
--- 735,741 ----
     0 if not.  */
  
  static int
! xcoff_lookup_pc (struct backtrace_state *state,
  		 struct xcoff_fileline_data *fdata, uintptr_t pc,
  		 backtrace_full_callback callback,
  		 backtrace_error_callback error_callback ATTRIBUTE_UNUSED,
*************** xcoff_lookup_pc (struct backtrace_state
*** 805,811 ****
    /* AIX prepends a '.' to function entry points, remove it.  */
    if (function != NULL && *function == '.')
      ++function;
!   return callback (data, pc, filename, lnno, function);
  }
  
  /* Return the file/line information for a PC using the XCOFF lineno
--- 817,834 ----
    /* AIX prepends a '.' to function entry points, remove it.  */
    if (function != NULL && *function == '.')
      ++function;
! 
!   if (!state->moredata)
!     return callback (data, pc, filename, lnno, function);
!   else
!     {
!       struct backtrace_moredata md;
! 
!       memset (&md, 0, sizeof md);
!       md.backtrace_version = 3;
!       md.backtrace_data = data;
!       return callback ((void *) &md, pc, filename, lnno, function);
!     }
  }
  
  /* Return the file/line information for a PC using the XCOFF lineno
*************** xcoff_fileline (struct backtrace_state *
*** 855,861 ****
  
    /* FIXME: See if any libraries have been dlopen'ed.  */
  
!   return callback (data, pc, NULL, 0, NULL);
  }
  
  /* Initialize the function vector info for xcoff_fileline.  */
--- 878,894 ----
  
    /* FIXME: See if any libraries have been dlopen'ed.  */
  
!   if (!state->moredata)
!     return callback (data, pc, NULL, 0, NULL);
!   else
!     {
!       struct backtrace_moredata md;
! 
!       memset (&md, 0, sizeof md);
!       md.backtrace_version = 3;
!       md.backtrace_data = data;
!       return callback ((void *) data, pc, NULL, 0, NULL);
!     }
  }
  
  /* Initialize the function vector info for xcoff_fileline.  */
diff -Nrcpad gcc-17-20260705/libgcc/ChangeLog gcc-17-20260712/libgcc/ChangeLog
*** gcc-17-20260705/libgcc/ChangeLog	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/libgcc/ChangeLog	Sun Jul 12 22:32:18 2026
***************
*** 1,3 ****
--- 1,42 ----
+ 2026-07-11  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+ 
+ 	* config.host <i[34567]86-*-netbsdelf*> (tmake_file): Add
+ 	i386/t-msabi.
+ 	<x86_64-*-netbsd*>: Likewise.
+ 
+ 2026-07-09  Stefan Schulze Frielinghaus  <stefansf@gcc.gnu.org>
+ 
+ 	* config.host: Remove target s390-*.  Remove -m31 part.
+ 	* config/s390/libgcc-glibc.ver: Remove -m31 part.
+ 	* config/s390/morestack.S: Ditto.
+ 	* config/s390/sfp-machine.h: Ditto.
+ 	* configure: Regenerate.
+ 	* configure.ac: Remove target s390-*.
+ 	* generic-morestack.c: Remove -m31 part.
+ 	* config/s390/32/_fixdfdi.c: Removed.
+ 	* config/s390/32/_fixsfdi.c: Removed.
+ 	* config/s390/32/_fixtfdi.c: Removed.
+ 	* config/s390/32/_fixunsdfdi.c: Removed.
+ 	* config/s390/32/_fixunssfdi.c: Removed.
+ 	* config/s390/32/_fixunstfdi.c: Removed.
+ 	* config/s390/32/t-floattodi: Removed.
+ 
+ 2026-07-08  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	* config/avr/t-avr (LIB1ASMFUNCS): Add _negsi2_r18.
+ 	* config/avr/asm-defs.h (.call_if_neg): New .macro.
+ 	* config/avr/lib1funcs.S (__divmodsi4): Use .call_if_neg.
+ 	(__negsi2_r18): New function.
+ 	* config/avr/lib1funcs-fixed.S (__divsa3): Use .call_if_neg.
+ 
+ 2026-07-05  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+ 
+ 	* configure.ac (solaris_ld_v2_maps): Remove.
+ 	* configure: Regenerate.
+ 	* Makefile.in (solaris_ld_v2_maps): Remove.
+ 	* config/t-slibgcc-sld (libgcc-unwind.map): Remove
+ 	solaris_ld_v2_maps handling.
+ 
  2026-07-04  Iain Sandoe  <iain@sandoe.co.uk>
  
  	PR libgcc/123976
diff -Nrcpad gcc-17-20260705/libgcc/config/avr/asm-defs.h gcc-17-20260712/libgcc/config/avr/asm-defs.h
*** gcc-17-20260705/libgcc/config/avr/asm-defs.h	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/libgcc/config/avr/asm-defs.h	Sun Jul 12 22:32:18 2026
***************
*** 159,164 ****
--- 159,179 ----
  .endm ; .branch_plus
  
  
+ ;;; [R]CALL label LABL when REG is negative (REG.7 = 1).
+ ;;; Otherwise, fallthrough.
+ .macro  .call_if_neg  reg, labl
+ #ifdef __AVR_ERRATA_SKIP_JMP_CALL__
+     ;; Some cores have a problem skipping 2-word instructions.
+     tst     \reg
+     brpl    .L.call_if_neg.\@
+ #else
+     sbrc    \reg, 7
+ #endif /* skip erratum */
+     XCALL   \labl
+ .L.call_if_neg.\@:
+ .endm ; .call_if_neg
+ 
+ 
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  ;;; Macros for convenience.
  
diff -Nrcpad gcc-17-20260705/libgcc/config/avr/lib1funcs-fixed.S gcc-17-20260712/libgcc/config/avr/lib1funcs-fixed.S
*** gcc-17-20260705/libgcc/config/avr/lib1funcs-fixed.S	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/libgcc/config/avr/lib1funcs-fixed.S	Sun Jul 12 22:32:18 2026
*************** ENDF __udivuha3
*** 1118,1127 ****
  DEFUN   __divsa3
      mov     r0, r_arg1HH
      eor     r0, r_divHH
!     sbrs    r_divHH, 7
!     rjmp    1f
!     NEG4    r_divL
! 1:
      sbrs    r_arg1HH, 7
      rjmp    2f
      NEG4    r_arg1L
--- 1118,1124 ----
  DEFUN   __divsa3
      mov     r0, r_arg1HH
      eor     r0, r_divHH
!     .call_if_neg r_divHH, __negsi2_r18
      sbrs    r_arg1HH, 7
      rjmp    2f
      NEG4    r_arg1L
diff -Nrcpad gcc-17-20260705/libgcc/config/avr/lib1funcs.S gcc-17-20260712/libgcc/config/avr/lib1funcs.S
*** gcc-17-20260705/libgcc/config/avr/lib1funcs.S	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/libgcc/config/avr/lib1funcs.S	Sun Jul 12 22:32:18 2026
*************** ENDF __udivmodsi4
*** 1504,1545 ****
  #if defined (L_divmodsi4)
  DEFUN __divmodsi4
      mov     __tmp_reg__,r_arg2HH
!     bst     r_arg1HH,7          ; store sign of dividend
      brtc    0f
!     com     __tmp_reg__         ; r0.7 is sign of result
!     XCALL   __negsi2            ; dividend negative: negate
  0:
!     sbrc    r_arg2HH,7
!     rcall   __divmodsi4_neg2    ; divisor negative: negate
!     XCALL   __udivmodsi4        ; do the unsigned div/mod
!     sbrc    __tmp_reg__, 7      ; correct quotient sign
!     rcall   __divmodsi4_neg2
!     brtc    __divmodsi4_exit    ; correct remainder sign
      XJMP    __negsi2
- __divmodsi4_neg2:
-     ;; correct divisor/quotient sign
-     com     r_arg2HH
-     com     r_arg2HL
-     com     r_arg2H
-     neg     r_arg2L
-     sbci    r_arg2H,0xff
-     sbci    r_arg2HL,0xff
-     sbci    r_arg2HH,0xff
  __divmodsi4_exit:
      ret
  ENDF __divmodsi4
  #endif /* defined (L_divmodsi4) */
  
- #if defined (L_negsi2)
- ;; (set (reg:SI 22)
- ;;      (neg:SI (reg:SI 22)))
- ;; Sets the V flag for signed overflow tests
- DEFUN __negsi2
-     NEG4    22
-     ret
- ENDF __negsi2
- #endif /* L_negsi2 */
- 
  #undef r_remHH
  #undef r_remHL
  #undef r_remH
--- 1504,1524 ----
  #if defined (L_divmodsi4)
  DEFUN __divmodsi4
      mov     __tmp_reg__,r_arg2HH
!     bst     r_arg1HH,7                  ; store sign of dividend
      brtc    0f
!     com     __tmp_reg__                 ; r0.7 is sign of result
!     XCALL   __negsi2                    ; dividend negative: negate
  0:
!     .call_if_neg r_arg2HH, __negsi2_r18 ; divisor negative: negate
!     XCALL   __udivmodsi4                ; do the unsigned div/mod
!     .call_if_neg __tmp_reg__, __negsi2_r18 ; correct quotient sign
!     brtc    __divmodsi4_exit            ; correct remainder sign
      XJMP    __negsi2
  __divmodsi4_exit:
      ret
  ENDF __divmodsi4
  #endif /* defined (L_divmodsi4) */
  
  #undef r_remHH
  #undef r_remHL
  #undef r_remH
*************** ENDF __negsi2
*** 1554,1559 ****
--- 1533,1558 ----
  #undef r_arg2L
  #undef r_cnt
  
+ #if defined (L_negsi2)
+ ;; (set (reg:SI 22)
+ ;;      (neg:SI (reg:SI 22)))
+ ;; Sets the V flag for signed overflow tests
+ DEFUN __negsi2
+     NEG4    22
+     ret
+ ENDF __negsi2
+ #endif /* L_negsi2 */
+ 
+ #if defined (L_negsi2_r18)
+ ;; (set (reg:SI 18)
+ ;;      (neg:SI (reg:SI 18)))
+ ;; Sets the V flag for signed overflow tests
+ DEFUN __negsi2_r18
+     NEG4    18
+     ret
+ ENDF __negsi2_r18
+ #endif /* L_negsi2_r18 */
+ 
  /* *di routines use registers below R19 and won't work with tiny arch
     right now. */
  
diff -Nrcpad gcc-17-20260705/libgcc/config/avr/t-avr gcc-17-20260712/libgcc/config/avr/t-avr
*** gcc-17-20260705/libgcc/config/avr/t-avr	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/libgcc/config/avr/t-avr	Sun Jul 12 22:32:18 2026
*************** LIB1ASMFUNCS = \
*** 14,19 ****
--- 14,20 ----
  	_udivmodsi4 \
  	_divmodsi4 \
  	_negsi2 \
+ 	_negsi2_r18 \
  	_exit \
  	_cleanup \
  	_tablejump2 \
diff -Nrcpad gcc-17-20260705/libgcc/config/s390/32/_fixdfdi.c gcc-17-20260712/libgcc/config/s390/32/_fixdfdi.c
*** gcc-17-20260705/libgcc/config/s390/32/_fixdfdi.c	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/libgcc/config/s390/32/_fixdfdi.c	Thu Jan  1 00:00:00 1970
***************
*** 1,113 ****
- /* Definitions of target machine for GNU compiler, for IBM S/390
-    Copyright (C) 1999-2026 Free Software Foundation, Inc.
-    Contributed by Hartmut Penner (hpenner@de.ibm.com) and
-                   Ulrich Weigand (uweigand@de.ibm.com).
- 
- This file is part of GCC.
- 
- GCC is free software; you can redistribute it and/or modify it under
- the terms of the GNU General Public License as published by the Free
- Software Foundation; either version 3, or (at your option) any later
- version.
- 
- GCC is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or
- FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- for more details.
- 
- Under Section 7 of GPL version 3, you are granted additional
- permissions described in the GCC Runtime Library Exception, version
- 3.1, as published by the Free Software Foundation.
- 
- You should have received a copy of the GNU General Public License and
- a copy of the GCC Runtime Library Exception along with this program;
- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
- <http://www.gnu.org/licenses/>.  */
- 
- #ifndef __s390x__
- 
- #define EXPD(fp)	(((fp.l.upper) >> 20) & 0x7FF)
- #define EXPONENT_BIAS	1023
- #define MANTISSA_BITS   52
- #define PRECISION       (MANTISSA_BITS + 1)
- #define SIGNBIT		0x80000000
- #define SIGN(fp)	((fp.l.upper) & SIGNBIT)
- #define MANTD_LL(fp)	((fp.ll & (HIDDEND_LL-1)) | HIDDEND_LL)
- #define FRACD_LL(fp)	(fp.ll & (HIDDEND_LL-1))
- #define HIDDEND_LL	((UDItype_x)1 << MANTISSA_BITS)
- #define LLONG_MAX       9223372036854775807LL
- #define LLONG_MIN       (-LLONG_MAX - 1LL)
- 
- typedef int DItype_x __attribute__ ((mode (DI)));
- typedef unsigned int UDItype_x __attribute__ ((mode (DI)));
- typedef int SItype_x __attribute__ ((mode (SI)));
- typedef unsigned int USItype_x __attribute__ ((mode (SI)));
- 
- union double_long {
-     double d;
-     struct {
-       SItype_x upper;
-       USItype_x lower;
-     } l;
-     UDItype_x ll;
- };
- 
- static __inline__ void
- fexceptdiv (float d, float e)
- {
-   __asm__ __volatile__ ("debr %0,%1" : : "f" (d), "f" (e) );
- }
- 
- DItype_x __fixdfdi (double a1);
- 
- /* convert double to int */
- DItype_x
- __fixdfdi (double a1)
- {
-     register union double_long dl1;
-     register int exp;
-     register DItype_x l;
- 
-     dl1.d = a1;
- 
-     /* +/- 0, denormalized */
-     if (!EXPD (dl1))
-       return 0;
- 
-     /* The exponent - considered the binary point at the right end of
-        the mantissa.  */
-     exp = EXPD (dl1) - EXPONENT_BIAS - MANTISSA_BITS;
- 
-     /* number < 1 */
-     if (exp <= -PRECISION)
-       return 0;
- 
-     /* NaN */
- 
-     if ((EXPD(dl1) == 0x7ff) && (FRACD_LL(dl1) != 0)) /* NaN */
-       {
- 	/* C99 Annex F.4 requires an "invalid" exception to be thrown.  */
- 	fexceptdiv (0.0, 0.0);
- 	return 0x8000000000000000ULL;
-       }
- 
-     /* Number big number & +/- inf */
-     if (exp >= 11) {
-       /* Don't throw an exception for -1p+63  */
-       if (!SIGN (dl1) || exp > 11 || FRACD_LL (dl1) != 0)
- 	/* C99 Annex F.4 requires an "invalid" exception to be thrown.  */
- 	fexceptdiv (0.0, 0.0);
-       return SIGN (dl1) ? LLONG_MIN : LLONG_MAX;
-     }
- 
-     l = MANTD_LL(dl1);
- 
-     /* shift down until exp < 12 or l = 0 */
-     if (exp > 0)
-       l <<= exp;
-     else
-       l >>= -exp;
- 
-     return (SIGN (dl1) ? -l : l);
- }
- #endif /* !__s390x__ */
--- 0 ----
diff -Nrcpad gcc-17-20260705/libgcc/config/s390/32/_fixsfdi.c gcc-17-20260712/libgcc/config/s390/32/_fixsfdi.c
*** gcc-17-20260705/libgcc/config/s390/32/_fixsfdi.c	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/libgcc/config/s390/32/_fixsfdi.c	Thu Jan  1 00:00:00 1970
***************
*** 1,107 ****
- /* Definitions of target machine for GNU compiler, for IBM S/390
-    Copyright (C) 1999-2026 Free Software Foundation, Inc.
-    Contributed by Hartmut Penner (hpenner@de.ibm.com) and
-                   Ulrich Weigand (uweigand@de.ibm.com).
- 
- This file is part of GCC.
- 
- GCC is free software; you can redistribute it and/or modify it under
- the terms of the GNU General Public License as published by the Free
- Software Foundation; either version 3, or (at your option) any later
- version.
- 
- GCC is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or
- FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- for more details.
- 
- Under Section 7 of GPL version 3, you are granted additional
- permissions described in the GCC Runtime Library Exception, version
- 3.1, as published by the Free Software Foundation.
- 
- You should have received a copy of the GNU General Public License and
- a copy of the GCC Runtime Library Exception along with this program;
- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
- <http://www.gnu.org/licenses/>.  */
- 
- #ifndef __s390x__
- 
- #define EXPONENT_BIAS   127
- #define MANTISSA_BITS   23
- #define EXP(fp)         (((fp.l) >> MANTISSA_BITS) & 0xFF)
- #define PRECISION       (MANTISSA_BITS + 1)
- #define SIGNBIT         0x80000000
- #define SIGN(fp)        ((fp.l) & SIGNBIT)
- #define HIDDEN          (1 << MANTISSA_BITS)
- #define MANT(fp)        (((fp.l) & 0x7FFFFF) | HIDDEN)
- #define FRAC(fp)        ((fp.l) & 0x7FFFFF)
- #define LLONG_MAX       9223372036854775807LL
- #define LLONG_MIN       (-LLONG_MAX - 1LL)
- 
- typedef int DItype_x __attribute__ ((mode (DI)));
- typedef unsigned int UDItype_x __attribute__ ((mode (DI)));
- typedef int SItype_x __attribute__ ((mode (SI)));
- typedef unsigned int USItype_x __attribute__ ((mode (SI)));
- 
- union float_long
-   {
-     float f;
-     USItype_x l;
-   };
- 
- static __inline__ void
- fexceptdiv (float d, float e)
- {
-   __asm__ __volatile__ ("debr %0,%1" : : "f" (d), "f" (e) );
- }
- 
- DItype_x __fixsfdi (float a1);
- 
- /* convert double to int */
- DItype_x
- __fixsfdi (float a1)
- {
-     register union float_long fl1;
-     register int exp;
-     register DItype_x l;
- 
-     fl1.f = a1;
- 
-     /* +/- 0, denormalized */
-     if (!EXP (fl1))
-       return 0;
- 
-     exp = EXP (fl1) - EXPONENT_BIAS - MANTISSA_BITS;
- 
-     /* number < 1 */
-     if (exp <= -PRECISION)
-       return 0;
- 
-     /* NaN */
- 
-     if ((EXP (fl1) == 0xff) && (FRAC (fl1) != 0)) /* NaN */
-       {
- 	/* C99 Annex F.4 requires an "invalid" exception to be thrown.  */
- 	fexceptdiv (0.0, 0.0);
- 	return 0x8000000000000000ULL;
-       }
- 
-     /* Number big number & +/- inf */
-     if (exp >= 40) {
-       /* Don't throw an exception for -1p+63  */
-       if (!SIGN (fl1) || exp > 40 || FRAC (fl1) != 0)
- 	/* C99 Annex F.4 requires an "invalid" exception to be thrown.  */
- 	fexceptdiv (0.0, 0.0);
-       return SIGN (fl1) ? LLONG_MIN : LLONG_MAX;
-     }
- 
-     l = MANT (fl1);
- 
-     if (exp > 0)
-       l <<= exp;
-     else
-       l >>= -exp;
- 
-     return (SIGN (fl1) ? -l : l);
- }
- #endif /* !__s390x__ */
--- 0 ----
diff -Nrcpad gcc-17-20260705/libgcc/config/s390/32/_fixtfdi.c gcc-17-20260712/libgcc/config/s390/32/_fixtfdi.c
*** gcc-17-20260705/libgcc/config/s390/32/_fixtfdi.c	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/libgcc/config/s390/32/_fixtfdi.c	Thu Jan  1 00:00:00 1970
***************
*** 1,122 ****
- /* Definitions of target machine for GNU compiler, for IBM S/390
-    Copyright (C) 1999-2026 Free Software Foundation, Inc.
-    Contributed by Hartmut Penner (hpenner@de.ibm.com) and
-                   Ulrich Weigand (uweigand@de.ibm.com).
- 
- This file is part of GCC.
- 
- GCC is free software; you can redistribute it and/or modify it under
- the terms of the GNU General Public License as published by the Free
- Software Foundation; either version 3, or (at your option) any later
- version.
- 
- GCC is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or
- FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- for more details.
- 
- Under Section 7 of GPL version 3, you are granted additional
- permissions described in the GCC Runtime Library Exception, version
- 3.1, as published by the Free Software Foundation.
- 
- You should have received a copy of the GNU General Public License and
- a copy of the GCC Runtime Library Exception along with this program;
- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
- <http://www.gnu.org/licenses/>.  */
- 
- #ifndef __s390x__
- 
- #define EXPD(fp)	   (((fp.l.i[0]) >> 16) & 0x7FFF)
- #define EXPONENT_BIAS	   16383
- #define MANTISSA_BITS      112
- #define PRECISION          (MANTISSA_BITS + 1)
- #define SIGNBIT		   0x80000000
- #define SIGN(fp)	   ((fp.l.i[0]) & SIGNBIT)
- #define MANTD_HIGH_LL(fp)  ((fp.ll[0] & HIGH_LL_FRAC_MASK) | HIGH_LL_UNIT_BIT)
- #define MANTD_LOW_LL(fp)   (fp.ll[1])
- #define FRACD_ZERO_P(fp)   (!fp.ll[1] && !(fp.ll[0] & HIGH_LL_FRAC_MASK))
- #define HIGH_LL_FRAC_BITS  48
- #define HIGH_LL_UNIT_BIT   ((UDItype_x)1 << HIGH_LL_FRAC_BITS)
- #define HIGH_LL_FRAC_MASK  (HIGH_LL_UNIT_BIT - 1)
- #define LLONG_MAX       9223372036854775807LL
- #define LLONG_MIN       (-LLONG_MAX - 1LL)
- 
- typedef int DItype_x __attribute__ ((mode (DI)));
- typedef unsigned int UDItype_x __attribute__ ((mode (DI)));
- typedef int SItype_x __attribute__ ((mode (SI)));
- typedef unsigned int USItype_x __attribute__ ((mode (SI)));
- 
- union double_long {
-   long double d;
-   struct {
-       SItype_x i[4]; /* 32 bit parts: 0 upper ... 3 lowest */
-     } l;
-   UDItype_x ll[2];   /* 64 bit parts: 0 upper, 1 lower */
- };
- 
- static __inline__ void
- fexceptdiv (float d, float e)
- {
-   __asm__ __volatile__ ("debr %0,%1" : : "f" (d), "f" (e) );
- }
- 
- DItype_x __fixtfdi (long double a1);
- 
- /* convert double to unsigned int */
- DItype_x
- __fixtfdi (long double a1)
- {
-     register union double_long dl1;
-     register int exp;
-     register UDItype_x l;
- 
-     dl1.d = a1;
- 
-     /* +/- 0, denormalized */
-     if (!EXPD (dl1))
-       return 0;
- 
-     /* The exponent - considered the binary point at the right end of
-        the mantissa.  */
-     exp = EXPD (dl1) - EXPONENT_BIAS - MANTISSA_BITS;
- 
-     /* number < 1: If the mantissa would need to be right-shifted more bits than
-        its size the result would be zero.  */
-     if (exp <= -PRECISION)
-       return 0;
- 
-     /* NaN: All exponent bits set and a nonzero fraction.  */
-     if ((EXPD(dl1) == 0x7fff) && !FRACD_ZERO_P (dl1))
-       {
- 	/* C99 Annex F.4 requires an "invalid" exception to be thrown.  */
- 	fexceptdiv (0.0, 0.0);
- 	return 0x8000000000000000ULL;
-       }
- 
-     /* One extra bit is needed for the unit bit which is appended by
-        MANTD_HIGH_LL on the left of the matissa.  */
-     exp += HIGH_LL_FRAC_BITS + 1;
- 
-     /* If the result would still need a left shift it will be too large
-        to be represented.  Compared to the unsigned variant we have to
-        take care that there is still space for the sign bit to be
-        applied.  So we can only go on if there is a right-shift by one
-        or more.  */
-     if (exp >= 0)
-       {
- 	/* Don't throw an exception for -1p+63  */
- 	if (!SIGN (dl1)
- 	    || exp > 0
- 	    || MANTD_LOW_LL (dl1) >> (HIGH_LL_FRAC_BITS + 1)
- 	    || (dl1.ll[0] & HIGH_LL_FRAC_MASK))
- 	  /* C99 Annex F.4 requires an "invalid" exception to be thrown.  */
- 	  fexceptdiv (0.0, 0.0);
- 	return SIGN (dl1) ? LLONG_MIN : LLONG_MAX;
-       }
- 
-     l = MANTD_LOW_LL (dl1) >> (HIGH_LL_FRAC_BITS + 1)
-         | MANTD_HIGH_LL (dl1) << (64 - (HIGH_LL_FRAC_BITS + 1));
- 
-     return SIGN (dl1) ? -(l >> -exp) : l >> -exp;
- }
- #endif /* !__s390x__ */
--- 0 ----
diff -Nrcpad gcc-17-20260705/libgcc/config/s390/32/_fixunsdfdi.c gcc-17-20260712/libgcc/config/s390/32/_fixunsdfdi.c
*** gcc-17-20260705/libgcc/config/s390/32/_fixunsdfdi.c	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/libgcc/config/s390/32/_fixunsdfdi.c	Thu Jan  1 00:00:00 1970
***************
*** 1,120 ****
- /* Definitions of target machine for GNU compiler, for IBM S/390
-    Copyright (C) 1999-2026 Free Software Foundation, Inc.
-    Contributed by Hartmut Penner (hpenner@de.ibm.com) and
-                   Ulrich Weigand (uweigand@de.ibm.com).
- 
- This file is part of GCC.
- 
- GCC is free software; you can redistribute it and/or modify it under
- the terms of the GNU General Public License as published by the Free
- Software Foundation; either version 3, or (at your option) any later
- version.
- 
- GCC is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or
- FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- for more details.
- 
- Under Section 7 of GPL version 3, you are granted additional
- permissions described in the GCC Runtime Library Exception, version
- 3.1, as published by the Free Software Foundation.
- 
- You should have received a copy of the GNU General Public License and
- a copy of the GCC Runtime Library Exception along with this program;
- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
- <http://www.gnu.org/licenses/>.  */
- 
- #ifndef __s390x__
- 
- #define EXPD(fp)	(((fp.l.upper) >> 20) & 0x7FF)
- #define EXPONENT_BIAS	1023
- #define MANTISSA_BITS   52
- #define PRECISION       (MANTISSA_BITS + 1)
- #define SIGNBIT		0x80000000
- #define SIGN(fp)	((fp.l.upper) & SIGNBIT)
- #define MANTD_LL(fp)	((fp.ll & (HIDDEND_LL-1)) | HIDDEND_LL)
- #define FRACD_LL(fp)	(fp.ll & (HIDDEND_LL-1))
- #define HIDDEND_LL	((UDItype_x)1 << 52)
- 
- typedef int DItype_x __attribute__ ((mode (DI)));
- typedef unsigned int UDItype_x __attribute__ ((mode (DI)));
- typedef int SItype_x __attribute__ ((mode (SI)));
- typedef unsigned int USItype_x __attribute__ ((mode (SI)));
- 
- union double_long {
-     double d;
-     struct {
-       SItype_x upper;
-       USItype_x lower;
-     } l;
-     UDItype_x ll;
- };
- 
- static __inline__ void
- fexceptdiv (float d, float e)
- {
-   __asm__ __volatile__ ("debr %0,%1" : : "f" (d), "f" (e) );
- }
- 
- UDItype_x __fixunsdfdi (double a1);
- 
- /* convert double to unsigned int */
- UDItype_x
- __fixunsdfdi (double a1)
- {
-     register union double_long dl1;
-     register int exp;
-     register UDItype_x l;
- 
-     dl1.d = a1;
- 
-     /* +/- 0, denormalized  */
-     if (!EXPD (dl1))
-       return 0;
- 
-     /* Negative.  */
-     if (SIGN (dl1))
-       {
- 	/* Value is <= -1.0
- 	   C99 Annex F.4 requires an "invalid" exception to be thrown.  */
- 	if (EXPD (dl1) >= EXPONENT_BIAS)
- 	  fexceptdiv (0.0, 0.0);
- 	return 0;
-       }
- 
-     exp = EXPD (dl1) - EXPONENT_BIAS - MANTISSA_BITS;
- 
-     /* number < 1 */
- 
-     if (exp < -PRECISION)
-       return 0;
- 
-     /* NaN */
- 
-     if ((EXPD(dl1) == 0x7ff) && (FRACD_LL(dl1) != 0)) /* NaN */
-       {
- 	/* C99 Annex F.4 requires an "invalid" exception to be thrown.  */
- 	fexceptdiv (0.0, 0.0);
- 	return 0x0ULL;
-       }
- 
-     /* Number big number & + inf */
- 
-     if (exp >= 12)
-       {
- 	/* C99 Annex F.4 requires an "invalid" exception to be thrown.  */
- 	fexceptdiv (0.0, 0.0);
- 	return 0xFFFFFFFFFFFFFFFFULL;
-       }
- 
-     l = MANTD_LL(dl1);
- 
-     /* shift down until exp < 12 or l = 0 */
-     if (exp > 0)
-       l <<= exp;
-     else
-       l >>= -exp;
- 
-     return l;
- }
- #endif /* !__s390x__ */
--- 0 ----
diff -Nrcpad gcc-17-20260705/libgcc/config/s390/32/_fixunssfdi.c gcc-17-20260712/libgcc/config/s390/32/_fixunssfdi.c
*** gcc-17-20260705/libgcc/config/s390/32/_fixunssfdi.c	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/libgcc/config/s390/32/_fixunssfdi.c	Thu Jan  1 00:00:00 1970
***************
*** 1,114 ****
- /* Definitions of target machine for GNU compiler, for IBM S/390
-    Copyright (C) 1999-2026 Free Software Foundation, Inc.
-    Contributed by Hartmut Penner (hpenner@de.ibm.com) and
-                   Ulrich Weigand (uweigand@de.ibm.com).
- 
- This file is part of GCC.
- 
- GCC is free software; you can redistribute it and/or modify it under
- the terms of the GNU General Public License as published by the Free
- Software Foundation; either version 3, or (at your option) any later
- version.
- 
- GCC is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or
- FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- for more details.
- 
- Under Section 7 of GPL version 3, you are granted additional
- permissions described in the GCC Runtime Library Exception, version
- 3.1, as published by the Free Software Foundation.
- 
- You should have received a copy of the GNU General Public License and
- a copy of the GCC Runtime Library Exception along with this program;
- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
- <http://www.gnu.org/licenses/>.  */
- 
- #ifndef __s390x__
- 
- #define EXPONENT_BIAS   127
- #define MANTISSA_BITS   23
- #define EXP(fp)         (((fp.l) >> MANTISSA_BITS) & 0xFF)
- #define SIGNBIT         0x80000000
- #define SIGN(fp)        ((fp.l) & SIGNBIT)
- #define HIDDEN          (1 << MANTISSA_BITS)
- #define MANT(fp)        (((fp.l) & 0x7FFFFF) | HIDDEN)
- #define FRAC(fp)        ((fp.l) & 0x7FFFFF)
- 
- typedef int DItype_x __attribute__ ((mode (DI)));
- typedef unsigned int UDItype_x __attribute__ ((mode (DI)));
- typedef int SItype_x __attribute__ ((mode (SI)));
- typedef unsigned int USItype_x __attribute__ ((mode (SI)));
- 
- union float_long
-   {
-     float f;
-     USItype_x l;
-   };
- 
- static __inline__ void
- fexceptdiv (float d, float e)
- {
-   __asm__ __volatile__ ("debr %0,%1" : : "f" (d), "f" (e) );
- }
- 
- UDItype_x __fixunssfdi (float a1);
- 
- /* convert float to unsigned int */
- UDItype_x
- __fixunssfdi (float a1)
- {
-     register union float_long fl1;
-     register int exp;
-     register UDItype_x l;
- 
-     fl1.f = a1;
- 
-     /* +/- 0, denormalized  */
-     if (!EXP (fl1))
-       return 0;
- 
-     /* Negative.  */
-     if (SIGN (fl1))
-       {
- 	/* Value is <= -1.0
- 	   C99 Annex F.4 requires an "invalid" exception to be thrown.  */
- 	if (EXP (fl1) >= EXPONENT_BIAS)
- 	  fexceptdiv (0.0, 0.0);
- 	return 0;
-       }
- 
-     exp = EXP (fl1) - EXPONENT_BIAS - MANTISSA_BITS;
- 
-     /* number < 1 */
-     if (exp < -24)
-       return 0;
- 
-     /* NaN */
- 
-     if ((EXP (fl1) == 0xff) && (FRAC (fl1) != 0)) /* NaN */
-       {
- 	/* C99 Annex F.4 requires an "invalid" exception to be thrown.  */
- 	fexceptdiv (0.0, 0.0);
- 	return 0x0ULL;
-       }
- 
-     /* Number big number & + inf */
- 
-     if (exp >= 41)
-       {
- 	/* C99 Annex F.4 requires an "invalid" exception to be thrown.  */
- 	fexceptdiv (0.0, 0.0);
- 	return 0xFFFFFFFFFFFFFFFFULL;
-       }
- 
-     l = MANT (fl1);
- 
-     if (exp > 0)
-       l <<= exp;
-     else
-       l >>= -exp;
- 
-     return l;
- }
- #endif /* !__s390x__ */
--- 0 ----
diff -Nrcpad gcc-17-20260705/libgcc/config/s390/32/_fixunstfdi.c gcc-17-20260712/libgcc/config/s390/32/_fixunstfdi.c
*** gcc-17-20260705/libgcc/config/s390/32/_fixunstfdi.c	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/libgcc/config/s390/32/_fixunstfdi.c	Thu Jan  1 00:00:00 1970
***************
*** 1,125 ****
- /* Definitions of target machine for GNU compiler, for IBM S/390
-    Copyright (C) 1999-2026 Free Software Foundation, Inc.
-    Contributed by Hartmut Penner (hpenner@de.ibm.com) and
-                   Ulrich Weigand (uweigand@de.ibm.com).
- 
- This file is part of GCC.
- 
- GCC is free software; you can redistribute it and/or modify it under
- the terms of the GNU General Public License as published by the Free
- Software Foundation; either version 3, or (at your option) any later
- version.
- 
- GCC is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or
- FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- for more details.
- 
- Under Section 7 of GPL version 3, you are granted additional
- permissions described in the GCC Runtime Library Exception, version
- 3.1, as published by the Free Software Foundation.
- 
- You should have received a copy of the GNU General Public License and
- a copy of the GCC Runtime Library Exception along with this program;
- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
- <http://www.gnu.org/licenses/>.  */
- 
- #ifndef __s390x__
- 
- #define EXPD(fp)	   (((fp.l.i[0]) >> 16) & 0x7FFF)
- #define EXPONENT_BIAS	   16383
- #define MANTISSA_BITS      112
- #define PRECISION          (MANTISSA_BITS + 1)
- #define SIGNBIT		   0x80000000
- #define SIGND(fp)	   ((fp.l.i[0]) & SIGNBIT)
- #define MANTD_HIGH_LL(fp)  ((fp.ll[0] & HIGH_LL_FRAC_MASK) | HIGH_LL_UNIT_BIT)
- #define MANTD_LOW_LL(fp)   (fp.ll[1])
- #define FRACD_ZERO_P(fp)   (!fp.ll[1] && !(fp.ll[0] & HIGH_LL_FRAC_MASK))
- #define HIGH_LL_FRAC_BITS  48
- #define HIGH_LL_UNIT_BIT   ((UDItype_x)1 << HIGH_LL_FRAC_BITS)
- #define HIGH_LL_FRAC_MASK  (HIGH_LL_UNIT_BIT - 1)
- 
- typedef int DItype_x __attribute__ ((mode (DI)));
- typedef unsigned int UDItype_x __attribute__ ((mode (DI)));
- typedef int SItype_x __attribute__ ((mode (SI)));
- typedef unsigned int USItype_x __attribute__ ((mode (SI)));
- 
- union double_long {
-   long double d;
-   struct {
-       SItype_x i[4]; /* 32 bit parts: 0 upper ... 3 lowest */
-     } l;
-   UDItype_x ll[2];   /* 64 bit parts: 0 upper, 1 lower */
- };
- 
- static __inline__ void
- fexceptdiv (float d, float e)
- {
-   __asm__ __volatile__ ("debr %0,%1" : : "f" (d), "f" (e) );
- }
- 
- UDItype_x __fixunstfdi (long double a1);
- 
- /* convert double to unsigned int */
- UDItype_x
- __fixunstfdi (long double a1)
- {
-     register union double_long dl1;
-     register int exp;
-     register UDItype_x l;
- 
-     dl1.d = a1;
- 
-     /* +/- 0, denormalized */
-     if (!EXPD (dl1))
-       return 0;
- 
-     /* Negative.  */
-     if (SIGND (dl1))
-       {
- 	/* Value is <= -1.0
- 	   C99 Annex F.4 requires an "invalid" exception to be thrown.  */
- 	if (EXPD (dl1) >= EXPONENT_BIAS)
- 	  fexceptdiv (0.0, 0.0);
- 	return 0;
-       }
- 
-     /* The exponent - considered the binary point at the right end of
-        the mantissa.  */
-     exp = EXPD (dl1) - EXPONENT_BIAS - MANTISSA_BITS;
- 
-     /* number < 1: If the mantissa would need to be right-shifted more bits than
-        its size (plus the implied one bit on the left) the result would be
-        zero.  */
-     if (exp <= -PRECISION)
-       return 0;
- 
-     /* NaN: All exponent bits set and a nonzero fraction.  */
-     if ((EXPD(dl1) == 0x7fff) && !FRACD_ZERO_P (dl1))
-       {
- 	/* C99 Annex F.4 requires an "invalid" exception to be thrown.  */
- 	fexceptdiv (0.0, 0.0);
- 	return 0;
-       }
- 
-     /* One extra bit is needed for the unit bit which is appended by
-        MANTD_HIGH_LL on the left of the matissa.  */
-     exp += HIGH_LL_FRAC_BITS + 1;
- 
-     /* If the result would still need a left shift it will be too
-        large to be represented.  Infinities have all exponent bits set
-        and will end up here as well.  */
-     if (exp > 0)
-       {
- 	/* C99 Annex F.4 requires an "invalid" exception to be thrown.  */
- 	fexceptdiv (0.0, 0.0);
- 	return 0xFFFFFFFFFFFFFFFFULL;
-       }
- 
-     l = MANTD_LOW_LL (dl1) >> (HIGH_LL_FRAC_BITS + 1)
-         | MANTD_HIGH_LL (dl1) << (64 - (HIGH_LL_FRAC_BITS + 1));
- 
-     return l >> -exp;
- }
- 
- #endif /* !__s390x__ */
--- 0 ----
diff -Nrcpad gcc-17-20260705/libgcc/config/s390/32/t-floattodi gcc-17-20260712/libgcc/config/s390/32/t-floattodi
*** gcc-17-20260705/libgcc/config/s390/32/t-floattodi	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/libgcc/config/s390/32/t-floattodi	Thu Jan  1 00:00:00 1970
***************
*** 1,5 ****
- floattodi-functions = _fixsfdi _fixdfdi _fixtfdi _fixunssfdi _fixunsdfdi _fixunstfdi
- LIB2FUNCS_EXCLUDE += $(floattodi-functions)
- 
- floattodi-src = $(addsuffix .c, $(floattodi-functions))
- LIB2ADD = $(addprefix $(srcdir)/config/s390/32/, $(floattodi-src))
--- 0 ----
diff -Nrcpad gcc-17-20260705/libgcc/config/s390/libgcc-glibc.ver gcc-17-20260712/libgcc/config/s390/libgcc-glibc.ver
*** gcc-17-20260705/libgcc/config/s390/libgcc-glibc.ver	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/libgcc/config/s390/libgcc-glibc.ver	Sun Jul 12 22:32:18 2026
***************
*** 26,64 ****
  # because GLIBC_2.0 does not exist on this architecture, as the first
  # ever glibc release on the platform was GLIBC_2.2.
  
- %ifndef __s390x__
- %exclude {
-   __divdi3
-   __moddi3
-   __udivdi3
-   __umoddi3
-   __register_frame
-   __register_frame_table
-   __deregister_frame
-   __register_frame_info
-   __deregister_frame_info
-   __frame_state_for
-   __register_frame_info_table
- }
- 
- %inherit GCC_3.0 GLIBC_2.0
- GLIBC_2.0 {
-   __divdi3
-   __moddi3
-   __udivdi3
-   __umoddi3
- 
-   __register_frame
-   __register_frame_table
-   __deregister_frame
-   __register_frame_info
-   __deregister_frame_info
-   __frame_state_for
-   __register_frame_info_table
- }
- %endif
- 
- %ifdef __s390x__
  %exclude {
    __register_frame
    __register_frame_table
--- 26,31 ----
*************** GLIBC_2.2 {
*** 79,85 ****
    __frame_state_for
    __register_frame_info_table
  }
- %endif
  
  # With GCC 4.1.0 long double 128 bit support was introduced. The
  # following symbols coming from libgcc are enabled when -mlong-double-128
--- 46,51 ----
*************** GCC_4.1.0 {
*** 103,121 ****
    __multc3
    __powitf2
  
- %ifdef __s390x__
    __fixtfti
    __fixunstfti
    __floattitf
- 
- %else
-   __fixtfdi
-   __fixunstfdi
-   __floatditf
- %endif
  }
  
- %ifdef __s390x__
  %inherit GCC_16.0.0 GCC_4.1.0
  GCC_16.0.0 {
    __mulbitint3
--- 69,79 ----
*************** GCC_16.0.0 {
*** 138,141 ****
    __floattihf
    __floatuntihf
  }
- %endif
--- 96,98 ----
diff -Nrcpad gcc-17-20260705/libgcc/config/s390/morestack.S gcc-17-20260712/libgcc/config/s390/morestack.S
*** gcc-17-20260705/libgcc/config/s390/morestack.S	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/libgcc/config/s390/morestack.S	Sun Jul 12 22:32:18 2026
*************** __morestack:
*** 41,245 ****
  .LFB1:
  	.cfi_startproc
  
- 
- #ifndef __s390x__
- 
- 
- # The 31-bit __morestack function.
- 
- 	# We use a cleanup to restore the stack guard if an exception
- 	# is thrown through this code.
- #ifndef __PIC__
- 	.cfi_personality 0,__gcc_personality_v0
- 	.cfi_lsda 0,.LLSDA1
- #else
- 	.cfi_personality 0x9b,DW.ref.__gcc_personality_v0
- 	.cfi_lsda 0x1b,.LLSDA1
- #endif
- 
- 	stm	%r2, %r15, 0x8(%r15)	# Save %r2-%r15.
- 	.cfi_offset %r6, -0x48
- 	.cfi_offset %r7, -0x44
- 	.cfi_offset %r8, -0x40
- 	.cfi_offset %r9, -0x3c
- 	.cfi_offset %r10, -0x38
- 	.cfi_offset %r11, -0x34
- 	.cfi_offset %r12, -0x30
- 	.cfi_offset %r13, -0x2c
- 	.cfi_offset %r14, -0x28
- 	.cfi_offset %r15, -0x24
- 	lr	%r11, %r15		# Make frame pointer for vararg.
- 	.cfi_def_cfa_register %r11
- 	ahi	%r15, -0x60		# 0x60 for standard frame.
- 	st	%r11, 0(%r15)		# Save back chain.
- 	lr	%r8, %r0		# Save %r0 (static chain).
- 	lr	%r10, %r1		# Save %r1 (address of parameter block).
- 
- 	l	%r7, 0(%r10)		# Required frame size to %r7
- 	ear	%r1, %a0		# Extract thread pointer.
- 	l	%r1, 0x20(%r1)		# Get stack bounduary
- 	ar	%r1, %r7		# Stack bounduary + frame size
- 	a	%r1, 4(%r10)		# + stack param size
- 	clr	%r1, %r15		# Compare with current stack pointer
- 	jle	.Lnoalloc		# guard > sp - frame-size: need alloc
- 
- 	brasl	%r14, __morestack_block_signals
- 
- 	# We abuse one of caller's fpr save slots (which we don't use for fprs)
- 	# as a local variable.  Not needed here, but done to be consistent with
- 	# the below use.
- 	ahi	%r7, BACKOFF		# Bump requested size a bit.
- 	st	%r7, 0x40(%r11)		# Stuff frame size on stack.
- 	la	%r2, 0x40(%r11)		# Pass its address as parameter.
- 	la	%r3, 0x60(%r11)		# Caller's stack parameters.
- 	l	%r4, 4(%r10)		# Size of stack parameters.
- 	brasl	%r14, __generic_morestack
- 
- 	lr	%r15, %r2		# Switch to the new stack.
- 	ahi	%r15, -0x60		# Make a stack frame on it.
- 	st	%r11, 0(%r15)		# Save back chain.
- 
- 	s	%r2, 0x40(%r11)		# The end of stack space.
- 	ahi	%r2, BACKOFF		# Back off a bit.
- 	ear	%r1, %a0		# Extract thread pointer.
- .LEHB0:
- 	st	%r2, 0x20(%r1)	# Save the new stack boundary.
- 
- 	brasl	%r14, __morestack_unblock_signals
- 
- 	lr	%r0, %r8		# Static chain.
- 	lm	%r2, %r6, 0x8(%r11)	# Paremeter registers.
- 
- 	# Third parameter is address of function meat - address of parameter
- 	# block.
- 	a	%r10, 0x8(%r10)
- 
- 	# Leave vararg pointer in %r1, in case function uses it
- 	la	%r1, 0x60(%r11)
- 
- 	# State of registers:
- 	# %r0: Static chain from entry.
- 	# %r1: Vararg pointer.
- 	# %r2-%r6: Parameters from entry.
- 	# %r7-%r10: Indeterminate.
- 	# %r11: Frame pointer (%r15 from entry).
- 	# %r12-%r13: Indeterminate.
- 	# %r14: Return address.
- 	# %r15: Stack pointer.
- 	basr	%r14, %r10		# Call our caller.
- 
- 	stm	%r2, %r3, 0x8(%r11)	# Save return registers.
- 
- 	brasl	%r14, __morestack_block_signals
- 
- 	# We need a stack slot now, but have no good way to get it - the frame
- 	# on new stack had to be exactly 0x60 bytes, or stack parameters would
- 	# be passed wrong.  Abuse fpr save area in caller's frame (we don't
- 	# save actual fprs).
- 	la	%r2, 0x40(%r11)
- 	brasl	%r14, __generic_releasestack
- 
- 	s	%r2, 0x40(%r11)		# Subtract available space.
- 	ahi	%r2, BACKOFF		# Back off a bit.
- 	ear	%r1, %a0		# Extract thread pointer.
- .LEHE0:
- 	st	%r2, 0x20(%r1)	# Save the new stack boundary.
- 
- 	# We need to restore the old stack pointer before unblocking signals.
- 	# We also need 0x60 bytes for a stack frame.  Since we had a stack
- 	# frame at this place before the stack switch, there's no need to
- 	# write the back chain again.
- 	lr	%r15, %r11
- 	ahi	%r15, -0x60
- 
- 	brasl	%r14, __morestack_unblock_signals
- 
- 	lm	%r2, %r15, 0x8(%r11)	# Restore all registers.
- 	.cfi_remember_state
- 	.cfi_restore %r15
- 	.cfi_restore %r14
- 	.cfi_restore %r13
- 	.cfi_restore %r12
- 	.cfi_restore %r11
- 	.cfi_restore %r10
- 	.cfi_restore %r9
- 	.cfi_restore %r8
- 	.cfi_restore %r7
- 	.cfi_restore %r6
- 	.cfi_def_cfa_register %r15
- 	br	%r14			# Return to caller's caller.
- 
- # Executed if no new stack allocation is needed.
- 
- .Lnoalloc:
- 	.cfi_restore_state
- 	# We may need to copy stack parameters.
- 	l	%r9, 0x4(%r10)		# Load stack parameter size.
- 	ltr	%r9, %r9		# And check if it's 0.
- 	je	.Lnostackparm		# Skip the copy if not needed.
- 	sr	%r15, %r9		# Make space on the stack.
- 	la	%r8, 0x60(%r15)		# Destination.
- 	la	%r12, 0x60(%r11)	# Source.
- 	lr	%r13, %r9		# Source size.
- .Lcopy:
- 	mvcle	%r8, %r12, 0		# Copy.
- 	jo	.Lcopy
- 
- .Lnostackparm:
- 	# Third parameter is address of function meat - address of parameter
- 	# block.
- 	a	%r10, 0x8(%r10)
- 
- 	# Leave vararg pointer in %r1, in case function uses it
- 	la	%r1, 0x60(%r11)
- 
- 	# OK, no stack allocation needed.  We still follow the protocol and
- 	# call our caller - it doesn't cost much and makes sure vararg works.
- 	# No need to set any registers here - %r0 and %r2-%r6 weren't modified.
- 	basr	%r14, %r10		# Call our caller.
- 
- 	lm	%r6, %r15, 0x18(%r11)	# Restore all callee-saved registers.
- 	.cfi_remember_state
- 	.cfi_restore %r15
- 	.cfi_restore %r14
- 	.cfi_restore %r13
- 	.cfi_restore %r12
- 	.cfi_restore %r11
- 	.cfi_restore %r10
- 	.cfi_restore %r9
- 	.cfi_restore %r8
- 	.cfi_restore %r7
- 	.cfi_restore %r6
- 	.cfi_def_cfa_register %r15
- 	br	%r14			# Return to caller's caller.
- 
- # This is the cleanup code called by the stack unwinder when unwinding
- # through the code between .LEHB0 and .LEHE0 above.
- 
- .L1:
- 	.cfi_restore_state
- 	lr	%r2, %r11		# Stack pointer after resume.
- 	brasl	%r14, __generic_findstack
- 	lr	%r3, %r11		# Get the stack pointer.
- 	sr	%r3, %r2		# Subtract available space.
- 	ahi	%r3, BACKOFF		# Back off a bit.
- 	ear	%r1, %a0		# Extract thread pointer.
- 	st	%r3, 0x20(%r1)	# Save the new stack boundary.
- 
- 	# We need GOT pointer in %r12 for PLT entry.
- 	larl	%r12,_GLOBAL_OFFSET_TABLE_
- 	lr	%r2, %r6		# Exception header.
- #ifdef __PIC__
- 	brasl	%r14, _Unwind_Resume@PLT
- #else
- 	brasl	%r14, _Unwind_Resume
- #endif
- 
- #else /* defined(__s390x__) */
- 
- 
- # The 64-bit __morestack function.
- 
  	# We use a cleanup to restore the stack guard if an exception
  	# is thrown through this code.
  #ifndef __PIC__
--- 41,46 ----
*************** __morestack:
*** 434,441 ****
  	brasl	%r14, _Unwind_Resume
  #endif
  
- #endif /* defined(__s390x__) */
- 
  	.cfi_endproc
  	.size	__morestack, . - __morestack
  
--- 235,240 ----
*************** DW.ref.__gcc_personality_v0:
*** 492,514 ****
  
  __stack_split_initialize:
  
- #ifndef __s390x__
- 
- 	ear	%r1, %a0
- 	lr	%r0, %r15
- 	ahi	%r0, -0x4000	# We should have at least 16K.
- 	st	%r0, 0x20(%r1)
- 
- 	lr	%r2, %r15
- 	lhi	%r3, 0x4000
- #ifdef __PIC__
- 	jg	__generic_morestack_set_initial_sp@PLT	# Tail call
- #else
- 	jg	__generic_morestack_set_initial_sp	# Tail call
- #endif
- 
- #else /* defined(__s390x__) */
- 
  	ear	%r1, %a0
  	sllg	%r1, %r1, 32
  	ear	%r1, %a1
--- 291,296 ----
*************** __stack_split_initialize:
*** 524,531 ****
  	jg	__generic_morestack_set_initial_sp	# Tail call
  #endif
  
- #endif /* defined(__s390x__) */
- 
  	.size	__stack_split_initialize, . - __stack_split_initialize
  
  # Routines to get and set the guard, for __splitstack_getcontext,
--- 306,311 ----
*************** __stack_split_initialize:
*** 540,554 ****
  
  __morestack_get_guard:
  
- #ifndef __s390x__
- 	ear	%r1, %a0
- 	l	%r2, 0x20(%r1)
- #else
  	ear	%r1, %a0
  	sllg	%r1, %r1, 32
  	ear	%r1, %a1
  	lg	%r2, 0x38(%r1)
- #endif
  	br %r14
  
  	.size	__morestack_get_guard, . - __morestack_get_guard
--- 320,329 ----
*************** __morestack_get_guard:
*** 561,575 ****
  
  __morestack_set_guard:
  
- #ifndef __s390x__
- 	ear	%r1, %a0
- 	st	%r2, 0x20(%r1)
- #else
  	ear	%r1, %a0
  	sllg	%r1, %r1, 32
  	ear	%r1, %a1
  	stg	%r2, 0x38(%r1)
- #endif
  	br	%r14
  
  	.size	__morestack_set_guard, . - __morestack_set_guard
--- 336,345 ----
*************** __morestack_set_guard:
*** 583,595 ****
  
  __morestack_make_guard:
  
- #ifndef __s390x__
- 	sr	%r2, %r3
- 	ahi	%r2, BACKOFF
- #else
  	sgr	%r2, %r3
  	aghi	%r2, BACKOFF
- #endif
  	br	%r14
  
  	.size	__morestack_make_guard, . - __morestack_make_guard
--- 353,360 ----
*************** __morestack_make_guard:
*** 602,616 ****
  	.section .ctors.65535,"aw",@progbits
  #endif
  
- #ifndef __LP64__
- 	.align	4
- 	.long	__stack_split_initialize
- 	.long	__morestack_load_mmap
- #else
  	.align	8
  	.quad	__stack_split_initialize
  	.quad	__morestack_load_mmap
- #endif
  
  	.section	.note.GNU-stack,"",@progbits
  	.section	.note.GNU-split-stack,"",@progbits
--- 367,375 ----
diff -Nrcpad gcc-17-20260705/libgcc/config/s390/sfp-machine.h gcc-17-20260712/libgcc/config/s390/sfp-machine.h
*** gcc-17-20260705/libgcc/config/s390/sfp-machine.h	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/libgcc/config/s390/sfp-machine.h	Sun Jul 12 22:32:18 2026
***************
*** 21,30 ****
     see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
     <http://www.gnu.org/licenses/>.  */
  
- #if ! __s390x__
- # error "soft-fp implemented for s390x only"
- #endif
- 
  #define _FP_W_TYPE_SIZE         64
  #define _FP_W_TYPE              unsigned long long
  #define _FP_WS_TYPE             signed long long
--- 21,26 ----
diff -Nrcpad gcc-17-20260705/libgcc/config.host gcc-17-20260712/libgcc/config.host
*** gcc-17-20260705/libgcc/config.host	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/libgcc/config.host	Sun Jul 12 22:32:18 2026
*************** sparc*-*-*)
*** 188,194 ****
  	cpu_type=sparc
  	tmake_file="${tmake_file} sparc/t-sparc"
  	;;
! s390*-*-*)
  	cpu_type=s390
  	;;
  # Note the 'l'; we need to be able to match e.g. "shle" or "shl".
--- 188,194 ----
  	cpu_type=sparc
  	tmake_file="${tmake_file} sparc/t-sparc"
  	;;
! s390x-*-*)
  	cpu_type=s390
  	;;
  # Note the 'l'; we need to be able to match e.g. "shle" or "shl".
*************** x86_64-*-freebsd*)
*** 774,783 ****
  	md_unwind_header=i386/freebsd-unwind.h
  	;;
  i[34567]86-*-netbsdelf*)
! 	tmake_file="${tmake_file} i386/t-crtstuff"
  	;;
  x86_64-*-netbsd*)
! 	tmake_file="${tmake_file} i386/t-crtstuff"
  	;;
  i[34567]86-*-openbsd*)
  	;;
--- 774,783 ----
  	md_unwind_header=i386/freebsd-unwind.h
  	;;
  i[34567]86-*-netbsdelf*)
! 	tmake_file="${tmake_file} i386/t-crtstuff i386/t-msabi"
  	;;
  x86_64-*-netbsd*)
! 	tmake_file="${tmake_file} i386/t-crtstuff i386/t-msabi"
  	;;
  i[34567]86-*-openbsd*)
  	;;
*************** rx-*-linux*)
*** 1385,1404 ****
  	tmake_file="rx/t-rx t-fdpbit"
  	tm_file="$tm_file rx/rx-lib.h"
  	;;
- s390-*-linux*)
- 	tmake_file="${tmake_file} s390/t-crtstuff s390/t-linux s390/32/t-floattodi t-stack s390/t-stack-s390"
- 	md_unwind_header=s390/linux-unwind.h
- 	;;
  s390x-*-linux*)
  	tmake_file="${tmake_file} s390/t-crtstuff s390/t-linux t-stack s390/t-stack-s390"
! 	if test "${host_address}" = 32; then
! 	   tmake_file="${tmake_file} s390/32/t-floattodi"
! 	else
! 	   if test "$libgcc_cv_s390_float16" = "yes"; then
  		tmake_file="${tmake_file} s390/t-float16"
- 	   fi
- 	   tmake_file="${tmake_file} s390/t-softfp t-softfp"
  	fi
  	md_unwind_header=s390/linux-unwind.h
  	;;
  s390x-ibm-tpf*)
--- 1385,1396 ----
  	tmake_file="rx/t-rx t-fdpbit"
  	tm_file="$tm_file rx/rx-lib.h"
  	;;
  s390x-*-linux*)
  	tmake_file="${tmake_file} s390/t-crtstuff s390/t-linux t-stack s390/t-stack-s390"
! 	if test "$libgcc_cv_s390_float16" = "yes"; then
  		tmake_file="${tmake_file} s390/t-float16"
  	fi
+ 	tmake_file="${tmake_file} s390/t-softfp t-softfp"
  	md_unwind_header=s390/linux-unwind.h
  	;;
  s390x-ibm-tpf*)
diff -Nrcpad gcc-17-20260705/libgcc/configure gcc-17-20260712/libgcc/configure
*** gcc-17-20260705/libgcc/configure	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/libgcc/configure	Sun Jul 12 22:32:18 2026
*************** $as_echo "$libgcc_cv_powerpc_3_1_float12
*** 5336,5342 ****
  esac
  
  case ${host} in
! s390*-*-linux*)
    { $as_echo "$as_me:${as_lineno-$LINENO}: checking Support float16 on s390" >&5
  $as_echo_n "checking Support float16 on s390... " >&6; }
  if ${libgcc_cv_s390_float16+:} false; then :
--- 5336,5342 ----
  esac
  
  case ${host} in
! s390x-*-linux*)
    { $as_echo "$as_me:${as_lineno-$LINENO}: checking Support float16 on s390" >&5
  $as_echo_n "checking Support float16 on s390... " >&6; }
  if ${libgcc_cv_s390_float16+:} false; then :
diff -Nrcpad gcc-17-20260705/libgcc/configure.ac gcc-17-20260712/libgcc/configure.ac
*** gcc-17-20260705/libgcc/configure.ac	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/libgcc/configure.ac	Sun Jul 12 22:32:18 2026
*************** powerpc*-*-linux*)
*** 480,486 ****
  esac
  
  case ${host} in
! s390*-*-linux*)
    AC_CACHE_CHECK([Support float16 on s390],
  		 [libgcc_cv_s390_float16],
  		 [AC_COMPILE_IFELSE(
--- 480,486 ----
  esac
  
  case ${host} in
! s390x-*-linux*)
    AC_CACHE_CHECK([Support float16 on s390],
  		 [libgcc_cv_s390_float16],
  		 [AC_COMPILE_IFELSE(
diff -Nrcpad gcc-17-20260705/libgcc/generic-morestack.c gcc-17-20260712/libgcc/generic-morestack.c
*** gcc-17-20260705/libgcc/generic-morestack.c	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/libgcc/generic-morestack.c	Sun Jul 12 22:32:18 2026
*************** __splitstack_find (void *segment_arg, vo
*** 990,997 ****
  #elif defined __powerpc64__
  #elif defined __s390x__
        nsp -= 2 * 160;
- #elif defined __s390__
-       nsp -= 2 * 96;
  #else
  #error "unrecognized target"
  #endif
--- 990,995 ----
diff -Nrcpad gcc-17-20260705/libgcobol/ChangeLog gcc-17-20260712/libgcobol/ChangeLog
*** gcc-17-20260705/libgcobol/ChangeLog	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/libgcobol/ChangeLog	Sun Jul 12 22:32:18 2026
***************
*** 1,3 ****
--- 1,234 ----
+ 2026-07-11  Robert Dubner  <rdubner@symas.com>
+ 
+ 	* charmaps.cc (helpful_iconv_open): Use snprintf() instead of strncpy().
+ 
+ 2026-07-11  Robert Dubner  <rdubner@symas.com>
+ 
+ 	* charmaps.cc (helpful_iconv_open): Use strncpy() properly.
+ 	(char_from_figconst): Initialize return value.
+ 
+ 2026-07-10  Robert Dubner  <rdubner@symas.com>
+ 
+ 	* charmaps.cc (defined): Use conditional compilation to locate .h
+ 	files; incorporate cobol-endian.h.
+ 	(__gg__iconverter): Conditional use of malloc/xmalloc.
+ 	(fixcode): Convert utf16 and utf32 to utf-16le/be and utf-32le/based
+ 	on target endianness.  Convert utf16le/be and utf32le/be to
+ 	utf-16le/be and utf-32le/be to accommodate FreeBSD, which has only
+ 	the hyphenated versions.
+ 	(helpful_iconv_open): Use fixcode();
+ 	(char_from_figconst): New routine.
+ 	* charmaps.h (CHARMAPS_H): Format comment.
+ 	(ascii_cr): New definition.
+ 	(ascii_lbrace): Likewise.
+ 	(ascii_rbrace): Likewise.
+ 	(ascii_newline): Likewise.
+ 	(ebcdic_return): Likewise.
+ 	(ebcdic_newline): Likewise.
+ 	(helpful_iconv_open): New declaration.
+ 	(DEFAULT_32_ENCODING): Change to...
+ 	(HOST_32_ENCODING): New constant, based on host endianness.
+ 	(error_msg_direct): Eliminate debugging comment.
+ 	(charmap_as_unsigned_chars): New utility.
+ 	(charmap_load_unaligned): Likewise.
+ 	(charmap_store_unaligned): Likewise.
+ 	(store_uint16): Likewise.
+ 	(store_uint32): Likewise.
+ 	(class cbl_iconv_t): Use helpful_iconv_open().
+ 	(class charmap_t): Endianness.
+ 	(char_from_figconst): New declaration.
+ 	* gfileio.cc (relative_file_delete): Endianness.
+ 	(relative_file_start): Endianness.
+ 	(relative_file_rewrite): Endianness.
+ 	(relative_file_write): Endianness.
+ 	(write_a_char): Endianness.
+ 	(sequential_file_write): Endianness.
+ 	(relative_file_read): Endianness.
+ 	* gmath.cc (__gg__pow): Formatting.
+ 	(uint128_lo64): Endianness.
+ 	(uint128_hi64): Endianness.
+ 	(uint128_from_limbs): Endianness.
+ 	(int256_get_u128): Endianness.
+ 	(int256_set_u128): Endianness.
+ 	(int256_is_negative): Endianness.
+ 	(int128_abs_as_uint128): Endianness.
+ 	(add_int256_to_int256): Endianness.
+ 	(negate_int256): Endianness.
+ 	(divide_int256_by_int64): Endianness.
+ 	(squeeze_int256): Endianness.
+ 	(get_int256_from_qualified_field): Endianness.
+ 	(__gg__add_fixed_phase1): Endianness.
+ 	(__gg__addf1_fixed_phase2): Endianness.
+ 	(__gg__fixed_phase2_assign_to_c): Endianness.
+ 	(__gg__add_float_phase1): Endianness.
+ 	(__gg__addf1_float_phase2): Endianness.
+ 	(__gg__addf3): Endianness.
+ 	(__gg__subtractf1_fixed_phase2): Endianness.
+ 	(__gg__subtractf2_fixed_phase1): Endianness.
+ 	(__gg__subtractf1_float_phase2): Endianness.
+ 	(__gg__subtractf2_float_phase1): Endianness.
+ 	(__gg__subtractf3): Endianness.
+ 	(__gg__multiplyf1_phase1): Endianness.
+ 	(multiply_int128_by_int128): Endianness.
+ 	(__gg__multiplyf1_phase2): Endianness.
+ 	(__gg__multiplyf2): Endianness.
+ 	(shift_in_place128): Endianness.
+ 	(int256_as_decimal): Endianness.
+ 	(clz_uint64): Endianness.
+ 	(defined): Endianness.
+ 	(shift_left_int256): Endianness.
+ 	(divide_int128_by_int128): Endianness.
+ 	(__gg__dividef1_phase2): Endianness.
+ 	(__gg__dividef23): Endianness.
+ 	(__gg__dividef45): Endianness.
+ 	* inspect.cc (as_chars): Endianness.
+ 	(funky_find): Endianness.
+ 	(funky_find_wide): Endianness.
+ 	(funky_find_wide_backward): Endianness.
+ 	(append_normalized_character): Endianness.
+ 	(normalize_id): Endianness.
+ 	(normalize_id_sbc): Endianness.
+ 	(the_alpha_and_omega): Endianness.
+ 	(the_alpha_and_omega_sbc): Endianness.
+ 	(the_alpha_and_omega_backward): Endianness.
+ 	(inspect_backward_format_1): Endianness.
+ 	(__gg__inspect_format_1): Endianness.
+ 	(inspect_backward_format_2): Endianness.
+ 	(__gg__inspect_format_2): Endianness.
+ 	(normalize_for_inspect_format_4): Endianness.
+ 	(__gg__inspect_format_4): Endianness.
+ 	* intrinsic.cc (as_chars): Endianness.
+ 	(xrealloc): Compile for both cobol1 and libgcobol.so.
+ 	(mconvert_to_c_string): Endianness.
+ 	(ensure_char_capacity):  Endianness.
+ 	(struct input_state): Allocate buffers using the proper sizes.
+ 	(get_all_time): Endianness.
+ 	(__gg__char): Endianness.
+ 	(__gg__formatted_current_date): Endianness.
+ 	(__gg__formatted_date): Endianness.
+ 	(__gg__formatted_datetime): Endianness.
+ 	(__gg__formatted_time): Endianness.
+ 	(change_case): Endianness.
+ 	(__gg__median): Endianness.
+ 	(numval): Endianness.
+ 	(numval_c): Endianness.
+ 	(__gg__ord): Endianness.
+ 	(__gg__trim_a): Endianness.
+ 	(__gg__numval_f): Endianness.
+ 	(__gg__test_numval_f): Endianness.
+ 	(ismatch): Endianness.
+ 	(iscasematch): Endianness.
+ 	(strstr): Endianness.
+ 	(strcasestr): Endianness.
+ 	(strlaststr): Endianness.
+ 	(strcaselaststr): Endianness.
+ 	(__gg__substitute): Endianness.
+ 	(__gg__locale_date): Endianness.
+ 	(__gg__locale_time): Endianness.
+ 	* io.cc (__compat_file_status_word): Endianness.
+ 	* libgcobol.cc (as_chars): Endianness.
+ 	(as_unsigned_chars): Endianness.
+ 	(load_unaligned): Endianness.
+ 	(store_unaligned): Endianness.
+ 	(signed_int128_max): Endianness.
+ 	(checked_realloc): Endianness.
+ 	(collated): Endianness.
+ 	(edited_to_binary): Endianness.
+ 	(native_to_binary_signed): Endianness.
+ 	(native_to_binary_unsigned): Endianness.
+ 	(digit_rt): Endianness.
+ 	(num_disp_dive_rt): Endianness.
+ 	(numeric_display_to_binary): Endianness.
+ 	(get_binary_value_local): Endianness.
+ 	(__gg__power_of_ten): Endianness.
+ 	(value_is_too_big): Endianness.
+ 	(binary_to_big_endian): Endianness.
+ 	(binary_to_native_binary): Endianness.
+ 	(int128_to_field): Endianness.
+ 	(__gg__field_from_string): Endianness.
+ 	(field_from_ascii): Endianness.
+ 	(uber_compare): Endianness.
+ 	(__gg__dirty_to_binary): Endianness.
+ 	(get_scaled_rdigits): Endianness.
+ 	(format_for_display_internal): Endianness.
+ 	(compare_88): Endianness.
+ 	(get_float128): Endianness.
+ 	(__gg__compare_field_class): Endianness.
+ 	(compare_strings): Endianness.
+ 	(__gg__compare_2): Endianness.
+ 	(__gg__double_to_target): Endianness.
+ 	(__gg__sort_table): Endianness.
+ 	(init_var_both): Endianness.
+ 	(alpha_to_alpha_move_from_location): Endianness.
+ 	(alpha_to_alpha_move): Endianness.
+ 	(__gg__move): Endianness.
+ 	(__gg__move_literala): Endianness.
+ 	(__gg__sort_workfile): Endianness.
+ 	(__gg__merge_files): Endianness.
+ 	(move_string): Endianness.
+ 	(normalize_for_inspect_format_4): Endianness.
+ 	(__gg__string): Endianness.
+ 	(display_both): Endianness.
+ 	(__gg__float128_from_qualified_field): Endianness.
+ 	(float128_to_int128): Endianness.
+ 	(float128_to_location): Endianness.
+ 	(__gg__onetime_initialization): Endianness.
+ 	(is_numeric_display_numeric): Endianness.
+ 	(classify_alphabetic_type): Endianness.
+ 	(accept_envar): Endianness.
+ 	(__gg__set_envar): Endianness.
+ 	(command_line_plan_b): Endianness.
+ 	(__gg__get_command_line): Endianness.
+ 	(__gg__set_pointer): Endianness.
+ 	(__gg__alphabet_use): Formatting.
+ 	(__gg__fetch_call_by_value_value): Eliminate.
+ 	(__gg__unstring): Endianness.
+ 	(match_declarative): Formatting.
+ 	(default_exception_handler): Formatting.
+ 	(__gg__check_fatal_exception): Endianness.
+ 	(__gg__float128_from_location): Endianness.
+ 	(__gg__adjust_encoding): Endianness.
+ 	(__gg__func_exception_file): Endianness.
+ 	(__gg__is_float_infinite): Formatting.
+ 	(__gg__float32_from_128): Endianness.
+ 	(__gg__float32_from_64): Endianness.
+ 	(__gg__float64_from_128): Endianness.
+ 	(__gg__just_mangle_name): Endianness.
+ 	(__gg__function_handle_from_name): Proper initialization.
+ 	(__gg__variables_to_init): Likewise.
+ 	(__gg__mirror_range): Formatting.
+ 	(__gg__allocate): Formatting.
+ 	(__gg__module_name): Formatting.
+ 	(__gg__set_exception_environment): Formatting.
+ 	(__gg__set_env_name): Endianness.
+ 	(__gg__set_env_value): Endianness.
+ 	(__gg__refer_from_string): Endianness.
+ 	(__gg__refer_from_psz): Endianness.
+ 	(__gg__compare_string_all): Endianness.
+ 	(__gg__compare_string_1): Endianness.
+ 	(__gg__compare_string_1a): Endianness.
+ 	(__gg__compare_string_2): Endianness.
+ 	(__gg__compare_string_2a): Endianness.
+ 	(__gg__compare_string_4): Endianness.
+ 	(__gg__compare_string_4a): Endianness.
+ 	(__gg_compare_string_different): Endianness.
+ 	(__gg__compare_numeric_all): Endianness.
+ 	(__gg__compare_binary_to_string): Endianness.
+ 	* libgcobol.h (defined): Endianness.
+ 	(COBOL_BIG_ENDIAN): Endianness.
+ 	(COBOL_LITTLE_ENDIAN): Endianness.
+ 	* stringbin.cc (__gg__binary_to_string_encoded): Endianness.
+ 	(digit_rt): Support for num_disp_dive_rt().
+ 	(num_disp_dive_rt): Recurse conversion of numeric-display to binary.
+ 	(__gg__numeric_display_to_binary): Use num_disp_dive_rt().
+ 	* stringbin.h (__gg__numeric_display_to_binary): Remove declaration.
+ 	* valconv.cc (defined): Use IN_GCC_FRONTEND to find .h files;
+ 	incorporate cobol-endian.h.
+ 	(TOUPPER): Simple toupper() routine.
+ 	(__gg__string_to_numeric_edited): Use TOUPPER.
+ 	* cobol-endian.h: New file.  Provides access to big-e versus
+ 	little-e variables and preprocessor definitions.
+ 
  2026-06-30  Robert Dubner  <rdubner@symas.com>
  
  	* charmaps.h (class charmap_t): Return uint8_t instead of uint32_t
diff -Nrcpad gcc-17-20260705/libgcobol/charmaps.cc gcc-17-20260712/libgcobol/charmaps.cc
*** gcc-17-20260705/libgcobol/charmaps.cc	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/libgcobol/charmaps.cc	Sun Jul 12 22:32:18 2026
***************
*** 42,54 ****
--- 42,74 ----
  #include <vector>
  #include <langinfo.h>
  
+ #if defined(IN_GCC_FRONTEND)
+ #include "cobol-system.h"
+ #include "coretypes.h"
+ #include "tree.h"
+ #include "tree-iterator.h"
+ #include "stringpool.h"
+ #include "diagnostic-core.h"
+ #include "target.h"
+ #include "tm.h"
+ #include "../../libgcobol/ec.h"
+ #include "../../libgcobol/common-defs.h"
+ #include "../../libgcobol/io.h"
+ #include "../../libgcobol/gcobolio.h"
+ #include "../../libgcobol/valconv.h"
+ #include "../../libgcobol/cobol-endian.h"
+ #include "../../libgcobol/charmaps.h"
+ #include "../../libgcobol/encodings.h"
+ #else
  #include "ec.h"
  #include "common-defs.h"
  #include "io.h"
  #include "gcobolio.h"
  #include "valconv.h"
+ #include "cobol-endian.h"
  #include "charmaps.h"
  #include "encodings.h"
+ #endif
  
  // These values are in the ASCII space.
  int __gg__decimal_point        = '.'  ;
*************** static const encodings_t *
*** 1432,1438 ****
--- 1452,1462 ----
  encoding_descr( const char name[] ) {
    static encodings_t *eoencodings = encodings + COUNT_OF(encodings);
  
+ #if defined(IN_GCC_FRONTEND)
+   char *slashless = xstrdup(name);
+ #else
    char *slashless = strdup(name);
+ #endif
    assert(slashless);
    char *pslash = strchr(slashless, '/');
    if( pslash )
*************** __gg__iconverter( cbl_encoding_t from,
*** 1509,1515 ****
--- 1533,1544 ----
    charmap_t *charmap_to = __gg__get_charmap(to);
  
    static size_t retsize = 1;
+ 
+ #if defined(IN_GCC_FRONTEND)
+   static char *retval = static_cast<char *>(xmalloc(retsize));
+ #else
    static char *retval = static_cast<char *>(malloc(retsize));
+ #endif
  
    if( outlength_p ) *outlength_p = 0;
    if( iconv_retval_p ) *iconv_retval_p = 0;
*************** __gg__iconverter( cbl_encoding_t from,
*** 1518,1524 ****
--- 1547,1557 ----
    if( retsize < needed )
      {
      retsize = needed;
+ #if defined(IN_GCC_FRONTEND)
+     retval = static_cast<char *>(xrealloc(retval, retsize));
+ #else
      retval = static_cast<char *>(realloc(retval, retsize));
+ #endif
      }
  
    size_t outlength;
*************** __gg__iconverter( cbl_encoding_t from,
*** 1589,1595 ****
--- 1622,1632 ----
        const charmap_t *map_from = __gg__get_charmap(from);
        if( map_from->is_like_ebcdic() )
          {
+ #if defined(IN_GCC_FRONTEND)
+         inbuf_cpy = static_cast<char *>(xmalloc(length));
+ #else
          inbuf_cpy = static_cast<char *>(malloc(length));
+ #endif
          assert(inbuf_cpy);
          memcpy(inbuf_cpy, inbuf, length);
          inbuf = inbuf_cpy;
*************** __gg__iconverter( cbl_encoding_t from,
*** 1612,1617 ****
--- 1649,1655 ----
      iconv_retval = 1; // This primes the pump:
      for(;;)
        {
+       errno = 0;
        iconv_retval = iconv( cd,
                              &inbuf, &inbytesleft,
                              &outbuf, &outbytesleft);
*************** __gg__miconverter( cbl_encoding_t from,
*** 1707,1713 ****
--- 1745,1755 ----
                                             length,
                                             outlength_p,
                                             iconv_retval_p);
+ #if defined(IN_GCC_FRONTEND)
+   char *retval = static_cast<char *>(xmalloc(*outlength_p + 4));
+ #else
    char *retval = static_cast<char *>(malloc(*outlength_p + 4));
+ #endif
    assert(retval);
    memcpy(retval, converted, *outlength_p);
    // Tack on four zeros to be a NUL in any encoding.
*************** __gg__get_charmap(cbl_encoding_t encodin
*** 1756,1758 ****
--- 1798,1906 ----
    return retval;
    }
  
+ static void
+ fixcode( char *ach, size_t N )
+   {
+   if(    strncasecmp(ach, "UTF16", N) == 0
+       || strncasecmp(ach, "UTF-16", N) == 0 )
+     {
+     strcpy(ach, "UTF-16" );
+     if( cobol_target_big_endian() ) // cppcheck-suppress knownConditionTrueFalse
+       {
+       strcat(ach, "BE");
+       }
+     else
+       {
+       strcat(ach, "LE");
+       }
+     }
+   else if(    strncasecmp(ach, "UTF32", N) == 0
+            || strncasecmp(ach, "UTF-32", N) == 0 )
+     {
+     strcpy(ach, "UTF-32" );
+     if( cobol_target_big_endian() ) // cppcheck-suppress knownConditionTrueFalse
+       {
+       strcat(ach, "BE");
+       }
+     else
+       {
+       strcat(ach, "LE");
+       }
+     }
+   else if( strncasecmp(ach, "UTF16BE", N) == 0 )
+     {
+     strcpy(ach, "UTF-16BE");
+     }
+   else if( strncasecmp(ach, "UTF16LE", N) == 0 )
+     {
+     strcpy(ach, "UTF-16LE");
+     }
+   else if( strncasecmp(ach, "UTF32BE", N) == 0 )
+     {
+     strcpy(ach, "UTF-32BE");
+     }
+   else if( strncasecmp(ach, "UTF32LE", N) == 0 )
+     {
+     strcpy(ach, "UTF-32LE");
+     }
+   }
+ 
+ iconv_t
+ helpful_iconv_open(const char *tocode, const char *fromcode)
+   {
+   // This routine is helpful in two ways.  FreeBSD systems provide for
+   // "utf-16le" as an iconv_open(3) input, but not "utf16le", as does Ubuntu.
+   // So it converts "utf16" to "utf-16"
+ 
+   // It also provides for converting "utf-16" to either "utf-16be" or "utf16le"
+   // depending on the endianness of the target machine.  Because we can't
+   // handle an unspecified "utf-16" because of the Byte Order Marker, this is
+   // my justification for forcing it to one or the other.
+ 
+   // When the programmer specifies "le" or "be", we let that be forced through.
+   // Specify disaster, and you get disaster.
+ 
+   char ach_to[32];
+   char ach_from[32];
+ 
+   snprintf(ach_to, sizeof ach_to, "%s", tocode);
+   snprintf(ach_from, sizeof ach_from, "%s", fromcode);
+ 
+   fixcode(ach_to, sizeof(ach_to));
+   fixcode(ach_from, sizeof(ach_from));
+ 
+   iconv_t cd = iconv_open(ach_to, ach_from);
+ 
+   return cd;
+   }
+ 
+ char
+ char_from_figconst(cbl_figconst_t figconst)
+   {
+   char retval = 0;
+   switch(figconst)
+     {
+     case normal_value_e :
+       retval = 0;
+       break;
+     case low_value_e    :
+       retval = __gg__low_value_character;
+       break;
+     case null_value_e   :
+       retval = '\0';
+       break;
+     case zero_value_e   :
+       retval = ascii_zero;
+       break;
+     case space_value_e  :
+       retval = ascii_space;
+       break;
+     case quote_value_e  :
+       retval = __gg__quote_character;
+       break;
+     case high_value_e   :
+       retval = __gg__high_value_character;
+       break;
+     }
+   return retval;
+   }
\ No newline at end of file
diff -Nrcpad gcc-17-20260705/libgcobol/charmaps.h gcc-17-20260712/libgcobol/charmaps.h
*** gcc-17-20260705/libgcobol/charmaps.h	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/libgcobol/charmaps.h	Sun Jul 12 22:32:18 2026
***************
*** 31,38 ****
--- 31,44 ----
  #ifndef CHARMAPS_H
  #define CHARMAPS_H
  
+ #include <cassert>
+ #include <cstddef>
+ #include <cstdint>
+ #include <cstring>
  #include <map>
  #include <string>
+ #include <type_traits>
+ #include <unordered_map>
  #include <vector>
  
  #include <unistd.h>
***************
*** 48,60 ****
   *  calls are in the "console" domain.
   *
   *  Second is the internal single-byte-coded codeset of the data, in memory,
!  *  being manipulated by the generated code of the cobol executable.  The actual
   *  codeset of "internal" is either EBCDIC (in the form of Code Page 1140 or
   *  ASCII (Code Page 1252)
   *
   *  Third is the C++ source code of the GCOBOL compiler; this comment is
   *  in that environment.  We neither know, nor care, if this code is encoded in
!  *  in UTF-8 (as is probable, in these enlighted days of 2022) or something like
   *  Code Page1252. We are going to regard it as "ascii" under the
   *  assumption that there is no reason for any character in the compiler's
   *  source code to have a code point outside of the plain vanilla 0x20 through
--- 54,68 ----
   *  calls are in the "console" domain.
   *
   *  Second is the internal single-byte-coded codeset of the data, in memory,
!  *  being manipulated by the generated code of the cobol executable.  The
!  *  actual
   *  codeset of "internal" is either EBCDIC (in the form of Code Page 1140 or
   *  ASCII (Code Page 1252)
   *
   *  Third is the C++ source code of the GCOBOL compiler; this comment is
   *  in that environment.  We neither know, nor care, if this code is encoded in
!  *  in UTF-8 (as is probable, in these enlighted days of 2022) or
!  *  something like
   *  Code Page1252. We are going to regard it as "ascii" under the
   *  assumption that there is no reason for any character in the compiler's
   *  source code to have a code point outside of the plain vanilla 0x20 through
***************
*** 66,72 ****
   *  bytes long in UTF-8, and five bytes long in CP1252.  We start with an
   *  assumption that it is UTF-8 and switch to CP1252 upon encountering a byte
   *  sequence with values above 0x80 that can't be UTF-8.  We have provision for
!  *  forcing it to be one or the other.  Codepoints in that domain are referenced
   *  as "raw".  Codepoint in the "raw" domain don't last long; they are be
   *  converted to either "ascii" or "internal" early on, as necessary.
   */
--- 74,81 ----
   *  bytes long in UTF-8, and five bytes long in CP1252.  We start with an
   *  assumption that it is UTF-8 and switch to CP1252 upon encountering a byte
   *  sequence with values above 0x80 that can't be UTF-8.  We have provision for
!  *  forcing it to be one or the other.  Codepoints in that domain are
!  *  referenced
   *  as "raw".  Codepoint in the "raw" domain don't last long; they are be
   *  converted to either "ascii" or "internal" early on, as necessary.
   */
***************
*** 85,91 ****
      compiled is also ASCII-based, even if it is actually UTF-8. Said another
      way, characters encoded between zero and 127 are regarded as ASCII.
  
!     This means that we are not going to try to compile EBCDIC COBOL source code;
      any such will have to be externally converted to ASCII before feeding it
      through this compiler on an ASCII based Linux system.
  
--- 94,101 ----
      compiled is also ASCII-based, even if it is actually UTF-8. Said another
      way, characters encoded between zero and 127 are regarded as ASCII.
  
!     This means that we are not going to try to compile EBCDIC COBOL
!     source code;
      any such will have to be externally converted to ASCII before feeding it
      through this compiler on an ASCII based Linux system.
  
*************** enum
*** 259,271 ****
  #define ascii_underscore       ((uint8_t)('_'))
  #define ascii_asterisk         ((uint8_t)('*'))
  #define ascii_query            ((uint8_t)('?'))
! #define ascii_cr               ((uint8_t)('\r'))
  #define ascii_ff               ((uint8_t)('\f'))
- #define ascii_newline          ((uint8_t)('\n'))
  #define ascii_return           ((uint8_t)('\r'))
  #define ebcdic_zero            ((uint8_t)(0xF0))
  #define ebcdic_plus            ((uint8_t)(0x4E))
  #define ebcdic_minus           ((uint8_t)(0x60))
  
  extern unsigned char __gg__data_space[1]       ;
  extern unsigned char __gg__data_low_values[1]  ;
--- 269,284 ----
  #define ascii_underscore       ((uint8_t)('_'))
  #define ascii_asterisk         ((uint8_t)('*'))
  #define ascii_query            ((uint8_t)('?'))
! #define ascii_lbrace           ((uint8_t)('{'))
! #define ascii_rbrace           ((uint8_t)('}'))
  #define ascii_ff               ((uint8_t)('\f'))
  #define ascii_return           ((uint8_t)('\r'))
+ #define ascii_newline          ((uint8_t)('\n'))
+ #define ebcdic_return          ((uint8_t)(0x0D))
  #define ebcdic_zero            ((uint8_t)(0xF0))
  #define ebcdic_plus            ((uint8_t)(0x4E))
  #define ebcdic_minus           ((uint8_t)(0x60))
+ #define ebcdic_newline         ((uint8_t)(0x25))
  
  extern unsigned char __gg__data_space[1]       ;
  extern unsigned char __gg__data_low_values[1]  ;
*************** const char * __gg__encoding_iconv_name(
*** 287,292 ****
--- 300,307 ----
  cbl_encoding_t __gg__encoding_iconv_type( const char *name );
  extern cbl_encoding_t __gg__console_encoding;
  
+ extern iconv_t helpful_iconv_open(const char *tocode, const char *fromcode);
+ 
  // returns a pointer to a static buffer.  Beware!
  char * __gg__iconverter(cbl_encoding_t from,
                          cbl_encoding_t to,
*************** char * __gg__miconverter(cbl_encoding_t
*** 306,322 ****
  
  #define DEFAULT_SOURCE_ENCODING (iconv_CP1252_e)
  
! #if __FreeBSD__
! #define DEFAULT_32_ENCODING (iconv_UTF_32LE_e)
! #else
! #define DEFAULT_32_ENCODING (iconv_UTF32LE_e)
! #endif
  
  #ifndef IN_TARGET_LIBS
  void error_msg_direct( const char gmsgid[], ... );
-   //// ATTRIBUTE_GCOBOL_DIAG(1, 2);  can't appear here?
  #endif
  
  class charmap_t;
  
  /*
--- 321,379 ----
  
  #define DEFAULT_SOURCE_ENCODING (iconv_CP1252_e)
  
! #define HOST_32_ENCODING (cobol_target_big_endian() ? iconv_UTF_32BE_e : iconv_UTF_32LE_e)
  
  #ifndef IN_TARGET_LIBS
  void error_msg_direct( const char gmsgid[], ... );
  #endif
  
+ 
+ static inline unsigned char *
+ charmap_as_unsigned_chars(char *p)
+   {
+   return reinterpret_cast<unsigned char *>(p);
+   }
+ 
+ static inline const unsigned char *
+ charmap_as_unsigned_chars(const char *p)
+   {
+   return reinterpret_cast<const unsigned char *>(p);
+   }
+ 
+ template <typename T>
+ static T
+ charmap_load_unaligned(const void *p)
+   {
+   static_assert(std::is_trivially_copyable<T>::value,
+                 "charmap_load_unaligned requires a trivially copyable type");
+   T retval;
+   std::memcpy(&retval, p, sizeof(retval));
+   return retval;
+   }
+ 
+ template <typename T>
+ static void
+ charmap_store_unaligned(void *p, T value)
+   {
+   static_assert(std::is_trivially_copyable<T>::value,
+                 "charmap_store_unaligned requires a trivially copyable type");
+   std::memcpy(p, &value, sizeof(value));
+   }
+ 
+ static inline void
+ store_uint16(unsigned char *p, uint16_t value)
+   {
+   // This routine is handling encoded characters, so the storage is literal
+   memcpy(p, &value, 2);
+   }
+ 
+ static inline void
+ store_uint32(unsigned char *p, uint32_t value)
+   {
+   // This routine is handling encoded characters, so the storage is literal
+   memcpy(p, &value, 4);
+   }
+ 
  class charmap_t;
  
  /*
*************** class cbl_iconv_t {
*** 370,376 ****
      auto p = cds.find(key);
      if( p != cds.end() ) return p->second;
  
!     iconv_t cd = iconv_open(key.tocode, key.fromcode);
      cds[key] = cd; // whether or not failed
  
      if( ! valid(cd) ) {
--- 427,433 ----
      auto p = cds.find(key);
      if( p != cds.end() ) return p->second;
  
!     iconv_t cd = helpful_iconv_open(key.tocode, key.fromcode);
      cds[key] = cd; // whether or not failed
  
      if( ! valid(cd) ) {
*************** class charmap_t
*** 413,421 ****
        sign_type_ebcdic,
        } m_numeric_sign_type;
  
!     // This map retains the ASCII-to-encoded value in m_encoding, so that iconv
!     // need be called but once for each ASCII value.
!     std::unordered_map<cbl_char_t, cbl_char_t>m_map_of_encodings;
  
    public:
      explicit charmap_t(cbl_encoding_t e)
--- 470,545 ----
        sign_type_ebcdic,
        } m_numeric_sign_type;
  
!     // This map retains the ASCII-to-encoded value in m_encoding, so that
!     // iconv need be called but once for each ASCII value.
!     std::unordered_map<cbl_char_t, cbl_char_t> m_map_of_encodings;
! 
!     const unsigned char *
!     skip_bom(const unsigned char *p, size_t outlength) const
!       {
!       if( m_has_bom && outlength >= 2 * m_stride )
!         {
!         p += m_stride;
!         }
!       return p;
!       }
! 
!     cbl_char_t
!     get_encoded_char(const void *base_, size_t location) const
!       {
!       const unsigned char *base = static_cast<const unsigned char *>(base_);
!       const unsigned char *p = base + location;
!       cbl_char_t retval = 0;
! 
!       switch(m_stride)
!         {
!         case 1:
!           {
!           retval = p[0];
!           break;
!           }
! 
!         case 2:
!           {
!           uint16_t c;
!           memcpy(&c, p, 2);
!           retval = c;
!           break;
!           }
! 
!         default:
!           {
!           uint32_t c;
!           memcpy(&c, p, 4);
!           retval = c;
!           break;
!           }
!         }
! 
!       return retval;
!       }
! 
!     void
!     put_encoded_char(cbl_char_t ch, void *base_, size_t location) const
!       {
!       unsigned char *base = static_cast<unsigned char *>(base_);
!       unsigned char *p = base + location;
! 
!       switch(m_stride)
!         {
!         case 1:
!           p[0] = static_cast<unsigned char>(ch);
!           break;
! 
!         case 2:
!           store_uint16(p, static_cast<uint16_t>(ch));
!           break;
! 
!         default:
!           store_uint32(p, ch);
!           break;
!         }
!       }
  
    public:
      explicit charmap_t(cbl_encoding_t e)
*************** class charmap_t
*** 451,458 ****
                              &outbuf, &outbytesleft);
        outlength = sizeof(response_) - outbytesleft;
  
!       const unsigned char *response =
!                                   reinterpret_cast<unsigned char *>(response_);
  
        unsigned char char_0 = 0x00;
  
--- 575,581 ----
                              &outbuf, &outbytesleft);
        outlength = sizeof(response_) - outbytesleft;
  
!       const unsigned char *response = charmap_as_unsigned_chars(response_);
  
        unsigned char char_0 = 0x00;
  
*************** class charmap_t
*** 508,517 ****
--- 631,642 ----
          m_stride = 4;
          if( response[0] == 0xFF && response[1] == 0xFE )
            {
+           m_has_bom = true;
            char_0 = response[4];
            }
          else if( response[0] == 0xFE && response[1] == 0xFF )
            {
+           m_has_bom = true;
            m_is_big_endian = true;
            char_0 = response[7];
            }
*************** class charmap_t
*** 553,566 ****
      bool has_bom()       const { return m_has_bom      ; }
      uint8_t stride()     const { return m_stride       ; }
  
!     cbl_char_t mapped_character(unsigned char ch)
        {
        // The assumption is that anybody calling this routine is providing
        // a single-byte character in the DEFAULT_SOURCE_ENCODING encoding.  We
!       // return the equivalent character in the m_encoding
        cbl_char_t retval;
        std::unordered_map<cbl_char_t, cbl_char_t>::const_iterator it =
!                                                    m_map_of_encodings.find(ch);
        if( it != m_map_of_encodings.end() )
          {
          retval = it->second;
--- 678,693 ----
      bool has_bom()       const { return m_has_bom      ; }
      uint8_t stride()     const { return m_stride       ; }
  
!     cbl_char_t
!     mapped_character(unsigned char ch)
        {
        // The assumption is that anybody calling this routine is providing
        // a single-byte character in the DEFAULT_SOURCE_ENCODING encoding.  We
!       // return the equivalent character in the m_encoding.
        cbl_char_t retval;
        std::unordered_map<cbl_char_t, cbl_char_t>::const_iterator it =
!         m_map_of_encodings.find(ch);
! 
        if( it != m_map_of_encodings.end() )
          {
          retval = it->second;
*************** class charmap_t
*** 574,590 ****
                                          &ch,
                                          1,
                                          &outlength);
          switch(stride())
            {
            case 1:
!             retval = *reinterpret_cast<uint8_t *>(mapped);
              break;
            case 2:
!             retval = *reinterpret_cast<uint16_t *>(mapped);
              break;
            case 4:
!             retval = *reinterpret_cast<uint32_t *>(mapped);
              break;
            }
          m_map_of_encodings[ch] = retval;
          }
--- 701,739 ----
                                          &ch,
                                          1,
                                          &outlength);
+         size_t data_length = outlength;
+         const unsigned char *p = charmap_as_unsigned_chars(mapped);
+         if( m_has_bom && data_length >= 2 * stride() )
+           {
+           p = skip_bom(p, data_length);
+           data_length -= stride();
+           }
+ 
          switch(stride())
            {
            case 1:
!             {
!             uint8_t c;
!             memcpy(&c, mapped, m_stride);
!             retval = c;
              break;
+             }
+ 
            case 2:
!             {
!             uint16_t c;
!             memcpy(&c, mapped, m_stride);
!             retval = c;
              break;
+             }
+ 
            case 4:
!             {
!             uint32_t c;
!             memcpy(&c, mapped, m_stride);
!             retval = c;
              break;
+             }
            }
          m_map_of_encodings[ch] = retval;
          }
*************** class charmap_t
*** 610,616 ****
      cbl_char_t high_value_character()
        {
        cbl_char_t retval = 0;
!       if( __gg__high_value_character == DEFAULT_HIGH_VALUE_8 )
          {
          switch(m_stride)
            {
--- 759,765 ----
      cbl_char_t high_value_character()
        {
        cbl_char_t retval = 0;
!       if( false && __gg__high_value_character == DEFAULT_HIGH_VALUE_8 )
          {
          switch(m_stride)
            {
*************** class charmap_t
*** 690,715 ****
      switch(m_numeric_sign_type)
        {
        case sign_type_ascii:
          if( is_negative )
            {
!           digit |= NUMERIC_DISPLAY_SIGN_BIT_ASCII;
            }
          else
            {
!           digit &= ~NUMERIC_DISPLAY_SIGN_BIT_ASCII;
            }
          break;
  
        case sign_type_ebcdic:
          if( is_negative )
            {
!           digit &= ~NUMERIC_DISPLAY_SIGN_BIT_EBCDIC;
            }
          else
            {
!           digit |= NUMERIC_DISPLAY_SIGN_BIT_EBCDIC;
            }
          break;
        }
      return digit;
      }
--- 839,874 ----
      switch(m_numeric_sign_type)
        {
        case sign_type_ascii:
+         {
+         uint32_t the_bit = m_is_big_endian
+                          ? NUMERIC_DISPLAY_SIGN_BIT_ASCII << (m_stride-1) * 8
+                          : NUMERIC_DISPLAY_SIGN_BIT_ASCII;
          if( is_negative )
            {
!           digit |= the_bit;
            }
          else
            {
!           digit &= ~the_bit;
            }
          break;
+         }
  
        case sign_type_ebcdic:
+         {
+         uint32_t the_bit = m_is_big_endian
+                          ? NUMERIC_DISPLAY_SIGN_BIT_EBCDIC << (m_stride-1) * 8
+                          : NUMERIC_DISPLAY_SIGN_BIT_EBCDIC;
          if( is_negative )
            {
!           digit &= ~the_bit;
            }
          else
            {
!           digit |= the_bit;
            }
          break;
+         }
        }
      return digit;
      }
*************** class charmap_t
*** 729,758 ****
    void
    memset(void *dest_, cbl_char_t ch, size_t bytelength)
      {
!     uint8_t *dest = static_cast<uint8_t *>(dest_);
      switch(m_stride)
        {
        case 1:
          {
          if( (ch & 0xFFFFFF00) == 0x00000000 )
            {
!           // This is the normal case of filling a buffer with a single byte
!           ::memset(dest, ch & 0xff, bytelength);
            }
          else
            {
            // We are being asked to fill a byte-wide buffer with a multi-byte
            // character.
!           uint8_t byte3 = ch >> 24;
!           uint8_t byte2 = ch >> 16;
!           uint8_t byte1 = ch >>  8;
!           uint8_t byte0 = ch;
!           size_t fill;
!           size_t i=0;
            if( byte3 )
              {
!             fill = bytelength / 4;
!             while( i<fill )
                {
                dest[i++] = byte0;
                dest[i++] = byte1;
--- 888,915 ----
    void
    memset(void *dest_, cbl_char_t ch, size_t bytelength)
      {
!     unsigned char *dest = static_cast<unsigned char *>(dest_);
      switch(m_stride)
        {
        case 1:
          {
          if( (ch & 0xFFFFFF00) == 0x00000000 )
            {
!           // This is the normal case of filling a buffer with a single byte.
!           std::memset(dest, ch & 0xff, bytelength);
            }
          else
            {
            // We are being asked to fill a byte-wide buffer with a multi-byte
            // character.
!           unsigned char byte3 = static_cast<unsigned char>(ch >> 24);
!           unsigned char byte2 = static_cast<unsigned char>(ch >> 16);
!           unsigned char byte1 = static_cast<unsigned char>(ch >>  8);
!           unsigned char byte0 = static_cast<unsigned char>(ch);
!           size_t i = 0;
            if( byte3 )
              {
!             while( i + 4 <= bytelength )
                {
                dest[i++] = byte0;
                dest[i++] = byte1;
*************** class charmap_t
*** 762,769 ****
              }
            else if( byte2 )
              {
!             fill = bytelength / 3;
!             while( i<fill )
                {
                dest[i++] = byte0;
                dest[i++] = byte1;
--- 919,925 ----
              }
            else if( byte2 )
              {
!             while( i + 3 <= bytelength )
                {
                dest[i++] = byte0;
                dest[i++] = byte1;
*************** class charmap_t
*** 772,779 ****
              }
            else
              {
!             fill = bytelength / 2;
!             while( i<fill )
                {
                dest[i++] = byte0;
                dest[i++] = byte1;
--- 928,934 ----
              }
            else
              {
!             while( i + 2 <= bytelength )
                {
                dest[i++] = byte0;
                dest[i++] = byte1;
*************** class charmap_t
*** 781,787 ****
              }
            while( i < bytelength )
              {
!             dest[i++] = mapped_character(ascii_space);
              }
            }
          break;
--- 936,943 ----
              }
            while( i < bytelength )
              {
!             dest[i++] = static_cast<unsigned char>(
!                                           mapped_character(ascii_space));
              }
            }
          break;
*************** class charmap_t
*** 789,892 ****
  
        case 2:
          {
!         assert( !(bytelength&1) );
          // We know the target has an even number of bytes available.  We also
          // know that each codepoint is usually one, but sometimes two, pairs
!         // of bytes
!         uint16_t top_half    = ch>>16;
!         uint16_t bottom_half = ch;
!         size_t fill = bytelength;
          size_t i = 0;
!         uint16_t *p = PTRCAST(uint16_t, dest);
!         while( i<fill )
            {
!           p[i/2] = bottom_half;
!           i += 2;
!           if( i>= fill )
              {
!             break;
              }
!           if( top_half )
              {
!             p[i/2] = bottom_half;
              i += 2;
              }
            }
-         if( i < bytelength )
-           {
-           // We were trying to put two-pair values into the destination, but
-           // there were an odd number of pairs available.
-           p[i] = mapped_character(ascii_space);
-           i += 2; // cppcheck-suppress unreadVariable
-           }
          break;
          }
  
        case 4:
          {
!         assert( !(bytelength&3) );
!         // We know the target has multiple of four bytes available.
!         uint32_t *p = PTRCAST(uint32_t, dest);
!         size_t i = 0;
!         while( i<bytelength )
            {
!           p[i/4] = ch;
!           i += 4;
            }
          break;
          }
        }
      }
  
!   void putch(cbl_char_t ch, void *base_, size_t location)
      {
      // This routine puts a character at a byte location.
!     uint8_t *base = static_cast<uint8_t *>(base_);
!     switch(m_stride)
!       {
!       case 1:
!         *reinterpret_cast<uint8_t*>(base+location) = ch;
!         break;            
!       case 2:             
!         *reinterpret_cast<uint16_t*>(base+location) = ch;
!         break;            
!       default:            
!         *reinterpret_cast<uint32_t*>(base+location) = ch;
!         break;
!       }
      }
  
!   void putch(cbl_char_t ch, void *base_, size_t *location)
      {
!     // This routine puts a character at a location, and updates the location
      this->putch(ch, base_, *location);
      *location += m_stride;
      }
  
!   cbl_char_t getch(const void *base_, size_t location) const
      {
!     // This routine gets a character at a location
!     cbl_char_t retval;
!     const uint8_t *base = static_cast<const uint8_t *>(base_);
!     switch(m_stride)
        {
!       case 1:
!         retval = *reinterpret_cast<const uint8_t*>(base+location);
!         break;
!       case 2:
!         retval = *reinterpret_cast<const uint16_t*>(base+location);
!         break;
!       default:
!         retval = *reinterpret_cast<const uint32_t*>(base+location);
!         break;
        }
      return retval;
      }
  
!   cbl_char_t getch(const void *base_, size_t *location) const
      {
!     // This routine gets a character at a location, and updates the location
!     cbl_char_t retval = this->getch(base_, *location);
      *location += m_stride;
      return retval;
      }
--- 945,1063 ----
  
        case 2:
          {
!         assert( !(bytelength & 1) );
          // We know the target has an even number of bytes available.  We also
          // know that each codepoint is usually one, but sometimes two, pairs
!         // of bytes.
!         uint16_t top_half = static_cast<uint16_t>(ch >> 16);
!         uint16_t bottom_half = static_cast<uint16_t>(ch);
          size_t i = 0;
!         while( i < bytelength )
            {
!           if( top_half )
              {
!             if( i + 4 <= bytelength )
!               {
!               store_uint16(dest + i, top_half);
!               i += 2;
!               store_uint16(dest + i, bottom_half);
!               i += 2;
!               }
!             else
!               {
!               store_uint16(dest + i,
!                            static_cast<uint16_t>(
!                                            mapped_character(ascii_space)));
!               i += 2;
!               }
              }
!           else
              {
!             store_uint16(dest + i, bottom_half);
              i += 2;
              }
            }
          break;
          }
  
        case 4:
          {
!         assert( !(bytelength & 3) );
!         // We know the target has a multiple of four bytes available.
!         for( size_t i = 0; i < bytelength; i += 4 )
            {
!           store_uint32(dest + i, ch);
            }
          break;
          }
        }
      }
  
!   void
!   putch(cbl_char_t ch, void *base_, size_t location)
      {
      // This routine puts a character at a byte location.
!     put_encoded_char(ch, base_, location);
      }
  
!   void
!   putch(cbl_char_t ch, void *base_, size_t *location)
      {
!     // This routine puts a character at a location, and updates the location.
      this->putch(ch, base_, *location);
      *location += m_stride;
      }
  
!   cbl_char_t
!   getch(const void *base_, size_t location) const
      {
!     // This routine gets the encoded character at a byte location.
!     return get_encoded_char(base_, location);
!     }
! 
!   cbl_char_t
!   getch(const void *base_, size_t *location) const
!     {
!     // This routine gets a character at a location, and updates the location.
!     cbl_char_t retval = this->getch(base_, *location);
!     *location += m_stride;
!     return retval;
!     }
! 
!   cbl_char_t
!   getch_native(const void *base_, size_t location) const
!     {
!     // This routine handles the situation where, for example, a character is
!     // picked up, and the program needs to know if is in the range of
!     // '0' through '9'.  So, if the charset is big-endian, but this is a
!     // little-endian machine, then the value needs to be byte-flipped.
!     cbl_char_t retval =  get_encoded_char(base_, location);
! 
!     // retval is the encoded value.
!     bool target_big_endian = cobol_target_big_endian() ; // cppcheck-suppress knownConditionTrueFalse
!     if(    ( m_is_big_endian && !target_big_endian)      // cppcheck-suppress knownConditionTrueFalse
!         || (!m_is_big_endian &&  target_big_endian) )    // cppcheck-suppress knownConditionTrueFalse
        {
!       // Flip the encoded value to match the machine's endianness
!       if( m_stride == 4 )
!         {
!         retval = __builtin_bswap32(retval);
!         }
!       else
!         {
!         uint16_t v = retval;
!         v = __builtin_bswap16(v);
!         retval = v;
!         }
        }
      return retval;
      }
  
!   cbl_char_t
!   getch_native(const void *base_, size_t *location) const
      {
!     // This routine gets a character at a location, and updates the location.
!     cbl_char_t retval = this->getch_native(base_, *location);
      *location += m_stride;
      return retval;
      }
*************** class charmap_t
*** 908,1000 ****
        retval *= 10;
        retval += ch & 0x0F;
        }
!     *end = in + index-m_stride ;
      return retval;
      }
  
-     template <typename T>
      size_t
!     Strlen( T *input, ssize_t limit = SSIZE_MAX ) {
!       size_t i;
!       for( i = 0; i < (limit / sizeof(T)) && input[i] != 0; i++ )
!         ;
!       return i;
!     }
!     size_t strlen2( const void *converted, ssize_t limit = SSIZE_MAX ) {
!       switch(m_stride) {
!       case 1:
!         return Strlen( reinterpret_cast<const char*>(converted), limit );
!       case 2:
!         return Strlen( reinterpret_cast<const uint16_t*>(converted), limit );
!       case 4:
!         return Strlen( reinterpret_cast<const uint16_t*>(converted), limit );
        }
-       //// gcc_unreachable();
-       return -1; // Mollify cppcheck.
-     }
  
    size_t
!   strlen( const void *converted,
!           ssize_t limit = SSIZE_MAX)
      {
!     size_t retval;
  
!     union
        {
!       const uint8_t  *p8 ;
!       const uint16_t *p16;
!       const uint32_t *p32;
!       } ;
!     const uint8_t *p_start = reinterpret_cast<const uint8_t *>(converted);
!     p8 = p_start;
!     switch(m_stride)
        {
!       case 1:
!         {
!         // Loop until the pointer is past the limit, or until we hit
!         // a character that is all zeroes
!         while(*p8)
!           {
!           if( p8 - p_start > limit )
!             {
!             break;
!             }
!           p8 += 1;
!           }
!         break;
!         }
!       case 2:
          {
-         // Loop until the pointer is past the limit, or until we hit
-         // a character that is all zeroes
-         while(*p16)
-           {
-           if( p8 - p_start > limit )
-             {
-             break;
-             }
-           p8 += 2;
-           }
-         break;
-         }
-       case 4:
-         {
-         // Loop until the pointer is past the limit, or until we hit
-         // a character that is all zeroes
-         while(*p32)
-           {
-           if( p8 - p_start > limit )
-             {
-             break;
-             }
-           p8 += 4;
-           }
          break;
          }
        }
!     retval = p8 - p_start;
!     return retval;
      }
    };
  
  #endif
--- 1079,1142 ----
        retval *= 10;
        retval += ch & 0x0F;
        }
!     *end = in + index - m_stride ;
      return retval;
      }
  
      size_t
!     strlen2(const void *converted, ssize_t limit = SSIZE_MAX)
!       {
!       return strlen(converted, limit) / m_stride;
        }
  
    size_t
!   strlen(const void *converted, ssize_t limit = SSIZE_MAX) const
      {
!     const unsigned char *p_start =
!       static_cast<const unsigned char *>(converted);
!     size_t limit_bytes;
  
!     if( limit < 0 )
        {
!       limit_bytes = SIZE_MAX;
!       }
!     else
        {
!       limit_bytes = static_cast<size_t>(limit);
!       }
! 
!     size_t offset = 0;
!     while( offset + m_stride <= limit_bytes )
!       {
!       if( getch(p_start, offset) == 0 )
          {
          break;
          }
+       offset += m_stride;
        }
! 
!     return offset;
!     }
! 
!   void
!   get_byte_string(char *ach, char ch)
!     {
!     /* This routine takes a single ASCII character and converts it to the
!        m_stride bytes of the m_encoding, and copies those bytes to the ach
!        array, which had best be defined as ach[4] for generality.  The idea
!        here is to create a byte stream that can be, for example, copied to
!        a file without going crazy about the endianness of the target machine
!        and the endianness of the encoding. */
!     size_t nbytes;
!     const char *converted = __gg__iconverter(DEFAULT_SOURCE_ENCODING,
!                                              m_encoding,
!                                              &ch,
!                                              1,
!                                              &nbytes);
!     memcpy(ach, converted, nbytes);
      }
    };
  
+ char char_from_figconst(cbl_figconst_t figconst);
+ 
  #endif
diff -Nrcpad gcc-17-20260705/libgcobol/cobol-endian.h gcc-17-20260712/libgcobol/cobol-endian.h
*** gcc-17-20260705/libgcobol/cobol-endian.h	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/libgcobol/cobol-endian.h	Sun Jul 12 22:32:18 2026
***************
*** 0 ****
--- 1,89 ----
+ /*
+  * Copyright (c) 2021-2026 Symas Corporation
+  *
+  * Redistribution and use in source and binary forms, with or without
+  * modification, are permitted provided that the following conditions are
+  * met:
+  *
+  * * Redistributions of source code must retain the above copyright
+  *   notice, this list of conditions and the following disclaimer.
+  * * Redistributions in binary form must reproduce the above
+  *   copyright notice, this list of conditions and the following disclaimer
+  *   in the documentation and/or other materials provided with the
+  *   distribution.
+  * * Neither the name of the Symas Corporation nor the names of its
+  *   contributors may be used to endorse or promote products derived from
+  *   this software without specific prior written permission.
+  *
+  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+  */
+ 
+ #ifndef COBOL_ENDIAN_H
+ #define COBOL_ENDIAN_H
+ 
+ /*
+    COBOL_TARGET_BIG_ENDIAN answers:
+      "Should this code treat COBOL target storage as big-endian?"
+ 
+    In the compiler front end, that means the GCC target.
+    In libgcobol, that means the actual runtime machine/library build.
+ */
+ 
+ #if defined(IN_GCC_FRONTEND)
+ 
+ /* Front-end / compiler build.  This is compiler run time,
+    but target endianness. */
+ 
+ static inline bool
+ cobol_target_big_endian()
+   {
+   return BYTES_BIG_ENDIAN;
+   }
+ 
+ #else
+ 
+ /* Runtime library build.  This is target-program run time,
+    so it must be decided from the runtime library's build config. */
+ 
+ #if defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
+ # define COBOL_BIG_ENDIAN 1
+ # define COBOL_LITTLE_ENDIAN 0
+ #elif defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+ # define COBOL_BIG_ENDIAN 0
+ # define COBOL_LITTLE_ENDIAN 1
+ 
+ #elif defined(__BIG_ENDIAN__) || defined(_BIG_ENDIAN)
+ # define COBOL_BIG_ENDIAN 1
+ # define COBOL_LITTLE_ENDIAN 0
+ #elif defined(__LITTLE_ENDIAN__) || defined(_LITTLE_ENDIAN)
+ # define COBOL_BIG_ENDIAN 0
+ # define COBOL_LITTLE_ENDIAN 1
+ 
+ #endif
+ 
+ static inline bool
+ cobol_target_big_endian()
+   {
+   return COBOL_BIG_ENDIAN != 0;
+   }
+ 
+ static inline bool
+ cobol_target_little_endian()
+   {
+   return COBOL_BIG_ENDIAN == 0;
+   }
+ 
+ 
+ #endif
+ 
+ #endif /* COBOL_ENDIAN_H */
\ No newline at end of file
diff -Nrcpad gcc-17-20260705/libgcobol/gfileio.cc gcc-17-20260712/libgcobol/gfileio.cc
*** gcc-17-20260705/libgcobol/gfileio.cc	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/libgcobol/gfileio.cc	Sun Jul 12 22:32:18 2026
***************
*** 50,55 ****
--- 50,56 ----
  #include "io.h"
  #include "common-defs.h"
  #include "gcobolio.h"
+ #include "cobol-endian.h"
  #include "libgcobol.h"
  #include "gfileio.h"
  #include "charmaps.h"
*************** relative_file_delete(cblc_file_t *file,
*** 701,706 ****
--- 702,708 ----
    file->io_status = FsErrno;
  
    cbl_char_t record_marker;
+   uint8_t record_marker_ch;
  
    unsigned char *stash = static_cast<unsigned char *>(malloc(file->default_record->capacity));
    massert(stash);
*************** relative_file_delete(cblc_file_t *file,
*** 746,753 ****
      record_marker = 0x00;
      errno = 0;
      file->errnum = 0;
      if( pwrite( rfp.fd,
!                 &record_marker,
                  1,
                  file->prior_read_location
                        + rfp.record_size - 1 ) == -1 )
--- 748,756 ----
      record_marker = 0x00;
      errno = 0;
      file->errnum = 0;
+     record_marker_ch = record_marker;
      if( pwrite( rfp.fd,
!                 &record_marker_ch,
                  1,
                  file->prior_read_location
                        + rfp.record_size - 1 ) == -1 )
*************** relative_file_delete(cblc_file_t *file,
*** 765,782 ****
  
      errno = 0;
      file->errnum = 0;
!     record_marker = 0;
!     ssize_t presult = pread(rfp.fd, &record_marker, 1, rfp.flag_position);
      if( presult < 0 )
        {
        handle_errno(file, __func__, "pread() error");
        goto done;
        }
! 
!     charmap_t *charmap = __gg__get_charmap(file->encoding);
! 
      if(    presult == 0
!         || record_marker != charmap->mapped_character(ascii_newline) )
        {
        // There isn't a record there for us to delete, which is an error
        file->io_status = FsNotFound;   // "23"
--- 768,786 ----
  
      errno = 0;
      file->errnum = 0;
!     ssize_t presult = pread(rfp.fd, &record_marker_ch, 1, rfp.flag_position);
      if( presult < 0 )
        {
+       record_marker = record_marker_ch;
        handle_errno(file, __func__, "pread() error");
        goto done;
        }
!     record_marker = record_marker_ch;
!     const charmap_t *charmap = __gg__get_charmap(file->encoding);
!     uint8_t newline =
!                    charmap->is_like_ebcdic() ? ebcdic_newline : ascii_newline;
      if(    presult == 0
!         || record_marker_ch != newline )
        {
        // There isn't a record there for us to delete, which is an error
        file->io_status = FsNotFound;   // "23"
*************** relative_file_delete(cblc_file_t *file,
*** 787,793 ****
      record_marker = 0x00;
      errno = 0;
      file->errnum = 0;
!     if( pwrite(rfp.fd, &record_marker, 1, rfp.flag_position) == -1 )
        {
        file->errnum = errno;
        handle_ferror(file, __func__, "pwrite() error");
--- 791,798 ----
      record_marker = 0x00;
      errno = 0;
      file->errnum = 0;
!     record_marker_ch = record_marker;
!     if( pwrite(rfp.fd, &record_marker_ch, 1, rfp.flag_position) == -1 )
        {
        file->errnum = errno;
        handle_ferror(file, __func__, "pwrite() error");
*************** relative_file_start(cblc_file_t *file,
*** 1549,1557 ****
    while(      rfp.record_position >= 0
            &&  rfp.record_position+total_record_length <= rfp.file_size )
      {
!     cbl_char_t record_marker;
!     record_marker = 0;
!     ssize_t presult = pread(rfp.fd, &record_marker, 1, rfp.flag_position);
      if( presult < 0 )
        {
        handle_errno(file, __func__, "pread() error");
--- 1554,1561 ----
    while(      rfp.record_position >= 0
            &&  rfp.record_position+total_record_length <= rfp.file_size )
      {
!     uint8_t record_marker_ch;
!     ssize_t presult = pread(rfp.fd, &record_marker_ch, 1, rfp.flag_position);
      if( presult < 0 )
        {
        handle_errno(file, __func__, "pread() error");
*************** relative_file_start(cblc_file_t *file,
*** 1562,1569 ****
        // end of file
        goto done;
        }
!     charmap_t *charmap = __gg__get_charmap(file->encoding);
!     if( record_marker == charmap->mapped_character(ascii_newline) )
        {
        // The record is a valid one
        fpos = rfp.record_position;
--- 1566,1575 ----
        // end of file
        goto done;
        }
!     const charmap_t *charmap = __gg__get_charmap(file->encoding);
!     uint8_t newline =
!                    charmap->is_like_ebcdic() ? ebcdic_newline : ascii_newline;
!     if( record_marker_ch == newline )
        {
        // The record is a valid one
        fpos = rfp.record_position;
*************** relative_file_rewrite( cblc_file_t *file
*** 1998,2004 ****
      {
      // This is like a write, except the place we are putting
      // it has to be occupied instead of empty.
-     cbl_char_t record_marker;
      if( relative_file_parameters_get(   rfp,
                                          rfm_microfocus_e,
                                          file,
--- 2004,2009 ----
*************** relative_file_rewrite( cblc_file_t *file
*** 2009,2024 ****
        goto done;
        }
  
!     record_marker = 0;
!     ssize_t presult = pread(rfp.fd, &record_marker, 1, rfp.flag_position);
      if( presult < 0 )
        {
        handle_errno(file, __func__, "pread() error");
        goto done;
        }
  
!     charmap_t *charmap = __gg__get_charmap(file->encoding);
!     if( presult == 0 || record_marker != charmap->mapped_character(ascii_newline) )
        {
        // The record is not specified:
        file->io_status = FsNotFound;   // "23"
--- 2014,2031 ----
        goto done;
        }
  
!     uint8_t record_marker_ch;
!     ssize_t presult = pread(rfp.fd, &record_marker_ch, 1, rfp.flag_position);
      if( presult < 0 )
        {
        handle_errno(file, __func__, "pread() error");
        goto done;
        }
  
!     const charmap_t *charmap = __gg__get_charmap(file->encoding);
!     uint8_t newline =
!                    charmap->is_like_ebcdic() ? ebcdic_newline : ascii_newline;
!     if( presult == 0 || record_marker_ch != newline )
        {
        // The record is not specified:
        file->io_status = FsNotFound;   // "23"
*************** relative_file_write(cblc_file_t    *file
*** 2511,2525 ****
      return relative_file_write_varying(file, location, length, is_random);
      }
  
    file->errnum = 0;
    file->io_status = FsErrno;
  
    long necessary_file_size;
    charmap_t *charmap = __gg__get_charmap(file->encoding);
    const unsigned char achPostamble[] =
      {
!     (unsigned char)charmap->mapped_character(ascii_cr),
!     (unsigned char)charmap->mapped_character(ascii_newline)
      };
  
    relative_file_parameters rfp;
--- 2518,2545 ----
      return relative_file_write_varying(file, location, length, is_random);
      }
  
+   // relative files have fixed record sizes, which end with a hardcoded ASCII
+   // CR-LF.
+ 
+ 
    file->errnum = 0;
    file->io_status = FsErrno;
  
    long necessary_file_size;
    charmap_t *charmap = __gg__get_charmap(file->encoding);
+   char ach_space[4];
+   charmap->get_byte_string(ach_space, ascii_space);
+   int stride = charmap->stride();
+ 
+   uint8_t carriage_return =
+                    charmap->is_like_ebcdic() ? ebcdic_return : ascii_return;
+ 
+   unsigned char newline =
+                    charmap->is_like_ebcdic() ? ebcdic_newline : ascii_newline;
    const unsigned char achPostamble[] =
      {
!     carriage_return,
!     newline
      };
  
    relative_file_parameters rfp;
*************** relative_file_write(cblc_file_t    *file
*** 2560,2575 ****
          }
        }
      // Let's check to make sure the slot for this record is currently available:
!     cbl_char_t record_marker;
!     record_marker = 0;
!     ssize_t presult = pread(rfp.fd, &record_marker, 1, rfp.flag_position);
      if( presult < 0 )
        {
        handle_errno(file, __func__, "pread() error");
        goto done;
        }
  
!     if( presult == 1 && record_marker == charmap->mapped_character(ascii_newline) )
        {
        // The slot has something in it already:
        file->io_status = FsDupWrite;   // "22"
--- 2580,2594 ----
          }
        }
      // Let's check to make sure the slot for this record is currently available:
!     uint8_t record_marker_ch;
!     ssize_t presult = pread(rfp.fd, &record_marker_ch, 1, rfp.flag_position);
      if( presult < 0 )
        {
        handle_errno(file, __func__, "pread() error");
        goto done;
        }
  
!     if( presult == 1 && record_marker_ch == newline )
        {
        // The slot has something in it already:
        file->io_status = FsDupWrite;   // "22"
*************** relative_file_write(cblc_file_t    *file
*** 2609,2617 ****
    if( file->record_area_max > length )
      {
      size_t padding = file->record_area_max - length;
      while(padding--)
        {
!       fputc(charmap->mapped_character(ascii_space), file->file_pointer);
        }
      }
  
--- 2628,2644 ----
    if( file->record_area_max > length )
      {
      size_t padding = file->record_area_max - length;
+     while(padding)
+       {
+       fwrite(ach_space, stride, 1, file->file_pointer);
+       padding -= stride;
+       }
      while(padding--)
        {
!       // This probably shouldn't happen.  It means that the file record area
!       // size wasn't a multiple of the stride.  <shrug>  That's the COBOL
!       // programmer's problem.
!       fputc(0, file->file_pointer);
        }
      }
  
*************** done:
*** 2639,2644 ****
--- 2666,2683 ----
    }
  
  static void
+ write_a_char(cblc_file_t *file, cbl_char_t ch)
+   {
+   size_t nbytes;
+   const char *converted = __gg__iconverter(DEFAULT_SOURCE_ENCODING,
+                                            file->encoding,
+                                            &ch,
+                                            1,
+                                            &nbytes);
+   fwrite(converted, nbytes, 1, file->file_pointer);
+   }
+ 
+ static void
  sequential_file_write(cblc_file_t    *file,
                  const unsigned char  *location,
                        size_t          length,
*************** sequential_file_write(cblc_file_t    *fi
*** 2649,2656 ****
    charmap_t *charmap = __gg__get_charmap(file->encoding);
    int stride = charmap->stride();
  
!   // ch is the vertical control character
!   cbl_char_t ch = '\0';
    size_t bytes_to_write;
  
    int lcount;
--- 2688,2695 ----
    charmap_t *charmap = __gg__get_charmap(file->encoding);
    int stride = charmap->stride();
  
!   // chvert is the vertical control character
!   uint8_t chvert = '\0';
    size_t bytes_to_write;
  
    int lcount;
*************** sequential_file_write(cblc_file_t    *fi
*** 2658,2664 ****
    if( lines < -1 )
      {
      // We are using -666 for a form feed
!     ch = charmap->mapped_character(ascii_ff);  // Form feed
      lcount = 1;
      }
    else if( lines == -1 )
--- 2697,2703 ----
    if( lines < -1 )
      {
      // We are using -666 for a form feed
!     chvert = ascii_ff;
      lcount = 1;
      }
    else if( lines == -1 )
*************** sequential_file_write(cblc_file_t    *fi
*** 2669,2680 ****
    else if( lines == 0 )
      {
      lcount = 1;
!     ch = charmap->mapped_character(ascii_return);
      }
    else /* if( lines > 0 ) */
      {
      lcount = lines;
!     ch = charmap->mapped_character(ascii_newline);
      }
  
    // By default, we write out the number of characters in the record area
--- 2708,2719 ----
    else if( lines == 0 )
      {
      lcount = 1;
!     chvert = ascii_newline;
      }
    else /* if( lines > 0 ) */
      {
      lcount = lines;
!     chvert = ascii_newline;
      }
  
    // By default, we write out the number of characters in the record area
*************** sequential_file_write(cblc_file_t    *fi
*** 2700,2714 ****
        }
      }
  
!   if( after && file->org == file_line_sequential_e
!                            && ch == charmap->mapped_character(ascii_newline) )
      {
      // In general, we terminate every line with a newline.  Because this
      // line is supposed to start with a newline, we decrement the line
      // counter by one if we had already sent one.
!     if( lcount &&
!             (   file->recent_char == charmap->mapped_character(ascii_newline)
!                 || file->recent_char == charmap->mapped_character(ascii_ff)) )
        {
        lcount -= 1;
        }
--- 2739,2754 ----
        }
      }
  
!   if(    after
!       && file->org == file_line_sequential_e
!       && chvert == ascii_newline )
      {
      // In general, we terminate every line with a newline.  Because this
      // line is supposed to start with a newline, we decrement the line
      // counter by one if we had already sent one.
!     if(    lcount
!         && (   file->recent_char == charmap->mapped_character(ascii_newline)
!             || file->recent_char == charmap->mapped_character(ascii_ff)) )
        {
        lcount -= 1;
        }
*************** sequential_file_write(cblc_file_t    *fi
*** 2716,2735 ****
  
    if( after )
      {
      while(lcount--)
        {
!       fwrite( &ch,
!               stride,
!               1,
!               file->file_pointer);
!       if( handle_ferror(file, __func__, "fputc() error [3]") )
          {
          goto done;
          }
!       file->recent_char = ch;
        }
      // That might have been a formfeed; switch back to newline:
!     ch = charmap->mapped_character(ascii_newline);
      }
  
    switch(file->org)
--- 2756,2775 ----
  
    if( after )
      {
+     // We send out any vertical control character here, because the content
+     // comes AFTER the vertical control
+ 
      while(lcount--)
        {
!       write_a_char(file, chvert);
!       if( handle_ferror(file, __func__, "fwrite() error") )
          {
          goto done;
          }
!       file->recent_char = charmap->mapped_character(chvert);
        }
      // That might have been a formfeed; switch back to newline:
!     chvert = ascii_newline;
      }
  
    switch(file->org)
*************** sequential_file_write(cblc_file_t    *fi
*** 2809,2823 ****
      {
      // Special case:  when AFTER NON-ZERO lines, we stick a newline on the
      // end of this record:
!     fwrite( &ch,
!             stride,
!             1,
!             file->file_pointer);
!     if( handle_ferror(file, __func__, "fputc() error [4]") )
        {
        goto done;
        }
!     file->recent_char = charmap->mapped_character(ascii_newline);
      }
  
    if( !after  )
--- 2849,2860 ----
      {
      // Special case:  when AFTER NON-ZERO lines, we stick a newline on the
      // end of this record:
!     write_a_char(file, chvert);
!     if( handle_ferror(file, __func__, "fwrite() error [4]") )
        {
        goto done;
        }
!     file->recent_char = charmap->mapped_character(chvert);
      }
  
    if( !after  )
*************** sequential_file_write(cblc_file_t    *fi
*** 2825,2839 ****
      // We did the output BEFORE, so now it's time to send some newlines
      while(lcount--)
        {
!       fwrite( &ch,
!               stride,
!               1,
!               file->file_pointer);
!       if( handle_ferror(file, __func__, "fputc() error [5]") )
          {
          goto done;
          }
!       file->recent_char = ch;
        }
      }
  
--- 2862,2873 ----
      // We did the output BEFORE, so now it's time to send some newlines
      while(lcount--)
        {
!       write_a_char(file, chvert);
!       if( handle_ferror(file, __func__, "fwrite() error [5]") )
          {
          goto done;
          }
!       file->recent_char = charmap->mapped_character(chvert);
        }
      }
  
*************** relative_file_read( cblc_file_t *file,
*** 3810,3815 ****
--- 3844,3853 ----
      return relative_file_read_varying(file, where);
      }
  
+   const charmap_t *charmap = __gg__get_charmap(file->encoding);
+   unsigned char newline_ch =
+                    charmap->is_like_ebcdic() ? ebcdic_newline : ascii_newline;
+ 
    bool is_random = where > 0;
  
    file->errnum = 0;
*************** relative_file_read( cblc_file_t *file,
*** 3877,3890 ****
        file->prior_read_location = -1;
        goto done;
        }
!     cbl_char_t record_marker;
!     record_marker = 0;
!     if( pread(rfp.fd, &record_marker, 1, rfp.flag_position) <= 0)
        {
        goto done;
        }
!     charmap_t *charmap = __gg__get_charmap(file->encoding);
!     if(record_marker == charmap->mapped_character(ascii_newline) )
        {
        // We have a good record to read:
  
--- 3915,3926 ----
        file->prior_read_location = -1;
        goto done;
        }
!     uint8_t record_marker_ch;
!     if( pread(rfp.fd, &record_marker_ch, 1, rfp.flag_position) <= 0)
        {
        goto done;
        }
!     if(record_marker_ch == newline_ch )
        {
        // We have a good record to read:
  
diff -Nrcpad gcc-17-20260705/libgcobol/gmath.cc gcc-17-20260712/libgcobol/gmath.cc
*** gcc-17-20260705/libgcobol/gmath.cc	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/libgcobol/gmath.cc	Sun Jul 12 22:32:18 2026
*************** __gg__pow(  cbl_arith_format_t,
*** 267,274 ****
              int          *compute_error
              )
    {
!   GCOB_FP128 avalue = __gg__float128_from_qualified_field(A[0].field, A[0].offset, A[0].size);
!   GCOB_FP128 bvalue = __gg__float128_from_qualified_field(B[0].field, B[0].offset, B[0].size);
    GCOB_FP128 tgt_value;
  
    if( avalue == 0 && bvalue == 0 )
--- 267,276 ----
              int          *compute_error
              )
    {
!   GCOB_FP128 avalue =
!       __gg__float128_from_qualified_field(A[0].field, A[0].offset, A[0].size);
!   GCOB_FP128 bvalue =
!       __gg__float128_from_qualified_field(B[0].field, B[0].offset, B[0].size);
    GCOB_FP128 tgt_value;
  
    if( avalue == 0 && bvalue == 0 )
*************** __gg__pow(  cbl_arith_format_t,
*** 287,293 ****
      errno = 0;
      feclearexcept(FE_ALL_EXCEPT);
      tgt_value = FP128_FUNC(pow)(avalue, bvalue);
!     if( errno || fetestexcept(FE_INVALID | FE_DIVBYZERO | FE_OVERFLOW | FE_UNDERFLOW) )
        {
        // One of a large number of errors took place. See math_error(7) and
        // pow(3).  Let's just use this last error as a grab-bag; I didn't
--- 289,296 ----
      errno = 0;
      feclearexcept(FE_ALL_EXCEPT);
      tgt_value = FP128_FUNC(pow)(avalue, bvalue);
!     if(  errno
!       || fetestexcept(FE_INVALID | FE_DIVBYZERO | FE_OVERFLOW | FE_UNDERFLOW) )
        {
        // One of a large number of errors took place. See math_error(7) and
        // pow(3).  Let's just use this last error as a grab-bag; I didn't
*************** __gg__process_compute_error(int compute_
*** 344,367 ****
    }
  
  typedef unsigned __int128 uint128;
  typedef struct int256
    {
!   union
!     {
!     unsigned char  data[32];
!     uint64_t       i64 [4];
!     uint128        i128[2];
!     };
    }int256;
  
! typedef struct int128
    {
!   union
!     {
!     uint64_t       i64 [2];
!     uint128        i128;
!     };
!   }int128;
  
  
  static int
--- 347,409 ----
    }
  
  typedef unsigned __int128 uint128;
+ 
+ /*
+  * int256 is deliberately represented as logical 64-bit limbs, not as a
+  * byte-level overlay.  i64[0] is always the least-significant limb and i64[3]
+  * is always the most-significant limb, independent of the host byte order.
+  */
  typedef struct int256
    {
!   uint64_t i64[4];
    }int256;
  
! static inline uint64_t
! uint128_lo64(uint128 value)
    {
!   return static_cast<uint64_t>(value);
!   }
! 
! static inline uint64_t
! uint128_hi64(uint128 value)
!   {
!   return static_cast<uint64_t>(value >> 64);
!   }
! 
! static inline uint128
! uint128_from_limbs(uint64_t hi, uint64_t lo)
!   {
!   return (static_cast<uint128>(hi) << 64) | lo;
!   }
! 
! static inline uint128
! int256_get_u128(const int256 &value, int half)
!   {
!   const int base = half * 2;
!   return uint128_from_limbs(value.i64[base + 1], value.i64[base]);
!   }
! 
! static inline void
! int256_set_u128(int256 &value, int half, uint128 replacement)
!   {
!   const int base = half * 2;
!   value.i64[base + 0] = uint128_lo64(replacement);
!   value.i64[base + 1] = uint128_hi64(replacement);
!   }
! 
! static inline bool
! int256_is_negative(const int256 &value)
!   {
!   return !!(value.i64[3] & 0x8000000000000000ULL);
!   }
! 
! static inline uint128
! int128_abs_as_uint128(__int128 value)
!   {
!   return value < 0
!        ? static_cast<uint128>(-(value + 1)) + 1
!        : static_cast<uint128>(value);
!   }
  
  
  static int
*************** multiply_int256_by_int64(int256 &product
*** 370,432 ****
    // Typical use of this routine is multiplying a temporary value by
    // a power of ten.  This is effectively left-shifting by decimal
    // digits.  See scale_int256_by_digits
!   uint64_t overflows[5] = {};
!   int128 temp;
    for(int i=0; i<4; i++)
      {
!     //  cppcheck-suppress unreadVariable  // cppcheck is dumb about unions???
!     temp.i128 = (uint128)product.i64[i] * multiplier;
!     product.i64[i] = temp.i64[0];
!     overflows[i+1] = temp.i64[1];
!     }
! 
!   for(int i=1; i<4; i++)
!     {
!     product.i64[i] += overflows[i];
!     if(product.i64[i] < overflows[i])
!       {
!       overflows[i+1] += 1;
!       }
      }
!   // Indicate that an overflow took place.  This is not useful unless the int256
!   // is known to be positive.
!   return overflows[4];
    }
  
  static int
  add_int256_to_int256(int256 &sum, const int256 &addend)
    {
!   uint128 overflows[3] = {};
!   for(int i=0; i<2; i++)
!     {
!     sum.i128[i] += addend.i128[i];
!     if( sum.i128[i] < addend.i128[i] )
!       {
!       overflows[i+1] = 1;
!       }
!     }
!   if( overflows[1] )
      {
!     sum.i128[1] += overflows[1];
!     if( sum.i128[1] == 0 )
!       {
!       overflows[2] = 1;
!       }
      }
    // Indicate that an overflow took place.  This is not useful unless the two
    // values are known to be positive.
!   return (int)overflows[2];
    }
  
  static void
  negate_int256(int256 &val)
    {
!   val.i128[0] = ~val.i128[0];
!   val.i128[1] = ~val.i128[1];
!   val.i128[0] += 1;
!   if( !val.i128[0] )
      {
!     val.i128[1] += 1;
      }
    }
  
--- 412,458 ----
    // Typical use of this routine is multiplying a temporary value by
    // a power of ten.  This is effectively left-shifting by decimal
    // digits.  See scale_int256_by_digits
!   uint128 carry = 0;
    for(int i=0; i<4; i++)
      {
!     uint128 temp = static_cast<uint128>(product.i64[i]) * multiplier + carry;
!     product.i64[i] = uint128_lo64(temp);
!     carry = temp >> 64;
      }
!   // Indicate that an overflow took place.  This is not useful unless the
!   // int256 is known to be positive.
!   return carry != 0;
    }
  
  static int
  add_int256_to_int256(int256 &sum, const int256 &addend)
    {
!   uint128 carry = 0;
!   for(int i=0; i<4; i++)
      {
!     uint128 temp = static_cast<uint128>(sum.i64[i]) + addend.i64[i] + carry;
!     sum.i64[i] = uint128_lo64(temp);
!     carry = temp >> 64;
      }
    // Indicate that an overflow took place.  This is not useful unless the two
    // values are known to be positive.
!   return carry != 0;
    }
  
  static void
  negate_int256(int256 &val)
    {
!   for(int i=0; i<4; i++)
      {
!     val.i64[i] = ~val.i64[i];
!     }
!   for(int i=0; i<4; i++)
!     {
!     val.i64[i] += 1;
!     if( val.i64[i] )
!       {
!       break;
!       }
      }
    }
  
*************** static void
*** 455,474 ****
  divide_int256_by_int64(int256 &val, uint64_t divisor)
    {
    // val needs to be a positive number
!   int128 temp = {};
    for( int i=3; i>=0; i-- )
      {
!     // Left shift temp 64 bits:
!     temp.i64[1] = temp.i64[0];
! 
!     // Put the high digit of val into the bottom of temp
!     temp.i64[0] = val.i64[i];
! 
!     // Divide that combinary by divisor to get the new digits
!     val.i64[i] = temp.i128 / divisor;
! 
!     // And the new temp is that combination modulo divisor
!     temp.i128 = temp.i128 % divisor;
      }
    }
  
--- 481,492 ----
  divide_int256_by_int64(int256 &val, uint64_t divisor)
    {
    // val needs to be a positive number
!   uint128 remainder = 0;
    for( int i=3; i>=0; i-- )
      {
!     uint128 combined = (remainder << 64) | val.i64[i];
!     val.i64[i] = static_cast<uint64_t>(combined / divisor);
!     remainder = combined % divisor;
      }
    }
  
*************** squeeze_int256(int256 &val, int &rdigits
*** 480,486 ****
    // MAX_FIXED_POINT_DIGITS.  If the result does not, we have an OVERFLOW
    // error.
  
!   int is_negative = val.data[31] & 0x80;
    if( is_negative )
      {
      negate_int256(val);
--- 498,504 ----
    // MAX_FIXED_POINT_DIGITS.  If the result does not, we have an OVERFLOW
    // error.
  
!   int is_negative = int256_is_negative(val);
    if( is_negative )
      {
      negate_int256(val);
*************** squeeze_int256(int256 &val, int &rdigits
*** 489,524 ****
    // As long as there are some decimal places left, we hold our nose and
    // right-shift a too-large value rightward by decimal digits.  In other
    // words, we truncate the fractional part to make room for the integer part:
!   while(rdigits > 0 && val.i128[1] )
      {
      divide_int256_by_int64(val, 10UL);
      rdigits -= 1;
      }
  
    // At this point, to be useful, val has to have fewer than 128 bits:
!   if( val.i128[1] )
      {
      overflow = compute_error_overflow;
      }
    else
      {
!     // We know that it has fewer than 128 bits.  But the remaining 128 bits need
!     // to be less than 10^MAX_FIXED_POINT_DIGITS.  This gets a bit nasty here,
!     // since at this writing the gcc compiler doesn't understand 128-bit
      // constants.  So, we are forced into some annoying compiler gymnastics.
  #if MAX_FIXED_POINT_DIGITS != 37
  #error MAX_FIXED_POINT_DIGITS needs to be 37
  #endif
  
!     // These sixteen bytes comprise the binary value of 10^38
!     static const uint8_t C1038[] = {0x00, 0x00, 0x00, 0x00, 0x40, 0x22, 0x8a, 0x09,
!                                 0x7a, 0xc4, 0x86, 0x5a, 0xa8, 0x4c, 0x3b, 0x4b};
!     static const uint128 biggest = *reinterpret_cast<const uint128 *>(C1038);
  
      // If we still have some rdigits to throw away, we can keep shrinking
      // the value:
  
!     while(rdigits > 0 && val.i128[0] >= biggest  )
        {
        divide_int256_by_int64(val, 10UL);
        rdigits -= 1;
--- 507,544 ----
    // As long as there are some decimal places left, we hold our nose and
    // right-shift a too-large value rightward by decimal digits.  In other
    // words, we truncate the fractional part to make room for the integer part:
!   while(rdigits > 0 && int256_get_u128(val, 1) )
      {
      divide_int256_by_int64(val, 10UL);
      rdigits -= 1;
      }
  
    // At this point, to be useful, val has to have fewer than 128 bits:
!   if( int256_get_u128(val, 1) )
      {
      overflow = compute_error_overflow;
      }
    else
      {
!     // We know that it has fewer than 128 bits.  But the remaining 128 bits
!     // need to be less than 10^MAX_FIXED_POINT_DIGITS.  This gets a bit nasty
!     // here, since at this writing the gcc compiler doesn't understand 128-bit
      // constants.  So, we are forced into some annoying compiler gymnastics.
  #if MAX_FIXED_POINT_DIGITS != 37
  #error MAX_FIXED_POINT_DIGITS needs to be 37
  #endif
  
!     // Binary value of 10^38, written as two 64-bit limbs so that the value is
!     // independent of the host byte order and does not require type punning.
!     static const uint128 biggest =
!         (static_cast<uint128>(0x4b3b4ca85a86c47aULL) << 64)
!     // cppcheck-suppress badBitmaskCheck
!       |  static_cast<uint128>(0x098a224000000000ULL);
  
      // If we still have some rdigits to throw away, we can keep shrinking
      // the value:
  
!     while(rdigits > 0 && int256_get_u128(val, 0) >= biggest  )
        {
        divide_int256_by_int64(val, 10UL);
        rdigits -= 1;
*************** squeeze_int256(int256 &val, int &rdigits
*** 532,538 ****
        rdigits -= 1;
        }
  
!     if( val.i128[0] >= biggest )
        {
        overflow = compute_error_overflow;
        }
--- 552,558 ----
        rdigits -= 1;
        }
  
!     if( int256_get_u128(val, 0) >= biggest )
        {
        overflow = compute_error_overflow;
        }
*************** get_int256_from_qualified_field(int256 &
*** 553,571 ****
                                  size_t field_o,
                                  size_t field_s)
    {
!   var.i128[0] = (uint128)__gg__binary_value_from_qualified_field( &rdigits,
!                                                                   field,
!                                                                   field_o,
!                                                                   field_s);
!   if( var.data[15] & 0x80 )
      {
      // This value is negative, so extend the sign bit:
!     memset(var.data + 16, 0xFF, 16);
      }
    else
      {
      // This value is positive
!     memset(var.data + 16, 0x00, 16);
      }
    }
  
--- 573,594 ----
                                  size_t field_o,
                                  size_t field_s)
    {
!   __int128 incoming = __gg__binary_value_from_qualified_field(&rdigits,
!                                                               field,
!                                                               field_o,
!                                                               field_s);
!   int256_set_u128(var, 0, static_cast<uint128>(incoming));
!   if( incoming < 0 )
      {
      // This value is negative, so extend the sign bit:
!     var.i64[2] = UINT64_MAX;
!     var.i64[3] = UINT64_MAX;
      }
    else
      {
      // This value is positive
!     var.i64[2] = 0;
!     var.i64[3] = 0;
      }
    }
  
*************** __gg__add_fixed_phase1( cbl_arith_format
*** 593,599 ****
    // The result goes into the temporary phase1_result.
  
    // Let us prime the pump with the first value of A[]
!   get_int256_from_qualified_field(phase1_result, phase1_rdigits, AA[0].field, AA[0].offset, AA[0].size);
  
    // We now go into a loop adding each of the A[] values to phase1_result:
  
--- 616,626 ----
    // The result goes into the temporary phase1_result.
  
    // Let us prime the pump with the first value of A[]
!   get_int256_from_qualified_field(phase1_result,
!                                   phase1_rdigits,
!                                   AA[0].field,
!                                   AA[0].offset,
!                                   AA[0].size);
  
    // We now go into a loop adding each of the A[] values to phase1_result:
  
*************** __gg__add_fixed_phase1( cbl_arith_format
*** 601,610 ****
      {
      int temp_rdigits;
      int256 temp = {};
!     get_int256_from_qualified_field(temp, temp_rdigits, AA[i].field, AA[i].offset, AA[i].size);
  
!     // We have to scale the one with fewer rdigits to match the one with greater
!     // rdigits:
      if( phase1_rdigits > temp_rdigits )
        {
        scale_int256_by_digits(temp, phase1_rdigits - temp_rdigits);
--- 628,641 ----
      {
      int temp_rdigits;
      int256 temp = {};
!     get_int256_from_qualified_field(temp,
!                                     temp_rdigits,
!                                     AA[i].field,
!                                     AA[i].offset,
!                                     AA[i].size);
  
!     // We have to scale the one with fewer rdigits to match the one with
!     // greater rdigits:
      if( phase1_rdigits > temp_rdigits )
        {
        scale_int256_by_digits(temp, phase1_rdigits - temp_rdigits);
*************** __gg__addf1_fixed_phase2( cbl_arith_form
*** 655,661 ****
      // proceed accordingly.
  
      // Convert the intermediate
!     GCOB_FP128 value_a = (GCOB_FP128)phase1_result.i128[0];
      value_a /= __gg__power_of_ten(phase1_rdigits);
  
      // Pick up the target
--- 686,692 ----
      // proceed accordingly.
  
      // Convert the intermediate
!     GCOB_FP128 value_a = (GCOB_FP128)int256_get_u128(phase1_result, 0);
      value_a /= __gg__power_of_ten(phase1_rdigits);
  
      // Pick up the target
*************** __gg__addf1_fixed_phase2( cbl_arith_form
*** 716,722 ****
                                          C[0].offset,
                                          C[0].size,
                                          on_size_error,
!                                         value_a.i128[0],
                                          rdigits_a,
                                          *rounded++);
      }
--- 747,753 ----
                                          C[0].offset,
                                          C[0].size,
                                          on_size_error,
!                                         int256_get_u128(value_a, 0),
                                          rdigits_a,
                                          *rounded++);
      }
*************** __gg__fixed_phase2_assign_to_c( cbl_arit
*** 748,754 ****
      // proceed accordingly.
  
      // Convert the intermediate
!     GCOB_FP128 value_a = (GCOB_FP128)phase1_result.i128[0];
      value_a /= __gg__power_of_ten(phase1_rdigits);
  
      *compute_error |= conditional_stash(CC[0].field, CC[0].offset, CC[0].size,
--- 779,785 ----
      // proceed accordingly.
  
      // Convert the intermediate
!     GCOB_FP128 value_a = (GCOB_FP128)int256_get_u128(phase1_result, 0);
      value_a /= __gg__power_of_ten(phase1_rdigits);
  
      *compute_error |= conditional_stash(CC[0].field, CC[0].offset, CC[0].size,
*************** __gg__fixed_phase2_assign_to_c( cbl_arit
*** 775,787 ****
        // to make the top 64 bits positive.  Otherwise, the conditional stash
        // will see that FldPointer is not signable, and force the value
        // positive with a two's complement.
!       value_a.i128[0] &= 0xFFFFFFFFFFFFFFFFUL;
        }
  
        // At this point, we assign that value to *C.
      *compute_error |= conditional_stash(CC[0].field, CC[0].offset, CC[0].size,
                                          on_size_error,
!                                         value_a.i128[0],
                                          rdigits_a,
                                         *rounded++);
      }
--- 806,820 ----
        // to make the top 64 bits positive.  Otherwise, the conditional stash
        // will see that FldPointer is not signable, and force the value
        // positive with a two's complement.
!       int256_set_u128(value_a,
!                       0,
!                       int256_get_u128(value_a, 0) & 0xFFFFFFFFFFFFFFFFULL);
        }
  
        // At this point, we assign that value to *C.
      *compute_error |= conditional_stash(CC[0].field, CC[0].offset, CC[0].size,
                                          on_size_error,
!                                         int256_get_u128(value_a, 0),
                                          rdigits_a,
                                         *rounded++);
      }
*************** __gg__add_float_phase1( cbl_arith_format
*** 806,818 ****
    // The result goes into the temporary phase1_result_ffloat.
  
    // Let us prime the pump with the first value of A[]
!   phase1_result_float = __gg__float128_from_qualified_field(A[0].field, A[0].offset, A[0].size);
  
    // We now go into a loop adding each of the A[] values to phase1_result_flt:
  
    for( size_t i=1; i<nA; i++ )
      {
!     GCOB_FP128 temp = __gg__float128_from_qualified_field(A[i].field, A[i].offset, A[i].size);
      phase1_result_float = addition_helper_float(phase1_result_float,
                                                  temp,
                                                  compute_error);
--- 839,855 ----
    // The result goes into the temporary phase1_result_ffloat.
  
    // Let us prime the pump with the first value of A[]
!   phase1_result_float = __gg__float128_from_qualified_field(A[0].field,
!                                                             A[0].offset,
!                                                             A[0].size);
  
    // We now go into a loop adding each of the A[] values to phase1_result_flt:
  
    for( size_t i=1; i<nA; i++ )
      {
!     GCOB_FP128 temp = __gg__float128_from_qualified_field(A[i].field,
!                                                           A[i].offset,
!                                                           A[i].size);
      phase1_result_float = addition_helper_float(phase1_result_float,
                                                  temp,
                                                  compute_error);
*************** __gg__addf1_float_phase2( cbl_arith_form
*** 837,843 ****
    // This is the assignment phase of an ADD Format 2
    // We take phase1_result and accumulate it into C
  
!   GCOB_FP128 temp = __gg__float128_from_qualified_field(C[0].field, C[0].offset, C[0].size);
    temp = addition_helper_float(temp, phase1_result_float, compute_error);
    *compute_error |= conditional_stash(C[0].field, C[0].offset, C[0].size,
                                        on_size_error,
--- 874,882 ----
    // This is the assignment phase of an ADD Format 2
    // We take phase1_result and accumulate it into C
  
!   GCOB_FP128 temp = __gg__float128_from_qualified_field(C[0].field,
!                                                         C[0].offset,
!                                                         C[0].size);
    temp = addition_helper_float(temp, phase1_result_float, compute_error);
    *compute_error |= conditional_stash(C[0].field, C[0].offset, C[0].size,
                                        on_size_error,
*************** __gg__addf3(cbl_arith_format_t ,
*** 892,899 ****
      {
      if( A[i].field->type == FldFloat || C[i].field->type == FldFloat )
        {
!       GCOB_FP128 value_a = __gg__float128_from_qualified_field(A[i].field, A[i].offset, A[i].size);
!       GCOB_FP128 value_b = __gg__float128_from_qualified_field(C[i].field, C[i].offset, C[i].size);
  
        value_a = addition_helper_float(value_a, value_b, compute_error);
  
--- 931,942 ----
      {
      if( A[i].field->type == FldFloat || C[i].field->type == FldFloat )
        {
!       GCOB_FP128 value_a = __gg__float128_from_qualified_field(A[i].field,
!                                                                A[i].offset,
!                                                                A[i].size);
!       GCOB_FP128 value_b = __gg__float128_from_qualified_field(C[i].field,
!                                                                C[i].offset,
!                                                                C[i].size);
  
        value_a = addition_helper_float(value_a, value_b, compute_error);
  
*************** __gg__addf3(cbl_arith_format_t ,
*** 912,920 ****
        int256 value_b;
        int rdigits_b;
  
!       get_int256_from_qualified_field(value_a, rdigits_a, A[i].field, A[i].offset, A[i].size);
!       get_int256_from_qualified_field(value_b, rdigits_b, C[i].field, C[i].offset, C[i].size);
! 
        // We have to scale the one with fewer rdigits to match the one with greater
        // rdigits:
        if( rdigits_a > rdigits_b )
--- 955,970 ----
        int256 value_b;
        int rdigits_b;
  
!       get_int256_from_qualified_field(value_a,
!                                       rdigits_a,
!                                       A[i].field,
!                                       A[i].offset,
!                                       A[i].size);
!       get_int256_from_qualified_field(value_b,
!                                       rdigits_b,
!                                       C[i].field,
!                                       C[i].offset,
!                                       C[i].size);
        // We have to scale the one with fewer rdigits to match the one with greater
        // rdigits:
        if( rdigits_a > rdigits_b )
*************** __gg__addf3(cbl_arith_format_t ,
*** 940,946 ****
          // At this point, we assign the sum to *C.
        *compute_error |= conditional_stash(C[i].field, C[i].offset, C[i].size,
                                            on_size_error,
!                                           value_a.i128[0],
                                            rdigits_a,
                                            *rounded++);
        }
--- 990,996 ----
          // At this point, we assign the sum to *C.
        *compute_error |= conditional_stash(C[i].field, C[i].offset, C[i].size,
                                            on_size_error,
!                                           int256_get_u128(value_a, 0),
                                            rdigits_a,
                                            *rounded++);
        }
*************** __gg__subtractf1_fixed_phase2(cbl_arith_
*** 973,983 ****
      // proceed accordingly.
  
      // Convert the intermediate
!     GCOB_FP128 value_a = (GCOB_FP128)phase1_result.i128[0];
      value_a /= __gg__power_of_ten(phase1_rdigits);
  
      // Pick up the target
!     GCOB_FP128 value_b = __gg__float128_from_qualified_field(C[0].field, C[0].offset, C[0].size);
  
      value_b -= value_a;
  
--- 1023,1035 ----
      // proceed accordingly.
  
      // Convert the intermediate
!     GCOB_FP128 value_a = (GCOB_FP128)int256_get_u128(phase1_result, 0);
      value_a /= __gg__power_of_ten(phase1_rdigits);
  
      // Pick up the target
!     GCOB_FP128 value_b = __gg__float128_from_qualified_field(C[0].field,
!                                                              C[0].offset,
!                                                              C[0].size);
  
      value_b -= value_a;
  
*************** __gg__subtractf1_fixed_phase2(cbl_arith_
*** 997,1006 ****
      int256 value_b = {};
      int rdigits_b;
  
!     get_int256_from_qualified_field(value_b, rdigits_b, C[0].field, C[0].offset, C[0].size);
  
!     // We have to scale the one with fewer rdigits to match the one with greater
!     // rdigits:
      if( rdigits_a > rdigits_b )
        {
        scale_int256_by_digits(value_b, rdigits_a - rdigits_b);
--- 1049,1062 ----
      int256 value_b = {};
      int rdigits_b;
  
!     get_int256_from_qualified_field(value_b,
!                                     rdigits_b,
!                                     C[0].field,
!                                     C[0].offset,
!                                     C[0].size);
  
!     // We have to scale the one with fewer rdigits to match the one with
!     // greater rdigits:
      if( rdigits_a > rdigits_b )
        {
        scale_int256_by_digits(value_b, rdigits_a - rdigits_b);
*************** __gg__subtractf1_fixed_phase2(cbl_arith_
*** 1024,1030 ****
        // At this point, we assign running_sum to *C.
      *compute_error |= conditional_stash(C[0].field, C[0].offset, C[0].size,
                                          on_size_error,
!                                         value_b.i128[0],
                                          rdigits_b,
                                          *rounded++);
      }
--- 1080,1086 ----
        // At this point, we assign running_sum to *C.
      *compute_error |= conditional_stash(C[0].field, C[0].offset, C[0].size,
                                          on_size_error,
!                                         int256_get_u128(value_b, 0),
                                          rdigits_b,
                                          *rounded++);
      }
*************** __gg__subtractf2_fixed_phase1(cbl_arith_
*** 1066,1072 ****
    int256 value_b = {};
    int rdigits_b;
  
!   get_int256_from_qualified_field(value_b, rdigits_b, BB[0].field, BB[0].offset, BB[0].size);
  
    // We have to scale the one with fewer rdigits to match the one with greater
    // rdigits:
--- 1122,1132 ----
    int256 value_b = {};
    int rdigits_b;
  
!   get_int256_from_qualified_field(value_b,
!                                   rdigits_b,
!                                   BB[0].field,
!                                   BB[0].offset,
!                                   BB[0].size);
  
    // We have to scale the one with fewer rdigits to match the one with greater
    // rdigits:
*************** __gg__subtractf1_float_phase2(cbl_arith_
*** 1111,1117 ****
    // This is the assignment phase of an SUBTRACT Format 2
    // We take phase1_result and subtract it from C
  
!   GCOB_FP128 temp = __gg__float128_from_qualified_field(C[0].field, C[0].offset, C[0].size);
    temp = subtraction_helper_float(temp, phase1_result_float, compute_error);
    *compute_error |= conditional_stash(C[0].field, C[0].offset, C[0].size,
                                        on_size_error,
--- 1171,1179 ----
    // This is the assignment phase of an SUBTRACT Format 2
    // We take phase1_result and subtract it from C
  
!   GCOB_FP128 temp = __gg__float128_from_qualified_field(C[0].field,
!                                                         C[0].offset,
!                                                         C[0].size);
    temp = subtraction_helper_float(temp, phase1_result_float, compute_error);
    *compute_error |= conditional_stash(C[0].field, C[0].offset, C[0].size,
                                        on_size_error,
*************** __gg__subtractf2_float_phase1(cbl_arith_
*** 1149,1156 ****
                            );
  
    // Subtract that subtotal from the B value:
!   GCOB_FP128 value_b = __gg__float128_from_qualified_field(B[0].field, B[0].offset, B[0].size);
!   phase1_result_float = subtraction_helper_float(value_b, phase1_result_float, compute_error);
    }
  
  extern "C"
--- 1211,1222 ----
                            );
  
    // Subtract that subtotal from the B value:
!   GCOB_FP128 value_b = __gg__float128_from_qualified_field(B[0].field,
!                                                            B[0].offset,
!                                                            B[0].size);
!   phase1_result_float = subtraction_helper_float(value_b,
!                                                  phase1_result_float,
!                                                  compute_error);
    }
  
  extern "C"
*************** __gg__subtractf3( cbl_arith_format_t ,
*** 1176,1183 ****
      {
      if( A[i].field->type == FldFloat || C[i].field->type == FldFloat)
        {
!       GCOB_FP128 value_a = __gg__float128_from_qualified_field(A[i].field, A[i].offset, A[i].size);
!       GCOB_FP128 value_b = __gg__float128_from_qualified_field(C[i].field, C[i].offset, C[i].size);
  
        value_b = subtraction_helper_float(value_b, value_a, compute_error);
  
--- 1242,1253 ----
      {
      if( A[i].field->type == FldFloat || C[i].field->type == FldFloat)
        {
!       GCOB_FP128 value_a = __gg__float128_from_qualified_field(A[i].field,
!                                                                A[i].offset,
!                                                                A[i].size);
!       GCOB_FP128 value_b = __gg__float128_from_qualified_field(C[i].field,
!                                                                C[i].offset,
!                                                                C[i].size);
  
        value_b = subtraction_helper_float(value_b, value_a, compute_error);
  
*************** __gg__subtractf3( cbl_arith_format_t ,
*** 1196,1206 ****
        int256 value_b;
        int rdigits_b;
  
!       get_int256_from_qualified_field(value_a, rdigits_a, A[i].field, A[i].offset, A[i].size);
!       get_int256_from_qualified_field(value_b, rdigits_b, C[i].field, C[i].offset, C[i].size);
  
!       // We have to scale the one with fewer rdigits to match the one with greater
!       // rdigits:
        if( rdigits_a > rdigits_b )
          {
          scale_int256_by_digits(value_b, rdigits_a - rdigits_b);
--- 1266,1284 ----
        int256 value_b;
        int rdigits_b;
  
!       get_int256_from_qualified_field(value_a,
!                                       rdigits_a,
!                                       A[i].field,
!                                       A[i].offset,
!                                       A[i].size);
!       get_int256_from_qualified_field(value_b,
!                                       rdigits_b,
!                                       C[i].field,
!                                       C[i].offset,
!                                       C[i].size);
  
!       // We have to scale the one with fewer rdigits to match the one with
!       // greater rdigits:
        if( rdigits_a > rdigits_b )
          {
          scale_int256_by_digits(value_b, rdigits_a - rdigits_b);
*************** __gg__subtractf3( cbl_arith_format_t ,
*** 1225,1231 ****
          // At this point, we assign the sum to *C.
        *compute_error |= conditional_stash(C[i].field, C[i].offset, C[i].size,
                                            on_size_error,
!                                           value_b.i128[0],
                                            rdigits_b,
                                            *rounded++);
        }
--- 1303,1309 ----
          // At this point, we assign the sum to *C.
        *compute_error |= conditional_stash(C[i].field, C[i].offset, C[i].size,
                                            on_size_error,
!                                           int256_get_u128(value_b, 0),
                                            rdigits_b,
                                            *rounded++);
        }
*************** __gg__multiplyf1_phase1(cbl_arith_format
*** 1250,1273 ****
                          int           ,
                          int          *)
    {
!   // We are getting just the one value, which we are converting to the necessary
!   // intermediate form
  
    if( A[0].field->type == FldFloat )
      {
      multiply_intermediate_is_float = true;
!     multiply_intermediate_float = __gg__float128_from_qualified_field(A[0].field,
!                                                                       A[0].offset,
!                                                                       A[0].size);
      }
    else
      {
      multiply_intermediate_is_float = false;
      multiply_intermediate_int128 =
!          __gg__binary_value_from_qualified_field(&multiply_intermediate_rdigits,
!                                                  A[0].field,
!                                                  A[0].offset,
!                                                  A[0].size);
      }
    }
  
--- 1328,1352 ----
                          int           ,
                          int          *)
    {
!   // We are getting just the one value, which we are converting to the
!   // necessary intermediate form
  
    if( A[0].field->type == FldFloat )
      {
      multiply_intermediate_is_float = true;
!     multiply_intermediate_float =
!                                __gg__float128_from_qualified_field(A[0].field,
!                                                                    A[0].offset,
!                                                                    A[0].size);
      }
    else
      {
      multiply_intermediate_is_float = false;
      multiply_intermediate_int128 =
!         __gg__binary_value_from_qualified_field(&multiply_intermediate_rdigits,
!                                                 A[0].field,
!                                                 A[0].offset,
!                                                 A[0].size);
      }
    }
  
*************** void multiply_int128_by_int128(int256 &A
*** 1276,1291 ****
                                 __int128 ab_value,
                                 __int128 cd_value)
    {
!   int is_negative = ( (PTRCAST(uint8_t, (&ab_value)))[15]
!                                 ^(PTRCAST(uint8_t, (&cd_value)))[15]) & 0x80;
!   if( ab_value < 0 )
!     {
!     ab_value = -ab_value;
!     }
!   if( cd_value < 0 )
!     {
!     cd_value = -cd_value;
!     }
  
    uint128 AC00;
    uint128 AD0;
--- 1355,1364 ----
                                 __int128 ab_value,
                                 __int128 cd_value)
    {
!   bool is_negative = (ab_value < 0) != (cd_value < 0);
! 
!   uint128 abs_ab = int128_abs_as_uint128(ab_value);
!   uint128 abs_cd = int128_abs_as_uint128(cd_value);
  
    uint128 AC00;
    uint128 AD0;
*************** void multiply_int128_by_int128(int256 &A
*** 1293,1302 ****
    uint128 BD;
  
    // Let's extract the digits.
!   uint64_t a = ab_value>>64;
!   uint64_t b = ab_value;
!   uint64_t c = cd_value>>64;
!   uint64_t d = cd_value;
  
    // multiply (a0 + b) * (c0 + d)
  
--- 1366,1375 ----
    uint128 BD;
  
    // Let's extract the digits.
!   uint64_t a = uint128_hi64(abs_ab);
!   uint64_t b = uint128_lo64(abs_ab);
!   uint64_t c = uint128_hi64(abs_cd);
!   uint64_t d = uint128_lo64(abs_cd);
  
    // multiply (a0 + b) * (c0 + d)
  
*************** void multiply_int128_by_int128(int256 &A
*** 1308,1336 ****
    // ABCD is the sum of those four pieces
    int256 temp;
  
!   ABCD.i128[1] = 0;
!   ABCD.i128[0] = BD;
  
!   temp.i64[3] = 0;
!   memcpy(&temp.i64[1], &BC0, 16);
!   temp.i64[0] = 0;
    add_int256_to_int256(ABCD, temp);
  
!   memcpy(&temp.i64[1], &AD0, 16);
    add_int256_to_int256(ABCD, temp);
  
!   temp.i64[1] = 0;
!   memcpy(&temp.i64[2], &AC00, 16);
    add_int256_to_int256(ABCD, temp);
  
    // ABCD is now a 256-bit integer with rdigits decimal places
!   if(is_negative)
      {
      negate_int256(ABCD);
      }
    }
  
  
  extern "C"
  void
  __gg__multiplyf1_phase2(cbl_arith_format_t ,
--- 1381,1413 ----
    // ABCD is the sum of those four pieces
    int256 temp;
  
!   ABCD = int256{};
!   int256_set_u128(ABCD, 0, BD);
  
!   temp = int256{};
!   temp.i64[1] = uint128_lo64(BC0);
!   temp.i64[2] = uint128_hi64(BC0);
    add_int256_to_int256(ABCD, temp);
  
!   temp = int256{};
!   temp.i64[1] = uint128_lo64(AD0);
!   temp.i64[2] = uint128_hi64(AD0);
    add_int256_to_int256(ABCD, temp);
  
!   temp = int256{};
!   temp.i64[2] = uint128_lo64(AC00);
!   temp.i64[3] = uint128_hi64(AC00);
    add_int256_to_int256(ABCD, temp);
  
    // ABCD is now a 256-bit integer with rdigits decimal places
!   if( is_negative )
      {
      negate_int256(ABCD);
      }
    }
  
  
+ 
  extern "C"
  void
  __gg__multiplyf1_phase2(cbl_arith_format_t ,
*************** __gg__multiplyf1_phase2(cbl_arith_format
*** 1356,1368 ****
      a_value = multiply_intermediate_float;
      if( C[0].field->type == FldFloat )
        {
!       b_value = __gg__float128_from_qualified_field(C[0].field, C[0].offset, C[0].size);
        goto float_float;
        }
      else
        {
        // float times fixed
!       b_value = __gg__float128_from_qualified_field(C[0].field, C[0].offset, C[0].size);
        goto float_float;
        }
      }
--- 1433,1449 ----
      a_value = multiply_intermediate_float;
      if( C[0].field->type == FldFloat )
        {
!       b_value = __gg__float128_from_qualified_field(C[0].field,
!                                                     C[0].offset,
!                                                     C[0].size);
        goto float_float;
        }
      else
        {
        // float times fixed
!       b_value = __gg__float128_from_qualified_field(C[0].field,
!                                                     C[0].offset,
!                                                     C[0].size);
        goto float_float;
        }
      }
*************** __gg__multiplyf1_phase2(cbl_arith_format
*** 1376,1382 ****
          {
          a_value /= (GCOB_FP128)__gg__power_of_ten(multiply_intermediate_rdigits);
          }
!       b_value = __gg__float128_from_qualified_field(C[0].field, C[0].offset, C[0].size);
        goto float_float;
        }
      else
--- 1457,1465 ----
          {
          a_value /= (GCOB_FP128)__gg__power_of_ten(multiply_intermediate_rdigits);
          }
!       b_value = __gg__float128_from_qualified_field(C[0].field,
!                                                     C[0].offset,
!                                                     C[0].size);
        goto float_float;
        }
      else
*************** __gg__multiplyf1_phase2(cbl_arith_format
*** 1388,1394 ****
  
        int cd_rdigits;
        __int128 ab_value = multiply_intermediate_int128;
!       __int128 cd_value = __gg__binary_value_from_qualified_field(&cd_rdigits, C[0].field, C[0].offset, C[0].size);
  
        int256 ABCD;
        int rdigits = multiply_intermediate_rdigits + cd_rdigits;
--- 1471,1480 ----
  
        int cd_rdigits;
        __int128 ab_value = multiply_intermediate_int128;
!       __int128 cd_value = __gg__binary_value_from_qualified_field(&cd_rdigits,
!                                                                   C[0].field,
!                                                                   C[0].offset,
!                                                                   C[0].size);
  
        int256 ABCD;
        int rdigits = multiply_intermediate_rdigits + cd_rdigits;
*************** __gg__multiplyf1_phase2(cbl_arith_format
*** 1403,1409 ****
          // At this point, we assign running_sum to *C.
        *compute_error |= conditional_stash(C[0].field, C[0].offset, C[0].size,
                                            on_size_error,
!                                           ABCD.i128[0],
                                            rdigits,
                                            *rounded++);
  
--- 1489,1495 ----
          // At this point, we assign running_sum to *C.
        *compute_error |= conditional_stash(C[0].field, C[0].offset, C[0].size,
                                            on_size_error,
!                                           int256_get_u128(ABCD, 0),
                                            rdigits,
                                            *rounded++);
  
*************** __gg__multiplyf2( cbl_arith_format_t ,
*** 1452,1459 ****
  
    if( A[0].field->type == FldFloat || B[0].field->type == FldFloat )
      {
!     GCOB_FP128 a_value = __gg__float128_from_qualified_field(A[0].field, A[0].offset, A[0].size);
!     GCOB_FP128 b_value = __gg__float128_from_qualified_field(B[0].field, B[0].offset, B[0].size);
      product_float = multiply_helper_float(a_value, b_value, compute_error);
      got_float = true;
      }
--- 1538,1549 ----
  
    if( A[0].field->type == FldFloat || B[0].field->type == FldFloat )
      {
!     GCOB_FP128 a_value = __gg__float128_from_qualified_field(A[0].field,
!                                                              A[0].offset,
!                                                              A[0].size);
!     GCOB_FP128 b_value = __gg__float128_from_qualified_field(B[0].field,
!                                                              B[0].offset,
!                                                              B[0].size);
      product_float = multiply_helper_float(a_value, b_value, compute_error);
      got_float = true;
      }
*************** __gg__multiplyf2( cbl_arith_format_t ,
*** 1461,1468 ****
      {
      int a_rdigits;
      int b_rdigits;
!     __int128 a_value = __gg__binary_value_from_qualified_field(&a_rdigits, A[0].field, A[0].offset, A[0].size);
!     __int128 b_value = __gg__binary_value_from_qualified_field(&b_rdigits, B[0].field, B[0].offset, B[0].size);
      product_fix_digits = a_rdigits + b_rdigits;
      multiply_int128_by_int128(product_fix, a_value, b_value);
      int overflow = squeeze_int256(product_fix, product_fix_digits);
--- 1551,1564 ----
      {
      int a_rdigits;
      int b_rdigits;
!     __int128 a_value = __gg__binary_value_from_qualified_field(&a_rdigits,
!                                                                A[0].field,
!                                                                A[0].offset,
!                                                                A[0].size);
!     __int128 b_value = __gg__binary_value_from_qualified_field(&b_rdigits,
!                                                                B[0].field,
!                                                                B[0].offset,
!                                                                B[0].size);
      product_fix_digits = a_rdigits + b_rdigits;
      multiply_int128_by_int128(product_fix, a_value, b_value);
      int overflow = squeeze_int256(product_fix, product_fix_digits);
*************** __gg__multiplyf2( cbl_arith_format_t ,
*** 1485,1527 ****
        {
        *compute_error |= conditional_stash(C[i].field, C[i].offset, C[i].size,
                                            on_size_error,
!                                           product_fix.i128[0],
                                            product_fix_digits,
                                            *rounded++);
        }
      }
    }
  
- static void
- shift_in_place128(uint8_t *buf, int size, int bits)
-   {
-   // Assume that size in bytes is some multiple of sixteen.  That is, the
-   // buffer we are shifting is made up of either two 128-bit bit values (for
-   // an int256) or three 128-bit values (an int384)
- 
-   // "bits" is a value from zero to 127
- 
-   if( !bits )
-     {
-     return;
-     }
- 
-   size_t places = size/16;  // This is either two or three
- 
-   uint128 temp;
-   uint128 overflow = 0;
- 
-   uint128 *as128 = PTRCAST(uint128, buf);
- 
-   for( size_t i=0; i<places; i++ )
-     {
-     temp = as128[i] >> (128 - bits);
-     as128[i] <<= bits;
-     as128[i] += overflow;
-     overflow = temp;
-     }
-   }
- 
  #pragma GCC diagnostic push
  #pragma GCC diagnostic ignored "-Wunused-function"
  
--- 1581,1593 ----
        {
        *compute_error |= conditional_stash(C[i].field, C[i].offset, C[i].size,
                                            on_size_error,
!                                           int256_get_u128(product_fix, 0),
                                            product_fix_digits,
                                            *rounded++);
        }
      }
    }
  
  #pragma GCC diagnostic push
  #pragma GCC diagnostic ignored "-Wunused-function"
  
*************** int256_as_decimal(int256 val)
*** 1534,1553 ****
    int index = 0;
    bool is_negative = false;
  
!   if( val.data[31] & 0x80 )
      {
!     // One's complement:
!     val.i128[0] = ~val.i128[0];
!     val.i128[1] = ~val.i128[1];
!     // Two's complement:
!     if( ++val.i128[0] == 0 )
!       {
!       ++val.i128[1];
!       }
      is_negative = true;
      }
  
!   while(val.i128[0] || val.i128[1])
      {
      int256 before;
      int256 after;
--- 1600,1612 ----
    int index = 0;
    bool is_negative = false;
  
!   if( int256_is_negative(val) )
      {
!     negate_int256(val);
      is_negative = true;
      }
  
!   while(val.i64[0] || val.i64[1] || val.i64[2] || val.i64[3])
      {
      int256 before;
      int256 after;
*************** int256_as_decimal(int256 val)
*** 1580,1585 ****
--- 1639,1694 ----
  #pragma GCC diagnostic pop
  
  
+ static int
+ clz_uint64(uint64_t value)
+   {
+ #if defined(__GNUC__) || defined(__clang__)
+   return value ? __builtin_clzll(value) : 64;
+ #else
+   int retval = 0;
+   if( !value )
+     {
+     return 64;
+     }
+   while( !(value & 0x8000000000000000ULL) )
+     {
+     retval += 1;
+     value <<= 1;
+     }
+   return retval;
+ #endif
+   }
+ 
+ static void
+ shift_left_int256(int256 &value, int bits)
+   {
+   if( !bits )
+     {
+     return;
+     }
+ 
+   const int whole_limbs = bits / 64;
+   const int inner_bits  = bits % 64;
+   int256 shifted = {};
+ 
+   for( int i=3; i>=0; i-- )
+     {
+     const int source = i - whole_limbs;
+     if( source < 0 )
+       {
+       continue;
+       }
+ 
+     shifted.i64[i] = value.i64[source] << inner_bits;
+     if( inner_bits && source > 0 )
+       {
+       shifted.i64[i] |= value.i64[source - 1] >> (64 - inner_bits);
+       }
+     }
+ 
+   value = shifted;
+   }
+ 
  static void
  divide_int128_by_int128(int256   &quotient,
                          int      &quotient_rdigits,
*************** divide_int128_by_int128(int256   &quotie
*** 1592,1620 ****
    if( divisor == 0 )
      {
      *compute_error |= compute_error_divide_by_zero;
!     memset(&quotient, 0, sizeof(quotient));
!     memcpy(&quotient, &dividend, 8);
      quotient_rdigits = dividend_rdigits;
      return;
      }
  
!   bool is_negative = false;
!   if(dividend < 0)
!     {
!     is_negative = !is_negative;
!     dividend = -dividend;
!     }
!   if(divisor < 0)
!     {
!     is_negative = !is_negative;
!     divisor = -divisor;
!     }
  
!   // We are going to be referencing the 64-bit pices of the 128-bit divisor:
!   uint64_t *divisor64 = PTRCAST(uint64_t, &divisor);
  
!   quotient.i128[1] = 0;
!   quotient.i128[0] = dividend;
  
    // In order to get 0.3333333.... from 1 / 3, we are going to scale up the
    // numerator so that it has 37 rdigits:
--- 1701,1719 ----
    if( divisor == 0 )
      {
      *compute_error |= compute_error_divide_by_zero;
!     quotient = int256{};
!     quotient.i64[0] = static_cast<uint64_t>(dividend);
      quotient_rdigits = dividend_rdigits;
      return;
      }
  
!   bool is_negative = (dividend < 0) != (divisor < 0);
  
!   uint128 abs_dividend = int128_abs_as_uint128(dividend);
!   uint128 abs_divisor  = int128_abs_as_uint128(divisor);
  
!   quotient = int256{};
!   int256_set_u128(quotient, 0, abs_dividend);
  
    // In order to get 0.3333333.... from 1 / 3, we are going to scale up the
    // numerator so that it has 37 rdigits:
*************** divide_int128_by_int128(int256   &quotie
*** 1625,1820 ****
  
    // Now, let's see if we can do a simple divide-by-single-place calculation:
  
!   if( divisor64[1] == 0 )
      {
      // Yes!  The divisor fits into 64 bits:
!     divide_int256_by_int64(quotient, (uint64_t)divisor);
      }
    else
      {
!     // We have to do long division, and that means Knuth's Algorithm D.  Let's
!     // review where we are.
!     //
!     // We are using 64-bit places to divide one 128-bit number by another.  We
!     // know that both are positive.  So, we are dividing
!     //
!     //      AB by CD, where we know C is non-zero.
!     //
!     // Because we want fractional digits to the right, we multiplied by 10**37,
!     // which is smaller than 2**64, so we have one additional place:
!     //
!     //      ABx by CD
!     //
!     // Algorithm D requires that we left-shift ABX and CD by enough bits to make
!     // turn on high-order by of CD.  This will be a value between 1 and 63
!     // shifts, resulting in
!     //
!     //      ABxy by CD.
!     //
!     // We can know that the quotient will have at most two places.  We can see
!     // this in the decimal analogy.  The worst case scenario is dividing
!     //
!     //      99 by 10
!     //
!     // We multiply the top by 10 to give us one fractional decimal place in the
!     // result:
!     //
!     //      990 by 10
!     //
!     // To satisfy Algorithm D's requirement that C be >= b/2, we multiply both
!     // dividend and divisor by 5:
!     //
!     //      4950 by 50
!     //
!     //  And then we do the work that gives us the two-place answer of 99.
!     //
!     //
!     // Here is our four-place 256-bit "numerator"
!     int256 numerator;
! 
!     // Copy the three-place ABx value into the numerator area
!     memcpy(&numerator, &quotient, sizeof(quotient));
! 
!     // Calculate how many bits we need to shift CD to make the high-order bit
!     // turn on:
! 
!     int bits_to_shift = 0;
!     int i=15;
!     while( (PTRCAST(uint8_t, &divisor))[i] == 0 )
!       {
!       i -= 1;
!       bits_to_shift += 8;
!       }    uint8_t tail = (  PTRCAST(uint8_t, &divisor)  )[i];
!     while( !(tail & 0x80) )
!       {
!       bits_to_shift += 1;
!       tail <<= 1;
!       }
! 
!     // Shift both the numerator and the divisor that number of bits
  
!     shift_in_place128( PTRCAST(uint8_t, &numerator), sizeof(numerator), bits_to_shift);
!     shift_in_place128( PTRCAST(uint8_t, &divisor),   sizeof(divisor),   bits_to_shift);
  
!     // We are now ready to do the guess-multiply-subtract loop.  We know that
!     // the result will have two places, so we know we are going to go through
!     // that loop two times.  We will build the quotient from the high-order
!     // place down:
  
!     // Let's prime the pump by loading remnant with the A value of ABxyz
!     int q_place = 1;
  
!     memset(&quotient, 0, sizeof(quotient));
  
!     while( q_place >= 0 )
        {
!       // We develop our guess for a quotient by dividing the top two places of
!       // the numerator area by C
!       uint128 temp;
!       uint64_t *temp64 = PTRCAST(uint64_t, &temp);
! 
!       temp64[1] = numerator.i64[q_place+2];
!       temp64[0] = numerator.i64[q_place+1];
! 
!       quotient.i64[q_place] = temp / divisor64[1];
! 
!       // Now we multiply our 64-bit guess by the 128-bit CD to get the
!       // three-place value we are going to subtract from the numerator area.
!       // We use the bottom three i64[] places of an int256 structure to hold
!       // that three-place value
!       int256 subber;
!       subber.i64[2] = 0;
! 
!       // Start with the bottom 128 bits of the "subber"
!       subber.i128[0] = (uint128) divisor64[0] * quotient.i64[q_place];
! 
!       // Get the next 128 bits of subber
!       temp = (uint128) divisor64[1] * quotient.i64[q_place];
! 
!       // Add the top of the first product to the bottom of the second:
!       subber.i64[1] += temp64[0];
  
!       // See if there was an overflow:
!       if( subber.i64[1] < temp64[0] )
          {
!         // There was an overflow
!         subber.i64[2] = 1;
          }
-       // And now put the top of the second product into place:
-       subber.i64[2] += temp64[1];
- 
-       // "subber" is now the three-place product of the two-place divisor times
-       // the one-place guess
- 
-       // We now subtract the three-place subber from the appropriate place of
-       // the numerator:
  
!       uint64_t borrow = 0;
!       for(size_t j=0; j<3; j++)
          {
!         if( numerator.i64[q_place + j] == 0 && borrow )
            {
!           // We are subtracting from zero and we have a borrow.  Leave the
!           // borrow on and just do the subtraction:
!           numerator.i64[q_place + j] -= subber.i64[j];
            }
!         else
            {
!           uint64_t stash = numerator.i64[q_place + j];
!           numerator.i64[q_place + j] -= borrow;
!           numerator.i64[q_place + j] -= subber.i64[j];
!           if( numerator.i64[q_place + j] > stash )
!             {
!             // After subtracting, the value got bigger, which means we have
!             // to borrow from the next value to the left
!             borrow = 1;
!             }
!           else
!             {
!             borrow = 0;
!             }
            }
          }
-       // The three-place subber has been removed from the numerator.
  
!       // Now Algorithm D comes back into play.  Knuth has proved that the guess
!       // is usually correct, but sometimes can be one too large, which means
!       // that the numerator area goes negative.  On rare occasions, the guess can
!       // be two too large.  So, we have to make sure that the numerator area is
!       // actually positive by adding subber back in.
  
!       while( numerator.i64[q_place+2] & 0x8000000000000000UL )
          {
!         // We need to add subber back into the numerator area
!         uint64_t carry = 0;
!         for(size_t ii=0; ii<3; ii++)
!           {
!           if( numerator.i64[q_place + ii] == 0xFFFFFFFFFFFFFFFFUL && carry )
!             {
!             // We are at the top and have a carry.  Just leave the carry on
!             // and do the addition:
!             numerator.i64[q_place + ii] += subber.i64[ii];
!             }
!           else
!             {
!             // We are not at the top.
!             uint64_t stash = numerator.i64[q_place + ii];
!             numerator.i64[q_place + ii] += carry;
!             numerator.i64[q_place + ii] += subber.i64[ii];
!             if( numerator.i64[q_place + ii] < stash )
!               {
!               // The addition caused the result to get smaller, meaning that
!               // we wrapped around:
!               carry = 1;
!               }
!             else
!               {
!               carry = 0;
!               }
!             }
!           }
          }
!       q_place -= 1;
        }
      }
    if( is_negative )
--- 1724,1833 ----
  
    // Now, let's see if we can do a simple divide-by-single-place calculation:
  
!   if( uint128_hi64(abs_divisor) == 0 )
      {
      // Yes!  The divisor fits into 64 bits:
!     divide_int256_by_int64(quotient, uint128_lo64(abs_divisor));
      }
    else
      {
!     // We have to do long division, and that means Knuth's Algorithm D.  The
!     // arithmetic below treats i64[0] as the least-significant limb and i64[3]
!     // as the most-significant limb on every host, so it does not depend on the
!     // in-memory byte order of __int128.
  
!     int256 numerator = quotient;
  
!     // Algorithm D requires the high-order divisor limb to have its top bit
!     // set.
!     int bits_to_shift = clz_uint64(uint128_hi64(abs_divisor));
!     shift_left_int256(numerator, bits_to_shift);
!     uint128 normalized_divisor = abs_divisor << bits_to_shift;
  
!     uint64_t divisor_low  = uint128_lo64(normalized_divisor);
!     uint64_t divisor_high = uint128_hi64(normalized_divisor);
  
!     quotient = int256{};
  
!     for( int q_place = 1; q_place >= 0; q_place-- )
        {
!       uint64_t qhat;
!       uint64_t rhat;
  
!       if( numerator.i64[q_place + 2] == divisor_high )
          {
!         qhat = UINT64_MAX;
!         rhat = numerator.i64[q_place + 1];
!         }
!       else
!         {
!         uint128 temp = uint128_from_limbs(numerator.i64[q_place + 2],
!                                           numerator.i64[q_place + 1]);
!         qhat = static_cast<uint64_t>(temp / divisor_high);
!         rhat = static_cast<uint64_t>(temp % divisor_high);
          }
  
!       // Correct the guess if qhat * divisor_low is too large.
!       while( true )
          {
!         uint128 left  = static_cast<uint128>(qhat) * divisor_low;
!         uint128 right = (static_cast<uint128>(rhat) << 64)
!                       | numerator.i64[q_place];
! 
!         if( left <= right )
            {
!           break;
            }
! 
!         qhat -= 1;
!         uint128 expanded_rhat = static_cast<uint128>(rhat) + divisor_high;
!         rhat = static_cast<uint64_t>(expanded_rhat);
!         if( expanded_rhat >> 64 )
            {
!           break;
            }
          }
  
!       // Multiply the two-limb divisor by the one-limb quotient guess.  The
!       // product occupies at most three limbs.
!       uint128 product0 = static_cast<uint128>(qhat) * divisor_low;
!       uint128 product1 = static_cast<uint128>(qhat) * divisor_high;
  
!       uint64_t subber[3];
!       subber[0] = uint128_lo64(product0);
!       product1 += uint128_hi64(product0);
!       subber[1] = uint128_lo64(product1);
!       subber[2] = uint128_hi64(product1);
! 
!       bool borrow = false;
!       for( int j=0; j<3; j++ )
          {
!         uint128 subtrahend = static_cast<uint128>(subber[j])
!                            + static_cast<uint128>(borrow ? 1 : 0);
!         uint64_t old_value = numerator.i64[q_place + j];
!         numerator.i64[q_place + j] = old_value - uint128_lo64(subtrahend);
!         borrow = (subtrahend >> 64) || old_value < uint128_lo64(subtrahend);
          }
! 
!       // If the subtraction went negative, the guess was one too high.  Add the
!       // divisor back and decrement the quotient limb.
!       if( borrow )
!         {
!         qhat -= 1;
! 
!         uint128 sum = static_cast<uint128>(numerator.i64[q_place])
!                     + divisor_low;
!         numerator.i64[q_place] = uint128_lo64(sum);
! 
!         sum = static_cast<uint128>(numerator.i64[q_place + 1])
!             + divisor_high
!             + uint128_hi64(sum);
!         numerator.i64[q_place + 1] = uint128_lo64(sum);
! 
!         numerator.i64[q_place + 2] += uint128_hi64(sum);
!         }
! 
!       quotient.i64[q_place] = qhat;
        }
      }
    if( is_negative )
*************** divide_int128_by_int128(int256   &quotie
*** 1823,1828 ****
--- 1836,1842 ----
      }
    }
  
+ 
  extern "C"
  void
  __gg__dividef1_phase2(cbl_arith_format_t ,
*************** __gg__dividef1_phase2(cbl_arith_format_t
*** 1870,1876 ****
        a_value = (GCOB_FP128) multiply_intermediate_int128;
        if( multiply_intermediate_rdigits )
          {
!         a_value /= (GCOB_FP128)__gg__power_of_ten(multiply_intermediate_rdigits);
          }
        b_value = __gg__float128_from_qualified_field(C[0].field,
                                                      C[0].offset,
--- 1884,1891 ----
        a_value = (GCOB_FP128) multiply_intermediate_int128;
        if( multiply_intermediate_rdigits )
          {
!         a_value /= 
!                  (GCOB_FP128)__gg__power_of_ten(multiply_intermediate_rdigits);
          }
        b_value = __gg__float128_from_qualified_field(C[0].field,
                                                      C[0].offset,
*************** __gg__dividef1_phase2(cbl_arith_format_t
*** 1881,1888 ****
        {
        // fixed times fixed
  
!       // We have two 128-bit numbers.  Call them AB and CD, where A, B, C, D are
!       // 64-bit "digits".  We need to multiply them to create a 256-bit result
  
        int dividend_rdigits;
        __int128 dividend = __gg__binary_value_from_qualified_field(
--- 1896,1904 ----
        {
        // fixed times fixed
  
!       // We have two 128-bit numbers.  Call them AB and CD, where A, B, C, D
!       // are 64-bit "digits".  We need to multiply them to create a 256-bit
!       // result
  
        int dividend_rdigits;
        __int128 dividend = __gg__binary_value_from_qualified_field(
*************** __gg__dividef1_phase2(cbl_arith_format_t
*** 1910,1916 ****
          // At this point, we assign the quotient to *C.
        *compute_error |= conditional_stash(C[0].field, C[0].offset, C[0].size,
                                            on_size_error,
!                                           quotient.i128[0],
                                            quotient_rdigits,
                                            *rounded++);
  
--- 1926,1932 ----
          // At this point, we assign the quotient to *C.
        *compute_error |= conditional_stash(C[0].field, C[0].offset, C[0].size,
                                            on_size_error,
!                                           int256_get_u128(quotient, 0),
                                            quotient_rdigits,
                                            *rounded++);
  
*************** __gg__dividef23(cbl_arith_format_t ,
*** 2014,2020 ****
          {
          *compute_error |= conditional_stash(C[i].field, C[i].offset, C[i].size,
                                              on_size_error,
!                                             quotient.i128[0],
                                              quotient_rdigits,
                                              *rounded++);
          }
--- 2030,2036 ----
          {
          *compute_error |= conditional_stash(C[i].field, C[i].offset, C[i].size,
                                              on_size_error,
!                                             int256_get_u128(quotient, 0),
                                              quotient_rdigits,
                                              *rounded++);
          }
*************** __gg__dividef45(cbl_arith_format_t ,
*** 2117,2123 ****
                                                C[1].offset,
                                                C[1].size,
                                                on_size_error,
!                                               quotient.i128[0],
                                                quotient_rdigits,
                                                *rounded_p++);
            unrounded_quotient = __gg__binary_value_from_qualified_field(
--- 2133,2139 ----
                                                C[1].offset,
                                                C[1].size,
                                                on_size_error,
!                                               int256_get_u128(quotient, 0),
                                                quotient_rdigits,
                                                *rounded_p++);
            unrounded_quotient = __gg__binary_value_from_qualified_field(
*************** __gg__dividef45(cbl_arith_format_t ,
*** 2131,2137 ****
            {
            conditional_stash(C[1].field, C[1].offset, C[1].size,
                              false,
!                             quotient.i128[0],
                              quotient_rdigits,
                              truncation_e);
            unrounded_quotient = __gg__binary_value_from_qualified_field(
--- 2147,2153 ----
            {
            conditional_stash(C[1].field, C[1].offset, C[1].size,
                              false,
!                             int256_get_u128(quotient, 0),
                              quotient_rdigits,
                              truncation_e);
            unrounded_quotient = __gg__binary_value_from_qualified_field(
*************** __gg__dividef45(cbl_arith_format_t ,
*** 2144,2150 ****
                                                C[1].offset,
                                                C[1].size,
                                                on_size_error,
!                                               quotient.i128[0],
                                                quotient_rdigits,
                                                *rounded_p++);
            break;
--- 2160,2166 ----
                                                C[1].offset,
                                                C[1].size,
                                                on_size_error,
!                                               int256_get_u128(quotient, 0),
                                                quotient_rdigits,
                                                *rounded_p++);
            break;
*************** __gg__dividef45(cbl_arith_format_t ,
*** 2175,2187 ****
          temp_rdigits = unrounded_quotient_digits + divisor_rdigits;
  
          int256 odividend = {};
          if( dividend < 0 )
            {
!           memset(&odividend, 0xFF, sizeof(odividend));
            }
  
-         memcpy(&odividend, &dividend, sizeof(dividend));
- 
          // We need to line up the rdigits so that we can subtract temp from
          // odividend:
  
--- 2191,2203 ----
          temp_rdigits = unrounded_quotient_digits + divisor_rdigits;
  
          int256 odividend = {};
+         int256_set_u128(odividend, 0, static_cast<uint128>(dividend));
          if( dividend < 0 )
            {
!           odividend.i64[2] = UINT64_MAX;
!           odividend.i64[3] = UINT64_MAX;
            }
  
          // We need to line up the rdigits so that we can subtract temp from
          // odividend:
  
*************** __gg__dividef45(cbl_arith_format_t ,
*** 2205,2211 ****
                                                C[0].offset,
                                                C[0].size,
                                                on_size_error,
!                                               odividend.i128[0],
                                                temp_rdigits,
                                                truncation_e);
            }
--- 2221,2227 ----
                                                C[0].offset,
                                                C[0].size,
                                                on_size_error,
!                                               int256_get_u128(odividend, 0),
                                                temp_rdigits,
                                                truncation_e);
            }
diff -Nrcpad gcc-17-20260705/libgcobol/inspect.cc gcc-17-20260712/libgcobol/inspect.cc
*** gcc-17-20260705/libgcobol/inspect.cc	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/libgcobol/inspect.cc	Sun Jul 12 22:32:18 2026
***************
*** 64,69 ****
--- 64,70 ----
  #include "common-defs.h"
  #include "io.h"
  #include "gcobolio.h"
+ #include "cobol-endian.h"
  #include "libgcobol.h"
  #include "gfileio.h"
  #include "charmaps.h"
***************
*** 79,84 ****
--- 80,97 ----
  
  #define NO_RDIGITS (0)
  
+ static inline char *
+ as_chars(unsigned char *p)
+   {
+   return reinterpret_cast<char *>(p);
+   }
+ 
+ static inline const char *
+ as_chars(const unsigned char *p)
+   {
+   return reinterpret_cast<const char *>(p);
+   }
+ 
  typedef std::vector<cbl_char_t>::const_iterator char_it_c ;
  typedef std::vector<cbl_char_t>::iterator       char_it   ;
  
*************** funky_find( const char *piece,
*** 91,106 ****
    const char *retval = NULL;
  
    size_t length_of_piece = piece_end - piece;
!   if(length_of_piece == 0)
      {
      __gg__abort("funky_find() length_of_piece shouldn't be zero");
      }
  
!   whole_end -= length_of_piece;
  
!   while( whole <= whole_end )
      {
!     if( memcmp( piece, whole, length_of_piece) == 0 )
        {
        retval = whole;
        break;
--- 104,126 ----
    const char *retval = NULL;
  
    size_t length_of_piece = piece_end - piece;
!   size_t length_of_whole = whole_end - whole;
! 
!   if( length_of_piece == 0 )
      {
      __gg__abort("funky_find() length_of_piece shouldn't be zero");
      }
  
!   if( length_of_piece > length_of_whole )
!     {
!     return NULL;
!     }
  
!   const char *last = whole_end - length_of_piece;
! 
!   while( whole <= last )
      {
!     if( memcmp(piece, whole, length_of_piece) == 0 )
        {
        retval = whole;
        break;
*************** funky_find_wide( char_it_c needle,
*** 122,146 ****
    char_it_c retval = notfound;
  
    size_t length_of_piece = needle_end - needle;
!   if(length_of_piece == 0)
      {
      __gg__abort("funky_find_wide() length_of_piece shouldn't be zero");
      }
  
!   haystack_end -= length_of_piece;
  
!   while( haystack <= haystack_end )
      {
      // Compare the memory at needle to the memory at haystack
!     if( memcmp( &(*needle),
!                 &(*haystack),
!                 length_of_piece*sizeof(cbl_char_t)) == 0 )
        {
        // They are the same; return where needle was found
        retval = haystack;
        break;
        }
!     // Not found; move to the next location in the haystach
      haystack += 1;
      }
    return retval;
--- 142,173 ----
    char_it_c retval = notfound;
  
    size_t length_of_piece = needle_end - needle;
!   size_t length_of_haystack = haystack_end - haystack;
! 
!   if( length_of_piece == 0 )
      {
      __gg__abort("funky_find_wide() length_of_piece shouldn't be zero");
      }
  
!   if( length_of_piece > length_of_haystack )
!     {
!     return notfound;
!     }
  
!   char_it_c last = haystack_end - length_of_piece;
! 
!   while( haystack <= last )
      {
      // Compare the memory at needle to the memory at haystack
!     if( memcmp(&(*needle),
!                &(*haystack),
!                length_of_piece * sizeof(cbl_char_t)) == 0 )
        {
        // They are the same; return where needle was found
        retval = haystack;
        break;
        }
!     // Not found; move to the next location in the haystack
      haystack += 1;
      }
    return retval;
*************** funky_find_backward(const char *piece,
*** 155,210 ****
    const char *retval = NULL;
  
    size_t length_of_piece = piece_end - piece;
!   if(length_of_piece == 0)
      {
      __gg__abort("funky_find_backward() length_of_piece shouldn't be zero");
      }
  
!   whole_end -= length_of_piece;
  
!   while( whole <= whole_end )
      {
!     if( memcmp( piece, whole_end, length_of_piece) == 0 )
        {
!       retval = whole_end;
        break;
        }
!     whole_end -= 1;
      }
    return retval;
    }
  
  static char_it_c
  funky_find_wide_backward( char_it_c needle,
!                  char_it_c needle_end,    // Actually end+1
!                  char_it_c haystack,
!                  char_it_c haystack_end,  // Actually end+1
!                  char_it_c notfound)
    {
    // We are looking for the needle in the haystack
  
    char_it_c retval = notfound;
  
    size_t length_of_piece = needle_end - needle;
!   if(length_of_piece == 0)
      {
!     __gg__abort("funky_find_wide_backward() length_of_piece shouldn't be zero");
      }
  
!   haystack_end -= length_of_piece;
  
!   while( haystack <= haystack_end )
      {
!     if( memcmp( &(*needle),
!                 &(*haystack_end),
!                 length_of_piece*sizeof(cbl_char_t)) == 0 )
        {
        // They are the same; return where needle was found
!       retval = haystack_end;
        break;
        }
      // Not found; move to the next location in the haystack
!     haystack_end -= 1;
      }
    return retval;
    }
--- 182,252 ----
    const char *retval = NULL;
  
    size_t length_of_piece = piece_end - piece;
!   size_t length_of_whole = whole_end - whole;
! 
!   if( length_of_piece == 0 )
      {
      __gg__abort("funky_find_backward() length_of_piece shouldn't be zero");
      }
  
!   if( length_of_piece > length_of_whole )
!     {
!     return NULL;
!     }
  
!   const char *last = whole_end - length_of_piece;
! 
!   while( whole <= last )
      {
!     if( memcmp(piece, last, length_of_piece) == 0 )
        {
!       retval = last;
        break;
        }
!     last -= 1;
      }
    return retval;
    }
  
  static char_it_c
  funky_find_wide_backward( char_it_c needle,
!                           char_it_c needle_end,    // Actually end+1
!                           char_it_c haystack,
!                           char_it_c haystack_end,  // Actually end+1
!                           char_it_c notfound)
    {
    // We are looking for the needle in the haystack
  
    char_it_c retval = notfound;
  
    size_t length_of_piece = needle_end - needle;
!   size_t length_of_haystack = haystack_end - haystack;
! 
!   if( length_of_piece == 0 )
      {
!     __gg__abort(
!       "funky_find_wide_backward() length_of_piece shouldn't be zero");
      }
  
!   if( length_of_piece > length_of_haystack )
!     {
!     return notfound;
!     }
  
!   char_it_c last = haystack_end - length_of_piece;
! 
!   while( haystack <= last )
      {
!     if( memcmp(&(*needle),
!                &(*last),
!                length_of_piece * sizeof(cbl_char_t)) == 0 )
        {
        // They are the same; return where needle was found
!       retval = last;
        break;
        }
      // Not found; move to the next location in the haystack
!     last -= 1;
      }
    return retval;
    }
*************** typedef struct id_2_result
*** 264,269 ****
--- 306,318 ----
    size_t result;
    } id_2_result;
  
+ static void
+ append_normalized_character(normalized_operand &operand, cbl_char_t ch)
+   {
+   operand.the_vectorxxxx.push_back(ch);
+   operand.the_characters += static_cast<char>(ch & 0xFF);
+   }
+ 
  static normalized_operand
  normalize_id( const cblc_field_t *field,
                size_t              field_o,
*************** normalize_id( const cblc_field_t *field,
*** 272,444 ****
    {
    normalized_operand retval;
  
!   if( field )
      {
!     charmap_t *charmap = __gg__get_charmap(encoding);
  
!     // This is the old-style byte-based assumption
!     const unsigned char *data = field->data + field_o;
!     cbl_figconst_t figconst
!       = (cbl_figconst_t)(field->attr & FIGCONST_MASK);
  
!     retval.offset = 0;
!     retval.length = field_s;
  
!     if( field->type == FldNumericDisplay )
        {
!       // The value is NumericDisplay.
!       if( field->attr & separate_e )
!         {
!         // Because the sign is a separate plus or minus, the length
!         // gets reduced by one:
!         retval.length = field_s - 1;
!         if( field->attr & leading_e )
!           {
!           // Because the sign character is LEADING, we increase the
!           // offset by one
!           retval.offset = 1;
!           }
!         }
!       for( size_t i=retval.offset; i<retval.length; i+=1 )
!         {
!         // Because we are dealing with a NumericDisplay that might have
!         // the minus bit turned on, we will to mask it off as we copy the
!         // input characters over to retval:
!         retval.the_characters += charmap->set_digit_negative(data[i], false);
!         }
        }
!     else
        {
!       // We are set up to create the_characters;
!       if( figconst == normal_value_e )
!         {
!         for( size_t i=retval.offset; i<retval.length; i+=1 )
!           {
!           retval.the_characters += data[i];
!           }
!         }
!       else
!         {
!         uint8_t ch =  charmap->figconst_character(figconst);
!         for( size_t i=retval.offset; i<retval.length; i+=1 )
!           {
!           retval.the_characters += ch;
!           }
!         }
        }
      }
-   else
-     {
-     // There is no field, so leave the_characters empty.
-     retval.offset = 0;
-     retval.length = 0;
-     }
  
!   if( field )
      {
!     cbl_encoding_t source_encoding = field->encoding;
!     const charmap_t *charmap_source = __gg__get_charmap(source_encoding);
!     charmap_t *charmap = __gg__get_charmap(encoding);
!     int stride = charmap->stride();
  
!     const unsigned char *data = field->data + field_o;
!     cbl_figconst_t figconst = (cbl_figconst_t)(field->attr & FIGCONST_MASK);
!     if( figconst == normal_value_e )
        {
!       retval.offset = 0;
!       retval.length = field_s / stride;
  
        if( field->type == FldNumericDisplay )
          {
!         // The value is NumericDisplay, so we might need to adjust the offset
!         // and length:
!         if( field->attr & separate_e )
            {
!           // Because the sign is a separate plus or minus, the length
!           // gets reduced by one:
!           retval.length = field_s - 1;
!           if( field->attr & leading_e )
              {
!             // Because the sign character is LEADING, we increase the
!             // offset by one
!             retval.offset = 1;
!             }
            }
!         }
!       // We are ready to convert from the input to UTF32
!       size_t converted_characters;
!       const char *converted = __gg__iconverter(source_encoding,
!                                                DEFAULT_32_ENCODING,
!                                                data+retval.offset * stride,
!                                                retval.length * stride,
!                                                &converted_characters);
!       // We are ready to copy the characters over:
!       for( size_t i=0; i<converted_characters; i+=width_of_utf32 )
!         {
!         // Because we are dealing with a NumericDisplay that might have
!         // the minus bit turned on, we will to mask it off as we copy the
!         // input characters over to retval:
!         cbl_char_t ch = charmap->getch(converted, i);
!         if( field->type == FldNumericDisplay )
            {
!           if( charmap_source->is_like_ebcdic() )
!             {
!             // In EBCDIC, a flagged negative digit 0xF0 through 0xF9 becomes
!             // 0xD0 through 0xD9.  Those represent the characters
!             // "}JKLMNOPQR", which, now that we are in UTF32 space, don't have
!             // the right bit pattern to be fixed with set_digit_negative().
!             // So, we fix it separately with this table:  Note that location
!             // 0x7D, which is ASCII '{', becomes 0x30 '0'.  See also that
!             // locations 0x4A through 0x52 become 0x31 through 0x39.
!             static const uint8_t fixit[256] =
!               {
!               0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x80, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
!               0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x81, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
!               0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x82, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
!               0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x83, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
!               0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x84, 0x49, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36,
!               0x37, 0x38, 0x39, 0x53, 0x54, 0x55, 0x56, 0x57, 0x85, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
!               0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x86, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
!               0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x87, 0x79, 0x7a, 0x7b, 0x7c, 0x30, 0x7e, 0x7f,
!               0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
!               0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x89, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
!               0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0x8a, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
!               0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0x8b, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
!               0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0x8c, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
!               0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0x8d, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
!               0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0x8e, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
!               0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0x8f, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
!               };
!             ch = fixit[ch & 0xFF];
!             }
!           else
!             {
!             ch = charmap->set_digit_negative(ch, false);
!             }
            }
-         retval.the_vectorxxxx.push_back(ch);
-         }
-       }
-     else
-       {
-       // We need to fill the field with a figurative constant:
-       // We are set up to create the_characters;
-       charmap_t *charmap32 = __gg__get_charmap(DEFAULT_32_ENCODING);
-       uint8_t ch =  charmap32->figconst_character(figconst);
-       for( size_t i=retval.offset; i<retval.length; i+=1 )
-         {
-         retval.the_characters += ch;
-         retval.the_vectorxxxx.push_back(ch);
          }
        }
      }
    else
      {
!     // There is no field, so leave the_characters empty.
!     retval.offset = 0;
!     retval.length = 0;
      }
  
    return retval;
    }
  
--- 321,442 ----
    {
    normalized_operand retval;
  
!   retval.offset = 0;
!   retval.length = 0;
! 
!   if( !field )
      {
!     return retval;
!     }
  
!   cbl_encoding_t source_encoding = field->encoding;
!   const charmap_t *charmap_source = __gg__get_charmap(source_encoding);
!   charmap_t *charmap_host32 = __gg__get_charmap(HOST_32_ENCODING);
!   (void)encoding;
!   int source_stride = charmap_source->stride();
  
!   const unsigned char *data = field->data + field_o;
!   cbl_figconst_t figconst
!     = static_cast<cbl_figconst_t>(field->attr & FIGCONST_MASK);
  
!   size_t character_count = field_s / source_stride;
!   size_t offset = 0;
!   size_t length = character_count;
! 
!   if( field->type == FldNumericDisplay && (field->attr & separate_e) )
!     {
!     if( length > 0 )
        {
!       length -= 1;
        }
!     if( field->attr & leading_e )
        {
!       offset = 1;
        }
      }
  
!   retval.offset = offset;
!   retval.length = length;
! 
!   if( figconst == normal_value_e )
      {
!     size_t converted_bytes = 0;
!     const char *converted = __gg__iconverter(source_encoding,
!                                              HOST_32_ENCODING,
!                                              data + offset * source_stride,
!                                              length * source_stride,
!                                              &converted_bytes);
  
!     for( size_t i = 0; i < converted_bytes; i += width_of_utf32 )
        {
!       cbl_char_t ch = charmap_host32->getch(converted, i);
  
        if( field->type == FldNumericDisplay )
          {
!         if( charmap_source->is_like_ebcdic() )
            {
!           // In EBCDIC, a flagged negative digit 0xF0 through 0xF9 becomes
!           // 0xD0 through 0xD9.  Those represent the characters
!           // "}JKLMNOPQR", which, now that we are in UTF32 space, don't
!           // have the right bit pattern to be fixed with set_digit_negative().
!           // So, we fix it separately with this table.  Note that location
!           // 0x7D, which is ASCII '{', becomes 0x30 '0'.  See also that
!           // locations 0x4A through 0x52 become 0x31 through 0x39.
!           static const uint8_t fixit[256] =
              {
!       0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
!       0x80, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
!       0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
!       0x81, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
!       0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
!       0x82, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
!       0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
!       0x83, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
!       0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
!       0x84, 0x49, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36,
!       0x37, 0x38, 0x39, 0x53, 0x54, 0x55, 0x56, 0x57,
!       0x85, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
!       0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
!       0x86, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
!       0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
!       0x87, 0x79, 0x7a, 0x7b, 0x7c, 0x30, 0x7e, 0x7f,
!       0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
!       0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
!       0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
!       0x89, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
!       0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
!       0x8a, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
!       0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
!       0x8b, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
!       0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
!       0x8c, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
!       0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
!       0x8d, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
!       0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
!       0x8e, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
!       0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
!       0x8f, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
!             };
!           ch = fixit[ch & 0xFF];
            }
!         else
            {
!           ch = charmap_host32->set_digit_negative(ch, false);
            }
          }
+       append_normalized_character(retval, ch);
        }
      }
    else
      {
!     cbl_char_t ch = charmap_host32->figconst_character(figconst);
!     for( size_t i = 0; i < length; i += 1 )
!       {
!       append_normalized_character(retval, ch);
!       }
      }
  
+   retval.length = retval.the_vectorxxxx.size();
    return retval;
    }
  
*************** normalize_id_sbc( const cblc_field_t *fi
*** 475,481 ****
            }
          }
        // At this point, the bytes start at data, and there are field_s of them.
!       retval.assign(reinterpret_cast<const char *>(data), field_s);
        if( field->attr & signable_e )
          {
          if( field->attr & leading_e )
--- 473,479 ----
            }
          }
        // At this point, the bytes start at data, and there are field_s of them.
!       retval.assign(as_chars(data), field_s);
        if( field->attr & signable_e )
          {
          if( field->attr & leading_e )
*************** normalize_id_sbc( const cblc_field_t *fi
*** 495,501 ****
        // We aren't dealing with numeric-display, so
        if( figconst == normal_value_e )
          {
!         retval.assign(reinterpret_cast<const char *>(data), field_s);
          }
        else
          {
--- 493,499 ----
        // We aren't dealing with numeric-display, so
        if( figconst == normal_value_e )
          {
!         retval.assign(as_chars(data), field_s);
          }
        else
          {
*************** the_alpha_and_omega(const normalized_ope
*** 557,569 ****
        unambiguous.
  
        The BEFORE phrase modifies the character position to use as the rightmost
!       position in source for the corresponding comparison operation. Comparisons
        in source occur only to the left of the first occurrence of delimiter. If
        delimiter is not present in source, then the comparison proceeds as if
        there were no BEFORE phrase.
  
        The AFTER phrase modifies the character position to use as the leftmost
!       position in source for the corresponding comparison operation. Comparisons
        in source occur only to the right of the first occurrence of delimiter.
        This character position is the one immediately to the right of the
        rightmost character of the delimiter found. If delimiter is not found in
--- 555,569 ----
        unambiguous.
  
        The BEFORE phrase modifies the character position to use as the rightmost
!       position in source for the corresponding comparison
!       operation. Comparisons
        in source occur only to the left of the first occurrence of delimiter. If
        delimiter is not present in source, then the comparison proceeds as if
        there were no BEFORE phrase.
  
        The AFTER phrase modifies the character position to use as the leftmost
!       position in source for the corresponding comparison
!       operation. Comparisons
        in source occur only to the right of the first occurrence of delimiter.
        This character position is the one immediately to the right of the
        rightmost character of the delimiter found. If delimiter is not found in
*************** the_alpha_and_omega_sbc(const std::strin
*** 668,680 ****
        unambiguous.
  
        The BEFORE phrase modifies the character position to use as the rightmost
!       position in source for the corresponding comparison operation. Comparisons
        in source occur only to the left of the first occurrence of delimiter. If
        delimiter is not present in source, then the comparison proceeds as if
        there were no BEFORE phrase.
  
        The AFTER phrase modifies the character position to use as the leftmost
!       position in source for the corresponding comparison operation. Comparisons
        in source occur only to the right of the first occurrence of delimiter.
        This character position is the one immediately to the right of the
        rightmost character of the delimiter found. If delimiter is not found in
--- 668,682 ----
        unambiguous.
  
        The BEFORE phrase modifies the character position to use as the rightmost
!       position in source for the corresponding comparison
!       operation. Comparisons
        in source occur only to the left of the first occurrence of delimiter. If
        delimiter is not present in source, then the comparison proceeds as if
        there were no BEFORE phrase.
  
        The AFTER phrase modifies the character position to use as the leftmost
!       position in source for the corresponding comparison
!       operation. Comparisons
        in source occur only to the right of the first occurrence of delimiter.
        This character position is the one immediately to the right of the
        rightmost character of the delimiter found. If delimiter is not found in
*************** the_alpha_and_omega_backward( const norm
*** 764,770 ****
        alpha = found + id_before.length;
        }
  
!     char_it_c omega_found = funky_find_wide_backward(id_before.the_vectorxxxx.begin(),
                                              id_before.the_vectorxxxx.end(),
                                              alpha_it,
                                              omega_it,
--- 766,773 ----
        alpha = found + id_before.length;
        }
  
!     char_it_c omega_found
!       = funky_find_wide_backward(id_before.the_vectorxxxx.begin(),
                                              id_before.the_vectorxxxx.end(),
                                              alpha_it,
                                              omega_it,
*************** the_alpha_and_omega_backward( const norm
*** 798,804 ****
        omega = alpha;
        }
  
!     char_it_c omega_found = funky_find_wide_backward(id_after.the_vectorxxxx.begin(),
                                              id_after.the_vectorxxxx.end(),
                                              alpha_it,
                                              omega_it,
--- 801,808 ----
        omega = alpha;
        }
  
!     char_it_c omega_found
!       = funky_find_wide_backward(id_after.the_vectorxxxx.begin(),
                                              id_after.the_vectorxxxx.end(),
                                              alpha_it,
                                              omega_it,
*************** inspect_backward_format_1(const size_t i
*** 839,845 ****
    size_t              id1_s = params[cblc_index].size  ;
    cblc_index += 1;
    // normalize it, according to the language specification.
!   normalized_operand normalized_id_1 = normalize_id(id1, id1_o, id1_s, id1->encoding);
  
    std::vector<comparand> comparands;
  
--- 843,850 ----
    size_t              id1_s = params[cblc_index].size  ;
    cblc_index += 1;
    // normalize it, according to the language specification.
!   normalized_operand normalized_id_1
!     = normalize_id(id1, id1_o, id1_s, id1->encoding);
  
    std::vector<comparand> comparands;
  
*************** inspect_backward_format_1(const size_t i
*** 885,891 ****
            cblc_index += 1;
  
            normalized_operand normalized_id_4_before
!             = normalize_id(id4_before, id4_before_o, id4_before_s, id1->encoding);
  
            normalized_operand normalized_id_4_after
              = normalize_id(id4_after, id4_after_o, id4_after_s, id1->encoding);
--- 890,899 ----
            cblc_index += 1;
  
            normalized_operand normalized_id_4_before
!             = normalize_id(id4_before,
!                            id4_before_o,
!                            id4_before_s,
!                            id1->encoding);
  
            normalized_operand normalized_id_4_after
              = normalize_id(id4_after, id4_after_o, id4_after_s, id1->encoding);
*************** inspect_backward_format_1(const size_t i
*** 940,946 ****
              cblc_index += 1;
  
              next_comparand.identifier_3
!                                     = normalize_id(id3, id3_o, id3_s, id1->encoding);
  
              next_comparand.alpha
                = normalized_id_1.the_characters.c_str();
--- 948,954 ----
              cblc_index += 1;
  
              next_comparand.identifier_3
!               = normalize_id(id3, id3_o, id3_s, id1->encoding);
  
              next_comparand.alpha
                = normalized_id_1.the_characters.c_str();
*************** inspect_backward_format_1(const size_t i
*** 948,957 ****
                = next_comparand.alpha + normalized_id_1.length;
  
              normalized_operand normalized_id_4_before
!               = normalize_id(id4_before, id4_before_o, id4_before_s, id1->encoding);
  
              normalized_operand normalized_id_4_after
!               = normalize_id(id4_after, id4_after_o, id4_after_s, id1->encoding);
  
              next_comparand.alpha_it = normalized_id_1.the_vectorxxxx.begin();
              next_comparand.omega_it = normalized_id_1.the_vectorxxxx.end();
--- 956,971 ----
                = next_comparand.alpha + normalized_id_1.length;
  
              normalized_operand normalized_id_4_before
!               = normalize_id(id4_before,
!                            id4_before_o,
!                            id4_before_s,
!                            id1->encoding);
  
              normalized_operand normalized_id_4_after
!               = normalize_id(id4_after,
!                              id4_after_o,
!                              id4_after_s,
!                              id1->encoding);
  
              next_comparand.alpha_it = normalized_id_1.the_vectorxxxx.begin();
              next_comparand.omega_it = normalized_id_1.the_vectorxxxx.end();
*************** __gg__inspect_format_1( int backward,
*** 1246,1252 ****
            cblc_index += 1;
  
            normalized_operand normalized_id_4_before
!             = normalize_id(id4_before, id4_before_o, id4_before_s, id1->encoding);
  
            normalized_operand normalized_id_4_after
              = normalize_id(id4_after, id4_after_o, id4_after_s, id1->encoding);
--- 1260,1269 ----
            cblc_index += 1;
  
            normalized_operand normalized_id_4_before
!             = normalize_id(id4_before,
!                            id4_before_o,
!                            id4_before_s,
!                            id1->encoding);
  
            normalized_operand normalized_id_4_after
              = normalize_id(id4_after, id4_after_o, id4_after_s, id1->encoding);
*************** __gg__inspect_format_1( int backward,
*** 1315,1324 ****
              next_comparand.omega_it = normalized_id_1.the_vectorxxxx.end();
  
              normalized_operand normalized_id_4_before
!               = normalize_id(id4_before, id4_before_o, id4_before_s, id1->encoding);
  
              normalized_operand normalized_id_4_after
!               = normalize_id(id4_after, id4_after_o, id4_after_s, id1->encoding);
  
              the_alpha_and_omega(normalized_id_4_before,
                                  normalized_id_4_after,
--- 1332,1347 ----
              next_comparand.omega_it = normalized_id_1.the_vectorxxxx.end();
  
              normalized_operand normalized_id_4_before
!               = normalize_id(id4_before,
!                            id4_before_o,
!                            id4_before_s,
!                            id1->encoding);
  
              normalized_operand normalized_id_4_after
!               = normalize_id(id4_after,
!                              id4_after_o,
!                              id4_after_s,
!                              id1->encoding);
  
              the_alpha_and_omega(normalized_id_4_before,
                                  normalized_id_4_after,
*************** __gg__inspect_format_1( int backward,
*** 1359,1365 ****
          // to the left of the comparand's alpha.
          continue;
          }
!       if( leftmost + comparands[k].identifier_3.length > comparands[k].omega_it )
          {
          // This can't be a match, because the rightmost
          // character of the comparand falls to the right
--- 1382,1389 ----
          // to the left of the comparand's alpha.
          continue;
          }
!       if( leftmost + comparands[k].identifier_3.length
!           > comparands[k].omega_it )
          {
          // This can't be a match, because the rightmost
          // character of the comparand falls to the right
*************** inspect_backward_format_2(const size_t i
*** 1550,1556 ****
  
    // normalize it, according to the language specification.
    normalized_operand normalized_id_1
!                                    = normalize_id(id1, id1_o, id1_s, id1->encoding);
  
    std::vector<comparand> comparands;
  
--- 1574,1580 ----
  
    // normalize it, according to the language specification.
    normalized_operand normalized_id_1
!     = normalize_id(id1, id1_o, id1_s, id1->encoding);
  
    std::vector<comparand> comparands;
  
*************** inspect_backward_format_2(const size_t i
*** 1586,1592 ****
          next_comparand.identifier_5
            = normalize_id(id5, id5_o, id5_s, id1->encoding);
          normalized_operand normalized_id_4_before
!           = normalize_id(id4_before, id4_before_o, id4_before_s, id1->encoding);
          normalized_operand normalized_id_4_after
            = normalize_id(id4_after, id4_after_o, id4_after_s, id1->encoding);
  
--- 1610,1619 ----
          next_comparand.identifier_5
            = normalize_id(id5, id5_o, id5_s, id1->encoding);
          normalized_operand normalized_id_4_before
!           = normalize_id(id4_before,
!                          id4_before_o,
!                          id4_before_s,
!                          id1->encoding);
          normalized_operand normalized_id_4_after
            = normalize_id(id4_after, id4_after_o, id4_after_s, id1->encoding);
  
*************** inspect_backward_format_2(const size_t i
*** 1647,1654 ****
            size_t              id4_after_s = params[cblc_index].size  ;
            cblc_index += 1;
  
!           next_comparand.identifier_3 = normalize_id(id3, id3_o, id3_s, id1->encoding);
!           next_comparand.identifier_5 = normalize_id(id5, id5_o, id5_s, id1->encoding);
  
            // Identifiers 3 and 5 have to be the same length.  But
            // but either, or both, can be figurative constants.  If
--- 1674,1683 ----
            size_t              id4_after_s = params[cblc_index].size  ;
            cblc_index += 1;
  
!           next_comparand.identifier_3
!             = normalize_id(id3, id3_o, id3_s, id1->encoding);
!           next_comparand.identifier_5
!             = normalize_id(id5, id5_o, id5_s, id1->encoding);
  
            // Identifiers 3 and 5 have to be the same length.  But
            // but either, or both, can be figurative constants.  If
*************** inspect_backward_format_2(const size_t i
*** 1673,1679 ****
              = next_comparand.alpha + normalized_id_1.length;
  
            normalized_operand normalized_id_4_before
!             = normalize_id(id4_before, id4_before_o, id4_before_s, id1->encoding);
            normalized_operand normalized_id_4_after
              = normalize_id(id4_after, id4_after_o, id4_after_s, id1->encoding);
  
--- 1702,1711 ----
              = next_comparand.alpha + normalized_id_1.length;
  
            normalized_operand normalized_id_4_before
!             = normalize_id(id4_before,
!                            id4_before_o,
!                            id4_before_s,
!                            id1->encoding);
            normalized_operand normalized_id_4_after
              = normalize_id(id4_after, id4_after_o, id4_after_s, id1->encoding);
  
*************** inspect_backward_format_2(const size_t i
*** 1719,1732 ****
          // to the left of the comparand's alpha.
          continue;
          }
!       if( rightmost + comparands[k].identifier_3.length > comparands[k].omega_it )
          {
          // This can't be a match, because the rightmost
          // character of the comparand falls to the right
          // of the comparand's omega
          continue;
          }
!       if( rightmost + comparands[k].identifier_3.length > the_end_of_the_world )
          {
          // This can't be a match, because the rightmost character of the
          // comparand falls past the new edge of id_1 established by a prior
--- 1751,1766 ----
          // to the left of the comparand's alpha.
          continue;
          }
!       if( rightmost + comparands[k].identifier_3.length
!           > comparands[k].omega_it )
          {
          // This can't be a match, because the rightmost
          // character of the comparand falls to the right
          // of the comparand's omega
          continue;
          }
!       if( rightmost + comparands[k].identifier_3.length
!           > the_end_of_the_world )
          {
          // This can't be a match, because the rightmost character of the
          // comparand falls past the new edge of id_1 established by a prior
*************** inspect_backward_format_2(const size_t i
*** 1784,1790 ****
              if( comparands[k].leading )
                {
                if(   rightmost
!                   + comparands[k].identifier_3.length * (comparands[k].leading_count +1)
                      == comparands[k].omega_it)
                  {
                  // This means that the match here is just the latest of a
--- 1818,1825 ----
              if( comparands[k].leading )
                {
                if(   rightmost
!                   + comparands[k].identifier_3.length
!                     * (comparands[k].leading_count + 1)
                      == comparands[k].omega_it)
                  {
                  // This means that the match here is just the latest of a
*************** inspect_backward_format_2(const size_t i
*** 1878,1884 ****
  
    // We've been working in UTF32; we convert back to the original id1 encoding.
    size_t bytes_converted;
!   const char *converted = __gg__iconverter( DEFAULT_32_ENCODING,
                                           id1->encoding,
                                           normalized_id_1.the_vectorxxxx.data(),
                                           normalized_id_1.length*width_of_utf32,
--- 1913,1919 ----
  
    // We've been working in UTF32; we convert back to the original id1 encoding.
    size_t bytes_converted;
!   const char *converted = __gg__iconverter( HOST_32_ENCODING,
                                           id1->encoding,
                                           normalized_id_1.the_vectorxxxx.data(),
                                           normalized_id_1.length*width_of_utf32,
*************** __gg__inspect_format_2( int backward,
*** 1914,1920 ****
  
    // normalize it, according to the language specification.
    normalized_operand normalized_id_1
!                                    = normalize_id(id1, id1_o, id1_s, id1->encoding);
  
    std::vector<comparand> comparands;
  
--- 1949,1955 ----
  
    // normalize it, according to the language specification.
    normalized_operand normalized_id_1
!     = normalize_id(id1, id1_o, id1_s, id1->encoding);
  
    std::vector<comparand> comparands;
  
*************** __gg__inspect_format_2( int backward,
*** 1951,1957 ****
          next_comparand.identifier_5
            = normalize_id(id5, id5_o, id5_s, id1->encoding);
          normalized_operand normalized_id_4_before
!           = normalize_id(id4_before, id4_before_o, id4_before_s, id1->encoding);
          normalized_operand normalized_id_4_after
            = normalize_id(id4_after, id4_after_o, id4_after_s, id1->encoding);
  
--- 1986,1995 ----
          next_comparand.identifier_5
            = normalize_id(id5, id5_o, id5_s, id1->encoding);
          normalized_operand normalized_id_4_before
!           = normalize_id(id4_before,
!                          id4_before_o,
!                          id4_before_s,
!                          id1->encoding);
          normalized_operand normalized_id_4_after
            = normalize_id(id4_after, id4_after_o, id4_after_s, id1->encoding);
  
*************** __gg__inspect_format_2( int backward,
*** 2042,2048 ****
              = next_comparand.alpha + normalized_id_1.length;
  
            normalized_operand normalized_id_4_before
!             = normalize_id(id4_before, id4_before_o, id4_before_s, id1->encoding);
            normalized_operand normalized_id_4_after
              = normalize_id(id4_after, id4_after_o, id4_after_s, id1->encoding);
  
--- 2080,2089 ----
              = next_comparand.alpha + normalized_id_1.length;
  
            normalized_operand normalized_id_4_before
!             = normalize_id(id4_before,
!                            id4_before_o,
!                            id4_before_s,
!                            id1->encoding);
            normalized_operand normalized_id_4_after
              = normalize_id(id4_after, id4_after_o, id4_after_s, id1->encoding);
  
*************** __gg__inspect_format_2( int backward,
*** 2249,2255 ****
  
    // We've been working in UTF32; we convert back to the original id1 encoding.
    size_t bytes_converted;
!   const char *converted = __gg__iconverter( DEFAULT_32_ENCODING,
                                           id1->encoding,
                                           normalized_id_1.the_vectorxxxx.data(),
                                           normalized_id_1.length*width_of_utf32,
--- 2290,2296 ----
  
    // We've been working in UTF32; we convert back to the original id1 encoding.
    size_t bytes_converted;
!   const char *converted = __gg__iconverter( HOST_32_ENCODING,
                                           id1->encoding,
                                           normalized_id_1.the_vectorxxxx.data(),
                                           normalized_id_1.length*width_of_utf32,
*************** normalize_for_inspect_format_4(const cbl
*** 2271,2277 ****
    if(var)
      {
      const charmap_t *charmap_var = __gg__get_charmap(source_encoding);
!     charmap_t *charmap32 = __gg__get_charmap(DEFAULT_32_ENCODING);
  
      cbl_figconst_t figconst =
                        static_cast<cbl_figconst_t>(var->attr & FIGCONST_MASK);
--- 2312,2318 ----
    if(var)
      {
      const charmap_t *charmap_var = __gg__get_charmap(source_encoding);
!     charmap_t *charmap32 = __gg__get_charmap(HOST_32_ENCODING);
  
      cbl_figconst_t figconst =
                        static_cast<cbl_figconst_t>(var->attr & FIGCONST_MASK);
*************** normalize_for_inspect_format_4(const cbl
*** 2347,2353 ****
        size_t converted_bytes;
        const char *converted = __gg__iconverter(
                                var->encoding,
!                               DEFAULT_32_ENCODING,
                                var->data + var_offset,
                                var_size,
                                &converted_bytes);
--- 2388,2394 ----
        size_t converted_bytes;
        const char *converted = __gg__iconverter(
                                var->encoding,
!                               HOST_32_ENCODING,
                                var->data + var_offset,
                                var_size,
                                &converted_bytes);
*************** __gg__inspect_format_4( int backward,
*** 2441,2451 ****
      replacement_size = charmap->stride();
      }
  
!   std::u32string str_input       = normalize_for_inspect_format_4(input      , input_offset      , input_size      , input->encoding);
!   std::u32string str_original    = normalize_for_inspect_format_4(original   , original_offset   , original_size   , input->encoding);
!   std::u32string str_replacement = normalize_for_inspect_format_4(replacement, replacement_offset, replacement_size, input->encoding);
!   std::u32string str_after       = normalize_for_inspect_format_4(after      , after_offset      , after_size      , input->encoding);
!   std::u32string str_before      = normalize_for_inspect_format_4(before     , before_offset     , before_size     , input->encoding);
  
    if( all )
      {
--- 2482,2512 ----
      replacement_size = charmap->stride();
      }
  
!   std::u32string str_input
!     = normalize_for_inspect_format_4(input,
!                                      input_offset,
!                                      input_size,
!                                      input->encoding);
!   std::u32string str_original
!     = normalize_for_inspect_format_4(original,
!                                      original_offset,
!                                      original_size,
!                                      input->encoding);
!   std::u32string str_replacement
!     = normalize_for_inspect_format_4(replacement,
!                                      replacement_offset,
!                                      replacement_size,
!                                      input->encoding);
!   std::u32string str_after
!     = normalize_for_inspect_format_4(after,
!                                      after_offset,
!                                      after_size,
!                                      input->encoding);
!   std::u32string str_before
!     = normalize_for_inspect_format_4(before,
!                                      before_offset,
!                                      before_size,
!                                      input->encoding);
  
    if( all )
      {
*************** __gg__inspect_format_4( int backward,
*** 2598,2604 ****
    // We now take the converted str_input, and put it back into id_1:
  
    size_t bytes_converted;
!   const char *converted = __gg__iconverter(DEFAULT_32_ENCODING,
                                             input->encoding,
                                             str_input.data(),
                                             str_input.size()*width_of_utf32,
--- 2659,2665 ----
    // We now take the converted str_input, and put it back into id_1:
  
    size_t bytes_converted;
!   const char *converted = __gg__iconverter(HOST_32_ENCODING,
                                             input->encoding,
                                             str_input.data(),
                                             str_input.size()*width_of_utf32,
diff -Nrcpad gcc-17-20260705/libgcobol/intrinsic.cc gcc-17-20260712/libgcobol/intrinsic.cc
*** gcc-17-20260705/libgcobol/intrinsic.cc	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/libgcobol/intrinsic.cc	Sun Jul 12 22:32:18 2026
***************
*** 41,46 ****
--- 41,47 ----
  #include <cwctype>
  #include <cmath>
  #include <cstring>
+ #include <cstdlib>
  #include <ctime>
  
  #include <algorithm>
***************
*** 53,60 ****
--- 54,63 ----
  #include "common-defs.h"
  #include "io.h"
  #include "gcobolio.h"
+ #include "cobol-endian.h"
  #include "libgcobol.h"
  #include "charmaps.h"
+ #include "cobol-endian.h"
  
  #pragma GCC diagnostic ignored "-Wformat-truncation"
  
*************** static int is_leap_year(int);
*** 85,90 ****
--- 88,155 ----
  
  typedef char * PCHAR;
  
+ static inline char *
+ as_chars(unsigned char *p)
+   {
+   return reinterpret_cast<char *>(p);
+   }
+ 
+ static inline const char *
+ as_chars(const unsigned char *p)
+   {
+   return reinterpret_cast<const char *>(p);
+   }
+ 
+ static void *
+ xrealloc(void *p, size_t new_size)
+   {
+   void *retval = realloc(p, new_size);
+   massert(retval);
+   return retval;
+   }
+ 
+ static char *
+ mconvert_to_c_string(cbl_encoding_t from,
+                      cbl_encoding_t to,
+                const void          *str,
+                      size_t         length,
+                      size_t        *outlength = nullptr)
+   {
+   size_t nbytes;
+   char *converted = __gg__miconverter(from,
+                                       to,
+                                       str,
+                                       length,
+                                       &nbytes);
+   massert(converted);
+ 
+   char *retval = static_cast<char *>(malloc(nbytes + 1));
+   massert(retval);
+   memcpy(retval, converted, nbytes);
+   retval[nbytes] = '\0';
+   free(converted);
+ 
+   if( outlength )
+     {
+     *outlength = nbytes;
+     }
+   return retval;
+   }
+ 
+ static void
+ ensure_char_capacity(char *&buffer, size_t &capacity, size_t required)
+   {
+   if( capacity == 0 )
+     {
+     capacity = 1;
+     }
+   while( capacity < required )
+     {
+     capacity *= 2;
+     buffer = static_cast<char *>(xrealloc(buffer, capacity));
+     }
+   }
+ 
  static void
  trim_trailing_spaces(PCHAR left, PCHAR &right, int mapped_space)
    {
*************** struct input_state
*** 244,252 ****
      nsubscript = N;
      if(N)
        {
!       subscript_alls   = static_cast<bool   *>(malloc(nsubscript));
!       subscripts       = static_cast<size_t *>(malloc(nsubscript));
!       subscript_limits = static_cast<size_t *>(malloc(nsubscript));
        massert(subscript_alls);
        massert(subscripts);
        massert(subscript_limits);
--- 309,317 ----
      nsubscript = N;
      if(N)
        {
!       subscript_alls   = static_cast<bool   *>(malloc(nsubscript * sizeof(*subscript_alls)));
!       subscripts       = static_cast<size_t *>(malloc(nsubscript * sizeof(*subscripts)));
!       subscript_limits = static_cast<size_t *>(malloc(nsubscript * sizeof(*subscript_limits)));
        massert(subscript_alls);
        massert(subscripts);
        massert(subscript_limits);
*************** get_all_time( const cblc_field_t *dest,
*** 563,569 ****
  
    // Do these before the iconverter, because that routine can clobber the
    // return value 'converted'
!   charmap_t *charmap = __gg__get_charmap(dest->encoding);
    size_t nbytes;
    const char *converted = __gg__iconverter(DEFAULT_SOURCE_ENCODING,
                                             dest->encoding,
--- 628,634 ----
  
    // Do these before the iconverter, because that routine can clobber the
    // return value 'converted'
!   const charmap_t *charmap = __gg__get_charmap(dest->encoding);
    size_t nbytes;
    const char *converted = __gg__iconverter(DEFAULT_SOURCE_ENCODING,
                                             dest->encoding,
*************** __gg__char( cblc_field_t *dest,
*** 1179,1212 ****
      exception_raise(ec_argument_function_e);
      }
  
!   // We need to convert the ch character to the destination encoding.
!   // THIS IS A KLUDGE UNTIL WE MAKE THE CURRENT_COLLATION TO BE A MAP OF
!   // WIDE CHARACTERS!
!   charmap_t *charmap_dest = __gg__get_charmap(dest->encoding);
! 
!   cbl_char_t achFrom = 0;
!   memcpy(&achFrom, &ch, 1);
!   size_t charsout;
!   const char *converted = __gg__iconverter(__gg__display_encoding,
!                                            dest->encoding,
!                                            &achFrom,
!                                            1,
!                                            &charsout );
!   // Pick up our character, because mapped_character() might clobber
!   // the converted contents.
!   int converted_char = 0;
!   memcpy(&converted_char, converted, charmap_dest->stride());
!   // Space fill the dest:
! 
!   __gg__adjust_dest_size(dest, charmap_dest->stride());
!   charmap_dest-> memset(dest->data,
!                         charmap_dest->mapped_character(ascii_space),
!                         dest->capacity);
!   // Make the first character of the destination equal to our converted
!   // character:
!   if( ch > -1 && charsout == 1 )
      {
!     charmap_dest->putch(converted_char, dest->data, size_t(0));
      }
    }
  
--- 1244,1293 ----
      exception_raise(ec_argument_function_e);
      }
  
!   // We need to convert that value to a character in the destination
!   // encoding.
!   const charmap_t *charmap_dest   = __gg__get_charmap(dest->encoding);
!   int stride = charmap_dest->stride();
!   __gg__adjust_dest_size(dest, stride);
!   switch(stride)
      {
!     case 1:
!       {
!       dest->data[0] = ch;
!       break;
!       }
!     case 2:
!       {
!       if( charmap_dest->is_big_endian() )
!         {
!         dest->data[1] = ch;
!         dest->data[0] = 0;
!         }
!       else
!         {
!         dest->data[0] = ch;
!         dest->data[1] = 0;
!         }
!       break;
!       }
!     case 4:
!       {
!       if( charmap_dest->is_big_endian() )
!         {
!         dest->data[3] = ch;
!         dest->data[2] = 0;
!         dest->data[1] = 0;
!         dest->data[0] = 0;
!         }
!       else
!         {
!         dest->data[0] = ch;
!         dest->data[1] = 0;
!         dest->data[2] = 0;
!         dest->data[3] = 0;
!         }
!       break;
!       }
      }
    }
  
*************** __gg__formatted_current_date( cblc_field
*** 1580,1592 ****
    cbl_char_t format_z   = charmap_from->mapped_character(ascii_z);
  
    // Establish the formatting string:
!   const char *format     = PTRCAST(char, (input->data+input_offset));
    const char *format_end = format + input_size;
  
    __gg__adjust_dest_size(dest, format_end-format);
  
    // Establish the destination, and set it to spaces
!   char *d    = PTRCAST(char, dest->data);
    const char *dend = d + dest->capacity;
    charmap_to->memset(d, dest_space, dest->capacity);
  
--- 1661,1673 ----
    cbl_char_t format_z   = charmap_from->mapped_character(ascii_z);
  
    // Establish the formatting string:
!   const char *format     = as_chars(input->data + input_offset);
    const char *format_end = format + input_size;
  
    __gg__adjust_dest_size(dest, format_end-format);
  
    // Establish the destination, and set it to spaces
!   char *d    = as_chars(dest->data);
    const char *dend = d + dest->capacity;
    charmap_to->memset(d, dest_space, dest->capacity);
  
*************** __gg__formatted_date(cblc_field_t *dest,
*** 1653,1659 ****
    charmap_t *charmap_from = __gg__get_charmap(from);
  
    // Establish the formatting string:
!   char *format     = PTRCAST(char, (arg1->data+arg1_offset));
    const char *format_end = format + arg1_size;
  
    __gg__adjust_dest_size(dest, format_end-format);
--- 1734,1740 ----
    charmap_t *charmap_from = __gg__get_charmap(from);
  
    // Establish the formatting string:
!   const char *format     = as_chars(arg1->data + arg1_offset);
    const char *format_end = format + arg1_size;
  
    __gg__adjust_dest_size(dest, format_end-format);
*************** __gg__formatted_date(cblc_field_t *dest,
*** 1661,1667 ****
    cbl_char_t dest_space = charmap_to->mapped_character(ascii_space);
  
    // Establish the destination, and set it to spaces
!   char *d    = PTRCAST(char, dest->data);
    const char *dend = d + dest->capacity;
    charmap_to->memset(d, dest_space, dest->capacity);
  
--- 1742,1748 ----
    cbl_char_t dest_space = charmap_to->mapped_character(ascii_space);
  
    // Establish the destination, and set it to spaces
!   char *d    = as_chars(dest->data);
    const char *dend = d + dest->capacity;
    charmap_to->memset(d, dest_space, dest->capacity);
  
*************** __gg__formatted_datetime( cblc_field_t *
*** 1707,1713 ****
    charmap_t *charmap_to   = __gg__get_charmap(to);
  
    // Establish the formatting string:
!   char *format     = PTRCAST(char, (par1->data+par1_o));
    char *format_end = format + par1_s;
    trim_trailing_spaces(format, format_end, charmap_from->mapped_character(ascii_space));
    bool is_zulu = is_zulu_format(format, format_end, charmap_from);
--- 1788,1794 ----
    charmap_t *charmap_to   = __gg__get_charmap(to);
  
    // Establish the formatting string:
!   char *format     = as_chars(par1->data + par1_o);
    char *format_end = format + par1_s;
    trim_trailing_spaces(format, format_end, charmap_from->mapped_character(ascii_space));
    bool is_zulu = is_zulu_format(format, format_end, charmap_from);
*************** __gg__formatted_datetime( cblc_field_t *
*** 1715,1723 ****
    __gg__adjust_dest_size(dest, format_end-format);
  
    // Establish the destination, and set it to spaces
!         char *d    = PTRCAST(char, (dest->data));
    const char *dend = d + dest->capacity;
!   memset(d, charmap_from->mapped_character(ascii_space), dest->capacity);
  
  
    struct cobol_tm ctm = {};
--- 1796,1805 ----
    __gg__adjust_dest_size(dest, format_end-format);
  
    // Establish the destination, and set it to spaces
!   char *d          = as_chars(dest->data);
    const char *dend = d + dest->capacity;
!   cbl_char_t dest_space = charmap_to->mapped_character(ascii_space);
!   charmap_to->memset(d, dest_space, dest->capacity);
  
  
    struct cobol_tm ctm = {};
*************** __gg__formatted_datetime( cblc_field_t *
*** 1736,1742 ****
    get_all_time(dest, achftime, ctm);
    if( __gg__exception_code )
      {
!     memset(d, charmap_to->mapped_character(ascii_space), dend-d);
      }
    else
      {
--- 1818,1824 ----
    get_all_time(dest, achftime, ctm);
    if( __gg__exception_code )
      {
!     charmap_to->memset(d, dest_space, dend-d);
      }
    else
      {
*************** __gg__formatted_time( cblc_field_t *dest
*** 1768,1774 ****
    int dest_space = charmap_to->mapped_character(ascii_space);
  
    // Establish the formatting string:
!   char *format     = PTRCAST(char, (par1->data+par1_o));
    char *format_end = format + par1_s;
    trim_trailing_spaces( format,
                          format_end,
--- 1850,1856 ----
    int dest_space = charmap_to->mapped_character(ascii_space);
  
    // Establish the formatting string:
!   char *format     = as_chars(par1->data + par1_o);
    char *format_end = format + par1_s;
    trim_trailing_spaces( format,
                          format_end,
*************** __gg__formatted_time( cblc_field_t *dest
*** 1778,1784 ****
    __gg__adjust_dest_size(dest, format_end-format);
  
    // Establish the destination, and set it to spaces
!   char *d          = PTRCAST(char, dest->data);
    const char *dend = d + dest->capacity;
    charmap_to->memset(d, dest_space, dest->capacity);
  
--- 1860,1866 ----
    __gg__adjust_dest_size(dest, format_end-format);
  
    // Establish the destination, and set it to spaces
!   char *d          = as_chars(dest->data);
    const char *dend = d + dest->capacity;
    charmap_to->memset(d, dest_space, dest->capacity);
  
*************** change_case( cblc_field_t *dest,
*** 2140,2146 ****
    {
    cbl_encoding_t enc_to   = dest->encoding;
    cbl_encoding_t enc_from = input->encoding;
!   cbl_encoding_t enc_work = DEFAULT_32_ENCODING;
  
    // In order to handle any input encoding, we convert to UTF32:
    size_t converted_bytes;
--- 2222,2228 ----
    {
    cbl_encoding_t enc_to   = dest->encoding;
    cbl_encoding_t enc_from = input->encoding;
!   cbl_encoding_t enc_work =  HOST_32_ENCODING;
  
    // In order to handle any input encoding, we convert to UTF32:
    size_t converted_bytes;
*************** change_case( cblc_field_t *dest,
*** 2149,2171 ****
                                             input->data+input_offset,
                                             input_size,
                                             &converted_bytes);
!   // Make a copy of it to prevent the static nature of iconverter from causing
!   // trouble:
!   cbl_char_t *duped =
!           static_cast<cbl_char_t *>(__gg__memdup(converted, converted_bytes));
!   cbl_char_t *pend = duped + converted_bytes / width_of_utf32;
  
    // Use the designated case changer:
!   std::transform(duped, pend, duped,
                   [&changer](cbl_char_t c) { return changer(c); });
  
    // Convert that modified string to the destination encoding:
    converted = __gg__iconverter(enc_work,
                                 enc_to,
!                                duped,
                                 converted_bytes,
                                 &converted_bytes);
-   free(duped);
  
    char *duped2 = static_cast<char *>(__gg__memdup(converted, converted_bytes));
    __gg__adjust_dest_size(dest, converted_bytes);
--- 2231,2253 ----
                                             input->data+input_offset,
                                             input_size,
                                             &converted_bytes);
!   size_t nchars = converted_bytes / width_of_utf32;
!   std::vector<cbl_char_t> work(nchars);
!   for(size_t i=0; i<nchars; i++ )
!     {
!     memcpy(&work[i], converted + i * width_of_utf32, sizeof(work[i]));
!     }
  
    // Use the designated case changer:
!   std::transform(work.begin(), work.end(), work.begin(),
                   [&changer](cbl_char_t c) { return changer(c); });
  
    // Convert that modified string to the destination encoding:
    converted = __gg__iconverter(enc_work,
                                 enc_to,
!                                work.data(),
                                 converted_bytes,
                                 &converted_bytes);
  
    char *duped2 = static_cast<char *>(__gg__memdup(converted, converted_bytes));
    __gg__adjust_dest_size(dest, converted_bytes);
*************** __gg__median( cblc_field_t *dest,
*** 2247,2253 ****
        if(k_count >= list_size)
          {
          list_size *= 2;
!         the_list = PTRCAST(GCOB_FP128, realloc(the_list, list_size *sizeof(GCOB_FP128)));
          massert(the_list);
          }
  
--- 2329,2335 ----
        if(k_count >= list_size)
          {
          list_size *= 2;
!         the_list = static_cast<GCOB_FP128 *>(xrealloc(the_list, list_size * sizeof(GCOB_FP128)));
          massert(the_list);
          }
  
*************** numval( cblc_field_t *dest,
*** 2501,2507 ****
    size_t nbytes;
    const char *p = __gg__iconverter(input->encoding,
                                     DEFAULT_SOURCE_ENCODING,
!                                    PTRCAST(char, input->data + input_offset),
                                     input_size,
                                     &nbytes);
    const char *pend = p + nbytes;
--- 2583,2589 ----
    size_t nbytes;
    const char *p = __gg__iconverter(input->encoding,
                                     DEFAULT_SOURCE_ENCODING,
!                                    as_chars(input->data + input_offset),
                                     input_size,
                                     &nbytes);
    const char *pend = p + nbytes;
*************** numval_c( cblc_field_t *dest,
*** 2796,2810 ****
    {
    size_t errcode = 0;
  
- //  char *pstart = PTRCAST(char, (src->data+src_offset));
    size_t nbytes;
!   const char *converted = __gg__iconverter(src->encoding,
!                                   DEFAULT_SOURCE_ENCODING,
!                                   PTRCAST(char, src->data+src_offset),
!                                   src_size,
!                                   &nbytes);
!   char *pstart = strdup(converted);
!   massert(pstart);
    char *pend   = pstart + nbytes;
    char *p      = pstart;
  
--- 2878,2889 ----
    {
    size_t errcode = 0;
  
    size_t nbytes;
!   char *pstart = mconvert_to_c_string(src->encoding,
!                                       DEFAULT_SOURCE_ENCODING,
!                                       src->data + src_offset,
!                                       src_size,
!                                       &nbytes);
    char *pend   = pstart + nbytes;
    char *p      = pstart;
  
*************** numval_c( cblc_field_t *dest,
*** 2821,2834 ****
    const char *currency_end;
    if( crcy )
      {
!     converted = __gg__iconverter(crcy->encoding,
!                                  DEFAULT_SOURCE_ENCODING,
!                                  PTRCAST(char, crcy->data+crcy_offset),
!                                  crcy_size,
!                                  &nbytes);
!     currency_in_ascii = static_cast<char*>(malloc(nbytes+1));
!     massert(currency_in_ascii);
!     strcpy(currency_in_ascii, converted);
      }
    else
      {
--- 2900,2910 ----
    const char *currency_end;
    if( crcy )
      {
!     currency_in_ascii = mconvert_to_c_string(crcy->encoding,
!                                              DEFAULT_SOURCE_ENCODING,
!                                              crcy->data + crcy_offset,
!                                              crcy_size,
!                                              &nbytes);
      }
    else
      {
*************** __gg__ord(cblc_field_t *dest,
*** 3194,3207 ****
            size_t /*input_size*/)
    {
    // FUNCTION ORD
!   const char *arg = PTRCAST(char, (input->data + input_offset));
  
    // The ORD function takes a single-character string and returns the
    // ordinal position of that character within the current collation.
  
    const unsigned short *collation = __gg__current_collation();
  
!   size_t retval = (collation[arg[0]&0xFF]) + 1;
  
    __gg__int128_to_field(dest,
                          retval,
--- 3270,3293 ----
            size_t /*input_size*/)
    {
    // FUNCTION ORD
! 
!   // We haven't worked out how to handle things like UTF-16 and UTF-32.  So
!   // we are just going to work with the single byte equivalent.
!   const charmap_t *charmap = __gg__get_charmap(input->encoding);
!   if( charmap->is_big_endian() )
!     {
!     // Point to the low-order byte of the multi-byte character
!     input_offset += charmap->stride() - 1;
!     }
! 
!   const unsigned char *arg = input->data + input_offset;
  
    // The ORD function takes a single-character string and returns the
    // ordinal position of that character within the current collation.
  
    const unsigned short *collation = __gg__current_collation();
  
!   size_t retval = collation[arg[0]] + 1;
  
    __gg__int128_to_field(dest,
                          retval,
*************** __gg__trim_a( cblc_field_t *dest,
*** 3613,3619 ****
  
    char *strippers = arg2;
    const char *strip_end = arg2 + arg2_size;
!   char *left  = reinterpret_cast<char *>(arg1->data) + arg1_offset;
    char *right = left + arg1_size-stride; // Points AT the character, not beyond
  
    while( strippers < strip_end )
--- 3699,3705 ----
  
    char *strippers = arg2;
    const char *strip_end = arg2 + arg2_size;
!   char *left  = as_chars(arg1->data) + arg1_offset;
    char *right = left + arg1_size-stride; // Points AT the character, not beyond
  
    while( strippers < strip_end )
*************** __gg__numval_f( cblc_field_t *dest,
*** 5361,5369 ****
    {
    // It's just easiest for this routine to operate in ASCII space:
    size_t nbytes;
!   char *converted = __gg__iconverter(source->encoding,
                                    DEFAULT_SOURCE_ENCODING,
!                                   PTRCAST(char, source->data + source_offset),
                                    source_size,
                                    &nbytes);
    GCOB_FP128 value = 0;
--- 5447,5455 ----
    {
    // It's just easiest for this routine to operate in ASCII space:
    size_t nbytes;
!   const char *converted = __gg__iconverter(source->encoding,
                                    DEFAULT_SOURCE_ENCODING,
!                                   as_chars(source->data + source_offset),
                                    source_size,
                                    &nbytes);
    GCOB_FP128 value = 0;
*************** __gg__test_numval_f(cblc_field_t *dest,
*** 5408,5416 ****
    {
    // It's just easiest for this routine to operate in ASCII space:
    size_t nbytes;
!   char *converted = __gg__iconverter(source->encoding,
                                    DEFAULT_SOURCE_ENCODING,
!                                   PTRCAST(char, source->data + source_offset),
                                    source_size,
                                    &nbytes);
  
--- 5494,5502 ----
    {
    // It's just easiest for this routine to operate in ASCII space:
    size_t nbytes;
!   const char *converted = __gg__iconverter(source->encoding,
                                    DEFAULT_SOURCE_ENCODING,
!                                   as_chars(source->data + source_offset),
                                    source_size,
                                    &nbytes);
  
*************** __gg__test_numval_f(cblc_field_t *dest,
*** 5428,5442 ****
  static bool
  ismatch(const char *a1, const char *a2, const char *b1, const char *b2)
    {
!   bool retval = true;
!   while( a1 < a2 && b1 < b2 )
      {
!     if( *a1++ != *b1++ )
!       {
!       retval = false;
!       }
      }
!   return retval;
    }
  
  static bool
--- 5514,5527 ----
  static bool
  ismatch(const char *a1, const char *a2, const char *b1, const char *b2)
    {
!   size_t alen = a2 - a1;
!   size_t blen = b2 - b1;
! 
!   if( blen > alen )
      {
!     return false;
      }
!   return memcmp(a1, b1, blen) == 0;
    }
  
  static bool
*************** iscasematch(const char *a1, const char *
*** 5464,5494 ****
      0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
      };
  
!   bool retval = true;
  
!   if( !is_ebcdic )
      {
!     while( a1 < a2 && b1 < b2 )
!       {
!       if( std::tolower((unsigned char)*a1++)
!               != std::tolower((unsigned char)*b1++) )
!         {
!         retval = false;
!         }
!       }
      }
!   else
      {
!     while( a1 < a2 && b1 < b2 )
        {
!       if( ebcdic_lower[(unsigned int)(unsigned char)*a1++]
!                           != ebcdic_lower[(unsigned int)(unsigned char)*b1++] )
          {
!         retval = false;
          }
        }
      }
!   return retval;
    }
  
  static
--- 5549,5580 ----
      0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
      };
  
!   size_t alen = a2 - a1;
!   size_t blen = b2 - b1;
  
!   if( blen > alen )
      {
!     return false;
      }
! 
!   for(size_t i=0; i<blen; i++ )
      {
!     unsigned char ach = static_cast<unsigned char>(a1[i]);
!     unsigned char bch = static_cast<unsigned char>(b1[i]);
! 
!     if( !is_ebcdic )
        {
!       if( std::tolower(ach) != std::tolower(bch) )
          {
!         return false;
          }
        }
+     else if( ebcdic_lower[ach] != ebcdic_lower[bch] )
+       {
+       return false;
+       }
      }
!   return true;
    }
  
  static
*************** strstr( const char *haystack,
*** 5498,5505 ****
          const char *needle,
          const char *needle_e)
    {
    const char *retval = NULL;
!   const char *pend = haystack_e - (needle_e - needle);
    while( haystack <= pend )
      {
      if(ismatch(haystack, haystack_e, needle, needle_e))
--- 5584,5599 ----
          const char *needle,
          const char *needle_e)
    {
+   size_t haystack_len = haystack_e - haystack;
+   size_t needle_len   = needle_e - needle;
+ 
+   if( needle_len > haystack_len )
+     {
+     return NULL;
+     }
+ 
    const char *retval = NULL;
!   const char *pend = haystack_e - needle_len;
    while( haystack <= pend )
      {
      if(ismatch(haystack, haystack_e, needle, needle_e))
*************** strcasestr( const char *haystack,
*** 5520,5527 ****
              const char *needle_e,
              bool is_ebcdic)
    {
    const char *retval = NULL;
!   const char *pend = haystack_e - (needle_e - needle);
    while( haystack <= pend )
      {
      if(iscasematch(haystack, haystack_e, needle, needle_e, is_ebcdic))
--- 5614,5629 ----
              const char *needle_e,
              bool is_ebcdic)
    {
+   size_t haystack_len = haystack_e - haystack;
+   size_t needle_len   = needle_e - needle;
+ 
+   if( needle_len > haystack_len )
+     {
+     return NULL;
+     }
+ 
    const char *retval = NULL;
!   const char *pend = haystack_e - needle_len;
    while( haystack <= pend )
      {
      if(iscasematch(haystack, haystack_e, needle, needle_e, is_ebcdic))
*************** strlaststr( const char *haystack,
*** 5541,5548 ****
              const char *needle,
              const char *needle_e)
    {
    const char *retval = NULL;
!   const char *pend = haystack_e - (needle_e - needle);
    while( haystack <= pend )
      {
      if(ismatch(haystack, haystack_e, needle, needle_e))
--- 5643,5658 ----
              const char *needle,
              const char *needle_e)
    {
+   size_t haystack_len = haystack_e - haystack;
+   size_t needle_len   = needle_e - needle;
+ 
+   if( needle_len > haystack_len )
+     {
+     return NULL;
+     }
+ 
    const char *retval = NULL;
!   const char *pend = haystack_e - needle_len;
    while( haystack <= pend )
      {
      if(ismatch(haystack, haystack_e, needle, needle_e))
*************** strcaselaststr( const char *haystack,
*** 5562,5569 ****
                  const char *needle_e,
                  bool is_ebcdic)
    {
    const char *retval = NULL;
!   const char *pend = haystack_e - (needle_e - needle);
    while( haystack <= pend )
      {
      if(iscasematch(haystack, haystack_e, needle, needle_e, is_ebcdic))
--- 5672,5687 ----
                  const char *needle_e,
                  bool is_ebcdic)
    {
+   size_t haystack_len = haystack_e - haystack;
+   size_t needle_len   = needle_e - needle;
+ 
+   if( needle_len > haystack_len )
+     {
+     return NULL;
+     }
+ 
    const char *retval = NULL;
!   const char *pend = haystack_e - needle_len;
    while( haystack <= pend )
      {
      if(iscasematch(haystack, haystack_e, needle, needle_e, is_ebcdic))
*************** __gg__substitute( const cblc_referlet_t
*** 5588,5603 ****
    {
    // arg2 is the Group 1 triplet.
    // arg3 is the Group 2 triplet
!   ssize_t retval_size;
!   retval_size = 256;
    char  *retval = static_cast<char *>(malloc(retval_size));
    massert(retval);
    *retval = '\0';
  
!   const char *haystack   = PTRCAST(char, (arg1_f->data + arg1_o));
    const char *haystack_e = haystack + arg1_s;
  
!   ssize_t outdex = 0;
  
    const char **pflasts = static_cast<const char **>(malloc(N * sizeof(char *)));
    massert(pflasts);
--- 5706,5720 ----
    {
    // arg2 is the Group 1 triplet.
    // arg3 is the Group 2 triplet
!   size_t retval_size = 256;
    char  *retval = static_cast<char *>(malloc(retval_size));
    massert(retval);
    *retval = '\0';
  
!   const char *haystack   = as_chars(arg1_f->data + arg1_o);
    const char *haystack_e = haystack + arg1_s;
  
!   size_t outdex = 0;
  
    const char **pflasts = static_cast<const char **>(malloc(N * sizeof(char *)));
    massert(pflasts);
*************** __gg__substitute( const cblc_referlet_t
*** 5624,5639 ****
          {
          pflasts[i] = strcasestr(haystack,
                                  haystack_e,
!                                 PTRCAST(char, (arg2[i].field->data+arg2[i].offset)),
!                                 PTRCAST(char, (arg2[i].field->data+arg2[i].offset)) + arg2[i].size,
                                  is_ebcdic);
          }
        else if( control[i] & substitute_last_e)
          {
          pflasts[i] = strcaselaststr(haystack,
                                  haystack_e,
!                                 PTRCAST(char, (arg2[i].field->data+arg2[i].offset)),
!                                 PTRCAST(char, (arg2[i].field->data+arg2[i].offset)) + arg2[i].size,
                                  is_ebcdic);
          }
        else
--- 5741,5756 ----
          {
          pflasts[i] = strcasestr(haystack,
                                  haystack_e,
!                                 as_chars(arg2[i].field->data + arg2[i].offset),
!                                 as_chars(arg2[i].field->data + arg2[i].offset) + arg2[i].size,
                                  is_ebcdic);
          }
        else if( control[i] & substitute_last_e)
          {
          pflasts[i] = strcaselaststr(haystack,
                                  haystack_e,
!                                 as_chars(arg2[i].field->data + arg2[i].offset),
!                                 as_chars(arg2[i].field->data + arg2[i].offset) + arg2[i].size,
                                  is_ebcdic);
          }
        else
*************** __gg__substitute( const cblc_referlet_t
*** 5647,5661 ****
          {
          pflasts[i] = strstr(haystack,
                              haystack_e,
!                             PTRCAST(char, (arg2[i].field->data+arg2[i].offset)),
!                             PTRCAST(char, (arg2[i].field->data+arg2[i].offset)) + arg2[i].size);
          }
        else if( control[i] & substitute_last_e)
          {
          pflasts[i] = strlaststr(haystack,
                                  haystack_e,
!                                 PTRCAST(char, (arg2[i].field->data+arg2[i].offset)),
!                                 PTRCAST(char, (arg2[i].field->data+arg2[i].offset)) + arg2[i].size);
          }
        else
          {
--- 5764,5778 ----
          {
          pflasts[i] = strstr(haystack,
                              haystack_e,
!                             as_chars(arg2[i].field->data + arg2[i].offset),
!                             as_chars(arg2[i].field->data + arg2[i].offset) + arg2[i].size);
          }
        else if( control[i] & substitute_last_e)
          {
          pflasts[i] = strlaststr(haystack,
                                  haystack_e,
!                                 as_chars(arg2[i].field->data + arg2[i].offset),
!                                 as_chars(arg2[i].field->data + arg2[i].offset) + arg2[i].size);
          }
        else
          {
*************** __gg__substitute( const cblc_referlet_t
*** 5671,5683 ****
        {
        // Let's make sure that there is enough room in the case that we add this
        // arg
!       while( outdex - (ssize_t)arg2[i].size + (ssize_t)arg3[i].size
!                                                                  > retval_size )
!         {
!         retval_size *= 2;
!         retval = static_cast<char *>(realloc(retval, retval_size));
!         massert(retval);
!         }
  
        // We checked earlier for FIRST/LAST matches
        bool matched = pflasts[i] == haystack;
--- 5788,5794 ----
        {
        // Let's make sure that there is enough room in the case that we add this
        // arg
!       ensure_char_capacity(retval, retval_size, outdex + arg3[i].size);
  
        // We checked earlier for FIRST/LAST matches
        bool matched = pflasts[i] == haystack;
*************** __gg__substitute( const cblc_referlet_t
*** 5691,5698 ****
            continue;
            }
  
!         const char *needle   = PTRCAST(char, arg2[i].field->data+arg2[i].offset);
!         const char *needle_e = PTRCAST(char, arg2[i].field->data+arg2[i].offset) + arg2[i].size;
          matched = (control[i] & substitute_anycase_e) && iscasematch(
                                                                   haystack,
                                                                   haystack_e,
--- 5802,5809 ----
            continue;
            }
  
!         const char *needle   = as_chars(arg2[i].field->data + arg2[i].offset);
!         const char *needle_e = as_chars(arg2[i].field->data + arg2[i].offset) + arg2[i].size;
          matched = (control[i] & substitute_anycase_e) && iscasematch(
                                                                   haystack,
                                                                   haystack_e,
*************** __gg__substitute( const cblc_referlet_t
*** 5718,5729 ****
        }
      if( !did_something )
        {
!       while( outdex + 1 > retval_size )
!         {
!         retval_size *= 2;
!         retval = static_cast<char *>(realloc(retval, retval_size));
!         massert(retval);
!         }
        retval[outdex++] = *haystack++;
        }
      }
--- 5829,5835 ----
        }
      if( !did_something )
        {
!       ensure_char_capacity(retval, retval_size, outdex + 1);
        retval[outdex++] = *haystack++;
        }
      }
*************** void
*** 5806,5812 ****
  __gg__locale_date(cblc_field_t *dest,
              const cblc_field_t *arg1,
                    size_t        arg1_o,
!                   size_t        /*arg1_s*/,
              const cblc_field_t *arg_locale,
                    size_t        /*arg_locale_o*/,
                    size_t        /*arg_locale_s*/)
--- 5912,5918 ----
  __gg__locale_date(cblc_field_t *dest,
              const cblc_field_t *arg1,
                    size_t        arg1_o,
!                   size_t        arg1_s,
              const cblc_field_t *arg_locale,
                    size_t        /*arg_locale_o*/,
                    size_t        /*arg_locale_s*/)
*************** __gg__locale_date(cblc_field_t *dest,
*** 5821,5834 ****
    else
      {
      // Default locale
!     tm tm;
!     memcpy(ach, arg1->data+arg1_o, 8);
!     ach[8] = '\0';
!     long ymd    = atoi(ach);
!     tm.tm_year  = ymd/10000 - 1900;
!     tm.tm_mon   = ymd/100 % 100;
      tm.tm_mday  = ymd % 100;
-     strcpy(ach, nl_langinfo(D_FMT));
      strftime(ach, sizeof(ach), nl_langinfo(D_FMT), &tm);
      }
    size_t bytes_converted;
--- 5927,5944 ----
    else
      {
      // Default locale
!     size_t nbytes;
!     char *converted = mconvert_to_c_string(arg1->encoding,
!                                            DEFAULT_SOURCE_ENCODING,
!                                            arg1->data + arg1_o,
!                                            arg1_s,
!                                            &nbytes);
!     tm tm = {};
!     long ymd    = strtol(converted, NULL, 10);
!     free(converted);
!     tm.tm_year  = ymd / 10000 - 1900;
!     tm.tm_mon   = (ymd / 100) % 100 - 1;
      tm.tm_mday  = ymd % 100;
      strftime(ach, sizeof(ach), nl_langinfo(D_FMT), &tm);
      }
    size_t bytes_converted;
*************** void
*** 5847,5853 ****
  __gg__locale_time(cblc_field_t *dest,
              const cblc_field_t *arg1,
                    size_t        arg1_o,
!                   size_t        /*arg1_s*/,
              const cblc_field_t *arg_locale,
                    size_t        /*arg_locale_o*/,
                    size_t        /*arg_locale_s*/)
--- 5957,5963 ----
  __gg__locale_time(cblc_field_t *dest,
              const cblc_field_t *arg1,
                    size_t        arg1_o,
!                   size_t        arg1_s,
              const cblc_field_t *arg_locale,
                    size_t        /*arg_locale_o*/,
                    size_t        /*arg_locale_s*/)
*************** __gg__locale_time(cblc_field_t *dest,
*** 5863,5874 ****
    else
      {
      // Default locale
      tm tm = {};
!     memcpy(ach, arg1->data+arg1_o, 8);
!     ach[8] = '\0';
!     long hms    = atoi(ach);
!     tm.tm_hour  = hms/10000;
!     tm.tm_min   = hms/100 % 100;
      tm.tm_sec   = hms % 100;
      strftime(ach, sizeof(ach), nl_langinfo(T_FMT), &tm);
      }
--- 5973,5989 ----
    else
      {
      // Default locale
+     size_t nbytes;
+     char *converted = mconvert_to_c_string(arg1->encoding,
+                                            DEFAULT_SOURCE_ENCODING,
+                                            arg1->data + arg1_o,
+                                            arg1_s,
+                                            &nbytes);
      tm tm = {};
!     long hms    = strtol(converted, NULL, 10);
!     free(converted);
!     tm.tm_hour  = hms / 10000;
!     tm.tm_min   = (hms / 100) % 100;
      tm.tm_sec   = hms % 100;
      strftime(ach, sizeof(ach), nl_langinfo(T_FMT), &tm);
      }
diff -Nrcpad gcc-17-20260705/libgcobol/io.cc gcc-17-20260712/libgcobol/io.cc
*** gcc-17-20260705/libgcobol/io.cc	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/libgcobol/io.cc	Sun Jul 12 22:32:18 2026
***************
*** 31,36 ****
--- 31,37 ----
  #include "config.h"
  
  #include "io.h"
+ #include "cobol-endian.h"
  
  #include <cassert>
  #include <cerrno>
*************** __gg__file_status_word( enum file_status
*** 94,110 ****
  
    return file_status_register;
  }
!    
  /*
   * This function is used by libgcobol_compat_gnu.
   * If status parameter is FsErrno, return the file_status_t for errno.
!  * If status paramter is FsSuccess, return the file_status_t for errnum parameter. 
!  * The output is byte-swapped per MF specification. 
   */
  #include <cstring>
  extern "C"
! file_status_t
  __compat_file_status_word( enum file_status_t status, int errnum) {
    switch( status ) {
    case FsErrno:
      errnum = errno;
--- 95,128 ----
  
    return file_status_register;
  }
! 
  /*
   * This function is used by libgcobol_compat_gnu.
   * If status parameter is FsErrno, return the file_status_t for errno.
!  * If status paramter is FsSuccess, return the file_status_t for errnum parameter.
!  * The output is byte-swapped per MF specification.
   */
  #include <cstring>
  extern "C"
! uint16_t
  __compat_file_status_word( enum file_status_t status, int errnum) {
+   /* In July of 2026, I had to make this routine work on a big-endian machine.
+ 
+      By my recent standards, this routine is something of a mess.  It was
+      returning a four-byte native binary file_status_t.  The only place this
+      routine is called, however, is in cobrt-file-status.cbl, where
+      the function call to __compat_file_status_word expects a return value
+      of "01 FILE-STATUS PIC X(2) COMP-5.", which is a two-byte native binary
+      value.  On a little-endian machine, this works because the return value is
+      actually just sixteen bits in the low part half of the int, and the top
+      two x00 bytes are discarded.
+ 
+      That doesn't work on a big-endian architecture, where the actual return
+      information is the top two bytes that are being discarded.
+ 
+      So, I changed this routine to return a two-byte binary value, and adjusted
+      the mangling accordingly.  Dubner, 2026-07-04  */
+ 
    switch( status ) {
    case FsErrno:
      errnum = errno;
*************** __compat_file_status_word( enum file_sta
*** 116,122 ****
      assert( status == FsErrno || status == FsSuccess );
      break;
    }
!     
    switch( errnum ) {
    case EACCES:
    case EPERM:
--- 134,140 ----
      assert( status == FsErrno || status == FsSuccess );
      break;
    }
! 
    switch( errnum ) {
    case EACCES:
    case EPERM:
*************** __compat_file_status_word( enum file_sta
*** 162,177 ****
      break;
    default:
        status = FsCobRt000; // No defined mapping for errno value
!   }    
  
!   // This function returns 9x status in the FsCobRt range. 
    assert( FsCobRt000 <= status && status <= 0x09FF );
  
    static_assert(sizeof(status) == 4);
  
!   // Arrange little-endian output per MF definition. 
!   const char output[4] = { '9', static_cast<char>((status & 0xF)), 0, 0 };
!   memcpy( reinterpret_cast<char*>(&status), output, 4);
!   
!   return status;
  }
--- 180,203 ----
      break;
    default:
        status = FsCobRt000; // No defined mapping for errno value
!   }
  
!   // This function returns 9x status in the FsCobRt range.
    assert( FsCobRt000 <= status && status <= 0x09FF );
  
    static_assert(sizeof(status) == 4);
  
!   uint16_t retval;
! 
!   if( !cobol_target_big_endian() ) // cppcheck-suppress knownConditionTrueFalse
!     {
!     // Arrange little-endian output per MF definition.
!     retval = ((status & 0xF)<<8) + '9';
!     }
!   else
!     {
!     retval = (('9')<<8) + (status & 0xF);
!     }
! 
!   return retval;
  }
diff -Nrcpad gcc-17-20260705/libgcobol/libgcobol.cc gcc-17-20260712/libgcobol/libgcobol.cc
*** gcc-17-20260705/libgcobol/libgcobol.cc	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/libgcobol/libgcobol.cc	Sun Jul 12 22:32:18 2026
***************
*** 64,69 ****
--- 64,70 ----
  #include "common-defs.h"
  #include "io.h"
  #include "gcobolio.h"
+ #include "cobol-endian.h"
  #include "libgcobol.h"
  #include "gfileio.h"
  #include "charmaps.h"
***************
*** 79,84 ****
--- 80,143 ----
  
  #define NO_RDIGITS (0)
  
+ 
+ static inline char *
+ as_chars(unsigned char *p)
+   {
+   return reinterpret_cast<char *>(p);
+   }
+ 
+ static inline const char *
+ as_chars(const unsigned char *p)
+   {
+   return reinterpret_cast<const char *>(p);
+   }
+ 
+ static inline unsigned char *
+ as_unsigned_chars(char *p)
+   {
+   return reinterpret_cast<unsigned char *>(p);
+   }
+ 
+ static inline const unsigned char *
+ as_unsigned_chars(const char *p)
+   {
+   return reinterpret_cast<const unsigned char *>(p);
+   }
+ 
+ template <typename T>
+ static T
+ load_unaligned(const void *p)
+   {
+   T value;
+   memcpy(&value, p, sizeof(value));
+   return value;
+   }
+ 
+ template <typename T>
+ static void
+ store_unaligned(void *p, T value)
+   {
+   memcpy(p, &value, sizeof(value));
+   }
+ 
+ static __int128
+ signed_int128_max()
+   {
+   unsigned __int128 value = ~static_cast<unsigned __int128>(0);
+   value >>= 1;
+   return static_cast<__int128>(value);
+   }
+ 
+ static void *
+ checked_realloc(void *ptr, size_t size)
+   {
+   void *new_ptr = realloc(ptr, size);
+   massert(new_ptr);
+   return new_ptr;
+   }
+ 
+ 
  // Forward reference:
  extern "C"
  int
*************** size_t      __gg__unique_prog_id
*** 169,175 ****
  
  // Whenever an exception status is set, a snapshot of the current statement
  // location information are established in the "last_exception..." variables.
! // This is in accordance with the ISO requirements of "14.6.13.1.1 General" that
  // describe how a "last exception status" is maintained.
  // other "location" information
  static int         last_exception_code;
--- 228,235 ----
  
  // Whenever an exception status is set, a snapshot of the current statement
  // location information are established in the "last_exception..." variables.
! // This is in accordance with the ISO requirements of "14.6.13.1.1 General"
! // that
  // describe how a "last exception status" is maintained.
  // other "location" information
  static int         last_exception_code;
*************** void       *__gg__entry_location = NULL;
*** 202,208 ****
  // This is the current value at the back of the PERFORM <PROC> stack of
  // procedure signatures.  Said another way:  When the exit address at
  // the end of a paragraph matches this value address, then it is time to pop
! // the return address off of the stack.  It's in this fashion that we implements
  // nested PERFORM PROC statements.
  void       *__gg__exit_address = NULL;
  
--- 262,269 ----
  // This is the current value at the back of the PERFORM <PROC> stack of
  // procedure signatures.  Said another way:  When the exit address at
  // the end of a paragraph matches this value address, then it is time to pop
! // the return address off of the stack.  It's in this fashion that we
! // implements
  // nested PERFORM PROC statements.
  void       *__gg__exit_address = NULL;
  
*************** static cbl_encoding_t encoding_for_sort;
*** 228,234 ****
   *  1. sets isection to record the declarative
   *  2. for a nonfatal EC, sets handled, indication no further action is needed
   *
!  * A Declarative may use RESUME, which clears ec_status, which is a "handled" state.
   *
   * Default processing ensures return to initial state.
   */
--- 289,296 ----
   *  1. sets isection to record the declarative
   *  2. for a nonfatal EC, sets handled, indication no further action is needed
   *
!  * A Declarative may use RESUME, which clears ec_status, which is a "handled"
!  * state.
   *
   * Default processing ensures return to initial state.
   */
*************** struct program_state
*** 492,498 ****
    };
  
  static std::vector<program_state> program_states;
! #define collated(a)          (program_states.back().rt_collation[(unsigned int)(a&0xFF)])
  #define program_name         (program_states.back().rt_program_name)
  #define currency_signs(a)    (__gg__currency_signs[(a)])
  
--- 554,561 ----
    };
  
  static std::vector<program_state> program_states;
! #define collated(a) \
!         (program_states.back().rt_collation[(unsigned int)(a&0xFF)])
  #define program_name         (program_states.back().rt_program_name)
  #define currency_signs(a)    (__gg__currency_signs[(a)])
  
*************** __gg__decimal_point_is_comma()
*** 613,624 ****
  static __int128
  edited_to_binary( const cblc_field_t *field,
                    char *ps_,
!                   int length,
                    int *rdigits)
    {
    charmap_t *charmap = __gg__get_charmap(field->encoding);
  
!   const unsigned char *ps = const_cast<const unsigned char *>(PTRCAST(unsigned char, ps_));
    // This routine is used for converting NumericEdited strings to
    // binary.
  
--- 676,687 ----
  static __int128
  edited_to_binary( const cblc_field_t *field,
                    char *ps_,
!                   size_t length,
                    int *rdigits)
    {
    charmap_t *charmap = __gg__get_charmap(field->encoding);
  
!   const unsigned char *ps = as_unsigned_chars(ps_);
    // This routine is used for converting NumericEdited strings to
    // binary.
  
*************** edited_to_binary( const cblc_field_t *fi
*** 635,672 ****
    *rdigits = 0;
  
    // index into the ps string
!   int index = 0;
  
    // Create a delta_r for counting digits to the right of
    // any decimal point.  If and when we encounter a decimal point,
    // we'll set this to one, otherwise it'll stay zero.
-   int delta_r = 0;
  
    __int128 result = 0;
  
!   // We need to check the last two characters.  If CR or DB, then the result
!   // is negative:
!   if( length >= 2)
!     {
!     if(         ((ps[length-2]&0xFF) == charmap->mapped_character(ascii_D)
!               || (ps[length-2]&0xFF) == charmap->mapped_character(ascii_d))
!             &&  ((ps[length-1]&0xFF) == charmap->mapped_character(ascii_B)
!               || (ps[length-1]&0xFF) == charmap->mapped_character(ascii_b)) )
!       {
!       hyphen = 1;
!       }
!     else if(    ((ps[length-2]&0xFF) == charmap->mapped_character(ascii_C)
!               || (ps[length-2]&0xFF) == charmap->mapped_character(ascii_c))
!             &&  ((ps[length-1]&0xFF) == charmap->mapped_character(ascii_R)
!               || (ps[length-1]&0xFF) == charmap->mapped_character(ascii_r)) )
!       {
!       hyphen = 1;
!       }
!     }
  
    while( index < length )
      {
!     unsigned char ch = ps[index++] & 0xFF;
      if( ch == charmap->mapped_character(__gg__decimal_point) )
        {
        delta_r = 1;
--- 698,723 ----
    *rdigits = 0;
  
    // index into the ps string
!   size_t index = 0;
  
    // Create a delta_r for counting digits to the right of
    // any decimal point.  If and when we encounter a decimal point,
    // we'll set this to one, otherwise it'll stay zero.
  
+   int delta_r = 0;
    __int128 result = 0;
  
!   cbl_char_t chm2 = 0;
!   cbl_char_t chm1 = 0;
  
    while( index < length )
      {
!     cbl_char_t ch = charmap->getch(ps, &index);
! 
!     // Save the last two characters for the DB/CR test:
!     chm2 = chm1;
!     chm1 = ch;
! 
      if( ch == charmap->mapped_character(__gg__decimal_point) )
        {
        delta_r = 1;
*************** edited_to_binary( const cblc_field_t *fi
*** 678,694 ****
        continue;
        }
  
!     if(  charmap->mapped_character(ascii_0) <= ch
        && ch <= charmap->mapped_character(ascii_9) )
        {
        result *= 10;
!       // In both EBCDIC and ASCII, this works:
!       result += ch & 0x0F ;
        *rdigits += delta_r ;
        continue;
        }
      }
  
    if( hyphen )
      {
      result = -result;
--- 729,773 ----
        continue;
        }
  
!     if(  ch >= charmap->mapped_character(ascii_0)
        && ch <= charmap->mapped_character(ascii_9) )
        {
+       uint8_t the_byte;
+       if( charmap->is_big_endian() )
+         {
+         the_byte = ch >> ((charmap->stride()-1)*8);
+         }
+       else
+         {
+         the_byte = ch;
+         }
        result *= 10;
!       result += the_byte & 0x0F ;
        *rdigits += delta_r ;
        continue;
        }
      }
  
+   // We need to check the last two characters.  If CR or DB, then the result
+   // is negative:
+   if( !hyphen && length >= 2)
+     {
+     if(        (   chm2 == charmap->mapped_character(ascii_D)
+                 || chm2 == charmap->mapped_character(ascii_d))
+             && (   chm1 == charmap->mapped_character(ascii_B)
+                 || chm1 == charmap->mapped_character(ascii_b)) )
+       {
+       hyphen = 1;
+       }
+     else if(   (   chm2 == charmap->mapped_character(ascii_C)
+                 || chm2 == charmap->mapped_character(ascii_c))
+             && (   chm1 == charmap->mapped_character(ascii_R)
+                 || chm1 == charmap->mapped_character(ascii_r)) )
+       {
+       hyphen = 1;
+       }
+     }
+ 
    if( hyphen )
      {
      result = -result;
*************** edited_to_binary( const cblc_field_t *fi
*** 698,753 ****
  
  static
  __int128
! native_to_binary_signed(void *psource,
!                         int capacity )
    {
!   __int128 result;
    switch(capacity)
      {
      case 1:
!       result = *reinterpret_cast<int8_t *>(psource);
        break;
      case 2:
!       result = *reinterpret_cast<int16_t *>(psource);
        break;
      case 4:
!       result = *reinterpret_cast<int32_t *>(psource);
        break;
      case 8:
!       result = *reinterpret_cast<int64_t *>(psource);
        break;
      case 16:
!       result = *reinterpret_cast<__int128 *>(psource);
        break;
      }
    return result;
    }
  
  static
  __int128
! native_to_binary_unsigned(void *psource,
!                           int capacity)
    {
!   __int128 result;
    switch(capacity)
      {
      case 1:
!       result = *reinterpret_cast<uint8_t *>(psource);
        break;
      case 2:
!       result = *reinterpret_cast<uint16_t *>(psource);
        break;
      case 4:
!       result = *reinterpret_cast<uint32_t *>(psource);
        break;
      case 8:
!       result = *reinterpret_cast<uint64_t *>(psource);
        break;
      case 16:
!       result = *reinterpret_cast<unsigned __int128 *>(psource);
        break;
      }
!   return result;
    }
  
  static
--- 777,836 ----
  
  static
  __int128
! native_to_binary_signed(const void *psource,
!                               int   capacity )
    {
!   __int128 result = 0;
    switch(capacity)
      {
      case 1:
!       result = load_unaligned<int8_t>(psource);
        break;
      case 2:
!       result = load_unaligned<int16_t>(psource);
        break;
      case 4:
!       result = load_unaligned<int32_t>(psource);
        break;
      case 8:
!       result = load_unaligned<int64_t>(psource);
        break;
      case 16:
!       result = load_unaligned<__int128>(psource);
        break;
+     default:
+       abort();
      }
    return result;
    }
  
  static
  __int128
! native_to_binary_unsigned(const void *psource,
!                                 int   capacity)
    {
!   unsigned __int128 result = 0;
    switch(capacity)
      {
      case 1:
!       result = load_unaligned<uint8_t>(psource);
        break;
      case 2:
!       result = load_unaligned<uint16_t>(psource);
        break;
      case 4:
!       result = load_unaligned<uint32_t>(psource);
        break;
      case 8:
!       result = load_unaligned<uint64_t>(psource);
        break;
      case 16:
!       result = load_unaligned<unsigned __int128>(psource);
        break;
+     default:
+       abort();
      }
!   return static_cast<__int128>(result);
    }
  
  static
*************** big_endian_to_binary_signed(const void *
*** 859,864 ****
--- 942,1019 ----
    return retval;
    }
  
+ #define digit_rt(loc, offset) (((loc)[(offset) * stride]) & 0x0F)
+ 
+ static __int128
+ num_disp_dive_rt(const unsigned char *pdigits,
+                     int            ndigits,
+                     int            stride)
+   {
+   __int128 retval;
+   switch(ndigits)
+     {
+     case 1:
+       retval =  digit_rt(pdigits, 0);
+       break;
+     case 2:
+       retval =  digit_rt(pdigits, 0)*10
+               + digit_rt(pdigits, 1);
+       break;
+     case 3:
+       retval =  digit_rt(pdigits, 0)*100
+               + digit_rt(pdigits, 1)*10
+               + digit_rt(pdigits, 2);
+       break;
+     case 4:
+       retval =  digit_rt(pdigits, 0)*1000
+               + digit_rt(pdigits, 1)*100
+               + digit_rt(pdigits, 2)*10
+               + digit_rt(pdigits, 3);
+       break;
+     default:
+       {
+       int nright = ndigits/2;
+       int nleft  = ndigits - nright;
+       __int128 pot = __gg__power_of_ten(nright);
+       retval =   num_disp_dive_rt(pdigits,               nleft, stride) * pot
+                + num_disp_dive_rt(pdigits+nleft*stride, nright, stride);
+       break;
+       }
+     }
+   return retval;
+   }
+ 
+ static __int128
+ numeric_display_to_binary(const unsigned char *signp,
+                                 const unsigned char *pdigits,
+                                       int            ndigits,
+                                       int            stride)
+   {
+   __int128 retval;
+ 
+   retval = num_disp_dive_rt(pdigits, ndigits, stride);
+ 
+   // For speed, we assume this value is well-formed:
+   if( *signp == ascii_minus )
+     {
+     retval = -retval;
+     }
+   else
+     {
+     unsigned int sbyte = *signp & 0xF0;
+     switch(sbyte)
+       {
+       case 0x60: // EBCDIC '-' is 0x60, and no other 0x6z characters matter.
+       case 0x70: // ASCII internal negative
+       case 0xD0: // EBDIC internal negative
+         retval = -retval;
+       break;
+       }
+     }
+ 
+   return retval;
+   }
+ 
  static
  __int128
  get_binary_value_local(  int                 *rdigits,
*************** get_binary_value_local(  int
*** 879,885 ****
      case FldAlphanumeric :
        // Read the data area as a dirty string:
        retval = __gg__dirty_to_binary(
!                         PTRCAST(const char, resolved_location),
                          resolved_var->encoding,
                          resolved_length,
                          rdigits );
--- 1034,1040 ----
      case FldAlphanumeric :
        // Read the data area as a dirty string:
        retval = __gg__dirty_to_binary(
!                         as_chars( resolved_location),
                          resolved_var->encoding,
                          resolved_length,
                          rdigits );
*************** get_binary_value_local(  int
*** 906,921 ****
          // resulting binary number to the maximum possible positive
          // value.
  
!         // Turn all the bits on
!         memset( &retval, 0xFF, sizeof(retval) );
! 
!         // Make it positive by turning off the highest order bit:
!         (PTRCAST(unsigned char, &retval))[sizeof(retval)-1] = 0x3F;
          }
        else
          {
          const charmap_t *charmap = __gg__get_charmap(resolved_var->encoding);
          int stride = charmap->stride();
          unsigned char *digits;
          unsigned char *sign_byte_location;
          int ndigits;
--- 1061,1082 ----
          // resulting binary number to the maximum possible positive
          // value.
  
!         retval = signed_int128_max();
          }
        else
          {
+         // To convert numeric display to binary, resolved_location needs to
+         // point to the leftmost digit.  For little-endian encodings, that's
+         // where we are now.  For big-endian encodings, we need to bump
+         // the location by stride-1:
          const charmap_t *charmap = __gg__get_charmap(resolved_var->encoding);
          int stride = charmap->stride();
+ 
+         if( charmap->is_big_endian() )
+           {
+           resolved_location += stride-1;
+           }
+ 
          unsigned char *digits;
          unsigned char *sign_byte_location;
          int ndigits;
*************** get_binary_value_local(  int
*** 960,966 ****
            ndigits = resolved_length;
            }
          ndigits /= stride;
!         retval = __gg__numeric_display_to_binary(sign_byte_location,
                                                   digits,
                                                   ndigits,
                                                   stride);
--- 1121,1127 ----
            ndigits = resolved_length;
            }
          ndigits /= stride;
!         retval = numeric_display_to_binary(sign_byte_location,
                                                   digits,
                                                   ndigits,
                                                   stride);
*************** get_binary_value_local(  int
*** 970,976 ****
  
      case FldNumericEdited :
        retval = edited_to_binary(resolved_var,
!                                 PTRCAST(char, resolved_location),
                                  resolved_length,
                                  rdigits);
        break;
--- 1131,1137 ----
  
      case FldNumericEdited :
        retval = edited_to_binary(resolved_var,
!                                 as_chars( resolved_location),
                                  resolved_length,
                                  rdigits);
        break;
*************** get_binary_value_local(  int
*** 1049,1055 ****
      else
        {
        // We have a source with a PIC string like 999PPPPPP, which is
!       // a capacity of 3 and a resolved_var->rdigits of -6.  We need to multiply
        // retval by +6, and make rdigits zero:
        retval *= __gg__power_of_ten( -resolved_var->rdigits );
        *rdigits = 0;
--- 1210,1217 ----
      else
        {
        // We have a source with a PIC string like 999PPPPPP, which is
!       // a capacity of 3 and a resolved_var->rdigits of -6.  We need to
!       // multiply
        // retval by +6, and make rdigits zero:
        retval *= __gg__power_of_ten( -resolved_var->rdigits );
        *rdigits = 0;
*************** __gg__power_of_ten(int n)
*** 1186,1192 ****
      fprintf(stderr,
              "Trying to raise 10 to %d as an int128, which we can't do.\n",
              n);
!     fprintf(stderr, "The problem is in %s %s:%d.\n", __func__, __FILE__, __LINE__);
      abort();
      }
    if( n <= MAX_POWER )
--- 1348,1358 ----
      fprintf(stderr,
              "Trying to raise 10 to %d as an int128, which we can't do.\n",
              n);
!     fprintf(stderr,
!             "The problem is in %s %s:%d.\n",
!             __func__,
!             __FILE__,
!             __LINE__);
      abort();
      }
    if( n <= MAX_POWER )
*************** value_is_too_big(const cblc_field_t *var
*** 1282,1294 ****
      if( var->digits )
        {
        // I don't know how to describe this calculation.  I came up with the
!       // equation by working a few examples.  For instance, if value is 12345 and
        // source_rdigits is two, then we are trying to cram 123.45 into 99v99999
!       // and we have a size error.  So, digits is 7, rdigits is 5 and source_rdigits
!       // 2.  That means we compare 12345 with 10^(7 - 5 + 2), which is 12345 versus
        // 10000, which is too big, which means we have a size error.
        retval =
!           value >= __gg__power_of_ten( var->digits - var->rdigits + source_rdigits);
        }
      else
        {
--- 1448,1465 ----
      if( var->digits )
        {
        // I don't know how to describe this calculation.  I came up with the
!       // equation by working a few examples.  For instance, if value is 12345
!       // and
        // source_rdigits is two, then we are trying to cram 123.45 into 99v99999
!       // and we have a size error.  So, digits is 7, rdigits is 5 and
!       // source_rdigits
!       // 2.  That means we compare 12345 with 10^(7 - 5 + 2), which is 12345
!       // versus
        // 10000, which is too big, which means we have a size error.
        retval =
!           value >= __gg__power_of_ten(var->digits
!                                         - var->rdigits
!                                         + source_rdigits);
        }
      else
        {
*************** value_is_too_big(const cblc_field_t *var
*** 1298,1304 ****
                || var->type == FldPointer
                || var->type == FldIndex) )
          {
!         __gg__abort("value_is_too_big() was given a type it doesn't know about");
          }
        if( var->capacity < 16 )
          {
--- 1469,1476 ----
                || var->type == FldPointer
                || var->type == FldIndex) )
          {
!         __gg__abort("value_is_too_big() was given a type it doesn't "
!                       "know about");
          }
        if( var->capacity < 16 )
          {
*************** value_is_too_big(const cblc_field_t *var
*** 1313,1459 ****
    }
  
  static void
! binary_to_big_endian(   unsigned char *dest,
!                         int            bytes,
!                         __int128       value,
!                         bool           signable )
    {
    // value is native, and we want the result to be big-endian.
    if( signable )
      {
-     int8_t   v8;
-     int16_t  v16;
-     int32_t  v32;
-     int64_t  v64;
-     __int128 v128;
      switch(bytes)
        {
        case 1:
!         v8 = value;
!         *reinterpret_cast<int8_t*>(dest) = v8;
          break;
        case 2:
!         v16 = value;
          #if COBOL_LITTLE_ENDIAN
!         v16 = __builtin_bswap16(v16);
          #endif
!         *reinterpret_cast<int16_t*>(dest) = v16;
          break;
        case 4:
!         v32 = value;
          #if COBOL_LITTLE_ENDIAN
!         v32 = __builtin_bswap32(v32);
          #endif
!         *reinterpret_cast<int32_t*>(dest) = v32;
          break;
        case 8:
!         v64 = value;
          #if COBOL_LITTLE_ENDIAN
!         v64 = __builtin_bswap64(v64);
          #endif
!         *reinterpret_cast<int64_t*>(dest) = v64;
          break;
        default:
!         v128 = value;
          #if COBOL_LITTLE_ENDIAN
!         v128 = __builtin_bswap128(v128);
          #endif
!         *reinterpret_cast<__int128*>(dest) = v128;
          break;
        }
      }
    else
      {
!     uint8_t   v8;
!     uint16_t  v16;
!     uint32_t  v32;
!     uint64_t  v64;
!     unsigned __int128 v128;
      switch(bytes)
        {
        case 1:
!         v8 = value;
!         *reinterpret_cast<uint8_t*>(dest) = v8;
          break;
        case 2:
!         v16 = value;
          #if COBOL_LITTLE_ENDIAN
!         v16 = __builtin_bswap16(v16);
          #endif
!         *reinterpret_cast<uint16_t*>(dest) = v16;
          break;
        case 4:
!         v32 = value;
          #if COBOL_LITTLE_ENDIAN
!         v32 = __builtin_bswap32(v32);
          #endif
!         *reinterpret_cast<uint32_t*>(dest) = v32;
          break;
        case 8:
!         v64 = value;
          #if COBOL_LITTLE_ENDIAN
!         v64 = __builtin_bswap64(v64);
          #endif
!         *reinterpret_cast<uint64_t*>(dest) = v64;
          break;
        default:
!         v128 = value;
          #if COBOL_LITTLE_ENDIAN
!         v128 = __builtin_bswap128(v128);
          #endif
!         *reinterpret_cast<unsigned __int128*>(dest) = v128;
          break;
        }
      }
    }
  
  static void
! binary_to_native_binary(   void      *dest,
!                            int        bytes,
!                            __int128   value,
!                            bool       signable
!                        )
    {
    if(signable)
      {
      switch(bytes)
        {
        case 1:
!         *reinterpret_cast<int8_t  * >(dest) = value;
          break;
        case 2:
!         *reinterpret_cast<int16_t * >(dest) = value;
          break;
        case 4:
!         *reinterpret_cast<int32_t * >(dest) = value;
          break;
        case 8:
!         *reinterpret_cast<int64_t * >(dest) = value;
          break;
        case 16:
!         *reinterpret_cast<__int128 * >(dest) = value;
          break;
        }
      }
    else
      {
      switch(bytes)
        {
        case 1:
!         *reinterpret_cast<uint8_t  * >(dest) = value;
          break;
        case 2:
!         *reinterpret_cast<uint16_t * >(dest) = value;
          break;
        case 4:
!         *reinterpret_cast<uint32_t * >(dest) = value;
          break;
        case 8:
!         *reinterpret_cast<uint64_t * >(dest) = value;
          break;
        case 16:
!         *reinterpret_cast<unsigned __int128 * >(dest) = value;
          break;
        }
      }
    }
--- 1485,1640 ----
    }
  
  static void
! binary_to_big_endian(unsigned char *dest,
!                      int            bytes,
!                      __int128       value,
!                      bool           signable )
    {
    // value is native, and we want the result to be big-endian.
    if( signable )
      {
      switch(bytes)
        {
        case 1:
!         store_unaligned<int8_t>(dest, static_cast<int8_t>(value));
          break;
        case 2:
!         {
!         int16_t v = static_cast<int16_t>(value);
          #if COBOL_LITTLE_ENDIAN
!         v = static_cast<int16_t>(__builtin_bswap16(v));
          #endif
!         store_unaligned<int16_t>(dest, v);
          break;
+         }
        case 4:
!         {
!         int32_t v = static_cast<int32_t>(value);
          #if COBOL_LITTLE_ENDIAN
!         v = static_cast<int32_t>(__builtin_bswap32(v));
          #endif
!         store_unaligned<int32_t>(dest, v);
          break;
+         }
        case 8:
!         {
!         int64_t v = static_cast<int64_t>(value);
          #if COBOL_LITTLE_ENDIAN
!         v = static_cast<int64_t>(__builtin_bswap64(v));
          #endif
!         store_unaligned<int64_t>(dest, v);
          break;
+         }
        default:
!         {
!         __int128 v = value;
          #if COBOL_LITTLE_ENDIAN
!         v = static_cast<__int128>(__builtin_bswap128(v));
          #endif
!         store_unaligned<__int128>(dest, v);
          break;
+         }
        }
      }
    else
      {
!     unsigned __int128 uvalue = static_cast<unsigned __int128>(value);
      switch(bytes)
        {
        case 1:
!         store_unaligned<uint8_t>(dest, static_cast<uint8_t>(uvalue));
          break;
        case 2:
!         {
!         uint16_t v = static_cast<uint16_t>(uvalue);
          #if COBOL_LITTLE_ENDIAN
!         v = __builtin_bswap16(v);
          #endif
!         store_unaligned<uint16_t>(dest, v);
          break;
+         }
        case 4:
!         {
!         uint32_t v = static_cast<uint32_t>(uvalue);
          #if COBOL_LITTLE_ENDIAN
!         v = __builtin_bswap32(v);
          #endif
!         store_unaligned<uint32_t>(dest, v);
          break;
+         }
        case 8:
!         {
!         uint64_t v = static_cast<uint64_t>(uvalue);
          #if COBOL_LITTLE_ENDIAN
!         v = __builtin_bswap64(v);
          #endif
!         store_unaligned<uint64_t>(dest, v);
          break;
+         }
        default:
!         {
!         unsigned __int128 v = uvalue;
          #if COBOL_LITTLE_ENDIAN
!         v = __builtin_bswap128(v);
          #endif
!         store_unaligned<unsigned __int128>(dest, v);
          break;
+         }
        }
      }
    }
  
  static void
! binary_to_native_binary(void      *dest,
!                         int        bytes,
!                         __int128   value,
!                         bool       signable)
    {
    if(signable)
      {
      switch(bytes)
        {
        case 1:
!         store_unaligned<int8_t>(dest, static_cast<int8_t>(value));
          break;
        case 2:
!         store_unaligned<int16_t>(dest, static_cast<int16_t>(value));
          break;
        case 4:
!         store_unaligned<int32_t>(dest, static_cast<int32_t>(value));
          break;
        case 8:
!         store_unaligned<int64_t>(dest, static_cast<int64_t>(value));
          break;
        case 16:
!         store_unaligned<__int128>(dest, value);
          break;
+       default:
+         abort();
        }
      }
    else
      {
+     unsigned __int128 uvalue = static_cast<unsigned __int128>(value);
      switch(bytes)
        {
        case 1:
!         store_unaligned<uint8_t>(dest, static_cast<uint8_t>(uvalue));
          break;
        case 2:
!         store_unaligned<uint16_t>(dest, static_cast<uint16_t>(uvalue));
          break;
        case 4:
!         store_unaligned<uint32_t>(dest, static_cast<uint32_t>(uvalue));
          break;
        case 8:
!         store_unaligned<uint64_t>(dest, static_cast<uint64_t>(uvalue));
          break;
        case 16:
!         store_unaligned<unsigned __int128>(dest, uvalue);
          break;
+       default:
+         abort();
        }
      }
    }
*************** int128_to_field(cblc_field_t   *var,
*** 1806,1812 ****
            {
            float tvalue = (float)value;
            tvalue /= (float)__gg__power_of_ten(source_rdigits);
!           *PTRCAST(float, location) = tvalue;
            break;
            }
  
--- 1987,1993 ----
            {
            float tvalue = (float)value;
            tvalue /= (float)__gg__power_of_ten(source_rdigits);
!           store_unaligned<float>(location, tvalue);
            break;
            }
  
*************** int128_to_field(cblc_field_t   *var,
*** 1814,1820 ****
            {
            double tvalue = (double)value;
            tvalue /= (double)__gg__power_of_ten(source_rdigits);
!           *PTRCAST(double, location) = tvalue;
            break;
            }
  
--- 1995,2001 ----
            {
            double tvalue = (double)value;
            tvalue /= (double)__gg__power_of_ten(source_rdigits);
!           store_unaligned<double>(location, tvalue);
            break;
            }
  
*************** int128_to_field(cblc_field_t   *var,
*** 1894,1904 ****
          // going into memory has no decimal places.
          target_rdigits = 0;
  
!         // We have some additional scaling of value to do to make things line up.
  
          if( var->rdigits >= 0 )
            {
!           // Our target is something like PPPPPP999, meaning that var->actual_length
            // is 3, and var->rdigits is 6.
  
            // By rights, our caller should have given us something like 123 with
--- 2075,2087 ----
          // going into memory has no decimal places.
          target_rdigits = 0;
  
!         // We have some additional scaling of value to do to make things line
!         // up.
  
          if( var->rdigits >= 0 )
            {
!           // Our target is something like PPPPPP999, meaning that
!           // var->actual_length
            // is 3, and var->rdigits is 6.
  
            // By rights, our caller should have given us something like 123 with
*************** int128_to_field(cblc_field_t   *var,
*** 2003,2009 ****
              memset(location, 0, length);
              const charmap_t *charmap = __gg__get_charmap(var->encoding);
              size_error = __gg__binary_to_string_encoded(
!                                            PTRCAST(char, location),
                                             length > MAX_FIXED_POINT_DIGITS
                                                      ? MAX_FIXED_POINT_DIGITS
                                                      : length/charmap->stride(),
--- 2186,2192 ----
              memset(location, 0, length);
              const charmap_t *charmap = __gg__get_charmap(var->encoding);
              size_error = __gg__binary_to_string_encoded(
!                                            as_chars( location),
                                             length > MAX_FIXED_POINT_DIGITS
                                                      ? MAX_FIXED_POINT_DIGITS
                                                      : length/charmap->stride(),
*************** int128_to_field(cblc_field_t   *var,
*** 2031,2037 ****
                    // The sign character goes into the first location
                    size_error =
                       __gg__binary_to_string_encoded(
!                                                 PTRCAST(char, location+stride),
                                                  var->digits,
                                                  value,
                                                  var->encoding);
--- 2214,2220 ----
                    // The sign character goes into the first location
                    size_error =
                       __gg__binary_to_string_encoded(
!                                                 as_chars( location+stride),
                                                  var->digits,
                                                  value,
                                                  var->encoding);
*************** int128_to_field(cblc_field_t   *var,
*** 2041,2047 ****
                    {
                    // The sign character goes into the last location
                    size_error =
!                     __gg__binary_to_string_encoded(PTRCAST(char, location),
                                                      var->digits,
                                                      value,
                                                      var->encoding);
--- 2224,2230 ----
                    {
                    // The sign character goes into the last location
                    size_error =
!                     __gg__binary_to_string_encoded(as_chars( location),
                                                      var->digits,
                                                      value,
                                                      var->encoding);
*************** int128_to_field(cblc_field_t   *var,
*** 2058,2064 ****
  
                  // First, convert the binary value to the correct-length string
                  size_error =
!                   __gg__binary_to_string_encoded(PTRCAST(char, location),
                                                    var->digits,
                                                    value,
                                                    var->encoding);
--- 2241,2247 ----
  
                  // First, convert the binary value to the correct-length string
                  size_error =
!                   __gg__binary_to_string_encoded(as_chars( location),
                                                    var->digits,
                                                    value,
                                                    var->encoding);
*************** int128_to_field(cblc_field_t   *var,
*** 2068,2074 ****
                  // suppress this is_negative flag.
                  if( size_error && is_negative )
                    {
!                   // If all of the digits are zero, then the result is zero, and
                    // we have to kill the is_negative flag:
                    is_negative = false;
                    size_t index = 0;
--- 2251,2258 ----
                  // suppress this is_negative flag.
                  if( size_error && is_negative )
                    {
!                   // If all of the digits are zero, then the result is zero,
!                   // and
                    // we have to kill the is_negative flag:
                    is_negative = false;
                    size_t index = 0;
*************** int128_to_field(cblc_field_t   *var,
*** 2097,2103 ****
                {
                // It's a simple positive number
                size_error = __gg__binary_to_string_encoded(
!                                                     PTRCAST(char, location),
                                                      var->digits,
                                                      value,
                                                      var->encoding);
--- 2281,2287 ----
                {
                // It's a simple positive number
                size_error = __gg__binary_to_string_encoded(
!                                                     as_chars(location),
                                                      var->digits,
                                                      value,
                                                      var->encoding);
*************** int128_to_field(cblc_field_t   *var,
*** 2110,2116 ****
              charmap_t *charmap = __gg__get_charmap(var->encoding);
              if( value == 0 && (var->attr & blank_zero_e) )
                {
!               charmap->memset(location, charmap->mapped_character(ascii_space), length);
                }
              else
                {
--- 2294,2302 ----
              charmap_t *charmap = __gg__get_charmap(var->encoding);
              if( value == 0 && (var->attr & blank_zero_e) )
                {
!               charmap->memset(location,
!                               charmap->mapped_character(ascii_space),
!                               length);
                }
              else
                {
*************** int128_to_field(cblc_field_t   *var,
*** 2125,2131 ****
  
                // Convert that string according to the PICTURE clause
                size_error |= __gg__string_to_numeric_edited(
!                                  PTRCAST(char, location),
                                  ach,
                                  target_rdigits,
                                  is_negative,
--- 2311,2317 ----
  
                // Convert that string according to the PICTURE clause
                size_error |= __gg__string_to_numeric_edited(
!                                  as_chars( location),
                                  ach,
                                  target_rdigits,
                                  is_negative,
*************** int128_to_field(cblc_field_t   *var,
*** 2134,2140 ****
                const char *converted = __gg__iconverter(
                                       DEFAULT_SOURCE_ENCODING,
                                       var->encoding,
!                                      PTRCAST(char, location),
                                       var->capacity/charmap->stride(),
                                       &outlength);
                memcpy(location, converted, outlength);
--- 2320,2326 ----
                const char *converted = __gg__iconverter(
                                       DEFAULT_SOURCE_ENCODING,
                                       var->encoding,
!                                      as_chars( location),
                                       var->capacity/charmap->stride(),
                                       &outlength);
                memcpy(location, converted, outlength);
*************** int128_to_field(cblc_field_t   *var,
*** 2175,2181 ****
  
              // Convert that string according to the PICTURE clause
              __gg__string_to_alpha_edited(
!                             PTRCAST(char, location),
                              var->encoding,
                              ach,
                              strlen(ach),
--- 2361,2367 ----
  
              // Convert that string according to the PICTURE clause
              __gg__string_to_alpha_edited(
!                             as_chars( location),
                              var->encoding,
                              ach,
                              strlen(ach),
*************** __gg__field_from_string(cblc_field_t *fi
*** 2300,2307 ****
    cblc_field_t source = {};
    source.type = FldAlphanumeric;
    source.encoding = field->encoding;
!   source.data = reinterpret_cast<unsigned char *>
!                                                 (const_cast<char *>(string)),
    source.capacity = string_length;
    __gg__move(  field, field_o, field_s,
                &source, source.offset, source.capacity,
--- 2486,2492 ----
    cblc_field_t source = {};
    source.type = FldAlphanumeric;
    source.encoding = field->encoding;
!   source.data = as_unsigned_chars(const_cast<char *>(string)),
    source.capacity = string_length;
    __gg__move(  field, field_o, field_s,
                &source, source.offset, source.capacity,
*************** field_from_ascii(cblc_field_t *field, ch
*** 2314,2320 ****
    cblc_field_t source = {};
    source.type = FldAlphanumeric;
    source.capacity = strlen(psz);
!   source.data = reinterpret_cast<unsigned char *>(psz);
    source.encoding = __gg__console_encoding;
    __gg__move(  field, field->offset, field->capacity,
               &source, source.offset, source.capacity,
--- 2499,2505 ----
    cblc_field_t source = {};
    source.type = FldAlphanumeric;
    source.capacity = strlen(psz);
!   source.data = as_unsigned_chars(psz);
    source.encoding = __gg__console_encoding;
    __gg__move(  field, field->offset, field->capacity,
               &source, source.offset, source.capacity,
*************** uint32_t collation_position( cbl_char_t
*** 2541,2548 ****
    }
  
  static cbl_char_t
! uber_compare(cbl_char_t ch_left, cbl_char_t ch_right)
    {
    if( ((ch_left | ch_right) & 0xFFFFFF00) == 0x00000000 )
      {
      // This is where collation is going to have to be fixed for multi-byte
--- 2726,2744 ----
    }
  
  static cbl_char_t
! uber_compare(cbl_char_t ch_left,
!              cbl_char_t ch_right,
!              const charmap_t *charmap)
    {
+   if( charmap->is_big_endian() )
+     {
+     // This simple hack works when the big-endian characters nonetheless fit
+     // into zero through 255.  This is short-sighted.  I need glasses.  Again,
+     // I do not know how to fix this until multi-byte collation is addressed.
+     ch_left  >>= 8*(charmap->stride()-1);
+     ch_right >>= 8*(charmap->stride()-1);
+     }
+ 
    if( ((ch_left | ch_right) & 0xFFFFFF00) == 0x00000000 )
      {
      // This is where collation is going to have to be fixed for multi-byte
*************** __gg__setop_compare(
*** 2584,2594 ****
       In order to compare the apples in candidate to the UTF32 values in the
       domain, we need to convert the candidate to UTF32 as well: */
  
!   const charmap_t *charmap = __gg__get_charmap(DEFAULT_32_ENCODING);
  
    size_t nbytes_converted;
    const char *candidate = __gg__iconverter(candidate_field->encoding,
!                                             DEFAULT_32_ENCODING,
                                              candidate_field->data,
                                              candidate_field->capacity,
                                              &nbytes_converted);
--- 2780,2790 ----
       In order to compare the apples in candidate to the UTF32 values in the
       domain, we need to convert the candidate to UTF32 as well: */
  
!   const charmap_t *charmap = __gg__get_charmap(HOST_32_ENCODING);
  
    size_t nbytes_converted;
    const char *candidate = __gg__iconverter(candidate_field->encoding,
!                                             HOST_32_ENCODING,
                                              candidate_field->data,
                                              candidate_field->capacity,
                                              &nbytes_converted);
*************** __gg__setop_compare(
*** 2609,2615 ****
        // See the comments in genapi.cc::get_class_condition_string
        // to see how this string was encoded.
  
!       l = (int)strtoll(d, reinterpret_cast<char **>(&d), 16);
        if( l < 0 )
          {
          // This is a collation position, as given in the COBOL program. Make
--- 2805,2811 ----
        // See the comments in genapi.cc::get_class_condition_string
        // to see how this string was encoded.
  
!       l = (int)strtoll(d, &d, 16);
        if( l < 0 )
          {
          // This is a collation position, as given in the COBOL program. Make
*************** __gg__setop_compare(
*** 2626,2632 ****
        if( *d == '/' )
          {
          d += 1;
!         h = (int)strtoll(d, reinterpret_cast<char **>(&d), 16);
          if( h < 0 )
            {
            // This is a collation position; make it the same as
--- 2822,2828 ----
        if( *d == '/' )
          {
          d += 1;
!         h = (int)strtoll(d, &d, 16);
          if( h < 0 )
            {
            // This is a collation position; make it the same as
*************** __gg__dirty_to_binary(const char *dirty,
*** 2766,2772 ****
  
    cbl_char_t mapped_minus          = charmap->mapped_character(ascii_minus);
    cbl_char_t mapped_plus           = charmap->mapped_character(ascii_plus);
!   cbl_char_t mapped_decimal_point  = charmap->mapped_character(__gg__decimal_point);
    cbl_char_t mapped_0              = charmap->mapped_character(ascii_0);
    cbl_char_t mapped_9              = charmap->mapped_character(ascii_9);
    cbl_char_t mapped_E              = charmap->mapped_character(ascii_E);
--- 2962,2969 ----
  
    cbl_char_t mapped_minus          = charmap->mapped_character(ascii_minus);
    cbl_char_t mapped_plus           = charmap->mapped_character(ascii_plus);
!   cbl_char_t mapped_decimal_point =
!     charmap->mapped_character(__gg__decimal_point);
    cbl_char_t mapped_0              = charmap->mapped_character(ascii_0);
    cbl_char_t mapped_9              = charmap->mapped_character(ascii_9);
    cbl_char_t mapped_E              = charmap->mapped_character(ascii_E);
*************** __gg__dirty_to_binary(const char *dirty,
*** 2811,2816 ****
--- 3008,3017 ----
          {
          digit_count += 1;
          }
+       if( charmap->is_big_endian() )
+         {
+         retval >>= 8*(stride-1);
+         }
        }
      else
        {
*************** __gg__dirty_to_binary(const char *dirty,
*** 2841,2847 ****
      if( digit_count < MAX_FIXED_POINT_DIGITS )
        {
        retval *= 10;
!       retval += ch - mapped_0 ;
        *rdigits += delta_r;
        if( retval )
          {
--- 3042,3054 ----
      if( digit_count < MAX_FIXED_POINT_DIGITS )
        {
        retval *= 10;
!       ch -= mapped_0;
!       if( charmap->is_big_endian() )
!         {
!         ch >>= 8*(stride-1);
!         }
! 
!       retval += ch ;
        *rdigits += delta_r;
        if( retval )
          {
*************** get_scaled_rdigits(const cblc_field_t *f
*** 3116,3129 ****
      {
      if( field->rdigits < 0 )
        {
!       // The PIC string was something like 999PPPP, which means an rdigits value
        // of -4.  We return zero; somebody else will have the job of multiplying
        // the three significant digits by 10^4 to get the magnitude correct.
        retval = 0;
        }
      else
        {
!       // The PIC string was something like PPPP999, which means an rdigits value
        // of +4.  We return an rdigits value of 4 + 3 = 7, which will mean that
        // the three significant digits will be scaled to 0.0000999
        retval = field->digits + field->rdigits;
--- 3323,3338 ----
      {
      if( field->rdigits < 0 )
        {
!       // The PIC string was something like 999PPPP, which means an rdigits
!       // value
        // of -4.  We return zero; somebody else will have the job of multiplying
        // the three significant digits by 10^4 to get the magnitude correct.
        retval = 0;
        }
      else
        {
!       // The PIC string was something like PPPP999, which means an rdigits
!       // value
        // of +4.  We return an rdigits value of 4 + 3 = 7, which will mean that
        // the three significant digits will be scaled to 0.0000999
        retval = field->digits + field->rdigits;
*************** format_for_display_internal(char **dest,
*** 3204,3210 ****
            }
          else
            {
!           fprintf(stderr, "attempting to display a NULL pointer in %s\n", var->name);
            abort();
            }
          (*dest)[actual_length] = NULLCH;
--- 3413,3421 ----
            }
          else
            {
!           fprintf(stderr,
!                   "attempting to display a NULL pointer in %s\n",
!                   var->name);
            abort();
            }
          (*dest)[actual_length] = NULLCH;
*************** format_for_display_internal(char **dest,
*** 3238,3244 ****
            }
          else
            {
!           fprintf(stderr, "attempting to display a NULL pointer in %s\n", var->name);
            abort();
            }
          (*dest)[actual_length] = NULLCH;
--- 3449,3457 ----
            }
          else
            {
!           fprintf(stderr,
!                   "attempting to display a NULL pointer in %s\n",
!                   var->name);
            abort();
            }
          (*dest)[actual_length] = NULLCH;
*************** format_for_display_internal(char **dest,
*** 3261,3267 ****
          break;
          }
  
!       // We need the counts of digits to the left and right of the decimal point
        int rdigits = get_scaled_rdigits(var);
        int ldigits = var->digits - rdigits;
  
--- 3474,3481 ----
          break;
          }
  
!       // We need the counts of digits to the left and right of the decimal
!       // point
        int rdigits = get_scaled_rdigits(var);
        int ldigits = var->digits - rdigits;
  
*************** format_for_display_internal(char **dest,
*** 3297,3303 ****
          const char *mapped = __gg__iconverter(
                                    var->encoding,
                                    enc_dest,
!                                   PTRCAST(char, actual_location),
                                    actual_length,
                                    &outlength);
          memcpy(converted, mapped, outlength);
--- 3511,3517 ----
          const char *mapped = __gg__iconverter(
                                    var->encoding,
                                    enc_dest,
!                                   as_chars( actual_location),
                                    actual_length,
                                    &outlength);
          memcpy(converted, mapped, outlength);
*************** format_for_display_internal(char **dest,
*** 3312,3319 ****
          unsigned char *signloc;
          unsigned char *digits;
          const unsigned char *digits_e;
          bool is_negative;
-         int index = 0;  // This is the running index into our output destination
  
          switch(signtype)
            {
--- 3526,3534 ----
          unsigned char *signloc;
          unsigned char *digits;
          const unsigned char *digits_e;
+         // This is the running index into our output destination.
+         int index = 0;
          bool is_negative;
  
          switch(signtype)
            {
*************** format_for_display_internal(char **dest,
*** 3330,3339 ****
            case 4:
              {
              // internal trailing
-             const charmap_t *charmap_from = __gg__get_charmap(var->encoding);
-             cbl_char_t original_sign_digit =
-                 charmap_from->getch(actual_location,
-                                     actual_length - charmap_from->stride());
              signloc  = converted + outlength-1;
              digits   = converted;
              digits_e = converted + outlength;
--- 3545,3550 ----
*************** format_for_display_internal(char **dest,
*** 3344,3381 ****
                  set of garbage that might have been READ or REDEFINED into the
                  variable's memory.  I am not overly concerned.
              */
!             is_negative = *signloc > ascii_9 || *signloc < ascii_0;
!             *signloc = ascii_0 + (original_sign_digit & 0x0F);
              break;
              }
            case 5:
              {
              // internal leading
-             const charmap_t *charmap_from = __gg__get_charmap(var->encoding);
-             cbl_char_t original_sign_digit =
-                 charmap_from->getch(actual_location,
-                                     (size_t)0);
              signloc  = converted;
              digits   = converted;
              digits_e = converted + outlength;
!             is_negative = *signloc > ascii_9 || *signloc < ascii_0;
!             *signloc = ascii_0 + (original_sign_digit & 0x0F);
              break;
              }
            case 6:
              // separate trailing
              signloc  = converted + outlength-1;
              digits   = converted;
              digits_e = converted + outlength-1;
!             is_negative = *signloc == ascii_minus;
              break;
            case 7:
              // separate leading
              signloc  = converted;
              digits   = converted+1;
              digits_e = converted + outlength;
              is_negative = *signloc == ascii_minus;
              break;
            }
          // We have the sign sorted out; make sure that the digits are valid:
          unsigned char *running_location = digits;
--- 3555,3763 ----
                  set of garbage that might have been READ or REDEFINED into the
                  variable's memory.  I am not overly concerned.
              */
!             const charmap_t *charmap_src = __gg__get_charmap(var->encoding);
!             if( charmap_src->is_like_ebcdic() )
!               {
!               switch(*signloc)
!                 {
!                 case '0':
!                 case '1':
!                 case '2':
!                 case '3':
!                 case '4':
!                 case '5':
!                 case '6':
!                 case '7':
!                 case '8':
!                 case '9':
!                   is_negative = false;
!                   break;
!                 case '}':
!                   is_negative = true;
!                   *signloc = '0';
!                   break;
!                 case 'J':
!                 case 'K':
!                 case 'L':
!                 case 'M':
!                 case 'N':
!                 case 'O':
!                 case 'P':
!                 case 'Q':
!                 case 'R':
!                   is_negative = true;
!                   *signloc = ascii_zero + *signloc - 'J' + 1;
!                   break;
!                 default:
!                   *signloc = 0;
!                   break;
!                 }
!               }
!             else
!               {
!               switch(*signloc)
!                 {
!                 case '0':
!                 case '1':
!                 case '2':
!                 case '3':
!                 case '4':
!                 case '5':
!                 case '6':
!                 case '7':
!                 case '8':
!                 case '9':
!                   is_negative = false;
!                   break;
!                 case 'p':
!                 case 'q':
!                 case 'r':
!                 case 's':
!                 case 't':
!                 case 'u':
!                 case 'v':
!                 case 'w':
!                 case 'x':
!                 case 'y':
!                   is_negative = true;
!                   *signloc = ascii_zero + *signloc - 'p';
!                   break;
!                 default:
!                   is_negative = false;
!                   *signloc = 0;
!                   break;
!                 }
!               }
              break;
              }
            case 5:
              {
              // internal leading
              signloc  = converted;
              digits   = converted;
              digits_e = converted + outlength;
!             const charmap_t *charmap_src = __gg__get_charmap(var->encoding);
!             if( charmap_src->is_like_ebcdic() )
!               {
!               switch(*signloc)
!                 {
!                 case '0':
!                 case '1':
!                 case '2':
!                 case '3':
!                 case '4':
!                 case '5':
!                 case '6':
!                 case '7':
!                 case '8':
!                 case '9':
!                   is_negative = false;
!                   break;
!                 case '}':
!                   is_negative = true;
!                   *signloc = '0';
!                   break;
!                 case 'J':
!                 case 'K':
!                 case 'L':
!                 case 'M':
!                 case 'N':
!                 case 'O':
!                 case 'P':
!                 case 'Q':
!                 case 'R':
!                   is_negative = true;
!                   *signloc = ascii_zero + *signloc - 'J' + 1;
!                   break;
!                 default:
!                   *signloc = 0;
!                   break;
!                 }
!               }
!             else
!               {
!               switch(*signloc)
!                 {
!                 case '0':
!                 case '1':
!                 case '2':
!                 case '3':
!                 case '4':
!                 case '5':
!                 case '6':
!                 case '7':
!                 case '8':
!                 case '9':
!                   is_negative = false;
!                   break;
!                 case 'p':
!                 case 'q':
!                 case 'r':
!                 case 's':
!                 case 't':
!                 case 'u':
!                 case 'v':
!                 case 'w':
!                 case 'x':
!                 case 'y':
!                   is_negative = true;
!                   *signloc = ascii_zero + *signloc - 'p';
!                   break;
!                 default:
!                   *signloc = 0;
!                   is_negative = false;
!                   break;
!                 }
!               }
              break;
              }
            case 6:
+             {
              // separate trailing
              signloc  = converted + outlength-1;
              digits   = converted;
              digits_e = converted + outlength-1;
!             switch(*signloc)
!               {
!               case ascii_plus:
!                 is_negative = false;
!                 break;
!               case ascii_minus:
!                 is_negative = true;
!                 break;
!               default:
!                 {
!                 is_negative = false;
!                 *signloc = ascii_zero;
!                 break;
!                 }
!               }
              break;
+             }
            case 7:
+             {
              // separate leading
              signloc  = converted;
              digits   = converted+1;
              digits_e = converted + outlength;
              is_negative = *signloc == ascii_minus;
+             switch(*signloc)
+               {
+               case ascii_plus:
+                 is_negative = false;
+                 break;
+               case ascii_minus:
+                 is_negative = true;
+                 break;
+               default:
+                 {
+                 is_negative = false;
+                 *signloc = ascii_zero;
+                 break;
+                 }
+               }
              break;
+             }
            }
          // We have the sign sorted out; make sure that the digits are valid:
          unsigned char *running_location = digits;
*************** format_for_display_internal(char **dest,
*** 3467,3473 ****
          }
        else
          {
!         fprintf(stderr, "attempting to display a NULL pointer in %s\n", var->name);
          abort();
          }
        }
--- 3849,3857 ----
          }
        else
          {
!         fprintf(stderr,
!                 "attempting to display a NULL pointer in %s\n",
!                 var->name);
          abort();
          }
        }
*************** format_for_display_internal(char **dest,
*** 3502,3508 ****
          }
        else
          {
!         // USAGE BINARY comes through without a digits value.  Force it based on
          // the capacity:
          switch( var->capacity )
            {
--- 3886,3893 ----
          }
        else
          {
!         // USAGE BINARY comes through without a digits value.  Force it based
!         // on
          // the capacity:
          switch( var->capacity )
            {
*************** format_for_display_internal(char **dest,
*** 3589,3596 ****
            }
          else
            {
!           // An intermediate is a rubber-band variable.  It has no formal format.
!           // So, to make it cleaner for display purposes, let's clear off leading
            // '+' characters and trailing zeroes.
            if( **dest == ascii_plus )
              {
--- 3974,3983 ----
            }
          else
            {
!           // An intermediate is a rubber-band variable.  It has no formal
!           // format.
!           // So, to make it cleaner for display purposes, let's clear off
!           // leading
            // '+' characters and trailing zeroes.
            if( **dest == ascii_plus )
              {
*************** format_for_display_internal(char **dest,
*** 3604,3610 ****
                {
                *p-- = '\0';
                }
!             // And if we are left with just a decimal point, strip that off, too.
              while( *p ==  charmap->decimal_point() )
                {
                *p = '\0';
--- 3991,3998 ----
                {
                *p-- = '\0';
                }
!             // And if we are left with just a decimal point, strip that off,
!             // too.
              while( *p ==  charmap->decimal_point() )
                {
                *p = '\0';
*************** format_for_display_internal(char **dest,
*** 3683,3689 ****
            // the low side, and 9999999 and then 1E+7 on the high side
            // 10,000,000 = 1E7
            char ach[64];
!           _Float32 floatval = *PTRCAST(_Float32, actual_location);
            strfromf32(ach, sizeof(ach), "%.9E", floatval);
            char *p = strchr(ach, 'E');
            if( !p )
--- 4071,4077 ----
            // the low side, and 9999999 and then 1E+7 on the high side
            // 10,000,000 = 1E7
            char ach[64];
!           _Float32 floatval = load_unaligned<_Float32>(actual_location);
            strfromf32(ach, sizeof(ach), "%.9E", floatval);
            char *p = strchr(ach, 'E');
            if( !p )
*************** format_for_display_internal(char **dest,
*** 3754,3760 ****
            // We will also format numbers so that we produce 0.01 and 1E-3 on
            // the low side, and 9999999 and then 1E+15 on the high side
            char ach[64];
!           _Float64 floatval = *PTRCAST(_Float64, actual_location);
            strfromf64(ach, sizeof(ach), "%.17E", floatval);
            char *p = strchr(ach, 'E');
            if( !p )
--- 4142,4148 ----
            // We will also format numbers so that we produce 0.01 and 1E-3 on
            // the low side, and 9999999 and then 1E+15 on the high side
            char ach[64];
!           _Float64 floatval = load_unaligned<_Float64>(actual_location);
            strfromf64(ach, sizeof(ach), "%.17E", floatval);
            char *p = strchr(ach, 'E');
            if( !p )
*************** format_for_display_internal(char **dest,
*** 3929,3935 ****
      // Because this is a intermediate Bin5, let's strip off leading zeroes.
      //
      // Because we don't know what we are dealing with, we created a 37-digit
!     // number with a variable number of rdigits.  So, we usually have a boatload
      // of leading zeroes.  I find that display offensive, so let's fix it:
      unsigned char *p1 = (unsigned char *)(*dest);
      if( *p1 == ascii_plus || *p1 == ascii_minus )
--- 4317,4324 ----
      // Because this is a intermediate Bin5, let's strip off leading zeroes.
      //
      // Because we don't know what we are dealing with, we created a 37-digit
!     // number with a variable number of rdigits.  So, we usually have a
!     // boatload
      // of leading zeroes.  I find that display offensive, so let's fix it:
      unsigned char *p1 = (unsigned char *)(*dest);
      if( *p1 == ascii_plus || *p1 == ascii_minus )
*************** format_for_display_internal(char **dest,
*** 3941,3947 ****
        {
        p2 += 1;
        }
!     strcpy(PTRCAST(char, p1), PTRCAST(char, p2));
      }
  
    done:
--- 4330,4336 ----
        {
        p2 += 1;
        }
!     strcpy(as_chars( p1), as_chars( p2));
      }
  
    done:
*************** compare_88( const char    *list,
*** 3967,3973 ****
    size_t list_len = list_e-list;
  
    // We need to convert the conditional to be UTF32 as well:
!   charmap_t *charmap = __gg__get_charmap(DEFAULT_32_ENCODING);
    size_t stride = charmap->stride();
    cbl_char_t mapped_space = charmap->mapped_character(ascii_space);
  
--- 4356,4362 ----
    size_t list_len = list_e-list;
  
    // We need to convert the conditional to be UTF32 as well:
!   charmap_t *charmap = __gg__get_charmap(HOST_32_ENCODING);
    size_t stride = charmap->stride();
    cbl_char_t mapped_space = charmap->mapped_character(ascii_space);
  
*************** compare_88( const char    *list,
*** 3975,3981 ****
    size_t conditional_length=0;
    char * conditional_i = __gg__miconverter(
                                  conditional_->encoding,
!                                 DEFAULT_32_ENCODING,
                                  conditional_location_,
                                  conditional_length_,
                                  &conditional_length);
--- 4364,4370 ----
    size_t conditional_length=0;
    char * conditional_i = __gg__miconverter(
                                  conditional_->encoding,
!                                 HOST_32_ENCODING,
                                  conditional_location_,
                                  conditional_length_,
                                  &conditional_length);
*************** compare_88( const char    *list,
*** 4073,4079 ****
  
  static GCOB_FP128
  get_float128( const cblc_field_t *field,
!               unsigned char *location )
    {
    GCOB_FP128 retval=0;
    if(field->type == FldFloat )
--- 4462,4468 ----
  
  static GCOB_FP128
  get_float128( const cblc_field_t *field,
!               const unsigned char *location )
    {
    GCOB_FP128 retval=0;
    if(field->type == FldFloat )
*************** get_float128( const cblc_field_t *field,
*** 4081,4090 ****
      switch( field->capacity )
        {
        case 4:
!         retval = *PTRCAST(_Float32 , location);
          break;
        case 8:
!         retval = *PTRCAST(_Float64 , location);
          break;
        case 16:
          // retval = *(_Float128 *)location; doesn't work, because the SSE
--- 4470,4479 ----
      switch( field->capacity )
        {
        case 4:
!         retval = load_unaligned<_Float32>(location);
          break;
        case 8:
!         retval = load_unaligned<_Float64>(location);
          break;
        case 16:
          // retval = *(_Float128 *)location; doesn't work, because the SSE
*************** __gg__compare_field_class(const cblc_fie
*** 4172,4178 ****
    __int128 value;
    int rdigits;
  
!   charmap_t *charmap32 = __gg__get_charmap(DEFAULT_32_ENCODING);
    int stride32 = charmap32->stride();
    cbl_char_t mapped_F = charmap32->mapped_character(ascii_F);
    cbl_char_t mapped_Z = charmap32->mapped_character(ascii_Z);
--- 4561,4567 ----
    __int128 value;
    int rdigits;
  
!   charmap_t *charmap32 = __gg__get_charmap(HOST_32_ENCODING);
    int stride32 = charmap32->stride();
    cbl_char_t mapped_F = charmap32->mapped_character(ascii_F);
    cbl_char_t mapped_Z = charmap32->mapped_character(ascii_Z);
*************** __gg__compare_field_class(const cblc_fie
*** 4193,4199 ****
                                        conditional_location,
                                        conditional_length);
        char *walker = list->initial;
!       while(*walker)
          {
          cbl_char_t left_flag;
          size_t left_len;
--- 4582,4588 ----
                                        conditional_location,
                                        conditional_length);
        char *walker = list->initial;
!       for(;;)
          {
          cbl_char_t left_flag;
          size_t left_len;
*************** __gg__compare_field_class(const cblc_fie
*** 4206,4212 ****
--- 4595,4607 ----
          char *pend;
  
          left_len = charmap32->strtoull(walker, &pend, 10);
+         if( left_len == 0 )
+           {
+           // When the first bytes are zero, we've hit the end.
+           break;
+           }
          left_flag = charmap32->getch(pend, (size_t)0);
+ 
          left = pend+stride32;
  
          right = left + left_len*stride32;
*************** __gg__compare_field_class(const cblc_fie
*** 4230,4236 ****
            {
            left_value = __gg__dirty_to_binary(
                                    left,
!                                   DEFAULT_32_ENCODING,
                                    left_len*stride32,
                                    &left_rdigits);
            }
--- 4625,4631 ----
            {
            left_value = __gg__dirty_to_binary(
                                    left,
!                                   HOST_32_ENCODING,
                                    left_len*stride32,
                                    &left_rdigits);
            }
*************** __gg__compare_field_class(const cblc_fie
*** 4246,4252 ****
            {
            right_value = __gg__dirty_to_binary(
                                     right,
!                                    DEFAULT_32_ENCODING,
                                     right_len*stride32,
                                     &right_rdigits);
            }
--- 4641,4647 ----
            {
            right_value = __gg__dirty_to_binary(
                                     right,
!                                    HOST_32_ENCODING,
                                     right_len*stride32,
                                     &right_rdigits);
            }
*************** __gg__compare_field_class(const cblc_fie
*** 4283,4289 ****
        // This is an alphanumeric comparison.  The list is in UTF32, so we
        // are going to have to convert the conditional to UTF32.
        char *walker = list->initial;
!       while(*walker)
          {
          bool fig1;
          bool fig2;
--- 4678,4684 ----
        // This is an alphanumeric comparison.  The list is in UTF32, so we
        // are going to have to convert the conditional to UTF32.
        char *walker = list->initial;
!       for(;;)
          {
          bool fig1;
          bool fig2;
*************** __gg__compare_field_class(const cblc_fie
*** 4300,4305 ****
--- 4695,4705 ----
  
          first = walker;
          first_len = charmap32->strtoull(first, &pend, 10);
+         if( first_len == 0 )
+           {
+           // When the first bytes are zero, we've hit the end.
+           break;
+           }
          ch = charmap32->getch(pend, (size_t)0);
          fig1 = ch == mapped_F;
          first = pend+stride32;
*************** __gg__compare_field_class(const cblc_fie
*** 4352,4362 ****
        // We need a fake field to hold the encoding for the
        // __gg__dirty_to_float() routine.
        cblc_field_t fakir;
!       fakir.encoding = DEFAULT_32_ENCODING;
  
        GCOB_FP128 fp128 = get_float128(conditional, conditional_location) ;
        char *walker = list->initial;
!       while(*walker)
          {
          cbl_char_t   left_flag;
          size_t left_len;
--- 4752,4762 ----
        // We need a fake field to hold the encoding for the
        // __gg__dirty_to_float() routine.
        cblc_field_t fakir;
!       fakir.encoding = HOST_32_ENCODING;
  
        GCOB_FP128 fp128 = get_float128(conditional, conditional_location) ;
        char *walker = list->initial;
!       for(;;)
          {
          cbl_char_t   left_flag;
          size_t left_len;
*************** __gg__compare_field_class(const cblc_fie
*** 4368,4373 ****
--- 4768,4777 ----
  
          char *pend;
          left_len = charmap32->strtoull(walker, &pend, 10);
+         if(left_len == 0 )
+           {
+           break;
+           }
          left_flag = charmap32->getch(pend, (size_t)0);
          left = pend+stride32;
  
*************** compare_strings(char   *left_string,
*** 4638,4644 ****
      {
      cbl_char_t ch_left  = charmap_left->getch(left_string, &index_left);
      cbl_char_t ch_right = charmap_right->getch(right_string, &index_right);
!     retval = uber_compare(ch_left, ch_right);
      }
  
    // We need to space-extend the shorter value.  That's because
--- 5042,5048 ----
      {
      cbl_char_t ch_left  = charmap_left->getch(left_string, &index_left);
      cbl_char_t ch_right = charmap_right->getch(right_string, &index_right);
!     retval = uber_compare(ch_left, ch_right, charmap_left);
      }
  
    // We need to space-extend the shorter value.  That's because
*************** compare_strings(char   *left_string,
*** 4649,4655 ****
        {
        cbl_char_t ch_left  = charmap_left->getch(left_string, &index_left);
        cbl_char_t ch_right = charmap_right->mapped_character(ascii_space);
!       retval = uber_compare(ch_left, ch_right);
        }
      }
    else
--- 5053,5059 ----
        {
        cbl_char_t ch_left  = charmap_left->getch(left_string, &index_left);
        cbl_char_t ch_right = charmap_right->mapped_character(ascii_space);
!       retval = uber_compare(ch_left, ch_right, charmap_left);
        }
      }
    else
*************** compare_strings(char   *left_string,
*** 4661,4667 ****
        index_right %= right_length;
        cbl_char_t ch_left  = charmap_left->getch(left_string, &index_left);
        cbl_char_t ch_right = charmap_right->getch(right_string, &index_right);
!       retval = uber_compare(ch_left, ch_right);
        }
      }
  
--- 5065,5071 ----
        index_right %= right_length;
        cbl_char_t ch_left  = charmap_left->getch(left_string, &index_left);
        cbl_char_t ch_right = charmap_right->getch(right_string, &index_right);
!       retval = uber_compare(ch_left, ch_right, charmap_left);
        }
      }
  
*************** compare_strings(char   *left_string,
*** 4671,4677 ****
        {
        cbl_char_t ch_left  = charmap_left->mapped_character(ascii_space);
        cbl_char_t ch_right = charmap_right->getch(right_string, &index_right);
!       retval = uber_compare(ch_left, ch_right);
        }
      }
    else
--- 5075,5081 ----
        {
        cbl_char_t ch_left  = charmap_left->mapped_character(ascii_space);
        cbl_char_t ch_right = charmap_right->getch(right_string, &index_right);
!       retval = uber_compare(ch_left, ch_right, charmap_left);
        }
      }
    else
*************** compare_strings(char   *left_string,
*** 4681,4687 ****
        index_left %= left_length;
        cbl_char_t ch_left  = charmap_left->mapped_character(ascii_space);
        cbl_char_t ch_right = charmap_right->getch(right_string, &index_right);
!       retval = uber_compare(ch_left, ch_right);
        }
      }
  
--- 5085,5091 ----
        index_left %= left_length;
        cbl_char_t ch_left  = charmap_left->mapped_character(ascii_space);
        cbl_char_t ch_right = charmap_right->getch(right_string, &index_right);
!       retval = uber_compare(ch_left, ch_right, charmap_left);
        }
      }
  
*************** __gg__compare_2(cblc_field_t  *left_side
*** 4758,4764 ****
    if( left_figconst && right_figconst )
      {
      // We are comparing two figurative constants
!     retval = uber_compare(fig_left, fig_right);
      compare = true;
      goto fixup_retval;
      }
--- 5162,5168 ----
    if( left_figconst && right_figconst )
      {
      // We are comparing two figurative constants
!     retval = uber_compare(fig_left, fig_right, charmap_left);
      compare = true;
      goto fixup_retval;
      }
*************** __gg__compare_2(cblc_field_t  *left_side
*** 4797,4803 ****
            cbl_char_t fig_of_right =
                               charmap_left->figconst_character(right_figconst);
            cbl_char_t left_ch = charmap_left->getch(left_location, i);
!           retval = uber_compare(left_ch, fig_of_right);
            if( retval )
              {
              break;
--- 5201,5207 ----
            cbl_char_t fig_of_right =
                               charmap_left->figconst_character(right_figconst);
            cbl_char_t left_ch = charmap_left->getch(left_location, i);
!           retval = uber_compare(left_ch, fig_of_right, charmap_left);
            if( retval )
              {
              break;
*************** __gg__compare_2(cblc_field_t  *left_side
*** 4855,4861 ****
                unsigned int fig_of_right =
                               charmap_left->figconst_character(right_figconst);
                cbl_char_t ch_left = charmap_left->getch(left_location, i);
!               retval = uber_compare(ch_left, fig_of_right);
                if( retval )
                  {
                  break;
--- 5259,5265 ----
                unsigned int fig_of_right =
                               charmap_left->figconst_character(right_figconst);
                cbl_char_t ch_left = charmap_left->getch(left_location, i);
!               retval = uber_compare(ch_left, fig_of_right, charmap_left);
                if( retval )
                  {
                  break;
*************** __gg__compare_2(cblc_field_t  *left_side
*** 4883,4892 ****
          {
          encoding_left = encoding_right = iconv_CP1252_e;
          }
!       retval = compare_strings(   reinterpret_cast<char *>(left_location),
                                    left_length,
                                    left_all,
!                                   reinterpret_cast<char *>(right_location),
                                    right_length,
                                    right_all,
                                    encoding_left,
--- 5287,5296 ----
          {
          encoding_left = encoding_right = iconv_CP1252_e;
          }
!       retval = compare_strings(   as_chars(left_location),
                                    left_length,
                                    left_all,
!                                   as_chars(right_location),
                                    right_length,
                                    right_all,
                                    encoding_left,
*************** __gg__compare_2(cblc_field_t  *left_side
*** 4902,4909 ****
        if( left_side->type == FldFloat && right_side->type == FldFloat )
          {
          // One or the other of the numerics is a FldFloat
!         GCOB_FP128 left_value  = __gg__float128_from_location(left_side,  left_location);
!         GCOB_FP128 right_value = __gg__float128_from_location(right_side, right_location);
          retval = 0;
          retval = left_value < right_value ? -1 : retval;
          retval = left_value > right_value ?  1 : retval;
--- 5306,5315 ----
        if( left_side->type == FldFloat && right_side->type == FldFloat )
          {
          // One or the other of the numerics is a FldFloat
!         GCOB_FP128 left_value =
!           __gg__float128_from_location(left_side, left_location);
!         GCOB_FP128 right_value =
!           __gg__float128_from_location(right_side, right_location);
          retval = 0;
          retval = left_value < right_value ? -1 : retval;
          retval = left_value > right_value ?  1 : retval;
*************** __gg__compare_2(cblc_field_t  *left_side
*** 4927,4933 ****
              {
              case 4:
                {
!               _Float32 left_value4  = *PTRCAST(_Float32, left_location);
                _Float32 right_value4 = (_Float32)right_value;
                retval = 0;
                retval = left_value4 < right_value4 ? -1 : retval;
--- 5333,5339 ----
              {
              case 4:
                {
!               _Float32 left_value4 = load_unaligned<_Float32>(left_location);
                _Float32 right_value4 = (_Float32)right_value;
                retval = 0;
                retval = left_value4 < right_value4 ? -1 : retval;
*************** __gg__compare_2(cblc_field_t  *left_side
*** 4936,4942 ****
                }
              case 8:
                {
!               _Float64 left_value8  = *PTRCAST(_Float64, left_location);
                _Float64 right_value8 = (_Float64)right_value;
                retval = 0;
                retval = left_value8 < right_value8 ? -1 : retval;
--- 5342,5348 ----
                }
              case 8:
                {
!               _Float64 left_value8 = load_unaligned<_Float64>(left_location);
                _Float64 right_value8 = (_Float64)right_value;
                retval = 0;
                retval = left_value8 < right_value8 ? -1 : retval;
*************** __gg__compare_2(cblc_field_t  *left_side
*** 4958,4964 ****
            }
          else
            {
!           left_value  = __gg__float128_from_location(left_side,  left_location);
  
            right_value = get_binary_value_local( &rdecimals,
                                                  right_side,
--- 5364,5371 ----
            }
          else
            {
!           left_value =
!             __gg__float128_from_location(left_side, left_location);
  
            right_value = get_binary_value_local( &rdecimals,
                                                  right_side,
*************** __gg__compare_2(cblc_field_t  *left_side
*** 5040,5049 ****
            {
            encoding_left = encoding_right = iconv_CP1252_e;
            }
!         retval = compare_strings(   reinterpret_cast<char *>(left_location),
                                      left_length,
                                      left_all,
!                                     reinterpret_cast<char *>(right_location),
                                      right_length,
                                      right_all,
                                      left_side->encoding,
--- 5447,5456 ----
            {
            encoding_left = encoding_right = iconv_CP1252_e;
            }
!         retval = compare_strings(   as_chars(left_location),
                                      left_length,
                                      left_all,
!                                     as_chars(right_location),
                                      right_length,
                                      right_all,
                                      left_side->encoding,
*************** __gg__compare_2(cblc_field_t  *left_side
*** 5063,5069 ****
        // VAL5 EQUAL "005" is TRUE
        if( left_side->type == FldLiteralA )
          {
!         left_location = reinterpret_cast<unsigned char *>(left_side->data);
          left_length   = left_side->capacity;
          }
  
--- 5470,5476 ----
        // VAL5 EQUAL "005" is TRUE
        if( left_side->type == FldLiteralA )
          {
!         left_location = left_side->data;
          left_length   = left_side->capacity;
          }
  
*************** __gg__compare_2(cblc_field_t  *left_side
*** 5126,5132 ****
          {
          encoding_left = encoding_right = iconv_CP1252_e;
          }
!       retval = compare_strings(   reinterpret_cast<char *>(left_location),
                                    left_length,
                                    left_all,
                                    right_fixed,
--- 5533,5539 ----
          {
          encoding_left = encoding_right = iconv_CP1252_e;
          }
!       retval = compare_strings(   as_chars(left_location),
                                    left_length,
                                    left_all,
                                    right_fixed,
*************** __gg__compare(struct cblc_field_t *left,
*** 5214,5220 ****
  
  extern "C"
  void
! __gg__double_to_target(cblc_field_t *tgt, double tgt_value,  cbl_round_t rounded)
    {
    int tgt_rdigits = 0;
  
--- 5621,5629 ----
  
  extern "C"
  void
! __gg__double_to_target(cblc_field_t *tgt,
!                          double        tgt_value,
!                          cbl_round_t   rounded)
    {
    int tgt_rdigits = 0;
  
*************** __gg__sort_table( const cblc_field_t
*** 5384,5390 ****
      while( offset + sizeof(size_t) + record_size > buffer_size )
        {
        buffer_size *= 2;
!       contents = static_cast<unsigned char *>(realloc(contents, buffer_size));
        }
      offsets.push_back(offset);
      memcpy(contents+offset, &record_size, sizeof(size_t));
--- 5793,5800 ----
      while( offset + sizeof(size_t) + record_size > buffer_size )
        {
        buffer_size *= 2;
!       contents = static_cast<unsigned char *>(
!         checked_realloc(contents, buffer_size));
        }
      offsets.push_back(offset);
      memcpy(contents+offset, &record_size, sizeof(size_t));
*************** init_var_both(cblc_field_t  *var,
*** 5459,5465 ****
  
    // Set the "initialized" bit, which is tested in parser_symbol_add to make
    // sure this code gets executed only once.
!   //fprintf(stderr, "__gg__initialize_variable %s setting initialize_e\n", var->name);
    var->attr |= initialized_e;
  
    const char *local_initial = as_initial(var->initial);
--- 5869,5876 ----
  
    // Set the "initialized" bit, which is tested in parser_symbol_add to make
    // sure this code gets executed only once.
!   //fprintf(stderr, "__gg__initialize_variable %s setting initialize_e\n",
!   //var->name);
    var->attr |= initialized_e;
  
    const char *local_initial = as_initial(var->initial);
*************** init_var_both(cblc_field_t  *var,
*** 5503,5509 ****
      {
      while(parent)
        {
!       if( strlen(as_initial(parent->initial)) )
          {
          a_parent_initialized = true;
          }
--- 5914,5920 ----
      {
      while(parent)
        {
!       if( parent->initial )
          {
          a_parent_initialized = true;
          }
*************** init_var_both(cblc_field_t  *var,
*** 5516,5522 ****
        }
      }
  
!   if( is_redefined || a_parent_initialized || var->level == LEVEL66 || var->level == LEVEL88)
      {
      // Don't initialize variables that have the REDEFINES clause.  Many things
      // in COBOL programs don't work if you do, in particular the initialization
--- 5927,5936 ----
        }
      }
  
!   if(    is_redefined
!       || a_parent_initialized
!       || var->level == LEVEL66
!       || var->level == LEVEL88)
      {
      // Don't initialize variables that have the REDEFINES clause.  Many things
      // in COBOL programs don't work if you do, in particular the initialization
*************** init_var_both(cblc_field_t  *var,
*** 5626,5637 ****
                {
                initialization_character = __gg__local_init;
                }
!             if( !(var->attr & linkage_e) && __gg__working_init != NOT_A_CHARACTER )
                {
                initialization_character = __gg__working_init;
                }
              charmap->memset(outer_location,
!                             charmap->mapped_character(initialization_character),
                              capacity );
              }
            else
--- 6040,6053 ----
                {
                initialization_character = __gg__local_init;
                }
!             if(    !(var->attr & linkage_e)
!                 && __gg__working_init != NOT_A_CHARACTER )
                {
                initialization_character = __gg__working_init;
                }
              charmap->memset(outer_location,
!                             charmap->mapped_character(
!                               initialization_character),
                              capacity );
              }
            else
*************** init_var_both(cblc_field_t  *var,
*** 5695,5701 ****
        case FldIndex:
        case FldFloat:
          {
!         // During  parser_symbol_add(), the original text initial value was turned
          // into the appropriate binary value.
          if( var->initial )
            {
--- 6111,6118 ----
        case FldIndex:
        case FldFloat:
          {
!         // During  parser_symbol_add(), the original text initial value was
!         // turned
          // into the appropriate binary value.
          if( var->initial )
            {
*************** init_var_both(cblc_field_t  *var,
*** 5731,5745 ****
          break;
  
        default:
!         fprintf(stderr, "###### %10s in %s:%d\n", __func__, __FILE__, __LINE__ );
!         fprintf(stderr, "###### You got yourself a new CVT_type %d for variable %s (%s)\n",
                  var->type,
                  var->name,
                  local_initial);
          __gg__abort("Unknown variable type");
        }
  
!     char *location = reinterpret_cast<char *>(save_the_location);
  
      there_is_more = false;
      size_t i=0;
--- 6148,6168 ----
          break;
  
        default:
!         fprintf(stderr,
!                 "###### %10s in %s:%d\n",
!                 __func__,
!                 __FILE__,
!                 __LINE__ );
!         fprintf(stderr,
!                 "###### You got yourself a new CVT_type %d "
!                 "for variable %s (%s)\n",
                  var->type,
                  var->name,
                  local_initial);
          __gg__abort("Unknown variable type");
        }
  
!     char *location = as_chars(save_the_location);
  
      there_is_more = false;
      size_t i=0;
*************** init_var_both(cblc_field_t  *var,
*** 5765,5771 ****
          }
        }
  
!     outer_location = reinterpret_cast<unsigned char *>(location);
      } while(there_is_more);
  
    var->data = save_the_location;
--- 6188,6194 ----
          }
        }
  
!     outer_location = as_unsigned_chars(location);
      } while(there_is_more);
  
    var->data = save_the_location;
*************** alpha_to_alpha_move_from_location(cblc_f
*** 5810,5816 ****
    // same encoding as field->encoding.
    dest_length = dest_length ? dest_length : field->capacity;
  
!   char *to         = reinterpret_cast<char *>(field->data + dest_offset);
    const char *from = source_location;
    size_t count     = std::min(dest_length, source_length);
  
--- 6233,6239 ----
    // same encoding as field->encoding.
    dest_length = dest_length ? dest_length : field->capacity;
  
!   char *to         = as_chars(field->data + dest_offset);
    const char *from = source_location;
    size_t count     = std::min(dest_length, source_length);
  
*************** alpha_to_alpha_move_from_location(cblc_f
*** 5889,5895 ****
          }
        else
          {
!         // The destination is right-justified, and the source is an
          // ordinary string too short to fill it.  So, we space-fill
          // the trailing characters.
          // We do the move first, in case this is an overlapping move
--- 6312,6318 ----
          }
        else
          {
!         // The destination is left-justified, and the source is an
          // ordinary string too short to fill it.  So, we space-fill
          // the trailing characters.
          // We do the move first, in case this is an overlapping move
*************** alpha_to_alpha_move(cblc_field_t *dest,
*** 5930,5936 ****
                      bool source_move_all)
    {
    const char *source_location
!                       = reinterpret_cast<char *>(source->data + source_offset);
    size_t outlength;
    if(dest->encoding == source->encoding)
      {
--- 6353,6359 ----
                      bool source_move_all)
    {
    const char *source_location
!                       = as_chars(source->data + source_offset);
    size_t outlength;
    if(dest->encoding == source->encoding)
      {
*************** __gg__move( cblc_field_t        *fdest,
*** 6044,6050 ****
      // high-value and low-value required special processing in order to cope
      // with code.  Or, at least, to cope with legacy tests.
  
!     // The ISO 2014 specification has this to say about the moving of figurative
      // constants to numerics:
  
      // 14.9.24.3, paragraph 7)
--- 6467,6474 ----
      // high-value and low-value required special processing in order to cope
      // with code.  Or, at least, to cope with legacy tests.
  
!     // The ISO 2014 specification has this to say about the moving of
!     // figurative
      // constants to numerics:
  
      // 14.9.24.3, paragraph 7)
*************** __gg__move( cblc_field_t        *fdest,
*** 6384,6390 ****
                }
              else
                {
!               // Destination is right-justified, so things are slightly more complex
                if( source_size >= dest_size )
                  {
                  // We need to truncate the source data on the left:
--- 6808,6815 ----
                }
              else
                {
!               // Destination is right-justified, so things are slightly more
!               // complex
                if( source_size >= dest_size )
                  {
                  // We need to truncate the source data on the left:
*************** __gg__move( cblc_field_t        *fdest,
*** 6420,6426 ****
            {
            case FldGroup:
              min_length = std::min(source_size, dest_size);
!             memmove(fdest->data+dest_offset, fsource->data+source_offset, min_length);
              if( min_length < dest_size )
                {
                // min_length is smaller than dest_length, so we have to
--- 6845,6853 ----
            {
            case FldGroup:
              min_length = std::min(source_size, dest_size);
!             memmove(fdest->data+dest_offset,
!                     fsource->data+source_offset,
!                     min_length);
              if( min_length < dest_size )
                {
                // min_length is smaller than dest_length, so we have to
*************** __gg__move( cblc_field_t        *fdest,
*** 6495,6501 ****
                {
                case 4:
                  {
!                 _Float32 val = *PTRCAST(_Float32, fsource->data+source_offset);
                  if(val < 0)
                    {
                    negative = true;
--- 6922,6929 ----
                {
                case 4:
                  {
!                 _Float32 val = load_unaligned<_Float32>(
!                   fsource->data+source_offset);
                  if(val < 0)
                    {
                    negative = true;
*************** __gg__move( cblc_field_t        *fdest,
*** 6507,6513 ****
                  }
                case 8:
                  {
!                 _Float64 val = *PTRCAST(_Float64, fsource->data+source_offset);
                  if(val < 0)
                    {
                    negative = true;
--- 6935,6942 ----
                  }
                case 8:
                  {
!                 _Float64 val = load_unaligned<_Float64>(
!                   fsource->data+source_offset);
                  if(val < 0)
                    {
                    negative = true;
*************** __gg__move( cblc_field_t        *fdest,
*** 6568,6574 ****
            {
            case FldGroup:
              min_length = std::min(source_size, dest_size);
!             memmove(fdest->data+dest_offset, fsource->data+source_offset, min_length);
              if( min_length < dest_size )
                {
                // min_length is smaller than dest_length, so we have to
--- 6997,7005 ----
            {
            case FldGroup:
              min_length = std::min(source_size, dest_size);
!             memmove(fdest->data+dest_offset,
!                     fsource->data+source_offset,
!                     min_length);
              if( min_length < dest_size )
                {
                // min_length is smaller than dest_length, so we have to
*************** __gg__move( cblc_field_t        *fdest,
*** 6613,6624 ****
                {
                case 4:
                  {
!                 fp128 = *reinterpret_cast<_Float32 *>(fsource->data+source_offset);
                  break;
                  }
                case 8:
                  {
!                 fp128 = *reinterpret_cast<_Float64 *>(fsource->data+source_offset);
                  break;
                  }
                case 16:
--- 7044,7055 ----
                {
                case 4:
                  {
!                 fp128 = load_unaligned<_Float32>(fsource->data+source_offset);
                  break;
                  }
                case 8:
                  {
!                 fp128 = load_unaligned<_Float64>(fsource->data+source_offset);
                  break;
                  }
                case 16:
*************** __gg__move( cblc_field_t        *fdest,
*** 6650,6656 ****
            {
            case FldGroup:
              min_length = std::min(source_size, dest_size);
!             memmove(fdest->data+dest_offset, fsource->data+source_offset, min_length);
              if( min_length < dest_size )
                {
                // min_length is smaller than dest_length, so we have to
--- 7081,7089 ----
            {
            case FldGroup:
              min_length = std::min(source_size, dest_size);
!             memmove(fdest->data+dest_offset,
!                     fsource->data+source_offset,
!                     min_length);
              if( min_length < dest_size )
                {
                // min_length is smaller than dest_length, so we have to
*************** __gg__move( cblc_field_t        *fdest,
*** 6681,6687 ****
                                             fdest->encoding);
              // And move them into place:
              __gg__string_to_alpha_edited(
!                           reinterpret_cast<char *>(fdest->data+dest_offset),
                            fdest->encoding,
                            ach,
                            source_digits,
--- 7114,7120 ----
                                             fdest->encoding);
              // And move them into place:
              __gg__string_to_alpha_edited(
!                           as_chars(fdest->data+dest_offset),
                            fdest->encoding,
                            ach,
                            source_digits,
*************** __gg__move( cblc_field_t        *fdest,
*** 6692,6698 ****
            default:
              {
              static size_t display_string_size = MINIMUM_ALLOCATION_SIZE;
!             static char *display_string = static_cast<char *>(malloc(display_string_size));
  
              size_t display_string_length = dest_size;
              __gg__realloc_if_necessary( &display_string,
--- 7125,7132 ----
            default:
              {
              static size_t display_string_size = MINIMUM_ALLOCATION_SIZE;
!             static char *display_string =
!               static_cast<char *>(malloc(display_string_size));
  
              size_t display_string_length = dest_size;
              __gg__realloc_if_necessary( &display_string,
*************** __gg__move( cblc_field_t        *fdest,
*** 6718,6731 ****
                                &display_string,
                                &display_string_size,
                                fsource,
!                               reinterpret_cast<unsigned char *>
!                                                  (fsource->data+source_offset),
                                source_size,
                                source_flags & REFER_T_ADDRESS_OF);
                display_string_length = strlen(display_string);
                }
!             __gg__string_to_alpha_edited( reinterpret_cast<char *>
!                                                      (fdest->data+dest_offset),
                                                        fdest->encoding,
                                                        display_string,
                                                        display_string_length,
--- 7152,7163 ----
                                &display_string,
                                &display_string_size,
                                fsource,
!                               fsource->data+source_offset,
                                source_size,
                                source_flags & REFER_T_ADDRESS_OF);
                display_string_length = strlen(display_string);
                }
!             __gg__string_to_alpha_edited( as_chars(fdest->data+dest_offset),
                                                        fdest->encoding,
                                                        display_string,
                                                        display_string_length,
*************** __gg__move( cblc_field_t        *fdest,
*** 6748,6754 ****
              size_t charsout;
              const char *converted = __gg__iconverter(fsource->encoding,
                                                       DEFAULT_SOURCE_ENCODING,
!                                     PTRCAST(char, fsource->data+source_offset),
                                                       source_size,
                                                       &charsout);
              char ach[256];
--- 7180,7186 ----
              size_t charsout;
              const char *converted = __gg__iconverter(fsource->encoding,
                                                       DEFAULT_SOURCE_ENCODING,
!                                     as_chars( fsource->data+source_offset),
                                                       source_size,
                                                       &charsout);
              char ach[256];
*************** __gg__move( cblc_field_t        *fdest,
*** 6759,6770 ****
                {
                case 4:
                  {
!                 *PTRCAST(float, fdest->data+dest_offset) = strtod(ach, NULL);
                  break;
                  }
                case 8:
                  {
!                 *PTRCAST(double, fdest->data+dest_offset) = strtod(ach, NULL);
                  break;
                  }
                case 16:
--- 7191,7204 ----
                {
                case 4:
                  {
!                 store_unaligned<float>(fdest->data+dest_offset,
!                                        strtod(ach, NULL));
                  break;
                  }
                case 8:
                  {
!                 store_unaligned<double>(fdest->data+dest_offset,
!                                         strtod(ach, NULL));
                  break;
                  }
                case 16:
*************** __gg__move_literala(cblc_field_t *field,
*** 6911,6917 ****
      case FldAlphaEdited:
        {
        static size_t display_string_size = MINIMUM_ALLOCATION_SIZE;
!       static char *display_string = static_cast<char *>(malloc(display_string_size));
  
        __gg__realloc_if_necessary( &display_string,
                                    &display_string_size,
--- 7345,7352 ----
      case FldAlphaEdited:
        {
        static size_t display_string_size = MINIMUM_ALLOCATION_SIZE;
!       static char *display_string =
!         static_cast<char *>(malloc(display_string_size));
  
        __gg__realloc_if_necessary( &display_string,
                                    &display_string_size,
*************** __gg__move_literala(cblc_field_t *field,
*** 6924,6930 ****
        size_t len = std::min(display_string_size, strlen);
        memcpy(display_string, str, len);
        __gg__string_to_alpha_edited(
!                           reinterpret_cast<char *>(field->data+field_offset),
                            field->encoding,
                            display_string,
                            field_size,
--- 7359,7365 ----
        size_t len = std::min(display_string_size, strlen);
        memcpy(display_string, str, len);
        __gg__string_to_alpha_edited(
!                           as_chars(field->data+field_offset),
                            field->encoding,
                            display_string,
                            field_size,
*************** __gg__move_literala(cblc_field_t *field,
*** 6942,6953 ****
          {
          case 4:
            {
!           *PTRCAST(float, field->data+field_offset) = strtod(ach, NULL);
            break;
            }
          case 8:
            {
!           *PTRCAST(double, field->data+field_offset) = strtod(ach, NULL);
            break;
            }
          case 16:
--- 7377,7388 ----
          {
          case 4:
            {
!           store_unaligned<float>(field->data+field_offset, strtod(ach, NULL));
            break;
            }
          case 8:
            {
!           store_unaligned<double>(field->data+field_offset, strtod(ach, NULL));
            break;
            }
          case 16:
*************** __gg__sort_workfile(cblc_file_t    *work
*** 7111,7117 ****
      while( offset + sizeof(size_t) + bytes_read > buffer_size )
        {
        buffer_size *= 2;
!       contents = static_cast<unsigned char *>(realloc(contents, buffer_size));
        }
      offsets.push_back(offset);
  
--- 7546,7553 ----
      while( offset + sizeof(size_t) + bytes_read > buffer_size )
        {
        buffer_size *= 2;
!       contents = static_cast<unsigned char *>(
!         checked_realloc(contents, buffer_size));
        }
      offsets.push_back(offset);
  
*************** __gg__merge_files( cblc_file_t   *workfi
*** 7178,7186 ****
                     cblc_file_t  **inputs)
    {
    // Merge takes in N files that are already sorted.  It looks at the N records
!   // at the top of the N files, and figures out who the winner is, and puts each
    // winner into workfile.  If it notices that any of the files are not in the
!   // order specified by the keys it raises the EC-SORT-MERGE-SEQUENCE exception.
  
    // Is everybody ready?
  
--- 7614,7624 ----
                     cblc_file_t  **inputs)
    {
    // Merge takes in N files that are already sorted.  It looks at the N records
!   // at the top of the N files, and figures out who the winner is, and puts
!   // each
    // winner into workfile.  If it notices that any of the files are not in the
!   // order specified by the keys it raises the EC-SORT-MERGE-SEQUENCE
!   // exception.
  
    // Is everybody ready?
  
*************** __gg__merge_files( cblc_file_t   *workfi
*** 7214,7220 ****
      return;
      }
  
!   unsigned char *prior_winner = static_cast<unsigned char *>(malloc(the_biggest));
    massert(prior_winner);
    *prior_winner = '\0';
  
--- 7652,7659 ----
      return;
      }
  
!   unsigned char *prior_winner =
!     static_cast<unsigned char *>(malloc(the_biggest));
    massert(prior_winner);
    *prior_winner = '\0';
  
*************** __gg__merge_files( cblc_file_t   *workfi
*** 7236,7242 ****
          }
        // We now compare inputs[i] to the current winner
        int ncompare = compare_two_records( inputs[i]->default_record->data,
!                                           inputs[winner]->default_record->data);
        if( ncompare < 0 )
          {
          // We have a new winner
--- 7675,7682 ----
          }
        // We now compare inputs[i] to the current winner
        int ncompare = compare_two_records( inputs[i]->default_record->data,
!                                           inputs[winner]
!                                             ->default_record->data);
        if( ncompare < 0 )
          {
          // We have a new winner
*************** __gg__merge_files( cblc_file_t   *workfi
*** 7253,7259 ****
        {
        // We need to compare the current winner to the prior winner
        int ncompare = compare_two_records( prior_winner,
!                                           inputs[winner]->default_record->data);
        if( ncompare > 0 )
          {
          // The prior winner is bigger than the current winner, which means that
--- 7693,7700 ----
        {
        // We need to compare the current winner to the prior winner
        int ncompare = compare_two_records( prior_winner,
!                                           inputs[winner]
!                                             ->default_record->data);
        if( ncompare > 0 )
          {
          // The prior winner is bigger than the current winner, which means that
*************** move_string(cblc_field_t *field,
*** 7317,7323 ****
      case FldAlphanumeric:
      case FldAlphaEdited:
        {
!       char *to = reinterpret_cast<char *>(field->data + offset);
        size_t dest_length = length ? length : field->capacity;
        size_t source_length = strlen_from;
  
--- 7758,7764 ----
      case FldAlphanumeric:
      case FldAlphaEdited:
        {
!       char *to = as_chars(field->data + offset);
        size_t dest_length = length ? length : field->capacity;
        size_t source_length = strlen_from;
  
*************** move_string(cblc_field_t *field,
*** 7329,7334 ****
--- 7770,7776 ----
                                                 source_length,
                                                 &charsout);
  
+       source_length = charsout;
        size_t count = std::min(dest_length, source_length);
        if( source_length >= dest_length )
          {
*************** move_string(cblc_field_t *field,
*** 7364,7370 ****
            // Get the charmap after the move, because it can mess with the
            // static 'to' buffer.
            charmap_t *charmap = __gg__get_charmap(field->encoding);
!           charmap->memset(to, charmap->mapped_character(ascii_space), dest_length-count);
            }
          else
            {
--- 7806,7814 ----
            // Get the charmap after the move, because it can mess with the
            // static 'to' buffer.
            charmap_t *charmap = __gg__get_charmap(field->encoding);
!           charmap->memset(to,
!                           charmap->mapped_character(ascii_space),
!                           dest_length-count);
            }
          else
            {
*************** move_string(cblc_field_t *field,
*** 7375,7383 ****
                    converted,
                    count);
            charmap_t *charmap = __gg__get_charmap(field->encoding);
!           memset( to + count,
!                   charmap->mapped_character(ascii_space),
!                   dest_length-count);
            }
          }
        break;
--- 7819,7827 ----
                    converted,
                    count);
            charmap_t *charmap = __gg__get_charmap(field->encoding);
!           charmap->memset(to + count,
!                           charmap->mapped_character(ascii_space),
!                           dest_length-count);
            }
          }
        break;
*************** normalize_for_inspect_format_4(const cbl
*** 7455,7461 ****
    if(var)
      {
      const charmap_t *charmap_var = __gg__get_charmap(source_encoding);
!     charmap_t *charmap32 = __gg__get_charmap(DEFAULT_32_ENCODING);
  
      cbl_figconst_t figconst =
                        static_cast<cbl_figconst_t>(var->attr & FIGCONST_MASK);
--- 7899,7905 ----
    if(var)
      {
      const charmap_t *charmap_var = __gg__get_charmap(source_encoding);
!     charmap_t *charmap32 = __gg__get_charmap(HOST_32_ENCODING);
  
      cbl_figconst_t figconst =
                        static_cast<cbl_figconst_t>(var->attr & FIGCONST_MASK);
*************** normalize_for_inspect_format_4(const cbl
*** 7531,7537 ****
        size_t converted_bytes;
        const char *converted = __gg__iconverter(
                                var->encoding,
!                               DEFAULT_32_ENCODING,
                                var->data + var_offset,
                                var_size,
                                &converted_bytes);
--- 7975,7981 ----
        size_t converted_bytes;
        const char *converted = __gg__iconverter(
                                var->encoding,
!                               HOST_32_ENCODING,
                                var->data + var_offset,
                                var_size,
                                &converted_bytes);
*************** int
*** 7552,7558 ****
  __gg__string(const size_t integers[], const cblc_referlet_t *ref)
    {
    // The first integer is the count of identifier-2 values.  Call it N
!   // The following N integers are the counts of each of the identifier-1 values,
    // one for each identifier-1.  Call them M.
  
    // The first refer is the target
--- 7996,8003 ----
  __gg__string(const size_t integers[], const cblc_referlet_t *ref)
    {
    // The first integer is the count of identifier-2 values.  Call it N
!   // The following N integers are the counts of each of the identifier-1
!   // values,
    // one for each identifier-1.  Call them M.
  
    // The first refer is the target
*************** __gg__string(const size_t integers[], co
*** 7580,7586 ****
    size_t tgt_s = ref[index_cblc].size;
    index_cblc += 1;
  
!   char  *dest         = reinterpret_cast<char *>(tgt->data + tgt_o);
    size_t dest_length = tgt_s/stride;
  
    // Skip over the index of POINTER:
--- 8025,8031 ----
    size_t tgt_s = ref[index_cblc].size;
    index_cblc += 1;
  
!   char  *dest         = as_chars(tgt->data + tgt_o);
    size_t dest_length = tgt_s/stride;
  
    // Skip over the index of POINTER:
*************** __gg__string(const size_t integers[], co
*** 7594,7601 ****
      int rdigits;
      int p  = (size_t)__gg__binary_value_from_qualified_field(
                                                      &rdigits,
!                                                     ref[INDEX_OF_POINTER].field,
!                                                     ref[INDEX_OF_POINTER].offset,
                                                      ref[INDEX_OF_POINTER].size
                                                      );
      if( p<0 )
--- 8039,8048 ----
      int rdigits;
      int p  = (size_t)__gg__binary_value_from_qualified_field(
                                                      &rdigits,
!                                                     ref[INDEX_OF_POINTER]
!                                                       .field,
!                                                     ref[INDEX_OF_POINTER]
!                                                       .offset,
                                                      ref[INDEX_OF_POINTER].size
                                                      );
      if( p<0 )
*************** __gg__string(const size_t integers[], co
*** 7661,7667 ****
  
            // Convert the UTF32 to the original encoding:
            size_t bytes_converted;
!           char *converted = __gg__miconverter(DEFAULT_32_ENCODING,
                                                tgt_encoding,
                                                str_id1.data(),
                                                nfound*width_of_utf32,
--- 8108,8114 ----
  
            // Convert the UTF32 to the original encoding:
            size_t bytes_converted;
!           char *converted = __gg__miconverter(HOST_32_ENCODING,
                                                tgt_encoding,
                                                str_id1.data(),
                                                nfound*width_of_utf32,
*************** display_both(cblc_field_t  *field,
*** 7718,7724 ****
               int            flags )
    {
    static size_t display_string_size = MINIMUM_ALLOCATION_SIZE;
!   static char *display_string = static_cast<char *>(malloc(display_string_size));
  
    bool advance = !!(flags & 1);
    bool address_of = !!(flags & REFER_T_ADDRESS_OF);
--- 8165,8172 ----
               int            flags )
    {
    static size_t display_string_size = MINIMUM_ALLOCATION_SIZE;
!   static char *display_string =
!     static_cast<char *>(malloc(display_string_size));
  
    bool advance = !!(flags & 1);
    bool address_of = !!(flags & REFER_T_ADDRESS_OF);
*************** display_both(cblc_field_t  *field,
*** 7728,7734 ****
      field->encoding = DEFAULT_SOURCE_ENCODING;
      }
  
- 
    cbl_encoding_t encoding = format_for_display_internal(
                                              &display_string,
                                              &display_string_size,
--- 8176,8181 ----
*************** __gg__float128_from_field( cblc_field_t
*** 8180,8186 ****
  
  extern "C"
  GCOB_FP128
! __gg__float128_from_qualified_field(const cblc_field_t *field, size_t offset, size_t size)
    {
    GCOB_FP128 retval=0;
    if( field->type == FldFloat || field->type == FldLiteralN )
--- 8627,8635 ----
  
  extern "C"
  GCOB_FP128
! __gg__float128_from_qualified_field(const cblc_field_t *field,
!                                       size_t              offset,
!                                       size_t              size)
    {
    GCOB_FP128 retval=0;
    if( field->type == FldFloat || field->type == FldLiteralN )
*************** __gg__float128_from_qualified_field(cons
*** 8190,8196 ****
    else
      {
      int rdigits;
!     retval = (GCOB_FP128)__gg__binary_value_from_qualified_field(&rdigits, field, offset, size);
      if( rdigits )
        {
        retval /= (GCOB_FP128)__gg__power_of_ten(rdigits);
--- 8639,8648 ----
    else
      {
      int rdigits;
!     retval = (GCOB_FP128)__gg__binary_value_from_qualified_field(&rdigits,
!                                                                   field,
!                                                                   offset,
!                                                                   size);
      if( rdigits )
        {
        retval /= (GCOB_FP128)__gg__power_of_ten(rdigits);
*************** float128_to_int128( int                *
*** 8279,8290 ****
  
      if( field->attr & intermediate_e )
        {
!       // Our target doesn't have a fixed number of rdigits.  We will look at the
        // value, and from that calculate the maximum number of rdigits we can
        // get away with.
  
        // Calculate the number of digits to the left of the decimal point:
!       int digits = (int)(FP128_FUNC(floor)(FP128_FUNC(log)(FP128_FUNC(fabs)(value)))+1);
  
        // Make sure it is not a negative number
        digits = std::max(0, digits);
--- 8731,8744 ----
  
      if( field->attr & intermediate_e )
        {
!       // Our target doesn't have a fixed number of rdigits.  We will look at
!       // the
        // value, and from that calculate the maximum number of rdigits we can
        // get away with.
  
        // Calculate the number of digits to the left of the decimal point:
!       int digits = (int)(FP128_FUNC(floor)(
!         FP128_FUNC(log)(FP128_FUNC(fabs)(value)))+1);
  
        // Make sure it is not a negative number
        digits = std::max(0, digits);
*************** float128_to_int128( int                *
*** 8301,8307 ****
      // We now multiply our value by 10**rdigits, in order to make the
      // floating-point value have the same magnitude as our target __int128
  
!     value *= FP128_FUNC(pow)(GCOB_FP128_LITERAL (10.0), (GCOB_FP128)(*rdigits));
  
      // We are ready to cast value to an __int128.  But this value could be
      // too large to fit, which is an error condition we want to flag:
--- 8755,8762 ----
      // We now multiply our value by 10**rdigits, in order to make the
      // floating-point value have the same magnitude as our target __int128
  
!     value *= FP128_FUNC(pow)(GCOB_FP128_LITERAL (10.0),
!                                (GCOB_FP128)(*rdigits));
  
      // We are ready to cast value to an __int128.  But this value could be
      // too large to fit, which is an error condition we want to flag:
*************** float128_to_location( cblc_field_t   *tg
*** 8343,8364 ****
                }
              if( value < 0 )
                {
!               *PTRCAST(float, data) = -INFINITY;
                }
              else
                {
!               *PTRCAST(float, data) = INFINITY;
                }
              }
            else
              {
!             *PTRCAST(float, data) = static_cast<float>(value);
              }
            break;
  
          case 8:
            if(    FP128_FUNC(fabs)(value) == (GCOB_FP128)INFINITY
!               || FP128_FUNC(fabs)(value) > GCOB_FP128_LITERAL (1.7976931348623157E308) )
              {
              if( compute_error )
                {
--- 8798,8820 ----
                }
              if( value < 0 )
                {
!               store_unaligned<float>(data, -INFINITY);
                }
              else
                {
!               store_unaligned<float>(data, INFINITY);
                }
              }
            else
              {
!             store_unaligned<float>(data, static_cast<float>(value));
              }
            break;
  
          case 8:
            if(    FP128_FUNC(fabs)(value) == (GCOB_FP128)INFINITY
!               || FP128_FUNC(fabs)(value)
!                    > GCOB_FP128_LITERAL (1.7976931348623157E308) )
              {
              if( compute_error )
                {
*************** float128_to_location( cblc_field_t   *tg
*** 8366,8381 ****
                }
              if( value < 0 )
                {
!               *PTRCAST(double, data) = -INFINITY;
                }
              else
                {
!               *PTRCAST(double, data) = INFINITY;
                }
              }
            else
              {
!             *PTRCAST(double, data) = static_cast<double>(value);
              }
            break;
  
--- 8822,8837 ----
                }
              if( value < 0 )
                {
!               store_unaligned<double>(data, -INFINITY);
                }
              else
                {
!               store_unaligned<double>(data, INFINITY);
                }
              }
            else
              {
!             store_unaligned<double>(data, static_cast<double>(value));
              }
            break;
  
*************** float128_to_location( cblc_field_t   *tg
*** 8416,8422 ****
            maximum = __gg__power_of_ten(digits);
            }
  
!         // When digits is zero, this is a binary value without a PICTURE string.
          // we don't truncate in that case
          if( digits && FP128_FUNC(fabs)(value) >= maximum )
            {
--- 8872,8879 ----
            maximum = __gg__power_of_ten(digits);
            }
  
!         // When digits is zero, this is a binary value without a PICTURE
!         // string.
          // we don't truncate in that case
          if( digits && FP128_FUNC(fabs)(value) >= maximum )
            {
*************** __gg__onetime_initialization( )
*** 8571,8577 ****
  
    // We need to establish the initial value of the UPSI-1 switch register We
    // are using IBM's conventions:
!   // https://www.ibm.com/docs/en/zvse/6.2?topic=SSB27H_6.2.0/fa2sf_communicate_appl_progs_via_job_control.html
    // UPSI 10000110 means that bits 0, 5, and 6 are on, which means that SW-0,
    // SW-5, and SW-6 are on.
  
--- 9028,9036 ----
  
    // We need to establish the initial value of the UPSI-1 switch register We
    // are using IBM's conventions:
!   // IBM z/VSE documentation: communicating with application programs
!   // through job control.  The original URL was longer than the GCC line
!   // length recommendation.
    // UPSI 10000110 means that bits 0, 5, and 6 are on, which means that SW-0,
    // SW-5, and SW-6 are on.
  
*************** __gg__onetime_initialization( )
*** 8593,8600 ****
        bit <<= 1 ;
        }
      }
!   __gg__data_upsi_0[0] = (value>>0) & 0xFF;
!   __gg__data_upsi_0[1] = (value>>8) & 0xFF;
    }
  
  static int
--- 9052,9067 ----
        bit <<= 1 ;
        }
      }
!   if( cobol_target_big_endian() ) // cppcheck-suppress knownConditionTrueFalse
!     {
!     __gg__data_upsi_0[1] = (value>>0) & 0xFF;
!     __gg__data_upsi_0[0] = (value>>8) & 0xFF;
!     }
!   else
!     {
!     __gg__data_upsi_0[0] = (value>>0) & 0xFF;
!     __gg__data_upsi_0[1] = (value>>8) & 0xFF;
!     }
    }
  
  static int
*************** is_numeric_edited_numeric(cblc_field_t *
*** 8605,8692 ****
    }
  
  static int
! is_numeric_display_numeric(cblc_field_t *field, size_t offset, size_t size)
    {
!   charmap_t *charmap = __gg__get_charmap(field->encoding);
!   int stride = charmap->stride();
  
!   int retval = 1;
    bool signable = !!(field->attr & signable_e);
    bool leading  = !!(field->attr & leading_e);
    bool separate = !!(field->attr & separate_e);
  
!   char *digits   = reinterpret_cast<char *>(field->data + offset);
!   char *digits_e = digits + size;
  
    if( leading && separate && signable )
      {
      // First character must be +/-
!     cbl_char_t ch = charmap->getch(digits, size_t(0));
!     if(     digits < digits_e
!         || (   ch != charmap->mapped_character(ascii_plus)
!             && ch !=  charmap->mapped_character(ascii_minus)) )
        {
        retval = 0;
        }
!     digits += stride;
      }
  
    if( !leading && separate && signable )
      {
      // Last character must be +/-
!     digits_e -= stride;
!     cbl_char_t ch = charmap->getch(digits_e, size_t(0));
!     if(     digits < digits_e
!         || (   ch != charmap->mapped_character(ascii_plus)
!             && ch !=  charmap->mapped_character(ascii_minus)) )
        {
        retval = 0;
        }
      }
  
    if( leading && !separate && signable )
      {
!     // The first character is allowed to have a sign bit. Let's make sure that
!     // making that first digit unsigned leaves us with zero through nine:
!     if( digits < digits_e )
        {
!       cbl_char_t first_char = charmap->getch(digits, size_t(0));
!       first_char = charmap->set_digit_negative(first_char, false);
!       if(  first_char < charmap->mapped_character(ascii_0)
!         || first_char > charmap->mapped_character(ascii_9))
          {
!         retval = 0;
          }
        }
-     digits += 1;
      }
  
    if( !leading && !separate && signable )
      {
      // The final character is allowed to have a sign bit.
!     if( digits < digits_e )
        {
!       digits_e -= 1;
!       cbl_char_t final_char = charmap->getch(digits, size_t(0));
!       final_char = charmap->set_digit_negative(final_char, false);
!       if(   final_char<charmap->mapped_character(ascii_0)
!          || final_char>charmap->mapped_character(ascii_9) )
          {
!         retval = 0;
          }
        }
      }
  
!   // all remaining characters are supposed to be zero through nine
!   while( digits < digits_e )
      {
!     if(     (unsigned char)(*digits)<charmap->mapped_character(ascii_0)
!         ||  (unsigned char)(*digits)>charmap->mapped_character(ascii_9) )
        {
!       retval = 0;
!       break;
        }
-     digits += 1;
      }
    return retval;
    }
--- 9072,9215 ----
    }
  
  static int
! is_numeric_display_numeric(const cblc_field_t *field, size_t offset, size_t size)
    {
!   const charmap_t *charmap = __gg__get_charmap(field->encoding);
  
!   size_t nbytes;
!   char *digits = __gg__iconverter(field->encoding,
!                                   DEFAULT_SOURCE_ENCODING,
!                                   field->data+offset,
!                                   size,
!                                  &nbytes);
    bool signable = !!(field->attr & signable_e);
    bool leading  = !!(field->attr & leading_e);
    bool separate = !!(field->attr & separate_e);
  
!   char *digits_e = digits+nbytes;
! 
!   int retval = 1;
!   if( size == 0 )
!     {
!     // No digits means not numeric
!     retval = 0;
!     goto done;
!     }
! 
!   if( separate && size < 2 )
!     {
!     // Validity requires at least one digit plus a sign
!     retval = 0;
!     goto done;
!     }
  
    if( leading && separate && signable )
      {
      // First character must be +/-
!     if(    *digits != ascii_plus
!         && *digits != ascii_minus )
        {
        retval = 0;
+       goto done;
        }
!     digits += 1;
!     goto done;
      }
  
    if( !leading && separate && signable )
      {
      // Last character must be +/-
!     digits_e -= 1;
!     if(    *digits_e != ascii_plus
!         && *digits_e != ascii_minus )
        {
        retval = 0;
+       goto done;
        }
+     goto done;
      }
  
    if( leading && !separate && signable )
      {
!     // The first character is allowed to have a sign bit
!     if( isdigit(*digits) )
        {
!       goto done;
!       }
! 
!     if( charmap->is_like_ebcdic() )
!       {
!       if(    *digits == ascii_rbrace
!           || (*digits >= ascii_J && *digits <= ascii_R) )
          {
!         *digits = ascii_zero;
!         goto done;
!         }
!       // First character is out of range:
!       retval = 0;
!       goto done;
!       }
!     else
!       {
!       if( *digits >= ascii_p && *digits <= ascii_y )
!         {
!         *digits = ascii_zero;
!         goto done;
          }
+       // First character is out of range:
+       retval = 0;
+       goto done;
        }
      }
  
    if( !leading && !separate && signable )
      {
      // The final character is allowed to have a sign bit.
!     digits_e -= 1;
!     if( isdigit(*digits_e) )
        {
!       goto done;
!       }
! 
!     if( charmap->is_like_ebcdic() )
!       {
!       if(    *digits_e == ascii_rbrace
!           || (*digits_e >= ascii_J && *digits_e <= ascii_R) )
          {
!         *digits_e = ascii_zero;
!         goto done;
          }
+       // First character is out of range:
+       retval = 0;
+       goto done;
+       }
+     else
+       {
+       if( *digits_e >= ascii_p && *digits_e <= ascii_y )
+         {
+         *digits_e = ascii_zero;
+         goto done;
+         }
+       // First character is out of range:
+       retval = 0;
+       goto done;
        }
      }
  
!   done:
!   if( retval )
      {
!     // all remaining characters are supposed to be zero through nine
!     while( digits < digits_e )
        {
!       if(     *digits<ascii_0
!           ||  *digits>ascii_9 )
!         {
!         retval = 0;
!         break;
!         }
!       digits += 1;
        }
      }
    return retval;
    }
*************** classify_alphabetic_type( const cblc_fie
*** 8835,8845 ****
                            int (checker)( std::wint_t ch ))
    {
    int retval = 1;
!   charmap_t *charmap = __gg__get_charmap(DEFAULT_32_ENCODING);
    cbl_char_t space = charmap->mapped_character(ascii_space);
    size_t nbytes_converted;
    const char *converted = __gg__iconverter(field->encoding,
!                                            DEFAULT_32_ENCODING,
                                             field->data+offset,
                                             size,
                                             &nbytes_converted);
--- 9358,9368 ----
                            int (checker)( std::wint_t ch ))
    {
    int retval = 1;
!   charmap_t *charmap = __gg__get_charmap(HOST_32_ENCODING);
    cbl_char_t space = charmap->mapped_character(ascii_space);
    size_t nbytes_converted;
    const char *converted = __gg__iconverter(field->encoding,
!                                            HOST_32_ENCODING,
                                             field->data+offset,
                                             size,
                                             &nbytes_converted);
*************** accept_envar( cblc_field_t  *tgt,
*** 8918,8924 ****
  
    if( psz_name )
      {
!     charmap_t *charmap = __gg__get_charmap(encoding);
      size_t psz_name_length = charmap->strlen(psz_name);
  
      // convert psz_name to the console encoding:
--- 9441,9447 ----
  
    if( psz_name )
      {
!     const charmap_t *charmap = __gg__get_charmap(encoding);
      size_t psz_name_length = charmap->strlen(psz_name);
  
      // convert psz_name to the console encoding:
*************** __gg__set_envar(cblc_field_t    *name,
*** 9007,9044 ****
    static size_t  env_length = 0;
    static char   *val        = NULL;
    static size_t  val_length = 0;
-   if( env_length < name_length+1 )
-     {
-     env_length = name_length+1;
-     env = static_cast<char *>(realloc(env, env_length));
-     }
-   if( val_length < value_length+1 )
-     {
-     val_length = value_length+1;
-     val = static_cast<char *>(realloc(val, val_length));
-     }
- 
-   massert(val);
-   massert(env);
  
    const char *converted;
    size_t charsout;
  
    converted = __gg__iconverter(name->encoding,
                                 __gg__console_encoding,
!                                PTRCAST(char, name->data+name_offset),
                                 name_length,
                                 &charsout );
!   memcpy(env, converted, name_length);
!   env[name_length] = '\0';
  
    converted = __gg__iconverter(value->encoding,
                                 __gg__console_encoding,
!                                PTRCAST(char, value->data+value_offset),
                                 value_length,
                                 &charsout );
!   memcpy(val, converted, value_length);
!   val[value_length] = '\0';
  
    // Get rid of leading and trailing space characters
    char *trimmed_env = brute_force_trim(env, __gg__console_encoding);
--- 9530,9564 ----
    static size_t  env_length = 0;
    static char   *val        = NULL;
    static size_t  val_length = 0;
  
    const char *converted;
    size_t charsout;
  
    converted = __gg__iconverter(name->encoding,
                                 __gg__console_encoding,
!                                as_chars(name->data + name_offset),
                                 name_length,
                                 &charsout );
!   if( env_length < charsout + 1 )
!     {
!     env_length = charsout + 1;
!     env = static_cast<char *>(checked_realloc(env, env_length));
!     }
!   memcpy(env, converted, charsout);
!   env[charsout] = '\0';
  
    converted = __gg__iconverter(value->encoding,
                                 __gg__console_encoding,
!                                as_chars(value->data + value_offset),
                                 value_length,
                                 &charsout );
!   if( val_length < charsout + 1 )
!     {
!     val_length = charsout + 1;
!     val = static_cast<char *>(checked_realloc(val, val_length));
!     }
!   memcpy(val, converted, charsout);
!   val[charsout] = '\0';
  
    // Get rid of leading and trailing space characters
    char *trimmed_env = brute_force_trim(env, __gg__console_encoding);
*************** command_line_plan_b()
*** 9106,9113 ****
            if( prior_char == '\0' )
              {
              stashed_argc += 1;
!             stashed_argv = static_cast<char **>(realloc(stashed_argv,
!                                             stashed_argc * sizeof(char *)));
              stashed_argv[stashed_argc-1] = p;
              }
            prior_char = *p++;
--- 9626,9633 ----
            if( prior_char == '\0' )
              {
              stashed_argc += 1;
!             stashed_argv = static_cast<char **>(
!               checked_realloc(stashed_argv, stashed_argc * sizeof(char *)));
              stashed_argv[stashed_argc-1] = p;
              }
            prior_char = *p++;
*************** __gg__get_command_line( cblc_field_t *fi
*** 9199,9205 ****
      while( strlen(retval) + strlen(stashed_argv[i]) + 2 > length )
        {
        length *= 2;
!       retval = static_cast<char *>(realloc(retval, length));
        massert(retval);
        }
      if( *retval )
--- 9719,9725 ----
      while( strlen(retval) + strlen(stashed_argv[i]) + 2 > length )
        {
        length *= 2;
!       retval = static_cast<char *>(checked_realloc(retval, length));
        massert(retval);
        }
      if( *retval )
*************** __gg__set_pointer(cblc_field_t       *ta
*** 9253,9259 ****
      // This is SET <something> TO POINTER
      if( source )
        {
!       source_address = *reinterpret_cast<void **>(source->data + source_o);
        }
      else
        {
--- 9773,9779 ----
      // This is SET <something> TO POINTER
      if( source )
        {
!       source_address = load_unaligned<void *>(source->data + source_o);
        }
      else
        {
*************** __gg__set_pointer(cblc_field_t       *ta
*** 9266,9272 ****
      {
      // This is SET ADDRESS OF target TO ....
      // We know it has to be an unqualified LINKAGE level 01 or level 77
!     target->data  = reinterpret_cast<unsigned char *>(source_address);
      // The caller will propagate data + offset to their children.
      }
    else
--- 9786,9792 ----
      {
      // This is SET ADDRESS OF target TO ....
      // We know it has to be an unqualified LINKAGE level 01 or level 77
!     target->data = static_cast<unsigned char *>(source_address);
      // The caller will propagate data + offset to their children.
      }
    else
*************** __gg__set_pointer(cblc_field_t       *ta
*** 9277,9288 ****
        // This is [almost certainly] INITIALIZE <pointer> when -fdefaultbyte
        // was specified.
        memset( target->data+target_o,
!               *reinterpret_cast<unsigned char *>(source_address),
                target->capacity);
        }
      else
        {
!       *reinterpret_cast<void **>(target->data+target_o) = source_address;
        }
      }
    }
--- 9797,9808 ----
        // This is [almost certainly] INITIALIZE <pointer> when -fdefaultbyte
        // was specified.
        memset( target->data+target_o,
!               *static_cast<unsigned char *>(source_address),
                target->capacity);
        }
      else
        {
!       store_unaligned<void *>(target->data+target_o, source_address);
        }
      }
    }
*************** __gg__alphabet_use( cbl_encoding_t displ
*** 9366,9372 ****
  
        if( it == __gg__alphabet_states.end() )
          {
!         __gg__abort("__gg__alphabet_use() fell off the end of __gg__alphabet_states");
          }
        __gg__low_value_character  = it->second.low_char;
        __gg__high_value_character = it->second.high_char;
--- 9886,9893 ----
  
        if( it == __gg__alphabet_states.end() )
          {
!         __gg__abort("__gg__alphabet_use() fell off the end of "
!                       "__gg__alphabet_states");
          }
        __gg__low_value_character  = it->second.low_char;
        __gg__high_value_character = it->second.high_char;
*************** __gg__routine_to_call(const char *name,
*** 9458,9512 ****
    }
  
  extern "C"
- __int128
- __gg__fetch_call_by_value_value(const cblc_field_t *field,
-                                 size_t field_o,
-                                 size_t field_s)
- 
-   {
-   int rdigits;
-   unsigned char *data   = field->data + field_o;
-   const size_t   length = field_s;
- 
-   __int128 retval = 0;
-   switch(field->type)
-     {
-     case FldGroup:
-     case FldAlphanumeric:
-     case FldAlphaEdited:
-     case FldLiteralA:
-       retval = *reinterpret_cast<char *>(data);
-       break;
- 
-     case FldFloat:
-       {
-       memcpy(&retval, data, length);
-       break;
-       }
- 
-     case FldNumericBinary:
-     case FldPacked:
-     case FldNumericBin5:
-     case FldNumericDisplay:
-     case FldNumericEdited:
-     case FldLiteralN:
-     case FldIndex:
-     case FldPointer:
-       retval = __gg__binary_value_from_qualified_field( &rdigits,
-                                                         field,
-                                                         field_o,
-                                                         field_s);
-       if( rdigits )
-         {
-         retval /= __gg__power_of_ten(rdigits);
-         }
-     default:
-       break;
-     }
-   return retval;
-   }
- 
- extern "C"
  void
  __gg__assign_value_from_stack(cblc_field_t *dest, __int128 parameter)
    {
--- 9979,9984 ----
*************** __gg__unstring( const cblc_referlet_t *i
*** 9558,9569 ****
                  size_t              id1_o,
                  size_t              id1_s,
                  size_t ndelimiteds,       // The number of DELIMITED entries
!                 const char *all_flags,    // The number of ALL flags, one per ndelimiteds
                  size_t nreceivers,        // The number of DELIMITER receivers
!                 cblc_field_t *id7,        // The index of characters, both for starting updated at end
                  size_t        id7_o,
                  size_t        id7_s,
!                 cblc_field_t *id8,        // Count of the number of times identifier-4 was updated
                  size_t        id8_o,
                  size_t        id8_s)
    {
--- 10030,10041 ----
                  size_t              id1_o,
                  size_t              id1_s,
                  size_t ndelimiteds,       // The number of DELIMITED entries
!                 const char *all_flags,    // ALL flags, one per ndelimiteds
                  size_t nreceivers,        // The number of DELIMITER receivers
!                 cblc_field_t *id7,        // Character index, start and end
                  size_t        id7_o,
                  size_t        id7_s,
!                 cblc_field_t *id8,        // Count of identifier-4 updates
                  size_t        id8_o,
                  size_t        id8_s)
    {
*************** __gg__unstring( const cblc_referlet_t *i
*** 9670,9681 ****
  
        // Convert the specified str_id1 characters back to id1->encoding.
        size_t bytes_converted;
!       const char *converted = __gg__iconverter(DEFAULT_32_ENCODING,
                                                 id1->encoding,
                                                 &str_id1[left],
                                                 (right-left)*width_of_utf32,
                                                 &bytes_converted );
!       char *duped = static_cast<char *>(__gg__memdup(converted, bytes_converted));
        // Put the converted string into place:
        __gg__field_from_string(id4[receiver].field,
                          id4[receiver].offset,
--- 10142,10154 ----
  
        // Convert the specified str_id1 characters back to id1->encoding.
        size_t bytes_converted;
!       const char *converted = __gg__iconverter(HOST_32_ENCODING,
                                                 id1->encoding,
                                                 &str_id1[left],
                                                 (right-left)*width_of_utf32,
                                                 &bytes_converted );
!       char *duped = static_cast<char *>(
!         __gg__memdup(converted, bytes_converted));
        // Put the converted string into place:
        __gg__field_from_string(id4[receiver].field,
                          id4[receiver].offset,
*************** __gg__unstring( const cblc_referlet_t *i
*** 9768,9779 ****
      // id1:
      size_t bytes_converted;
      const char *converted = __gg__iconverter(
!                            DEFAULT_32_ENCODING,
                             id1->encoding,
                             &str_id1[left],
                             (best_leftmost-left)*width_of_utf32,
                             &bytes_converted );
!     char *duped = static_cast<char *>(__gg__memdup(converted, bytes_converted));
      // Put the converted string into place:
      __gg__field_from_string(id4[nreceiver].field,
                        id4[nreceiver].offset,
--- 10241,10253 ----
      // id1:
      size_t bytes_converted;
      const char *converted = __gg__iconverter(
!                            HOST_32_ENCODING,
                             id1->encoding,
                             &str_id1[left],
                             (best_leftmost-left)*width_of_utf32,
                             &bytes_converted );
!     char *duped = static_cast<char *>(
!       __gg__memdup(converted, bytes_converted));
      // Put the converted string into place:
      __gg__field_from_string(id4[nreceiver].field,
                        id4[nreceiver].offset,
*************** __gg__unstring( const cblc_referlet_t *i
*** 9791,9797 ****
        if( best_delimiter > -1 )
          {
          converted = __gg__iconverter(
!                              DEFAULT_32_ENCODING,
                               id1->encoding,
                               delimiters[best_delimiter].data(),
                               delimiters[best_delimiter].size()*width_of_utf32,
--- 10265,10271 ----
        if( best_delimiter > -1 )
          {
          converted = __gg__iconverter(
!                              HOST_32_ENCODING,
                               id1->encoding,
                               delimiters[best_delimiter].data(),
                               delimiters[best_delimiter].size()*width_of_utf32,
*************** match_declarative( bool enabled,
*** 9942,9948 ****
                     const cbl_declarative_t& dcl )
  {
    if( MATCH_DECLARATIVE && raised.type) {
!     warnx("match_declarative: checking:    ec %s vs. dcl %s (%s enabled and %s format_1)",
            local_ec_type_str(raised.type),
            local_ec_type_str(dcl.type),
            enabled? "is" : "not",
--- 10416,10423 ----
                     const cbl_declarative_t& dcl )
  {
    if( MATCH_DECLARATIVE && raised.type) {
!     warnx("match_declarative: checking:    ec %s vs. dcl %s "
!           "(%s enabled and %s format_1)",
            local_ec_type_str(raised.type),
            local_ec_type_str(dcl.type),
            enabled? "is" : "not",
*************** void open_syslog(int option, int facilit
*** 9993,9999 ****
    /* Avoid a NULL entry.  */
      static const char * const ident = "unnamed_COBOL_program";
  #endif
!     // TODO: Program to set option in library via command-line and/or environment.
      //       Library listens to program, not to the environment.
      openlog(ident, option, facility);
      first_time = false;
--- 10468,10475 ----
    /* Avoid a NULL entry.  */
      static const char * const ident = "unnamed_COBOL_program";
  #endif
!     // TODO: Program to set option in library via command-line and/or
!     // environment.
      //       Library listens to program, not to the environment.
      openlog(ident, option, facility);
      first_time = false;
*************** void open_syslog(int option, int facilit
*** 10009,10015 ****
  static void
  default_exception_handler( ec_type_t ec )
  {
!   static const int priority = LOG_INFO, option = LOG_PERROR, facility = LOG_USER;
    open_syslog(option, facility);
  
    ec_disposition_t disposition = ec_category_fatal_e;
--- 10485,10493 ----
  static void
  default_exception_handler( ec_type_t ec )
  {
!   static const int priority = LOG_INFO;
!   static const int option   = LOG_PERROR;
!   static const int facility = LOG_USER;
    open_syslog(option, facility);
  
    ec_disposition_t disposition = ec_category_fatal_e;
*************** __gg__check_fatal_exception()
*** 10220,10226 ****
      case file_op_remove:
        if( !ec_status.is_enabled() && !ec_is_fatal(ec) ) {
          if( MATCH_DECLARATIVE )
!           warnx("%s: %s is not enabled and nonfatal", __func__, local_ec_type_str(ec));
          ec_status.clear();
          return;
        }
--- 10698,10706 ----
      case file_op_remove:
        if( !ec_status.is_enabled() && !ec_is_fatal(ec) ) {
          if( MATCH_DECLARATIVE )
!           warnx("%s: %s is not enabled and nonfatal",
!                 __func__,
!                 local_ec_type_str(ec));
          ec_status.clear();
          return;
        }
*************** __gg__float128_from_location( const cblc
*** 10445,10459 ****
      {
      case 4:
        {
!       retval = *reinterpret_cast<_Float32 *>(
!                                     const_cast<unsigned char *>(location));
        break;
        }
  
      case 8:
        {
!       retval = *reinterpret_cast<_Float64 *>(
!                                     const_cast<unsigned char *>(location));
        break;
        }
  
--- 10925,10937 ----
      {
      case 4:
        {
!       retval = load_unaligned<_Float32>(location);
        break;
        }
  
      case 8:
        {
!       retval = load_unaligned<_Float64>(location);
        break;
        }
  
*************** __gg__adjust_encoding(cblc_field_t *fiel
*** 10504,10510 ****
    size_t nbytes;
    const char *converted = __gg__iconverter(DEFAULT_SOURCE_ENCODING,
                                             field->encoding,
!                                            PTRCAST(char, field->data),
                                             field->capacity,
                                             &nbytes);
    __gg__adjust_dest_size(field, nbytes);
--- 10982,10988 ----
    size_t nbytes;
    const char *converted = __gg__iconverter(DEFAULT_SOURCE_ENCODING,
                                             field->encoding,
!                                            as_chars( field->data),
                                             field->capacity,
                                             &nbytes);
    __gg__adjust_dest_size(field, nbytes);
*************** __gg__func_exception_file(cblc_field_t
*** 10637,10643 ****
      // This is where we process FUNCTION EXCEPTION-FILE <no parameter>
      if( !(last_exception_code & ec_io_e) )
        {
!       // There is no EC-I-O exception code, so we return two alphanumeric zeros.
        strcpy(ach, "00");
        }
      else
--- 11115,11122 ----
      // This is where we process FUNCTION EXCEPTION-FILE <no parameter>
      if( !(last_exception_code & ec_io_e) )
        {
!       // There is no EC-I-O exception code, so we return two alphanumeric
!       // zeros.
        strcpy(ach, "00");
        }
      else
*************** __gg__is_float_infinite(const cblc_field
*** 10820,10829 ****
    switch(source->capacity)
      {
      case 4:
!       retval = fpclassify(  *reinterpret_cast<_Float32*>(source->data+offset)) == FP_INFINITE;
        break;
      case 8:
!       retval = fpclassify(  *reinterpret_cast<_Float64*>(source->data+offset)) == FP_INFINITE;
        break;
      case 16:
        // retval = *(_Float128*)(source->data+offset) == INFINITY;
--- 11299,11310 ----
    switch(source->capacity)
      {
      case 4:
!       retval = fpclassify(load_unaligned<_Float32>(source->data+offset))
!                == FP_INFINITE;
        break;
      case 8:
!       retval = fpclassify(load_unaligned<_Float64>(source->data+offset))
!                == FP_INFINITE;
        break;
      case 16:
        // retval = *(_Float128*)(source->data+offset) == INFINITY;
*************** __gg__float32_from_128( const cblc_field
*** 10852,10858 ****
      }
    else
      {
!     *reinterpret_cast<_Float32 *>(dest->data+dest_offset) = (_Float32)value;
      }
    return retval;
    }
--- 11333,11340 ----
      }
    else
      {
!     store_unaligned<_Float32>(dest->data+dest_offset,
!                                static_cast<_Float32>(value));
      }
    return retval;
    }
*************** __gg__float32_from_64(  const cblc_field
*** 10865,10878 ****
                          size_t              source_offset)
    {
    int retval = 0;
!   _Float64 value = *reinterpret_cast<_Float64*>(source->data+source_offset);
    if( FP128_FUNC(fabs)(value) > GCOB_FP128_LITERAL (3.4028235E38) )
      {
      retval = 1;
      }
    else
      {
!     *reinterpret_cast<_Float32 *>(dest->data+dest_offset) = (_Float32)value;
      }
    return retval;
    }
--- 11347,11361 ----
                          size_t              source_offset)
    {
    int retval = 0;
!   _Float64 value = load_unaligned<_Float64>(source->data+source_offset);
    if( FP128_FUNC(fabs)(value) > GCOB_FP128_LITERAL (3.4028235E38) )
      {
      retval = 1;
      }
    else
      {
!     store_unaligned<_Float32>(dest->data+dest_offset,
!                                static_cast<_Float32>(value));
      }
    return retval;
    }
*************** __gg__float64_from_128( const cblc_field
*** 10894,10900 ****
      }
    else
      {
!     *reinterpret_cast<_Float64 *>(dest->data+dest_offset) = (_Float64)value;
      }
    return retval;
    }
--- 11377,11384 ----
      }
    else
      {
!     store_unaligned<_Float64>(dest->data+dest_offset,
!                                static_cast<_Float64>(value));
      }
    return retval;
    }
*************** __gg__just_mangle_name( const cblc_field
*** 11183,11189 ****
    size_t charsout;
    const char *converted = __gg__iconverter(encoding,
                                             __gg__console_encoding,
!                                            PTRCAST(char, field->data),
                                             length,
                                             &charsout);
    memcpy(ach_name, converted, charsout);
--- 11667,11673 ----
    size_t charsout;
    const char *converted = __gg__iconverter(encoding,
                                             __gg__console_encoding,
!                                            as_chars( field->data),
                                             length,
                                             &charsout);
    memcpy(ach_name, converted, charsout);
*************** __gg__just_mangle_name( const cblc_field
*** 11200,11205 ****
--- 11684,11690 ----
      {
      strcpy(ach_name, "<pointer>");
      }
+   length = strlen(ach_name);
  
    // At this point we have a null-terminated ascii function name.
  
*************** __gg__function_handle_from_name(int
*** 11274,11283 ****
    size_t charsout;
    const char *converted = __gg__iconverter(field->encoding,
                                             DEFAULT_SOURCE_ENCODING,
!                                            PTRCAST(char, field->data + offset),
                                             length,
                                             &charsout);
!   memcpy(ach_name, converted, length);
    char *p = strchr(ach_name, ascii_space);
    if(p)
      {
--- 11759,11769 ----
    size_t charsout;
    const char *converted = __gg__iconverter(field->encoding,
                                             DEFAULT_SOURCE_ENCODING,
!                                            as_chars( field->data + offset),
                                             length,
                                             &charsout);
!   memcpy(ach_name, converted, charsout);
!   ach_name[charsout] = '\0';
    char *p = strchr(ach_name, ascii_space);
    if(p)
      {
*************** __gg__function_handle_from_name(int
*** 11315,11321 ****
  
  extern "C"
  void
! __gg__variables_to_init(cblc_field_t *array[], const char *clear)
    {
    int i=0;
    for(;;)
--- 11801,11807 ----
  
  extern "C"
  void
! __gg__variables_to_init(cblc_field_t *array[], const int flag_bits)
    {
    int i=0;
    for(;;)
*************** __gg__variables_to_init(cblc_field_t *ar
*** 11325,11334 ****
        {
        break;
        }
-     int flag_bits  = 0;
-     flag_bits     |=  clear
-                       ? DEFAULTBYTE_BIT + (*clear & DEFAULT_BYTE_MASK)
-                       : 0;
      __gg__initialize_variable_clean(field, flag_bits);
      }
    }
--- 11811,11816 ----
*************** __gg__mirror_range( size_t         nrows
*** 11451,11457 ****
                   source + left ,
                   right - left);
            left = right + subtable_rows * subtable_width;
!           // Set right to stride, in case this is the final 'subtable' iteration
            right = stride;
            }
  
--- 11933,11940 ----
                   source + left ,
                   right - left);
            left = right + subtable_rows * subtable_width;
!           // Set right to stride, in case this is the final 'subtable'
!           // iteration
            right = stride;
            }
  
*************** __gg__allocate( cblc_field_t       *firs
*** 11705,11711 ****
          }
        else
          {
!         // This is ISO 2023 rule 8 (OPT_INIT if specified, otherwise defaultbyte, otherwise zero)")
          if( default_byte >= 0 )
            {
            fill_char = default_byte;
--- 12188,12195 ----
          }
        else
          {
!         // This is ISO 2023 rule 8 (OPT_INIT if specified, otherwise
!         // defaultbyte, otherwise zero)")
          if( default_byte >= 0 )
            {
            fill_char = default_byte;
*************** __gg__allocate( cblc_field_t       *firs
*** 11733,11739 ****
    if( returning )
      {
      // 'returning' has to be a FldPointer variable; assign the retval to it.
!     *reinterpret_cast<unsigned char **>(returning->data + returning_offset) = retval;
      }
    }
  
--- 12217,12224 ----
    if( returning )
      {
      // 'returning' has to be a FldPointer variable; assign the retval to it.
!     store_unaligned<unsigned char *>(returning->data + returning_offset,
!                                     retval);
      }
    }
  
*************** __gg__module_name(cblc_field_t *dest, mo
*** 11774,11780 ****
      case module_activating_e:
      /* 5) If the ACTIVATING keyword is specified and the function is in a COBOL
      main program, then the returned value shall be a single space. The
!     implementor shall document how a main program is identified. If the function
      is not specified in a main program, then the returned value is the name of
      the runtime element that activated the currently running runtime element.
      This may be by a CALL statement, an INVOKE statement, a function reference,
--- 12259,12266 ----
      case module_activating_e:
      /* 5) If the ACTIVATING keyword is specified and the function is in a COBOL
      main program, then the returned value shall be a single space. The
!     implementor shall document how a main program is identified. If the
!     function
      is not specified in a main program, then the returned value is the name of
      the runtime element that activated the currently running runtime element.
      This may be by a CALL statement, an INVOKE statement, a function reference,
*************** __gg__module_name(cblc_field_t *dest, mo
*** 11816,11822 ****
  
      case module_current_e:
        // 7) If the CURRENT keyword is specified then the returned value is the
!       // name of the runtime element of the outermost program of the compilation
        // unit’s code that is currently running.
  
        // Look upward for our parent T.
--- 12302,12309 ----
  
      case module_current_e:
        // 7) If the CURRENT keyword is specified then the returned value is the
!       // name of the runtime element of the outermost program of the
!       // compilation
        // unit’s code that is currently running.
  
        // Look upward for our parent T.
*************** __gg__module_name(cblc_field_t *dest, mo
*** 11849,11858 ****
          if(    module_name_stack[i][0] == 'T'
              || module_name_stack[i][0] == 'N' )
            {
!           if( strlen(result) + module_name_stack[i].substr(1).length() + 4 > result_size)
              {
              result_size *= 2;
!             result = static_cast<char *>(realloc(result, result_size));
              }
            strcat(result, module_name_stack[i].substr(1).c_str());
            strcat(result, ";");
--- 12336,12348 ----
          if(    module_name_stack[i][0] == 'T'
              || module_name_stack[i][0] == 'N' )
            {
!           if( strlen(result)
!               + module_name_stack[i].substr(1).length()
!               + 4 > result_size)
              {
              result_size *= 2;
!             result = static_cast<char *>(
!               checked_realloc(result, result_size));
              }
            strcat(result, module_name_stack[i].substr(1).c_str());
            strcat(result, ";");
*************** __gg__set_exception_environment( uint64_
*** 11975,11981 ****
  	      static_cast<unsigned int>(ecs[0] / 3));
        }
        cbl_enabled_exceptions_t enabled;
!       enabled_ECs = enabled.decode( std::vector<uint64_t>(ecs_begin, ecs_end) );
        if( MATCH_DECLARATIVE ) enabled_ECs.dump("set_exception_environment");
      }
    } else {
--- 12465,12472 ----
  	      static_cast<unsigned int>(ecs[0] / 3));
        }
        cbl_enabled_exceptions_t enabled;
!       enabled_ECs = enabled.decode(
!         std::vector<uint64_t>(ecs_begin, ecs_end) );
        if( MATCH_DECLARATIVE ) enabled_ECs.dump("set_exception_environment");
      }
    } else {
*************** __gg__set_env_name( const cblc_field_t *
*** 12013,12030 ****
    {
    // implements DISPLAY UPON ENVIRONMENT-NAME
    free(sv_envname);
-   sv_envname = static_cast<char *>(malloc(length+1));
-   massert(sv_envname);
  
    // We need to convert the name to the console encoding:
    size_t charsout;
    const char *converted = __gg__iconverter(var->encoding,
                                             __gg__console_encoding,
!                                            PTRCAST(char, var->data+offset),
                                             length,
                                             &charsout);
!   memcpy(sv_envname, converted, length);
!   sv_envname[length] = '\0';
    brute_force_trim(sv_envname, __gg__console_encoding);
    }
  
--- 12504,12521 ----
    {
    // implements DISPLAY UPON ENVIRONMENT-NAME
    free(sv_envname);
  
    // We need to convert the name to the console encoding:
    size_t charsout;
    const char *converted = __gg__iconverter(var->encoding,
                                             __gg__console_encoding,
!                                            as_chars(var->data + offset),
                                             length,
                                             &charsout);
!   sv_envname = static_cast<char *>(malloc(charsout + 1));
!   massert(sv_envname);
!   memcpy(sv_envname, converted, charsout);
!   sv_envname[charsout] = '\0';
    brute_force_trim(sv_envname, __gg__console_encoding);
    }
  
*************** __gg__set_env_value(const cblc_field_t *
*** 12073,12079 ****
      size_t nbytes;
      char *val = __gg__iconverter(value->encoding,
                                  __gg__console_encoding,
!                                 reinterpret_cast<char *>(value->data) + offset,
                                  length,
                                  &nbytes);
  
--- 12564,12570 ----
      size_t nbytes;
      char *val = __gg__iconverter(value->encoding,
                                  __gg__console_encoding,
!                                 as_chars(value->data) + offset,
                                  length,
                                  &nbytes);
  
*************** __gg__refer_from_string(cblc_field_t *fi
*** 12207,12213 ****
    // might, or might not, be nul-terminated, and you don't want a
    // nul-terminator in the data of the target field.  For intermediates, the
    // string must be nul-terminated
!   charmap_t *charmap = __gg__get_charmap(field->encoding);
    if( field->attr & intermediate_e )
      {
      field_size = SSIZE_MAX;
--- 12698,12704 ----
    // might, or might not, be nul-terminated, and you don't want a
    // nul-terminator in the data of the target field.  For intermediates, the
    // string must be nul-terminated
!   const charmap_t *charmap = __gg__get_charmap(field->encoding);
    if( field->attr & intermediate_e )
      {
      field_size = SSIZE_MAX;
*************** __gg__refer_from_psz(cblc_field_t *field
*** 12230,12236 ****
    {
    // 'string' has to be in the 'field' encoding. If the target is intermediate,
    // It has to be nul-terminated in the field's encoding.
!   charmap_t *charmap = __gg__get_charmap(field->encoding);
  
    if( field->attr & intermediate_e )
      {
--- 12721,12727 ----
    {
    // 'string' has to be in the 'field' encoding. If the target is intermediate,
    // It has to be nul-terminated in the field's encoding.
!   const charmap_t *charmap = __gg__get_charmap(field->encoding);
  
    if( field->attr & intermediate_e )
      {
*************** __gg__compare_string_all(int
*** 12611,12622 ****
      {
      length_left /= 2;
      length_right /= 2;
-     const unsigned short *l = reinterpret_cast<const unsigned short *>(left);
-     const unsigned short *r = reinterpret_cast<const unsigned short *>(right);
      while( index < length_left )
!      {
!       unsigned short ch_l = l[index];
!       unsigned short ch_r = r[index % length_right];
        if( ch_l != ch_r )
          {
          *result =  ch_l < ch_r ? -1 : +1 ;
--- 13102,13112 ----
      {
      length_left /= 2;
      length_right /= 2;
      while( index < length_left )
!       {
!       uint16_t ch_l = load_unaligned<uint16_t>(left + index * 2);
!       uint16_t ch_r = load_unaligned<uint16_t>(right
!                                                + (index % length_right) * 2);
        if( ch_l != ch_r )
          {
          *result =  ch_l < ch_r ? -1 : +1 ;
*************** __gg__compare_string_all(int
*** 12629,12640 ****
      {
      length_left /= 4;
      length_right /= 4;
-     const unsigned long *l = reinterpret_cast<const unsigned long *>(left);
-     const unsigned long *r = reinterpret_cast<const unsigned long *>(right);
      while( index < length_left )
        {
!       unsigned long ch_l = l[index];
!       unsigned long ch_r = r[index % length_right];
        if( ch_l != ch_r )
          {
          *result =  ch_l < ch_r ? -1 : +1 ;
--- 13119,13129 ----
      {
      length_left /= 4;
      length_right /= 4;
      while( index < length_left )
        {
!       uint32_t ch_l = load_unaligned<uint32_t>(left + index * 4);
!       uint32_t ch_r = load_unaligned<uint32_t>(right
!                                                + (index % length_right) * 4);
        if( ch_l != ch_r )
          {
          *result =  ch_l < ch_r ? -1 : +1 ;
*************** __gg__compare_string_1( int            *
*** 12652,12664 ****
                          size_t          length_left,
                    const unsigned char  *right,
                          size_t          length_right,
!                         cbl_char_t      char_space_)
    {
    // This is the the routine that will probably do all of the real-world work,
    // the following routines not withstanding.  It does single-byte comparisons
    // through the collation table.
    *result = 0;
-   unsigned char char_space = char_space_;
  
    size_t length = std::min(length_left, length_right);
    size_t index = 0;
--- 13141,13152 ----
                          size_t          length_left,
                    const unsigned char  *right,
                          size_t          length_right,
!                   const unsigned char  *char_space)
    {
    // This is the the routine that will probably do all of the real-world work,
    // the following routines not withstanding.  It does single-byte comparisons
    // through the collation table.
    *result = 0;
  
    size_t length = std::min(length_left, length_right);
    size_t index = 0;
*************** __gg__compare_string_1( int            *
*** 12678,12686 ****
      while( index < length_left )
        {
        unsigned char ch_l = collated(left[index]);
!       if( ch_l != char_space )
          {
!         *result =  ch_l < char_space ? -1 : +1 ;
          goto done;
          }
        index += 1;
--- 13166,13174 ----
      while( index < length_left )
        {
        unsigned char ch_l = collated(left[index]);
!       if( ch_l != *char_space )
          {
!         *result =  ch_l < *char_space ? -1 : +1 ;
          goto done;
          }
        index += 1;
*************** __gg__compare_string_1( int            *
*** 12688,12696 ****
      while( index < length_right )
        {
        unsigned char ch_r = collated(right[index]);
!       if( char_space != ch_r )
          {
!         *result =  char_space < ch_r ? -1 : +1 ;
          goto done;
          }
        index += 1;
--- 13176,13184 ----
      while( index < length_right )
        {
        unsigned char ch_r = collated(right[index]);
!       if( *char_space != ch_r )
          {
!         *result =  *char_space < ch_r ? -1 : +1 ;
          goto done;
          }
        index += 1;
*************** __gg__compare_string_1a( int
*** 12720,12726 ****
                           size_t          length_left,
                     const unsigned char  *right,
                           size_t          length_right,
!                          cbl_char_t      )
    {
    // This is the rarely-seen, but simplest routine of all, comparing
    // single-byte ASCII characters in the same encoding without fear or favor.
--- 13208,13214 ----
                           size_t          length_left,
                     const unsigned char  *right,
                           size_t          length_right,
!                    const unsigned char  *             )
    {
    // This is the rarely-seen, but simplest routine of all, comparing
    // single-byte ASCII characters in the same encoding without fear or favor.
*************** __gg__compare_string_1e( int
*** 12830,12882 ****
  extern "C"
  void
  __gg__compare_string_2( int            *result,
!                    const unsigned short  *left,
                           size_t          length_left,
!                    const unsigned short  *right,
                           size_t          length_right,
!                          cbl_char_t      char_space_)
    {
!   // This compares USHORT character strings:
    *result = 0;
-   unsigned short char_space = char_space_;
  
-   length_left  /= 2;
-   length_right /= 2;
    size_t length = std::min(length_left, length_right);
    size_t index = 0;
    while( index < length )
      {
!     unsigned short ch_l = collated(left[index]);
!     unsigned short ch_r = collated(right[index]);
      if( ch_l != ch_r )
        {
        *result =  ch_l < ch_r ? -1 : +1 ;
        goto done;
        }
!     index += 1;
      }
!   if( *result == 0 )
      {
!     while( index < length_left )
        {
!       unsigned short ch_l = collated(left[index]);
!       if( ch_l != char_space )
!         {
!         *result =  ch_l < char_space ? -1 : +1 ;
!         goto done;
!         }
!       index += 1;
        }
!     while( index < length_right )
        {
!       unsigned short ch_r = collated(right[index]);
!       if( char_space != ch_r )
!         {
!         *result =  char_space < ch_r ? -1 : +1 ;
!         goto done;
!         }
!       index += 1;
        }
      }
    done:
    return;
--- 13318,13406 ----
  extern "C"
  void
  __gg__compare_string_2( int            *result,
!                    const unsigned char  *left,
                           size_t          length_left,
!                    const unsigned char  *right,
                           size_t          length_right,
!                    const unsigned char  *char_space)
    {
!   // This compares two-byte character strings.  It theoretically does it
!   // through a collation table.  We haven't implemented that yet.  So, this
!   // routine attempts to use the existing collation table for values less
!   // than 256.  It's an unsatisfactory kludge.
! 
!   bool is_little_endian = *char_space != 0;
! 
    *result = 0;
  
    size_t length = std::min(length_left, length_right);
    size_t index = 0;
    while( index < length )
      {
!     size_t index_l;
!     size_t index_r;
!     if( is_little_endian )
!       {
!       index_l = 256*left[index+1]  + left[index+0];
!       index_r = 256*right[index+1] + right[index+0];
!       }
!     else
!       {
!       index_l = 256*left[index+0]  + left[index+1];
!       index_r = 256*right[index+0] + right[index+1];
!       }
! 
!     index_l %= 256;
!     index_r %= 256;
! 
!     uint32_t ch_l = collated(index_l);
!     uint32_t ch_r = collated(index_r);
      if( ch_l != ch_r )
        {
        *result =  ch_l < ch_r ? -1 : +1 ;
        goto done;
        }
!     index += 2;
      }
!   while( index < length_left )
      {
!     size_t index_l;
!     if( is_little_endian )
        {
!       index_l = 256*left[index+1]  + left[index+0];
        }
!     else
        {
!       index_l = 256*left[index+0]  + left[index+1];
!       }
!     index_l %= 256;
!     uint32_t ch_l = collated(index_l);
!     if( ch_l != ascii_space )
!       {
!       *result =  ch_l < ascii_space ? -1 : +1 ;
!       goto done;
        }
+     index += 2;
+     }
+   while( index < length_right )
+     {
+     size_t index_r;
+     if( is_little_endian )
+       {
+       index_r = 256*right[index+1]  + right[index+0];
+       }
+     else
+       {
+       index_r = 256*right[index+0]  + right[index+1];
+       }
+     index_r %= 256;
+     uint32_t ch_r = collated(index_r);
+     if( ascii_space != ch_r )
+       {
+       *result =  ascii_space < ch_r ? -1 : +1 ;
+       goto done;
+       }
+     index += 2;
      }
    done:
    return;
*************** __gg__compare_string_2( int            *
*** 12885,12936 ****
  extern "C"
  void
  __gg__compare_string_2a( int            *result,
!                    const unsigned short  *left,
                           size_t          length_left,
!                    const unsigned short  *right,
                           size_t          length_right,
!                          cbl_char_t      char_space_)
    {
!   // This compares USHORT character strings:
    *result = 0;
-   unsigned short char_space = char_space_;
  
!   length_left  /= 2;
!   length_right /= 2;
    size_t length = std::min(length_left, length_right);
    size_t index = 0;
!   while( index < length )
      {
!     unsigned short ch_l = left[index];
!     unsigned short ch_r = right[index];
!     if( ch_l != ch_r )
        {
!       *result =  ch_l < ch_r ? -1 : +1 ;
!       goto done;
        }
-     index += 1;
      }
!   if( *result == 0 )
      {
!     while( index < length_left )
        {
!       unsigned short ch_l = left[index];
!       if( ch_l != char_space )
          {
!         *result =  ch_l < char_space ? -1 : +1 ;
          goto done;
          }
        index += 1;
        }
      while( index < length_right )
        {
!       unsigned short ch_r = right[index];
!       if( char_space != ch_r )
          {
!         *result =  char_space < ch_r ? -1 : +1 ;
          goto done;
          }
-       index += 1;
        }
      }
    done:
--- 13409,13552 ----
  extern "C"
  void
  __gg__compare_string_2a( int            *result,
!                    const unsigned char  *left,
                           size_t          length_left,
!                    const unsigned char  *right,
                           size_t          length_right,
!                    const char           *char_space)
    {
!   // This compares two-byte character strings.
    *result = 0;
  
!   length_left/=2;
!   length_left*=2;
!   length_right/=2;
!   length_right*=2;
! 
    size_t length = std::min(length_left, length_right);
    size_t index = 0;
! 
!   // The two-byte characters and the two-byte char_space are in the same
!   // encoding.  We need to know if it is big- or little-endian, so that we can
!   // do the comparison in a numerically valid way:
! 
!   static const int stride = 2;
!   if( *char_space )
      {
!     // We know that the space encodes as U+0020, so if the first byte is non-
!     // zero, this must a little-endian encoding:
! 
!     while( index < length )
        {
!       // Compare the high bytes
!       uint8_t ch_l;
!       uint8_t ch_r;
! 
!       ch_l =  left[index+1];
!       ch_r = right[index+1];
!       if( ch_l != ch_r )
!         {
!         *result =  ch_l < ch_r ? -1 : +1 ;
!         goto done;
!         }
!       // And then compare the low bytes
!       ch_l =  left[index];
!       ch_r = right[index];
!       if( ch_l != ch_r )
!         {
!         *result =  ch_l < ch_r ? -1 : +1 ;
!         goto done;
!         }
!       index += stride;
!       }
!     // Arriving here means the common strings are the same.  We need to check
!     // the longer against spaces.
! 
!     while( index < length_left )
!       {
!       uint8_t ch_l;
!       ch_l = left[index+1];
!       if( ch_l != char_space[1] )
!         {
!         *result =  ch_l < char_space[1] ? -1 : +1 ;
!         goto done;
!         }
!       ch_l = left[index];
!       if( ch_l != char_space[0] )
!         {
!         *result =  ch_l < char_space[0] ? -1 : +1 ;
!         goto done;
!         }
!       index += stride;
!       }
!     while( index < length_right )
!       {
!       uint8_t ch_r;
!       ch_r = right[index+1];
!       if( char_space[1] != ch_r )
!         {
!         *result =  char_space[1] < ch_r ? -1 : +1 ;
!         goto done;
!         }
!       ch_r = right[index];
!       if( char_space[0] != ch_r )
!         {
!         *result =  char_space[0] < ch_r ? -1 : +1 ;
!         goto done;
!         }
!       index += stride;
        }
      }
!   else
      {
!     // This is a big-endian encoding, so we can just look at the bytes in
!     // order.
!     while( index < length )
        {
!       uint8_t ch_l;
!       uint8_t ch_r;
!       ch_l =  left[index];
!       ch_r = right[index];
!       if( ch_l != ch_r )
          {
!         *result =  ch_l < ch_r ? -1 : +1 ;
          goto done;
          }
        index += 1;
        }
+     // Arriving here means the common parts of the strings are the same, and so
+     // we have to compare the longer against spaces
+     while( index < length_left )
+       {
+       uint8_t ch_l;
+       ch_l = left[index++];
+       if( ch_l != char_space[0] )
+         {
+         *result =  ch_l < char_space[0] ? -1 : +1 ;
+         goto done;
+         }
+       ch_l = left[index++];
+       if( ch_l != char_space[1] )
+         {
+         *result =  ch_l < char_space[1] ? -1 : +1 ;
+         goto done;
+         }
+       }
      while( index < length_right )
        {
!       uint8_t ch_r;
!       ch_r = right[index++];
!       if( char_space[0] != ch_r )
          {
!         *result =  char_space[0] < ch_r ? -1 : +1 ;
!         goto done;
!         }
!       ch_r = right[index++];
!       if( char_space[1] != ch_r )
!         {
!         *result =  char_space[1] < ch_r ? -1 : +1 ;
          goto done;
          }
        }
      }
    done:
*************** __gg__compare_string_2a( int
*** 12939,12992 ****
  
  extern "C"
  void
! __gg__compare_string_4( int             *result,
!                    const unsigned long  *left,
                           size_t          length_left,
!                    const unsigned long  *right,
                           size_t          length_right,
!                          cbl_char_t      char_space_)
    {
!   // This compares ULONG character strings:
    *result = 0;
-   unsigned long char_space = char_space_;
  
-   length_left  /= 4;
-   length_right /= 4;
    size_t length = std::min(length_left, length_right);
    size_t index = 0;
    while( index < length )
      {
!     unsigned long ch_l = collated(left[index]);
!     unsigned long ch_r = collated(right[index]);
      if( ch_l != ch_r )
        {
        *result =  ch_l < ch_r ? -1 : +1 ;
        goto done;
        }
!     index += 1;
      }
!   if( *result == 0 )
      {
!     while( index < length_left )
        {
!       unsigned long ch_l = collated(left[index]);
!       if( ch_l != char_space )
!         {
!         *result =  ch_l < char_space ? -1 : +1 ;
!         goto done;
!         }
!       index += 1;
        }
!     while( index < length_right )
        {
!       unsigned long ch_r = collated(right[index]);
!       if( char_space != ch_r )
!         {
!         *result =  char_space < ch_r ? -1 : +1 ;
!         goto done;
!         }
!       index += 1;
        }
      }
    done:
    return;
--- 13555,13668 ----
  
  extern "C"
  void
! __gg__compare_string_4( int            *result,
!                    const unsigned char  *left,
                           size_t          length_left,
!                    const unsigned char  *right,
                           size_t          length_right,
!                    const unsigned char  *char_space)
    {
!   // This compares four-byte character strings.  It theoretically does it
!   // through a collation table.  We haven't implemented that yet.  So, this
!   // routine attempts to use the existing collation table for values less
!   // than 256.  It's an unsatisfactory kludge.
! 
!   bool is_little_endian = *char_space != 0;
! 
    *result = 0;
  
    size_t length = std::min(length_left, length_right);
    size_t index = 0;
    while( index < length )
      {
!     size_t index_l;
!     size_t index_r;
!     if( is_little_endian )
!       {
!       index_l =  16777216*left[index+3]
!                 +   65536*left[index+2]
!                 +     256*left[index+1]
!                 +         left[index+0];
!       index_r =  16777216*right[index+3]
!                 +   65536*right[index+2]
!                 +     256*right[index+1]
!                 +         right[index+0];
!       }
!     else
!       {
!       index_l =  16777216*left[index+0]
!                 +   65536*left[index+1]
!                 +     256*left[index+2]
!                 +         left[index+3];
!       index_r =  16777216*right[index+0]
!                 +   65536*right[index+2]
!                 +     256*right[index+3]
!                 +         right[index+0];
!       }
! 
!     index_l %= 256;
!     index_r %= 256;
! 
!     uint32_t ch_l = collated(index_l);
!     uint32_t ch_r = collated(index_r);
      if( ch_l != ch_r )
        {
        *result =  ch_l < ch_r ? -1 : +1 ;
        goto done;
        }
!     index += 2;
      }
!   while( index < length_left )
      {
!     size_t index_l;
!     if( is_little_endian )
        {
!       index_l =  16777216*left[index+3]
!                 +   65536*left[index+2]
!                 +     256*left[index+1]
!                 +         left[index+0];
        }
!     else
        {
!       index_l =  16777216*left[index+0]
!                 +   65536*left[index+1]
!                 +     256*left[index+2]
!                 +         left[index+3];
        }
+     index_l %= 256;
+     uint32_t ch_l = collated(index_l);
+     if( ch_l != ascii_space )
+       {
+       *result =  ch_l < ascii_space ? -1 : +1 ;
+       goto done;
+       }
+     index += 2;
+     }
+   while( index < length_right )
+     {
+     size_t index_r;
+     if( is_little_endian )
+       {
+       index_r =  16777216*right[index+3]
+                 +   65536*right[index+2]
+                 +     256*right[index+1]
+                 +         right[index+0];
+       }
+     else
+       {
+       index_r =  16777216*right[index+0]
+                 +   65536*right[index+1]
+                 +     256*right[index+2]
+                 +         right[index+3];
+       }
+     index_r %= 256;
+     uint32_t ch_r = collated(index_r);
+     if( ascii_space != ch_r )
+       {
+       *result =  ascii_space < ch_r ? -1 : +1 ;
+       goto done;
+       }
+     index += 2;
      }
    done:
    return;
*************** __gg__compare_string_4( int
*** 12994,13046 ****
  
  extern "C"
  void
! __gg__compare_string_4a( int             *result,
!                    const unsigned long  *left,
                           size_t          length_left,
!                    const unsigned long  *right,
                           size_t          length_right,
!                          cbl_char_t      char_space_)
    {
!   // This compares ULONG character strings:
    *result = 0;
-   unsigned long char_space = char_space_;
  
!   length_left  /= 4;
!   length_right /= 4;
    size_t length = std::min(length_left, length_right);
    size_t index = 0;
!   while( index < length )
      {
!     unsigned long ch_l = left[index];
!     unsigned long ch_r = right[index];
!     if( ch_l != ch_r )
        {
!       *result =  ch_l < ch_r ? -1 : +1 ;
!       goto done;
        }
-     index += 1;
      }
!   if( *result == 0 )
      {
!     while( index < length_left )
        {
!       unsigned long ch_l = left[index];
!       if( ch_l != char_space )
          {
!         *result =  ch_l < char_space ? -1 : +1 ;
          goto done;
          }
        index += 1;
        }
      while( index < length_right )
        {
!       unsigned long ch_r = right[index];
!       if( char_space != ch_r )
          {
!         *result =  char_space < ch_r ? -1 : +1 ;
          goto done;
          }
!       index += 1;
        }
      }
    done:
--- 13670,13873 ----
  
  extern "C"
  void
! __gg__compare_string_4a( int            *result,
!                    const unsigned char  *left,
                           size_t          length_left,
!                    const unsigned char  *right,
                           size_t          length_right,
!                    const char           *char_space)
    {
!   // This compares four-byte character strings.
    *result = 0;
  
!   length_left/=4;
!   length_left*=4;
!   length_right/=4;
!   length_right*=4;
! 
    size_t length = std::min(length_left, length_right);
    size_t index = 0;
! 
!   // The two-byte characters and the two-byte char_space are in the same
!   // encoding.  We need to know if it is big- or little-endian, so that we can
!   // do the comparison in a numerically valid way:
! 
!   static const int stride = 4;
!   if( *char_space )
      {
!     // We know that the space encodes as U+0020, so if the first byte is non-
!     // zero, this must a little-endian encoding:
! 
!     while( index < length )
        {
!       // Compare the high bytes down to the low bytes
!       uint8_t ch_l;
!       uint8_t ch_r;
! 
!       ch_l =  left[index+3];
!       ch_r = right[index+3];
!       if( ch_l != ch_r )
!         {
!         *result =  ch_l < ch_r ? -1 : +1 ;
!         goto done;
!         }
!       ch_l =  left[index+2];
!       ch_r = right[index+2];
!       if( ch_l != ch_r )
!         {
!         *result =  ch_l < ch_r ? -1 : +1 ;
!         goto done;
!         }
!       ch_l =  left[index+1];
!       ch_r = right[index+1];
!       if( ch_l != ch_r )
!         {
!         *result =  ch_l < ch_r ? -1 : +1 ;
!         goto done;
!         }
!       // And then compare the low bytes
!       ch_l =  left[index];
!       ch_r = right[index];
!       if( ch_l != ch_r )
!         {
!         *result =  ch_l < ch_r ? -1 : +1 ;
!         goto done;
!         }
!       index += stride;
!       }
!     // Arriving here means the common strings are the same.  We need to check
!     // the longer against spaces.
! 
!     while( index < length_left )
!       {
!       uint8_t ch_l;
!       ch_l = left[index+3];
!       if( ch_l != char_space[3] )
!         {
!         *result =  ch_l < char_space[3] ? -1 : +1 ;
!         goto done;
!         }
!       ch_l = left[index+2];
!       if( ch_l != char_space[2] )
!         {
!         *result =  ch_l < char_space[2] ? -1 : +1 ;
!         goto done;
!         }
!       ch_l = left[index+1];
!       if( ch_l != char_space[1] )
!         {
!         *result =  ch_l < char_space[1] ? -1 : +1 ;
!         goto done;
!         }
!       ch_l = left[index];
!       if( ch_l != char_space[0] )
!         {
!         *result =  ch_l < char_space[0] ? -1 : +1 ;
!         goto done;
!         }
!       index += stride;
!       }
!     while( index < length_right )
!       {
!       uint8_t ch_r;
!       ch_r = right[index+3];
!       if( char_space[3] != ch_r )
!         {
!         *result =  char_space[1] < ch_r ? -1 : +1 ;
!         goto done;
!         }
!       ch_r = right[index+2];
!       if( char_space[2] != ch_r )
!         {
!         *result =  char_space[1] < ch_r ? -1 : +1 ;
!         goto done;
!         }
!       ch_r = right[index+1];
!       if( char_space[1] != ch_r )
!         {
!         *result =  char_space[1] < ch_r ? -1 : +1 ;
!         goto done;
!         }
!       ch_r = right[index];
!       if( char_space[0] != ch_r )
!         {
!         *result =  char_space[0] < ch_r ? -1 : +1 ;
!         goto done;
!         }
!       index += stride;
        }
      }
!   else
      {
!     // This is a big-endian encoding, so we can just look at the bytes in
!     // order.
!     while( index < length )
        {
!       uint8_t ch_l;
!       uint8_t ch_r;
!       ch_l =  left[index];
!       ch_r = right[index];
!       if( ch_l != ch_r )
          {
!         *result =  ch_l < ch_r ? -1 : +1 ;
          goto done;
          }
        index += 1;
        }
+     // Arriving here means the common parts of the strings are the same, and so
+     // we have to compare the longer against spaces
+     while( index < length_left )
+       {
+       uint8_t ch_l;
+       ch_l = left[index++];
+       if( ch_l != char_space[0] )
+         {
+         *result =  ch_l < char_space[0] ? -1 : +1 ;
+         goto done;
+         }
+       ch_l = left[index++];
+       if( ch_l != char_space[1] )
+         {
+         *result =  ch_l < char_space[1] ? -1 : +1 ;
+         goto done;
+         }
+       if( ch_l != char_space[2] )
+         {
+         *result =  ch_l < char_space[2] ? -1 : +1 ;
+         goto done;
+         }
+       if( ch_l != char_space[3] )
+         {
+         *result =  ch_l < char_space[3] ? -1 : +1 ;
+         goto done;
+         }
+       }
      while( index < length_right )
        {
!       uint8_t ch_r;
!       ch_r = right[index++];
!       if( char_space[0] != ch_r )
          {
!         *result =  char_space[0] < ch_r ? -1 : +1 ;
          goto done;
          }
!       ch_r = right[index];
!       if( char_space[1] != ch_r )
!         {
!         *result =  char_space[1] < ch_r ? -1 : +1 ;
!         goto done;
!         }
!       if( char_space[2] != ch_r )
!         {
!         *result =  char_space[2] < ch_r ? -1 : +1 ;
!         goto done;
!         }
!       if( char_space[3] != ch_r )
!         {
!         *result =  char_space[3] < ch_r ? -1 : +1 ;
!         goto done;
!         }
!       index += stride;
        }
      }
    done:
*************** __gg_compare_string_different(int
*** 13060,13075 ****
    /*  This routine converts the right string to the left encoding, and then
        compares the results.  In the case where the left side is the
        __gg__display_encoding, the `collated` table is used. */
!   charmap_t *charmap = __gg__get_charmap(encoding_left);
    int stride = charmap->stride();
!   cbl_char_t space = charmap->mapped_character(ascii_space);
    size_t nbytes;
!   const unsigned char *converted = reinterpret_cast<unsigned char *>(
!                                     __gg__iconverter(encoding_right,
!                                                      encoding_left,
!                                                      right,
!                                                      length_right,
!                                                      &nbytes));
    switch(stride)
      {
      case 1:
--- 13887,13909 ----
    /*  This routine converts the right string to the left encoding, and then
        compares the results.  In the case where the left side is the
        __gg__display_encoding, the `collated` table is used. */
!   const charmap_t *charmap = __gg__get_charmap(encoding_left);
    int stride = charmap->stride();
!   unsigned char ach_space[4];
!   char ch = ascii_space;
    size_t nbytes;
!   char *converted;
!   converted = __gg__iconverter(DEFAULT_SOURCE_ENCODING,
!                                encoding_left,
!                                &ch,
!                                1,
!                                &nbytes);
!   memcpy(ach_space, converted, nbytes);
!   converted = __gg__iconverter(encoding_right,
!                                encoding_left,
!                                right,
!                                length_right,
!                               &nbytes);
    switch(stride)
      {
      case 1:
*************** __gg_compare_string_different(int
*** 13077,13107 ****
        __gg__compare_string_1a( result,
                                 left,
                                 length_left,
!                                converted,
                                 nbytes,
!                                space);
        break;
        }
  
      case 2:
        {
        __gg__compare_string_2(result,
!                              reinterpret_cast<const unsigned short *>(left),
                               length_left,
!                              reinterpret_cast<const unsigned short *>(converted),
                               nbytes,
!                              space);
        break;
        }
  
      case 4:
        {
        __gg__compare_string_4(result,
!                              reinterpret_cast<const unsigned long *>(left),
                               length_left,
!                              reinterpret_cast<const unsigned long *>(converted),
                               nbytes,
!                              space);
        break;
        }
      }
--- 13911,13941 ----
        __gg__compare_string_1a( result,
                                 left,
                                 length_left,
!                                as_unsigned_chars(converted),
                                 nbytes,
!                                NULL);
        break;
        }
  
      case 2:
        {
        __gg__compare_string_2(result,
!                              left,
                               length_left,
!                              as_unsigned_chars(converted),
                               nbytes,
!                              ach_space);
        break;
        }
  
      case 4:
        {
        __gg__compare_string_4(result,
!                              left,
                               length_left,
!                              as_unsigned_chars(converted),
                               nbytes,
!                              ach_space);
        break;
        }
      }
*************** __gg__compare_numeric_all(int *result,
*** 13118,13124 ****
                            cbl_encoding_t encoding )
    {
    char ach[128];
!   unsigned char *pach = reinterpret_cast<unsigned char *>(ach);
    if( digits == 0 )
      {
      // Go for maximum length:
--- 13952,13958 ----
                            cbl_encoding_t encoding )
    {
    char ach[128];
!   unsigned char *pach = as_unsigned_chars(ach);
    if( digits == 0 )
      {
      // Go for maximum length:
*************** __gg__compare_binary_to_string( int *res
*** 13180,13186 ****
                                  cbl_encoding_t encoding)
    {
    char ach[128];
!   unsigned char *pach = reinterpret_cast<unsigned char *>(ach);
    if( digits == 0 )
      {
      // Go for maximum length:
--- 14014,14020 ----
                                  cbl_encoding_t encoding)
    {
    char ach[128];
!   unsigned char *pach = as_unsigned_chars(ach);
    if( digits == 0 )
      {
      // Go for maximum length:
*************** __gg__compare_binary_to_string( int *res
*** 13202,13211 ****
      }
    // ach is digits characters in DEFAULT_SOURCE_ENCODING.
    // we need to convert the ascii numeric string to the right-side encoding
!   charmap_t *charmap = __gg__get_charmap(encoding);
!   cbl_char_t space = charmap->mapped_character(ascii_space);
    size_t nbytes;
!   char *converted = __gg__iconverter( DEFAULT_SOURCE_ENCODING,
                                        encoding ,
                                        ach,
                                        digits,
--- 14036,14053 ----
      }
    // ach is digits characters in DEFAULT_SOURCE_ENCODING.
    // we need to convert the ascii numeric string to the right-side encoding
!   const charmap_t *charmap = __gg__get_charmap(encoding);
!   unsigned char ach_space[4];
!   char ch = ascii_space;
    size_t nbytes;
!   char *converted;
!   converted = __gg__iconverter(DEFAULT_SOURCE_ENCODING,
!                                encoding,
!                                &ch,
!                                1,
!                                &nbytes);
!   memcpy(ach_space, converted, nbytes);
!   converted = __gg__iconverter( DEFAULT_SOURCE_ENCODING,
                                        encoding ,
                                        ach,
                                        digits,
*************** __gg__compare_binary_to_string( int *res
*** 13214,13240 ****
      {
      case 1:
        __gg__compare_string_1(result,
!                              reinterpret_cast<unsigned char *>(converted),
                               nbytes,
!                              reinterpret_cast<unsigned char *>(right),
                               length,
!                              space);
        break;
      case 2:
        __gg__compare_string_2(result,
!                              reinterpret_cast<unsigned short *>(converted),
                               nbytes,
!                              reinterpret_cast<unsigned short *>(right),
                               length,
!                              space);
        break;
      case 4:
        __gg__compare_string_4(result,
!                              reinterpret_cast<unsigned long *>(converted),
                               nbytes,
!                              reinterpret_cast<unsigned long *>(right),
                               length,
!                              space);
        break;
      }
    return;
--- 14056,14082 ----
      {
      case 1:
        __gg__compare_string_1(result,
!                              as_unsigned_chars(converted),
                               nbytes,
!                              as_unsigned_chars(right),
                               length,
!                              ach_space);
        break;
      case 2:
        __gg__compare_string_2(result,
!                              as_unsigned_chars(converted),
                               nbytes,
!                              as_unsigned_chars(right),
                               length,
!                              ach_space);
        break;
      case 4:
        __gg__compare_string_4(result,
!                              as_unsigned_chars(converted),
                               nbytes,
!                              as_unsigned_chars(right),
                               length,
!                              ach_space);
        break;
      }
    return;
diff -Nrcpad gcc-17-20260705/libgcobol/libgcobol.h gcc-17-20260712/libgcobol/libgcobol.h
*** gcc-17-20260705/libgcobol/libgcobol.h	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/libgcobol/libgcobol.h	Sun Jul 12 22:32:18 2026
***************
*** 39,66 ****
      Some are also called between source code modules in libgcobol, hence the
      need here for declarations. */
  
- // The runtime might be on a little-endian machine, and it might be on a
- // big-endian machine, most notably the IBM S390 series.
- 
- #if defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
- # define COBOL_BIG_ENDIAN 1
- # define COBOL_LITTLE_ENDIAN 0
- #elif defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
- # define COBOL_BIG_ENDIAN 0
- # define COBOL_LITTLE_ENDIAN 1
- 
- #elif defined(__BIG_ENDIAN__) || defined(_BIG_ENDIAN)
- # define COBOL_BIG_ENDIAN 1
- # define COBOL_LITTLE_ENDIAN 0
- #elif defined(__LITTLE_ENDIAN__) || defined(_LITTLE_ENDIAN)
- # define COBOL_BIG_ENDIAN 0
- # define COBOL_LITTLE_ENDIAN 1
- 
- //#else
- cppcheck-suppress preprocessorErrorDirective
- # error "Unknown byte order" 
- #endif
- 
  extern void __gg__mabort();
  
  // The unnecessary abort() that follows is necessary to make cppcheck be
--- 39,44 ----
diff -Nrcpad gcc-17-20260705/libgcobol/stringbin.cc gcc-17-20260712/libgcobol/stringbin.cc
*** gcc-17-20260705/libgcobol/stringbin.cc	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/libgcobol/stringbin.cc	Sun Jul 12 22:32:18 2026
***************
*** 62,67 ****
--- 62,68 ----
  #include "common-defs.h"
  #include "io.h"
  #include "gcobolio.h"
+ #include "cobol-endian.h"
  #include "libgcobol.h"
  #include "gfileio.h"
  #include "charmaps.h"
*************** __gg__binary_to_string_encoded( char *re
*** 351,361 ****
      char *p = combined_string;
      const char *pend = p + digits;
      char *d = result;
!     while(p < pend)
        {
!       *d++ = *p++;
!       memset(d, 0, stride-1);
!       d += stride-1;
        }
      }
    return retval;
--- 352,378 ----
      char *p = combined_string;
      const char *pend = p + digits;
      char *d = result;
! 
!     /* We take advantage of knowing that every character in combined_string
!        becomes just the low byte of a little-endian int16 or 32, and the high
!        byte of a big-endian.  */
!     if( charmap->is_big_endian() )
        {
!       while(p < pend)
!         {
!         memset(d, 0, stride-1);
!         d += stride-1;
!         *d++ = *p++;
!         }
!       }
!     else
!       {
!       while(p < pend)
!         {
!         *d++ = *p++;
!         memset(d, 0, stride-1);
!         d += stride-1;
!         }
        }
      }
    return retval;
*************** __gg__binary_to_packed( unsigned char *r
*** 444,523 ****
    memcpy(result, combined_string, length);
    }
  
- 
- #define digit_rt(loc, offset) (((loc)[(offset) * stride]) & 0x0F)
- 
- static __int128
- num_disp_dive_rt(const unsigned char *pdigits,
-                     int            ndigits,
-                     int            stride)
-   {
-   __int128 retval;
-   switch(ndigits)
-     {
-     case 1:
-       retval =  digit_rt(pdigits, 0);
-       break;
-     case 2:
-       retval =  digit_rt(pdigits, 0)*10
-               + digit_rt(pdigits, 1);
-       break;
-     case 3:
-       retval =  digit_rt(pdigits, 0)*100
-               + digit_rt(pdigits, 1)*10
-               + digit_rt(pdigits, 2);
-       break;
-     case 4:
-       retval =  digit_rt(pdigits, 0)*1000
-               + digit_rt(pdigits, 1)*100
-               + digit_rt(pdigits, 2)*10
-               + digit_rt(pdigits, 3);
-       break;
-     default:
-       {
-       int nright = ndigits/2;
-       int nleft  = ndigits - nright;
-       __int128 pot = __gg__power_of_ten(nright);
-       retval =   num_disp_dive_rt(pdigits,               nleft, stride) * pot
-                + num_disp_dive_rt(pdigits+nleft*stride, nright, stride);
-       break;
-       }
-     }
-   return retval;
-   }
- 
- extern "C"
- __int128
- __gg__numeric_display_to_binary(const unsigned char *signp,
-                                 const unsigned char *pdigits,
-                                       int            ndigits,
-                                       int            stride)
-   {
-   __int128 retval;
- 
-   retval = num_disp_dive_rt(pdigits, ndigits, stride);
- 
-   // For speed, we assume this value is well-formed:
-   if( *signp == ascii_minus )
-     {
-     retval = -retval;
-     }
-   else
-     {
-     unsigned int sbyte = *signp & 0xF0;
-     switch(sbyte)
-       {
-       case 0x60: // EBCDIC '-' is 0x60, and no other 0x6z characters matter.
-       case 0x70: // ASCII internal negative
-       case 0xD0: // EBDIC internal negative
-         retval = -retval;
-       break;
-       }
-     }
- 
-   return retval;
-   }
- 
  const unsigned char __gg__dp2bin[256] =
    {
    // This table is used both by the compile-time and the run-time.  Given the
--- 461,466 ----
diff -Nrcpad gcc-17-20260705/libgcobol/stringbin.h gcc-17-20260712/libgcobol/stringbin.h
*** gcc-17-20260705/libgcobol/stringbin.h	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/libgcobol/stringbin.h	Sun Jul 12 22:32:18 2026
*************** void __gg__binary_to_packed( unsigned ch
*** 48,59 ****
                               __int128 value);
  
  extern "C"
- __int128 __gg__numeric_display_to_binary(const unsigned char *sign_byte,
-                                          const unsigned char *digits,
-                                                int ndigits,
-                                                int    stride);
- 
- extern "C"
  __int128
  __gg__packed_to_binary(const unsigned char *psz,
                               int            nplaces);
--- 48,53 ----
diff -Nrcpad gcc-17-20260705/libgcobol/valconv.cc gcc-17-20260712/libgcobol/valconv.cc
*** gcc-17-20260705/libgcobol/valconv.cc	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/libgcobol/valconv.cc	Sun Jul 12 22:32:18 2026
***************
*** 37,48 ****
  #include <unordered_map>
  #include <vector>
  
  #include "ec.h"
  #include "common-defs.h"
  #include "valconv.h"
  #include "charmaps.h"
- 
  #include "exceptl.h"
  
  std::unordered_map<size_t, alphabet_state> __gg__alphabet_states;
  
--- 37,74 ----
  #include <unordered_map>
  #include <vector>
  
+ #if defined(IN_GCC_FRONTEND)
+ #include "cobol-system.h"
+ #include "coretypes.h"
+ #include "tree.h"
+ #include "tree-iterator.h"
+ #include "stringpool.h"
+ #include "diagnostic-core.h"
+ #include "target.h"
+ #include "tm.h"
+ #include "../../libgcobol/ec.h"
+ #include "../../libgcobol/common-defs.h"
+ #include "../../libgcobol/valconv.h"
+ #include "../../libgcobol/cobol-endian.h"
+ #include "../../libgcobol/charmaps.h"
+ #include "../../libgcobol/exceptl.h"
+ #else
  #include "ec.h"
  #include "common-defs.h"
  #include "valconv.h"
+ #include "cobol-endian.h"
  #include "charmaps.h"
  #include "exceptl.h"
+ static char
+ TOUPPER(char ch)
+   {
+   if(ch >= 'a' && ch <= 'z' )
+     {
+     return 'A' + ch - 'a';
+     }
+   return ch;
+   }
+ #endif
  
  std::unordered_map<size_t, alphabet_state> __gg__alphabet_states;
  
*************** __gg__realloc_if_necessary(char **dest,
*** 60,66 ****
--- 86,96 ----
      new_size |= new_size>>16;
      new_size |= (new_size>>16)>>16;
      *dest_size = new_size + 1;
+ #if defined(IN_GCC_FRONTEND)
+     *dest = static_cast<char *>(xrealloc(*dest, *dest_size));
+ #else
      *dest = static_cast<char *>(realloc(*dest, *dest_size));
+ #endif
      }
    }
  
*************** __gg__string_to_numeric_edited( char * c
*** 253,260 ****
    if( dlength >= 2 )
      {
      // It's a positive number, so we might have to get rid of a CR or DB:
!     char ch1 = toupper((unsigned char)dest[dlength-2]);
!     char ch2 = toupper((unsigned char)dest[dlength-1]);
      if(     (ch1 == ascii_D && ch2 == ascii_B)
              ||  (ch1 == ascii_C && ch2 == ascii_R) )
        {
--- 283,290 ----
    if( dlength >= 2 )
      {
      // It's a positive number, so we might have to get rid of a CR or DB:
!     char ch1 = TOUPPER((unsigned char)dest[dlength-2]);
!     char ch2 = TOUPPER((unsigned char)dest[dlength-1]);
      if(     (ch1 == ascii_D && ch2 == ascii_B)
              ||  (ch1 == ascii_C && ch2 == ascii_R) )
        {
diff -Nrcpad gcc-17-20260705/libgfortran/ChangeLog gcc-17-20260712/libgfortran/ChangeLog
*** gcc-17-20260705/libgfortran/ChangeLog	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/libgfortran/ChangeLog	Sun Jul 12 22:32:18 2026
***************
*** 1,3 ****
--- 1,29 ----
+ 2026-07-08  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	PR libfortran/126116
+ 	* io/io.h (struct gfc_unit): Add bool for tracking.
+ 	Fix some white space problems.
+ 	* io/unit.c (close_unit_1): Add a declaration for this
+ 	function so it can be called before it has been defined.
+ 	Use the new bool.
+ 	(is_internal_reserved): New helper function. Returns true
+ 	only if the unit is not null and the internal unit kind is zero
+ 	meaning its not a character string.
+ 	(find_unit): Use the new helper function
+ 	(find_or_create_unit): Use the new helper.
+ 	(get_unit): Set the new bool.
+ 	(close_unit): Update the close_unit_1 argument list.
+ 	(close_units): Likewise.
+ 
+ 2026-07-06  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/121366
+ 	* Makefile.am: Add dependency on wrappers to degree trigonometric
+ 	functions.
+ 	* Makefile.in: Regenerate.
+ 	* gfortran.map: Add references to new wrapper functions.
+ 	* intrinsics/trigd_specific.F90: New file.
+ 
  2026-07-01  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
  
  	* configure: Regenerate.
diff -Nrcpad gcc-17-20260705/libgfortran/Makefile.am gcc-17-20260712/libgfortran/Makefile.am
*** gcc-17-20260705/libgfortran/Makefile.am	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/libgfortran/Makefile.am	Sun Jul 12 22:32:18 2026
*************** generated/_mod_r17.F90 \
*** 1067,1073 ****
  generated/misc_specifics.F90 \
  intrinsics/dprod_r8.f90 \
  intrinsics/f2c_specifics.F90 \
! intrinsics/random_init.f90
  
  # Turn on vectorization and loop unrolling for matmul.
  $(patsubst %.c,%.lo,$(i_matmul_c)): AM_CFLAGS += -ffast-math -ftree-vectorize -funroll-loops --param max-unroll-times=4
--- 1067,1074 ----
  generated/misc_specifics.F90 \
  intrinsics/dprod_r8.f90 \
  intrinsics/f2c_specifics.F90 \
! intrinsics/random_init.f90 \
! intrinsics/trigd_specific.F90
  
  # Turn on vectorization and loop unrolling for matmul.
  $(patsubst %.c,%.lo,$(i_matmul_c)): AM_CFLAGS += -ffast-math -ftree-vectorize -funroll-loops --param max-unroll-times=4
diff -Nrcpad gcc-17-20260705/libgfortran/Makefile.in gcc-17-20260712/libgfortran/Makefile.in
*** gcc-17-20260705/libgfortran/Makefile.in	Sun Jul  5 22:32:22 2026
--- gcc-17-20260712/libgfortran/Makefile.in	Sun Jul 12 22:32:22 2026
*************** am__objects_17 = generated/_abs_c4.lo ge
*** 701,707 ****
  	generated/_mod_r10.lo generated/_mod_r16.lo \
  	generated/_mod_r17.lo generated/misc_specifics.lo \
  	intrinsics/dprod_r8.lo intrinsics/f2c_specifics.lo \
! 	intrinsics/random_init.lo
  am_libgfortran_la_OBJECTS = $(am__objects_5) $(am__objects_9) \
  	$(am__objects_11) $(am__objects_14) $(am__objects_15) \
  	$(am__objects_16) $(am__objects_17)
--- 701,707 ----
  	generated/_mod_r10.lo generated/_mod_r16.lo \
  	generated/_mod_r17.lo generated/misc_specifics.lo \
  	intrinsics/dprod_r8.lo intrinsics/f2c_specifics.lo \
! 	intrinsics/random_init.lo intrinsics/trigd_specific.lo
  am_libgfortran_la_OBJECTS = $(am__objects_5) $(am__objects_9) \
  	$(am__objects_11) $(am__objects_14) $(am__objects_15) \
  	$(am__objects_16) $(am__objects_17)
*************** generated/_mod_r17.F90 \
*** 1865,1871 ****
  generated/misc_specifics.F90 \
  intrinsics/dprod_r8.f90 \
  intrinsics/f2c_specifics.F90 \
! intrinsics/random_init.f90
  
  BUILT_SOURCES = $(gfor_built_src)
  libgfortran_la_SOURCES = $(gfor_src) $(gfor_built_src) $(gfor_io_src) \
--- 1865,1872 ----
  generated/misc_specifics.F90 \
  intrinsics/dprod_r8.f90 \
  intrinsics/f2c_specifics.F90 \
! intrinsics/random_init.f90 \
! intrinsics/trigd_specific.F90
  
  BUILT_SOURCES = $(gfor_built_src)
  libgfortran_la_SOURCES = $(gfor_src) $(gfor_built_src) $(gfor_io_src) \
*************** intrinsics/f2c_specifics.lo: intrinsics/
*** 3845,3850 ****
--- 3846,3853 ----
  	intrinsics/$(DEPDIR)/$(am__dirstamp)
  intrinsics/random_init.lo: intrinsics/$(am__dirstamp) \
  	intrinsics/$(DEPDIR)/$(am__dirstamp)
+ intrinsics/trigd_specific.lo: intrinsics/$(am__dirstamp) \
+ 	intrinsics/$(DEPDIR)/$(am__dirstamp)
  
  libgfortran.la: $(libgfortran_la_OBJECTS) $(libgfortran_la_DEPENDENCIES) $(EXTRA_libgfortran_la_DEPENDENCIES) 
  	$(AM_V_GEN)$(libgfortran_la_LINK) -rpath $(toolexeclibdir) $(libgfortran_la_OBJECTS) $(libgfortran_la_LIBADD) $(LIBS)
diff -Nrcpad gcc-17-20260705/libgfortran/gfortran.map gcc-17-20260712/libgfortran/gfortran.map
*** gcc-17-20260705/libgfortran/gfortran.map	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/libgfortran/gfortran.map	Sun Jul 12 22:32:18 2026
*************** GFORTRAN_16 {
*** 2039,2041 ****
--- 2039,2080 ----
      _gfortran_string_split_char4;
      _gfortran_cfi_deep_copy_array;
  } GFORTRAN_15.2;
+ 
+ GFORTRAN_17 {
+   global:
+     _gfortran_specific__acosd_r10;
+     _gfortran_specific__acosd_r16;
+     _gfortran_specific__acosd_r17;
+     _gfortran_specific__acosd_r4;
+     _gfortran_specific__acosd_r8;
+     _gfortran_specific__asind_r10;
+     _gfortran_specific__asind_r16;
+     _gfortran_specific__asind_r17;
+     _gfortran_specific__asind_r4;
+     _gfortran_specific__asind_r8;
+     _gfortran_specific__atan2d_r10;
+     _gfortran_specific__atan2d_r16;
+     _gfortran_specific__atan2d_r17;
+     _gfortran_specific__atan2d_r4;
+     _gfortran_specific__atan2d_r8;
+     _gfortran_specific__atand_r10;
+     _gfortran_specific__atand_r16;
+     _gfortran_specific__atand_r17;
+     _gfortran_specific__atand_r4;
+     _gfortran_specific__atand_r8;
+     _gfortran_specific__cosd_r10;
+     _gfortran_specific__cosd_r16;
+     _gfortran_specific__cosd_r17;
+     _gfortran_specific__cosd_r4;
+     _gfortran_specific__cosd_r8;
+     _gfortran_specific__sind_r10;
+     _gfortran_specific__sind_r16;
+     _gfortran_specific__sind_r17;
+     _gfortran_specific__sind_r4;
+     _gfortran_specific__sind_r8;
+     _gfortran_specific__tand_r10;
+     _gfortran_specific__tand_r16;
+     _gfortran_specific__tand_r17;
+     _gfortran_specific__tand_r4;
+     _gfortran_specific__tand_r8;
+ } GFORTRAN_16;
diff -Nrcpad gcc-17-20260705/libgfortran/intrinsics/trigd_specific.F90 gcc-17-20260712/libgfortran/intrinsics/trigd_specific.F90
*** gcc-17-20260705/libgfortran/intrinsics/trigd_specific.F90	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/libgfortran/intrinsics/trigd_specific.F90	Sun Jul 12 22:32:18 2026
***************
*** 0 ****
--- 1,298 ----
+ !   Fortran wrappers of the degree trigonometric functions COSD, SIND, TAND
+ !   and their inverses ACOSD, ASIND, ATAND.
+ !   Copyright (C) 2026 Free Software Foundation, Inc.
+ !
+ !This file is part of the GNU Fortran runtime library (libgfortran).
+ !
+ !GNU libgfortran is free software; you can redistribute it and/or
+ !modify it under the terms of the GNU General Public
+ !License as published by the Free Software Foundation; either
+ !version 3 of the License, or (at your option) any later version.
+ 
+ !GNU libgfortran is distributed in the hope that it will be useful,
+ !but WITHOUT ANY WARRANTY; without even the implied warranty of
+ !MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ !GNU General Public License for more details.
+ !
+ !Under Section 7 of GPL version 3, you are granted additional
+ !permissions described in the GCC Runtime Library Exception, version
+ !3.1, as published by the Free Software Foundation.
+ !
+ !You should have received a copy of the GNU General Public License and
+ !a copy of the GCC Runtime Library Exception along with this program;
+ !see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+ !<http://www.gnu.org/licenses/>.
+ 
+ 
+ #include "config.h"
+ #include "kinds.inc"
+ 
+ 
+ #if defined (HAVE_GFC_REAL_4)
+ 
+ elemental function _gfortran_specific__acosd_r4 (parm)
+    real (kind=4), intent (in) :: parm
+    real (kind=4) :: _gfortran_specific__acosd_r4
+ 
+    _gfortran_specific__acosd_r4 = acosd (parm)
+ end function
+ 
+ elemental function _gfortran_specific__asind_r4 (parm)
+    real (kind=4), intent (in) :: parm
+    real (kind=4) :: _gfortran_specific__asind_r4
+ 
+    _gfortran_specific__asind_r4 = asind (parm)
+ end function
+ 
+ elemental function _gfortran_specific__atan2d_r4 (y, x)
+    real (kind=4), intent (in) :: y, x
+    real (kind=4) :: _gfortran_specific__atan2d_r4
+ 
+    _gfortran_specific__atan2d_r4 = atan2d (y, x)
+ end function
+ 
+ elemental function _gfortran_specific__atand_r4 (parm)
+    real (kind=4), intent (in) :: parm
+    real (kind=4) :: _gfortran_specific__atand_r4
+ 
+    _gfortran_specific__atand_r4 = atand (parm)
+ end function
+ 
+ elemental function _gfortran_specific__cosd_r4 (parm)
+    real (kind=4), intent (in) :: parm
+    real (kind=4) :: _gfortran_specific__cosd_r4
+ 
+    _gfortran_specific__cosd_r4 = cosd (parm)
+ end function
+ 
+ elemental function _gfortran_specific__sind_r4 (parm)
+    real (kind=4), intent (in) :: parm
+    real (kind=4) :: _gfortran_specific__sind_r4
+ 
+    _gfortran_specific__sind_r4 = sind (parm)
+ end function
+ 
+ elemental function _gfortran_specific__tand_r4 (parm)
+    real (kind=4), intent (in) :: parm
+    real (kind=4) :: _gfortran_specific__tand_r4
+ 
+    _gfortran_specific__tand_r4 = tand (parm)
+ end function
+ 
+ #endif
+ 
+ 
+ #if defined (HAVE_GFC_REAL_8)
+ 
+ elemental function _gfortran_specific__acosd_r8 (parm)
+    real (kind=8), intent (in) :: parm
+    real (kind=8) :: _gfortran_specific__acosd_r8
+ 
+    _gfortran_specific__acosd_r8 = acosd (parm)
+ end function
+ 
+ elemental function _gfortran_specific__asind_r8 (parm)
+    real (kind=8), intent (in) :: parm
+    real (kind=8) :: _gfortran_specific__asind_r8
+ 
+    _gfortran_specific__asind_r8 = asind (parm)
+ end function
+ 
+ elemental function _gfortran_specific__atan2d_r8 (y, x)
+    real (kind=8), intent (in) :: y, x
+    real (kind=8) :: _gfortran_specific__atan2d_r8
+ 
+    _gfortran_specific__atan2d_r8 = atan2d (y, x)
+ end function
+ 
+ elemental function _gfortran_specific__atand_r8 (parm)
+    real (kind=8), intent (in) :: parm
+    real (kind=8) :: _gfortran_specific__atand_r8
+ 
+    _gfortran_specific__atand_r8 = atand (parm)
+ end function
+ 
+ elemental function _gfortran_specific__cosd_r8 (parm)
+    real (kind=8), intent (in) :: parm
+    real (kind=8) :: _gfortran_specific__cosd_r8
+ 
+    _gfortran_specific__cosd_r8 = cosd (parm)
+ end function
+ 
+ elemental function _gfortran_specific__sind_r8 (parm)
+    real (kind=8), intent (in) :: parm
+    real (kind=8) :: _gfortran_specific__sind_r8
+ 
+    _gfortran_specific__sind_r8 = sind (parm)
+ end function
+ 
+ elemental function _gfortran_specific__tand_r8 (parm)
+    real (kind=8), intent (in) :: parm
+    real (kind=8) :: _gfortran_specific__tand_r8
+ 
+    _gfortran_specific__tand_r8 = tand (parm)
+ end function
+ 
+ #endif
+ 
+ 
+ #if defined (HAVE_GFC_REAL_10)
+ 
+ elemental function _gfortran_specific__acosd_r10 (parm)
+    real (kind=10), intent (in) :: parm
+    real (kind=10) :: _gfortran_specific__acosd_r10
+ 
+    _gfortran_specific__acosd_r10 = acosd (parm)
+ end function
+ 
+ elemental function _gfortran_specific__asind_r10 (parm)
+    real (kind=10), intent (in) :: parm
+    real (kind=10) :: _gfortran_specific__asind_r10
+ 
+    _gfortran_specific__asind_r10 = asind (parm)
+ end function
+ 
+ elemental function _gfortran_specific__atan2d_r10 (y, x)
+    real (kind=10), intent (in) :: y, x
+    real (kind=10) :: _gfortran_specific__atan2d_r10
+ 
+    _gfortran_specific__atan2d_r10 = atan2d (y, x)
+ end function
+ 
+ elemental function _gfortran_specific__atand_r10 (parm)
+    real (kind=10), intent (in) :: parm
+    real (kind=10) :: _gfortran_specific__atand_r10
+ 
+    _gfortran_specific__atand_r10 = atand (parm)
+ end function
+ 
+ elemental function _gfortran_specific__cosd_r10 (parm)
+    real (kind=10), intent (in) :: parm
+    real (kind=10) :: _gfortran_specific__cosd_r10
+ 
+    _gfortran_specific__cosd_r10 = cosd (parm)
+ end function
+ 
+ elemental function _gfortran_specific__sind_r10 (parm)
+    real (kind=10), intent (in) :: parm
+    real (kind=10) :: _gfortran_specific__sind_r10
+ 
+    _gfortran_specific__sind_r10 = sind (parm)
+ end function
+ 
+ elemental function _gfortran_specific__tand_r10 (parm)
+    real (kind=10), intent (in) :: parm
+    real (kind=10) :: _gfortran_specific__tand_r10
+ 
+    _gfortran_specific__tand_r10 = tand (parm)
+ end function
+ 
+ #endif
+ 
+ 
+ #if defined (HAVE_GFC_REAL_16)
+ 
+ elemental function _gfortran_specific__acosd_r16 (parm)
+    real (kind=16), intent (in) :: parm
+    real (kind=16) :: _gfortran_specific__acosd_r16
+ 
+    _gfortran_specific__acosd_r16 = acosd (parm)
+ end function
+ 
+ elemental function _gfortran_specific__asind_r16 (parm)
+    real (kind=16), intent (in) :: parm
+    real (kind=16) :: _gfortran_specific__asind_r16
+ 
+    _gfortran_specific__asind_r16 = asind (parm)
+ end function
+ 
+ elemental function _gfortran_specific__atan2d_r16 (y, x)
+    real (kind=16), intent (in) :: y, x
+    real (kind=16) :: _gfortran_specific__atan2d_r16
+ 
+    _gfortran_specific__atan2d_r16 = atan2d (y, x)
+ end function
+ 
+ elemental function _gfortran_specific__atand_r16 (parm)
+    real (kind=16), intent (in) :: parm
+    real (kind=16) :: _gfortran_specific__atand_r16
+ 
+    _gfortran_specific__atand_r16 = atand (parm)
+ end function
+ 
+ elemental function _gfortran_specific__cosd_r16 (parm)
+    real (kind=16), intent (in) :: parm
+    real (kind=16) :: _gfortran_specific__cosd_r16
+ 
+    _gfortran_specific__cosd_r16 = cosd (parm)
+ end function
+ 
+ elemental function _gfortran_specific__sind_r16 (parm)
+    real (kind=16), intent (in) :: parm
+    real (kind=16) :: _gfortran_specific__sind_r16
+ 
+    _gfortran_specific__sind_r16 = sind (parm)
+ end function
+ 
+ elemental function _gfortran_specific__tand_r16 (parm)
+    real (kind=16), intent (in) :: parm
+    real (kind=16) :: _gfortran_specific__tand_r16
+ 
+    _gfortran_specific__tand_r16 = tand (parm)
+ end function
+ 
+ #endif
+ 
+ 
+ #if defined (HAVE_GFC_REAL_17)
+ 
+ elemental function _gfortran_specific__acosd_r17 (parm)
+    real (kind=16), intent (in) :: parm
+    real (kind=16) :: _gfortran_specific__acosd_r17
+ 
+    _gfortran_specific__acosd_r17 = acosd (parm)
+ end function
+ 
+ elemental function _gfortran_specific__asind_r17 (parm)
+    real (kind=16), intent (in) :: parm
+    real (kind=16) :: _gfortran_specific__asind_r17
+ 
+    _gfortran_specific__asind_r17 = asind (parm)
+ end function
+ 
+ elemental function _gfortran_specific__atan2d_r17 (y, x)
+    real (kind=16), intent (in) :: y, x
+    real (kind=16) :: _gfortran_specific__atan2d_r17
+ 
+    _gfortran_specific__atan2d_r17 = atan2d (y, x)
+ end function
+ 
+ elemental function _gfortran_specific__atand_r17 (parm)
+    real (kind=16), intent (in) :: parm
+    real (kind=16) :: _gfortran_specific__atand_r17
+ 
+    _gfortran_specific__atand_r17 = atand (parm)
+ end function
+ 
+ elemental function _gfortran_specific__cosd_r17 (parm)
+    real (kind=16), intent (in) :: parm
+    real (kind=16) :: _gfortran_specific__cosd_r17
+ 
+    _gfortran_specific__cosd_r17 = cosd (parm)
+ end function
+ 
+ elemental function _gfortran_specific__sind_r17 (parm)
+    real (kind=16), intent (in) :: parm
+    real (kind=16) :: _gfortran_specific__sind_r17
+ 
+    _gfortran_specific__sind_r17 = sind (parm)
+ end function
+ 
+ elemental function _gfortran_specific__tand_r17 (parm)
+    real (kind=16), intent (in) :: parm
+    real (kind=16) :: _gfortran_specific__tand_r17
+ 
+    _gfortran_specific__tand_r17 = tand (parm)
+ end function
+ 
+ #endif
diff -Nrcpad gcc-17-20260705/libgfortran/io/io.h gcc-17-20260712/libgfortran/io/io.h
*** gcc-17-20260705/libgfortran/io/io.h	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/libgfortran/io/io.h	Sun Jul 12 22:32:18 2026
*************** typedef struct st_parameter_dt
*** 535,541 ****
  	     character string is being read so don't use commas to shorten a
  	     formatted field width.  */
  	  unsigned sf_read_comma : 1;
! 	  /* A namelist specific flag used to enable reading input from 
  	     line_buffer for logical reads.  */
  	  unsigned line_buffer_enabled : 1;
  	  /* An internal unit specific flag used to identify that the associated
--- 535,541 ----
  	     character string is being read so don't use commas to shorten a
  	     formatted field width.  */
  	  unsigned sf_read_comma : 1;
! 	  /* A namelist specific flag used to enable reading input from
  	     line_buffer for logical reads.  */
  	  unsigned line_buffer_enabled : 1;
  	  /* An internal unit specific flag used to identify that the associated
*************** typedef struct gfc_unit
*** 649,655 ****
  {
    int unit_number;
    stream *s;
!   
    /* Treap links.  */
    struct gfc_unit *left, *right;
    int priority;
--- 649,655 ----
  {
    int unit_number;
    stream *s;
! 
    /* Treap links.  */
    struct gfc_unit *left, *right;
    int priority;
*************** typedef struct gfc_unit
*** 709,718 ****
  
    /* The format hash table.  */
    struct format_hash_entry format_hash_table[FORMAT_HASH_SIZE];
!   
    /* Formatting buffer.  */
    struct fbuf *fbuf;
!   
    /* Function pointer, points to list_read worker functions.  */
    int (*next_char_fn_ptr) (st_parameter_dt *);
    void (*push_char_fn_ptr) (st_parameter_dt *, int);
--- 709,718 ----
  
    /* The format hash table.  */
    struct format_hash_entry format_hash_table[FORMAT_HASH_SIZE];
! 
    /* Formatting buffer.  */
    struct fbuf *fbuf;
! 
    /* Function pointer, points to list_read worker functions.  */
    int (*next_char_fn_ptr) (st_parameter_dt *);
    void (*push_char_fn_ptr) (st_parameter_dt *, int);
*************** typedef struct gfc_unit
*** 723,728 ****
--- 723,731 ----
    gfc_array_char *string_unit_desc;
    int internal_unit_kind;
  
+   /* Track when a gfc_unit is reserved for an internal unit.  */
+   bool internal_reserved;
+ 
    /* DTIO Parent/Child procedure, 0 = parent, >0 = child level.  */
    int child_dtio;
  
*************** predec_waiting_locked (gfc_unit *u)
*** 1023,1029 ****
  
       if (predec_waiting_locked (u) == 0)
           // destroy u
! 	 
       could be further optimized by making this be an __ATOMIC_RELEASE,
       and then inserting a
  
--- 1026,1032 ----
  
       if (predec_waiting_locked (u) == 0)
           // destroy u
! 
       could be further optimized by making this be an __ATOMIC_RELEASE,
       and then inserting a
  
diff -Nrcpad gcc-17-20260705/libgfortran/io/unit.c gcc-17-20260712/libgfortran/io/unit.c
*** gcc-17-20260705/libgfortran/io/unit.c	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/libgfortran/io/unit.c	Sun Jul 12 22:32:18 2026
*************** found:
*** 479,495 ****
  }
  
  
  gfc_unit *
  find_unit (int n)
  {
!   return get_gfc_unit (n, 0);
  }
  
  
  gfc_unit *
  find_or_create_unit (int n)
  {
!   return get_gfc_unit (n, 1);
  }
  
  
--- 479,523 ----
  }
  
  
+ static int close_unit_1 (gfc_unit *, int, bool);
+ 
+ 
+ /*  Helper to check if an internal unit is reserved.  */
+ 
+ static inline bool
+ is_internal_reserved (gfc_unit *u)
+ {
+   return u->internal_reserved && u->internal_unit_kind == 0;
+ }
+ 
+ 
  gfc_unit *
  find_unit (int n)
  {
!   gfc_unit *u = get_gfc_unit (n, 0);
! 
!   if (u != NULL && is_internal_reserved (u))
!     {
!       unlock_unit (u);
!       return NULL;
!     }
! 
!   return u;
  }
  
  
  gfc_unit *
  find_or_create_unit (int n)
  {
!   gfc_unit *u = get_gfc_unit (n, 1);
! 
!   if (u != NULL && is_internal_reserved (u))
!     {
!       close_unit_1 (u, 0, false);
!       u = get_gfc_unit (n, 1);
!     }
! 
!   return u;
  }
  
  
*************** get_unit (st_parameter_dt *dtp, int do_c
*** 625,630 ****
--- 653,659 ----
        dtp->u.p.unit_is_internal = 1;
        dtp->common.unit = newunit_alloc ();
        unit = get_gfc_unit (dtp->common.unit, do_create);
+       unit->internal_reserved = true;
        set_internal_unit (dtp, unit, kind);
        fbuf_init (unit, 128);
        return unit;
*************** init_units (void)
*** 787,793 ****
  
  
  static int
! close_unit_1 (gfc_unit *u, int locked)
  {
    int i, rc;
  
--- 816,822 ----
  
  
  static int
! close_unit_1 (gfc_unit *u, int locked, bool free_newunit)
  {
    int i, rc;
  
*************** close_unit_1 (gfc_unit *u, int locked)
*** 817,823 ****
    free_format_hash_table (u);
    fbuf_destroy (u);
  
!   if (u->unit_number <= NEWUNIT_START)
      newunit_free (u->unit_number);
  
    if (!locked)
--- 846,852 ----
    free_format_hash_table (u);
    fbuf_destroy (u);
  
!   if (free_newunit && u->unit_number <= NEWUNIT_START)
      newunit_free (u->unit_number);
  
    if (!locked)
*************** unlock_unit (gfc_unit *u)
*** 853,859 ****
  int
  close_unit (gfc_unit *u)
  {
!   return close_unit_1 (u, 0);
  }
  
  
--- 882,888 ----
  int
  close_unit (gfc_unit *u)
  {
!   return close_unit_1 (u, 0, true);
  }
  
  
*************** close_units (void)
*** 869,875 ****
  {
    WRLOCK (&unit_rwlock);
    while (unit_root != NULL)
!     close_unit_1 (unit_root, 1);
    RWUNLOCK (&unit_rwlock);
  
    free (newunits);
--- 898,904 ----
  {
    WRLOCK (&unit_rwlock);
    while (unit_root != NULL)
!     close_unit_1 (unit_root, 1, true);
    RWUNLOCK (&unit_rwlock);
  
    free (newunits);
diff -Nrcpad gcc-17-20260705/libgm2/ChangeLog gcc-17-20260712/libgm2/ChangeLog
*** gcc-17-20260705/libgm2/ChangeLog	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/libgm2/ChangeLog	Sun Jul 12 22:32:18 2026
***************
*** 1,3 ****
--- 1,7 ----
+ 2026-07-09  Stefan Schulze Frielinghaus  <stefansf@gcc.gnu.org>
+ 
+ 	* configure.host: Remove s390 host part; keep s390x.
+ 
  2026-06-29  Pietro Monteiro  <pietro@sociotechnical.xyz>
  
  	PR bootstrap/103459
diff -Nrcpad gcc-17-20260705/libgm2/configure.host gcc-17-20260712/libgm2/configure.host
*** gcc-17-20260705/libgm2/configure.host	Sun Jul  5 22:32:17 2026
--- gcc-17-20260712/libgm2/configure.host	Sun Jul 12 22:32:18 2026
*************** case "${host}" in
*** 332,340 ****
        powerpc64*)
          abi_baseline_pair=powerpc64-linux-gnu
          ;;
-       s390)
-         abi_baseline_pair=s390-linux-gnu
-         ;;
        s390x)
          abi_baseline_pair=s390x-linux-gnu
          ;;
--- 332,337 ----
diff -Nrcpad gcc-17-20260705/libgomp/ChangeLog gcc-17-20260712/libgomp/ChangeLog
*** gcc-17-20260705/libgomp/ChangeLog	Sun Jul  5 22:32:18 2026
--- gcc-17-20260712/libgomp/ChangeLog	Sun Jul 12 22:32:19 2026
***************
*** 1,3 ****
--- 1,66 ----
+ 2026-07-09  Paul-Antoine Arras  <parras@baylibre.com>
+ 	    Thomas Schwinge  <tschwinge@baylibre.com>
+ 
+ 	* config/gcn/teams.c (GOMP_distribute_static_worksharing): Add
+ 	long niter parameter (unused).
+ 	(GOMP_distribute_static_worksharing_start): Likewise.
+ 	* config/nvptx/teams.c (GOMP_distribute_static_worksharing):
+ 	Likewise.
+ 	(GOMP_distribute_static_worksharing_start): Likewise.
+ 	* libgomp.texi: Update function signatures; fix real/imaginary
+ 	description; document niter parameter.
+ 	* libgomp_g.h (GOMP_loop_static_worksharing): Update prototype.
+ 	(GOMP_distribute_static_worksharing): Likewise.
+ 	* loop.c (GOMP_loop_static_worksharing): Add long niter parameter
+ 	(unused).
+ 	(GOMP_loop_static_worksharing_start): Likewise.
+ 	* teams.c (GOMP_distribute_static_worksharing): Likewise.
+ 	(GOMP_distribute_static_worksharing_start): Likewise.
+ 	* testsuite/libgomp.c-c++-common/for-static-1.c: Update scan
+ 	pattern to match niter argument.
+ 	* testsuite/libgomp.c-c++-common/for-static-2.c: Likewise.
+ 	* testsuite/libgomp.c-c++-common/for-static-3.c: Likewise.
+ 
+ 2026-07-09  Paul-Antoine Arras  <parras@baylibre.com>
+ 
+ 	* config/gcn/teams.c (GOMP_distribute_static_worksharing_start,
+ 	GOMP_distribute_static_worksharing_dispatch,
+ 	GOMP_distribute_static_worksharing_end): New functions.
+ 	* config/nvptx/teams.c (GOMP_distribute_static_worksharing_start,
+ 	GOMP_distribute_static_worksharing_dispatch,
+ 	GOMP_distribute_static_worksharing_end): Likewise.
+ 	* libgomp.map (GOMP_6.0.2): Export new entry points.
+ 	* libgomp_g.h: Add prototypes for GOMP_loop_static_worksharing,
+ 	GOMP_loop_static_worksharing_start, GOMP_loop_static_worksharing_dispatch,
+ 	GOMP_loop_static_worksharing_end, GOMP_has_masked_thread_num,
+ 	GOMP_masked_end, GOMP_single_start_with_end, GOMP_single_end,
+ 	GOMP_distribute_static_worksharing_start,
+ 	GOMP_distribute_static_worksharing_dispatch, and
+ 	GOMP_distribute_static_worksharing_end.
+ 	* loop.c (GOMP_loop_static_worksharing): Move here from parallel.c.
+ 	(GOMP_loop_static_worksharing_start): New function.
+ 	(GOMP_loop_static_worksharing_dispatch): New stub.
+ 	(GOMP_loop_static_worksharing_end): New stub.
+ 	(GOMP_has_masked_thread_num): Move here from parallel.c.
+ 	(GOMP_masked_end): New stub.
+ 	* parallel.c (GOMP_loop_static_worksharing): Move to loop.c.
+ 	(GOMP_has_masked_thread_num): Move to loop.c.
+ 	* single.c (GOMP_single_start_with_end): New function.
+ 	(GOMP_single_end): New stub.
+ 	(GOMP_single_copy_start): Fix trailing whitespace.
+ 	* teams.c (GOMP_distribute_static_worksharing_start): New function.
+ 	(GOMP_distribute_static_worksharing_dispatch): New stub.
+ 	(GOMP_distribute_static_worksharing_end): New stub.
+ 	* testsuite/libgomp.c-c++-common/for-static-1.c: New test.
+ 	* testsuite/libgomp.c-c++-common/for-static-2.c: New test.
+ 	* testsuite/libgomp.c-c++-common/for-static-3.c: New test.
+ 	* testsuite/libgomp.c-c++-common/for-static.h: New test.
+ 
+ 2026-07-09  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	PR ipa/125207
+ 	* testsuite/libgomp.c/ipcp-cb-spec1.c (test): Rework.
+ 
  2026-07-02  Thomas Schwinge  <tschwinge@baylibre.com>
  
  	* config/nvptx/allocator.c [PTX < 4.1]: Fix build.
diff -Nrcpad gcc-17-20260705/libgomp/config/gcn/teams.c gcc-17-20260712/libgomp/config/gcn/teams.c
*** gcc-17-20260705/libgomp/config/gcn/teams.c	Sun Jul  5 22:32:18 2026
--- gcc-17-20260712/libgomp/config/gcn/teams.c	Sun Jul 12 22:32:19 2026
*************** GOMP_teams_reg (void (*fn) (void *), voi
*** 39,48 ****
  }
  
  /* For a distribute construct with static schedule, return the team ID and
!    number of teams packed into a single complexvalue.  */
  
  _Complex int
! GOMP_distribute_static_worksharing (void)
  {
    int __lds *gomp_team_num = (int __lds *) GOMP_TEAM_NUM;
    unsigned tid = *gomp_team_num;
--- 39,62 ----
  }
  
  /* For a distribute construct with static schedule, return the team ID and
!    number of teams packed into a single complex value. NITER is the total
!    number of iterations.  */
  
  _Complex int
! GOMP_distribute_static_worksharing (unsigned long long niter
! 				    __attribute__ ((unused)))
! {
!   int __lds *gomp_team_num = (int __lds *) GOMP_TEAM_NUM;
!   unsigned tid = *gomp_team_num;
!   unsigned nteams = gomp_num_teams_var + 1;
!   return nteams + tid * 1I;
! }
! 
! /* OMPT variant enabled by -fopenmp-ompt.  */
! 
! _Complex int
! GOMP_distribute_static_worksharing_start (unsigned long long niter
! 					  __attribute__ ((unused)))
  {
    int __lds *gomp_team_num = (int __lds *) GOMP_TEAM_NUM;
    unsigned tid = *gomp_team_num;
*************** GOMP_distribute_static_worksharing (void
*** 50,55 ****
--- 64,81 ----
    return nteams + tid * 1I;
  }
  
+ /* Stub for OMPT callback enabled by -fopenmp-ompt-detailed.  */
+ 
+ void
+ GOMP_distribute_static_worksharing_dispatch (void)
+ {}
+ 
+ /* Stub for OMPT callback enabled by -fopenmp-ompt.  */
+ 
+ void
+ GOMP_distribute_static_worksharing_end (void)
+ {}
+ 
  int
  omp_get_num_teams (void)
  {
diff -Nrcpad gcc-17-20260705/libgomp/config/nvptx/teams.c gcc-17-20260712/libgomp/config/nvptx/teams.c
*** gcc-17-20260705/libgomp/config/nvptx/teams.c	Sun Jul  5 22:32:18 2026
--- gcc-17-20260712/libgomp/config/nvptx/teams.c	Sun Jul 12 22:32:19 2026
*************** GOMP_teams_reg (void (*fn) (void *), voi
*** 42,57 ****
  }
  
  /* For a distribute construct with static schedule, return the team ID and
!    number of teams packed into a single complexvalue.  */
  
  _Complex int
! GOMP_distribute_static_worksharing (void)
  {
    unsigned tid = __gomp_team_num;
    unsigned nteams = gomp_num_teams_var + 1;
    return nteams + tid * 1I;
  }
  
  int
  omp_get_num_teams (void)
  {
--- 42,81 ----
  }
  
  /* For a distribute construct with static schedule, return the team ID and
!    number of teams packed into a single complex value. NITER is the total
!    number of iterations.  */
  
  _Complex int
! GOMP_distribute_static_worksharing (unsigned long long niter
! 				    __attribute__ ((unused)))
! {
!   unsigned tid = __gomp_team_num;
!   unsigned nteams = gomp_num_teams_var + 1;
!   return nteams + tid * 1I;
! }
! 
! /* OMPT variant enabled by -fopenmp-ompt.  */
! 
! _Complex int
! GOMP_distribute_static_worksharing_start (unsigned long long niter
! 					  __attribute__ ((unused)))
  {
    unsigned tid = __gomp_team_num;
    unsigned nteams = gomp_num_teams_var + 1;
    return nteams + tid * 1I;
  }
  
+ /* Stub for OMPT callback enabled by -fopenmp-ompt-detailed.  */
+ 
+ void
+ GOMP_distribute_static_worksharing_dispatch (void)
+ {}
+ 
+ /* Stub for OMPT callback enabled by -fopenmp-ompt.  */
+ 
+ void
+ GOMP_distribute_static_worksharing_end (void)
+ {}
  int
  omp_get_num_teams (void)
  {
diff -Nrcpad gcc-17-20260705/libgomp/libgomp.map gcc-17-20260712/libgomp/libgomp.map
*** gcc-17-20260705/libgomp/libgomp.map	Sun Jul  5 22:32:18 2026
--- gcc-17-20260712/libgomp/libgomp.map	Sun Jul 12 22:32:19 2026
*************** GOMP_6.0.1 {
*** 485,496 ****
--- 485,505 ----
  GOMP_6.0.2 {
    global:
  	GOMP_has_masked_thread_num;
+ 	GOMP_masked_end;
  	GOMP_loop_static_worksharing;
+ 	GOMP_loop_static_worksharing_start;
+ 	GOMP_loop_static_worksharing_dispatch;
+ 	GOMP_loop_static_worksharing_end;
  	GOMP_distribute_static_worksharing;
+ 	GOMP_distribute_static_worksharing_start;
+ 	GOMP_distribute_static_worksharing_dispatch;
+ 	GOMP_distribute_static_worksharing_end;
  	GOMP_barrier_ext;
  	GOMP_barrier_cancel_ext;
  	GOMP_reduction_start;
  	GOMP_reduction_end;
+ 	GOMP_single_start_with_end;
+ 	GOMP_single_end;
  } GOMP_6.0.1;
  
  OACC_2.0 {
diff -Nrcpad gcc-17-20260705/libgomp/libgomp.texi gcc-17-20260712/libgomp/libgomp.texi
*** gcc-17-20260705/libgomp/libgomp.texi	Sun Jul  5 22:32:18 2026
--- gcc-17-20260712/libgomp/libgomp.texi	Sun Jul 12 22:32:19 2026
*************** but since its supposed to remain unchang
*** 8318,8334 ****
  For @code{schedule(static)} without @code{ordered}, the compiler uses:
  
  @smallexample
!   _Complex int GOMP_loop_static_worksharing (void)
  @end smallexample
  
! which returns the thread id in the real part and the thread count in the imaginary
! part as a single value, avoiding separate @code{omp_get_thread_num} /
  @code{omp_get_num_threads} calls that OMPT cannot distinguish from user queries.
  
  Similarly, for @code{distribute} constructs:
  
  @smallexample
!   _Complex int GOMP_distribute_static_worksharing (void)
  @end smallexample
  
  returns the team id and team count.
--- 8318,8335 ----
  For @code{schedule(static)} without @code{ordered}, the compiler uses:
  
  @smallexample
!   _Complex int GOMP_loop_static_worksharing (unsigned long long)
  @end smallexample
  
! which returns the thread id in the imaginary part and the thread count in the
! real part as a single value, avoiding separate @code{omp_get_thread_num} /
  @code{omp_get_num_threads} calls that OMPT cannot distinguish from user queries.
+ For OMPT, the total number of loop iterations is passed as argument.
  
  Similarly, for @code{distribute} constructs:
  
  @smallexample
!   _Complex int GOMP_distribute_static_worksharing (unsigned long long)
  @end smallexample
  
  returns the team id and team count.
diff -Nrcpad gcc-17-20260705/libgomp/libgomp_g.h gcc-17-20260712/libgomp/libgomp_g.h
*** gcc-17-20260705/libgomp/libgomp_g.h	Sun Jul  5 22:32:18 2026
--- gcc-17-20260712/libgomp/libgomp_g.h	Sun Jul 12 22:32:19 2026
*************** extern void GOMP_loop_end (void);
*** 144,149 ****
--- 144,154 ----
  extern void GOMP_loop_end_nowait (void);
  extern bool GOMP_loop_end_cancel (void);
  
+ extern _Complex int GOMP_loop_static_worksharing (unsigned long long);
+ extern _Complex int GOMP_loop_static_worksharing_start (unsigned long long);
+ extern void GOMP_loop_static_worksharing_dispatch (void);
+ extern void GOMP_loop_static_worksharing_end (void);
+ 
  /* loop_ull.c */
  
  extern bool GOMP_loop_ull_static_start (bool, unsigned long long,
*************** extern unsigned GOMP_parallel_reductions
*** 298,304 ****
  extern bool GOMP_cancel (int, bool);
  extern bool GOMP_cancellation_point (int);
  extern bool GOMP_has_masked_thread_num (int);
! extern __complex__ int GOMP_loop_static_worksharing (void);
  
  /* task.c */
  
--- 303,309 ----
  extern bool GOMP_cancel (int, bool);
  extern bool GOMP_cancellation_point (int);
  extern bool GOMP_has_masked_thread_num (int);
! extern void GOMP_masked_end (void);
  
  /* task.c */
  
*************** extern bool GOMP_sections_end_cancel (vo
*** 339,344 ****
--- 344,351 ----
  /* single.c */
  
  extern bool GOMP_single_start (void);
+ extern bool GOMP_single_start_with_end (void);
+ extern void GOMP_single_end (void);
  extern void *GOMP_single_copy_start (void);
  extern void GOMP_single_copy_end (void *);
  
*************** extern void *GOMP_target_map_indirect_pt
*** 379,385 ****
  
  extern void GOMP_teams_reg (void (*) (void *), void *, unsigned, unsigned,
  			    unsigned);
! extern __complex__ int GOMP_distribute_static_worksharing (void);
  
  /* allocator.c */
  
--- 386,395 ----
  
  extern void GOMP_teams_reg (void (*) (void *), void *, unsigned, unsigned,
  			    unsigned);
! extern _Complex int GOMP_distribute_static_worksharing (unsigned long long);
! extern _Complex int GOMP_distribute_static_worksharing_start (unsigned long long);
! extern void GOMP_distribute_static_worksharing_dispatch (void);
! extern void GOMP_distribute_static_worksharing_end (void);
  
  /* allocator.c */
  
diff -Nrcpad gcc-17-20260705/libgomp/loop.c gcc-17-20260712/libgomp/loop.c
*** gcc-17-20260705/libgomp/loop.c	Sun Jul  5 22:32:18 2026
--- gcc-17-20260712/libgomp/loop.c	Sun Jul 12 22:32:19 2026
*************** GOMP_loop_ordered_guided_next (long *ist
*** 1186,1188 ****
--- 1186,1226 ----
    return gomp_loop_ordered_guided_next (istart, iend);
  }
  #endif
+ 
+ /* For a worksharing-loop construct with static schedule, return the thread ID
+    and number of threads packed into a single complex value. NITER is the total
+    number of iterations.  */
+ 
+ _Complex int
+ GOMP_loop_static_worksharing (unsigned long long niter
+ 			      __attribute__ ((unused)))
+ {
+   struct gomp_team *team = gomp_thread ()->ts.team;
+   unsigned tid = gomp_thread ()->ts.team_id;
+   unsigned nthreads = team ? team->nthreads : 1;
+   return nthreads + tid * 1I;
+ }
+ 
+ /* OMPT variant enabled by -fopenmp-ompt.  */
+ 
+ _Complex int
+ GOMP_loop_static_worksharing_start (unsigned long long niter
+ 				    __attribute__ ((unused)))
+ {
+   struct gomp_team *team = gomp_thread ()->ts.team;
+   unsigned tid = gomp_thread ()->ts.team_id;
+   unsigned nthreads = team ? team->nthreads : 1;
+   return nthreads + tid * 1I;
+ }
+ 
+ /* Stub for OMPT callback enabled by -fopenmp-ompt-detailed.  */
+ 
+ void
+ GOMP_loop_static_worksharing_dispatch (void)
+ {}
+ 
+ /* Stub for OMPT callback enabled by -fopenmp-ompt.  */
+ 
+ void
+ GOMP_loop_static_worksharing_end (void)
+ {}
diff -Nrcpad gcc-17-20260705/libgomp/parallel.c gcc-17-20260712/libgomp/parallel.c
*** gcc-17-20260705/libgomp/parallel.c	Sun Jul  5 22:32:18 2026
--- gcc-17-20260712/libgomp/parallel.c	Sun Jul 12 22:32:19 2026
*************** GOMP_cancel (int which, bool do_cancel)
*** 271,288 ****
    return true;
  }
  
- /* For a worksharing-loop construct with static schedule, return the thread ID
-    and number of threads packed into a single complex value.  */
- 
- _Complex int
- GOMP_loop_static_worksharing (void)
- {
-   struct gomp_team *team = gomp_thread ()->ts.team;
-   unsigned tid = gomp_thread ()->ts.team_id;
-   unsigned nthreads = team ? team->nthreads : 1;
-   return nthreads + tid * 1I;
- }
- 
  /* Return true if the current thread number equals TID.
     Used to implement the masked construct's filter clause.  */
  
--- 271,276 ----
*************** GOMP_has_masked_thread_num (int tid)
*** 291,296 ****
--- 279,290 ----
  {
    return tid == gomp_thread ()->ts.team_id;
  }
+ 
+ /* Stub for OMPT callback enabled by -fopenmp-ompt.  */
+ 
+ void
+ GOMP_masked_end (void)
+ {}
  
  /* The public OpenMP API for thread and team related inquiries.  */
  
diff -Nrcpad gcc-17-20260705/libgomp/single.c gcc-17-20260712/libgomp/single.c
*** gcc-17-20260705/libgomp/single.c	Sun Jul  5 22:32:18 2026
--- gcc-17-20260712/libgomp/single.c	Sun Jul 12 22:32:19 2026
*************** GOMP_single_start (void)
*** 55,60 ****
--- 55,91 ----
  #endif
  }
  
+ /* OMPT variant enabled by -fopenmp-ompt.  */
+ 
+ bool
+ GOMP_single_start_with_end (void)
+ {
+ #ifdef HAVE_SYNC_BUILTINS
+   struct gomp_thread *thr = gomp_thread ();
+   struct gomp_team *team = thr->ts.team;
+   unsigned long single_count;
+ 
+   if (__builtin_expect (team == NULL, 0))
+     return true;
+ 
+   single_count = thr->ts.single_count++;
+   return __sync_bool_compare_and_swap (&team->single_count, single_count,
+ 				       single_count + 1L);
+ #else
+   bool ret = gomp_work_share_start (0);
+   if (ret)
+     gomp_work_share_init_done ();
+   gomp_work_share_end_nowait ();
+   return ret;
+ #endif
+ }
+ 
+ /* Stub for OMPT callback enabled by -fopenmp-ompt.  */
+ 
+ void
+ GOMP_single_end (void)
+ {}
+ 
  /* This routine is called when first encountering a SINGLE construct that
     does have a COPYPRIVATE clause.  Returns NULL if this is the thread
     that should execute the clause; otherwise the return value is pointer
*************** GOMP_single_copy_start (void)
*** 69,75 ****
    void *ret;
  
    first = gomp_work_share_start (0);
!   
    if (first)
      {
        gomp_work_share_init_done ();
--- 100,106 ----
    void *ret;
  
    first = gomp_work_share_start (0);
! 
    if (first)
      {
        gomp_work_share_init_done ();
diff -Nrcpad gcc-17-20260705/libgomp/teams.c gcc-17-20260712/libgomp/teams.c
*** gcc-17-20260705/libgomp/teams.c	Sun Jul  5 22:32:18 2026
--- gcc-17-20260712/libgomp/teams.c	Sun Jul 12 22:32:19 2026
*************** GOMP_teams_reg (void (*fn) (void *), voi
*** 59,68 ****
  }
  
  /* For a distribute construct with static schedule, return the team ID and
!    number of teams packed into a single complex value.  */
  
  _Complex int
! GOMP_distribute_static_worksharing (void)
  {
    struct gomp_thread *thr = gomp_thread ();
    unsigned tid = thr->team_num;
--- 59,82 ----
  }
  
  /* For a distribute construct with static schedule, return the team ID and
!    number of teams packed into a single complex value. NITER is the total
!    number of iterations.  */
  
  _Complex int
! GOMP_distribute_static_worksharing (unsigned long long
! 				    niter __attribute__ ((unused)))
! {
!   struct gomp_thread *thr = gomp_thread ();
!   unsigned tid = thr->team_num;
!   unsigned nteams = thr->num_teams + 1;
!   return nteams + tid * 1I;
! }
! 
! /* OMPT variant enabled by -fopenmp-ompt.  */
! 
! _Complex int
! GOMP_distribute_static_worksharing_start (unsigned long long
! 					  niter __attribute__ ((unused)))
  {
    struct gomp_thread *thr = gomp_thread ();
    unsigned tid = thr->team_num;
*************** GOMP_distribute_static_worksharing (void
*** 70,75 ****
--- 84,101 ----
    return nteams + tid * 1I;
  }
  
+ /* Stub for OMPT callback enabled by -fopenmp-ompt-detailed.  */
+ 
+ void
+ GOMP_distribute_static_worksharing_dispatch (void)
+ {}
+ 
+ /* Stub for OMPT callback enabled by -fopenmp-ompt.  */
+ 
+ void
+ GOMP_distribute_static_worksharing_end (void)
+ {}
+ 
  int
  omp_get_num_teams (void)
  {
diff -Nrcpad gcc-17-20260705/libgomp/testsuite/libgomp.c/ipcp-cb-spec1.c gcc-17-20260712/libgomp/testsuite/libgomp.c/ipcp-cb-spec1.c
*** gcc-17-20260705/libgomp/testsuite/libgomp.c/ipcp-cb-spec1.c	Sun Jul  5 22:32:18 2026
--- gcc-17-20260712/libgomp/testsuite/libgomp.c/ipcp-cb-spec1.c	Sun Jul 12 22:32:19 2026
***************
*** 4,18 ****
  /* { dg-options "-O3 -fopenmp -std=gnu99 -fdump-ipa-cp-details --param ipa-cp-eval-threshold=1" } */
  /* { dg-require-effective-target fopenmp } */
  
! void test(int c) {
    for (int i = 0; i < c; i++)
      if (!__builtin_constant_p(c))
        __builtin_abort();
  }
! int main() {
  #pragma omp task
!   test(7);
    return 0;
  }
  
! /* { dg-final { scan-ipa-dump "Creating a specialized node of main._omp_fn" "cp" } } */
--- 4,24 ----
  /* { dg-options "-O3 -fopenmp -std=gnu99 -fdump-ipa-cp-details --param ipa-cp-eval-threshold=1" } */
  /* { dg-require-effective-target fopenmp } */
  
! static inline void __attribute__((always_inline)) test(int c) {
    for (int i = 0; i < c; i++)
      if (!__builtin_constant_p(c))
        __builtin_abort();
  }
! 
! int foo(int c) {
  #pragma omp task
!   test(c);
    return 0;
  }
  
! int main() {
!   foo(7);
!   return 0;
! }
! 
! /* { dg-final { scan-ipa-dump "Creating a specialized node of foo._omp_fn" "cp" } } */
diff -Nrcpad gcc-17-20260705/libgomp/testsuite/libgomp.c-c++-common/for-static-1.c gcc-17-20260712/libgomp/testsuite/libgomp.c-c++-common/for-static-1.c
*** gcc-17-20260705/libgomp/testsuite/libgomp.c-c++-common/for-static-1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/libgomp/testsuite/libgomp.c-c++-common/for-static-1.c	Sun Jul 12 22:32:19 2026
***************
*** 0 ****
--- 1,13 ----
+ /* { dg-do link { target offload_target_any } } */
+ /* { dg-additional-options "-O0 -foffload=-fdump-tree-optimized" } */
+ 
+ /* Check that the static distribute expanders fetch the team id and count
+    through a single GOMP_distribute_static_worksharing call rather than separate
+    omp_get_team_num and omp_get_num_teams calls, and that this function exists
+    on the target side.  */
+ 
+ #include "for-static.h"
+ 
+ /* { dg-final { scan-offload-tree-dump-times "GOMP_distribute_static_worksharing \\(\[^\\)\]" 2 "optimized" } } */
+ /* { dg-final { scan-offload-tree-dump-not "omp_get_num_teams" "optimized" } } */
+ /* { dg-final { scan-offload-tree-dump-not "omp_get_team_num" "optimized" } } */
diff -Nrcpad gcc-17-20260705/libgomp/testsuite/libgomp.c-c++-common/for-static-2.c gcc-17-20260712/libgomp/testsuite/libgomp.c-c++-common/for-static-2.c
*** gcc-17-20260705/libgomp/testsuite/libgomp.c-c++-common/for-static-2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/libgomp/testsuite/libgomp.c-c++-common/for-static-2.c	Sun Jul 12 22:32:19 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do link { target offload_target_any } } */
+ /* { dg-additional-options "-O0 -foffload=-fdump-tree-optimized -fopenmp-ompt" } */
+ 
+ /* Check that, with -fopenmp-ompt, the _start and _end variants are called.  */
+ 
+ #include "for-static.h"
+ 
+ /* { dg-final { scan-offload-tree-dump-times "GOMP_distribute_static_worksharing_start \\(\[^\\)\]" 2 "optimized" } } */
+ /* { dg-final { scan-offload-tree-dump-times "GOMP_distribute_static_worksharing_end \\(\\)" 2 "optimized" } } */
+ /* { dg-final { scan-offload-tree-dump-not "GOMP_distribute_static_worksharing \\(" "optimized" } } */
+ /* { dg-final { scan-offload-tree-dump-not "GOMP_distribute_static_worksharing_dispatch" "optimized" } } */
diff -Nrcpad gcc-17-20260705/libgomp/testsuite/libgomp.c-c++-common/for-static-3.c gcc-17-20260712/libgomp/testsuite/libgomp.c-c++-common/for-static-3.c
*** gcc-17-20260705/libgomp/testsuite/libgomp.c-c++-common/for-static-3.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/libgomp/testsuite/libgomp.c-c++-common/for-static-3.c	Sun Jul 12 22:32:19 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do link { target offload_target_any } } */
+ /* { dg-additional-options "-O0 -foffload=-fdump-tree-optimized -fopenmp-ompt-detailed" } */
+ 
+ /* Check that, with -fopenmp-ompt-detailed, _dispatch builtins are called along
+    with the _start and _end variants.  */
+ 
+ #include "for-static.h"
+ 
+ /* { dg-final { scan-offload-tree-dump-times "GOMP_distribute_static_worksharing_start \\(\[^\\)\]" 2 "optimized" } } */
+ /* { dg-final { scan-offload-tree-dump-times "GOMP_distribute_static_worksharing_dispatch \\(\\)" 2 "optimized" } } */
+ /* { dg-final { scan-offload-tree-dump-times "GOMP_distribute_static_worksharing_end \\(\\)" 2 "optimized" } } */
diff -Nrcpad gcc-17-20260705/libgomp/testsuite/libgomp.c-c++-common/for-static.h gcc-17-20260712/libgomp/testsuite/libgomp.c-c++-common/for-static.h
*** gcc-17-20260705/libgomp/testsuite/libgomp.c-c++-common/for-static.h	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/libgomp/testsuite/libgomp.c-c++-common/for-static.h	Sun Jul 12 22:32:19 2026
***************
*** 0 ****
--- 1,37 ----
+ void bar (int a)
+ {}
+ 
+ /* Distribute without a chunk size goes through
+    expand_omp_for_static_nochunk.  */
+ 
+ void
+ f3 (int n)
+ {
+   int i;
+ #pragma omp target
+ #pragma omp teams
+ #pragma omp distribute
+   for (i = 0; i < n; ++i)
+     bar (i);
+ }
+ 
+ /* Distribute with a chunk size goes through
+    expand_omp_for_static_chunk.  */
+ 
+ void
+ f4 (int n)
+ {
+   int i;
+ #pragma omp target
+ #pragma omp teams
+ #pragma omp distribute dist_schedule(static, 4)
+   for (i = 0; i < n; ++i)
+     bar (i);
+ }
+ 
+ int main (void)
+ {
+   f3(0);
+   f4(1);
+   return 0;
+ }
diff -Nrcpad gcc-17-20260705/libitm/ChangeLog gcc-17-20260712/libitm/ChangeLog
*** gcc-17-20260705/libitm/ChangeLog	Sun Jul  5 22:32:18 2026
--- gcc-17-20260712/libitm/ChangeLog	Sun Jul 12 22:32:19 2026
***************
*** 1,3 ****
--- 1,7 ----
+ 2026-07-09  Stefan Schulze Frielinghaus  <stefansf@gcc.gnu.org>
+ 
+ 	* config/s390/sjlj.S: Remove -m31 part.
+ 
  2026-06-29  Pietro Monteiro  <pietro@sociotechnical.xyz>
  
  	PR bootstrap/103459
diff -Nrcpad gcc-17-20260705/libitm/config/s390/sjlj.S gcc-17-20260712/libitm/config/s390/sjlj.S
*** gcc-17-20260705/libitm/config/s390/sjlj.S	Sun Jul  5 22:32:18 2026
--- gcc-17-20260712/libitm/config/s390/sjlj.S	Sun Jul 12 22:32:19 2026
***************
*** 33,39 ****
  	/* _ITM_beginTransaction (int props); props -> r2 */
  _ITM_beginTransaction:
  	cfi_startproc
- #ifdef __s390x__
  	lgr	%r3,%r15	/* backup stack pointer */
  	aghi	%r15,-304	/* jump buffer (144) + reg save area (160) */
  	cfi_adjust_cfa_offset(304)
--- 33,38 ----
*************** _ITM_beginTransaction:
*** 53,74 ****
  	aghi	%r15,304
  	cfi_adjust_cfa_offset(-304)
  	br	%r1
- #else
- 	lr	%r3,%r15	/* backup stack pointer */
- 	ahi	%r15,-152	/* jump buffer (56) + reg save area (96) */
- 	cfi_adjust_cfa_offset(152)
- 	stm	%r6,%r14,96(%r15)
- 	st	%r3,36+96(%r15)	/* store the old stack pointer */
- 	std	%f4,40+96(%r15)
- 	std	%f6,48+96(%r15)
- 	la	%r3,96(%r15)	/* second argument to GTM_begin_transaction */
- 	/* begin_transaction (uint32_t prop, const gtm_jmpbuf *jb) */
- 	brasl	%r14,GTM_begin_transaction /* requires mzarch */
- 	l	%r1,32+96(%r15)
- 	ahi	%r15,152
- 	cfi_adjust_cfa_offset(-152)
- 	br	%r1
- #endif
  	cfi_endproc
  
  	.size _ITM_beginTransaction, .-_ITM_beginTransaction
--- 52,57 ----
*************** GTM_longjmp:
*** 84,90 ****
  	   _ITM_beginTransaction (r2).
  	   Third parameter is ignored for now.  */
  	cfi_startproc
- #ifdef __s390x__
  	ld	%f8,80(%r3)
  	ld	%f9,88(%r3)
  	ld	%f10,96(%r3)
--- 67,72 ----
*************** GTM_longjmp:
*** 95,106 ****
  	ld	%f15,136(%r3)
  	lmg	%r6,%r15,0(%r3)
  	br	%r14
- #else
- 	ld	%f4,40(%r3)
- 	ld	%f6,48(%r3)
- 	lm	%r6,%r15,0(%r3)
- 	br	%r14
- #endif
  	cfi_endproc
  
  	.size GTM_longjmp, .-GTM_longjmp
--- 77,82 ----
diff -Nrcpad gcc-17-20260705/libphobos/ChangeLog gcc-17-20260712/libphobos/ChangeLog
*** gcc-17-20260705/libphobos/ChangeLog	Sun Jul  5 22:32:18 2026
--- gcc-17-20260712/libphobos/ChangeLog	Sun Jul 12 22:32:19 2026
***************
*** 1,3 ****
--- 1,8 ----
+ 2026-07-10  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+ 
+ 	* libdruntime/config/common/threadasm.S: Don't emit
+ 	.note.GNU-stack on NetBSD.
+ 
  2026-06-29  Pietro Monteiro  <pietro@sociotechnical.xyz>
  
  	PR bootstrap/103459
diff -Nrcpad gcc-17-20260705/libphobos/libdruntime/config/common/threadasm.S gcc-17-20260712/libphobos/libdruntime/config/common/threadasm.S
*** gcc-17-20260705/libphobos/libdruntime/config/common/threadasm.S	Sun Jul  5 22:32:18 2026
--- gcc-17-20260712/libphobos/libdruntime/config/common/threadasm.S	Sun Jul 12 22:32:19 2026
*************** a copy of the GCC Runtime Library Except
*** 22,28 ****
  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
  <http://www.gnu.org/licenses/>.  */
  
! #if (__linux__ || __FreeBSD__ || __NetBSD__ || __OpenBSD__ || __DragonFly__) && __ELF__
  /*
   * Mark the resulting object file as not requiring execution permissions on
   * stack memory. The absence of this section would mark the whole resulting
--- 22,28 ----
  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
  <http://www.gnu.org/licenses/>.  */
  
! #if (__linux__ || __FreeBSD__ || __OpenBSD__ || __DragonFly__) && __ELF__
  /*
   * Mark the resulting object file as not requiring execution permissions on
   * stack memory. The absence of this section would mark the whole resulting
diff -Nrcpad gcc-17-20260705/libstdc++-v3/ChangeLog gcc-17-20260712/libstdc++-v3/ChangeLog
*** gcc-17-20260705/libstdc++-v3/ChangeLog	Sun Jul  5 22:32:19 2026
--- gcc-17-20260712/libstdc++-v3/ChangeLog	Sun Jul 12 22:32:20 2026
***************
*** 1,3 ****
--- 1,113 ----
+ 2026-07-10  Tomasz Kamiński  <tkaminsk@redhat.com>
+ 
+ 	* testsuite/std/memory/start_lifetime_as/neg.cc: Fix
+ 	typos in comment and remove trailing whitespaces.
+ 
+ 2026-07-10  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/119143
+ 	* include/tr1/bessel_function.tcc (__cyl_bessel_jn_asymp):
+ 	Return zero for infinite x.
+ 	* testsuite/special_functions/08_cyl_bessel_j/check_inf.cc: New
+ 	test.
+ 	* testsuite/special_functions/10_cyl_neumann/check_inf.cc: New
+ 	test.
+ 	* testsuite/tr1/5_numerical_facilities/special_functions/11_cyl_neumann/check_inf.cc:
+ 	New test.
+ 	* testsuite/tr1/5_numerical_facilities/special_functions/09_cyl_bessel_j/check_inf.cc:
+ 	New test.
+ 
+ 2026-07-10  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* src/c++17/fs_ops.cc (windows_read_symlink_handle): Use
+ 	__detail::__is_handle_symlink and report an error for
+ 	non-symlinks.
+ 	(filesystem::read_symlink): Remove error handling for
+ 	non-symlinks.
+ 	* src/filesystem/ops-common.h (__detail::__open_for_stat): Use
+ 	std::error_code parameter to report errors instead of setting
+ 	errno.
+ 	(__detail::__check_handle_type): Likewise.
+ 	(__detail::__is_handle_symlink): Likewise.
+ 	(__detail::__stat_windows): Pass std::error_code to helper
+ 	functions and set errno to report errors.
+ 
+ 2026-07-10  Tomasz Kamiński  <tkaminsk@redhat.com>
+ 
+ 	* testsuite/20_util/has_unique_object_representations/neg.cc:
+ 	New test.
+ 
+ 2026-07-10  Tomasz Kamiński  <tkaminsk@redhat.com>
+ 
+ 	* include/bits/stl_construct.h (std::start_lifetime_as_array):
+ 	static_assert that _Tp is complete type.
+ 	* testsuite/std/memory/start_lifetime_as/neg.cc: New test.
+ 
+ 2026-07-10  Tomasz Kamiński  <tkaminsk@redhat.com>
+ 
+ 	* include/std/ranges (repeat_view::repeat_view): Assert that
+ 	__bound >= 0 consistently. Replace !same_as<unreachable_sentinel>
+ 	with __is_signed_integer_like check.
+ 
+ 2026-07-09  Stefan Schulze Frielinghaus  <stefansf@gcc.gnu.org>
+ 
+ 	* configure.host: Remove s390 host part; keep s390x.
+ 
+ 2026-07-08  Nathan Myers  <ncm@cantrip.org>
+ 
+ 	PR libstdc++/118851
+ 	* include/bits/stl_tree.h (_M_equal_range_tr): Rewrite to match
+ 	non-heterogeneous equal_range implementation.
+ 	* testsuite/23_containers/map/operations/hetero/equal_range.cc:
+ 	New test.
+ 	* testsuite/23_containers/multimap/operations/hetero/equal_range.cc:
+ 	Same.
+ 	* testsuite/23_containers/multiset/operations/hetero/equal_range.cc:
+ 	Same.
+ 	* testsuite/23_containers/set/operations/hetero/equal_range.cc: Same.
+ 
+ 2026-07-07  Tomasz Kamiński  <tkaminsk@redhat.com>
+ 
+ 	* include/std/mdspan
+ 	(layout_stride::mapping::mapping(const extent_type&, span<...>)):
+ 	Convert strides using __index_type_cast, which bring asserts
+ 	for negative and unrepresentable values.
+ 	* testsuite/23_containers/mdspan/layouts/stride_neg.cc: New test.
+ 
+ 2026-07-07  Tomasz Kamiński  <tkaminsk@redhat.com>
+ 
+ 	* config/abi/pre/gnu.ver (GLIBCXX_3.4.36): Export basic_format_arg
+ 	_M_handle_unrecognized method of specializations of
+ 	format_context and wformat_context.
+ 	* include/std/format (basic_format_arg::_M_handle_unrecognized):
+ 	Declare with explicit specializations for (w)format_context
+ 	if _GLIBCXX_EXTERN_TEMPLATE, and define otherwise.
+ 	(basic_format_arg::_M_visit): Remove __type parameter, and use
+ 	_M_type instead. Call _M_handle_unrecognized for unrecognized
+ 	_Arg_t values.
+ 	(basic_format_arg::_M_visit_user): Remove __type parameter,
+ 	and use _M_type instead. Adjust calls to _M_visit.
+ 	(basic_format_arg::visit, std::visit_format_arg)
+ 	(__format::__visit_format_arg): Remove _M_type argument from
+ 	_M_visit(_user) calls.
+ 	* src/c++20/format-inst.cc
+ 	(basic_format_arg::_M_handle_unrecognized): Define and export
+ 	explicit specializations for (w)format_context.
+ 
+ 2026-07-07  Tomasz Kamiński  <tkaminsk@redhat.com>
+ 
+ 	* include/bits/version.def (allocate_at_least): Add comment
+ 	listing papers adding values and LWG3887.
+ 	* include/bits/stl_iterator.h: Add comment for LWG3953.
+ 	* include/std/format: Add comment for LWG3892.
+ 	* include/std/type_traits: Add comment for LWG3655.
+ 
+ 2026-07-06  Thomas Schwinge  <tschwinge@baylibre.com>
+ 	    Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* config/locale/generic/ctype_members.cc (use_table): New function.
+ 	(ctype<wchar_t>::do_narrow): Use use_table.
+ 
  2026-07-03  Nathan Myers  <ncm@cantrip.org>
  
  	PR libstdc++/126072
diff -Nrcpad gcc-17-20260705/libstdc++-v3/config/abi/pre/gnu.ver gcc-17-20260712/libstdc++-v3/config/abi/pre/gnu.ver
*** gcc-17-20260705/libstdc++-v3/config/abi/pre/gnu.ver	Sun Jul  5 22:32:19 2026
--- gcc-17-20260712/libstdc++-v3/config/abi/pre/gnu.ver	Sun Jul 12 22:32:20 2026
*************** GLIBCXX_3.4.36 {
*** 2628,2633 ****
--- 2628,2637 ----
  
      _ZNSt6chrono8__detail25__recent_leap_second_infoERNS_16leap_second_infoEj;
  
+     # basic_format_arg<format_context>::handle basic_format_arg<format_context>::_M_handle_unrecognized() const;
+     # basic_format_arg<wformat_context>::handle basic_format_arg<wformat_context>::_M_handle_unrecognized() const;
+     _ZNKSt16basic_format_argISt20basic_format_contextINSt8__format10_Sink_iterI[cw]EE[cw]EE22_M_handle_unrecognizedEv;
+ 
      # basic_string::allocate_at_least
      _ZNSt7__cxx1112basic_stringI[cw]St11char_traitsI[cw]ESaI[cw]EE*_S_allocate_*;
      _ZNSt7__cxx1112basic_stringI[cw]St11char_traitsI[cw]ESaI[cw]EE*_M_create_*;
diff -Nrcpad gcc-17-20260705/libstdc++-v3/config/locale/generic/ctype_members.cc gcc-17-20260712/libstdc++-v3/config/locale/generic/ctype_members.cc
*** gcc-17-20260705/libstdc++-v3/config/locale/generic/ctype_members.cc	Sun Jul  5 22:32:19 2026
--- gcc-17-20260712/libstdc++-v3/config/locale/generic/ctype_members.cc	Sun Jul 12 22:32:20 2026
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 205,215 ****
      return __hi;
    }
  
    char
    ctype<wchar_t>::
    do_narrow(wchar_t __wc, char __dfault) const
    {
!     if (__wc >= 0 && __wc < 128 && _M_narrow_ok)
        return _M_narrow[__wc];
      const int __c = wctob(__wc);
      return (__c == EOF ? __dfault : static_cast<char>(__c));
--- 205,224 ----
      return __hi;
    }
  
+   // True if c can be looked up in _M_narrow.
+   [[gnu::always_inline]]
+   static inline bool
+   use_table(wchar_t c)
+   {
+     using U = std::make_unsigned<wchar_t>::type;
+     return U(c) < 128;
+   }
+ 
    char
    ctype<wchar_t>::
    do_narrow(wchar_t __wc, char __dfault) const
    {
!     if (use_table(__wc) && _M_narrow_ok)
        return _M_narrow[__wc];
      const int __c = wctob(__wc);
      return (__c == EOF ? __dfault : static_cast<char>(__c));
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 223,229 ****
      if (_M_narrow_ok)
        while (__lo < __hi)
  	{
! 	  if (*__lo >= 0 && *__lo < 128)
  	    *__dest = _M_narrow[*__lo];
  	  else
  	    {
--- 232,238 ----
      if (_M_narrow_ok)
        while (__lo < __hi)
  	{
! 	  if (use_table(*__lo))
  	    *__dest = _M_narrow[*__lo];
  	  else
  	    {
diff -Nrcpad gcc-17-20260705/libstdc++-v3/configure.host gcc-17-20260712/libstdc++-v3/configure.host
*** gcc-17-20260705/libstdc++-v3/configure.host	Sun Jul  5 22:32:19 2026
--- gcc-17-20260712/libstdc++-v3/configure.host	Sun Jul 12 22:32:20 2026
*************** case "${host}" in
*** 336,344 ****
        powerpc64*)
          abi_baseline_pair=powerpc64-linux-gnu
          ;;
-       s390)
-         abi_baseline_pair=s390-linux-gnu
-         ;;
        s390x)
          abi_baseline_pair=s390x-linux-gnu
          ;;
--- 336,341 ----
diff -Nrcpad gcc-17-20260705/libstdc++-v3/include/bits/stl_construct.h gcc-17-20260712/libstdc++-v3/include/bits/stl_construct.h
*** gcc-17-20260705/libstdc++-v3/include/bits/stl_construct.h	Sun Jul  5 22:32:19 2026
--- gcc-17-20260712/libstdc++-v3/include/bits/stl_construct.h	Sun Jul 12 22:32:20 2026
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 346,351 ****
--- 346,353 ----
      inline _Tp*
      start_lifetime_as_array(void* __p, size_t __n) noexcept
      {
+       static_assert(sizeof(_Tp), "template argument must be a complete type");
+ 
        auto __q = reinterpret_cast<_Tp*>(__p);
        if (!__n)
  	return __q;
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 360,365 ****
--- 362,369 ----
      inline const _Tp*
      start_lifetime_as_array(const void* __p, size_t __n) noexcept
      {
+       static_assert(sizeof(_Tp), "template argument must be a complete type");
+ 
        auto __q = reinterpret_cast<const _Tp*>(__p);
        if (!__n)
  	return __q;
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 376,381 ****
--- 380,387 ----
      inline volatile _Tp*
      start_lifetime_as_array(volatile void* __p, size_t __n) noexcept
      {
+       static_assert(sizeof(_Tp), "template argument must be a complete type");
+ 
        auto __q = reinterpret_cast<volatile _Tp*>(__p);
        if (!__n)
  	return __q;
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 392,397 ****
--- 398,405 ----
      inline const volatile _Tp*
      start_lifetime_as_array(const volatile void* __p, size_t __n) noexcept
      {
+       static_assert(sizeof(_Tp), "template argument must be a complete type");
+ 
        auto __q = reinterpret_cast<const volatile _Tp*>(__p);
        if (!__n)
  	return __q;
diff -Nrcpad gcc-17-20260705/libstdc++-v3/include/bits/stl_iterator.h gcc-17-20260712/libstdc++-v3/include/bits/stl_iterator.h
*** gcc-17-20260705/libstdc++-v3/include/bits/stl_iterator.h	Sun Jul  5 22:32:19 2026
--- gcc-17-20260712/libstdc++-v3/include/bits/stl_iterator.h	Sun Jul 12 22:32:20 2026
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 2131,2136 ****
--- 2131,2138 ----
        return *this;
      }
  
+     // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     // 3953. iter_move for common_iterator and ... should return decltype(auto)
      constexpr decltype(auto)
      operator++(int)
      {
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 2454,2459 ****
--- 2456,2463 ----
  	return *this;
        }
  
+       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+       // 3953. iter_move for ... and counted_iterator should return decltype(auto)
        constexpr decltype(auto)
        operator++(int)
        {
diff -Nrcpad gcc-17-20260705/libstdc++-v3/include/bits/stl_tree.h gcc-17-20260712/libstdc++-v3/include/bits/stl_tree.h
*** gcc-17-20260705/libstdc++-v3/include/bits/stl_tree.h	Sun Jul  5 22:32:19 2026
--- gcc-17-20260712/libstdc++-v3/include/bits/stl_tree.h	Sun Jul 12 22:32:20 2026
*************** namespace __rb_tree
*** 2026,2037 ****
  	pair<const_iterator, const_iterator>
  	_M_equal_range_tr(const _Kt& __k) const
  	{
! 	  const_iterator __low(_M_lower_bound_tr(__k));
! 	  auto __high = __low;
! 	  auto& __cmp = _M_impl._M_key_compare;
! 	  while (__high != end() && !__cmp(__k, _S_key(__high._M_node)))
! 	    ++__high;
! 	  return { __low, __high };
  	}
  #endif // __glibcxx_generic_associative_lookup
  
--- 2026,2054 ----
  	pair<const_iterator, const_iterator>
  	_M_equal_range_tr(const _Kt& __k) const
  	{
! 	  auto __x = _M_begin();
! 	  auto __y = _M_end();
! 	  while (__x)
! 	    {
! 	      if (_M_key_compare(_S_key(__x), __k))
! 		__x = _S_right(__x);
! 	      else if (_M_key_compare(__k, _S_key(__x)))
! 		{
! 		  __y = __x;
! 		  __x = _S_left(__x);
! 		}
! 	      else
! 		{
! 		  auto __xu(__x);
! 		  auto __yu(__y);
! 		  __y = __x;
! 		  __x = _S_left(__x);
! 		  __xu = _S_right(__xu);
! 		  return { const_iterator(_M_lower_bound_tr(__x, __y, __k)),
! 			 const_iterator(_M_upper_bound_tr(__xu, __yu, __k)) };
! 		}
! 	    }
! 	  return { const_iterator(__y), const_iterator(__y) };
  	}
  #endif // __glibcxx_generic_associative_lookup
  
diff -Nrcpad gcc-17-20260705/libstdc++-v3/include/bits/version.def gcc-17-20260712/libstdc++-v3/include/bits/version.def
*** gcc-17-20260705/libstdc++-v3/include/bits/version.def	Sun Jul  5 22:32:19 2026
--- gcc-17-20260712/libstdc++-v3/include/bits/version.def	Sun Jul 12 22:32:20 2026
*************** ftms = {
*** 89,94 ****
--- 89,97 ----
  };
  
  ftms = {
+   // 202106 P0401R6 Providing size feedback in the Allocator interface
+   // 202302 P2652R2 Disallow user specialization of allocator_traits
+   //        LWG3887 Version macro for allocate_at_least 
    name = allocate_at_least;
    values = {
      v = 202302;
diff -Nrcpad gcc-17-20260705/libstdc++-v3/include/std/format gcc-17-20260712/libstdc++-v3/include/std/format
*** gcc-17-20260705/libstdc++-v3/include/std/format	Sun Jul  5 22:32:19 2026
--- gcc-17-20260712/libstdc++-v3/include/std/format	Sun Jul 12 22:32:20 2026
*************** namespace __format
*** 4404,4415 ****
        template<typename _Visitor>
  	_GLIBCXX_CONSTEXPR_FORMAT decltype(auto)
  	visit(this basic_format_arg __arg, _Visitor&& __vis)
! 	{ return __arg._M_visit_user(std::forward<_Visitor>(__vis), __arg._M_type); }
  
        template<typename _Res, typename _Visitor>
  	_GLIBCXX_CONSTEXPR_FORMAT _Res
  	visit(this basic_format_arg __arg, _Visitor&& __vis)
! 	{ return __arg._M_visit_user(std::forward<_Visitor>(__vis), __arg._M_type); }
  #endif
  
      private:
--- 4404,4415 ----
        template<typename _Visitor>
  	_GLIBCXX_CONSTEXPR_FORMAT decltype(auto)
  	visit(this basic_format_arg __arg, _Visitor&& __vis)
! 	{ return __arg._M_visit_user(std::forward<_Visitor>(__vis)); }
  
        template<typename _Res, typename _Visitor>
  	_GLIBCXX_CONSTEXPR_FORMAT _Res
  	visit(this basic_format_arg __arg, _Visitor&& __vis)
! 	{ return __arg._M_visit_user(std::forward<_Visitor>(__vis)); }
  #endif
  
      private:
*************** namespace __format
*** 4622,4634 ****
  	friend consteval __format::_Arg_t
  	__format::__to_arg_t_enum() noexcept;
  
        template<typename _Visitor>
  	_GLIBCXX_CONSTEXPR_FORMAT decltype(auto)
! 	_M_visit(_Visitor&& __vis, __format::_Arg_t __type)
  	{
! 	  using namespace __format;
! 	  switch (__type)
  	  {
  	    case _Arg_none:
  	      return std::forward<_Visitor>(__vis)(_M_val._M_none);
  	    case _Arg_bool:
--- 4622,4638 ----
  	friend consteval __format::_Arg_t
  	__format::__to_arg_t_enum() noexcept;
  
+       [[__gnu__::__noinline__]]
+       handle
+       _M_handle_unrecognized() const;
+ 
        template<typename _Visitor>
  	_GLIBCXX_CONSTEXPR_FORMAT decltype(auto)
! 	_M_visit(_Visitor&& __vis)
  	{
! 	  switch (_M_type)
  	  {
+ 	    using enum __format::_Arg_t;
  	    case _Arg_none:
  	      return std::forward<_Visitor>(__vis)(_M_val._M_none);
  	    case _Arg_bool:
*************** namespace __format
*** 4693,4705 ****
  	      return std::forward<_Visitor>(__vis)(_M_val._M_u128);
  #endif
  	    default:
! 	      __builtin_unreachable();
  	  }
  	}
  
        template<typename _Visitor>
  	_GLIBCXX_CONSTEXPR_FORMAT decltype(auto)
! 	_M_visit_user(_Visitor&& __vis, __format::_Arg_t __type)
  	{
  	  return _M_visit([&__vis]<typename _Tp>(_Tp& __val) -> decltype(auto)
  	    {
--- 4697,4713 ----
  	      return std::forward<_Visitor>(__vis)(_M_val._M_u128);
  #endif
  	    default:
! 	      // Call exported definition of _M_handle_unrecognized from
! 	      // libstdc++.so, that should recognize new _Arg_t values and
! 	      // return basic_format_arg, containing a handle to that value.
! 	      handle __h = _M_handle_unrecognized();
! 	      return std::forward<_Visitor>(__vis)(__h);
  	  }
  	}
  
        template<typename _Visitor>
  	_GLIBCXX_CONSTEXPR_FORMAT decltype(auto)
! 	_M_visit_user(_Visitor&& __vis)
  	{
  	  return _M_visit([&__vis]<typename _Tp>(_Tp& __val) -> decltype(auto)
  	    {
*************** namespace __format
*** 4716,4722 ****
  		 handle __h(__val);
  		 return std::forward<_Visitor>(__vis)(__h);
  	       }
! 	   }, __type);
  	}
      };
  
--- 4724,4730 ----
  		 handle __h(__val);
  		 return std::forward<_Visitor>(__vis)(__h);
  	       }
! 	  });
  	}
      };
  
*************** namespace __format
*** 4724,4732 ****
      _GLIBCXX26_DEPRECATED_SUGGEST("std::basic_format_arg::visit")
      inline _GLIBCXX_CONSTEXPR_FORMAT decltype(auto)
      visit_format_arg(_Visitor&& __vis, basic_format_arg<_Context> __arg)
!     {
!       return __arg._M_visit_user(std::forward<_Visitor>(__vis), __arg._M_type);
!     }
  
  /// @cond undocumented
  namespace __format
--- 4732,4738 ----
      _GLIBCXX26_DEPRECATED_SUGGEST("std::basic_format_arg::visit")
      inline _GLIBCXX_CONSTEXPR_FORMAT decltype(auto)
      visit_format_arg(_Visitor&& __vis, basic_format_arg<_Context> __arg)
!     { return __arg._M_visit_user(std::forward<_Visitor>(__vis)); }
  
  /// @cond undocumented
  namespace __format
*************** namespace __format
*** 4734,4742 ****
    template<typename _Visitor, typename _Ctx>
      inline _GLIBCXX_CONSTEXPR_FORMAT decltype(auto)
      __visit_format_arg(_Visitor&& __vis, basic_format_arg<_Ctx> __arg)
!     {
!       return __arg._M_visit(std::forward<_Visitor>(__vis), __arg._M_type);
!     }
  
    struct _WidthPrecVisitor
    {
--- 4740,4746 ----
    template<typename _Visitor, typename _Ctx>
      inline _GLIBCXX_CONSTEXPR_FORMAT decltype(auto)
      __visit_format_arg(_Visitor&& __vis, basic_format_arg<_Ctx> __arg)
!     { return __arg._M_visit(std::forward<_Visitor>(__vis)); }
  
    struct _WidthPrecVisitor
    {
*************** namespace __format
*** 5069,5074 ****
--- 5073,5098 ----
        advance_to(iterator __it) { _M_out = std::move(__it); }
      };
  
+ #if _GLIBCXX_EXTERN_TEMPLATE
+    // The defintion _M_handle_unrecognized is placed in format-inst.cc
+    // source file, to ensure that it will not be inlined by compiler.
+    extern template basic_format_arg<format_context>::handle
+      basic_format_arg<format_context>::_M_handle_unrecognized() const;
+ # ifdef _GLIBCXX_USE_WCHAR_T
+    extern template basic_format_arg<wformat_context>::handle
+      basic_format_arg<wformat_context>::_M_handle_unrecognized() const;
+ # endif
+ #else
+   template<typename _Context>
+     typename basic_format_arg<_Context>::handle
+     basic_format_arg<_Context>::_M_handle_unrecognized() const
+     {
+       // If _M_type corresponds to a new value of _Arg_t introduced after
+       // GCC 16, this function should return a handle that refers to the 
+       // union member of _M_val corresponding to that _Arg_t value.	    
+       __throw_format_error("format error: unrecognized argument type");
+     }
+ #endif
  
  /// @cond undocumented
  namespace __format
*************** namespace __format
*** 5888,5893 ****
--- 5912,5919 ----
        constexpr void
        _M_parse()
        {
+ 	// _GLIBCXX_RESOLVE_LIB_DEFECTS
+ 	// 3892. Incorrect formatting of nested ranges and tuples
  	basic_format_parse_context<_CharT> __pc({});
  	if (_M_formatter.parse(__pc) != __pc.end())
  	  __format::__failed_to_parse_format_spec();
*************** namespace __format
*** 6174,6179 ****
--- 6200,6207 ----
  
  	 auto __parse_val = [&](_String_view __nfs = _String_view())
  	   {
+ 	     // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ 	     // 3892. Incorrect formatting of nested ranges and tuples
  	     basic_format_parse_context<_CharT> __npc(__nfs);
  	     if (_M_fval.parse(__npc) != __npc.end())
  	       __format::__failed_to_parse_format_spec();
diff -Nrcpad gcc-17-20260705/libstdc++-v3/include/std/mdspan gcc-17-20260712/libstdc++-v3/include/std/mdspan
*** gcc-17-20260705/libstdc++-v3/include/std/mdspan	Sun Jul  5 22:32:19 2026
--- gcc-17-20260712/libstdc++-v3/include/std/mdspan	Sun Jul 12 22:32:20 2026
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 1891,1897 ****
  	: _M_extents(__exts)
  	{
  	  for (size_t __i = 0; __i < extents_type::rank(); ++__i)
! 	    _M_strides[__i] = index_type(as_const(__strides[__i]));
  	}
  
        template<typename _OIndexType>
--- 1891,1898 ----
  	: _M_extents(__exts)
  	{
  	  for (size_t __i = 0; __i < extents_type::rank(); ++__i)
! 	    _M_strides[__i] =
! 	      __mdspan::__index_type_cast<index_type>(as_const(__strides[__i]));
  	}
  
        template<typename _OIndexType>
diff -Nrcpad gcc-17-20260705/libstdc++-v3/include/std/ranges gcc-17-20260712/libstdc++-v3/include/std/ranges
*** gcc-17-20260705/libstdc++-v3/include/std/ranges	Sun Jul  5 22:32:19 2026
--- gcc-17-20260712/libstdc++-v3/include/std/ranges	Sun Jul 12 22:32:20 2026
*************** namespace views::__adaptor
*** 7918,7931 ****
      requires copy_constructible<_Tp>
      : _M_value(__value), _M_bound(__bound)
      {
!       if constexpr (!same_as<_Bound, unreachable_sentinel_t>)
  	__glibcxx_assert(__bound >= 0);
      }
  
      constexpr explicit
      repeat_view(_Tp&& __value, _Bound __bound = _Bound())
      : _M_value(std::move(__value)), _M_bound(__bound)
!     { }
  
      template<typename... _Args, typename... _BoundArgs>
        requires constructible_from<_Tp, _Args...>
--- 7918,7934 ----
      requires copy_constructible<_Tp>
      : _M_value(__value), _M_bound(__bound)
      {
!       if constexpr (__detail::__is_signed_integer_like<_Bound>)
  	__glibcxx_assert(__bound >= 0);
      }
  
      constexpr explicit
      repeat_view(_Tp&& __value, _Bound __bound = _Bound())
      : _M_value(std::move(__value)), _M_bound(__bound)
!     {
!       if constexpr (__detail::__is_signed_integer_like<_Bound>)
! 	__glibcxx_assert(__bound >= 0);
!     }
  
      template<typename... _Args, typename... _BoundArgs>
        requires constructible_from<_Tp, _Args...>
*************** namespace views::__adaptor
*** 7936,7942 ****
  		tuple<_BoundArgs...> __bound_args = tuple<>{})
      : _M_value(std::make_from_tuple<_Tp>(std::move(__args))),
        _M_bound(std::make_from_tuple<_Bound>(std::move(__bound_args)))
!     { }
  
      constexpr _Iterator
      begin() const
--- 7939,7948 ----
  		tuple<_BoundArgs...> __bound_args = tuple<>{})
      : _M_value(std::make_from_tuple<_Tp>(std::move(__args))),
        _M_bound(std::make_from_tuple<_Bound>(std::move(__bound_args)))
!     {
!       if constexpr (__detail::__is_signed_integer_like<_Bound>)
! 	__glibcxx_assert(_M_bound >= 0);
!     }
  
      constexpr _Iterator
      begin() const
diff -Nrcpad gcc-17-20260705/libstdc++-v3/include/std/type_traits gcc-17-20260712/libstdc++-v3/include/std/type_traits
*** gcc-17-20260705/libstdc++-v3/include/std/type_traits	Sun Jul  5 22:32:19 2026
--- gcc-17-20260712/libstdc++-v3/include/std/type_traits	Sun Jul 12 22:32:20 2026
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 2849,2854 ****
--- 2849,2856 ----
      {
        using _Argval = __remove_cvref_t<_Arg>;
        using _MemPtr = _Res _Class::*;
+       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+       // 3655. The INVOKE operation and union types
        using type = typename __conditional_t<__or_<is_same<_Argval, _Class>,
          is_base_of<_Class, _Argval>>::value,
          __result_of_memobj_ref<_MemPtr, _Arg>,
diff -Nrcpad gcc-17-20260705/libstdc++-v3/include/tr1/bessel_function.tcc gcc-17-20260712/libstdc++-v3/include/tr1/bessel_function.tcc
*** gcc-17-20260705/libstdc++-v3/include/tr1/bessel_function.tcc	Sun Jul  5 22:32:19 2026
--- gcc-17-20260712/libstdc++-v3/include/tr1/bessel_function.tcc	Sun Jul 12 22:32:20 2026
*************** namespace tr1
*** 362,367 ****
--- 362,373 ----
      void
      __cyl_bessel_jn_asymp(_Tp __nu, _Tp __x, _Tp & __Jnu, _Tp & __Nnu)
      {
+       if (__builtin_expect(__builtin_isinf(__x), 0))
+ 	{
+ 	  __Jnu = __Nnu = _Tp(0);
+ 	  return;
+ 	}
+ 
        const _Tp __mu = _Tp(4) * __nu * __nu;
        const _Tp __8x = _Tp(8) * __x;
  
diff -Nrcpad gcc-17-20260705/libstdc++-v3/src/c++17/fs_ops.cc gcc-17-20260712/libstdc++-v3/src/c++17/fs_ops.cc
*** gcc-17-20260705/libstdc++-v3/src/c++17/fs_ops.cc	Sun Jul  5 22:32:19 2026
--- gcc-17-20260712/libstdc++-v3/src/c++17/fs_ops.cc	Sun Jul 12 22:32:20 2026
*************** namespace
*** 1257,1262 ****
--- 1257,1269 ----
  			      std::error_code& ec,
  			      fs::path& result)
    {
+     if (!fs::__detail::__is_handle_symlink(link_handle.handle, ec))
+       {
+ 	if (!ec)
+ 	  ec.assign(EINVAL, std::generic_category()); // not a symlink
+ 	return;
+       }
+ 
      PREPARSE_DATA_BUFFER reparse_buffer = nullptr;
      std::unique_ptr<char[]> big_buffer;
  
*************** fs::path fs::read_symlink(const path& p,
*** 1374,1396 ****
  #elif defined(_GLIBCXX_FILESYSTEM_IS_WINDOWS) \
        && defined(SYMBOLIC_LINK_FLAG_DIRECTORY)
    auto_win_file_handle link_handle(p.c_str(), ec, false);
!   if (!link_handle)
!     return result;
! 
!   int is_symlink = __detail::__is_handle_symlink(link_handle.handle);
!   if (is_symlink == -1)
!     {
!       ec = __last_system_error();
!       return result;
!     }
! 
!   if (!is_symlink)
!     {
!       ec.assign(EINVAL, std::generic_category());
!       return result;
!     }
! 
!   windows_read_symlink_handle(link_handle, ec, result);
  #else
    ec = std::make_error_code(std::errc::function_not_supported);
  #endif
--- 1381,1388 ----
  #elif defined(_GLIBCXX_FILESYSTEM_IS_WINDOWS) \
        && defined(SYMBOLIC_LINK_FLAG_DIRECTORY)
    auto_win_file_handle link_handle(p.c_str(), ec, false);
!   if (link_handle)
!     windows_read_symlink_handle(link_handle, ec, result);
  #else
    ec = std::make_error_code(std::errc::function_not_supported);
  #endif
diff -Nrcpad gcc-17-20260705/libstdc++-v3/src/c++20/format-inst.cc gcc-17-20260712/libstdc++-v3/src/c++20/format-inst.cc
*** gcc-17-20260705/libstdc++-v3/src/c++20/format-inst.cc	Sun Jul  5 22:32:19 2026
--- gcc-17-20260712/libstdc++-v3/src/c++20/format-inst.cc	Sun Jul 12 22:32:20 2026
***************
*** 27,32 ****
--- 27,51 ----
  namespace std
  {
  _GLIBCXX_BEGIN_NAMESPACE_VERSION
+ 
+   template<typename _Context>
+     typename basic_format_arg<_Context>::handle
+     basic_format_arg<_Context>::_M_handle_unrecognized() const
+     {
+       // If _M_type corresponds to a new value of _Arg_t introduced after GCC 16,
+       // this function should return a handle that refers to the union member of
+       // _M_val corresponding to that _Arg_t value.	    
+       __throw_format_error("format error: unrecognized argument type");
+     }
+ 
+  template basic_format_arg<format_context>::handle
+    basic_format_arg<format_context>::_M_handle_unrecognized() const;
+ 
+ # ifdef _GLIBCXX_USE_WCHAR_T
+  template basic_format_arg<wformat_context>::handle
+    basic_format_arg<wformat_context>::_M_handle_unrecognized() const;
+ # endif
+ 
  namespace __format
  {
  
diff -Nrcpad gcc-17-20260705/libstdc++-v3/src/filesystem/ops-common.h gcc-17-20260712/libstdc++-v3/src/filesystem/ops-common.h
*** gcc-17-20260705/libstdc++-v3/src/filesystem/ops-common.h	Sun Jul  5 22:32:19 2026
--- gcc-17-20260712/libstdc++-v3/src/filesystem/ops-common.h	Sun Jul 12 22:32:20 2026
*************** namespace __detail
*** 113,119 ****
  
    using stat_type = struct ::__stat64;
  
!   inline HANDLE __open_for_stat(const wchar_t* path, bool following_symlinks)
    {
      constexpr auto share_flags
        = FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE;
--- 113,121 ----
  
    using stat_type = struct ::__stat64;
  
!   inline HANDLE
!   __open_for_stat(const wchar_t* path, bool following_symlinks,
! 		  std::error_code& ec)
    {
      constexpr auto share_flags
        = FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE;
*************** namespace __detail
*** 124,133 ****
        = CreateFileW(path, 0, share_flags, 0, OPEN_EXISTING, file_flags, 0);
  
      if (handle == INVALID_HANDLE_VALUE)
!       {
! 	// CreateFileW does not set errno.
! 	errno = std::__last_system_error().default_error_condition().value();
!       }
  
      return handle;
    }
--- 126,132 ----
        = CreateFileW(path, 0, share_flags, 0, OPEN_EXISTING, file_flags, 0);
  
      if (handle == INVALID_HANDLE_VALUE)
!       ec = std::__last_system_error();
  
      return handle;
    }
*************** namespace __detail
*** 138,151 ****
    // to a symlink or directory, then fix the result of _fstat64 accordingly.
    enum class FileType { Err = -1, Dir = S_IFDIR, Link = S_IFLNK, Other = 0 };
  
!   inline FileType __check_handle_type(HANDLE handle, bool following_symlinks)
    {
  #ifdef SYMBOLIC_LINK_FLAG_DIRECTORY
      FILE_ATTRIBUTE_TAG_INFO type_info;
      if (!GetFileInformationByHandleEx(handle, FileAttributeTagInfo,
  				      &type_info, sizeof(type_info)))
        {
! 	errno = std::__last_system_error().default_error_condition().value();
  	return FileType::Err;
        }
      // A directory symlink has both DIRECTORY and REPARSE_POINT set,
--- 137,151 ----
    // to a symlink or directory, then fix the result of _fstat64 accordingly.
    enum class FileType { Err = -1, Dir = S_IFDIR, Link = S_IFLNK, Other = 0 };
  
!   inline FileType
!   __check_handle_type(HANDLE handle, bool following_symlinks, error_code& ec)
    {
  #ifdef SYMBOLIC_LINK_FLAG_DIRECTORY
      FILE_ATTRIBUTE_TAG_INFO type_info;
      if (!GetFileInformationByHandleEx(handle, FileAttributeTagInfo,
  				      &type_info, sizeof(type_info)))
        {
! 	ec = std::__last_system_error();
  	return FileType::Err;
        }
      // A directory symlink has both DIRECTORY and REPARSE_POINT set,
*************** namespace __detail
*** 160,191 ****
      return FileType::Other;
    }
  
!   // -1 error, 0 not a symlink, 1 a symlink
!   inline int __is_handle_symlink(HANDLE handle)
    {
!     FileType type = __check_handle_type(handle, false);
!     if (type == FileType::Err)
!       return -1;
!     return type == FileType::Link;
    }
  
!   inline int __stat_windows(const wchar_t* path, stat_type* buffer,
! 			    bool following_symlinks)
    {
!     HANDLE handle = __open_for_stat(path, following_symlinks);
      if (handle == INVALID_HANDLE_VALUE)
!       return -1;
      // Manually check for directory or symlink, because _fstat does not.
!     FileType type = __check_handle_type(handle, following_symlinks);
      if (type == FileType::Err)
        {
  	CloseHandle(handle);
  	return -1;
        }
      int fd = ::_open_osfhandle((intptr_t)handle, _O_RDONLY);
      if (fd == -1)
        {
  	CloseHandle(handle);
  	return -1;
        }
      int stat_result = ::_fstat64(fd, buffer);
--- 160,196 ----
      return FileType::Other;
    }
  
!   // If no error occurs and `handle` represents a symlink, returns true.
!   // Otherwise, returns false. Sets `ec` if an error occurred.
!   inline bool __is_handle_symlink(HANDLE handle, std::error_code& ec)
    {
!     return __check_handle_type(handle, false, ec) == FileType::Link;
    }
  
!   inline int
!   __stat_windows(const wchar_t* path, stat_type* buffer,
! 		 bool following_symlinks)
    {
!     std::error_code ec;
!     HANDLE handle = __open_for_stat(path, following_symlinks, ec);
      if (handle == INVALID_HANDLE_VALUE)
!       {
! 	errno = ec.default_error_condition().value();
! 	return -1;
!       }
      // Manually check for directory or symlink, because _fstat does not.
!     FileType type = __check_handle_type(handle, following_symlinks, ec);
      if (type == FileType::Err)
        {
  	CloseHandle(handle);
+ 	errno = ec.default_error_condition().value();
  	return -1;
        }
      int fd = ::_open_osfhandle((intptr_t)handle, _O_RDONLY);
      if (fd == -1)
        {
  	CloseHandle(handle);
+ 	errno = ec.default_error_condition().value();
  	return -1;
        }
      int stat_result = ::_fstat64(fd, buffer);
diff -Nrcpad gcc-17-20260705/libstdc++-v3/testsuite/20_util/has_unique_object_representations/neg.cc gcc-17-20260712/libstdc++-v3/testsuite/20_util/has_unique_object_representations/neg.cc
*** gcc-17-20260705/libstdc++-v3/testsuite/20_util/has_unique_object_representations/neg.cc	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/libstdc++-v3/testsuite/20_util/has_unique_object_representations/neg.cc	Sun Jul 12 22:32:20 2026
***************
*** 0 ****
--- 1,15 ----
+ // { dg-do compile { target c++17 } }
+ 
+ #include <type_traits>
+ 
+ struct Incomplete;
+ 
+ static_assert(std::has_unique_object_representations_v<Incomplete>);       // { dg-error "here" }
+ static_assert(std::has_unique_object_representations_v<const Incomplete>); // { dg-error "here" }
+ static_assert(std::has_unique_object_representations_v<Incomplete[10]>);   // { dg-error "here" }
+ static_assert(std::has_unique_object_representations_v<Incomplete[]>);     // { dg-error "here" }
+ 
+ // { dg-prune-output "invalid use of incomplete type" }
+ // { dg-prune-output "template argument must be a complete" }
+ // { dg-prune-output "'value' is not a member of 'std::has_unique_object_representations" }
+ // { dg-prune-output "static assertion" }
diff -Nrcpad gcc-17-20260705/libstdc++-v3/testsuite/23_containers/map/operations/hetero/equal_range.cc gcc-17-20260712/libstdc++-v3/testsuite/23_containers/map/operations/hetero/equal_range.cc
*** gcc-17-20260705/libstdc++-v3/testsuite/23_containers/map/operations/hetero/equal_range.cc	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/libstdc++-v3/testsuite/23_containers/map/operations/hetero/equal_range.cc	Sun Jul 12 22:32:20 2026
***************
*** 0 ****
--- 1,90 ----
+ // { dg-do run { target c++14 } }
+ 
+ #include <map>
+ #include <string>
+ #include <utility>
+ #include <functional>
+ #include <testsuite_hooks.h>
+ 
+ struct Z;
+ 
+ struct X {
+   std::string s;
+   X(std::string str) : s(str) {}
+   X(Z&&);
+   X(const Z&);
+   friend bool operator<(X const& a, X const& b) { return a.s < b.s; }
+   friend bool operator==(X const& a, X const& b) { return a.s == b.s; }
+ };
+ 
+ using cmp = std::less<void>;
+ 
+ struct Z {
+   std::string s;
+   mutable int compares = 0;
+ 
+   Z() = default;
+   Z(Z&& z) : s(std::move(z.s)) { z.s.clear(); }
+   Z(const Z& z) = default;
+   Z& operator=(Z&& z) { s = std::move(z.s); z.s.clear(); return *this; }
+   Z& operator=(const Z& z) = default;
+   Z(std::string s) : s(s) {}
+   Z(int n) : s(std::string(n, 'a')) {}
+   friend bool operator<(Z const& a, Z const& b) { return a.s < b.s; }
+   friend bool operator<(X const& a, Z const& b)
+     { return ++b.compares, a.s.substr(0, b.s.size()) < b.s; }
+   friend bool operator<(Z const& a, X const& b)
+     { return ++a.compares, a.s < b.s.substr(0, a.s.size()); }
+ };
+ 
+ X::X(Z&& z) : s(std::move(z.s)) { z.s.clear(); }
+ X::X(const Z& z) : s(z.s) {}
+ 
+ // A heterogeneous key type like Z here that compares equal
+ // if it matches just the first part of the key is allowed.
+ 
+ template <typename T>
+ T populate(T a)
+ {
+   const std::string vs[] = { "dec", "ded", "dee", "def", "deg", "deh", "dei" };
+   for (auto const& v : vs)
+     a[v] = v+v;
+   return a;
+ }
+ 
+ void test_equal_range()
+ {
+   std::map<X, std::string, cmp> amap{cmp{}};
+   amap.insert({{X{"abc"}, {"xyz"}}, {X{"def"}, {"uvw"}}, {X{"ghi"}, {"rst"}}});
+ 
+   {
+     auto a = populate(amap);
+     VERIFY(a.size() == 9);
+     Z z{"de"};
+     auto it = a.equal_range(z);
+     VERIFY(it.first != a.end());
+     VERIFY(it.second != a.end());
+     VERIFY(it.first->first == std::string("dec"));
+     VERIFY(it.second->first == std::string("ghi"));
+ 
+     VERIFY(z.compares == 7);
+   }
+   {
+     auto a = populate(amap);
+     VERIFY(a.size() == 9);
+     Z z{"de"};
+     auto const& ca = a;
+     auto it = ca.equal_range(z);
+     VERIFY(it.first  != ca.end());
+     VERIFY(it.second != ca.end());
+     VERIFY(it.first->first  == std::string("dec"));
+     VERIFY(it.second->first == std::string("ghi"));
+ 
+     VERIFY(z.compares == 7);
+   }
+ }
+ 
+ int main()
+ {
+   test_equal_range();
+ }
diff -Nrcpad gcc-17-20260705/libstdc++-v3/testsuite/23_containers/mdspan/layouts/stride_neg.cc gcc-17-20260712/libstdc++-v3/testsuite/23_containers/mdspan/layouts/stride_neg.cc
*** gcc-17-20260705/libstdc++-v3/testsuite/23_containers/mdspan/layouts/stride_neg.cc	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/libstdc++-v3/testsuite/23_containers/mdspan/layouts/stride_neg.cc	Sun Jul 12 22:32:20 2026
***************
*** 0 ****
--- 1,31 ----
+ // { dg-do compile { target c++23 } }
+ #include <mdspan>
+ 
+ #include "../layout_traits.h"
+ #include <cstdint>
+ 
+ constexpr size_t dyn = std::dynamic_extent;
+ 
+ constexpr bool
+ test_stride_overflow()
+ {
+   auto exts = std::extents<uint8_t, dyn, dyn>(1, 3);
+   auto n = size_t(1) << 9;
+   auto m = std::layout_stride::mapping(exts, std::array{n, 1zu}); // { dg-error "expansion of" }
+   (void) m;
+   return true;
+ }
+ static_assert(test_stride_overflow()); // { dg-error "expansion of" }
+ 
+ constexpr bool
+ test_stride_negative()
+ {
+   auto exts = std::extents<std::size_t, dyn, dyn>(1, 3);
+   auto m = std::layout_stride::mapping(exts, std::array{1, -4}); // { dg-error "expansion of" } 
+   (void) m;
+   return true;
+ }
+ static_assert(test_stride_negative()); // { dg-error "expansion of" } 
+ 
+ // { dg-prune-output "non-constant condition for static assertion" }
+ // { dg-prune-output "__glibcxx_assert_fail()" }
diff -Nrcpad gcc-17-20260705/libstdc++-v3/testsuite/23_containers/multimap/operations/hetero/equal_range.cc gcc-17-20260712/libstdc++-v3/testsuite/23_containers/multimap/operations/hetero/equal_range.cc
*** gcc-17-20260705/libstdc++-v3/testsuite/23_containers/multimap/operations/hetero/equal_range.cc	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/libstdc++-v3/testsuite/23_containers/multimap/operations/hetero/equal_range.cc	Sun Jul 12 22:32:20 2026
***************
*** 0 ****
--- 1,90 ----
+ // { dg-do run { target c++14 } }
+ 
+ #include <map>
+ #include <string>
+ #include <utility>
+ #include <functional>
+ #include <testsuite_hooks.h>
+ 
+ struct Z;
+ 
+ struct X {
+   std::string s;
+   X(std::string str) : s(str) {}
+   X(Z&&);
+   X(const Z&);
+   friend bool operator<(X const& a, X const& b) { return a.s < b.s; }
+   friend bool operator==(X const& a, X const& b) { return a.s == b.s; }
+ };
+ 
+ using cmp = std::less<void>;
+ 
+ struct Z {
+   std::string s;
+   mutable int compares = 0;
+ 
+   Z() = default;
+   Z(Z&& z) : s(std::move(z.s)) { z.s.clear(); }
+   Z(const Z& z) = default;
+   Z& operator=(Z&& z) { s = std::move(z.s); z.s.clear(); return *this; }
+   Z& operator=(const Z& z) = default;
+   Z(std::string sv) : s(sv) {}
+   Z(int n) : s(std::string(n, 'a')) {}
+   friend bool operator<(Z const& a, Z const& b) { return a.s < b.s; }
+   friend bool operator<(X const& a, Z const& b)
+     { return ++b.compares, a.s.substr(0, b.s.size()) < b.s; }
+   friend bool operator<(Z const& a, X const& b)
+     { return ++a.compares, a.s < b.s.substr(0, a.s.size()); }
+ };
+ 
+ X::X(Z&& z) : s(std::move(z.s)) { z.s.clear(); }
+ X::X(const Z& z) : s(z.s) {}
+ 
+ // A heterogeneous key type like Z here that compares equal
+ // if it matches just the first part of the key is allowed.
+ 
+ template <typename T>
+ T populate(T a)
+ {
+   const std::string vs[] = { "dec", "ded", "dee", "def", "deg", "deh", "dei" };
+   for (auto const& v : vs)
+     a.insert({X{v}, {v+v}});
+   return a;
+ }
+ 
+ void test_equal_range()
+ {
+   std::multimap<X, std::string, cmp> amap{cmp{}};
+   amap.insert({{X{"abc"}, {"xyz"}}, {X{"def"}, {"uvw"}}, {X{"ghi"}, {"rst"}}});
+ 
+   {
+     auto a = populate(amap);
+     VERIFY(a.size() == 10);
+     Z z{"de"};
+     auto it = a.equal_range(z);
+     VERIFY(it.first != a.end());
+     VERIFY(it.second != a.end());
+     VERIFY(it.first->first == std::string("dec"));
+     VERIFY(it.second->first == std::string("ghi"));
+ 
+     VERIFY(z.compares == 7);
+   }
+   {
+     auto a = populate(amap);
+     VERIFY(a.size() == 10);
+     Z z{"de"};
+     auto const& ca = a;
+     auto it = ca.equal_range(z);
+     VERIFY(it.first  != ca.end());
+     VERIFY(it.second != ca.end());
+     VERIFY(it.first->first  == std::string("dec"));
+     VERIFY(it.second->first == std::string("ghi"));
+ 
+     VERIFY(z.compares == 7);
+   }
+ }
+ 
+ int main()
+ {
+   test_equal_range();
+ }
diff -Nrcpad gcc-17-20260705/libstdc++-v3/testsuite/23_containers/multiset/operations/hetero/equal_range.cc gcc-17-20260712/libstdc++-v3/testsuite/23_containers/multiset/operations/hetero/equal_range.cc
*** gcc-17-20260705/libstdc++-v3/testsuite/23_containers/multiset/operations/hetero/equal_range.cc	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/libstdc++-v3/testsuite/23_containers/multiset/operations/hetero/equal_range.cc	Sun Jul 12 22:32:20 2026
***************
*** 0 ****
--- 1,90 ----
+ // { dg-do run { target c++14 } }
+ 
+ #include <set>
+ #include <string>
+ #include <utility>
+ #include <functional>
+ #include <testsuite_hooks.h>
+ 
+ struct Z;
+ 
+ struct X {
+   std::string s;
+   X(std::string str) : s(str) {}
+   X(Z&&);
+   X(const Z&);
+   friend bool operator<(X const& a, X const& b) { return a.s < b.s; }
+   friend bool operator==(X const& a, X const& b) { return a.s == b.s; }
+ };
+ 
+ using cmp = std::less<void>;
+ 
+ struct Z {
+   std::string s;
+   mutable int compares = 0;
+ 
+   Z() = default;
+   Z(Z&& z) : s(std::move(z.s)) { z.s.clear(); }
+   Z(const Z& z) = default;
+   Z& operator=(Z&& z) { s = std::move(z.s); z.s.clear(); return *this; }
+   Z& operator=(const Z& z) = default;
+   Z(std::string sv) : s(sv) {}
+   Z(int n) : s(std::string(n, 'a')) {}
+   friend bool operator<(Z const& a, Z const& b) { return a.s < b.s; }
+   friend bool operator<(X const& a, Z const& b)
+     { return ++b.compares, a.s.substr(0, b.s.size()) < b.s; }
+   friend bool operator<(Z const& a, X const& b)
+     { return ++a.compares, a.s < b.s.substr(0, a.s.size()); }
+ };
+ 
+ X::X(Z&& z) : s(std::move(z.s)) { z.s.clear(); }
+ X::X(const Z& z) : s(z.s) {}
+ 
+ // A heterogeneous key type like Z here that compares equal
+ // if it matches just the first part of the key is allowed.
+ 
+ template <typename T>
+ T populate(T a)
+ {
+   const std::string vs[] = { "dec", "ded", "dee", "def", "deg", "deh", "dei" };
+   for (auto const& v : vs)
+     a.insert(X{v});
+   return a;
+ }
+ 
+ void test_equal_range()
+ {
+   std::multiset<X, cmp> aset{cmp{}};
+   aset.insert({X{"abc"}, X{"def"}, X{"ghi"}});
+ 
+   {
+     auto a = populate(aset);
+     VERIFY(a.size() == 10);
+     Z z{"de"};
+     auto it = a.equal_range(z);
+     VERIFY(it.first != a.end());
+     VERIFY(it.second != a.end());
+     VERIFY(*it.first == std::string("dec"));
+     VERIFY(*it.second == std::string("ghi"));
+ 
+     VERIFY(z.compares == 7);
+   }
+   {
+     auto a = populate(aset);
+     VERIFY(a.size() == 10);
+     Z z{"de"};
+     auto const& ca = a;
+     auto it = ca.equal_range(z);
+     VERIFY(it.first  != ca.end());
+     VERIFY(it.second != ca.end());
+     VERIFY(*it.first  == std::string("dec"));
+     VERIFY(*it.second == std::string("ghi"));
+ 
+     VERIFY(z.compares == 7);
+   }
+ }
+ 
+ int main()
+ {
+   test_equal_range();
+ }
diff -Nrcpad gcc-17-20260705/libstdc++-v3/testsuite/23_containers/set/operations/hetero/equal_range.cc gcc-17-20260712/libstdc++-v3/testsuite/23_containers/set/operations/hetero/equal_range.cc
*** gcc-17-20260705/libstdc++-v3/testsuite/23_containers/set/operations/hetero/equal_range.cc	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/libstdc++-v3/testsuite/23_containers/set/operations/hetero/equal_range.cc	Sun Jul 12 22:32:20 2026
***************
*** 0 ****
--- 1,90 ----
+ // { dg-do run { target c++14 } }
+ 
+ #include <set>
+ #include <string>
+ #include <utility>
+ #include <functional>
+ #include <testsuite_hooks.h>
+ 
+ struct Z;
+ 
+ struct X {
+   std::string s;
+   X(std::string str) : s(str) {}
+   X(Z&&);
+   X(const Z&);
+   friend bool operator<(X const& a, X const& b) { return a.s < b.s; }
+   friend bool operator==(X const& a, X const& b) { return a.s == b.s; }
+ };
+ 
+ using cmp = std::less<void>;
+ 
+ struct Z {
+   std::string s;
+   mutable int compares = 0;
+ 
+   Z() = default;
+   Z(Z&& z) : s(std::move(z.s)) { z.s.clear(); }
+   Z(const Z& z) = default;
+   Z& operator=(Z&& z) { s = std::move(z.s); z.s.clear(); return *this; }
+   Z& operator=(const Z& z) = default;
+   Z(std::string sv) : s(sv) {}
+   Z(int n) : s(std::string(n, 'a')) {}
+   friend bool operator<(Z const& a, Z const& b) { return a.s < b.s; }
+   friend bool operator<(X const& a, Z const& b)
+     { return ++b.compares, a.s.substr(0, b.s.size()) < b.s; }
+   friend bool operator<(Z const& a, X const& b)
+     { return ++a.compares, a.s < b.s.substr(0, a.s.size()); }
+ };
+ 
+ X::X(Z&& z) : s(std::move(z.s)) { z.s.clear(); }
+ X::X(const Z& z) : s(z.s) {}
+ 
+ // A heterogeneous key type like Z here that compares equal
+ // if it matches just the first part of the key is allowed.
+ 
+ template <typename T>
+ T populate(T a)
+ {
+   const std::string vs[] = { "dec", "ded", "dee", "def", "deg", "deh", "dei" };
+   for (auto const& v : vs)
+     a.insert(X{v});
+   return a;
+ }
+ 
+ void test_equal_range()
+ {
+   std::set<X, cmp> aset{cmp{}};
+   aset.insert({X{"abc"}, X{"def"}, X{"ghi"}});
+ 
+   {
+     auto a = populate(aset);
+     VERIFY(a.size() == 9);
+     Z z{"de"};
+     auto it = a.equal_range(z);
+     VERIFY(it.first != a.end());
+     VERIFY(it.second != a.end());
+     VERIFY(*it.first == std::string("dec"));
+     VERIFY(*it.second == std::string("ghi"));
+ 
+     VERIFY(z.compares == 7);
+   }
+   {
+     auto a = populate(aset);
+     VERIFY(a.size() == 9);
+     Z z{"de"};
+     auto const& ca = a;
+     auto it = ca.equal_range(z);
+     VERIFY(it.first  != ca.end());
+     VERIFY(it.second != ca.end());
+     VERIFY(*it.first  == std::string("dec"));
+     VERIFY(*it.second == std::string("ghi"));
+ 
+     VERIFY(z.compares == 7);
+   }
+ }
+ 
+ int main()
+ {
+   test_equal_range();
+ }
diff -Nrcpad gcc-17-20260705/libstdc++-v3/testsuite/special_functions/08_cyl_bessel_j/check_inf.cc gcc-17-20260712/libstdc++-v3/testsuite/special_functions/08_cyl_bessel_j/check_inf.cc
*** gcc-17-20260705/libstdc++-v3/testsuite/special_functions/08_cyl_bessel_j/check_inf.cc	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/libstdc++-v3/testsuite/special_functions/08_cyl_bessel_j/check_inf.cc	Sun Jul 12 22:32:21 2026
***************
*** 0 ****
--- 1,38 ----
+ // { dg-do run { target c++11 } }
+ // { dg-require-c-std "" }
+ // { dg-options "-D__STDCPP_WANT_MATH_SPEC_FUNCS__" }
+ // { dg-add-options ieee }
+ 
+ // ISO/IEC IS 29124 8.1.8 cyl_bessel_j
+ // J_nu(+inf) == 0 for all finite nu >= 0
+ 
+ #include <cmath>
+ #include <limits>
+ #include <testsuite_hooks.h>
+ 
+ void
+ test01()
+ {
+   float xinf_f = std::numeric_limits<float>::infinity();
+   double xinf_d = std::numeric_limits<double>::infinity();
+   long double xinf_l = std::numeric_limits<long double>::infinity();
+ 
+   VERIFY(std::cyl_bessel_j(0.0F, xinf_f) == 0.0F);
+   VERIFY(std::cyl_bessel_jf(0.0F, xinf_f) == 0.0F);
+   VERIFY(std::cyl_bessel_j(0.0, xinf_d) == 0.0);
+   VERIFY(std::cyl_bessel_j(0.0L, xinf_l) == 0.0L);
+   VERIFY(std::cyl_bessel_jl(0.0L, xinf_l) == 0.0L);
+ 
+   VERIFY(std::cyl_bessel_j(1.0F, xinf_f) == 0.0F);
+   VERIFY(std::cyl_bessel_j(1.0, xinf_d) == 0.0);
+   VERIFY(std::cyl_bessel_j(1.0L, xinf_l) == 0.0L);
+ 
+   VERIFY(std::cyl_bessel_j(2.5, xinf_d) == 0.0);
+ }
+ 
+ int
+ main()
+ {
+   test01();
+   return 0;
+ }
diff -Nrcpad gcc-17-20260705/libstdc++-v3/testsuite/special_functions/10_cyl_neumann/check_inf.cc gcc-17-20260712/libstdc++-v3/testsuite/special_functions/10_cyl_neumann/check_inf.cc
*** gcc-17-20260705/libstdc++-v3/testsuite/special_functions/10_cyl_neumann/check_inf.cc	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/libstdc++-v3/testsuite/special_functions/10_cyl_neumann/check_inf.cc	Sun Jul 12 22:32:21 2026
***************
*** 0 ****
--- 1,38 ----
+ // { dg-do run { target c++11 } }
+ // { dg-require-c-std "" }
+ // { dg-options "-D__STDCPP_WANT_MATH_SPEC_FUNCS__" }
+ // { dg-add-options ieee }
+ 
+ // ISO/IEC IS 29124 8.1.10 cyl_neumann
+ // N_nu(+inf) == 0 for all finite nu >= 0
+ 
+ #include <cmath>
+ #include <limits>
+ #include <testsuite_hooks.h>
+ 
+ void
+ test01()
+ {
+   float xinf_f = std::numeric_limits<float>::infinity();
+   double xinf_d = std::numeric_limits<double>::infinity();
+   long double xinf_l = std::numeric_limits<long double>::infinity();
+ 
+   VERIFY(std::cyl_neumann(0.0F, xinf_f) == 0.0F);
+   VERIFY(std::cyl_neumannf(0.0F, xinf_f) == 0.0F);
+   VERIFY(std::cyl_neumann(0.0, xinf_d) == 0.0);
+   VERIFY(std::cyl_neumann(0.0L, xinf_l) == 0.0L);
+   VERIFY(std::cyl_neumannl(0.0L, xinf_l) == 0.0L);
+ 
+   VERIFY(std::cyl_neumann(1.0F, xinf_f) == 0.0F);
+   VERIFY(std::cyl_neumann(1.0, xinf_d) == 0.0);
+   VERIFY(std::cyl_neumann(1.0L, xinf_l) == 0.0L);
+ 
+   VERIFY(std::cyl_neumann(2.5, xinf_d) == 0.0);
+ }
+ 
+ int
+ main()
+ {
+   test01();
+   return 0;
+ }
diff -Nrcpad gcc-17-20260705/libstdc++-v3/testsuite/std/memory/start_lifetime_as/neg.cc gcc-17-20260712/libstdc++-v3/testsuite/std/memory/start_lifetime_as/neg.cc
*** gcc-17-20260705/libstdc++-v3/testsuite/std/memory/start_lifetime_as/neg.cc	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/libstdc++-v3/testsuite/std/memory/start_lifetime_as/neg.cc	Sun Jul 12 22:32:21 2026
***************
*** 0 ****
--- 1,45 ----
+ // { dg-do compile { target c++23 } }
+ 
+ #include <bit>
+ #include <memory>
+ 
+ #include <testsuite_hooks.h>
+ #include <testsuite_allocator.h>
+ 
+ struct Incomplete;
+ struct NonTrivial
+ {
+   NonTrivial() {}
+   ~NonTrivial() {}
+ };
+ 
+ void test(void* p)
+ {
+   (void)std::start_lifetime_as<Incomplete>(p);           // { dg-error "here" }
+   (void)std::start_lifetime_as_array<Incomplete>(p, 2);  // { dg-error "here" }
+   (void)std::start_lifetime_as<NonTrivial>(p);           // { dg-error "here" }
+   // Arrays are implicit-lifetime regardless of their element type
+   (void)std::start_lifetime_as_array<NonTrivial>(p, 2);
+ 
+   const void* cp = p;
+   (void)std::start_lifetime_as<Incomplete>(cp);           // { dg-error "here" }
+   (void)std::start_lifetime_as_array<Incomplete>(cp, 2);  // { dg-error "here" }
+   (void)std::start_lifetime_as<NonTrivial>(cp);           // { dg-error "here" }
+   (void)std::start_lifetime_as_array<NonTrivial>(cp, 2);
+ 
+   volatile void* vp = p;
+   (void)std::start_lifetime_as<Incomplete>(vp);           // { dg-error "here" }
+   (void)std::start_lifetime_as_array<Incomplete>(vp, 2);  // { dg-error "here" }
+   (void)std::start_lifetime_as<NonTrivial>(vp);           // { dg-error "here" }
+   (void)std::start_lifetime_as_array<NonTrivial>(vp, 2);
+ 
+   const volatile void* cvp = vp;
+   (void)std::start_lifetime_as<Incomplete>(cvp);           // { dg-error "here" }
+   (void)std::start_lifetime_as_array<Incomplete>(cvp, 2);  // { dg-error "here" }
+   (void)std::start_lifetime_as<NonTrivial>(cvp);           // { dg-error "here" }
+   (void)std::start_lifetime_as_array<NonTrivial>(cvp, 2);
+ }
+ 
+ // { dg-prune-output "incomplete type" }
+ // { dg-prune-output "template argument must be a complete type" }
+ // { dg-prune-output "static assertion" }
diff -Nrcpad gcc-17-20260705/libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/09_cyl_bessel_j/check_inf.cc gcc-17-20260712/libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/09_cyl_bessel_j/check_inf.cc
*** gcc-17-20260705/libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/09_cyl_bessel_j/check_inf.cc	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/09_cyl_bessel_j/check_inf.cc	Sun Jul 12 22:32:21 2026
***************
*** 0 ****
--- 1,36 ----
+ // { dg-require-c-std "" }
+ // { dg-add-options ieee }
+ 
+ // TR1 5.2.1.9 cyl_bessel_j
+ // J_nu(+inf) == 0 for all finite nu >= 0
+ 
+ #include <tr1/cmath>
+ #include <limits>
+ #include <testsuite_hooks.h>
+ 
+ void
+ test01()
+ {
+   float xinf_f = std::numeric_limits<float>::infinity();
+   double xinf_d = std::numeric_limits<double>::infinity();
+   long double xinf_l = std::numeric_limits<long double>::infinity();
+ 
+   VERIFY(std::tr1::cyl_bessel_j(0.0F, xinf_f) == 0.0F);
+   VERIFY(std::tr1::cyl_bessel_jf(0.0F, xinf_f) == 0.0F);
+   VERIFY(std::tr1::cyl_bessel_j(0.0, xinf_d) == 0.0);
+   VERIFY(std::tr1::cyl_bessel_j(0.0L, xinf_l) == 0.0L);
+   VERIFY(std::tr1::cyl_bessel_jl(0.0L, xinf_l) == 0.0L);
+ 
+   VERIFY(std::tr1::cyl_bessel_j(1.0F, xinf_f) == 0.0F);
+   VERIFY(std::tr1::cyl_bessel_j(1.0, xinf_d) == 0.0);
+   VERIFY(std::tr1::cyl_bessel_j(1.0L, xinf_l) == 0.0L);
+ 
+   VERIFY(std::tr1::cyl_bessel_j(2.5, xinf_d) == 0.0);
+ }
+ 
+ int
+ main()
+ {
+   test01();
+   return 0;
+ }
diff -Nrcpad gcc-17-20260705/libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/11_cyl_neumann/check_inf.cc gcc-17-20260712/libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/11_cyl_neumann/check_inf.cc
*** gcc-17-20260705/libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/11_cyl_neumann/check_inf.cc	Thu Jan  1 00:00:00 1970
--- gcc-17-20260712/libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/11_cyl_neumann/check_inf.cc	Sun Jul 12 22:32:21 2026
***************
*** 0 ****
--- 1,37 ----
+ // { dg-require-c-std "" }
+ // { dg-add-options ieee }
+ 
+ // TR1 5.2.1.11 cyl_neumann
+ // N_nu(+inf) == 0 for all finite nu >= 0
+ 
+ #include <tr1/cmath>
+ #include <limits>
+ #include <testsuite_hooks.h>
+ 
+ void
+ test01()
+ {
+   float xinf_f = std::numeric_limits<float>::infinity();
+   double xinf_d = std::numeric_limits<double>::infinity();
+   long double xinf_l = std::numeric_limits<long double>::infinity();
+ 
+   VERIFY(std::tr1::cyl_neumann(0.0F, xinf_f) == 0.0F);
+   VERIFY(std::tr1::cyl_neumannf(0.0F, xinf_f) == 0.0F);
+   VERIFY(std::tr1::cyl_neumann(0.0, xinf_d) == 0.0);
+   VERIFY(std::tr1::cyl_neumann(0.0L, xinf_l) == 0.0L);
+   VERIFY(std::tr1::cyl_neumannl(0.0L, xinf_l) == 0.0L);
+ 
+   VERIFY(std::tr1::cyl_neumann(1.0F, xinf_f) == 0.0F);
+   VERIFY(std::tr1::cyl_neumann(1.0, xinf_d) == 0.0);
+   VERIFY(std::tr1::cyl_neumann(1.0L, xinf_l) == 0.0L);
+ 
+   VERIFY(std::tr1::cyl_neumann(2.5, xinf_d) == 0.0);
+ }
+ 
+ int
+ main()
+ {
+   test01();
+   return 0;
+ }
+ 
